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 --- 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 + 822 files changed, 193820 insertions(+) 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 (limited to 'lib') diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 0000000..24644e3 --- /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 0000000..b7a5d31 --- /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 0000000..a8cc568 --- /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 0000000..3d4f88b --- /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 0000000..3988d28 --- /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 0000000..e36a513 --- /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 0000000..d7b067e --- /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 0000000..714a3c6 --- /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 0000000..a523898 --- /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 0000000..cd29b66 --- /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 0000000..c1496ca --- /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 0000000..c1a7f5d --- /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 0000000..fbd5996 --- /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 0000000..a9b81d5 --- /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 0000000..7bd3b1e --- /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 0000000..2288e3d --- /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 0000000..63d55f8 --- /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 0000000..4bd0081 --- /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 0000000..8c72660 --- /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 0000000..08f489c --- /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 0000000..6c31eeb --- /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 0000000..0adadc3 --- /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 0000000..82238df --- /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 0000000..915dce2 --- /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 0000000..6782b99 --- /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 0000000..129e030 --- /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 0000000..5a35c83 --- /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 0000000..3bcff76 --- /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 0000000..3672a80 --- /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 0000000..74ceb8f --- /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 0000000..f468ff6 --- /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 0000000..4d35764 --- /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 0000000..3d873ac --- /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 0000000..06cda52 --- /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 0000000..f24f576 --- /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 0000000..0a1c6ab --- /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 0000000..d5220cb --- /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 0000000..cb2263e --- /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 0000000..6e39706 --- /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 0000000..7fd46f8 --- /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 0000000..b7d899b --- /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 0000000..f1b51af --- /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 0000000..b7e824f --- /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 0000000..93da170 --- /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 0000000..1772a50 --- /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 0000000..9f4c181 --- /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 0000000..f633ad8 --- /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 0000000..9111c7a --- /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 0000000..7905e61 --- /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 0000000..7d92b0a --- /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 0000000..52f0a50 --- /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 0000000..efca0f0 --- /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 0000000..0851d8a --- /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 0000000..e184dd0 --- /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 0000000..a4782d4 --- /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 0000000..7b528e8 --- /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 0000000..7495794 --- /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 0000000..5ed5556 --- /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 0000000..3ea1d5b --- /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 0000000..60f247e --- /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 0000000..7f8f604 --- /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 0000000..f323055 --- /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 0000000..dc6eda1 --- /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 0000000..d78900a --- /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 0000000..4cafb2f --- /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 0000000..c31d204 --- /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 0000000..4c68f11 --- /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 0000000..014c853 --- /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 0000000..197898d --- /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 0000000..864b215 --- /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 0000000..718093d --- /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 0000000..85c454b --- /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 0000000..0a496cb --- /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 0000000..3acdcc8 --- /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 0000000..7923d06 --- /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 0000000..09ff8c9 --- /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 0000000..5dfd710 --- /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 0000000..8d082b6 --- /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 0000000..e75f38c --- /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 0000000..465937f --- /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 0000000..419d73a --- /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 0000000..3390484 --- /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 0000000..11a2117 --- /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 0000000..d6f2cb0 --- /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 0000000..162d90d --- /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 0000000..23325b5 --- /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 0000000..1b4b1c5 --- /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 0000000..b39a01f --- /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 0000000..98b4d0c --- /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 0000000..a0567b4 --- /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 0000000..c88eb52 --- /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 0000000..fe11425 --- /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 0000000..e360ef4 --- /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 0000000..5fbf4cb --- /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 0000000..ea2c2ea --- /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 0000000..d1f434c --- /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 0000000..f84453e --- /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 0000000..6a35798 --- /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 0000000..3c46e9e --- /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 0000000..4e00bff --- /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 0000000..84b2634 --- /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 0000000..3b29290 --- /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 0000000..2015143 --- /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 0000000..074baa4 --- /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 0000000..da0d94e --- /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 0000000..96c241b --- /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 0000000..44cecc8 --- /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 0000000..78e8fcd --- /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 0000000..c25bb94 --- /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 0000000..9cc207c --- /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 0000000..ab88b84 --- /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 0000000..752ba60 --- /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 0000000..59f2681 --- /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 0000000..5ed0c6d --- /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 0000000..e7b4b29 --- /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 0000000..0ca5a45 --- /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 0000000..6610437 --- /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 0000000..d74e45c --- /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 0000000..e5194f4 --- /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 0000000..e1cf99c --- /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 0000000..73094ab --- /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 0000000..c41f4e1 --- /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 0000000..ea41444 --- /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 0000000..e36aff3 --- /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 0000000..d97be26 --- /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 0000000..f0d4fd7 --- /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 0000000..b96a60f --- /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 0000000..e6b7fbb --- /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 0000000..431f000 --- /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 0000000..1110874 --- /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 0000000..882039c --- /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 0000000..5552275 --- /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 0000000..0766de9 --- /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 0000000..09d08ce --- /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 0000000..6dff77d --- /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 0000000..36b34e0 --- /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 0000000..c01021b --- /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 0000000..029c74b --- /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 0000000..c2196ce --- /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 0000000..64a4ec1 --- /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 0000000..cace25a --- /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 0000000..36a0151 --- /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 0000000..19aacea --- /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 0000000..53e697f --- /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 0000000..0629cb4 --- /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 0000000..e0d14e8 --- /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 0000000..f92989a --- /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 0000000..e964915 --- /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 0000000..88d994a --- /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 0000000..aff44f8 --- /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 0000000..43e2641 --- /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 0000000..cf8fee6 --- /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 0000000..e206b67 --- /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 0000000..83e9fa8 --- /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 0000000..f2a3878 --- /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 0000000..9043dde --- /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 0000000..783e57e --- /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 0000000..a71c767 --- /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 0000000..190a30f --- /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 0000000..104afaa --- /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 0000000..5b07c8d --- /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 0000000..bb38fc6 --- /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 0000000..daa5c4d --- /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 0000000..21e1b0d --- /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 0000000..3430ad9 --- /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 0000000..4a55de9 --- /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 0000000..28170e5 --- /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 0000000..3210813 --- /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 0000000..6f32915 --- /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 0000000..7e1d767 --- /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 0000000..4cc149c --- /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 0000000..3755821 --- /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 0000000..64891af --- /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 0000000..9dca2fc --- /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 0000000..5cdcc33 --- /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 0000000..30122b7 --- /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 0000000..2c4913b --- /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 0000000..5b0df8b --- /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 0000000..474502a --- /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 0000000..7f14f92 --- /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 0000000..1cd7cfa --- /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 0000000..cf29c1b --- /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 0000000..a97d98c --- /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 0000000..e071021 --- /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 0000000..9730b6d --- /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 0000000..aded556 --- /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 0000000..8da8c51 --- /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 0000000..223386f --- /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 0000000..fa0f0d3 --- /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 0000000..ed71548 --- /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 0000000..25813c7 --- /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 0000000..b6e6ebb --- /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 0000000..f38add3 --- /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 0000000..ba70736 --- /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 0000000..736d0c4 --- /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 0000000..63ddeb0 --- /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 0000000..10e895e --- /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 0000000..14fd7b3 --- /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 0000000..bac6301 --- /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 0000000..9155aba --- /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 0000000..aaac74f --- /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 0000000..2cddcb6 --- /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 0000000..c77e0b6 --- /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 0000000..64ab59f --- /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 0000000..7605e63 --- /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 0000000..90accce --- /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 0000000..0f5736f --- /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 0000000..a901a3d --- /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 0000000..a3f12b6 --- /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 0000000..27c45fb --- /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 0000000..1fc0440 --- /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 0000000..8a6cb71 --- /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 0000000..7652976 --- /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 0000000..93fc7a8 --- /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 0000000..9f6875b --- /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 0000000..72887bb --- /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 0000000..280b298 --- /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 0000000..4005ad0 --- /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 0000000..a20bbce --- /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 0000000..2585b58 --- /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 0000000..d14d8c0 --- /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 0000000..0209db2 --- /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 0000000..572f88f --- /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 0000000..17104cd --- /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 0000000..19cd842 --- /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 0000000..5b67fb4 --- /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 0000000..131704a --- /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 0000000..d828804 --- /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 0000000..70b5ac7 --- /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 0000000..a5b8ce9 --- /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 0000000..a3f5cea --- /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 0000000..99b37d1 --- /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 0000000..b62b2a2 --- /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 0000000..558b594 --- /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 0000000..37da1a0 --- /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 0000000..dd8194b --- /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 0000000..296e53d --- /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 0000000..a781af6 --- /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 0000000..5c7781e --- /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 0000000..75bec14 --- /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 0000000..485acf6 --- /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 0000000..227ff2a --- /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 0000000..26faae2 --- /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 0000000..9674e16 --- /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 0000000..ab7f149 --- /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 0000000..6e0b377 --- /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 0000000..c54a565 --- /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 0000000..dfddaa7 --- /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 0000000..00e2a01 --- /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 0000000..7bf325a --- /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 0000000..5990ee5 --- /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 0000000..576279a --- /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 0000000..5aa9248 --- /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 0000000..9eb241d --- /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 0000000..f5ad322 --- /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 0000000..986cec7 --- /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 0000000..6fe9370 --- /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 0000000..9b4ce70 --- /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 0000000..055177f --- /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 0000000..b6ae929 --- /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 0000000..e1dbbcd --- /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 0000000..474eda9 --- /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 0000000..06558ad --- /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 0000000..e2e1136 --- /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 0000000..96516d5 --- /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 0000000..9183094 --- /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 0000000..5315532 --- /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 0000000..a85dcae --- /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 0000000..435e19f --- /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 0000000..74aa60a --- /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 0000000..9ea1de1 --- /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 0000000..7b8caf1 --- /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 0000000..4c2e2cb --- /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 0000000..37d7fb0 --- /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 0000000..4e10039 --- /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 0000000..25d10cf --- /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 0000000..4eb51f5 --- /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 0000000..e363838 --- /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 0000000..171d5b8 --- /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 0000000..c6690f1 --- /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 0000000..5f4d84e --- /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 0000000..dc75597 --- /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 0000000..158823f --- /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 0000000..ffb7cb3 --- /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 0000000..a1f688b --- /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 0000000..f0fa49f --- /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 0000000..eb187d6 --- /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 0000000..fa41dd6 --- /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 0000000..4a6e3df --- /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 0000000..1ddb007 --- /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 0000000..23f682c --- /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 0000000..3ee4da9 --- /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 0000000..c997157 --- /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 0000000..7dbf342 --- /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 0000000..2101f94 --- /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 0000000..6cc2759 --- /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 0000000..a175dd1 --- /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 0000000..10421ef --- /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 0000000..9e33ab9 --- /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 0000000..85b694f --- /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 0000000..3df7e0c --- /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 0000000..9864210 --- /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 0000000..e46f0f6 --- /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 0000000..d2e33e6 --- /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 0000000..5f1c8be --- /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 0000000..464fbb0 --- /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 0000000..c27ae78 --- /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 0000000..4ca6e99 --- /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 0000000..087c7d5 --- /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 0000000..7e5e44f --- /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 0000000..0506e46 --- /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 0000000..8d9b148 --- /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 0000000..e911b0d --- /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 0000000..b18d920 --- /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 0000000..82d7d2c --- /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 0000000..3c0ae11 --- /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 0000000..0a00010 --- /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 0000000..1bc8434 --- /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 0000000..32f602c --- /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 0000000..1423801 --- /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 0000000..73df0b9 --- /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 0000000..e6b7946 --- /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 0000000..ce4a010 --- /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 0000000..09d2c11 --- /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 0000000..90108b9 --- /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 0000000..7724a04 --- /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 0000000..4f3a780 --- /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 0000000..60c44c4 --- /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 0000000..320f806 --- /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 0000000..48b0592 --- /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 0000000..08dcc40 --- /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 0000000..21545c7 --- /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 0000000..d3f2961 --- /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 0000000..5d9db39 --- /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 0000000..7577544 --- /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 0000000..d55f153 --- /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 0000000..fb1512e --- /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 0000000..382a093 --- /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 0000000..9992091 --- /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 0000000..09ea6c8 --- /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 0000000..90d3d3a --- /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 0000000..d7884ca --- /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 0000000..15f5f6b --- /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 0000000..999dda3 --- /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 0000000..8166767 --- /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 0000000..4a566d6 --- /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 0000000..1775d36 --- /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 0000000..e82d2d4 --- /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 0000000..923e89f --- /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 0000000..8bc59e8 --- /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 0000000..2cc1f14 --- /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 0000000..67dedbb --- /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 0000000..9a4f209 --- /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 0000000..b676a97 --- /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 0000000..7026522 --- /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 0000000..d14a500 --- /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 0000000..53d3ea7 --- /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 0000000..a18c249 --- /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 0000000..de1f4ab --- /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 0000000..5228108 --- /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 0000000..e27c5d3 --- /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 0000000..27d81bd --- /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 0000000..9dced03 --- /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 0000000..652f5ba --- /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 0000000..fee8443 --- /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 0000000..73ee442 --- /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 0000000..660d4c1 --- /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 0000000..6d3c6c2 --- /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 0000000..f87b5fb --- /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 0000000..2df9ce5 --- /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 0000000..808a1ef --- /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 0000000..cef9325 --- /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 0000000..0b3b08a --- /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 0000000..09b018e --- /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 0000000..d16928a --- /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 0000000..2053057 --- /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 0000000..cb6e553 --- /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 0000000..5d3daa0 --- /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 0000000..d529001 --- /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 0000000..5332b36 --- /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 0000000..f17c6a5 --- /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 0000000..4f01ea8 --- /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 0000000..43639b5 --- /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 0000000..8a8723b --- /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 0000000..8815876 --- /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 0000000..16bccad --- /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 0000000..70e67e0 --- /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 0000000..e344158 --- /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 0000000..d73e8bc --- /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 0000000..f4b7f19 --- /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 0000000..df57db5 --- /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 0000000..2b3903b --- /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 0000000..ee69bbf --- /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 0000000..f541cd1 --- /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 0000000..4a8390b --- /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 0000000..25f11f6 --- /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 0000000..70d9582 --- /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 0000000..f63bb29 --- /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 0000000..fde6b40 --- /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 0000000..6b090bc --- /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 0000000..6926dfd --- /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 0000000..c51e82e --- /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 0000000..2cd1ca6 --- /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 0000000..e7aa133 --- /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 0000000..1437975 --- /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 0000000..09357b9 --- /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 0000000..8bbe5f1 --- /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 0000000..22a55b6 --- /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 0000000..f52c26f --- /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 0000000..5903dc6 --- /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 0000000..9c55e7f --- /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 0000000..7d5f35f --- /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 0000000..178d718 --- /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 0000000..18f7d02 --- /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 0000000..b0b2db2 --- /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 0000000..74e50c1 --- /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 0000000..2d7f401 --- /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 0000000..422c219 --- /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 0000000..f4e57d8 --- /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 0000000..00a7223 --- /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 0000000..426c5f7 --- /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 0000000..9d2f392 --- /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 0000000..0953791 --- /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 0000000..ad22cea --- /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 0000000..649a168 --- /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 0000000..62b45f4 --- /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 0000000..af7ee2c --- /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 0000000..0c0b320 --- /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 0000000..56dd92b --- /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 0000000..e06f271 --- /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 0000000..c8894ad --- /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 0000000..ed719da --- /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 0000000..3443aec --- /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 0000000..a4971d2 --- /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 0000000..dd3ae7e --- /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 0000000..d1855d4 --- /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 0000000..0525fb9 --- /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 0000000..05910fe --- /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 0000000..267df70 --- /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 0000000..dfa2250 --- /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 0000000..14aaa03 --- /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 0000000..1a880f5 --- /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 0000000..c0c4271 --- /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 0000000..434977d --- /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 0000000..621cf4c --- /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 0000000..fb7af9c --- /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 0000000..cbf3b98 --- /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 0000000..75e71c3 --- /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 0000000..78e2b63 --- /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 0000000..1858e47 --- /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 0000000..233f80f --- /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 0000000..c199b17 --- /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 0000000..7811908 --- /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 0000000..7e130e7 --- /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 0000000..116311d --- /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 0000000..278ce51 --- /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 0000000..be01f4d --- /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 0000000..52b0dbb --- /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 0000000..7723d32 --- /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 0000000..c1aeff3 --- /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 0000000..72c2a85 --- /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 0000000..5f5366f --- /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 0000000..f399065 --- /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 0000000..407cc7e --- /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 0000000..559d08f --- /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 0000000..64a28c7 --- /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 0000000..e18b60e --- /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 0000000..00efeee --- /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 0000000..cfa6649 --- /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 0000000..e07fef2 --- /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 0000000..e334761 --- /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 0000000..1343162 --- /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 0000000..e4b54c1 --- /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 0000000..85d5e68 --- /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 0000000..fd5bfbf --- /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 0000000..b261d3c --- /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 0000000..6342371 --- /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 0000000..5bc3881 --- /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 0000000..b86a6a4 --- /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 0000000..30a79f9 --- /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 0000000..d6cd379 --- /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 0000000..6d997b4 --- /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 0000000..eeb7dcc --- /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 0000000..35dc74e --- /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 0000000..328b5e7 --- /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 0000000..5b12cf6 --- /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 0000000..99096a8 --- /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 0000000..353ee4f --- /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 0000000..38c122a --- /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 0000000..14b2bde --- /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 0000000..2f1d388 --- /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 0000000..ba644eb --- /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 0000000..1cd9c5f --- /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 0000000..519b35a --- /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 0000000..d7d92c3 --- /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 0000000..79913a7 --- /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 0000000..13aab1b --- /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 0000000..97fc710 --- /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 0000000..7decbda --- /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 0000000..96047b5 --- /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 0000000..092009d --- /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 0000000..1d465ae --- /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 0000000..c3ebfae --- /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 0000000..e7a7667 --- /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 0000000..c6033c8 --- /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 0000000..74d96ed --- /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 0000000..6d996a6 --- /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 0000000..b0770d6 --- /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 0000000..bad2b03 --- /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 0000000..4b56f3e --- /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 0000000..1f5e262 --- /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 0000000..66fd584 --- /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 0000000..a71b4d9 --- /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 0000000..ae3ebf4 --- /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 0000000..33b525b --- /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 0000000..f5b6992 --- /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 0000000..6444559 --- /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 0000000..c843e12 --- /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 0000000..2d36256 --- /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 0000000..94e14f4 --- /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 0000000..7e7f2e9 --- /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 0000000..d035ded --- /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 0000000..3b48188 --- /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 0000000..cb95241 --- /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 0000000..3b091bf --- /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 0000000..7b5a367 --- /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 0000000..d08e93f --- /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 0000000..bef58af --- /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 0000000..7b6db1f --- /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 0000000..6850967 --- /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 0000000..210b74b --- /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 0000000..19ec87e --- /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 0000000..f7f0feb --- /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 0000000..3e992a4 --- /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 0000000..4caf9a0 --- /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 0000000..53b745d --- /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 0000000..c1bf125 --- /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 0000000..3b49cb8 --- /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 0000000..63f6442 --- /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 0000000..ad0e1a3 --- /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 0000000..4ac70f4 --- /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 0000000..f80f434 --- /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 0000000..af03018 --- /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 0000000..c205b16 --- /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 0000000..54c98bc --- /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 0000000..1fb52f1 --- /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 0000000..871dd64 --- /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 0000000..0b346c6 --- /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 0000000..70c3255 --- /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 0000000..6616440 --- /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 0000000..e30880b --- /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 0000000..6ed1e3c --- /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 0000000..86334d5 --- /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 0000000..c66cc1b --- /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 0000000..a4f76c1 --- /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 0000000..cc22d8e --- /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 0000000..6549423 --- /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 0000000..58f890d --- /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 0000000..0343f76 --- /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 0000000..4b4dbc0 --- /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 0000000..7e003ec --- /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 0000000..6994f6c --- /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 0000000..4d163d4 --- /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 0000000..31da05d --- /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 0000000..1d03cfa --- /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 0000000..2e42c0b --- /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 0000000..d9eca02 --- /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 0000000..8fd08d7 --- /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 0000000..ba82fab --- /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 0000000..22fbc08 --- /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 0000000..7b2255a --- /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 0000000..11a953f --- /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 0000000..1665bc2 --- /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 0000000..8a1b554 --- /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 0000000..965bfbf --- /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 0000000..481a22f --- /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 0000000..36ebd9f --- /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 0000000..bbe4bac --- /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 0000000..79f3969 --- /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 0000000..3a8acd3 --- /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 0000000..afed8a7 --- /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 0000000..4860365 --- /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 0000000..64c257c --- /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 0000000..38469c6 --- /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 0000000..7229add --- /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 0000000..1c517c3 --- /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 0000000..e33851e --- /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 0000000..3d8fc50 --- /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 0000000..6bbf825 --- /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 0000000..1a7e93c --- /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 0000000..3ce19d4 --- /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 0000000..b63dd18 --- /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 0000000..b06ca09 --- /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 0000000..4811bc1 --- /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 0000000..dad1ae4 --- /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 0000000..11e23f0 --- /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 0000000..a577256 --- /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 0000000..7d67017 --- /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 0000000..6f930d0 --- /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 0000000..b3a0274 --- /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 0000000..91a96fc --- /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 0000000..cf88529 --- /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 0000000..ccf6d02 --- /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 0000000..b272af3 --- /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 0000000..bacc7c1 --- /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 0000000..7f43623 --- /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 0000000..46d299a --- /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 0000000..6aac623 --- /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 0000000..e6883e3 --- /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 0000000..a55e1c7 --- /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 0000000..a850e45 --- /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 0000000..b8e7a27 --- /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 0000000..22b0170 --- /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 0000000..a355548 --- /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 0000000..8729054 --- /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 0000000..330feae --- /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 0000000..9379c72 --- /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 0000000..5974527 --- /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 0000000..26dfac0 --- /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 0000000..53b3c96 --- /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 0000000..7535d4c --- /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 0000000..bb28dc5 --- /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 0000000..f9e9922 --- /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 0000000..9e66018 --- /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 0000000..0067e6c --- /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 0000000..304d496 --- /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 0000000..87388e2 --- /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 0000000..aa0b52d --- /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 0000000..31d3f22 --- /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 0000000..4f760e1 --- /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 0000000..ac8ab6f --- /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 0000000..81af369 --- /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 0000000..f774ac0 --- /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 0000000..466ffb4 --- /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 0000000..e89b7ff --- /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 0000000..8773ab4 --- /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 0000000..586fe13 --- /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 0000000..c166535 --- /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 0000000..0cccc05 --- /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 0000000..01ecc37 --- /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 0000000..ae3750c --- /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 0000000..dace3e2 --- /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 0000000..c660eae --- /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 0000000..739bfbb --- /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 0000000..77b6788 --- /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 0000000..a093e7f --- /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 0000000..0486ef8 --- /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 0000000..b13e816 --- /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 0000000..09bf434 --- /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 0000000..e86bbf9 --- /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 0000000..af404a0 --- /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 0000000..153f60e --- /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 0000000..de32656 --- /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 0000000..71e527a --- /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 0000000..51dcae0 --- /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 0000000..40b442e --- /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 0000000..3d441b5 --- /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 0000000..6a1d2ad --- /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 0000000..2ff4618 --- /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 0000000..6502ce4 --- /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 0000000..55b5a31 --- /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 0000000..7ed57d6 --- /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 0000000..380cec2 --- /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 0000000..2d7d797 --- /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 0000000..0130d27 --- /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 0000000..766dcd2 --- /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 0000000..047977e --- /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 0000000..13e04b8 --- /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 0000000..d9abf46 --- /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 0000000..6bb35ac --- /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 0000000..881958e --- /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 0000000..5f35b86 --- /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 0000000..9906e30 --- /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 0000000..cc858d8 --- /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 0000000..2691db8 --- /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 0000000..a1bd8ee --- /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 0000000..2bf8c61 --- /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 0000000..7c49f72 --- /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 0000000..3beecf0 --- /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 0000000..9ef307f --- /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 0000000..2f39d74 --- /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 0000000..9207edc --- /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 0000000..30ef7e3 --- /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 0000000..bb88f1b --- /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 0000000..673152f --- /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 0000000..c161c65 --- /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 0000000..280ba83 --- /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 0000000..92c3e7e --- /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 0000000..2f5ba43 --- /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 0000000..22242c2 --- /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 0000000..9c05541 --- /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 0000000..e7f3625 --- /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 0000000..78d482e --- /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 0000000..9e14388 --- /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 0000000..7278b6f --- /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 0000000..65676aa --- /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 0000000..1cd80c4 --- /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 0000000..6360581 --- /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 0000000..b3c7ab0 --- /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 0000000..04ba8e6 --- /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 0000000..bc61233 --- /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 0000000..dd9b247 --- /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 0000000..2f39dcd --- /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 0000000..38b27ec --- /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 0000000..384452b --- /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 0000000..6ac5ada --- /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 0000000..87e9127 --- /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 0000000..5a594b2 --- /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 0000000..a273b10 --- /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 0000000..6924c48 --- /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 0000000..f9c6960 --- /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 0000000..2493b65 --- /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 0000000..d77fa8c --- /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 0000000..a48c8b2 --- /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 0000000..b7a5d18 --- /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 0000000..4bd9e81 --- /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 0000000..4eeef58 --- /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 0000000..7d7993c --- /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 0000000..d6c08f4 --- /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 0000000..c529295 --- /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 0000000..bc20c93 --- /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 0000000..de10e09 --- /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 0000000..0f9a185 --- /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 0000000..5df8233 --- /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 0000000..19a0894 --- /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 0000000..cd4737f --- /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 0000000..57a3a3c --- /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 0000000..b82d5ed --- /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 0000000..d5e1482 --- /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 0000000..e500100 --- /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 0000000..f93ab2e --- /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 0000000..66e9393 --- /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 0000000..eb64cc2 --- /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 0000000..4dde3ff --- /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 0000000..e94ac30 --- /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 0000000..86f895b --- /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 0000000..026ce50 --- /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 0000000..c8f409b --- /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 0000000..2ead8f2 --- /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 0000000..9579a1b --- /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 0000000..b4641f3 --- /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 0000000..6f80202 --- /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 0000000..285746d --- /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 0000000..3f21919 --- /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 0000000..3a32162 --- /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 0000000..4dce896 --- /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 0000000..583b3b6 --- /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 0000000..53897fc --- /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 0000000..2c4d768 --- /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 0000000..77b2402 --- /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 0000000..99cee9f --- /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 0000000..b2dcc5d --- /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 0000000..bf3a55b --- /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 0000000..e40613a --- /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 0000000..1981bef --- /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 0000000..29af297 --- /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 0000000..53d02bf --- /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 0000000..43e4a36 --- /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 0000000..4661569 --- /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 0000000..ff624f1 --- /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 0000000..dd83352 --- /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 0000000..5a30be8 --- /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 0000000..ecf4f80 --- /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 0000000..245d22f --- /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 0000000..5bb4fd7 --- /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 0000000..671e3d9 --- /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 0000000..a5c15c5 --- /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 0000000..87f254d --- /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 0000000..25ec5d3 --- /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 0000000..370a793 --- /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 0000000..58b4b8c --- /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 0000000..ca08609 --- /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 0000000..b93c8cb --- /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 0000000..a43b53f --- /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 0000000..feaa872 --- /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 0000000..cf5b9ce --- /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 0000000..52db99d --- /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 0000000..bc2fdb0 --- /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 0000000..d965460 --- /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 0000000..5aad7e7 --- /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 0000000..f478fab --- /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 0000000..32ce7b8 --- /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 0000000..1538faa --- /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 0000000..309f323 --- /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 0000000..582c825 --- /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 0000000..b5cbf24 --- /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 0000000..a8d3821 --- /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 0000000..03c6600 --- /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 0000000..2a0ad39 --- /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 0000000..c42fa50 --- /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 0000000..3392166 --- /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 0000000..e7e5faa --- /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 0000000..bdb0b22 --- /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 0000000..47b736a --- /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 0000000..7764c86 --- /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 0000000..515f7ad --- /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 0000000..c6ad971 --- /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 0000000..5ef4e8c --- /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 0000000..3398fd3 --- /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 0000000..6763fb9 --- /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 0000000..59d2076 --- /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 0000000..cb6e131 --- /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 0000000..3b50e17 --- /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 0000000..81a2323 --- /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 0000000..14efee9 --- /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 0000000..4d0a212 --- /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 0000000..4f867b3 --- /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 0000000..6124e1a --- /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 0000000..e938bd2 --- /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 0000000..b866b3c --- /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 0000000..ee4eb4a --- /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 0000000..f928fa4 --- /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 0000000..961f26b --- /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 0000000..ad0d49d --- /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 0000000..25ff0c7 --- /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 0000000..c620b4c --- /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 0000000..e82fa02 --- /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 0000000..0b3bde1 --- /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 0000000..1f1f130 --- /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 0000000..a583a04 --- /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 0000000..8dea611 --- /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 0000000..0b30045 --- /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 */ -- cgit v1.2.3