/**************************************************************************** ** ** ** Implementation of the QString class and related Unicode functions ** ** Created : 920722 ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of the tools module of the Qt GUI Toolkit. ** ** This file may be distributed under the terms of the Q Public License ** as defined by Trolltech AS of Norway and appearing in the file ** LICENSE.QPL included in the packaging of this file. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ** licenses may use this file in accordance with the Qt Commercial License ** Agreement provided with the Software. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ** information about Qt Commercial License Agreements. ** See http://www.trolltech.com/qpl/ for QPL licensing information. ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // Don't define it while compiling this module, or USERS of Qt will // not be able to link. #ifdef QT_NO_CAST_ASCII #undef QT_NO_CAST_ASCII #endif #include "qstring.h" #include "qregexp.h" #include "qdatastream.h" #include "qtextcodec.h" #include "qstack.h" #include #include #include #include #include /* ------------------------------------------------------------------------- * unicode information * these tables are generated from the unicode reference file * ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html * * Lars Knoll * ------------------------------------------------------------------------- */ /* Perl script to generate (run perl -x tools/qstring.cpp) #!perl sub numberize { my(%r, $n, $id); for $id ( @_ ) { $id="" if $id eq "EMPTY"; $r{$id}=$n++; } return %r; } # Code to integer mappings... # %category_code = numberize(qw{ EMPTY Mn Mc Me Nd Nl No Zs Zl Zp Cc Cf Cs Co Cn Lu Ll Lt Lm Lo Pc Pd Ps Pe Pi Pf Po Sm Sc Sk So }); %bidi_category_code = numberize(qw{ L R EN ES ET AN CS B S WS ON LRE LRO AL RLE RLO PDF NSM BN}); %character_decomposition_tag = numberize(qw{ }); %mirrored_code = numberize(qw{N Y}); %joining_code = numberize(qw{U D R C}); # Read data into hashes... # open IN, "UnicodeData.txt"; $position = 1; while () { @fields = split /;/; $code = shift @fields; for $n (qw{ name category combining_class bidi_category character_decomposition decimal_digit_value digit_value numeric_value mirrored oldname comment uppercase lowercase titlecase}) { $id = shift @fields; $codes = "${n}_code"; if ( defined %$codes && defined $$codes{$id} ) { $id = $$codes{$id}; } ${$n}{$code}=$id; } $decomp = $character_decomposition{$code}; if ( length $decomp == 0 ) { $decomp = ""; } if (substr($decomp, 0, 1) ne '<') { $decomp = " " . $decomp; } @fields = split(" ", $decomp); $tag = shift @fields; $tag = $character_decomposition_tag{$tag}; $decomp = join( ", 0x", @fields ); $decomp = "0x".$decomp; $decomposition{$code} = $decomp; $decomposition_tag{$code} = $tag; $decomposition_pos{$code} = $position; $len = scalar(@fields); $decomposition_len{$code} = $len; # we use canonical decompositions longer than 1 char # and all arabic ligatures for the ligature table if(($len > 1 and $tag == 1) or ($tag > 3 and $tag < 8)) { # ligature to add... $start = shift @fields; $ligature{$start} = $ligature{$start}." ".$code; } # adjust position if($len != 0) { $position += $len + 3; } } open IN2, "ArabicShaping.txt"; $position = 1; while () { @fields = split /;/; $code = shift @fields; $dummy = shift @fields; $join = shift @fields; $join =~ s/ //g; $join = $joining_code{$join}; $joining{$code}=$join; } # Build pages... # $rowtable_txt = "static const Q_UINT8 * const unicode_info[256] = {"; for $row ( 0..255 ) { $nonzero=0; $txt = ""; for $cell ( 0..255 ) { $code = sprintf("%02X%02X",$row,$cell); $info = $category{$code}; $info = 0 if !defined $info; $txt .= "\n " if $cell%8 == 0; $txt .= "$info, "; } $therow = $row{$txt}; if ( !defined $therow ) { $size+=256; $therow = "ui_".sprintf("%02X",$row); $rowtext{$therow} = "static const Q_UINT8 ${therow}[] = {$txt\n};\n\n"; $row{$txt}=$therow; } $rowtable_txt .= "\n " if $row%8 == 0; $rowtable_txt .= "$therow, "; } print "// START OF GENERATED DATA\n\n"; print "#ifndef QT_NO_UNICODETABLES\n\n"; # Print pages... # for $r ( sort keys %rowtext ) { print $rowtext{$r}; } print "$rowtable_txt\n};\n"; $size += 256*4; print "// $size bytes\n\n"; # Build decomposition tables # $rowtable_txt = "static const Q_UINT16 * const decomposition_info[256] = {"; $table_txt = "static const Q_UINT16 decomposition_map[] = {\n 0,\n"; for $row ( 0..255 ) { $nonzero=0; $txt = ""; for $cell ( 0..255 ) { $code = sprintf("%02X%02X",$row,$cell); $txt .= "\n " if $cell%8 == 0; if( $decomposition_tag{$code} != 0 ) { $txt .= " $decomposition_pos{$code},"; $table_txt .= " $decomposition_tag{$code},"; $table_txt .= " 0x$code,"; $table_txt .= " $decomposition{$code}, 0,\n"; $size += 2 * $decomposition_len{$code} + 6; } else { $txt .= " 0,"; } } $therow = $row{$txt}; if ( !defined $therow ) { $size+=512; $therow = "di_".sprintf("%02X",$row); $dec_rowtext{$therow} = "static const Q_UINT16 ${therow}[] = {$txt\n};\n\n"; $row{$txt}=$therow; } $rowtable_txt .= "\n " if $row%8 == 0; $rowtable_txt .= "$therow, "; } # Print decomposition tables # print "$table_txt\n};\n\n"; for $r ( sort keys %dec_rowtext ) { print $dec_rowtext{$r}; } print "$rowtable_txt\n};\n"; $size += 256*4; print "// $size bytes\n\n"; # build ligature tables # $size = 0; $position = 1; $rowtable_txt = "static const Q_UINT16 * const ligature_info[256] = {"; $table_txt = "static const Q_UINT16 ligature_map[] = {\n 0,\n"; for $lig_row ( 0..255 ) { $nonzero=0; $txt = ""; for $cell ( 0..255 ) { $code = sprintf("%02X%02X",$lig_row,$cell); $txt .= "\n " if $cell%8 == 0; if( defined $ligature{$code} ) { $txt .= " $position,"; @ligature = split(" ", $ligature{$code}); # we need to sort ligatures according to their length. # long ones have to come first! @ligature_sort = sort { $decomposition_len{$b} <=> $decomposition_len{$a} } @ligature; # now replace each code by it's position in # the decomposition map. undef(@lig_pos); for $n (@ligature_sort) { push(@lig_pos, $decomposition_pos{$n}); } # debug info if( 0 ) { print "ligatures: $ligature{$code}\n"; $sort = join(" ", @ligature_sort); print "sorted : $sort\n"; } $lig = join(", ", @lig_pos); $table_txt .= " $lig, 0,\n"; $size += 2 * scalar(@ligature) + 2; $position += scalar(@ligature) + 1; } else { $txt .= " 0,"; } } $therow = $lig_row{$txt}; if ( !defined $therow ) { $size+=512; $therow = "li_".sprintf("%02X",$lig_row); $lig_rowtext{$therow} = "static const Q_UINT16 ${therow}[] = {$txt\n};\n\n"; $lig_row{$txt}=$therow; } $rowtable_txt .= "\n " if $lig_row%8 == 0; $rowtable_txt .= "$therow, "; } # Print ligature tables # print "$table_txt\n};\n\n"; for $r ( sort keys %lig_rowtext ) { print $lig_rowtext{$r}; } print "$rowtable_txt\n};\n"; $size += 256*4; print "// $size bytes\n\n"; # Build direction/joining/mirrored pages... # $rowtable_txt = "static const Q_UINT8 * const direction_info[256] = {"; for $dir_row ( 0..255 ) { $nonzero=0; $txt = ""; for $cell ( 0..255 ) { $code = sprintf("%02X%02X",$dir_row,$cell); $dir = $bidi_category{$code}; $dir = 0 if !defined $dir; $join = $joining{$code}; $join = 0 if !defined $join; $mirr = $mirrored{$code}; $mirr = 0 if !defined $mirr; $info = $dir + 32*$join + 128*$mirr; $txt .= "\n " if $cell%8 == 0; $txt .= "$info, "; } $therow = $dir_row{$txt}; if ( !defined $therow ) { $size+=256; $therow = "dir_".sprintf("%02X",$dir_row); $dir_rowtext{$therow} = "static const Q_UINT8 ${therow}[] = {$txt\n};\n\n"; $dir_row{$txt}=$therow; } $rowtable_txt .= "\n " if $dir_row%8 == 0; $rowtable_txt .= "$therow, "; } # Print pages... # for $r ( sort keys %dir_rowtext ) { print $dir_rowtext{$r}; } print "$rowtable_txt\n};\n"; $size += 256*4; print "// $size bytes\n\n"; print "#endif\n\n"; print "// END OF GENERATED DATA\n\n"; __END__ */ // START OF GENERATED DATA static const Q_UINT8 ui_00[] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 26, 26, 26, 28, 26, 26, 26, 22, 23, 26, 27, 26, 21, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 26, 27, 27, 27, 26, 26, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 26, 23, 29, 20, 29, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 22, 27, 23, 27, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 26, 28, 28, 28, 28, 30, 30, 29, 30, 16, 24, 27, 21, 30, 29, 30, 27, 6, 6, 29, 16, 30, 26, 29, 6, 16, 25, 6, 6, 6, 26, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 27, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 27, 16, 16, 16, 16, 16, 16, 16, 16, }; #ifndef QT_NO_UNICODETABLES static const Q_UINT8 ui_01[] = { 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 15, 16, 15, 16, 15, 16, 16, 16, 15, 15, 16, 15, 16, 15, 15, 16, 15, 15, 15, 16, 16, 15, 15, 15, 15, 16, 15, 15, 16, 15, 15, 15, 16, 16, 16, 15, 15, 16, 15, 15, 16, 15, 16, 15, 16, 15, 15, 16, 15, 16, 16, 15, 16, 15, 15, 16, 15, 15, 15, 16, 15, 16, 15, 15, 16, 16, 19, 15, 16, 16, 16, 19, 19, 19, 19, 15, 17, 16, 15, 17, 16, 15, 17, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 15, 17, 16, 15, 16, 15, 15, 15, 16, 15, 16, 15, 16, 15, 16, }; static const Q_UINT8 ui_02[] = { 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 0, 0, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 29, 29, 18, 18, 18, 18, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_03[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 0, 0, 0, 0, 18, 0, 0, 0, 26, 0, 0, 0, 0, 0, 29, 29, 15, 26, 15, 15, 15, 0, 15, 0, 15, 15, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 15, 15, 15, 16, 16, 16, 0, 0, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_04[] = { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 30, 1, 1, 1, 1, 0, 3, 3, 0, 0, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 15, 16, 15, 16, 0, 0, 15, 16, 0, 0, 15, 16, 0, 0, 0, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 0, 0, 15, 16, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_05[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 18, 26, 26, 26, 26, 26, 26, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 26, 21, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 26, 1, 26, 1, 1, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 19, 19, 19, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_06[] = { 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, 26, 0, 0, 0, 26, 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, 0, 0, 0, 0, 0, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 26, 26, 26, 0, 0, 1, 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, 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, 26, 19, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 18, 18, 1, 1, 30, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 19, 19, 19, 30, 30, 0, }; static const Q_UINT8 ui_07[] = { 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 11, 19, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, }; static const Q_UINT8 ui_08[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_09[] = { 0, 1, 1, 2, 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, 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, 0, 0, 1, 19, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 0, 0, 19, 1, 1, 1, 1, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1, 1, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 19, 19, 19, 19, 0, 0, 1, 0, 2, 2, 2, 1, 1, 1, 1, 0, 0, 2, 2, 0, 0, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 19, 19, 0, 19, 19, 19, 1, 1, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 19, 19, 28, 28, 6, 6, 6, 6, 6, 6, 30, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_0A[] = { 0, 0, 1, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 0, 19, 19, 0, 19, 19, 0, 0, 1, 0, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 1, 19, 2, 2, 2, 1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_0B[] = { 0, 1, 2, 2, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 0, 0, 19, 19, 19, 19, 0, 0, 1, 19, 2, 1, 2, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 19, 19, 0, 19, 19, 19, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 0, 19, 19, 19, 19, 0, 0, 0, 19, 19, 0, 19, 0, 19, 19, 0, 0, 0, 19, 19, 0, 0, 0, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 0, 0, 0, 2, 2, 1, 2, 2, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_0C[] = { 0, 2, 2, 2, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 2, 1, 2, 2, 2, 2, 2, 0, 1, 2, 2, 0, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 19, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_0D[] = { 0, 0, 2, 2, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 0, 0, 2, 2, 2, 0, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 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, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 1, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 0, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_0E[] = { 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 1, 19, 19, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 28, 19, 19, 19, 19, 19, 19, 18, 1, 1, 1, 1, 1, 1, 1, 1, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 19, 19, 0, 19, 0, 0, 19, 19, 0, 19, 0, 0, 19, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 0, 19, 0, 0, 19, 19, 0, 19, 19, 19, 19, 1, 19, 19, 1, 1, 1, 1, 1, 1, 0, 1, 1, 19, 0, 0, 19, 19, 19, 19, 19, 0, 18, 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_0F[] = { 19, 30, 30, 30, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 30, 30, 30, 30, 30, 1, 1, 30, 30, 30, 30, 30, 30, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 30, 1, 30, 1, 30, 1, 22, 23, 22, 23, 2, 2, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 26, 1, 1, 19, 19, 19, 19, 0, 0, 0, 0, 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, 0, 30, 30, 30, 30, 30, 30, 30, 30, 1, 30, 30, 30, 30, 30, 30, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_10[] = { 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, 0, 19, 19, 19, 19, 19, 0, 19, 19, 0, 2, 1, 1, 1, 1, 2, 1, 0, 0, 0, 1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 26, 26, 26, 26, 26, 19, 19, 19, 19, 19, 19, 2, 2, 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, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 26, 0, 0, 0, 0, }; static const Q_UINT8 ui_11[] = { 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, 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, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_12[] = { 19, 19, 19, 19, 19, 19, 19, 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, 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, 0, 19, 0, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 0, 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, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, }; static const Q_UINT8 ui_13[] = { 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_14[] = { 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, 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, 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, 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, 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, }; static const Q_UINT8 ui_15[] = { 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, 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, 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, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, }; static const Q_UINT8 ui_16[] = { 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, 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, 26, 26, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 22, 23, 0, 0, 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, 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, 26, 26, 26, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_17[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 26, 26, 26, 26, 26, 26, 28, 26, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_18[] = { 26, 26, 26, 26, 26, 26, 21, 26, 26, 26, 26, 11, 11, 11, 11, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 18, 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, 0, 0, 0, 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, }; static const Q_UINT8 ui_1E[] = { 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_1F[] = { 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 0, 15, 0, 15, 0, 15, 0, 15, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 0, 16, 16, 15, 15, 15, 15, 17, 29, 16, 29, 29, 29, 16, 16, 16, 0, 16, 16, 15, 15, 15, 15, 17, 29, 29, 29, 16, 16, 16, 16, 0, 0, 16, 16, 15, 15, 15, 15, 0, 29, 29, 29, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 29, 29, 29, 0, 0, 16, 16, 16, 0, 16, 16, 15, 15, 15, 15, 17, 29, 29, 0, }; static const Q_UINT8 ui_20[] = { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11, 11, 11, 11, 21, 21, 21, 21, 21, 21, 26, 26, 24, 25, 22, 24, 24, 25, 22, 24, 26, 26, 26, 26, 26, 26, 26, 26, 8, 9, 11, 11, 11, 11, 11, 7, 26, 26, 26, 26, 26, 26, 26, 26, 26, 24, 25, 26, 26, 26, 26, 20, 20, 26, 26, 26, 27, 22, 23, 0, 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, 11, 11, 11, 11, 11, 11, 6, 0, 0, 0, 6, 6, 6, 6, 6, 6, 27, 27, 27, 22, 23, 16, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 27, 27, 27, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 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, }; static const Q_UINT8 ui_21[] = { 30, 30, 15, 30, 30, 30, 30, 15, 30, 30, 16, 15, 15, 15, 16, 16, 15, 15, 15, 16, 30, 15, 30, 30, 30, 15, 15, 15, 15, 15, 30, 30, 30, 30, 30, 30, 15, 30, 15, 30, 15, 30, 15, 15, 15, 15, 30, 16, 15, 15, 30, 15, 16, 19, 19, 19, 19, 16, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 30, 30, 30, 30, 30, 27, 27, 30, 30, 30, 30, 27, 30, 30, 27, 30, 30, 27, 30, 30, 30, 30, 30, 30, 30, 27, 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, 27, 27, 30, 30, 27, 30, 27, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_22[] = { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_23[] = { 30, 30, 30, 30, 30, 30, 30, 30, 27, 27, 27, 27, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 27, 27, 30, 30, 30, 30, 30, 30, 30, 22, 23, 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, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_24[] = { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_25[] = { 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 27, 30, 30, 30, 30, 30, 30, 30, 30, 30, 27, 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, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_26[] = { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 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, 27, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_27[] = { 0, 30, 30, 30, 30, 0, 30, 30, 30, 30, 0, 0, 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, 0, 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, 0, 30, 0, 30, 30, 30, 30, 0, 0, 0, 30, 0, 30, 30, 30, 30, 30, 30, 30, 0, 0, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 30, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_28[] = { 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, 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, 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, }; static const Q_UINT8 ui_2E[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_2F[] = { 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, }; static const Q_UINT8 ui_30[] = { 7, 26, 26, 26, 30, 18, 19, 5, 22, 23, 22, 23, 22, 23, 22, 23, 22, 23, 30, 30, 22, 23, 22, 23, 22, 23, 22, 23, 21, 22, 23, 23, 30, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 21, 18, 18, 18, 18, 18, 30, 30, 5, 5, 5, 0, 0, 0, 30, 30, 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, 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, 0, 0, 0, 0, 1, 1, 29, 29, 18, 18, 0, 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, 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, 19, 19, 19, 19, 20, 18, 18, 18, 0, }; static const Q_UINT8 ui_31[] = { 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 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, 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, 19, 19, 19, 19, 19, 19, 19, 19, 0, 30, 30, 6, 6, 6, 6, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_32[] = { 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, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 30, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 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, 0, }; static const Q_UINT8 ui_33[] = { 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, 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, 0, 0, 0, 0, 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, 30, 30, 30, 30, 30, 0, 0, 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, 0, }; static const Q_UINT8 ui_34[] = { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_4D[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_9F[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_A4[] = { 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, 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, 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, 0, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 30, 30, 30, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_D7[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_D8[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_DB[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, }; static const Q_UINT8 ui_DF[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, }; static const Q_UINT8 ui_E0[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_F8[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, }; static const Q_UINT8 ui_FA[] = { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 ui_FB[] = { 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 19, 1, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 27, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 0, 19, 0, 19, 19, 0, 19, 19, 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, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, }; static const Q_UINT8 ui_FD[] = { 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, 19, 19, 19, 19, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, }; static const Q_UINT8 ui_FE[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 21, 21, 20, 20, 22, 23, 22, 23, 22, 23, 22, 23, 22, 23, 22, 23, 22, 23, 22, 23, 0, 0, 0, 0, 26, 26, 26, 26, 20, 20, 20, 26, 26, 26, 0, 26, 26, 26, 26, 21, 22, 23, 22, 23, 22, 23, 26, 26, 26, 27, 21, 27, 27, 27, 0, 26, 28, 26, 26, 0, 0, 0, 0, 19, 19, 19, 0, 19, 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, 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, 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, 0, 0, 11, }; static const Q_UINT8 ui_FF[] = { 0, 26, 26, 26, 28, 26, 26, 26, 22, 23, 26, 27, 26, 21, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 26, 27, 27, 27, 26, 26, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 26, 23, 29, 20, 29, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 22, 27, 23, 27, 0, 0, 26, 22, 23, 26, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 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, 18, 18, 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, 0, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 0, 0, 0, 28, 28, 27, 29, 30, 28, 28, 0, 30, 27, 27, 27, 27, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 30, 30, 0, 0, }; static const Q_UINT8 * const unicode_info[256] = { ui_00, ui_01, ui_02, ui_03, ui_04, ui_05, ui_06, ui_07, ui_08, ui_09, ui_0A, ui_0B, ui_0C, ui_0D, ui_0E, ui_0F, ui_10, ui_11, ui_12, ui_13, ui_14, ui_15, ui_16, ui_17, ui_18, ui_08, ui_08, ui_08, ui_08, ui_08, ui_1E, ui_1F, ui_20, ui_21, ui_22, ui_23, ui_24, ui_25, ui_26, ui_27, ui_28, ui_08, ui_08, ui_08, ui_08, ui_08, ui_2E, ui_2F, ui_30, ui_31, ui_32, ui_33, ui_34, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_4D, ui_34, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_9F, ui_15, ui_15, ui_15, ui_15, ui_A4, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_34, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_D7, ui_D8, ui_08, ui_08, ui_DB, ui_D8, ui_08, ui_08, ui_DF, ui_E0, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_F8, ui_15, ui_FA, ui_FB, ui_15, ui_FD, ui_FE, ui_FF, }; // 15616 bytes static const Q_UINT16 decomposition_map [] = { 0, 3, 0x00A0, 0x0020, 0, 16, 0x00A8, 0x0020, 0x0308, 0, 9, 0x00AA, 0x0061, 0, 16, 0x00AF, 0x0020, 0x0304, 0, 9, 0x00B2, 0x0032, 0, 9, 0x00B3, 0x0033, 0, 16, 0x00B4, 0x0020, 0x0301, 0, 16, 0x00B5, 0x03BC, 0, 16, 0x00B8, 0x0020, 0x0327, 0, 9, 0x00B9, 0x0031, 0, 9, 0x00BA, 0x006F, 0, 17, 0x00BC, 0x0031, 0x2044, 0x0034, 0, 17, 0x00BD, 0x0031, 0x2044, 0x0032, 0, 17, 0x00BE, 0x0033, 0x2044, 0x0034, 0, 1, 0x00C0, 0x0041, 0x0300, 0, 1, 0x00C1, 0x0041, 0x0301, 0, 1, 0x00C2, 0x0041, 0x0302, 0, 1, 0x00C3, 0x0041, 0x0303, 0, 1, 0x00C4, 0x0041, 0x0308, 0, 1, 0x00C5, 0x0041, 0x030A, 0, 1, 0x00C7, 0x0043, 0x0327, 0, 1, 0x00C8, 0x0045, 0x0300, 0, 1, 0x00C9, 0x0045, 0x0301, 0, 1, 0x00CA, 0x0045, 0x0302, 0, 1, 0x00CB, 0x0045, 0x0308, 0, 1, 0x00CC, 0x0049, 0x0300, 0, 1, 0x00CD, 0x0049, 0x0301, 0, 1, 0x00CE, 0x0049, 0x0302, 0, 1, 0x00CF, 0x0049, 0x0308, 0, 1, 0x00D1, 0x004E, 0x0303, 0, 1, 0x00D2, 0x004F, 0x0300, 0, 1, 0x00D3, 0x004F, 0x0301, 0, 1, 0x00D4, 0x004F, 0x0302, 0, 1, 0x00D5, 0x004F, 0x0303, 0, 1, 0x00D6, 0x004F, 0x0308, 0, 1, 0x00D9, 0x0055, 0x0300, 0, 1, 0x00DA, 0x0055, 0x0301, 0, 1, 0x00DB, 0x0055, 0x0302, 0, 1, 0x00DC, 0x0055, 0x0308, 0, 1, 0x00DD, 0x0059, 0x0301, 0, 1, 0x00E0, 0x0061, 0x0300, 0, 1, 0x00E1, 0x0061, 0x0301, 0, 1, 0x00E2, 0x0061, 0x0302, 0, 1, 0x00E3, 0x0061, 0x0303, 0, 1, 0x00E4, 0x0061, 0x0308, 0, 1, 0x00E5, 0x0061, 0x030A, 0, 1, 0x00E7, 0x0063, 0x0327, 0, 1, 0x00E8, 0x0065, 0x0300, 0, 1, 0x00E9, 0x0065, 0x0301, 0, 1, 0x00EA, 0x0065, 0x0302, 0, 1, 0x00EB, 0x0065, 0x0308, 0, 1, 0x00EC, 0x0069, 0x0300, 0, 1, 0x00ED, 0x0069, 0x0301, 0, 1, 0x00EE, 0x0069, 0x0302, 0, 1, 0x00EF, 0x0069, 0x0308, 0, 1, 0x00F1, 0x006E, 0x0303, 0, 1, 0x00F2, 0x006F, 0x0300, 0, 1, 0x00F3, 0x006F, 0x0301, 0, 1, 0x00F4, 0x006F, 0x0302, 0, 1, 0x00F5, 0x006F, 0x0303, 0, 1, 0x00F6, 0x006F, 0x0308, 0, 1, 0x00F9, 0x0075, 0x0300, 0, 1, 0x00FA, 0x0075, 0x0301, 0, 1, 0x00FB, 0x0075, 0x0302, 0, 1, 0x00FC, 0x0075, 0x0308, 0, 1, 0x00FD, 0x0079, 0x0301, 0, 1, 0x00FF, 0x0079, 0x0308, 0, 1, 0x0100, 0x0041, 0x0304, 0, 1, 0x0101, 0x0061, 0x0304, 0, 1, 0x0102, 0x0041, 0x0306, 0, 1, 0x0103, 0x0061, 0x0306, 0, 1, 0x0104, 0x0041, 0x0328, 0, 1, 0x0105, 0x0061, 0x0328, 0, 1, 0x0106, 0x0043, 0x0301, 0, 1, 0x0107, 0x0063, 0x0301, 0, 1, 0x0108, 0x0043, 0x0302, 0, 1, 0x0109, 0x0063, 0x0302, 0, 1, 0x010A, 0x0043, 0x0307, 0, 1, 0x010B, 0x0063, 0x0307, 0, 1, 0x010C, 0x0043, 0x030C, 0, 1, 0x010D, 0x0063, 0x030C, 0, 1, 0x010E, 0x0044, 0x030C, 0, 1, 0x010F, 0x0064, 0x030C, 0, 1, 0x0112, 0x0045, 0x0304, 0, 1, 0x0113, 0x0065, 0x0304, 0, 1, 0x0114, 0x0045, 0x0306, 0, 1, 0x0115, 0x0065, 0x0306, 0, 1, 0x0116, 0x0045, 0x0307, 0, 1, 0x0117, 0x0065, 0x0307, 0, 1, 0x0118, 0x0045, 0x0328, 0, 1, 0x0119, 0x0065, 0x0328, 0, 1, 0x011A, 0x0045, 0x030C, 0, 1, 0x011B, 0x0065, 0x030C, 0, 1, 0x011C, 0x0047, 0x0302, 0, 1, 0x011D, 0x0067, 0x0302, 0, 1, 0x011E, 0x0047, 0x0306, 0, 1, 0x011F, 0x0067, 0x0306, 0, 1, 0x0120, 0x0047, 0x0307, 0, 1, 0x0121, 0x0067, 0x0307, 0, 1, 0x0122, 0x0047, 0x0327, 0, 1, 0x0123, 0x0067, 0x0327, 0, 1, 0x0124, 0x0048, 0x0302, 0, 1, 0x0125, 0x0068, 0x0302, 0, 1, 0x0128, 0x0049, 0x0303, 0, 1, 0x0129, 0x0069, 0x0303, 0, 1, 0x012A, 0x0049, 0x0304, 0, 1, 0x012B, 0x0069, 0x0304, 0, 1, 0x012C, 0x0049, 0x0306, 0, 1, 0x012D, 0x0069, 0x0306, 0, 1, 0x012E, 0x0049, 0x0328, 0, 1, 0x012F, 0x0069, 0x0328, 0, 1, 0x0130, 0x0049, 0x0307, 0, 16, 0x0132, 0x0049, 0x004A, 0, 16, 0x0133, 0x0069, 0x006A, 0, 1, 0x0134, 0x004A, 0x0302, 0, 1, 0x0135, 0x006A, 0x0302, 0, 1, 0x0136, 0x004B, 0x0327, 0, 1, 0x0137, 0x006B, 0x0327, 0, 1, 0x0139, 0x004C, 0x0301, 0, 1, 0x013A, 0x006C, 0x0301, 0, 1, 0x013B, 0x004C, 0x0327, 0, 1, 0x013C, 0x006C, 0x0327, 0, 1, 0x013D, 0x004C, 0x030C, 0, 1, 0x013E, 0x006C, 0x030C, 0, 16, 0x013F, 0x004C, 0x00B7, 0, 16, 0x0140, 0x006C, 0x00B7, 0, 1, 0x0143, 0x004E, 0x0301, 0, 1, 0x0144, 0x006E, 0x0301, 0, 1, 0x0145, 0x004E, 0x0327, 0, 1, 0x0146, 0x006E, 0x0327, 0, 1, 0x0147, 0x004E, 0x030C, 0, 1, 0x0148, 0x006E, 0x030C, 0, 16, 0x0149, 0x02BC, 0x006E, 0, 1, 0x014C, 0x004F, 0x0304, 0, 1, 0x014D, 0x006F, 0x0304, 0, 1, 0x014E, 0x004F, 0x0306, 0, 1, 0x014F, 0x006F, 0x0306, 0, 1, 0x0150, 0x004F, 0x030B, 0, 1, 0x0151, 0x006F, 0x030B, 0, 1, 0x0154, 0x0052, 0x0301, 0, 1, 0x0155, 0x0072, 0x0301, 0, 1, 0x0156, 0x0052, 0x0327, 0, 1, 0x0157, 0x0072, 0x0327, 0, 1, 0x0158, 0x0052, 0x030C, 0, 1, 0x0159, 0x0072, 0x030C, 0, 1, 0x015A, 0x0053, 0x0301, 0, 1, 0x015B, 0x0073, 0x0301, 0, 1, 0x015C, 0x0053, 0x0302, 0, 1, 0x015D, 0x0073, 0x0302, 0, 1, 0x015E, 0x0053, 0x0327, 0, 1, 0x015F, 0x0073, 0x0327, 0, 1, 0x0160, 0x0053, 0x030C, 0, 1, 0x0161, 0x0073, 0x030C, 0, 1, 0x0162, 0x0054, 0x0327, 0, 1, 0x0163, 0x0074, 0x0327, 0, 1, 0x0164, 0x0054, 0x030C, 0, 1, 0x0165, 0x0074, 0x030C, 0, 1, 0x0168, 0x0055, 0x0303, 0, 1, 0x0169, 0x0075, 0x0303, 0, 1, 0x016A, 0x0055, 0x0304, 0, 1, 0x016B, 0x0075, 0x0304, 0, 1, 0x016C, 0x0055, 0x0306, 0, 1, 0x016D, 0x0075, 0x0306, 0, 1, 0x016E, 0x0055, 0x030A, 0, 1, 0x016F, 0x0075, 0x030A, 0, 1, 0x0170, 0x0055, 0x030B, 0, 1, 0x0171, 0x0075, 0x030B, 0, 1, 0x0172, 0x0055, 0x0328, 0, 1, 0x0173, 0x0075, 0x0328, 0, 1, 0x0174, 0x0057, 0x0302, 0, 1, 0x0175, 0x0077, 0x0302, 0, 1, 0x0176, 0x0059, 0x0302, 0, 1, 0x0177, 0x0079, 0x0302, 0, 1, 0x0178, 0x0059, 0x0308, 0, 1, 0x0179, 0x005A, 0x0301, 0, 1, 0x017A, 0x007A, 0x0301, 0, 1, 0x017B, 0x005A, 0x0307, 0, 1, 0x017C, 0x007A, 0x0307, 0, 1, 0x017D, 0x005A, 0x030C, 0, 1, 0x017E, 0x007A, 0x030C, 0, 16, 0x017F, 0x0073, 0, 1, 0x01A0, 0x004F, 0x031B, 0, 1, 0x01A1, 0x006F, 0x031B, 0, 1, 0x01AF, 0x0055, 0x031B, 0, 1, 0x01B0, 0x0075, 0x031B, 0, 16, 0x01C4, 0x0044, 0x017D, 0, 16, 0x01C5, 0x0044, 0x017E, 0, 16, 0x01C6, 0x0064, 0x017E, 0, 16, 0x01C7, 0x004C, 0x004A, 0, 16, 0x01C8, 0x004C, 0x006A, 0, 16, 0x01C9, 0x006C, 0x006A, 0, 16, 0x01CA, 0x004E, 0x004A, 0, 16, 0x01CB, 0x004E, 0x006A, 0, 16, 0x01CC, 0x006E, 0x006A, 0, 1, 0x01CD, 0x0041, 0x030C, 0, 1, 0x01CE, 0x0061, 0x030C, 0, 1, 0x01CF, 0x0049, 0x030C, 0, 1, 0x01D0, 0x0069, 0x030C, 0, 1, 0x01D1, 0x004F, 0x030C, 0, 1, 0x01D2, 0x006F, 0x030C, 0, 1, 0x01D3, 0x0055, 0x030C, 0, 1, 0x01D4, 0x0075, 0x030C, 0, 1, 0x01D5, 0x00DC, 0x0304, 0, 1, 0x01D6, 0x00FC, 0x0304, 0, 1, 0x01D7, 0x00DC, 0x0301, 0, 1, 0x01D8, 0x00FC, 0x0301, 0, 1, 0x01D9, 0x00DC, 0x030C, 0, 1, 0x01DA, 0x00FC, 0x030C, 0, 1, 0x01DB, 0x00DC, 0x0300, 0, 1, 0x01DC, 0x00FC, 0x0300, 0, 1, 0x01DE, 0x00C4, 0x0304, 0, 1, 0x01DF, 0x00E4, 0x0304, 0, 1, 0x01E0, 0x0226, 0x0304, 0, 1, 0x01E1, 0x0227, 0x0304, 0, 1, 0x01E2, 0x00C6, 0x0304, 0, 1, 0x01E3, 0x00E6, 0x0304, 0, 1, 0x01E6, 0x0047, 0x030C, 0, 1, 0x01E7, 0x0067, 0x030C, 0, 1, 0x01E8, 0x004B, 0x030C, 0, 1, 0x01E9, 0x006B, 0x030C, 0, 1, 0x01EA, 0x004F, 0x0328, 0, 1, 0x01EB, 0x006F, 0x0328, 0, 1, 0x01EC, 0x01EA, 0x0304, 0, 1, 0x01ED, 0x01EB, 0x0304, 0, 1, 0x01EE, 0x01B7, 0x030C, 0, 1, 0x01EF, 0x0292, 0x030C, 0, 1, 0x01F0, 0x006A, 0x030C, 0, 16, 0x01F1, 0x0044, 0x005A, 0, 16, 0x01F2, 0x0044, 0x007A, 0, 16, 0x01F3, 0x0064, 0x007A, 0, 1, 0x01F4, 0x0047, 0x0301, 0, 1, 0x01F5, 0x0067, 0x0301, 0, 1, 0x01F8, 0x004E, 0x0300, 0, 1, 0x01F9, 0x006E, 0x0300, 0, 1, 0x01FA, 0x00C5, 0x0301, 0, 1, 0x01FB, 0x00E5, 0x0301, 0, 1, 0x01FC, 0x00C6, 0x0301, 0, 1, 0x01FD, 0x00E6, 0x0301, 0, 1, 0x01FE, 0x00D8, 0x0301, 0, 1, 0x01FF, 0x00F8, 0x0301, 0, 1, 0x0200, 0x0041, 0x030F, 0, 1, 0x0201, 0x0061, 0x030F, 0, 1, 0x0202, 0x0041, 0x0311, 0, 1, 0x0203, 0x0061, 0x0311, 0, 1, 0x0204, 0x0045, 0x030F, 0, 1, 0x0205, 0x0065, 0x030F, 0, 1, 0x0206, 0x0045, 0x0311, 0, 1, 0x0207, 0x0065, 0x0311, 0, 1, 0x0208, 0x0049, 0x030F, 0, 1, 0x0209, 0x0069, 0x030F, 0, 1, 0x020A, 0x0049, 0x0311, 0, 1, 0x020B, 0x0069, 0x0311, 0, 1, 0x020C, 0x004F, 0x030F, 0, 1, 0x020D, 0x006F, 0x030F, 0, 1, 0x020E, 0x004F, 0x0311, 0, 1, 0x020F, 0x006F, 0x0311, 0, 1, 0x0210, 0x0052, 0x030F, 0, 1, 0x0211, 0x0072, 0x030F, 0, 1, 0x0212, 0x0052, 0x0311, 0, 1, 0x0213, 0x0072, 0x0311, 0, 1, 0x0214, 0x0055, 0x030F, 0, 1, 0x0215, 0x0075, 0x030F, 0, 1, 0x0216, 0x0055, 0x0311, 0, 1, 0x0217, 0x0075, 0x0311, 0, 1, 0x0218, 0x0053, 0x0326, 0, 1, 0x0219, 0x0073, 0x0326, 0, 1, 0x021A, 0x0054, 0x0326, 0, 1, 0x021B, 0x0074, 0x0326, 0, 1, 0x021E, 0x0048, 0x030C, 0, 1, 0x021F, 0x0068, 0x030C, 0, 1, 0x0226, 0x0041, 0x0307, 0, 1, 0x0227, 0x0061, 0x0307, 0, 1, 0x0228, 0x0045, 0x0327, 0, 1, 0x0229, 0x0065, 0x0327, 0, 1, 0x022A, 0x00D6, 0x0304, 0, 1, 0x022B, 0x00F6, 0x0304, 0, 1, 0x022C, 0x00D5, 0x0304, 0, 1, 0x022D, 0x00F5, 0x0304, 0, 1, 0x022E, 0x004F, 0x0307, 0, 1, 0x022F, 0x006F, 0x0307, 0, 1, 0x0230, 0x022E, 0x0304, 0, 1, 0x0231, 0x022F, 0x0304, 0, 1, 0x0232, 0x0059, 0x0304, 0, 1, 0x0233, 0x0079, 0x0304, 0, 9, 0x02B0, 0x0068, 0, 9, 0x02B1, 0x0266, 0, 9, 0x02B2, 0x006A, 0, 9, 0x02B3, 0x0072, 0, 9, 0x02B4, 0x0279, 0, 9, 0x02B5, 0x027B, 0, 9, 0x02B6, 0x0281, 0, 9, 0x02B7, 0x0077, 0, 9, 0x02B8, 0x0079, 0, 16, 0x02D8, 0x0020, 0x0306, 0, 16, 0x02D9, 0x0020, 0x0307, 0, 16, 0x02DA, 0x0020, 0x030A, 0, 16, 0x02DB, 0x0020, 0x0328, 0, 16, 0x02DC, 0x0020, 0x0303, 0, 16, 0x02DD, 0x0020, 0x030B, 0, 9, 0x02E0, 0x0263, 0, 9, 0x02E1, 0x006C, 0, 9, 0x02E2, 0x0073, 0, 9, 0x02E3, 0x0078, 0, 9, 0x02E4, 0x0295, 0, 1, 0x0340, 0x0300, 0, 1, 0x0341, 0x0301, 0, 1, 0x0343, 0x0313, 0, 1, 0x0344, 0x0308, 0x0301, 0, 1, 0x0374, 0x02B9, 0, 16, 0x037A, 0x0020, 0x0345, 0, 1, 0x037E, 0x003B, 0, 16, 0x0384, 0x0020, 0x0301, 0, 1, 0x0385, 0x00A8, 0x0301, 0, 1, 0x0386, 0x0391, 0x0301, 0, 1, 0x0387, 0x00B7, 0, 1, 0x0388, 0x0395, 0x0301, 0, 1, 0x0389, 0x0397, 0x0301, 0, 1, 0x038A, 0x0399, 0x0301, 0, 1, 0x038C, 0x039F, 0x0301, 0, 1, 0x038E, 0x03A5, 0x0301, 0, 1, 0x038F, 0x03A9, 0x0301, 0, 1, 0x0390, 0x03CA, 0x0301, 0, 1, 0x03AA, 0x0399, 0x0308, 0, 1, 0x03AB, 0x03A5, 0x0308, 0, 1, 0x03AC, 0x03B1, 0x0301, 0, 1, 0x03AD, 0x03B5, 0x0301, 0, 1, 0x03AE, 0x03B7, 0x0301, 0, 1, 0x03AF, 0x03B9, 0x0301, 0, 1, 0x03B0, 0x03CB, 0x0301, 0, 1, 0x03CA, 0x03B9, 0x0308, 0, 1, 0x03CB, 0x03C5, 0x0308, 0, 1, 0x03CC, 0x03BF, 0x0301, 0, 1, 0x03CD, 0x03C5, 0x0301, 0, 1, 0x03CE, 0x03C9, 0x0301, 0, 16, 0x03D0, 0x03B2, 0, 16, 0x03D1, 0x03B8, 0, 16, 0x03D2, 0x03A5, 0, 1, 0x03D3, 0x03D2, 0x0301, 0, 1, 0x03D4, 0x03D2, 0x0308, 0, 16, 0x03D5, 0x03C6, 0, 16, 0x03D6, 0x03C0, 0, 16, 0x03F0, 0x03BA, 0, 16, 0x03F1, 0x03C1, 0, 16, 0x03F2, 0x03C2, 0, 1, 0x0400, 0x0415, 0x0300, 0, 1, 0x0401, 0x0415, 0x0308, 0, 1, 0x0403, 0x0413, 0x0301, 0, 1, 0x0407, 0x0406, 0x0308, 0, 1, 0x040C, 0x041A, 0x0301, 0, 1, 0x040D, 0x0418, 0x0300, 0, 1, 0x040E, 0x0423, 0x0306, 0, 1, 0x0419, 0x0418, 0x0306, 0, 1, 0x0439, 0x0438, 0x0306, 0, 1, 0x0450, 0x0435, 0x0300, 0, 1, 0x0451, 0x0435, 0x0308, 0, 1, 0x0453, 0x0433, 0x0301, 0, 1, 0x0457, 0x0456, 0x0308, 0, 1, 0x045C, 0x043A, 0x0301, 0, 1, 0x045D, 0x0438, 0x0300, 0, 1, 0x045E, 0x0443, 0x0306, 0, 1, 0x0476, 0x0474, 0x030F, 0, 1, 0x0477, 0x0475, 0x030F, 0, 1, 0x04C1, 0x0416, 0x0306, 0, 1, 0x04C2, 0x0436, 0x0306, 0, 1, 0x04D0, 0x0410, 0x0306, 0, 1, 0x04D1, 0x0430, 0x0306, 0, 1, 0x04D2, 0x0410, 0x0308, 0, 1, 0x04D3, 0x0430, 0x0308, 0, 1, 0x04D6, 0x0415, 0x0306, 0, 1, 0x04D7, 0x0435, 0x0306, 0, 1, 0x04DA, 0x04D8, 0x0308, 0, 1, 0x04DB, 0x04D9, 0x0308, 0, 1, 0x04DC, 0x0416, 0x0308, 0, 1, 0x04DD, 0x0436, 0x0308, 0, 1, 0x04DE, 0x0417, 0x0308, 0, 1, 0x04DF, 0x0437, 0x0308, 0, 1, 0x04E2, 0x0418, 0x0304, 0, 1, 0x04E3, 0x0438, 0x0304, 0, 1, 0x04E4, 0x0418, 0x0308, 0, 1, 0x04E5, 0x0438, 0x0308, 0, 1, 0x04E6, 0x041E, 0x0308, 0, 1, 0x04E7, 0x043E, 0x0308, 0, 1, 0x04EA, 0x04E8, 0x0308, 0, 1, 0x04EB, 0x04E9, 0x0308, 0, 1, 0x04EC, 0x042D, 0x0308, 0, 1, 0x04ED, 0x044D, 0x0308, 0, 1, 0x04EE, 0x0423, 0x0304, 0, 1, 0x04EF, 0x0443, 0x0304, 0, 1, 0x04F0, 0x0423, 0x0308, 0, 1, 0x04F1, 0x0443, 0x0308, 0, 1, 0x04F2, 0x0423, 0x030B, 0, 1, 0x04F3, 0x0443, 0x030B, 0, 1, 0x04F4, 0x0427, 0x0308, 0, 1, 0x04F5, 0x0447, 0x0308, 0, 1, 0x04F8, 0x042B, 0x0308, 0, 1, 0x04F9, 0x044B, 0x0308, 0, 16, 0x0587, 0x0565, 0x0582, 0, 1, 0x0622, 0x0627, 0x0653, 0, 1, 0x0623, 0x0627, 0x0654, 0, 1, 0x0624, 0x0648, 0x0654, 0, 1, 0x0625, 0x0627, 0x0655, 0, 1, 0x0626, 0x064A, 0x0654, 0, 16, 0x0675, 0x0627, 0x0674, 0, 16, 0x0676, 0x0648, 0x0674, 0, 16, 0x0677, 0x06C7, 0x0674, 0, 16, 0x0678, 0x064A, 0x0674, 0, 1, 0x06C0, 0x06D5, 0x0654, 0, 1, 0x06C2, 0x06C1, 0x0654, 0, 1, 0x06D3, 0x06D2, 0x0654, 0, 1, 0x0929, 0x0928, 0x093C, 0, 1, 0x0931, 0x0930, 0x093C, 0, 1, 0x0934, 0x0933, 0x093C, 0, 1, 0x0958, 0x0915, 0x093C, 0, 1, 0x0959, 0x0916, 0x093C, 0, 1, 0x095A, 0x0917, 0x093C, 0, 1, 0x095B, 0x091C, 0x093C, 0, 1, 0x095C, 0x0921, 0x093C, 0, 1, 0x095D, 0x0922, 0x093C, 0, 1, 0x095E, 0x092B, 0x093C, 0, 1, 0x095F, 0x092F, 0x093C, 0, 1, 0x09CB, 0x09C7, 0x09BE, 0, 1, 0x09CC, 0x09C7, 0x09D7, 0, 1, 0x09DC, 0x09A1, 0x09BC, 0, 1, 0x09DD, 0x09A2, 0x09BC, 0, 1, 0x09DF, 0x09AF, 0x09BC, 0, 1, 0x0A33, 0x0A32, 0x0A3C, 0, 1, 0x0A36, 0x0A38, 0x0A3C, 0, 1, 0x0A59, 0x0A16, 0x0A3C, 0, 1, 0x0A5A, 0x0A17, 0x0A3C, 0, 1, 0x0A5B, 0x0A1C, 0x0A3C, 0, 1, 0x0A5E, 0x0A2B, 0x0A3C, 0, 1, 0x0B48, 0x0B47, 0x0B56, 0, 1, 0x0B4B, 0x0B47, 0x0B3E, 0, 1, 0x0B4C, 0x0B47, 0x0B57, 0, 1, 0x0B5C, 0x0B21, 0x0B3C, 0, 1, 0x0B5D, 0x0B22, 0x0B3C, 0, 1, 0x0B94, 0x0B92, 0x0BD7, 0, 1, 0x0BCA, 0x0BC6, 0x0BBE, 0, 1, 0x0BCB, 0x0BC7, 0x0BBE, 0, 1, 0x0BCC, 0x0BC6, 0x0BD7, 0, 1, 0x0C48, 0x0C46, 0x0C56, 0, 1, 0x0CC0, 0x0CBF, 0x0CD5, 0, 1, 0x0CC7, 0x0CC6, 0x0CD5, 0, 1, 0x0CC8, 0x0CC6, 0x0CD6, 0, 1, 0x0CCA, 0x0CC6, 0x0CC2, 0, 1, 0x0CCB, 0x0CCA, 0x0CD5, 0, 1, 0x0D4A, 0x0D46, 0x0D3E, 0, 1, 0x0D4B, 0x0D47, 0x0D3E, 0, 1, 0x0D4C, 0x0D46, 0x0D57, 0, 1, 0x0DDA, 0x0DD9, 0x0DCA, 0, 1, 0x0DDC, 0x0DD9, 0x0DCF, 0, 1, 0x0DDD, 0x0DDC, 0x0DCA, 0, 1, 0x0DDE, 0x0DD9, 0x0DDF, 0, 16, 0x0E33, 0x0E4D, 0x0E32, 0, 16, 0x0EB3, 0x0ECD, 0x0EB2, 0, 16, 0x0EDC, 0x0EAB, 0x0E99, 0, 16, 0x0EDD, 0x0EAB, 0x0EA1, 0, 3, 0x0F0C, 0x0F0B, 0, 1, 0x0F43, 0x0F42, 0x0FB7, 0, 1, 0x0F4D, 0x0F4C, 0x0FB7, 0, 1, 0x0F52, 0x0F51, 0x0FB7, 0, 1, 0x0F57, 0x0F56, 0x0FB7, 0, 1, 0x0F5C, 0x0F5B, 0x0FB7, 0, 1, 0x0F69, 0x0F40, 0x0FB5, 0, 1, 0x0F73, 0x0F71, 0x0F72, 0, 1, 0x0F75, 0x0F71, 0x0F74, 0, 1, 0x0F76, 0x0FB2, 0x0F80, 0, 16, 0x0F77, 0x0FB2, 0x0F81, 0, 1, 0x0F78, 0x0FB3, 0x0F80, 0, 16, 0x0F79, 0x0FB3, 0x0F81, 0, 1, 0x0F81, 0x0F71, 0x0F80, 0, 1, 0x0F93, 0x0F92, 0x0FB7, 0, 1, 0x0F9D, 0x0F9C, 0x0FB7, 0, 1, 0x0FA2, 0x0FA1, 0x0FB7, 0, 1, 0x0FA7, 0x0FA6, 0x0FB7, 0, 1, 0x0FAC, 0x0FAB, 0x0FB7, 0, 1, 0x0FB9, 0x0F90, 0x0FB5, 0, 1, 0x1026, 0x1025, 0x102E, 0, 1, 0x1E00, 0x0041, 0x0325, 0, 1, 0x1E01, 0x0061, 0x0325, 0, 1, 0x1E02, 0x0042, 0x0307, 0, 1, 0x1E03, 0x0062, 0x0307, 0, 1, 0x1E04, 0x0042, 0x0323, 0, 1, 0x1E05, 0x0062, 0x0323, 0, 1, 0x1E06, 0x0042, 0x0331, 0, 1, 0x1E07, 0x0062, 0x0331, 0, 1, 0x1E08, 0x00C7, 0x0301, 0, 1, 0x1E09, 0x00E7, 0x0301, 0, 1, 0x1E0A, 0x0044, 0x0307, 0, 1, 0x1E0B, 0x0064, 0x0307, 0, 1, 0x1E0C, 0x0044, 0x0323, 0, 1, 0x1E0D, 0x0064, 0x0323, 0, 1, 0x1E0E, 0x0044, 0x0331, 0, 1, 0x1E0F, 0x0064, 0x0331, 0, 1, 0x1E10, 0x0044, 0x0327, 0, 1, 0x1E11, 0x0064, 0x0327, 0, 1, 0x1E12, 0x0044, 0x032D, 0, 1, 0x1E13, 0x0064, 0x032D, 0, 1, 0x1E14, 0x0112, 0x0300, 0, 1, 0x1E15, 0x0113, 0x0300, 0, 1, 0x1E16, 0x0112, 0x0301, 0, 1, 0x1E17, 0x0113, 0x0301, 0, 1, 0x1E18, 0x0045, 0x032D, 0, 1, 0x1E19, 0x0065, 0x032D, 0, 1, 0x1E1A, 0x0045, 0x0330, 0, 1, 0x1E1B, 0x0065, 0x0330, 0, 1, 0x1E1C, 0x0228, 0x0306, 0, 1, 0x1E1D, 0x0229, 0x0306, 0, 1, 0x1E1E, 0x0046, 0x0307, 0, 1, 0x1E1F, 0x0066, 0x0307, 0, 1, 0x1E20, 0x0047, 0x0304, 0, 1, 0x1E21, 0x0067, 0x0304, 0, 1, 0x1E22, 0x0048, 0x0307, 0, 1, 0x1E23, 0x0068, 0x0307, 0, 1, 0x1E24, 0x0048, 0x0323, 0, 1, 0x1E25, 0x0068, 0x0323, 0, 1, 0x1E26, 0x0048, 0x0308, 0, 1, 0x1E27, 0x0068, 0x0308, 0, 1, 0x1E28, 0x0048, 0x0327, 0, 1, 0x1E29, 0x0068, 0x0327, 0, 1, 0x1E2A, 0x0048, 0x032E, 0, 1, 0x1E2B, 0x0068, 0x032E, 0, 1, 0x1E2C, 0x0049, 0x0330, 0, 1, 0x1E2D, 0x0069, 0x0330, 0, 1, 0x1E2E, 0x00CF, 0x0301, 0, 1, 0x1E2F, 0x00EF, 0x0301, 0, 1, 0x1E30, 0x004B, 0x0301, 0, 1, 0x1E31, 0x006B, 0x0301, 0, 1, 0x1E32, 0x004B, 0x0323, 0, 1, 0x1E33, 0x006B, 0x0323, 0, 1, 0x1E34, 0x004B, 0x0331, 0, 1, 0x1E35, 0x006B, 0x0331, 0, 1, 0x1E36, 0x004C, 0x0323, 0, 1, 0x1E37, 0x006C, 0x0323, 0, 1, 0x1E38, 0x1E36, 0x0304, 0, 1, 0x1E39, 0x1E37, 0x0304, 0, 1, 0x1E3A, 0x004C, 0x0331, 0, 1, 0x1E3B, 0x006C, 0x0331, 0, 1, 0x1E3C, 0x004C, 0x032D, 0, 1, 0x1E3D, 0x006C, 0x032D, 0, 1, 0x1E3E, 0x004D, 0x0301, 0, 1, 0x1E3F, 0x006D, 0x0301, 0, 1, 0x1E40, 0x004D, 0x0307, 0, 1, 0x1E41, 0x006D, 0x0307, 0, 1, 0x1E42, 0x004D, 0x0323, 0, 1, 0x1E43, 0x006D, 0x0323, 0, 1, 0x1E44, 0x004E, 0x0307, 0, 1, 0x1E45, 0x006E, 0x0307, 0, 1, 0x1E46, 0x004E, 0x0323, 0, 1, 0x1E47, 0x006E, 0x0323, 0, 1, 0x1E48, 0x004E, 0x0331, 0, 1, 0x1E49, 0x006E, 0x0331, 0, 1, 0x1E4A, 0x004E, 0x032D, 0, 1, 0x1E4B, 0x006E, 0x032D, 0, 1, 0x1E4C, 0x00D5, 0x0301, 0, 1, 0x1E4D, 0x00F5, 0x0301, 0, 1, 0x1E4E, 0x00D5, 0x0308, 0, 1, 0x1E4F, 0x00F5, 0x0308, 0, 1, 0x1E50, 0x014C, 0x0300, 0, 1, 0x1E51, 0x014D, 0x0300, 0, 1, 0x1E52, 0x014C, 0x0301, 0, 1, 0x1E53, 0x014D, 0x0301, 0, 1, 0x1E54, 0x0050, 0x0301, 0, 1, 0x1E55, 0x0070, 0x0301, 0, 1, 0x1E56, 0x0050, 0x0307, 0, 1, 0x1E57, 0x0070, 0x0307, 0, 1, 0x1E58, 0x0052, 0x0307, 0, 1, 0x1E59, 0x0072, 0x0307, 0, 1, 0x1E5A, 0x0052, 0x0323, 0, 1, 0x1E5B, 0x0072, 0x0323, 0, 1, 0x1E5C, 0x1E5A, 0x0304, 0, 1, 0x1E5D, 0x1E5B, 0x0304, 0, 1, 0x1E5E, 0x0052, 0x0331, 0, 1, 0x1E5F, 0x0072, 0x0331, 0, 1, 0x1E60, 0x0053, 0x0307, 0, 1, 0x1E61, 0x0073, 0x0307, 0, 1, 0x1E62, 0x0053, 0x0323, 0, 1, 0x1E63, 0x0073, 0x0323, 0, 1, 0x1E64, 0x015A, 0x0307, 0, 1, 0x1E65, 0x015B, 0x0307, 0, 1, 0x1E66, 0x0160, 0x0307, 0, 1, 0x1E67, 0x0161, 0x0307, 0, 1, 0x1E68, 0x1E62, 0x0307, 0, 1, 0x1E69, 0x1E63, 0x0307, 0, 1, 0x1E6A, 0x0054, 0x0307, 0, 1, 0x1E6B, 0x0074, 0x0307, 0, 1, 0x1E6C, 0x0054, 0x0323, 0, 1, 0x1E6D, 0x0074, 0x0323, 0, 1, 0x1E6E, 0x0054, 0x0331, 0, 1, 0x1E6F, 0x0074, 0x0331, 0, 1, 0x1E70, 0x0054, 0x032D, 0, 1, 0x1E71, 0x0074, 0x032D, 0, 1, 0x1E72, 0x0055, 0x0324, 0, 1, 0x1E73, 0x0075, 0x0324, 0, 1, 0x1E74, 0x0055, 0x0330, 0, 1, 0x1E75, 0x0075, 0x0330, 0, 1, 0x1E76, 0x0055, 0x032D, 0, 1, 0x1E77, 0x0075, 0x032D, 0, 1, 0x1E78, 0x0168, 0x0301, 0, 1, 0x1E79, 0x0169, 0x0301, 0, 1, 0x1E7A, 0x016A, 0x0308, 0, 1, 0x1E7B, 0x016B, 0x0308, 0, 1, 0x1E7C, 0x0056, 0x0303, 0, 1, 0x1E7D, 0x0076, 0x0303, 0, 1, 0x1E7E, 0x0056, 0x0323, 0, 1, 0x1E7F, 0x0076, 0x0323, 0, 1, 0x1E80, 0x0057, 0x0300, 0, 1, 0x1E81, 0x0077, 0x0300, 0, 1, 0x1E82, 0x0057, 0x0301, 0, 1, 0x1E83, 0x0077, 0x0301, 0, 1, 0x1E84, 0x0057, 0x0308, 0, 1, 0x1E85, 0x0077, 0x0308, 0, 1, 0x1E86, 0x0057, 0x0307, 0, 1, 0x1E87, 0x0077, 0x0307, 0, 1, 0x1E88, 0x0057, 0x0323, 0, 1, 0x1E89, 0x0077, 0x0323, 0, 1, 0x1E8A, 0x0058, 0x0307, 0, 1, 0x1E8B, 0x0078, 0x0307, 0, 1, 0x1E8C, 0x0058, 0x0308, 0, 1, 0x1E8D, 0x0078, 0x0308, 0, 1, 0x1E8E, 0x0059, 0x0307, 0, 1, 0x1E8F, 0x0079, 0x0307, 0, 1, 0x1E90, 0x005A, 0x0302, 0, 1, 0x1E91, 0x007A, 0x0302, 0, 1, 0x1E92, 0x005A, 0x0323, 0, 1, 0x1E93, 0x007A, 0x0323, 0, 1, 0x1E94, 0x005A, 0x0331, 0, 1, 0x1E95, 0x007A, 0x0331, 0, 1, 0x1E96, 0x0068, 0x0331, 0, 1, 0x1E97, 0x0074, 0x0308, 0, 1, 0x1E98, 0x0077, 0x030A, 0, 1, 0x1E99, 0x0079, 0x030A, 0, 16, 0x1E9A, 0x0061, 0x02BE, 0, 1, 0x1E9B, 0x017F, 0x0307, 0, 1, 0x1EA0, 0x0041, 0x0323, 0, 1, 0x1EA1, 0x0061, 0x0323, 0, 1, 0x1EA2, 0x0041, 0x0309, 0, 1, 0x1EA3, 0x0061, 0x0309, 0, 1, 0x1EA4, 0x00C2, 0x0301, 0, 1, 0x1EA5, 0x00E2, 0x0301, 0, 1, 0x1EA6, 0x00C2, 0x0300, 0, 1, 0x1EA7, 0x00E2, 0x0300, 0, 1, 0x1EA8, 0x00C2, 0x0309, 0, 1, 0x1EA9, 0x00E2, 0x0309, 0, 1, 0x1EAA, 0x00C2, 0x0303, 0, 1, 0x1EAB, 0x00E2, 0x0303, 0, 1, 0x1EAC, 0x1EA0, 0x0302, 0, 1, 0x1EAD, 0x1EA1, 0x0302, 0, 1, 0x1EAE, 0x0102, 0x0301, 0, 1, 0x1EAF, 0x0103, 0x0301, 0, 1, 0x1EB0, 0x0102, 0x0300, 0, 1, 0x1EB1, 0x0103, 0x0300, 0, 1, 0x1EB2, 0x0102, 0x0309, 0, 1, 0x1EB3, 0x0103, 0x0309, 0, 1, 0x1EB4, 0x0102, 0x0303, 0, 1, 0x1EB5, 0x0103, 0x0303, 0, 1, 0x1EB6, 0x1EA0, 0x0306, 0, 1, 0x1EB7, 0x1EA1, 0x0306, 0, 1, 0x1EB8, 0x0045, 0x0323, 0, 1, 0x1EB9, 0x0065, 0x0323, 0, 1, 0x1EBA, 0x0045, 0x0309, 0, 1, 0x1EBB, 0x0065, 0x0309, 0, 1, 0x1EBC, 0x0045, 0x0303, 0, 1, 0x1EBD, 0x0065, 0x0303, 0, 1, 0x1EBE, 0x00CA, 0x0301, 0, 1, 0x1EBF, 0x00EA, 0x0301, 0, 1, 0x1EC0, 0x00CA, 0x0300, 0, 1, 0x1EC1, 0x00EA, 0x0300, 0, 1, 0x1EC2, 0x00CA, 0x0309, 0, 1, 0x1EC3, 0x00EA, 0x0309, 0, 1, 0x1EC4, 0x00CA, 0x0303, 0, 1, 0x1EC5, 0x00EA, 0x0303, 0, 1, 0x1EC6, 0x1EB8, 0x0302, 0, 1, 0x1EC7, 0x1EB9, 0x0302, 0, 1, 0x1EC8, 0x0049, 0x0309, 0, 1, 0x1EC9, 0x0069, 0x0309, 0, 1, 0x1ECA, 0x0049, 0x0323, 0, 1, 0x1ECB, 0x0069, 0x0323, 0, 1, 0x1ECC, 0x004F, 0x0323, 0, 1, 0x1ECD, 0x006F, 0x0323, 0, 1, 0x1ECE, 0x004F, 0x0309, 0, 1, 0x1ECF, 0x006F, 0x0309, 0, 1, 0x1ED0, 0x00D4, 0x0301, 0, 1, 0x1ED1, 0x00F4, 0x0301, 0, 1, 0x1ED2, 0x00D4, 0x0300, 0, 1, 0x1ED3, 0x00F4, 0x0300, 0, 1, 0x1ED4, 0x00D4, 0x0309, 0, 1, 0x1ED5, 0x00F4, 0x0309, 0, 1, 0x1ED6, 0x00D4, 0x0303, 0, 1, 0x1ED7, 0x00F4, 0x0303, 0, 1, 0x1ED8, 0x1ECC, 0x0302, 0, 1, 0x1ED9, 0x1ECD, 0x0302, 0, 1, 0x1EDA, 0x01A0, 0x0301, 0, 1, 0x1EDB, 0x01A1, 0x0301, 0, 1, 0x1EDC, 0x01A0, 0x0300, 0, 1, 0x1EDD, 0x01A1, 0x0300, 0, 1, 0x1EDE, 0x01A0, 0x0309, 0, 1, 0x1EDF, 0x01A1, 0x0309, 0, 1, 0x1EE0, 0x01A0, 0x0303, 0, 1, 0x1EE1, 0x01A1, 0x0303, 0, 1, 0x1EE2, 0x01A0, 0x0323, 0, 1, 0x1EE3, 0x01A1, 0x0323, 0, 1, 0x1EE4, 0x0055, 0x0323, 0, 1, 0x1EE5, 0x0075, 0x0323, 0, 1, 0x1EE6, 0x0055, 0x0309, 0, 1, 0x1EE7, 0x0075, 0x0309, 0, 1, 0x1EE8, 0x01AF, 0x0301, 0, 1, 0x1EE9, 0x01B0, 0x0301, 0, 1, 0x1EEA, 0x01AF, 0x0300, 0, 1, 0x1EEB, 0x01B0, 0x0300, 0, 1, 0x1EEC, 0x01AF, 0x0309, 0, 1, 0x1EED, 0x01B0, 0x0309, 0, 1, 0x1EEE, 0x01AF, 0x0303, 0, 1, 0x1EEF, 0x01B0, 0x0303, 0, 1, 0x1EF0, 0x01AF, 0x0323, 0, 1, 0x1EF1, 0x01B0, 0x0323, 0, 1, 0x1EF2, 0x0059, 0x0300, 0, 1, 0x1EF3, 0x0079, 0x0300, 0, 1, 0x1EF4, 0x0059, 0x0323, 0, 1, 0x1EF5, 0x0079, 0x0323, 0, 1, 0x1EF6, 0x0059, 0x0309, 0, 1, 0x1EF7, 0x0079, 0x0309, 0, 1, 0x1EF8, 0x0059, 0x0303, 0, 1, 0x1EF9, 0x0079, 0x0303, 0, 1, 0x1F00, 0x03B1, 0x0313, 0, 1, 0x1F01, 0x03B1, 0x0314, 0, 1, 0x1F02, 0x1F00, 0x0300, 0, 1, 0x1F03, 0x1F01, 0x0300, 0, 1, 0x1F04, 0x1F00, 0x0301, 0, 1, 0x1F05, 0x1F01, 0x0301, 0, 1, 0x1F06, 0x1F00, 0x0342, 0, 1, 0x1F07, 0x1F01, 0x0342, 0, 1, 0x1F08, 0x0391, 0x0313, 0, 1, 0x1F09, 0x0391, 0x0314, 0, 1, 0x1F0A, 0x1F08, 0x0300, 0, 1, 0x1F0B, 0x1F09, 0x0300, 0, 1, 0x1F0C, 0x1F08, 0x0301, 0, 1, 0x1F0D, 0x1F09, 0x0301, 0, 1, 0x1F0E, 0x1F08, 0x0342, 0, 1, 0x1F0F, 0x1F09, 0x0342, 0, 1, 0x1F10, 0x03B5, 0x0313, 0, 1, 0x1F11, 0x03B5, 0x0314, 0, 1, 0x1F12, 0x1F10, 0x0300, 0, 1, 0x1F13, 0x1F11, 0x0300, 0, 1, 0x1F14, 0x1F10, 0x0301, 0, 1, 0x1F15, 0x1F11, 0x0301, 0, 1, 0x1F18, 0x0395, 0x0313, 0, 1, 0x1F19, 0x0395, 0x0314, 0, 1, 0x1F1A, 0x1F18, 0x0300, 0, 1, 0x1F1B, 0x1F19, 0x0300, 0, 1, 0x1F1C, 0x1F18, 0x0301, 0, 1, 0x1F1D, 0x1F19, 0x0301, 0, 1, 0x1F20, 0x03B7, 0x0313, 0, 1, 0x1F21, 0x03B7, 0x0314, 0, 1, 0x1F22, 0x1F20, 0x0300, 0, 1, 0x1F23, 0x1F21, 0x0300, 0, 1, 0x1F24, 0x1F20, 0x0301, 0, 1, 0x1F25, 0x1F21, 0x0301, 0, 1, 0x1F26, 0x1F20, 0x0342, 0, 1, 0x1F27, 0x1F21, 0x0342, 0, 1, 0x1F28, 0x0397, 0x0313, 0, 1, 0x1F29, 0x0397, 0x0314, 0, 1, 0x1F2A, 0x1F28, 0x0300, 0, 1, 0x1F2B, 0x1F29, 0x0300, 0, 1, 0x1F2C, 0x1F28, 0x0301, 0, 1, 0x1F2D, 0x1F29, 0x0301, 0, 1, 0x1F2E, 0x1F28, 0x0342, 0, 1, 0x1F2F, 0x1F29, 0x0342, 0, 1, 0x1F30, 0x03B9, 0x0313, 0, 1, 0x1F31, 0x03B9, 0x0314, 0, 1, 0x1F32, 0x1F30, 0x0300, 0, 1, 0x1F33, 0x1F31, 0x0300, 0, 1, 0x1F34, 0x1F30, 0x0301, 0, 1, 0x1F35, 0x1F31, 0x0301, 0, 1, 0x1F36, 0x1F30, 0x0342, 0, 1, 0x1F37, 0x1F31, 0x0342, 0, 1, 0x1F38, 0x0399, 0x0313, 0, 1, 0x1F39, 0x0399, 0x0314, 0, 1, 0x1F3A, 0x1F38, 0x0300, 0, 1, 0x1F3B, 0x1F39, 0x0300, 0, 1, 0x1F3C, 0x1F38, 0x0301, 0, 1, 0x1F3D, 0x1F39, 0x0301, 0, 1, 0x1F3E, 0x1F38, 0x0342, 0, 1, 0x1F3F, 0x1F39, 0x0342, 0, 1, 0x1F40, 0x03BF, 0x0313, 0, 1, 0x1F41, 0x03BF, 0x0314, 0, 1, 0x1F42, 0x1F40, 0x0300, 0, 1, 0x1F43, 0x1F41, 0x0300, 0, 1, 0x1F44, 0x1F40, 0x0301, 0, 1, 0x1F45, 0x1F41, 0x0301, 0, 1, 0x1F48, 0x039F, 0x0313, 0, 1, 0x1F49, 0x039F, 0x0314, 0, 1, 0x1F4A, 0x1F48, 0x0300, 0, 1, 0x1F4B, 0x1F49, 0x0300, 0, 1, 0x1F4C, 0x1F48, 0x0301, 0, 1, 0x1F4D, 0x1F49, 0x0301, 0, 1, 0x1F50, 0x03C5, 0x0313, 0, 1, 0x1F51, 0x03C5, 0x0314, 0, 1, 0x1F52, 0x1F50, 0x0300, 0, 1, 0x1F53, 0x1F51, 0x0300, 0, 1, 0x1F54, 0x1F50, 0x0301, 0, 1, 0x1F55, 0x1F51, 0x0301, 0, 1, 0x1F56, 0x1F50, 0x0342, 0, 1, 0x1F57, 0x1F51, 0x0342, 0, 1, 0x1F59, 0x03A5, 0x0314, 0, 1, 0x1F5B, 0x1F59, 0x0300, 0, 1, 0x1F5D, 0x1F59, 0x0301, 0, 1, 0x1F5F, 0x1F59, 0x0342, 0, 1, 0x1F60, 0x03C9, 0x0313, 0, 1, 0x1F61, 0x03C9, 0x0314, 0, 1, 0x1F62, 0x1F60, 0x0300, 0, 1, 0x1F63, 0x1F61, 0x0300, 0, 1, 0x1F64, 0x1F60, 0x0301, 0, 1, 0x1F65, 0x1F61, 0x0301, 0, 1, 0x1F66, 0x1F60, 0x0342, 0, 1, 0x1F67, 0x1F61, 0x0342, 0, 1, 0x1F68, 0x03A9, 0x0313, 0, 1, 0x1F69, 0x03A9, 0x0314, 0, 1, 0x1F6A, 0x1F68, 0x0300, 0, 1, 0x1F6B, 0x1F69, 0x0300, 0, 1, 0x1F6C, 0x1F68, 0x0301, 0, 1, 0x1F6D, 0x1F69, 0x0301, 0, 1, 0x1F6E, 0x1F68, 0x0342, 0, 1, 0x1F6F, 0x1F69, 0x0342, 0, 1, 0x1F70, 0x03B1, 0x0300, 0, 1, 0x1F71, 0x03AC, 0, 1, 0x1F72, 0x03B5, 0x0300, 0, 1, 0x1F73, 0x03AD, 0, 1, 0x1F74, 0x03B7, 0x0300, 0, 1, 0x1F75, 0x03AE, 0, 1, 0x1F76, 0x03B9, 0x0300, 0, 1, 0x1F77, 0x03AF, 0, 1, 0x1F78, 0x03BF, 0x0300, 0, 1, 0x1F79, 0x03CC, 0, 1, 0x1F7A, 0x03C5, 0x0300, 0, 1, 0x1F7B, 0x03CD, 0, 1, 0x1F7C, 0x03C9, 0x0300, 0, 1, 0x1F7D, 0x03CE, 0, 1, 0x1F80, 0x1F00, 0x0345, 0, 1, 0x1F81, 0x1F01, 0x0345, 0, 1, 0x1F82, 0x1F02, 0x0345, 0, 1, 0x1F83, 0x1F03, 0x0345, 0, 1, 0x1F84, 0x1F04, 0x0345, 0, 1, 0x1F85, 0x1F05, 0x0345, 0, 1, 0x1F86, 0x1F06, 0x0345, 0, 1, 0x1F87, 0x1F07, 0x0345, 0, 1, 0x1F88, 0x1F08, 0x0345, 0, 1, 0x1F89, 0x1F09, 0x0345, 0, 1, 0x1F8A, 0x1F0A, 0x0345, 0, 1, 0x1F8B, 0x1F0B, 0x0345, 0, 1, 0x1F8C, 0x1F0C, 0x0345, 0, 1, 0x1F8D, 0x1F0D, 0x0345, 0, 1, 0x1F8E, 0x1F0E, 0x0345, 0, 1, 0x1F8F, 0x1F0F, 0x0345, 0, 1, 0x1F90, 0x1F20, 0x0345, 0, 1, 0x1F91, 0x1F21, 0x0345, 0, 1, 0x1F92, 0x1F22, 0x0345, 0, 1, 0x1F93, 0x1F23, 0x0345, 0, 1, 0x1F94, 0x1F24, 0x0345, 0, 1, 0x1F95, 0x1F25, 0x0345, 0, 1, 0x1F96, 0x1F26, 0x0345, 0, 1, 0x1F97, 0x1F27, 0x0345, 0, 1, 0x1F98, 0x1F28, 0x0345, 0, 1, 0x1F99, 0x1F29, 0x0345, 0, 1, 0x1F9A, 0x1F2A, 0x0345, 0, 1, 0x1F9B, 0x1F2B, 0x0345, 0, 1, 0x1F9C, 0x1F2C, 0x0345, 0, 1, 0x1F9D, 0x1F2D, 0x0345, 0, 1, 0x1F9E, 0x1F2E, 0x0345, 0, 1, 0x1F9F, 0x1F2F, 0x0345, 0, 1, 0x1FA0, 0x1F60, 0x0345, 0, 1, 0x1FA1, 0x1F61, 0x0345, 0, 1, 0x1FA2, 0x1F62, 0x0345, 0, 1, 0x1FA3, 0x1F63, 0x0345, 0, 1, 0x1FA4, 0x1F64, 0x0345, 0, 1, 0x1FA5, 0x1F65, 0x0345, 0, 1, 0x1FA6, 0x1F66, 0x0345, 0, 1, 0x1FA7, 0x1F67, 0x0345, 0, 1, 0x1FA8, 0x1F68, 0x0345, 0, 1, 0x1FA9, 0x1F69, 0x0345, 0, 1, 0x1FAA, 0x1F6A, 0x0345, 0, 1, 0x1FAB, 0x1F6B, 0x0345, 0, 1, 0x1FAC, 0x1F6C, 0x0345, 0, 1, 0x1FAD, 0x1F6D, 0x0345, 0, 1, 0x1FAE, 0x1F6E, 0x0345, 0, 1, 0x1FAF, 0x1F6F, 0x0345, 0, 1, 0x1FB0, 0x03B1, 0x0306, 0, 1, 0x1FB1, 0x03B1, 0x0304, 0, 1, 0x1FB2, 0x1F70, 0x0345, 0, 1, 0x1FB3, 0x03B1, 0x0345, 0, 1, 0x1FB4, 0x03AC, 0x0345, 0, 1, 0x1FB6, 0x03B1, 0x0342, 0, 1, 0x1FB7, 0x1FB6, 0x0345, 0, 1, 0x1FB8, 0x0391, 0x0306, 0, 1, 0x1FB9, 0x0391, 0x0304, 0, 1, 0x1FBA, 0x0391, 0x0300, 0, 1, 0x1FBB, 0x0386, 0, 1, 0x1FBC, 0x0391, 0x0345, 0, 16, 0x1FBD, 0x0020, 0x0313, 0, 1, 0x1FBE, 0x03B9, 0, 16, 0x1FBF, 0x0020, 0x0313, 0, 16, 0x1FC0, 0x0020, 0x0342, 0, 1, 0x1FC1, 0x00A8, 0x0342, 0, 1, 0x1FC2, 0x1F74, 0x0345, 0, 1, 0x1FC3, 0x03B7, 0x0345, 0, 1, 0x1FC4, 0x03AE, 0x0345, 0, 1, 0x1FC6, 0x03B7, 0x0342, 0, 1, 0x1FC7, 0x1FC6, 0x0345, 0, 1, 0x1FC8, 0x0395, 0x0300, 0, 1, 0x1FC9, 0x0388, 0, 1, 0x1FCA, 0x0397, 0x0300, 0, 1, 0x1FCB, 0x0389, 0, 1, 0x1FCC, 0x0397, 0x0345, 0, 1, 0x1FCD, 0x1FBF, 0x0300, 0, 1, 0x1FCE, 0x1FBF, 0x0301, 0, 1, 0x1FCF, 0x1FBF, 0x0342, 0, 1, 0x1FD0, 0x03B9, 0x0306, 0, 1, 0x1FD1, 0x03B9, 0x0304, 0, 1, 0x1FD2, 0x03CA, 0x0300, 0, 1, 0x1FD3, 0x0390, 0, 1, 0x1FD6, 0x03B9, 0x0342, 0, 1, 0x1FD7, 0x03CA, 0x0342, 0, 1, 0x1FD8, 0x0399, 0x0306, 0, 1, 0x1FD9, 0x0399, 0x0304, 0, 1, 0x1FDA, 0x0399, 0x0300, 0, 1, 0x1FDB, 0x038A, 0, 1, 0x1FDD, 0x1FFE, 0x0300, 0, 1, 0x1FDE, 0x1FFE, 0x0301, 0, 1, 0x1FDF, 0x1FFE, 0x0342, 0, 1, 0x1FE0, 0x03C5, 0x0306, 0, 1, 0x1FE1, 0x03C5, 0x0304, 0, 1, 0x1FE2, 0x03CB, 0x0300, 0, 1, 0x1FE3, 0x03B0, 0, 1, 0x1FE4, 0x03C1, 0x0313, 0, 1, 0x1FE5, 0x03C1, 0x0314, 0, 1, 0x1FE6, 0x03C5, 0x0342, 0, 1, 0x1FE7, 0x03CB, 0x0342, 0, 1, 0x1FE8, 0x03A5, 0x0306, 0, 1, 0x1FE9, 0x03A5, 0x0304, 0, 1, 0x1FEA, 0x03A5, 0x0300, 0, 1, 0x1FEB, 0x038E, 0, 1, 0x1FEC, 0x03A1, 0x0314, 0, 1, 0x1FED, 0x00A8, 0x0300, 0, 1, 0x1FEE, 0x0385, 0, 1, 0x1FEF, 0x0060, 0, 1, 0x1FF2, 0x1F7C, 0x0345, 0, 1, 0x1FF3, 0x03C9, 0x0345, 0, 1, 0x1FF4, 0x03CE, 0x0345, 0, 1, 0x1FF6, 0x03C9, 0x0342, 0, 1, 0x1FF7, 0x1FF6, 0x0345, 0, 1, 0x1FF8, 0x039F, 0x0300, 0, 1, 0x1FF9, 0x038C, 0, 1, 0x1FFA, 0x03A9, 0x0300, 0, 1, 0x1FFB, 0x038F, 0, 1, 0x1FFC, 0x03A9, 0x0345, 0, 1, 0x1FFD, 0x00B4, 0, 16, 0x1FFE, 0x0020, 0x0314, 0, 1, 0x2000, 0x2002, 0, 1, 0x2001, 0x2003, 0, 16, 0x2002, 0x0020, 0, 16, 0x2003, 0x0020, 0, 16, 0x2004, 0x0020, 0, 16, 0x2005, 0x0020, 0, 16, 0x2006, 0x0020, 0, 3, 0x2007, 0x0020, 0, 16, 0x2008, 0x0020, 0, 16, 0x2009, 0x0020, 0, 16, 0x200A, 0x0020, 0, 3, 0x2011, 0x2010, 0, 16, 0x2017, 0x0020, 0x0333, 0, 16, 0x2024, 0x002E, 0, 16, 0x2025, 0x002E, 0x002E, 0, 16, 0x2026, 0x002E, 0x002E, 0x002E, 0, 3, 0x202F, 0x0020, 0, 16, 0x2033, 0x2032, 0x2032, 0, 16, 0x2034, 0x2032, 0x2032, 0x2032, 0, 16, 0x2036, 0x2035, 0x2035, 0, 16, 0x2037, 0x2035, 0x2035, 0x2035, 0, 16, 0x203C, 0x0021, 0x0021, 0, 16, 0x203E, 0x0020, 0x0305, 0, 16, 0x2048, 0x003F, 0x0021, 0, 16, 0x2049, 0x0021, 0x003F, 0, 9, 0x2070, 0x0030, 0, 9, 0x2074, 0x0034, 0, 9, 0x2075, 0x0035, 0, 9, 0x2076, 0x0036, 0, 9, 0x2077, 0x0037, 0, 9, 0x2078, 0x0038, 0, 9, 0x2079, 0x0039, 0, 9, 0x207A, 0x002B, 0, 9, 0x207B, 0x2212, 0, 9, 0x207C, 0x003D, 0, 9, 0x207D, 0x0028, 0, 9, 0x207E, 0x0029, 0, 9, 0x207F, 0x006E, 0, 10, 0x2080, 0x0030, 0, 10, 0x2081, 0x0031, 0, 10, 0x2082, 0x0032, 0, 10, 0x2083, 0x0033, 0, 10, 0x2084, 0x0034, 0, 10, 0x2085, 0x0035, 0, 10, 0x2086, 0x0036, 0, 10, 0x2087, 0x0037, 0, 10, 0x2088, 0x0038, 0, 10, 0x2089, 0x0039, 0, 10, 0x208A, 0x002B, 0, 10, 0x208B, 0x2212, 0, 10, 0x208C, 0x003D, 0, 10, 0x208D, 0x0028, 0, 10, 0x208E, 0x0029, 0, 16, 0x20A8, 0x0052, 0x0073, 0, 16, 0x2100, 0x0061, 0x002F, 0x0063, 0, 16, 0x2101, 0x0061, 0x002F, 0x0073, 0, 2, 0x2102, 0x0043, 0, 16, 0x2103, 0x00B0, 0x0043, 0, 16, 0x2105, 0x0063, 0x002F, 0x006F, 0, 16, 0x2106, 0x0063, 0x002F, 0x0075, 0, 16, 0x2107, 0x0190, 0, 16, 0x2109, 0x00B0, 0x0046, 0, 2, 0x210A, 0x0067, 0, 2, 0x210B, 0x0048, 0, 2, 0x210C, 0x0048, 0, 2, 0x210D, 0x0048, 0, 2, 0x210E, 0x0068, 0, 2, 0x210F, 0x0127, 0, 2, 0x2110, 0x0049, 0, 2, 0x2111, 0x0049, 0, 2, 0x2112, 0x004C, 0, 2, 0x2113, 0x006C, 0, 2, 0x2115, 0x004E, 0, 16, 0x2116, 0x004E, 0x006F, 0, 2, 0x2119, 0x0050, 0, 2, 0x211A, 0x0051, 0, 2, 0x211B, 0x0052, 0, 2, 0x211C, 0x0052, 0, 2, 0x211D, 0x0052, 0, 9, 0x2120, 0x0053, 0x004D, 0, 16, 0x2121, 0x0054, 0x0045, 0x004C, 0, 9, 0x2122, 0x0054, 0x004D, 0, 2, 0x2124, 0x005A, 0, 1, 0x2126, 0x03A9, 0, 2, 0x2128, 0x005A, 0, 1, 0x212A, 0x004B, 0, 1, 0x212B, 0x00C5, 0, 2, 0x212C, 0x0042, 0, 2, 0x212D, 0x0043, 0, 2, 0x212F, 0x0065, 0, 2, 0x2130, 0x0045, 0, 2, 0x2131, 0x0046, 0, 2, 0x2133, 0x004D, 0, 2, 0x2134, 0x006F, 0, 16, 0x2135, 0x05D0, 0, 16, 0x2136, 0x05D1, 0, 16, 0x2137, 0x05D2, 0, 16, 0x2138, 0x05D3, 0, 2, 0x2139, 0x0069, 0, 17, 0x2153, 0x0031, 0x2044, 0x0033, 0, 17, 0x2154, 0x0032, 0x2044, 0x0033, 0, 17, 0x2155, 0x0031, 0x2044, 0x0035, 0, 17, 0x2156, 0x0032, 0x2044, 0x0035, 0, 17, 0x2157, 0x0033, 0x2044, 0x0035, 0, 17, 0x2158, 0x0034, 0x2044, 0x0035, 0, 17, 0x2159, 0x0031, 0x2044, 0x0036, 0, 17, 0x215A, 0x0035, 0x2044, 0x0036, 0, 17, 0x215B, 0x0031, 0x2044, 0x0038, 0, 17, 0x215C, 0x0033, 0x2044, 0x0038, 0, 17, 0x215D, 0x0035, 0x2044, 0x0038, 0, 17, 0x215E, 0x0037, 0x2044, 0x0038, 0, 17, 0x215F, 0x0031, 0x2044, 0, 16, 0x2160, 0x0049, 0, 16, 0x2161, 0x0049, 0x0049, 0, 16, 0x2162, 0x0049, 0x0049, 0x0049, 0, 16, 0x2163, 0x0049, 0x0056, 0, 16, 0x2164, 0x0056, 0, 16, 0x2165, 0x0056, 0x0049, 0, 16, 0x2166, 0x0056, 0x0049, 0x0049, 0, 16, 0x2167, 0x0056, 0x0049, 0x0049, 0x0049, 0, 16, 0x2168, 0x0049, 0x0058, 0, 16, 0x2169, 0x0058, 0, 16, 0x216A, 0x0058, 0x0049, 0, 16, 0x216B, 0x0058, 0x0049, 0x0049, 0, 16, 0x216C, 0x004C, 0, 16, 0x216D, 0x0043, 0, 16, 0x216E, 0x0044, 0, 16, 0x216F, 0x004D, 0, 16, 0x2170, 0x0069, 0, 16, 0x2171, 0x0069, 0x0069, 0, 16, 0x2172, 0x0069, 0x0069, 0x0069, 0, 16, 0x2173, 0x0069, 0x0076, 0, 16, 0x2174, 0x0076, 0, 16, 0x2175, 0x0076, 0x0069, 0, 16, 0x2176, 0x0076, 0x0069, 0x0069, 0, 16, 0x2177, 0x0076, 0x0069, 0x0069, 0x0069, 0, 16, 0x2178, 0x0069, 0x0078, 0, 16, 0x2179, 0x0078, 0, 16, 0x217A, 0x0078, 0x0069, 0, 16, 0x217B, 0x0078, 0x0069, 0x0069, 0, 16, 0x217C, 0x006C, 0, 16, 0x217D, 0x0063, 0, 16, 0x217E, 0x0064, 0, 16, 0x217F, 0x006D, 0, 1, 0x219A, 0x2190, 0x0338, 0, 1, 0x219B, 0x2192, 0x0338, 0, 1, 0x21AE, 0x2194, 0x0338, 0, 1, 0x21CD, 0x21D0, 0x0338, 0, 1, 0x21CE, 0x21D4, 0x0338, 0, 1, 0x21CF, 0x21D2, 0x0338, 0, 1, 0x2204, 0x2203, 0x0338, 0, 1, 0x2209, 0x2208, 0x0338, 0, 1, 0x220C, 0x220B, 0x0338, 0, 1, 0x2224, 0x2223, 0x0338, 0, 1, 0x2226, 0x2225, 0x0338, 0, 16, 0x222C, 0x222B, 0x222B, 0, 16, 0x222D, 0x222B, 0x222B, 0x222B, 0, 16, 0x222F, 0x222E, 0x222E, 0, 16, 0x2230, 0x222E, 0x222E, 0x222E, 0, 1, 0x2241, 0x223C, 0x0338, 0, 1, 0x2244, 0x2243, 0x0338, 0, 1, 0x2247, 0x2245, 0x0338, 0, 1, 0x2249, 0x2248, 0x0338, 0, 1, 0x2260, 0x003D, 0x0338, 0, 1, 0x2262, 0x2261, 0x0338, 0, 1, 0x226D, 0x224D, 0x0338, 0, 1, 0x226E, 0x003C, 0x0338, 0, 1, 0x226F, 0x003E, 0x0338, 0, 1, 0x2270, 0x2264, 0x0338, 0, 1, 0x2271, 0x2265, 0x0338, 0, 1, 0x2274, 0x2272, 0x0338, 0, 1, 0x2275, 0x2273, 0x0338, 0, 1, 0x2278, 0x2276, 0x0338, 0, 1, 0x2279, 0x2277, 0x0338, 0, 1, 0x2280, 0x227A, 0x0338, 0, 1, 0x2281, 0x227B, 0x0338, 0, 1, 0x2284, 0x2282, 0x0338, 0, 1, 0x2285, 0x2283, 0x0338, 0, 1, 0x2288, 0x2286, 0x0338, 0, 1, 0x2289, 0x2287, 0x0338, 0, 1, 0x22AC, 0x22A2, 0x0338, 0, 1, 0x22AD, 0x22A8, 0x0338, 0, 1, 0x22AE, 0x22A9, 0x0338, 0, 1, 0x22AF, 0x22AB, 0x0338, 0, 1, 0x22E0, 0x227C, 0x0338, 0, 1, 0x22E1, 0x227D, 0x0338, 0, 1, 0x22E2, 0x2291, 0x0338, 0, 1, 0x22E3, 0x2292, 0x0338, 0, 1, 0x22EA, 0x22B2, 0x0338, 0, 1, 0x22EB, 0x22B3, 0x0338, 0, 1, 0x22EC, 0x22B4, 0x0338, 0, 1, 0x22ED, 0x22B5, 0x0338, 0, 1, 0x2329, 0x3008, 0, 1, 0x232A, 0x3009, 0, 8, 0x2460, 0x0031, 0, 8, 0x2461, 0x0032, 0, 8, 0x2462, 0x0033, 0, 8, 0x2463, 0x0034, 0, 8, 0x2464, 0x0035, 0, 8, 0x2465, 0x0036, 0, 8, 0x2466, 0x0037, 0, 8, 0x2467, 0x0038, 0, 8, 0x2468, 0x0039, 0, 8, 0x2469, 0x0031, 0x0030, 0, 8, 0x246A, 0x0031, 0x0031, 0, 8, 0x246B, 0x0031, 0x0032, 0, 8, 0x246C, 0x0031, 0x0033, 0, 8, 0x246D, 0x0031, 0x0034, 0, 8, 0x246E, 0x0031, 0x0035, 0, 8, 0x246F, 0x0031, 0x0036, 0, 8, 0x2470, 0x0031, 0x0037, 0, 8, 0x2471, 0x0031, 0x0038, 0, 8, 0x2472, 0x0031, 0x0039, 0, 8, 0x2473, 0x0032, 0x0030, 0, 16, 0x2474, 0x0028, 0x0031, 0x0029, 0, 16, 0x2475, 0x0028, 0x0032, 0x0029, 0, 16, 0x2476, 0x0028, 0x0033, 0x0029, 0, 16, 0x2477, 0x0028, 0x0034, 0x0029, 0, 16, 0x2478, 0x0028, 0x0035, 0x0029, 0, 16, 0x2479, 0x0028, 0x0036, 0x0029, 0, 16, 0x247A, 0x0028, 0x0037, 0x0029, 0, 16, 0x247B, 0x0028, 0x0038, 0x0029, 0, 16, 0x247C, 0x0028, 0x0039, 0x0029, 0, 16, 0x247D, 0x0028, 0x0031, 0x0030, 0x0029, 0, 16, 0x247E, 0x0028, 0x0031, 0x0031, 0x0029, 0, 16, 0x247F, 0x0028, 0x0031, 0x0032, 0x0029, 0, 16, 0x2480, 0x0028, 0x0031, 0x0033, 0x0029, 0, 16, 0x2481, 0x0028, 0x0031, 0x0034, 0x0029, 0, 16, 0x2482, 0x0028, 0x0031, 0x0035, 0x0029, 0, 16, 0x2483, 0x0028, 0x0031, 0x0036, 0x0029, 0, 16, 0x2484, 0x0028, 0x0031, 0x0037, 0x0029, 0, 16, 0x2485, 0x0028, 0x0031, 0x0038, 0x0029, 0, 16, 0x2486, 0x0028, 0x0031, 0x0039, 0x0029, 0, 16, 0x2487, 0x0028, 0x0032, 0x0030, 0x0029, 0, 16, 0x2488, 0x0031, 0x002E, 0, 16, 0x2489, 0x0032, 0x002E, 0, 16, 0x248A, 0x0033, 0x002E, 0, 16, 0x248B, 0x0034, 0x002E, 0, 16, 0x248C, 0x0035, 0x002E, 0, 16, 0x248D, 0x0036, 0x002E, 0, 16, 0x248E, 0x0037, 0x002E, 0, 16, 0x248F, 0x0038, 0x002E, 0, 16, 0x2490, 0x0039, 0x002E, 0, 16, 0x2491, 0x0031, 0x0030, 0x002E, 0, 16, 0x2492, 0x0031, 0x0031, 0x002E, 0, 16, 0x2493, 0x0031, 0x0032, 0x002E, 0, 16, 0x2494, 0x0031, 0x0033, 0x002E, 0, 16, 0x2495, 0x0031, 0x0034, 0x002E, 0, 16, 0x2496, 0x0031, 0x0035, 0x002E, 0, 16, 0x2497, 0x0031, 0x0036, 0x002E, 0, 16, 0x2498, 0x0031, 0x0037, 0x002E, 0, 16, 0x2499, 0x0031, 0x0038, 0x002E, 0, 16, 0x249A, 0x0031, 0x0039, 0x002E, 0, 16, 0x249B, 0x0032, 0x0030, 0x002E, 0, 16, 0x249C, 0x0028, 0x0061, 0x0029, 0, 16, 0x249D, 0x0028, 0x0062, 0x0029, 0, 16, 0x249E, 0x0028, 0x0063, 0x0029, 0, 16, 0x249F, 0x0028, 0x0064, 0x0029, 0, 16, 0x24A0, 0x0028, 0x0065, 0x0029, 0, 16, 0x24A1, 0x0028, 0x0066, 0x0029, 0, 16, 0x24A2, 0x0028, 0x0067, 0x0029, 0, 16, 0x24A3, 0x0028, 0x0068, 0x0029, 0, 16, 0x24A4, 0x0028, 0x0069, 0x0029, 0, 16, 0x24A5, 0x0028, 0x006A, 0x0029, 0, 16, 0x24A6, 0x0028, 0x006B, 0x0029, 0, 16, 0x24A7, 0x0028, 0x006C, 0x0029, 0, 16, 0x24A8, 0x0028, 0x006D, 0x0029, 0, 16, 0x24A9, 0x0028, 0x006E, 0x0029, 0, 16, 0x24AA, 0x0028, 0x006F, 0x0029, 0, 16, 0x24AB, 0x0028, 0x0070, 0x0029, 0, 16, 0x24AC, 0x0028, 0x0071, 0x0029, 0, 16, 0x24AD, 0x0028, 0x0072, 0x0029, 0, 16, 0x24AE, 0x0028, 0x0073, 0x0029, 0, 16, 0x24AF, 0x0028, 0x0074, 0x0029, 0, 16, 0x24B0, 0x0028, 0x0075, 0x0029, 0, 16, 0x24B1, 0x0028, 0x0076, 0x0029, 0, 16, 0x24B2, 0x0028, 0x0077, 0x0029, 0, 16, 0x24B3, 0x0028, 0x0078, 0x0029, 0, 16, 0x24B4, 0x0028, 0x0079, 0x0029, 0, 16, 0x24B5, 0x0028, 0x007A, 0x0029, 0, 8, 0x24B6, 0x0041, 0, 8, 0x24B7, 0x0042, 0, 8, 0x24B8, 0x0043, 0, 8, 0x24B9, 0x0044, 0, 8, 0x24BA, 0x0045, 0, 8, 0x24BB, 0x0046, 0, 8, 0x24BC, 0x0047, 0, 8, 0x24BD, 0x0048, 0, 8, 0x24BE, 0x0049, 0, 8, 0x24BF, 0x004A, 0, 8, 0x24C0, 0x004B, 0, 8, 0x24C1, 0x004C, 0, 8, 0x24C2, 0x004D, 0, 8, 0x24C3, 0x004E, 0, 8, 0x24C4, 0x004F, 0, 8, 0x24C5, 0x0050, 0, 8, 0x24C6, 0x0051, 0, 8, 0x24C7, 0x0052, 0, 8, 0x24C8, 0x0053, 0, 8, 0x24C9, 0x0054, 0, 8, 0x24CA, 0x0055, 0, 8, 0x24CB, 0x0056, 0, 8, 0x24CC, 0x0057, 0, 8, 0x24CD, 0x0058, 0, 8, 0x24CE, 0x0059, 0, 8, 0x24CF, 0x005A, 0, 8, 0x24D0, 0x0061, 0, 8, 0x24D1, 0x0062, 0, 8, 0x24D2, 0x0063, 0, 8, 0x24D3, 0x0064, 0, 8, 0x24D4, 0x0065, 0, 8, 0x24D5, 0x0066, 0, 8, 0x24D6, 0x0067, 0, 8, 0x24D7, 0x0068, 0, 8, 0x24D8, 0x0069, 0, 8, 0x24D9, 0x006A, 0, 8, 0x24DA, 0x006B, 0, 8, 0x24DB, 0x006C, 0, 8, 0x24DC, 0x006D, 0, 8, 0x24DD, 0x006E, 0, 8, 0x24DE, 0x006F, 0, 8, 0x24DF, 0x0070, 0, 8, 0x24E0, 0x0071, 0, 8, 0x24E1, 0x0072, 0, 8, 0x24E2, 0x0073, 0, 8, 0x24E3, 0x0074, 0, 8, 0x24E4, 0x0075, 0, 8, 0x24E5, 0x0076, 0, 8, 0x24E6, 0x0077, 0, 8, 0x24E7, 0x0078, 0, 8, 0x24E8, 0x0079, 0, 8, 0x24E9, 0x007A, 0, 8, 0x24EA, 0x0030, 0, 16, 0x2E9F, 0x6BCD, 0, 16, 0x2EF3, 0x9F9F, 0, 16, 0x2F00, 0x4E00, 0, 16, 0x2F01, 0x4E28, 0, 16, 0x2F02, 0x4E36, 0, 16, 0x2F03, 0x4E3F, 0, 16, 0x2F04, 0x4E59, 0, 16, 0x2F05, 0x4E85, 0, 16, 0x2F06, 0x4E8C, 0, 16, 0x2F07, 0x4EA0, 0, 16, 0x2F08, 0x4EBA, 0, 16, 0x2F09, 0x513F, 0, 16, 0x2F0A, 0x5165, 0, 16, 0x2F0B, 0x516B, 0, 16, 0x2F0C, 0x5182, 0, 16, 0x2F0D, 0x5196, 0, 16, 0x2F0E, 0x51AB, 0, 16, 0x2F0F, 0x51E0, 0, 16, 0x2F10, 0x51F5, 0, 16, 0x2F11, 0x5200, 0, 16, 0x2F12, 0x529B, 0, 16, 0x2F13, 0x52F9, 0, 16, 0x2F14, 0x5315, 0, 16, 0x2F15, 0x531A, 0, 16, 0x2F16, 0x5338, 0, 16, 0x2F17, 0x5341, 0, 16, 0x2F18, 0x535C, 0, 16, 0x2F19, 0x5369, 0, 16, 0x2F1A, 0x5382, 0, 16, 0x2F1B, 0x53B6, 0, 16, 0x2F1C, 0x53C8, 0, 16, 0x2F1D, 0x53E3, 0, 16, 0x2F1E, 0x56D7, 0, 16, 0x2F1F, 0x571F, 0, 16, 0x2F20, 0x58EB, 0, 16, 0x2F21, 0x5902, 0, 16, 0x2F22, 0x590A, 0, 16, 0x2F23, 0x5915, 0, 16, 0x2F24, 0x5927, 0, 16, 0x2F25, 0x5973, 0, 16, 0x2F26, 0x5B50, 0, 16, 0x2F27, 0x5B80, 0, 16, 0x2F28, 0x5BF8, 0, 16, 0x2F29, 0x5C0F, 0, 16, 0x2F2A, 0x5C22, 0, 16, 0x2F2B, 0x5C38, 0, 16, 0x2F2C, 0x5C6E, 0, 16, 0x2F2D, 0x5C71, 0, 16, 0x2F2E, 0x5DDB, 0, 16, 0x2F2F, 0x5DE5, 0, 16, 0x2F30, 0x5DF1, 0, 16, 0x2F31, 0x5DFE, 0, 16, 0x2F32, 0x5E72, 0, 16, 0x2F33, 0x5E7A, 0, 16, 0x2F34, 0x5E7F, 0, 16, 0x2F35, 0x5EF4, 0, 16, 0x2F36, 0x5EFE, 0, 16, 0x2F37, 0x5F0B, 0, 16, 0x2F38, 0x5F13, 0, 16, 0x2F39, 0x5F50, 0, 16, 0x2F3A, 0x5F61, 0, 16, 0x2F3B, 0x5F73, 0, 16, 0x2F3C, 0x5FC3, 0, 16, 0x2F3D, 0x6208, 0, 16, 0x2F3E, 0x6236, 0, 16, 0x2F3F, 0x624B, 0, 16, 0x2F40, 0x652F, 0, 16, 0x2F41, 0x6534, 0, 16, 0x2F42, 0x6587, 0, 16, 0x2F43, 0x6597, 0, 16, 0x2F44, 0x65A4, 0, 16, 0x2F45, 0x65B9, 0, 16, 0x2F46, 0x65E0, 0, 16, 0x2F47, 0x65E5, 0, 16, 0x2F48, 0x66F0, 0, 16, 0x2F49, 0x6708, 0, 16, 0x2F4A, 0x6728, 0, 16, 0x2F4B, 0x6B20, 0, 16, 0x2F4C, 0x6B62, 0, 16, 0x2F4D, 0x6B79, 0, 16, 0x2F4E, 0x6BB3, 0, 16, 0x2F4F, 0x6BCB, 0, 16, 0x2F50, 0x6BD4, 0, 16, 0x2F51, 0x6BDB, 0, 16, 0x2F52, 0x6C0F, 0, 16, 0x2F53, 0x6C14, 0, 16, 0x2F54, 0x6C34, 0, 16, 0x2F55, 0x706B, 0, 16, 0x2F56, 0x722A, 0, 16, 0x2F57, 0x7236, 0, 16, 0x2F58, 0x723B, 0, 16, 0x2F59, 0x723F, 0, 16, 0x2F5A, 0x7247, 0, 16, 0x2F5B, 0x7259, 0, 16, 0x2F5C, 0x725B, 0, 16, 0x2F5D, 0x72AC, 0, 16, 0x2F5E, 0x7384, 0, 16, 0x2F5F, 0x7389, 0, 16, 0x2F60, 0x74DC, 0, 16, 0x2F61, 0x74E6, 0, 16, 0x2F62, 0x7518, 0, 16, 0x2F63, 0x751F, 0, 16, 0x2F64, 0x7528, 0, 16, 0x2F65, 0x7530, 0, 16, 0x2F66, 0x758B, 0, 16, 0x2F67, 0x7592, 0, 16, 0x2F68, 0x7676, 0, 16, 0x2F69, 0x767D, 0, 16, 0x2F6A, 0x76AE, 0, 16, 0x2F6B, 0x76BF, 0, 16, 0x2F6C, 0x76EE, 0, 16, 0x2F6D, 0x77DB, 0, 16, 0x2F6E, 0x77E2, 0, 16, 0x2F6F, 0x77F3, 0, 16, 0x2F70, 0x793A, 0, 16, 0x2F71, 0x79B8, 0, 16, 0x2F72, 0x79BE, 0, 16, 0x2F73, 0x7A74, 0, 16, 0x2F74, 0x7ACB, 0, 16, 0x2F75, 0x7AF9, 0, 16, 0x2F76, 0x7C73, 0, 16, 0x2F77, 0x7CF8, 0, 16, 0x2F78, 0x7F36, 0, 16, 0x2F79, 0x7F51, 0, 16, 0x2F7A, 0x7F8A, 0, 16, 0x2F7B, 0x7FBD, 0, 16, 0x2F7C, 0x8001, 0, 16, 0x2F7D, 0x800C, 0, 16, 0x2F7E, 0x8012, 0, 16, 0x2F7F, 0x8033, 0, 16, 0x2F80, 0x807F, 0, 16, 0x2F81, 0x8089, 0, 16, 0x2F82, 0x81E3, 0, 16, 0x2F83, 0x81EA, 0, 16, 0x2F84, 0x81F3, 0, 16, 0x2F85, 0x81FC, 0, 16, 0x2F86, 0x820C, 0, 16, 0x2F87, 0x821B, 0, 16, 0x2F88, 0x821F, 0, 16, 0x2F89, 0x826E, 0, 16, 0x2F8A, 0x8272, 0, 16, 0x2F8B, 0x8278, 0, 16, 0x2F8C, 0x864D, 0, 16, 0x2F8D, 0x866B, 0, 16, 0x2F8E, 0x8840, 0, 16, 0x2F8F, 0x884C, 0, 16, 0x2F90, 0x8863, 0, 16, 0x2F91, 0x897E, 0, 16, 0x2F92, 0x898B, 0, 16, 0x2F93, 0x89D2, 0, 16, 0x2F94, 0x8A00, 0, 16, 0x2F95, 0x8C37, 0, 16, 0x2F96, 0x8C46, 0, 16, 0x2F97, 0x8C55, 0, 16, 0x2F98, 0x8C78, 0, 16, 0x2F99, 0x8C9D, 0, 16, 0x2F9A, 0x8D64, 0, 16, 0x2F9B, 0x8D70, 0, 16, 0x2F9C, 0x8DB3, 0, 16, 0x2F9D, 0x8EAB, 0, 16, 0x2F9E, 0x8ECA, 0, 16, 0x2F9F, 0x8F9B, 0, 16, 0x2FA0, 0x8FB0, 0, 16, 0x2FA1, 0x8FB5, 0, 16, 0x2FA2, 0x9091, 0, 16, 0x2FA3, 0x9149, 0, 16, 0x2FA4, 0x91C6, 0, 16, 0x2FA5, 0x91CC, 0, 16, 0x2FA6, 0x91D1, 0, 16, 0x2FA7, 0x9577, 0, 16, 0x2FA8, 0x9580, 0, 16, 0x2FA9, 0x961C, 0, 16, 0x2FAA, 0x96B6, 0, 16, 0x2FAB, 0x96B9, 0, 16, 0x2FAC, 0x96E8, 0, 16, 0x2FAD, 0x9751, 0, 16, 0x2FAE, 0x975E, 0, 16, 0x2FAF, 0x9762, 0, 16, 0x2FB0, 0x9769, 0, 16, 0x2FB1, 0x97CB, 0, 16, 0x2FB2, 0x97ED, 0, 16, 0x2FB3, 0x97F3, 0, 16, 0x2FB4, 0x9801, 0, 16, 0x2FB5, 0x98A8, 0, 16, 0x2FB6, 0x98DB, 0, 16, 0x2FB7, 0x98DF, 0, 16, 0x2FB8, 0x9996, 0, 16, 0x2FB9, 0x9999, 0, 16, 0x2FBA, 0x99AC, 0, 16, 0x2FBB, 0x9AA8, 0, 16, 0x2FBC, 0x9AD8, 0, 16, 0x2FBD, 0x9ADF, 0, 16, 0x2FBE, 0x9B25, 0, 16, 0x2FBF, 0x9B2F, 0, 16, 0x2FC0, 0x9B32, 0, 16, 0x2FC1, 0x9B3C, 0, 16, 0x2FC2, 0x9B5A, 0, 16, 0x2FC3, 0x9CE5, 0, 16, 0x2FC4, 0x9E75, 0, 16, 0x2FC5, 0x9E7F, 0, 16, 0x2FC6, 0x9EA5, 0, 16, 0x2FC7, 0x9EBB, 0, 16, 0x2FC8, 0x9EC3, 0, 16, 0x2FC9, 0x9ECD, 0, 16, 0x2FCA, 0x9ED1, 0, 16, 0x2FCB, 0x9EF9, 0, 16, 0x2FCC, 0x9EFD, 0, 16, 0x2FCD, 0x9F0E, 0, 16, 0x2FCE, 0x9F13, 0, 16, 0x2FCF, 0x9F20, 0, 16, 0x2FD0, 0x9F3B, 0, 16, 0x2FD1, 0x9F4A, 0, 16, 0x2FD2, 0x9F52, 0, 16, 0x2FD3, 0x9F8D, 0, 16, 0x2FD4, 0x9F9C, 0, 16, 0x2FD5, 0x9FA0, 0, 12, 0x3000, 0x0020, 0, 16, 0x3036, 0x3012, 0, 16, 0x3038, 0x5341, 0, 16, 0x3039, 0x5344, 0, 16, 0x303A, 0x5345, 0, 1, 0x304C, 0x304B, 0x3099, 0, 1, 0x304E, 0x304D, 0x3099, 0, 1, 0x3050, 0x304F, 0x3099, 0, 1, 0x3052, 0x3051, 0x3099, 0, 1, 0x3054, 0x3053, 0x3099, 0, 1, 0x3056, 0x3055, 0x3099, 0, 1, 0x3058, 0x3057, 0x3099, 0, 1, 0x305A, 0x3059, 0x3099, 0, 1, 0x305C, 0x305B, 0x3099, 0, 1, 0x305E, 0x305D, 0x3099, 0, 1, 0x3060, 0x305F, 0x3099, 0, 1, 0x3062, 0x3061, 0x3099, 0, 1, 0x3065, 0x3064, 0x3099, 0, 1, 0x3067, 0x3066, 0x3099, 0, 1, 0x3069, 0x3068, 0x3099, 0, 1, 0x3070, 0x306F, 0x3099, 0, 1, 0x3071, 0x306F, 0x309A, 0, 1, 0x3073, 0x3072, 0x3099, 0, 1, 0x3074, 0x3072, 0x309A, 0, 1, 0x3076, 0x3075, 0x3099, 0, 1, 0x3077, 0x3075, 0x309A, 0, 1, 0x3079, 0x3078, 0x3099, 0, 1, 0x307A, 0x3078, 0x309A, 0, 1, 0x307C, 0x307B, 0x3099, 0, 1, 0x307D, 0x307B, 0x309A, 0, 1, 0x3094, 0x3046, 0x3099, 0, 16, 0x309B, 0x0020, 0x3099, 0, 16, 0x309C, 0x0020, 0x309A, 0, 1, 0x309E, 0x309D, 0x3099, 0, 1, 0x30AC, 0x30AB, 0x3099, 0, 1, 0x30AE, 0x30AD, 0x3099, 0, 1, 0x30B0, 0x30AF, 0x3099, 0, 1, 0x30B2, 0x30B1, 0x3099, 0, 1, 0x30B4, 0x30B3, 0x3099, 0, 1, 0x30B6, 0x30B5, 0x3099, 0, 1, 0x30B8, 0x30B7, 0x3099, 0, 1, 0x30BA, 0x30B9, 0x3099, 0, 1, 0x30BC, 0x30BB, 0x3099, 0, 1, 0x30BE, 0x30BD, 0x3099, 0, 1, 0x30C0, 0x30BF, 0x3099, 0, 1, 0x30C2, 0x30C1, 0x3099, 0, 1, 0x30C5, 0x30C4, 0x3099, 0, 1, 0x30C7, 0x30C6, 0x3099, 0, 1, 0x30C9, 0x30C8, 0x3099, 0, 1, 0x30D0, 0x30CF, 0x3099, 0, 1, 0x30D1, 0x30CF, 0x309A, 0, 1, 0x30D3, 0x30D2, 0x3099, 0, 1, 0x30D4, 0x30D2, 0x309A, 0, 1, 0x30D6, 0x30D5, 0x3099, 0, 1, 0x30D7, 0x30D5, 0x309A, 0, 1, 0x30D9, 0x30D8, 0x3099, 0, 1, 0x30DA, 0x30D8, 0x309A, 0, 1, 0x30DC, 0x30DB, 0x3099, 0, 1, 0x30DD, 0x30DB, 0x309A, 0, 1, 0x30F4, 0x30A6, 0x3099, 0, 1, 0x30F7, 0x30EF, 0x3099, 0, 1, 0x30F8, 0x30F0, 0x3099, 0, 1, 0x30F9, 0x30F1, 0x3099, 0, 1, 0x30FA, 0x30F2, 0x3099, 0, 1, 0x30FE, 0x30FD, 0x3099, 0, 16, 0x3131, 0x1100, 0, 16, 0x3132, 0x1101, 0, 16, 0x3133, 0x11AA, 0, 16, 0x3134, 0x1102, 0, 16, 0x3135, 0x11AC, 0, 16, 0x3136, 0x11AD, 0, 16, 0x3137, 0x1103, 0, 16, 0x3138, 0x1104, 0, 16, 0x3139, 0x1105, 0, 16, 0x313A, 0x11B0, 0, 16, 0x313B, 0x11B1, 0, 16, 0x313C, 0x11B2, 0, 16, 0x313D, 0x11B3, 0, 16, 0x313E, 0x11B4, 0, 16, 0x313F, 0x11B5, 0, 16, 0x3140, 0x111A, 0, 16, 0x3141, 0x1106, 0, 16, 0x3142, 0x1107, 0, 16, 0x3143, 0x1108, 0, 16, 0x3144, 0x1121, 0, 16, 0x3145, 0x1109, 0, 16, 0x3146, 0x110A, 0, 16, 0x3147, 0x110B, 0, 16, 0x3148, 0x110C, 0, 16, 0x3149, 0x110D, 0, 16, 0x314A, 0x110E, 0, 16, 0x314B, 0x110F, 0, 16, 0x314C, 0x1110, 0, 16, 0x314D, 0x1111, 0, 16, 0x314E, 0x1112, 0, 16, 0x314F, 0x1161, 0, 16, 0x3150, 0x1162, 0, 16, 0x3151, 0x1163, 0, 16, 0x3152, 0x1164, 0, 16, 0x3153, 0x1165, 0, 16, 0x3154, 0x1166, 0, 16, 0x3155, 0x1167, 0, 16, 0x3156, 0x1168, 0, 16, 0x3157, 0x1169, 0, 16, 0x3158, 0x116A, 0, 16, 0x3159, 0x116B, 0, 16, 0x315A, 0x116C, 0, 16, 0x315B, 0x116D, 0, 16, 0x315C, 0x116E, 0, 16, 0x315D, 0x116F, 0, 16, 0x315E, 0x1170, 0, 16, 0x315F, 0x1171, 0, 16, 0x3160, 0x1172, 0, 16, 0x3161, 0x1173, 0, 16, 0x3162, 0x1174, 0, 16, 0x3163, 0x1175, 0, 16, 0x3164, 0x1160, 0, 16, 0x3165, 0x1114, 0, 16, 0x3166, 0x1115, 0, 16, 0x3167, 0x11C7, 0, 16, 0x3168, 0x11C8, 0, 16, 0x3169, 0x11CC, 0, 16, 0x316A, 0x11CE, 0, 16, 0x316B, 0x11D3, 0, 16, 0x316C, 0x11D7, 0, 16, 0x316D, 0x11D9, 0, 16, 0x316E, 0x111C, 0, 16, 0x316F, 0x11DD, 0, 16, 0x3170, 0x11DF, 0, 16, 0x3171, 0x111D, 0, 16, 0x3172, 0x111E, 0, 16, 0x3173, 0x1120, 0, 16, 0x3174, 0x1122, 0, 16, 0x3175, 0x1123, 0, 16, 0x3176, 0x1127, 0, 16, 0x3177, 0x1129, 0, 16, 0x3178, 0x112B, 0, 16, 0x3179, 0x112C, 0, 16, 0x317A, 0x112D, 0, 16, 0x317B, 0x112E, 0, 16, 0x317C, 0x112F, 0, 16, 0x317D, 0x1132, 0, 16, 0x317E, 0x1136, 0, 16, 0x317F, 0x1140, 0, 16, 0x3180, 0x1147, 0, 16, 0x3181, 0x114C, 0, 16, 0x3182, 0x11F1, 0, 16, 0x3183, 0x11F2, 0, 16, 0x3184, 0x1157, 0, 16, 0x3185, 0x1158, 0, 16, 0x3186, 0x1159, 0, 16, 0x3187, 0x1184, 0, 16, 0x3188, 0x1185, 0, 16, 0x3189, 0x1188, 0, 16, 0x318A, 0x1191, 0, 16, 0x318B, 0x1192, 0, 16, 0x318C, 0x1194, 0, 16, 0x318D, 0x119E, 0, 16, 0x318E, 0x11A1, 0, 9, 0x3192, 0x4E00, 0, 9, 0x3193, 0x4E8C, 0, 9, 0x3194, 0x4E09, 0, 9, 0x3195, 0x56DB, 0, 9, 0x3196, 0x4E0A, 0, 9, 0x3197, 0x4E2D, 0, 9, 0x3198, 0x4E0B, 0, 9, 0x3199, 0x7532, 0, 9, 0x319A, 0x4E59, 0, 9, 0x319B, 0x4E19, 0, 9, 0x319C, 0x4E01, 0, 9, 0x319D, 0x5929, 0, 9, 0x319E, 0x5730, 0, 9, 0x319F, 0x4EBA, 0, 16, 0x3200, 0x0028, 0x1100, 0x0029, 0, 16, 0x3201, 0x0028, 0x1102, 0x0029, 0, 16, 0x3202, 0x0028, 0x1103, 0x0029, 0, 16, 0x3203, 0x0028, 0x1105, 0x0029, 0, 16, 0x3204, 0x0028, 0x1106, 0x0029, 0, 16, 0x3205, 0x0028, 0x1107, 0x0029, 0, 16, 0x3206, 0x0028, 0x1109, 0x0029, 0, 16, 0x3207, 0x0028, 0x110B, 0x0029, 0, 16, 0x3208, 0x0028, 0x110C, 0x0029, 0, 16, 0x3209, 0x0028, 0x110E, 0x0029, 0, 16, 0x320A, 0x0028, 0x110F, 0x0029, 0, 16, 0x320B, 0x0028, 0x1110, 0x0029, 0, 16, 0x320C, 0x0028, 0x1111, 0x0029, 0, 16, 0x320D, 0x0028, 0x1112, 0x0029, 0, 16, 0x320E, 0x0028, 0x1100, 0x1161, 0x0029, 0, 16, 0x320F, 0x0028, 0x1102, 0x1161, 0x0029, 0, 16, 0x3210, 0x0028, 0x1103, 0x1161, 0x0029, 0, 16, 0x3211, 0x0028, 0x1105, 0x1161, 0x0029, 0, 16, 0x3212, 0x0028, 0x1106, 0x1161, 0x0029, 0, 16, 0x3213, 0x0028, 0x1107, 0x1161, 0x0029, 0, 16, 0x3214, 0x0028, 0x1109, 0x1161, 0x0029, 0, 16, 0x3215, 0x0028, 0x110B, 0x1161, 0x0029, 0, 16, 0x3216, 0x0028, 0x110C, 0x1161, 0x0029, 0, 16, 0x3217, 0x0028, 0x110E, 0x1161, 0x0029, 0, 16, 0x3218, 0x0028, 0x110F, 0x1161, 0x0029, 0, 16, 0x3219, 0x0028, 0x1110, 0x1161, 0x0029, 0, 16, 0x321A, 0x0028, 0x1111, 0x1161, 0x0029, 0, 16, 0x321B, 0x0028, 0x1112, 0x1161, 0x0029, 0, 16, 0x321C, 0x0028, 0x110C, 0x116E, 0x0029, 0, 16, 0x3220, 0x0028, 0x4E00, 0x0029, 0, 16, 0x3221, 0x0028, 0x4E8C, 0x0029, 0, 16, 0x3222, 0x0028, 0x4E09, 0x0029, 0, 16, 0x3223, 0x0028, 0x56DB, 0x0029, 0, 16, 0x3224, 0x0028, 0x4E94, 0x0029, 0, 16, 0x3225, 0x0028, 0x516D, 0x0029, 0, 16, 0x3226, 0x0028, 0x4E03, 0x0029, 0, 16, 0x3227, 0x0028, 0x516B, 0x0029, 0, 16, 0x3228, 0x0028, 0x4E5D, 0x0029, 0, 16, 0x3229, 0x0028, 0x5341, 0x0029, 0, 16, 0x322A, 0x0028, 0x6708, 0x0029, 0, 16, 0x322B, 0x0028, 0x706B, 0x0029, 0, 16, 0x322C, 0x0028, 0x6C34, 0x0029, 0, 16, 0x322D, 0x0028, 0x6728, 0x0029, 0, 16, 0x322E, 0x0028, 0x91D1, 0x0029, 0, 16, 0x322F, 0x0028, 0x571F, 0x0029, 0, 16, 0x3230, 0x0028, 0x65E5, 0x0029, 0, 16, 0x3231, 0x0028, 0x682A, 0x0029, 0, 16, 0x3232, 0x0028, 0x6709, 0x0029, 0, 16, 0x3233, 0x0028, 0x793E, 0x0029, 0, 16, 0x3234, 0x0028, 0x540D, 0x0029, 0, 16, 0x3235, 0x0028, 0x7279, 0x0029, 0, 16, 0x3236, 0x0028, 0x8CA1, 0x0029, 0, 16, 0x3237, 0x0028, 0x795D, 0x0029, 0, 16, 0x3238, 0x0028, 0x52B4, 0x0029, 0, 16, 0x3239, 0x0028, 0x4EE3, 0x0029, 0, 16, 0x323A, 0x0028, 0x547C, 0x0029, 0, 16, 0x323B, 0x0028, 0x5B66, 0x0029, 0, 16, 0x323C, 0x0028, 0x76E3, 0x0029, 0, 16, 0x323D, 0x0028, 0x4F01, 0x0029, 0, 16, 0x323E, 0x0028, 0x8CC7, 0x0029, 0, 16, 0x323F, 0x0028, 0x5354, 0x0029, 0, 16, 0x3240, 0x0028, 0x796D, 0x0029, 0, 16, 0x3241, 0x0028, 0x4F11, 0x0029, 0, 16, 0x3242, 0x0028, 0x81EA, 0x0029, 0, 16, 0x3243, 0x0028, 0x81F3, 0x0029, 0, 8, 0x3260, 0x1100, 0, 8, 0x3261, 0x1102, 0, 8, 0x3262, 0x1103, 0, 8, 0x3263, 0x1105, 0, 8, 0x3264, 0x1106, 0, 8, 0x3265, 0x1107, 0, 8, 0x3266, 0x1109, 0, 8, 0x3267, 0x110B, 0, 8, 0x3268, 0x110C, 0, 8, 0x3269, 0x110E, 0, 8, 0x326A, 0x110F, 0, 8, 0x326B, 0x1110, 0, 8, 0x326C, 0x1111, 0, 8, 0x326D, 0x1112, 0, 8, 0x326E, 0x1100, 0x1161, 0, 8, 0x326F, 0x1102, 0x1161, 0, 8, 0x3270, 0x1103, 0x1161, 0, 8, 0x3271, 0x1105, 0x1161, 0, 8, 0x3272, 0x1106, 0x1161, 0, 8, 0x3273, 0x1107, 0x1161, 0, 8, 0x3274, 0x1109, 0x1161, 0, 8, 0x3275, 0x110B, 0x1161, 0, 8, 0x3276, 0x110C, 0x1161, 0, 8, 0x3277, 0x110E, 0x1161, 0, 8, 0x3278, 0x110F, 0x1161, 0, 8, 0x3279, 0x1110, 0x1161, 0, 8, 0x327A, 0x1111, 0x1161, 0, 8, 0x327B, 0x1112, 0x1161, 0, 8, 0x3280, 0x4E00, 0, 8, 0x3281, 0x4E8C, 0, 8, 0x3282, 0x4E09, 0, 8, 0x3283, 0x56DB, 0, 8, 0x3284, 0x4E94, 0, 8, 0x3285, 0x516D, 0, 8, 0x3286, 0x4E03, 0, 8, 0x3287, 0x516B, 0, 8, 0x3288, 0x4E5D, 0, 8, 0x3289, 0x5341, 0, 8, 0x328A, 0x6708, 0, 8, 0x328B, 0x706B, 0, 8, 0x328C, 0x6C34, 0, 8, 0x328D, 0x6728, 0, 8, 0x328E, 0x91D1, 0, 8, 0x328F, 0x571F, 0, 8, 0x3290, 0x65E5, 0, 8, 0x3291, 0x682A, 0, 8, 0x3292, 0x6709, 0, 8, 0x3293, 0x793E, 0, 8, 0x3294, 0x540D, 0, 8, 0x3295, 0x7279, 0, 8, 0x3296, 0x8CA1, 0, 8, 0x3297, 0x795D, 0, 8, 0x3298, 0x52B4, 0, 8, 0x3299, 0x79D8, 0, 8, 0x329A, 0x7537, 0, 8, 0x329B, 0x5973, 0, 8, 0x329C, 0x9069, 0, 8, 0x329D, 0x512A, 0, 8, 0x329E, 0x5370, 0, 8, 0x329F, 0x6CE8, 0, 8, 0x32A0, 0x9805, 0, 8, 0x32A1, 0x4F11, 0, 8, 0x32A2, 0x5199, 0, 8, 0x32A3, 0x6B63, 0, 8, 0x32A4, 0x4E0A, 0, 8, 0x32A5, 0x4E2D, 0, 8, 0x32A6, 0x4E0B, 0, 8, 0x32A7, 0x5DE6, 0, 8, 0x32A8, 0x53F3, 0, 8, 0x32A9, 0x533B, 0, 8, 0x32AA, 0x5B97, 0, 8, 0x32AB, 0x5B66, 0, 8, 0x32AC, 0x76E3, 0, 8, 0x32AD, 0x4F01, 0, 8, 0x32AE, 0x8CC7, 0, 8, 0x32AF, 0x5354, 0, 8, 0x32B0, 0x591C, 0, 16, 0x32C0, 0x0031, 0x6708, 0, 16, 0x32C1, 0x0032, 0x6708, 0, 16, 0x32C2, 0x0033, 0x6708, 0, 16, 0x32C3, 0x0034, 0x6708, 0, 16, 0x32C4, 0x0035, 0x6708, 0, 16, 0x32C5, 0x0036, 0x6708, 0, 16, 0x32C6, 0x0037, 0x6708, 0, 16, 0x32C7, 0x0038, 0x6708, 0, 16, 0x32C8, 0x0039, 0x6708, 0, 16, 0x32C9, 0x0031, 0x0030, 0x6708, 0, 16, 0x32CA, 0x0031, 0x0031, 0x6708, 0, 16, 0x32CB, 0x0031, 0x0032, 0x6708, 0, 8, 0x32D0, 0x30A2, 0, 8, 0x32D1, 0x30A4, 0, 8, 0x32D2, 0x30A6, 0, 8, 0x32D3, 0x30A8, 0, 8, 0x32D4, 0x30AA, 0, 8, 0x32D5, 0x30AB, 0, 8, 0x32D6, 0x30AD, 0, 8, 0x32D7, 0x30AF, 0, 8, 0x32D8, 0x30B1, 0, 8, 0x32D9, 0x30B3, 0, 8, 0x32DA, 0x30B5, 0, 8, 0x32DB, 0x30B7, 0, 8, 0x32DC, 0x30B9, 0, 8, 0x32DD, 0x30BB, 0, 8, 0x32DE, 0x30BD, 0, 8, 0x32DF, 0x30BF, 0, 8, 0x32E0, 0x30C1, 0, 8, 0x32E1, 0x30C4, 0, 8, 0x32E2, 0x30C6, 0, 8, 0x32E3, 0x30C8, 0, 8, 0x32E4, 0x30CA, 0, 8, 0x32E5, 0x30CB, 0, 8, 0x32E6, 0x30CC, 0, 8, 0x32E7, 0x30CD, 0, 8, 0x32E8, 0x30CE, 0, 8, 0x32E9, 0x30CF, 0, 8, 0x32EA, 0x30D2, 0, 8, 0x32EB, 0x30D5, 0, 8, 0x32EC, 0x30D8, 0, 8, 0x32ED, 0x30DB, 0, 8, 0x32EE, 0x30DE, 0, 8, 0x32EF, 0x30DF, 0, 8, 0x32F0, 0x30E0, 0, 8, 0x32F1, 0x30E1, 0, 8, 0x32F2, 0x30E2, 0, 8, 0x32F3, 0x30E4, 0, 8, 0x32F4, 0x30E6, 0, 8, 0x32F5, 0x30E8, 0, 8, 0x32F6, 0x30E9, 0, 8, 0x32F7, 0x30EA, 0, 8, 0x32F8, 0x30EB, 0, 8, 0x32F9, 0x30EC, 0, 8, 0x32FA, 0x30ED, 0, 8, 0x32FB, 0x30EF, 0, 8, 0x32FC, 0x30F0, 0, 8, 0x32FD, 0x30F1, 0, 8, 0x32FE, 0x30F2, 0, 15, 0x3300, 0x30A2, 0x30D1, 0x30FC, 0x30C8, 0, 15, 0x3301, 0x30A2, 0x30EB, 0x30D5, 0x30A1, 0, 15, 0x3302, 0x30A2, 0x30F3, 0x30DA, 0x30A2, 0, 15, 0x3303, 0x30A2, 0x30FC, 0x30EB, 0, 15, 0x3304, 0x30A4, 0x30CB, 0x30F3, 0x30B0, 0, 15, 0x3305, 0x30A4, 0x30F3, 0x30C1, 0, 15, 0x3306, 0x30A6, 0x30A9, 0x30F3, 0, 15, 0x3307, 0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9, 0, 15, 0x3308, 0x30A8, 0x30FC, 0x30AB, 0x30FC, 0, 15, 0x3309, 0x30AA, 0x30F3, 0x30B9, 0, 15, 0x330A, 0x30AA, 0x30FC, 0x30E0, 0, 15, 0x330B, 0x30AB, 0x30A4, 0x30EA, 0, 15, 0x330C, 0x30AB, 0x30E9, 0x30C3, 0x30C8, 0, 15, 0x330D, 0x30AB, 0x30ED, 0x30EA, 0x30FC, 0, 15, 0x330E, 0x30AC, 0x30ED, 0x30F3, 0, 15, 0x330F, 0x30AC, 0x30F3, 0x30DE, 0, 15, 0x3310, 0x30AE, 0x30AC, 0, 15, 0x3311, 0x30AE, 0x30CB, 0x30FC, 0, 15, 0x3312, 0x30AD, 0x30E5, 0x30EA, 0x30FC, 0, 15, 0x3313, 0x30AE, 0x30EB, 0x30C0, 0x30FC, 0, 15, 0x3314, 0x30AD, 0x30ED, 0, 15, 0x3315, 0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0, 0, 15, 0x3316, 0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB, 0, 15, 0x3317, 0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8, 0, 15, 0x3318, 0x30B0, 0x30E9, 0x30E0, 0, 15, 0x3319, 0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3, 0, 15, 0x331A, 0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED, 0, 15, 0x331B, 0x30AF, 0x30ED, 0x30FC, 0x30CD, 0, 15, 0x331C, 0x30B1, 0x30FC, 0x30B9, 0, 15, 0x331D, 0x30B3, 0x30EB, 0x30CA, 0, 15, 0x331E, 0x30B3, 0x30FC, 0x30DD, 0, 15, 0x331F, 0x30B5, 0x30A4, 0x30AF, 0x30EB, 0, 15, 0x3320, 0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0, 0, 15, 0x3321, 0x30B7, 0x30EA, 0x30F3, 0x30B0, 0, 15, 0x3322, 0x30BB, 0x30F3, 0x30C1, 0, 15, 0x3323, 0x30BB, 0x30F3, 0x30C8, 0, 15, 0x3324, 0x30C0, 0x30FC, 0x30B9, 0, 15, 0x3325, 0x30C7, 0x30B7, 0, 15, 0x3326, 0x30C9, 0x30EB, 0, 15, 0x3327, 0x30C8, 0x30F3, 0, 15, 0x3328, 0x30CA, 0x30CE, 0, 15, 0x3329, 0x30CE, 0x30C3, 0x30C8, 0, 15, 0x332A, 0x30CF, 0x30A4, 0x30C4, 0, 15, 0x332B, 0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8, 0, 15, 0x332C, 0x30D1, 0x30FC, 0x30C4, 0, 15, 0x332D, 0x30D0, 0x30FC, 0x30EC, 0x30EB, 0, 15, 0x332E, 0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB, 0, 15, 0x332F, 0x30D4, 0x30AF, 0x30EB, 0, 15, 0x3330, 0x30D4, 0x30B3, 0, 15, 0x3331, 0x30D3, 0x30EB, 0, 15, 0x3332, 0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9, 0, 15, 0x3333, 0x30D5, 0x30A3, 0x30FC, 0x30C8, 0, 15, 0x3334, 0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB, 0, 15, 0x3335, 0x30D5, 0x30E9, 0x30F3, 0, 15, 0x3336, 0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB, 0, 15, 0x3337, 0x30DA, 0x30BD, 0, 15, 0x3338, 0x30DA, 0x30CB, 0x30D2, 0, 15, 0x3339, 0x30D8, 0x30EB, 0x30C4, 0, 15, 0x333A, 0x30DA, 0x30F3, 0x30B9, 0, 15, 0x333B, 0x30DA, 0x30FC, 0x30B8, 0, 15, 0x333C, 0x30D9, 0x30FC, 0x30BF, 0, 15, 0x333D, 0x30DD, 0x30A4, 0x30F3, 0x30C8, 0, 15, 0x333E, 0x30DC, 0x30EB, 0x30C8, 0, 15, 0x333F, 0x30DB, 0x30F3, 0, 15, 0x3340, 0x30DD, 0x30F3, 0x30C9, 0, 15, 0x3341, 0x30DB, 0x30FC, 0x30EB, 0, 15, 0x3342, 0x30DB, 0x30FC, 0x30F3, 0, 15, 0x3343, 0x30DE, 0x30A4, 0x30AF, 0x30ED, 0, 15, 0x3344, 0x30DE, 0x30A4, 0x30EB, 0, 15, 0x3345, 0x30DE, 0x30C3, 0x30CF, 0, 15, 0x3346, 0x30DE, 0x30EB, 0x30AF, 0, 15, 0x3347, 0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3, 0, 15, 0x3348, 0x30DF, 0x30AF, 0x30ED, 0x30F3, 0, 15, 0x3349, 0x30DF, 0x30EA, 0, 15, 0x334A, 0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB, 0, 15, 0x334B, 0x30E1, 0x30AC, 0, 15, 0x334C, 0x30E1, 0x30AC, 0x30C8, 0x30F3, 0, 15, 0x334D, 0x30E1, 0x30FC, 0x30C8, 0x30EB, 0, 15, 0x334E, 0x30E4, 0x30FC, 0x30C9, 0, 15, 0x334F, 0x30E4, 0x30FC, 0x30EB, 0, 15, 0x3350, 0x30E6, 0x30A2, 0x30F3, 0, 15, 0x3351, 0x30EA, 0x30C3, 0x30C8, 0x30EB, 0, 15, 0x3352, 0x30EA, 0x30E9, 0, 15, 0x3353, 0x30EB, 0x30D4, 0x30FC, 0, 15, 0x3354, 0x30EB, 0x30FC, 0x30D6, 0x30EB, 0, 15, 0x3355, 0x30EC, 0x30E0, 0, 15, 0x3356, 0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3, 0, 15, 0x3357, 0x30EF, 0x30C3, 0x30C8, 0, 16, 0x3358, 0x0030, 0x70B9, 0, 16, 0x3359, 0x0031, 0x70B9, 0, 16, 0x335A, 0x0032, 0x70B9, 0, 16, 0x335B, 0x0033, 0x70B9, 0, 16, 0x335C, 0x0034, 0x70B9, 0, 16, 0x335D, 0x0035, 0x70B9, 0, 16, 0x335E, 0x0036, 0x70B9, 0, 16, 0x335F, 0x0037, 0x70B9, 0, 16, 0x3360, 0x0038, 0x70B9, 0, 16, 0x3361, 0x0039, 0x70B9, 0, 16, 0x3362, 0x0031, 0x0030, 0x70B9, 0, 16, 0x3363, 0x0031, 0x0031, 0x70B9, 0, 16, 0x3364, 0x0031, 0x0032, 0x70B9, 0, 16, 0x3365, 0x0031, 0x0033, 0x70B9, 0, 16, 0x3366, 0x0031, 0x0034, 0x70B9, 0, 16, 0x3367, 0x0031, 0x0035, 0x70B9, 0, 16, 0x3368, 0x0031, 0x0036, 0x70B9, 0, 16, 0x3369, 0x0031, 0x0037, 0x70B9, 0, 16, 0x336A, 0x0031, 0x0038, 0x70B9, 0, 16, 0x336B, 0x0031, 0x0039, 0x70B9, 0, 16, 0x336C, 0x0032, 0x0030, 0x70B9, 0, 16, 0x336D, 0x0032, 0x0031, 0x70B9, 0, 16, 0x336E, 0x0032, 0x0032, 0x70B9, 0, 16, 0x336F, 0x0032, 0x0033, 0x70B9, 0, 16, 0x3370, 0x0032, 0x0034, 0x70B9, 0, 15, 0x3371, 0x0068, 0x0050, 0x0061, 0, 15, 0x3372, 0x0064, 0x0061, 0, 15, 0x3373, 0x0041, 0x0055, 0, 15, 0x3374, 0x0062, 0x0061, 0x0072, 0, 15, 0x3375, 0x006F, 0x0056, 0, 15, 0x3376, 0x0070, 0x0063, 0, 15, 0x337B, 0x5E73, 0x6210, 0, 15, 0x337C, 0x662D, 0x548C, 0, 15, 0x337D, 0x5927, 0x6B63, 0, 15, 0x337E, 0x660E, 0x6CBB, 0, 15, 0x337F, 0x682A, 0x5F0F, 0x4F1A, 0x793E, 0, 15, 0x3380, 0x0070, 0x0041, 0, 15, 0x3381, 0x006E, 0x0041, 0, 15, 0x3382, 0x03BC, 0x0041, 0, 15, 0x3383, 0x006D, 0x0041, 0, 15, 0x3384, 0x006B, 0x0041, 0, 15, 0x3385, 0x004B, 0x0042, 0, 15, 0x3386, 0x004D, 0x0042, 0, 15, 0x3387, 0x0047, 0x0042, 0, 15, 0x3388, 0x0063, 0x0061, 0x006C, 0, 15, 0x3389, 0x006B, 0x0063, 0x0061, 0x006C, 0, 15, 0x338A, 0x0070, 0x0046, 0, 15, 0x338B, 0x006E, 0x0046, 0, 15, 0x338C, 0x03BC, 0x0046, 0, 15, 0x338D, 0x03BC, 0x0067, 0, 15, 0x338E, 0x006D, 0x0067, 0, 15, 0x338F, 0x006B, 0x0067, 0, 15, 0x3390, 0x0048, 0x007A, 0, 15, 0x3391, 0x006B, 0x0048, 0x007A, 0, 15, 0x3392, 0x004D, 0x0048, 0x007A, 0, 15, 0x3393, 0x0047, 0x0048, 0x007A, 0, 15, 0x3394, 0x0054, 0x0048, 0x007A, 0, 15, 0x3395, 0x03BC, 0x2113, 0, 15, 0x3396, 0x006D, 0x2113, 0, 15, 0x3397, 0x0064, 0x2113, 0, 15, 0x3398, 0x006B, 0x2113, 0, 15, 0x3399, 0x0066, 0x006D, 0, 15, 0x339A, 0x006E, 0x006D, 0, 15, 0x339B, 0x03BC, 0x006D, 0, 15, 0x339C, 0x006D, 0x006D, 0, 15, 0x339D, 0x0063, 0x006D, 0, 15, 0x339E, 0x006B, 0x006D, 0, 15, 0x339F, 0x006D, 0x006D, 0x00B2, 0, 15, 0x33A0, 0x0063, 0x006D, 0x00B2, 0, 15, 0x33A1, 0x006D, 0x00B2, 0, 15, 0x33A2, 0x006B, 0x006D, 0x00B2, 0, 15, 0x33A3, 0x006D, 0x006D, 0x00B3, 0, 15, 0x33A4, 0x0063, 0x006D, 0x00B3, 0, 15, 0x33A5, 0x006D, 0x00B3, 0, 15, 0x33A6, 0x006B, 0x006D, 0x00B3, 0, 15, 0x33A7, 0x006D, 0x2215, 0x0073, 0, 15, 0x33A8, 0x006D, 0x2215, 0x0073, 0x00B2, 0, 15, 0x33A9, 0x0050, 0x0061, 0, 15, 0x33AA, 0x006B, 0x0050, 0x0061, 0, 15, 0x33AB, 0x004D, 0x0050, 0x0061, 0, 15, 0x33AC, 0x0047, 0x0050, 0x0061, 0, 15, 0x33AD, 0x0072, 0x0061, 0x0064, 0, 15, 0x33AE, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0, 15, 0x33AF, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00B2, 0, 15, 0x33B0, 0x0070, 0x0073, 0, 15, 0x33B1, 0x006E, 0x0073, 0, 15, 0x33B2, 0x03BC, 0x0073, 0, 15, 0x33B3, 0x006D, 0x0073, 0, 15, 0x33B4, 0x0070, 0x0056, 0, 15, 0x33B5, 0x006E, 0x0056, 0, 15, 0x33B6, 0x03BC, 0x0056, 0, 15, 0x33B7, 0x006D, 0x0056, 0, 15, 0x33B8, 0x006B, 0x0056, 0, 15, 0x33B9, 0x004D, 0x0056, 0, 15, 0x33BA, 0x0070, 0x0057, 0, 15, 0x33BB, 0x006E, 0x0057, 0, 15, 0x33BC, 0x03BC, 0x0057, 0, 15, 0x33BD, 0x006D, 0x0057, 0, 15, 0x33BE, 0x006B, 0x0057, 0, 15, 0x33BF, 0x004D, 0x0057, 0, 15, 0x33C0, 0x006B, 0x03A9, 0, 15, 0x33C1, 0x004D, 0x03A9, 0, 15, 0x33C2, 0x0061, 0x002E, 0x006D, 0x002E, 0, 15, 0x33C3, 0x0042, 0x0071, 0, 15, 0x33C4, 0x0063, 0x0063, 0, 15, 0x33C5, 0x0063, 0x0064, 0, 15, 0x33C6, 0x0043, 0x2215, 0x006B, 0x0067, 0, 15, 0x33C7, 0x0043, 0x006F, 0x002E, 0, 15, 0x33C8, 0x0064, 0x0042, 0, 15, 0x33C9, 0x0047, 0x0079, 0, 15, 0x33CA, 0x0068, 0x0061, 0, 15, 0x33CB, 0x0048, 0x0050, 0, 15, 0x33CC, 0x0069, 0x006E, 0, 15, 0x33CD, 0x004B, 0x004B, 0, 15, 0x33CE, 0x004B, 0x004D, 0, 15, 0x33CF, 0x006B, 0x0074, 0, 15, 0x33D0, 0x006C, 0x006D, 0, 15, 0x33D1, 0x006C, 0x006E, 0, 15, 0x33D2, 0x006C, 0x006F, 0x0067, 0, 15, 0x33D3, 0x006C, 0x0078, 0, 15, 0x33D4, 0x006D, 0x0062, 0, 15, 0x33D5, 0x006D, 0x0069, 0x006C, 0, 15, 0x33D6, 0x006D, 0x006F, 0x006C, 0, 15, 0x33D7, 0x0050, 0x0048, 0, 15, 0x33D8, 0x0070, 0x002E, 0x006D, 0x002E, 0, 15, 0x33D9, 0x0050, 0x0050, 0x004D, 0, 15, 0x33DA, 0x0050, 0x0052, 0, 15, 0x33DB, 0x0073, 0x0072, 0, 15, 0x33DC, 0x0053, 0x0076, 0, 15, 0x33DD, 0x0057, 0x0062, 0, 16, 0x33E0, 0x0031, 0x65E5, 0, 16, 0x33E1, 0x0032, 0x65E5, 0, 16, 0x33E2, 0x0033, 0x65E5, 0, 16, 0x33E3, 0x0034, 0x65E5, 0, 16, 0x33E4, 0x0035, 0x65E5, 0, 16, 0x33E5, 0x0036, 0x65E5, 0, 16, 0x33E6, 0x0037, 0x65E5, 0, 16, 0x33E7, 0x0038, 0x65E5, 0, 16, 0x33E8, 0x0039, 0x65E5, 0, 16, 0x33E9, 0x0031, 0x0030, 0x65E5, 0, 16, 0x33EA, 0x0031, 0x0031, 0x65E5, 0, 16, 0x33EB, 0x0031, 0x0032, 0x65E5, 0, 16, 0x33EC, 0x0031, 0x0033, 0x65E5, 0, 16, 0x33ED, 0x0031, 0x0034, 0x65E5, 0, 16, 0x33EE, 0x0031, 0x0035, 0x65E5, 0, 16, 0x33EF, 0x0031, 0x0036, 0x65E5, 0, 16, 0x33F0, 0x0031, 0x0037, 0x65E5, 0, 16, 0x33F1, 0x0031, 0x0038, 0x65E5, 0, 16, 0x33F2, 0x0031, 0x0039, 0x65E5, 0, 16, 0x33F3, 0x0032, 0x0030, 0x65E5, 0, 16, 0x33F4, 0x0032, 0x0031, 0x65E5, 0, 16, 0x33F5, 0x0032, 0x0032, 0x65E5, 0, 16, 0x33F6, 0x0032, 0x0033, 0x65E5, 0, 16, 0x33F7, 0x0032, 0x0034, 0x65E5, 0, 16, 0x33F8, 0x0032, 0x0035, 0x65E5, 0, 16, 0x33F9, 0x0032, 0x0036, 0x65E5, 0, 16, 0x33FA, 0x0032, 0x0037, 0x65E5, 0, 16, 0x33FB, 0x0032, 0x0038, 0x65E5, 0, 16, 0x33FC, 0x0032, 0x0039, 0x65E5, 0, 16, 0x33FD, 0x0033, 0x0030, 0x65E5, 0, 16, 0x33FE, 0x0033, 0x0031, 0x65E5, 0, 1, 0xF900, 0x8C48, 0, 1, 0xF901, 0x66F4, 0, 1, 0xF902, 0x8ECA, 0, 1, 0xF903, 0x8CC8, 0, 1, 0xF904, 0x6ED1, 0, 1, 0xF905, 0x4E32, 0, 1, 0xF906, 0x53E5, 0, 1, 0xF907, 0x9F9C, 0, 1, 0xF908, 0x9F9C, 0, 1, 0xF909, 0x5951, 0, 1, 0xF90A, 0x91D1, 0, 1, 0xF90B, 0x5587, 0, 1, 0xF90C, 0x5948, 0, 1, 0xF90D, 0x61F6, 0, 1, 0xF90E, 0x7669, 0, 1, 0xF90F, 0x7F85, 0, 1, 0xF910, 0x863F, 0, 1, 0xF911, 0x87BA, 0, 1, 0xF912, 0x88F8, 0, 1, 0xF913, 0x908F, 0, 1, 0xF914, 0x6A02, 0, 1, 0xF915, 0x6D1B, 0, 1, 0xF916, 0x70D9, 0, 1, 0xF917, 0x73DE, 0, 1, 0xF918, 0x843D, 0, 1, 0xF919, 0x916A, 0, 1, 0xF91A, 0x99F1, 0, 1, 0xF91B, 0x4E82, 0, 1, 0xF91C, 0x5375, 0, 1, 0xF91D, 0x6B04, 0, 1, 0xF91E, 0x721B, 0, 1, 0xF91F, 0x862D, 0, 1, 0xF920, 0x9E1E, 0, 1, 0xF921, 0x5D50, 0, 1, 0xF922, 0x6FEB, 0, 1, 0xF923, 0x85CD, 0, 1, 0xF924, 0x8964, 0, 1, 0xF925, 0x62C9, 0, 1, 0xF926, 0x81D8, 0, 1, 0xF927, 0x881F, 0, 1, 0xF928, 0x5ECA, 0, 1, 0xF929, 0x6717, 0, 1, 0xF92A, 0x6D6A, 0, 1, 0xF92B, 0x72FC, 0, 1, 0xF92C, 0x90CE, 0, 1, 0xF92D, 0x4F86, 0, 1, 0xF92E, 0x51B7, 0, 1, 0xF92F, 0x52DE, 0, 1, 0xF930, 0x64C4, 0, 1, 0xF931, 0x6AD3, 0, 1, 0xF932, 0x7210, 0, 1, 0xF933, 0x76E7, 0, 1, 0xF934, 0x8001, 0, 1, 0xF935, 0x8606, 0, 1, 0xF936, 0x865C, 0, 1, 0xF937, 0x8DEF, 0, 1, 0xF938, 0x9732, 0, 1, 0xF939, 0x9B6F, 0, 1, 0xF93A, 0x9DFA, 0, 1, 0xF93B, 0x788C, 0, 1, 0xF93C, 0x797F, 0, 1, 0xF93D, 0x7DA0, 0, 1, 0xF93E, 0x83C9, 0, 1, 0xF93F, 0x9304, 0, 1, 0xF940, 0x9E7F, 0, 1, 0xF941, 0x8AD6, 0, 1, 0xF942, 0x58DF, 0, 1, 0xF943, 0x5F04, 0, 1, 0xF944, 0x7C60, 0, 1, 0xF945, 0x807E, 0, 1, 0xF946, 0x7262, 0, 1, 0xF947, 0x78CA, 0, 1, 0xF948, 0x8CC2, 0, 1, 0xF949, 0x96F7, 0, 1, 0xF94A, 0x58D8, 0, 1, 0xF94B, 0x5C62, 0, 1, 0xF94C, 0x6A13, 0, 1, 0xF94D, 0x6DDA, 0, 1, 0xF94E, 0x6F0F, 0, 1, 0xF94F, 0x7D2F, 0, 1, 0xF950, 0x7E37, 0, 1, 0xF951, 0x96FB, 0, 1, 0xF952, 0x52D2, 0, 1, 0xF953, 0x808B, 0, 1, 0xF954, 0x51DC, 0, 1, 0xF955, 0x51CC, 0, 1, 0xF956, 0x7A1C, 0, 1, 0xF957, 0x7DBE, 0, 1, 0xF958, 0x83F1, 0, 1, 0xF959, 0x9675, 0, 1, 0xF95A, 0x8B80, 0, 1, 0xF95B, 0x62CF, 0, 1, 0xF95C, 0x6A02, 0, 1, 0xF95D, 0x8AFE, 0, 1, 0xF95E, 0x4E39, 0, 1, 0xF95F, 0x5BE7, 0, 1, 0xF960, 0x6012, 0, 1, 0xF961, 0x7387, 0, 1, 0xF962, 0x7570, 0, 1, 0xF963, 0x5317, 0, 1, 0xF964, 0x78FB, 0, 1, 0xF965, 0x4FBF, 0, 1, 0xF966, 0x5FA9, 0, 1, 0xF967, 0x4E0D, 0, 1, 0xF968, 0x6CCC, 0, 1, 0xF969, 0x6578, 0, 1, 0xF96A, 0x7D22, 0, 1, 0xF96B, 0x53C3, 0, 1, 0xF96C, 0x585E, 0, 1, 0xF96D, 0x7701, 0, 1, 0xF96E, 0x8449, 0, 1, 0xF96F, 0x8AAA, 0, 1, 0xF970, 0x6BBA, 0, 1, 0xF971, 0x8FB0, 0, 1, 0xF972, 0x6C88, 0, 1, 0xF973, 0x62FE, 0, 1, 0xF974, 0x82E5, 0, 1, 0xF975, 0x63A0, 0, 1, 0xF976, 0x7565, 0, 1, 0xF977, 0x4EAE, 0, 1, 0xF978, 0x5169, 0, 1, 0xF979, 0x51C9, 0, 1, 0xF97A, 0x6881, 0, 1, 0xF97B, 0x7CE7, 0, 1, 0xF97C, 0x826F, 0, 1, 0xF97D, 0x8AD2, 0, 1, 0xF97E, 0x91CF, 0, 1, 0xF97F, 0x52F5, 0, 1, 0xF980, 0x5442, 0, 1, 0xF981, 0x5973, 0, 1, 0xF982, 0x5EEC, 0, 1, 0xF983, 0x65C5, 0, 1, 0xF984, 0x6FFE, 0, 1, 0xF985, 0x792A, 0, 1, 0xF986, 0x95AD, 0, 1, 0xF987, 0x9A6A, 0, 1, 0xF988, 0x9E97, 0, 1, 0xF989, 0x9ECE, 0, 1, 0xF98A, 0x529B, 0, 1, 0xF98B, 0x66C6, 0, 1, 0xF98C, 0x6B77, 0, 1, 0xF98D, 0x8F62, 0, 1, 0xF98E, 0x5E74, 0, 1, 0xF98F, 0x6190, 0, 1, 0xF990, 0x6200, 0, 1, 0xF991, 0x649A, 0, 1, 0xF992, 0x6F23, 0, 1, 0xF993, 0x7149, 0, 1, 0xF994, 0x7489, 0, 1, 0xF995, 0x79CA, 0, 1, 0xF996, 0x7DF4, 0, 1, 0xF997, 0x806F, 0, 1, 0xF998, 0x8F26, 0, 1, 0xF999, 0x84EE, 0, 1, 0xF99A, 0x9023, 0, 1, 0xF99B, 0x934A, 0, 1, 0xF99C, 0x5217, 0, 1, 0xF99D, 0x52A3, 0, 1, 0xF99E, 0x54BD, 0, 1, 0xF99F, 0x70C8, 0, 1, 0xF9A0, 0x88C2, 0, 1, 0xF9A1, 0x8AAA, 0, 1, 0xF9A2, 0x5EC9, 0, 1, 0xF9A3, 0x5FF5, 0, 1, 0xF9A4, 0x637B, 0, 1, 0xF9A5, 0x6BAE, 0, 1, 0xF9A6, 0x7C3E, 0, 1, 0xF9A7, 0x7375, 0, 1, 0xF9A8, 0x4EE4, 0, 1, 0xF9A9, 0x56F9, 0, 1, 0xF9AA, 0x5BE7, 0, 1, 0xF9AB, 0x5DBA, 0, 1, 0xF9AC, 0x601C, 0, 1, 0xF9AD, 0x73B2, 0, 1, 0xF9AE, 0x7469, 0, 1, 0xF9AF, 0x7F9A, 0, 1, 0xF9B0, 0x8046, 0, 1, 0xF9B1, 0x9234, 0, 1, 0xF9B2, 0x96F6, 0, 1, 0xF9B3, 0x9748, 0, 1, 0xF9B4, 0x9818, 0, 1, 0xF9B5, 0x4F8B, 0, 1, 0xF9B6, 0x79AE, 0, 1, 0xF9B7, 0x91B4, 0, 1, 0xF9B8, 0x96B8, 0, 1, 0xF9B9, 0x60E1, 0, 1, 0xF9BA, 0x4E86, 0, 1, 0xF9BB, 0x50DA, 0, 1, 0xF9BC, 0x5BEE, 0, 1, 0xF9BD, 0x5C3F, 0, 1, 0xF9BE, 0x6599, 0, 1, 0xF9BF, 0x6A02, 0, 1, 0xF9C0, 0x71CE, 0, 1, 0xF9C1, 0x7642, 0, 1, 0xF9C2, 0x84FC, 0, 1, 0xF9C3, 0x907C, 0, 1, 0xF9C4, 0x9F8D, 0, 1, 0xF9C5, 0x6688, 0, 1, 0xF9C6, 0x962E, 0, 1, 0xF9C7, 0x5289, 0, 1, 0xF9C8, 0x677B, 0, 1, 0xF9C9, 0x67F3, 0, 1, 0xF9CA, 0x6D41, 0, 1, 0xF9CB, 0x6E9C, 0, 1, 0xF9CC, 0x7409, 0, 1, 0xF9CD, 0x7559, 0, 1, 0xF9CE, 0x786B, 0, 1, 0xF9CF, 0x7D10, 0, 1, 0xF9D0, 0x985E, 0, 1, 0xF9D1, 0x516D, 0, 1, 0xF9D2, 0x622E, 0, 1, 0xF9D3, 0x9678, 0, 1, 0xF9D4, 0x502B, 0, 1, 0xF9D5, 0x5D19, 0, 1, 0xF9D6, 0x6DEA, 0, 1, 0xF9D7, 0x8F2A, 0, 1, 0xF9D8, 0x5F8B, 0, 1, 0xF9D9, 0x6144, 0, 1, 0xF9DA, 0x6817, 0, 1, 0xF9DB, 0x7387, 0, 1, 0xF9DC, 0x9686, 0, 1, 0xF9DD, 0x5229, 0, 1, 0xF9DE, 0x540F, 0, 1, 0xF9DF, 0x5C65, 0, 1, 0xF9E0, 0x6613, 0, 1, 0xF9E1, 0x674E, 0, 1, 0xF9E2, 0x68A8, 0, 1, 0xF9E3, 0x6CE5, 0, 1, 0xF9E4, 0x7406, 0, 1, 0xF9E5, 0x75E2, 0, 1, 0xF9E6, 0x7F79, 0, 1, 0xF9E7, 0x88CF, 0, 1, 0xF9E8, 0x88E1, 0, 1, 0xF9E9, 0x91CC, 0, 1, 0xF9EA, 0x96E2, 0, 1, 0xF9EB, 0x533F, 0, 1, 0xF9EC, 0x6EBA, 0, 1, 0xF9ED, 0x541D, 0, 1, 0xF9EE, 0x71D0, 0, 1, 0xF9EF, 0x7498, 0, 1, 0xF9F0, 0x85FA, 0, 1, 0xF9F1, 0x96A3, 0, 1, 0xF9F2, 0x9C57, 0, 1, 0xF9F3, 0x9E9F, 0, 1, 0xF9F4, 0x6797, 0, 1, 0xF9F5, 0x6DCB, 0, 1, 0xF9F6, 0x81E8, 0, 1, 0xF9F7, 0x7ACB, 0, 1, 0xF9F8, 0x7B20, 0, 1, 0xF9F9, 0x7C92, 0, 1, 0xF9FA, 0x72C0, 0, 1, 0xF9FB, 0x7099, 0, 1, 0xF9FC, 0x8B58, 0, 1, 0xF9FD, 0x4EC0, 0, 1, 0xF9FE, 0x8336, 0, 1, 0xF9FF, 0x523A, 0, 1, 0xFA00, 0x5207, 0, 1, 0xFA01, 0x5EA6, 0, 1, 0xFA02, 0x62D3, 0, 1, 0xFA03, 0x7CD6, 0, 1, 0xFA04, 0x5B85, 0, 1, 0xFA05, 0x6D1E, 0, 1, 0xFA06, 0x66B4, 0, 1, 0xFA07, 0x8F3B, 0, 1, 0xFA08, 0x884C, 0, 1, 0xFA09, 0x964D, 0, 1, 0xFA0A, 0x898B, 0, 1, 0xFA0B, 0x5ED3, 0, 1, 0xFA0C, 0x5140, 0, 1, 0xFA0D, 0x55C0, 0, 1, 0xFA10, 0x585A, 0, 1, 0xFA12, 0x6674, 0, 1, 0xFA15, 0x51DE, 0, 1, 0xFA16, 0x732A, 0, 1, 0xFA17, 0x76CA, 0, 1, 0xFA18, 0x793C, 0, 1, 0xFA19, 0x795E, 0, 1, 0xFA1A, 0x7965, 0, 1, 0xFA1B, 0x798F, 0, 1, 0xFA1C, 0x9756, 0, 1, 0xFA1D, 0x7CBE, 0, 1, 0xFA1E, 0x7FBD, 0, 1, 0xFA20, 0x8612, 0, 1, 0xFA22, 0x8AF8, 0, 1, 0xFA25, 0x9038, 0, 1, 0xFA26, 0x90FD, 0, 1, 0xFA2A, 0x98EF, 0, 1, 0xFA2B, 0x98FC, 0, 1, 0xFA2C, 0x9928, 0, 1, 0xFA2D, 0x9DB4, 0, 16, 0xFB00, 0x0066, 0x0066, 0, 16, 0xFB01, 0x0066, 0x0069, 0, 16, 0xFB02, 0x0066, 0x006C, 0, 16, 0xFB03, 0x0066, 0x0066, 0x0069, 0, 16, 0xFB04, 0x0066, 0x0066, 0x006C, 0, 16, 0xFB05, 0x017F, 0x0074, 0, 16, 0xFB06, 0x0073, 0x0074, 0, 16, 0xFB13, 0x0574, 0x0576, 0, 16, 0xFB14, 0x0574, 0x0565, 0, 16, 0xFB15, 0x0574, 0x056B, 0, 16, 0xFB16, 0x057E, 0x0576, 0, 16, 0xFB17, 0x0574, 0x056D, 0, 1, 0xFB1D, 0x05D9, 0x05B4, 0, 1, 0xFB1F, 0x05F2, 0x05B7, 0, 2, 0xFB20, 0x05E2, 0, 2, 0xFB21, 0x05D0, 0, 2, 0xFB22, 0x05D3, 0, 2, 0xFB23, 0x05D4, 0, 2, 0xFB24, 0x05DB, 0, 2, 0xFB25, 0x05DC, 0, 2, 0xFB26, 0x05DD, 0, 2, 0xFB27, 0x05E8, 0, 2, 0xFB28, 0x05EA, 0, 2, 0xFB29, 0x002B, 0, 1, 0xFB2A, 0x05E9, 0x05C1, 0, 1, 0xFB2B, 0x05E9, 0x05C2, 0, 1, 0xFB2C, 0xFB49, 0x05C1, 0, 1, 0xFB2D, 0xFB49, 0x05C2, 0, 1, 0xFB2E, 0x05D0, 0x05B7, 0, 1, 0xFB2F, 0x05D0, 0x05B8, 0, 1, 0xFB30, 0x05D0, 0x05BC, 0, 1, 0xFB31, 0x05D1, 0x05BC, 0, 1, 0xFB32, 0x05D2, 0x05BC, 0, 1, 0xFB33, 0x05D3, 0x05BC, 0, 1, 0xFB34, 0x05D4, 0x05BC, 0, 1, 0xFB35, 0x05D5, 0x05BC, 0, 1, 0xFB36, 0x05D6, 0x05BC, 0, 1, 0xFB38, 0x05D8, 0x05BC, 0, 1, 0xFB39, 0x05D9, 0x05BC, 0, 1, 0xFB3A, 0x05DA, 0x05BC, 0, 1, 0xFB3B, 0x05DB, 0x05BC, 0, 1, 0xFB3C, 0x05DC, 0x05BC, 0, 1, 0xFB3E, 0x05DE, 0x05BC, 0, 1, 0xFB40, 0x05E0, 0x05BC, 0, 1, 0xFB41, 0x05E1, 0x05BC, 0, 1, 0xFB43, 0x05E3, 0x05BC, 0, 1, 0xFB44, 0x05E4, 0x05BC, 0, 1, 0xFB46, 0x05E6, 0x05BC, 0, 1, 0xFB47, 0x05E7, 0x05BC, 0, 1, 0xFB48, 0x05E8, 0x05BC, 0, 1, 0xFB49, 0x05E9, 0x05BC, 0, 1, 0xFB4A, 0x05EA, 0x05BC, 0, 1, 0xFB4B, 0x05D5, 0x05B9, 0, 1, 0xFB4C, 0x05D1, 0x05BF, 0, 1, 0xFB4D, 0x05DB, 0x05BF, 0, 1, 0xFB4E, 0x05E4, 0x05BF, 0, 16, 0xFB4F, 0x05D0, 0x05DC, 0, 7, 0xFB50, 0x0671, 0, 6, 0xFB51, 0x0671, 0, 7, 0xFB52, 0x067B, 0, 6, 0xFB53, 0x067B, 0, 4, 0xFB54, 0x067B, 0, 5, 0xFB55, 0x067B, 0, 7, 0xFB56, 0x067E, 0, 6, 0xFB57, 0x067E, 0, 4, 0xFB58, 0x067E, 0, 5, 0xFB59, 0x067E, 0, 7, 0xFB5A, 0x0680, 0, 6, 0xFB5B, 0x0680, 0, 4, 0xFB5C, 0x0680, 0, 5, 0xFB5D, 0x0680, 0, 7, 0xFB5E, 0x067A, 0, 6, 0xFB5F, 0x067A, 0, 4, 0xFB60, 0x067A, 0, 5, 0xFB61, 0x067A, 0, 7, 0xFB62, 0x067F, 0, 6, 0xFB63, 0x067F, 0, 4, 0xFB64, 0x067F, 0, 5, 0xFB65, 0x067F, 0, 7, 0xFB66, 0x0679, 0, 6, 0xFB67, 0x0679, 0, 4, 0xFB68, 0x0679, 0, 5, 0xFB69, 0x0679, 0, 7, 0xFB6A, 0x06A4, 0, 6, 0xFB6B, 0x06A4, 0, 4, 0xFB6C, 0x06A4, 0, 5, 0xFB6D, 0x06A4, 0, 7, 0xFB6E, 0x06A6, 0, 6, 0xFB6F, 0x06A6, 0, 4, 0xFB70, 0x06A6, 0, 5, 0xFB71, 0x06A6, 0, 7, 0xFB72, 0x0684, 0, 6, 0xFB73, 0x0684, 0, 4, 0xFB74, 0x0684, 0, 5, 0xFB75, 0x0684, 0, 7, 0xFB76, 0x0683, 0, 6, 0xFB77, 0x0683, 0, 4, 0xFB78, 0x0683, 0, 5, 0xFB79, 0x0683, 0, 7, 0xFB7A, 0x0686, 0, 6, 0xFB7B, 0x0686, 0, 4, 0xFB7C, 0x0686, 0, 5, 0xFB7D, 0x0686, 0, 7, 0xFB7E, 0x0687, 0, 6, 0xFB7F, 0x0687, 0, 4, 0xFB80, 0x0687, 0, 5, 0xFB81, 0x0687, 0, 7, 0xFB82, 0x068D, 0, 6, 0xFB83, 0x068D, 0, 7, 0xFB84, 0x068C, 0, 6, 0xFB85, 0x068C, 0, 7, 0xFB86, 0x068E, 0, 6, 0xFB87, 0x068E, 0, 7, 0xFB88, 0x0688, 0, 6, 0xFB89, 0x0688, 0, 7, 0xFB8A, 0x0698, 0, 6, 0xFB8B, 0x0698, 0, 7, 0xFB8C, 0x0691, 0, 6, 0xFB8D, 0x0691, 0, 7, 0xFB8E, 0x06A9, 0, 6, 0xFB8F, 0x06A9, 0, 4, 0xFB90, 0x06A9, 0, 5, 0xFB91, 0x06A9, 0, 7, 0xFB92, 0x06AF, 0, 6, 0xFB93, 0x06AF, 0, 4, 0xFB94, 0x06AF, 0, 5, 0xFB95, 0x06AF, 0, 7, 0xFB96, 0x06B3, 0, 6, 0xFB97, 0x06B3, 0, 4, 0xFB98, 0x06B3, 0, 5, 0xFB99, 0x06B3, 0, 7, 0xFB9A, 0x06B1, 0, 6, 0xFB9B, 0x06B1, 0, 4, 0xFB9C, 0x06B1, 0, 5, 0xFB9D, 0x06B1, 0, 7, 0xFB9E, 0x06BA, 0, 6, 0xFB9F, 0x06BA, 0, 7, 0xFBA0, 0x06BB, 0, 6, 0xFBA1, 0x06BB, 0, 4, 0xFBA2, 0x06BB, 0, 5, 0xFBA3, 0x06BB, 0, 7, 0xFBA4, 0x06C0, 0, 6, 0xFBA5, 0x06C0, 0, 7, 0xFBA6, 0x06C1, 0, 6, 0xFBA7, 0x06C1, 0, 4, 0xFBA8, 0x06C1, 0, 5, 0xFBA9, 0x06C1, 0, 7, 0xFBAA, 0x06BE, 0, 6, 0xFBAB, 0x06BE, 0, 4, 0xFBAC, 0x06BE, 0, 5, 0xFBAD, 0x06BE, 0, 7, 0xFBAE, 0x06D2, 0, 6, 0xFBAF, 0x06D2, 0, 7, 0xFBB0, 0x06D3, 0, 6, 0xFBB1, 0x06D3, 0, 7, 0xFBD3, 0x06AD, 0, 6, 0xFBD4, 0x06AD, 0, 4, 0xFBD5, 0x06AD, 0, 5, 0xFBD6, 0x06AD, 0, 7, 0xFBD7, 0x06C7, 0, 6, 0xFBD8, 0x06C7, 0, 7, 0xFBD9, 0x06C6, 0, 6, 0xFBDA, 0x06C6, 0, 7, 0xFBDB, 0x06C8, 0, 6, 0xFBDC, 0x06C8, 0, 7, 0xFBDD, 0x0677, 0, 7, 0xFBDE, 0x06CB, 0, 6, 0xFBDF, 0x06CB, 0, 7, 0xFBE0, 0x06C5, 0, 6, 0xFBE1, 0x06C5, 0, 7, 0xFBE2, 0x06C9, 0, 6, 0xFBE3, 0x06C9, 0, 7, 0xFBE4, 0x06D0, 0, 6, 0xFBE5, 0x06D0, 0, 4, 0xFBE6, 0x06D0, 0, 5, 0xFBE7, 0x06D0, 0, 4, 0xFBE8, 0x0649, 0, 5, 0xFBE9, 0x0649, 0, 7, 0xFBEA, 0x0626, 0x0627, 0, 6, 0xFBEB, 0x0626, 0x0627, 0, 7, 0xFBEC, 0x0626, 0x06D5, 0, 6, 0xFBED, 0x0626, 0x06D5, 0, 7, 0xFBEE, 0x0626, 0x0648, 0, 6, 0xFBEF, 0x0626, 0x0648, 0, 7, 0xFBF0, 0x0626, 0x06C7, 0, 6, 0xFBF1, 0x0626, 0x06C7, 0, 7, 0xFBF2, 0x0626, 0x06C6, 0, 6, 0xFBF3, 0x0626, 0x06C6, 0, 7, 0xFBF4, 0x0626, 0x06C8, 0, 6, 0xFBF5, 0x0626, 0x06C8, 0, 7, 0xFBF6, 0x0626, 0x06D0, 0, 6, 0xFBF7, 0x0626, 0x06D0, 0, 4, 0xFBF8, 0x0626, 0x06D0, 0, 7, 0xFBF9, 0x0626, 0x0649, 0, 6, 0xFBFA, 0x0626, 0x0649, 0, 4, 0xFBFB, 0x0626, 0x0649, 0, 7, 0xFBFC, 0x06CC, 0, 6, 0xFBFD, 0x06CC, 0, 4, 0xFBFE, 0x06CC, 0, 5, 0xFBFF, 0x06CC, 0, 7, 0xFC00, 0x0626, 0x062C, 0, 7, 0xFC01, 0x0626, 0x062D, 0, 7, 0xFC02, 0x0626, 0x0645, 0, 7, 0xFC03, 0x0626, 0x0649, 0, 7, 0xFC04, 0x0626, 0x064A, 0, 7, 0xFC05, 0x0628, 0x062C, 0, 7, 0xFC06, 0x0628, 0x062D, 0, 7, 0xFC07, 0x0628, 0x062E, 0, 7, 0xFC08, 0x0628, 0x0645, 0, 7, 0xFC09, 0x0628, 0x0649, 0, 7, 0xFC0A, 0x0628, 0x064A, 0, 7, 0xFC0B, 0x062A, 0x062C, 0, 7, 0xFC0C, 0x062A, 0x062D, 0, 7, 0xFC0D, 0x062A, 0x062E, 0, 7, 0xFC0E, 0x062A, 0x0645, 0, 7, 0xFC0F, 0x062A, 0x0649, 0, 7, 0xFC10, 0x062A, 0x064A, 0, 7, 0xFC11, 0x062B, 0x062C, 0, 7, 0xFC12, 0x062B, 0x0645, 0, 7, 0xFC13, 0x062B, 0x0649, 0, 7, 0xFC14, 0x062B, 0x064A, 0, 7, 0xFC15, 0x062C, 0x062D, 0, 7, 0xFC16, 0x062C, 0x0645, 0, 7, 0xFC17, 0x062D, 0x062C, 0, 7, 0xFC18, 0x062D, 0x0645, 0, 7, 0xFC19, 0x062E, 0x062C, 0, 7, 0xFC1A, 0x062E, 0x062D, 0, 7, 0xFC1B, 0x062E, 0x0645, 0, 7, 0xFC1C, 0x0633, 0x062C, 0, 7, 0xFC1D, 0x0633, 0x062D, 0, 7, 0xFC1E, 0x0633, 0x062E, 0, 7, 0xFC1F, 0x0633, 0x0645, 0, 7, 0xFC20, 0x0635, 0x062D, 0, 7, 0xFC21, 0x0635, 0x0645, 0, 7, 0xFC22, 0x0636, 0x062C, 0, 7, 0xFC23, 0x0636, 0x062D, 0, 7, 0xFC24, 0x0636, 0x062E, 0, 7, 0xFC25, 0x0636, 0x0645, 0, 7, 0xFC26, 0x0637, 0x062D, 0, 7, 0xFC27, 0x0637, 0x0645, 0, 7, 0xFC28, 0x0638, 0x0645, 0, 7, 0xFC29, 0x0639, 0x062C, 0, 7, 0xFC2A, 0x0639, 0x0645, 0, 7, 0xFC2B, 0x063A, 0x062C, 0, 7, 0xFC2C, 0x063A, 0x0645, 0, 7, 0xFC2D, 0x0641, 0x062C, 0, 7, 0xFC2E, 0x0641, 0x062D, 0, 7, 0xFC2F, 0x0641, 0x062E, 0, 7, 0xFC30, 0x0641, 0x0645, 0, 7, 0xFC31, 0x0641, 0x0649, 0, 7, 0xFC32, 0x0641, 0x064A, 0, 7, 0xFC33, 0x0642, 0x062D, 0, 7, 0xFC34, 0x0642, 0x0645, 0, 7, 0xFC35, 0x0642, 0x0649, 0, 7, 0xFC36, 0x0642, 0x064A, 0, 7, 0xFC37, 0x0643, 0x0627, 0, 7, 0xFC38, 0x0643, 0x062C, 0, 7, 0xFC39, 0x0643, 0x062D, 0, 7, 0xFC3A, 0x0643, 0x062E, 0, 7, 0xFC3B, 0x0643, 0x0644, 0, 7, 0xFC3C, 0x0643, 0x0645, 0, 7, 0xFC3D, 0x0643, 0x0649, 0, 7, 0xFC3E, 0x0643, 0x064A, 0, 7, 0xFC3F, 0x0644, 0x062C, 0, 7, 0xFC40, 0x0644, 0x062D, 0, 7, 0xFC41, 0x0644, 0x062E, 0, 7, 0xFC42, 0x0644, 0x0645, 0, 7, 0xFC43, 0x0644, 0x0649, 0, 7, 0xFC44, 0x0644, 0x064A, 0, 7, 0xFC45, 0x0645, 0x062C, 0, 7, 0xFC46, 0x0645, 0x062D, 0, 7, 0xFC47, 0x0645, 0x062E, 0, 7, 0xFC48, 0x0645, 0x0645, 0, 7, 0xFC49, 0x0645, 0x0649, 0, 7, 0xFC4A, 0x0645, 0x064A, 0, 7, 0xFC4B, 0x0646, 0x062C, 0, 7, 0xFC4C, 0x0646, 0x062D, 0, 7, 0xFC4D, 0x0646, 0x062E, 0, 7, 0xFC4E, 0x0646, 0x0645, 0, 7, 0xFC4F, 0x0646, 0x0649, 0, 7, 0xFC50, 0x0646, 0x064A, 0, 7, 0xFC51, 0x0647, 0x062C, 0, 7, 0xFC52, 0x0647, 0x0645, 0, 7, 0xFC53, 0x0647, 0x0649, 0, 7, 0xFC54, 0x0647, 0x064A, 0, 7, 0xFC55, 0x064A, 0x062C, 0, 7, 0xFC56, 0x064A, 0x062D, 0, 7, 0xFC57, 0x064A, 0x062E, 0, 7, 0xFC58, 0x064A, 0x0645, 0, 7, 0xFC59, 0x064A, 0x0649, 0, 7, 0xFC5A, 0x064A, 0x064A, 0, 7, 0xFC5B, 0x0630, 0x0670, 0, 7, 0xFC5C, 0x0631, 0x0670, 0, 7, 0xFC5D, 0x0649, 0x0670, 0, 7, 0xFC5E, 0x0020, 0x064C, 0x0651, 0, 7, 0xFC5F, 0x0020, 0x064D, 0x0651, 0, 7, 0xFC60, 0x0020, 0x064E, 0x0651, 0, 7, 0xFC61, 0x0020, 0x064F, 0x0651, 0, 7, 0xFC62, 0x0020, 0x0650, 0x0651, 0, 7, 0xFC63, 0x0020, 0x0651, 0x0670, 0, 6, 0xFC64, 0x0626, 0x0631, 0, 6, 0xFC65, 0x0626, 0x0632, 0, 6, 0xFC66, 0x0626, 0x0645, 0, 6, 0xFC67, 0x0626, 0x0646, 0, 6, 0xFC68, 0x0626, 0x0649, 0, 6, 0xFC69, 0x0626, 0x064A, 0, 6, 0xFC6A, 0x0628, 0x0631, 0, 6, 0xFC6B, 0x0628, 0x0632, 0, 6, 0xFC6C, 0x0628, 0x0645, 0, 6, 0xFC6D, 0x0628, 0x0646, 0, 6, 0xFC6E, 0x0628, 0x0649, 0, 6, 0xFC6F, 0x0628, 0x064A, 0, 6, 0xFC70, 0x062A, 0x0631, 0, 6, 0xFC71, 0x062A, 0x0632, 0, 6, 0xFC72, 0x062A, 0x0645, 0, 6, 0xFC73, 0x062A, 0x0646, 0, 6, 0xFC74, 0x062A, 0x0649, 0, 6, 0xFC75, 0x062A, 0x064A, 0, 6, 0xFC76, 0x062B, 0x0631, 0, 6, 0xFC77, 0x062B, 0x0632, 0, 6, 0xFC78, 0x062B, 0x0645, 0, 6, 0xFC79, 0x062B, 0x0646, 0, 6, 0xFC7A, 0x062B, 0x0649, 0, 6, 0xFC7B, 0x062B, 0x064A, 0, 6, 0xFC7C, 0x0641, 0x0649, 0, 6, 0xFC7D, 0x0641, 0x064A, 0, 6, 0xFC7E, 0x0642, 0x0649, 0, 6, 0xFC7F, 0x0642, 0x064A, 0, 6, 0xFC80, 0x0643, 0x0627, 0, 6, 0xFC81, 0x0643, 0x0644, 0, 6, 0xFC82, 0x0643, 0x0645, 0, 6, 0xFC83, 0x0643, 0x0649, 0, 6, 0xFC84, 0x0643, 0x064A, 0, 6, 0xFC85, 0x0644, 0x0645, 0, 6, 0xFC86, 0x0644, 0x0649, 0, 6, 0xFC87, 0x0644, 0x064A, 0, 6, 0xFC88, 0x0645, 0x0627, 0, 6, 0xFC89, 0x0645, 0x0645, 0, 6, 0xFC8A, 0x0646, 0x0631, 0, 6, 0xFC8B, 0x0646, 0x0632, 0, 6, 0xFC8C, 0x0646, 0x0645, 0, 6, 0xFC8D, 0x0646, 0x0646, 0, 6, 0xFC8E, 0x0646, 0x0649, 0, 6, 0xFC8F, 0x0646, 0x064A, 0, 6, 0xFC90, 0x0649, 0x0670, 0, 6, 0xFC91, 0x064A, 0x0631, 0, 6, 0xFC92, 0x064A, 0x0632, 0, 6, 0xFC93, 0x064A, 0x0645, 0, 6, 0xFC94, 0x064A, 0x0646, 0, 6, 0xFC95, 0x064A, 0x0649, 0, 6, 0xFC96, 0x064A, 0x064A, 0, 4, 0xFC97, 0x0626, 0x062C, 0, 4, 0xFC98, 0x0626, 0x062D, 0, 4, 0xFC99, 0x0626, 0x062E, 0, 4, 0xFC9A, 0x0626, 0x0645, 0, 4, 0xFC9B, 0x0626, 0x0647, 0, 4, 0xFC9C, 0x0628, 0x062C, 0, 4, 0xFC9D, 0x0628, 0x062D, 0, 4, 0xFC9E, 0x0628, 0x062E, 0, 4, 0xFC9F, 0x0628, 0x0645, 0, 4, 0xFCA0, 0x0628, 0x0647, 0, 4, 0xFCA1, 0x062A, 0x062C, 0, 4, 0xFCA2, 0x062A, 0x062D, 0, 4, 0xFCA3, 0x062A, 0x062E, 0, 4, 0xFCA4, 0x062A, 0x0645, 0, 4, 0xFCA5, 0x062A, 0x0647, 0, 4, 0xFCA6, 0x062B, 0x0645, 0, 4, 0xFCA7, 0x062C, 0x062D, 0, 4, 0xFCA8, 0x062C, 0x0645, 0, 4, 0xFCA9, 0x062D, 0x062C, 0, 4, 0xFCAA, 0x062D, 0x0645, 0, 4, 0xFCAB, 0x062E, 0x062C, 0, 4, 0xFCAC, 0x062E, 0x0645, 0, 4, 0xFCAD, 0x0633, 0x062C, 0, 4, 0xFCAE, 0x0633, 0x062D, 0, 4, 0xFCAF, 0x0633, 0x062E, 0, 4, 0xFCB0, 0x0633, 0x0645, 0, 4, 0xFCB1, 0x0635, 0x062D, 0, 4, 0xFCB2, 0x0635, 0x062E, 0, 4, 0xFCB3, 0x0635, 0x0645, 0, 4, 0xFCB4, 0x0636, 0x062C, 0, 4, 0xFCB5, 0x0636, 0x062D, 0, 4, 0xFCB6, 0x0636, 0x062E, 0, 4, 0xFCB7, 0x0636, 0x0645, 0, 4, 0xFCB8, 0x0637, 0x062D, 0, 4, 0xFCB9, 0x0638, 0x0645, 0, 4, 0xFCBA, 0x0639, 0x062C, 0, 4, 0xFCBB, 0x0639, 0x0645, 0, 4, 0xFCBC, 0x063A, 0x062C, 0, 4, 0xFCBD, 0x063A, 0x0645, 0, 4, 0xFCBE, 0x0641, 0x062C, 0, 4, 0xFCBF, 0x0641, 0x062D, 0, 4, 0xFCC0, 0x0641, 0x062E, 0, 4, 0xFCC1, 0x0641, 0x0645, 0, 4, 0xFCC2, 0x0642, 0x062D, 0, 4, 0xFCC3, 0x0642, 0x0645, 0, 4, 0xFCC4, 0x0643, 0x062C, 0, 4, 0xFCC5, 0x0643, 0x062D, 0, 4, 0xFCC6, 0x0643, 0x062E, 0, 4, 0xFCC7, 0x0643, 0x0644, 0, 4, 0xFCC8, 0x0643, 0x0645, 0, 4, 0xFCC9, 0x0644, 0x062C, 0, 4, 0xFCCA, 0x0644, 0x062D, 0, 4, 0xFCCB, 0x0644, 0x062E, 0, 4, 0xFCCC, 0x0644, 0x0645, 0, 4, 0xFCCD, 0x0644, 0x0647, 0, 4, 0xFCCE, 0x0645, 0x062C, 0, 4, 0xFCCF, 0x0645, 0x062D, 0, 4, 0xFCD0, 0x0645, 0x062E, 0, 4, 0xFCD1, 0x0645, 0x0645, 0, 4, 0xFCD2, 0x0646, 0x062C, 0, 4, 0xFCD3, 0x0646, 0x062D, 0, 4, 0xFCD4, 0x0646, 0x062E, 0, 4, 0xFCD5, 0x0646, 0x0645, 0, 4, 0xFCD6, 0x0646, 0x0647, 0, 4, 0xFCD7, 0x0647, 0x062C, 0, 4, 0xFCD8, 0x0647, 0x0645, 0, 4, 0xFCD9, 0x0647, 0x0670, 0, 4, 0xFCDA, 0x064A, 0x062C, 0, 4, 0xFCDB, 0x064A, 0x062D, 0, 4, 0xFCDC, 0x064A, 0x062E, 0, 4, 0xFCDD, 0x064A, 0x0645, 0, 4, 0xFCDE, 0x064A, 0x0647, 0, 5, 0xFCDF, 0x0626, 0x0645, 0, 5, 0xFCE0, 0x0626, 0x0647, 0, 5, 0xFCE1, 0x0628, 0x0645, 0, 5, 0xFCE2, 0x0628, 0x0647, 0, 5, 0xFCE3, 0x062A, 0x0645, 0, 5, 0xFCE4, 0x062A, 0x0647, 0, 5, 0xFCE5, 0x062B, 0x0645, 0, 5, 0xFCE6, 0x062B, 0x0647, 0, 5, 0xFCE7, 0x0633, 0x0645, 0, 5, 0xFCE8, 0x0633, 0x0647, 0, 5, 0xFCE9, 0x0634, 0x0645, 0, 5, 0xFCEA, 0x0634, 0x0647, 0, 5, 0xFCEB, 0x0643, 0x0644, 0, 5, 0xFCEC, 0x0643, 0x0645, 0, 5, 0xFCED, 0x0644, 0x0645, 0, 5, 0xFCEE, 0x0646, 0x0645, 0, 5, 0xFCEF, 0x0646, 0x0647, 0, 5, 0xFCF0, 0x064A, 0x0645, 0, 5, 0xFCF1, 0x064A, 0x0647, 0, 5, 0xFCF2, 0x0640, 0x064E, 0x0651, 0, 5, 0xFCF3, 0x0640, 0x064F, 0x0651, 0, 5, 0xFCF4, 0x0640, 0x0650, 0x0651, 0, 7, 0xFCF5, 0x0637, 0x0649, 0, 7, 0xFCF6, 0x0637, 0x064A, 0, 7, 0xFCF7, 0x0639, 0x0649, 0, 7, 0xFCF8, 0x0639, 0x064A, 0, 7, 0xFCF9, 0x063A, 0x0649, 0, 7, 0xFCFA, 0x063A, 0x064A, 0, 7, 0xFCFB, 0x0633, 0x0649, 0, 7, 0xFCFC, 0x0633, 0x064A, 0, 7, 0xFCFD, 0x0634, 0x0649, 0, 7, 0xFCFE, 0x0634, 0x064A, 0, 7, 0xFCFF, 0x062D, 0x0649, 0, 7, 0xFD00, 0x062D, 0x064A, 0, 7, 0xFD01, 0x062C, 0x0649, 0, 7, 0xFD02, 0x062C, 0x064A, 0, 7, 0xFD03, 0x062E, 0x0649, 0, 7, 0xFD04, 0x062E, 0x064A, 0, 7, 0xFD05, 0x0635, 0x0649, 0, 7, 0xFD06, 0x0635, 0x064A, 0, 7, 0xFD07, 0x0636, 0x0649, 0, 7, 0xFD08, 0x0636, 0x064A, 0, 7, 0xFD09, 0x0634, 0x062C, 0, 7, 0xFD0A, 0x0634, 0x062D, 0, 7, 0xFD0B, 0x0634, 0x062E, 0, 7, 0xFD0C, 0x0634, 0x0645, 0, 7, 0xFD0D, 0x0634, 0x0631, 0, 7, 0xFD0E, 0x0633, 0x0631, 0, 7, 0xFD0F, 0x0635, 0x0631, 0, 7, 0xFD10, 0x0636, 0x0631, 0, 6, 0xFD11, 0x0637, 0x0649, 0, 6, 0xFD12, 0x0637, 0x064A, 0, 6, 0xFD13, 0x0639, 0x0649, 0, 6, 0xFD14, 0x0639, 0x064A, 0, 6, 0xFD15, 0x063A, 0x0649, 0, 6, 0xFD16, 0x063A, 0x064A, 0, 6, 0xFD17, 0x0633, 0x0649, 0, 6, 0xFD18, 0x0633, 0x064A, 0, 6, 0xFD19, 0x0634, 0x0649, 0, 6, 0xFD1A, 0x0634, 0x064A, 0, 6, 0xFD1B, 0x062D, 0x0649, 0, 6, 0xFD1C, 0x062D, 0x064A, 0, 6, 0xFD1D, 0x062C, 0x0649, 0, 6, 0xFD1E, 0x062C, 0x064A, 0, 6, 0xFD1F, 0x062E, 0x0649, 0, 6, 0xFD20, 0x062E, 0x064A, 0, 6, 0xFD21, 0x0635, 0x0649, 0, 6, 0xFD22, 0x0635, 0x064A, 0, 6, 0xFD23, 0x0636, 0x0649, 0, 6, 0xFD24, 0x0636, 0x064A, 0, 6, 0xFD25, 0x0634, 0x062C, 0, 6, 0xFD26, 0x0634, 0x062D, 0, 6, 0xFD27, 0x0634, 0x062E, 0, 6, 0xFD28, 0x0634, 0x0645, 0, 6, 0xFD29, 0x0634, 0x0631, 0, 6, 0xFD2A, 0x0633, 0x0631, 0, 6, 0xFD2B, 0x0635, 0x0631, 0, 6, 0xFD2C, 0x0636, 0x0631, 0, 4, 0xFD2D, 0x0634, 0x062C, 0, 4, 0xFD2E, 0x0634, 0x062D, 0, 4, 0xFD2F, 0x0634, 0x062E, 0, 4, 0xFD30, 0x0634, 0x0645, 0, 4, 0xFD31, 0x0633, 0x0647, 0, 4, 0xFD32, 0x0634, 0x0647, 0, 4, 0xFD33, 0x0637, 0x0645, 0, 5, 0xFD34, 0x0633, 0x062C, 0, 5, 0xFD35, 0x0633, 0x062D, 0, 5, 0xFD36, 0x0633, 0x062E, 0, 5, 0xFD37, 0x0634, 0x062C, 0, 5, 0xFD38, 0x0634, 0x062D, 0, 5, 0xFD39, 0x0634, 0x062E, 0, 5, 0xFD3A, 0x0637, 0x0645, 0, 5, 0xFD3B, 0x0638, 0x0645, 0, 6, 0xFD3C, 0x0627, 0x064B, 0, 7, 0xFD3D, 0x0627, 0x064B, 0, 4, 0xFD50, 0x062A, 0x062C, 0x0645, 0, 6, 0xFD51, 0x062A, 0x062D, 0x062C, 0, 4, 0xFD52, 0x062A, 0x062D, 0x062C, 0, 4, 0xFD53, 0x062A, 0x062D, 0x0645, 0, 4, 0xFD54, 0x062A, 0x062E, 0x0645, 0, 4, 0xFD55, 0x062A, 0x0645, 0x062C, 0, 4, 0xFD56, 0x062A, 0x0645, 0x062D, 0, 4, 0xFD57, 0x062A, 0x0645, 0x062E, 0, 6, 0xFD58, 0x062C, 0x0645, 0x062D, 0, 4, 0xFD59, 0x062C, 0x0645, 0x062D, 0, 6, 0xFD5A, 0x062D, 0x0645, 0x064A, 0, 6, 0xFD5B, 0x062D, 0x0645, 0x0649, 0, 4, 0xFD5C, 0x0633, 0x062D, 0x062C, 0, 4, 0xFD5D, 0x0633, 0x062C, 0x062D, 0, 6, 0xFD5E, 0x0633, 0x062C, 0x0649, 0, 6, 0xFD5F, 0x0633, 0x0645, 0x062D, 0, 4, 0xFD60, 0x0633, 0x0645, 0x062D, 0, 4, 0xFD61, 0x0633, 0x0645, 0x062C, 0, 6, 0xFD62, 0x0633, 0x0645, 0x0645, 0, 4, 0xFD63, 0x0633, 0x0645, 0x0645, 0, 6, 0xFD64, 0x0635, 0x062D, 0x062D, 0, 4, 0xFD65, 0x0635, 0x062D, 0x062D, 0, 6, 0xFD66, 0x0635, 0x0645, 0x0645, 0, 6, 0xFD67, 0x0634, 0x062D, 0x0645, 0, 4, 0xFD68, 0x0634, 0x062D, 0x0645, 0, 6, 0xFD69, 0x0634, 0x062C, 0x064A, 0, 6, 0xFD6A, 0x0634, 0x0645, 0x062E, 0, 4, 0xFD6B, 0x0634, 0x0645, 0x062E, 0, 6, 0xFD6C, 0x0634, 0x0645, 0x0645, 0, 4, 0xFD6D, 0x0634, 0x0645, 0x0645, 0, 6, 0xFD6E, 0x0636, 0x062D, 0x0649, 0, 6, 0xFD6F, 0x0636, 0x062E, 0x0645, 0, 4, 0xFD70, 0x0636, 0x062E, 0x0645, 0, 6, 0xFD71, 0x0637, 0x0645, 0x062D, 0, 4, 0xFD72, 0x0637, 0x0645, 0x062D, 0, 4, 0xFD73, 0x0637, 0x0645, 0x0645, 0, 6, 0xFD74, 0x0637, 0x0645, 0x064A, 0, 6, 0xFD75, 0x0639, 0x062C, 0x0645, 0, 6, 0xFD76, 0x0639, 0x0645, 0x0645, 0, 4, 0xFD77, 0x0639, 0x0645, 0x0645, 0, 6, 0xFD78, 0x0639, 0x0645, 0x0649, 0, 6, 0xFD79, 0x063A, 0x0645, 0x0645, 0, 6, 0xFD7A, 0x063A, 0x0645, 0x064A, 0, 6, 0xFD7B, 0x063A, 0x0645, 0x0649, 0, 6, 0xFD7C, 0x0641, 0x062E, 0x0645, 0, 4, 0xFD7D, 0x0641, 0x062E, 0x0645, 0, 6, 0xFD7E, 0x0642, 0x0645, 0x062D, 0, 6, 0xFD7F, 0x0642, 0x0645, 0x0645, 0, 6, 0xFD80, 0x0644, 0x062D, 0x0645, 0, 6, 0xFD81, 0x0644, 0x062D, 0x064A, 0, 6, 0xFD82, 0x0644, 0x062D, 0x0649, 0, 4, 0xFD83, 0x0644, 0x062C, 0x062C, 0, 6, 0xFD84, 0x0644, 0x062C, 0x062C, 0, 6, 0xFD85, 0x0644, 0x062E, 0x0645, 0, 4, 0xFD86, 0x0644, 0x062E, 0x0645, 0, 6, 0xFD87, 0x0644, 0x0645, 0x062D, 0, 4, 0xFD88, 0x0644, 0x0645, 0x062D, 0, 4, 0xFD89, 0x0645, 0x062D, 0x062C, 0, 4, 0xFD8A, 0x0645, 0x062D, 0x0645, 0, 6, 0xFD8B, 0x0645, 0x062D, 0x064A, 0, 4, 0xFD8C, 0x0645, 0x062C, 0x062D, 0, 4, 0xFD8D, 0x0645, 0x062C, 0x0645, 0, 4, 0xFD8E, 0x0645, 0x062E, 0x062C, 0, 4, 0xFD8F, 0x0645, 0x062E, 0x0645, 0, 4, 0xFD92, 0x0645, 0x062C, 0x062E, 0, 4, 0xFD93, 0x0647, 0x0645, 0x062C, 0, 4, 0xFD94, 0x0647, 0x0645, 0x0645, 0, 4, 0xFD95, 0x0646, 0x062D, 0x0645, 0, 6, 0xFD96, 0x0646, 0x062D, 0x0649, 0, 6, 0xFD97, 0x0646, 0x062C, 0x0645, 0, 4, 0xFD98, 0x0646, 0x062C, 0x0645, 0, 6, 0xFD99, 0x0646, 0x062C, 0x0649, 0, 6, 0xFD9A, 0x0646, 0x0645, 0x064A, 0, 6, 0xFD9B, 0x0646, 0x0645, 0x0649, 0, 6, 0xFD9C, 0x064A, 0x0645, 0x0645, 0, 4, 0xFD9D, 0x064A, 0x0645, 0x0645, 0, 6, 0xFD9E, 0x0628, 0x062E, 0x064A, 0, 6, 0xFD9F, 0x062A, 0x062C, 0x064A, 0, 6, 0xFDA0, 0x062A, 0x062C, 0x0649, 0, 6, 0xFDA1, 0x062A, 0x062E, 0x064A, 0, 6, 0xFDA2, 0x062A, 0x062E, 0x0649, 0, 6, 0xFDA3, 0x062A, 0x0645, 0x064A, 0, 6, 0xFDA4, 0x062A, 0x0645, 0x0649, 0, 6, 0xFDA5, 0x062C, 0x0645, 0x064A, 0, 6, 0xFDA6, 0x062C, 0x062D, 0x0649, 0, 6, 0xFDA7, 0x062C, 0x0645, 0x0649, 0, 6, 0xFDA8, 0x0633, 0x062E, 0x0649, 0, 6, 0xFDA9, 0x0635, 0x062D, 0x064A, 0, 6, 0xFDAA, 0x0634, 0x062D, 0x064A, 0, 6, 0xFDAB, 0x0636, 0x062D, 0x064A, 0, 6, 0xFDAC, 0x0644, 0x062C, 0x064A, 0, 6, 0xFDAD, 0x0644, 0x0645, 0x064A, 0, 6, 0xFDAE, 0x064A, 0x062D, 0x064A, 0, 6, 0xFDAF, 0x064A, 0x062C, 0x064A, 0, 6, 0xFDB0, 0x064A, 0x0645, 0x064A, 0, 6, 0xFDB1, 0x0645, 0x0645, 0x064A, 0, 6, 0xFDB2, 0x0642, 0x0645, 0x064A, 0, 6, 0xFDB3, 0x0646, 0x062D, 0x064A, 0, 4, 0xFDB4, 0x0642, 0x0645, 0x062D, 0, 4, 0xFDB5, 0x0644, 0x062D, 0x0645, 0, 6, 0xFDB6, 0x0639, 0x0645, 0x064A, 0, 6, 0xFDB7, 0x0643, 0x0645, 0x064A, 0, 4, 0xFDB8, 0x0646, 0x062C, 0x062D, 0, 6, 0xFDB9, 0x0645, 0x062E, 0x064A, 0, 4, 0xFDBA, 0x0644, 0x062C, 0x0645, 0, 6, 0xFDBB, 0x0643, 0x0645, 0x0645, 0, 6, 0xFDBC, 0x0644, 0x062C, 0x0645, 0, 6, 0xFDBD, 0x0646, 0x062C, 0x062D, 0, 6, 0xFDBE, 0x062C, 0x062D, 0x064A, 0, 6, 0xFDBF, 0x062D, 0x062C, 0x064A, 0, 6, 0xFDC0, 0x0645, 0x062C, 0x064A, 0, 6, 0xFDC1, 0x0641, 0x0645, 0x064A, 0, 6, 0xFDC2, 0x0628, 0x062D, 0x064A, 0, 4, 0xFDC3, 0x0643, 0x0645, 0x0645, 0, 4, 0xFDC4, 0x0639, 0x062C, 0x0645, 0, 4, 0xFDC5, 0x0635, 0x0645, 0x0645, 0, 6, 0xFDC6, 0x0633, 0x062E, 0x064A, 0, 6, 0xFDC7, 0x0646, 0x062C, 0x064A, 0, 7, 0xFDF0, 0x0635, 0x0644, 0x06D2, 0, 7, 0xFDF1, 0x0642, 0x0644, 0x06D2, 0, 7, 0xFDF2, 0x0627, 0x0644, 0x0644, 0x0647, 0, 7, 0xFDF3, 0x0627, 0x0643, 0x0628, 0x0631, 0, 7, 0xFDF4, 0x0645, 0x062D, 0x0645, 0x062F, 0, 7, 0xFDF5, 0x0635, 0x0644, 0x0639, 0x0645, 0, 7, 0xFDF6, 0x0631, 0x0633, 0x0648, 0x0644, 0, 7, 0xFDF7, 0x0639, 0x0644, 0x064A, 0x0647, 0, 7, 0xFDF8, 0x0648, 0x0633, 0x0644, 0x0645, 0, 7, 0xFDF9, 0x0635, 0x0644, 0x0649, 0, 7, 0xFDFA, 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645, 0, 7, 0xFDFB, 0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647, 0, 11, 0xFE30, 0x2025, 0, 11, 0xFE31, 0x2014, 0, 11, 0xFE32, 0x2013, 0, 11, 0xFE33, 0x005F, 0, 11, 0xFE34, 0x005F, 0, 11, 0xFE35, 0x0028, 0, 11, 0xFE36, 0x0029, 0, 11, 0xFE37, 0x007B, 0, 11, 0xFE38, 0x007D, 0, 11, 0xFE39, 0x3014, 0, 11, 0xFE3A, 0x3015, 0, 11, 0xFE3B, 0x3010, 0, 11, 0xFE3C, 0x3011, 0, 11, 0xFE3D, 0x300A, 0, 11, 0xFE3E, 0x300B, 0, 11, 0xFE3F, 0x3008, 0, 11, 0xFE40, 0x3009, 0, 11, 0xFE41, 0x300C, 0, 11, 0xFE42, 0x300D, 0, 11, 0xFE43, 0x300E, 0, 11, 0xFE44, 0x300F, 0, 16, 0xFE49, 0x203E, 0, 16, 0xFE4A, 0x203E, 0, 16, 0xFE4B, 0x203E, 0, 16, 0xFE4C, 0x203E, 0, 16, 0xFE4D, 0x005F, 0, 16, 0xFE4E, 0x005F, 0, 16, 0xFE4F, 0x005F, 0, 14, 0xFE50, 0x002C, 0, 14, 0xFE51, 0x3001, 0, 14, 0xFE52, 0x002E, 0, 14, 0xFE54, 0x003B, 0, 14, 0xFE55, 0x003A, 0, 14, 0xFE56, 0x003F, 0, 14, 0xFE57, 0x0021, 0, 14, 0xFE58, 0x2014, 0, 14, 0xFE59, 0x0028, 0, 14, 0xFE5A, 0x0029, 0, 14, 0xFE5B, 0x007B, 0, 14, 0xFE5C, 0x007D, 0, 14, 0xFE5D, 0x3014, 0, 14, 0xFE5E, 0x3015, 0, 14, 0xFE5F, 0x0023, 0, 14, 0xFE60, 0x0026, 0, 14, 0xFE61, 0x002A, 0, 14, 0xFE62, 0x002B, 0, 14, 0xFE63, 0x002D, 0, 14, 0xFE64, 0x003C, 0, 14, 0xFE65, 0x003E, 0, 14, 0xFE66, 0x003D, 0, 14, 0xFE68, 0x005C, 0, 14, 0xFE69, 0x0024, 0, 14, 0xFE6A, 0x0025, 0, 14, 0xFE6B, 0x0040, 0, 7, 0xFE70, 0x0020, 0x064B, 0, 5, 0xFE71, 0x0640, 0x064B, 0, 7, 0xFE72, 0x0020, 0x064C, 0, 7, 0xFE74, 0x0020, 0x064D, 0, 7, 0xFE76, 0x0020, 0x064E, 0, 5, 0xFE77, 0x0640, 0x064E, 0, 7, 0xFE78, 0x0020, 0x064F, 0, 5, 0xFE79, 0x0640, 0x064F, 0, 7, 0xFE7A, 0x0020, 0x0650, 0, 5, 0xFE7B, 0x0640, 0x0650, 0, 7, 0xFE7C, 0x0020, 0x0651, 0, 5, 0xFE7D, 0x0640, 0x0651, 0, 7, 0xFE7E, 0x0020, 0x0652, 0, 5, 0xFE7F, 0x0640, 0x0652, 0, 7, 0xFE80, 0x0621, 0, 7, 0xFE81, 0x0622, 0, 6, 0xFE82, 0x0622, 0, 7, 0xFE83, 0x0623, 0, 6, 0xFE84, 0x0623, 0, 7, 0xFE85, 0x0624, 0, 6, 0xFE86, 0x0624, 0, 7, 0xFE87, 0x0625, 0, 6, 0xFE88, 0x0625, 0, 7, 0xFE89, 0x0626, 0, 6, 0xFE8A, 0x0626, 0, 4, 0xFE8B, 0x0626, 0, 5, 0xFE8C, 0x0626, 0, 7, 0xFE8D, 0x0627, 0, 6, 0xFE8E, 0x0627, 0, 7, 0xFE8F, 0x0628, 0, 6, 0xFE90, 0x0628, 0, 4, 0xFE91, 0x0628, 0, 5, 0xFE92, 0x0628, 0, 7, 0xFE93, 0x0629, 0, 6, 0xFE94, 0x0629, 0, 7, 0xFE95, 0x062A, 0, 6, 0xFE96, 0x062A, 0, 4, 0xFE97, 0x062A, 0, 5, 0xFE98, 0x062A, 0, 7, 0xFE99, 0x062B, 0, 6, 0xFE9A, 0x062B, 0, 4, 0xFE9B, 0x062B, 0, 5, 0xFE9C, 0x062B, 0, 7, 0xFE9D, 0x062C, 0, 6, 0xFE9E, 0x062C, 0, 4, 0xFE9F, 0x062C, 0, 5, 0xFEA0, 0x062C, 0, 7, 0xFEA1, 0x062D, 0, 6, 0xFEA2, 0x062D, 0, 4, 0xFEA3, 0x062D, 0, 5, 0xFEA4, 0x062D, 0, 7, 0xFEA5, 0x062E, 0, 6, 0xFEA6, 0x062E, 0, 4, 0xFEA7, 0x062E, 0, 5, 0xFEA8, 0x062E, 0, 7, 0xFEA9, 0x062F, 0, 6, 0xFEAA, 0x062F, 0, 7, 0xFEAB, 0x0630, 0, 6, 0xFEAC, 0x0630, 0, 7, 0xFEAD, 0x0631, 0, 6, 0xFEAE, 0x0631, 0, 7, 0xFEAF, 0x0632, 0, 6, 0xFEB0, 0x0632, 0, 7, 0xFEB1, 0x0633, 0, 6, 0xFEB2, 0x0633, 0, 4, 0xFEB3, 0x0633, 0, 5, 0xFEB4, 0x0633, 0, 7, 0xFEB5, 0x0634, 0, 6, 0xFEB6, 0x0634, 0, 4, 0xFEB7, 0x0634, 0, 5, 0xFEB8, 0x0634, 0, 7, 0xFEB9, 0x0635, 0, 6, 0xFEBA, 0x0635, 0, 4, 0xFEBB, 0x0635, 0, 5, 0xFEBC, 0x0635, 0, 7, 0xFEBD, 0x0636, 0, 6, 0xFEBE, 0x0636, 0, 4, 0xFEBF, 0x0636, 0, 5, 0xFEC0, 0x0636, 0, 7, 0xFEC1, 0x0637, 0, 6, 0xFEC2, 0x0637, 0, 4, 0xFEC3, 0x0637, 0, 5, 0xFEC4, 0x0637, 0, 7, 0xFEC5, 0x0638, 0, 6, 0xFEC6, 0x0638, 0, 4, 0xFEC7, 0x0638, 0, 5, 0xFEC8, 0x0638, 0, 7, 0xFEC9, 0x0639, 0, 6, 0xFECA, 0x0639, 0, 4, 0xFECB, 0x0639, 0, 5, 0xFECC, 0x0639, 0, 7, 0xFECD, 0x063A, 0, 6, 0xFECE, 0x063A, 0, 4, 0xFECF, 0x063A, 0, 5, 0xFED0, 0x063A, 0, 7, 0xFED1, 0x0641, 0, 6, 0xFED2, 0x0641, 0, 4, 0xFED3, 0x0641, 0, 5, 0xFED4, 0x0641, 0, 7, 0xFED5, 0x0642, 0, 6, 0xFED6, 0x0642, 0, 4, 0xFED7, 0x0642, 0, 5, 0xFED8, 0x0642, 0, 7, 0xFED9, 0x0643, 0, 6, 0xFEDA, 0x0643, 0, 4, 0xFEDB, 0x0643, 0, 5, 0xFEDC, 0x0643, 0, 7, 0xFEDD, 0x0644, 0, 6, 0xFEDE, 0x0644, 0, 4, 0xFEDF, 0x0644, 0, 5, 0xFEE0, 0x0644, 0, 7, 0xFEE1, 0x0645, 0, 6, 0xFEE2, 0x0645, 0, 4, 0xFEE3, 0x0645, 0, 5, 0xFEE4, 0x0645, 0, 7, 0xFEE5, 0x0646, 0, 6, 0xFEE6, 0x0646, 0, 4, 0xFEE7, 0x0646, 0, 5, 0xFEE8, 0x0646, 0, 7, 0xFEE9, 0x0647, 0, 6, 0xFEEA, 0x0647, 0, 4, 0xFEEB, 0x0647, 0, 5, 0xFEEC, 0x0647, 0, 7, 0xFEED, 0x0648, 0, 6, 0xFEEE, 0x0648, 0, 7, 0xFEEF, 0x0649, 0, 6, 0xFEF0, 0x0649, 0, 7, 0xFEF1, 0x064A, 0, 6, 0xFEF2, 0x064A, 0, 4, 0xFEF3, 0x064A, 0, 5, 0xFEF4, 0x064A, 0, 7, 0xFEF5, 0x0644, 0x0622, 0, 6, 0xFEF6, 0x0644, 0x0622, 0, 7, 0xFEF7, 0x0644, 0x0623, 0, 6, 0xFEF8, 0x0644, 0x0623, 0, 7, 0xFEF9, 0x0644, 0x0625, 0, 6, 0xFEFA, 0x0644, 0x0625, 0, 7, 0xFEFB, 0x0644, 0x0627, 0, 6, 0xFEFC, 0x0644, 0x0627, 0, 12, 0xFF01, 0x0021, 0, 12, 0xFF02, 0x0022, 0, 12, 0xFF03, 0x0023, 0, 12, 0xFF04, 0x0024, 0, 12, 0xFF05, 0x0025, 0, 12, 0xFF06, 0x0026, 0, 12, 0xFF07, 0x0027, 0, 12, 0xFF08, 0x0028, 0, 12, 0xFF09, 0x0029, 0, 12, 0xFF0A, 0x002A, 0, 12, 0xFF0B, 0x002B, 0, 12, 0xFF0C, 0x002C, 0, 12, 0xFF0D, 0x002D, 0, 12, 0xFF0E, 0x002E, 0, 12, 0xFF0F, 0x002F, 0, 12, 0xFF10, 0x0030, 0, 12, 0xFF11, 0x0031, 0, 12, 0xFF12, 0x0032, 0, 12, 0xFF13, 0x0033, 0, 12, 0xFF14, 0x0034, 0, 12, 0xFF15, 0x0035, 0, 12, 0xFF16, 0x0036, 0, 12, 0xFF17, 0x0037, 0, 12, 0xFF18, 0x0038, 0, 12, 0xFF19, 0x0039, 0, 12, 0xFF1A, 0x003A, 0, 12, 0xFF1B, 0x003B, 0, 12, 0xFF1C, 0x003C, 0, 12, 0xFF1D, 0x003D, 0, 12, 0xFF1E, 0x003E, 0, 12, 0xFF1F, 0x003F, 0, 12, 0xFF20, 0x0040, 0, 12, 0xFF21, 0x0041, 0, 12, 0xFF22, 0x0042, 0, 12, 0xFF23, 0x0043, 0, 12, 0xFF24, 0x0044, 0, 12, 0xFF25, 0x0045, 0, 12, 0xFF26, 0x0046, 0, 12, 0xFF27, 0x0047, 0, 12, 0xFF28, 0x0048, 0, 12, 0xFF29, 0x0049, 0, 12, 0xFF2A, 0x004A, 0, 12, 0xFF2B, 0x004B, 0, 12, 0xFF2C, 0x004C, 0, 12, 0xFF2D, 0x004D, 0, 12, 0xFF2E, 0x004E, 0, 12, 0xFF2F, 0x004F, 0, 12, 0xFF30, 0x0050, 0, 12, 0xFF31, 0x0051, 0, 12, 0xFF32, 0x0052, 0, 12, 0xFF33, 0x0053, 0, 12, 0xFF34, 0x0054, 0, 12, 0xFF35, 0x0055, 0, 12, 0xFF36, 0x0056, 0, 12, 0xFF37, 0x0057, 0, 12, 0xFF38, 0x0058, 0, 12, 0xFF39, 0x0059, 0, 12, 0xFF3A, 0x005A, 0, 12, 0xFF3B, 0x005B, 0, 12, 0xFF3C, 0x005C, 0, 12, 0xFF3D, 0x005D, 0, 12, 0xFF3E, 0x005E, 0, 12, 0xFF3F, 0x005F, 0, 12, 0xFF40, 0x0060, 0, 12, 0xFF41, 0x0061, 0, 12, 0xFF42, 0x0062, 0, 12, 0xFF43, 0x0063, 0, 12, 0xFF44, 0x0064, 0, 12, 0xFF45, 0x0065, 0, 12, 0xFF46, 0x0066, 0, 12, 0xFF47, 0x0067, 0, 12, 0xFF48, 0x0068, 0, 12, 0xFF49, 0x0069, 0, 12, 0xFF4A, 0x006A, 0, 12, 0xFF4B, 0x006B, 0, 12, 0xFF4C, 0x006C, 0, 12, 0xFF4D, 0x006D, 0, 12, 0xFF4E, 0x006E, 0, 12, 0xFF4F, 0x006F, 0, 12, 0xFF50, 0x0070, 0, 12, 0xFF51, 0x0071, 0, 12, 0xFF52, 0x0072, 0, 12, 0xFF53, 0x0073, 0, 12, 0xFF54, 0x0074, 0, 12, 0xFF55, 0x0075, 0, 12, 0xFF56, 0x0076, 0, 12, 0xFF57, 0x0077, 0, 12, 0xFF58, 0x0078, 0, 12, 0xFF59, 0x0079, 0, 12, 0xFF5A, 0x007A, 0, 12, 0xFF5B, 0x007B, 0, 12, 0xFF5C, 0x007C, 0, 12, 0xFF5D, 0x007D, 0, 12, 0xFF5E, 0x007E, 0, 13, 0xFF61, 0x3002, 0, 13, 0xFF62, 0x300C, 0, 13, 0xFF63, 0x300D, 0, 13, 0xFF64, 0x3001, 0, 13, 0xFF65, 0x30FB, 0, 13, 0xFF66, 0x30F2, 0, 13, 0xFF67, 0x30A1, 0, 13, 0xFF68, 0x30A3, 0, 13, 0xFF69, 0x30A5, 0, 13, 0xFF6A, 0x30A7, 0, 13, 0xFF6B, 0x30A9, 0, 13, 0xFF6C, 0x30E3, 0, 13, 0xFF6D, 0x30E5, 0, 13, 0xFF6E, 0x30E7, 0, 13, 0xFF6F, 0x30C3, 0, 13, 0xFF70, 0x30FC, 0, 13, 0xFF71, 0x30A2, 0, 13, 0xFF72, 0x30A4, 0, 13, 0xFF73, 0x30A6, 0, 13, 0xFF74, 0x30A8, 0, 13, 0xFF75, 0x30AA, 0, 13, 0xFF76, 0x30AB, 0, 13, 0xFF77, 0x30AD, 0, 13, 0xFF78, 0x30AF, 0, 13, 0xFF79, 0x30B1, 0, 13, 0xFF7A, 0x30B3, 0, 13, 0xFF7B, 0x30B5, 0, 13, 0xFF7C, 0x30B7, 0, 13, 0xFF7D, 0x30B9, 0, 13, 0xFF7E, 0x30BB, 0, 13, 0xFF7F, 0x30BD, 0, 13, 0xFF80, 0x30BF, 0, 13, 0xFF81, 0x30C1, 0, 13, 0xFF82, 0x30C4, 0, 13, 0xFF83, 0x30C6, 0, 13, 0xFF84, 0x30C8, 0, 13, 0xFF85, 0x30CA, 0, 13, 0xFF86, 0x30CB, 0, 13, 0xFF87, 0x30CC, 0, 13, 0xFF88, 0x30CD, 0, 13, 0xFF89, 0x30CE, 0, 13, 0xFF8A, 0x30CF, 0, 13, 0xFF8B, 0x30D2, 0, 13, 0xFF8C, 0x30D5, 0, 13, 0xFF8D, 0x30D8, 0, 13, 0xFF8E, 0x30DB, 0, 13, 0xFF8F, 0x30DE, 0, 13, 0xFF90, 0x30DF, 0, 13, 0xFF91, 0x30E0, 0, 13, 0xFF92, 0x30E1, 0, 13, 0xFF93, 0x30E2, 0, 13, 0xFF94, 0x30E4, 0, 13, 0xFF95, 0x30E6, 0, 13, 0xFF96, 0x30E8, 0, 13, 0xFF97, 0x30E9, 0, 13, 0xFF98, 0x30EA, 0, 13, 0xFF99, 0x30EB, 0, 13, 0xFF9A, 0x30EC, 0, 13, 0xFF9B, 0x30ED, 0, 13, 0xFF9C, 0x30EF, 0, 13, 0xFF9D, 0x30F3, 0, 13, 0xFF9E, 0x3099, 0, 13, 0xFF9F, 0x309A, 0, 13, 0xFFA0, 0x3164, 0, 13, 0xFFA1, 0x3131, 0, 13, 0xFFA2, 0x3132, 0, 13, 0xFFA3, 0x3133, 0, 13, 0xFFA4, 0x3134, 0, 13, 0xFFA5, 0x3135, 0, 13, 0xFFA6, 0x3136, 0, 13, 0xFFA7, 0x3137, 0, 13, 0xFFA8, 0x3138, 0, 13, 0xFFA9, 0x3139, 0, 13, 0xFFAA, 0x313A, 0, 13, 0xFFAB, 0x313B, 0, 13, 0xFFAC, 0x313C, 0, 13, 0xFFAD, 0x313D, 0, 13, 0xFFAE, 0x313E, 0, 13, 0xFFAF, 0x313F, 0, 13, 0xFFB0, 0x3140, 0, 13, 0xFFB1, 0x3141, 0, 13, 0xFFB2, 0x3142, 0, 13, 0xFFB3, 0x3143, 0, 13, 0xFFB4, 0x3144, 0, 13, 0xFFB5, 0x3145, 0, 13, 0xFFB6, 0x3146, 0, 13, 0xFFB7, 0x3147, 0, 13, 0xFFB8, 0x3148, 0, 13, 0xFFB9, 0x3149, 0, 13, 0xFFBA, 0x314A, 0, 13, 0xFFBB, 0x314B, 0, 13, 0xFFBC, 0x314C, 0, 13, 0xFFBD, 0x314D, 0, 13, 0xFFBE, 0x314E, 0, 13, 0xFFC2, 0x314F, 0, 13, 0xFFC3, 0x3150, 0, 13, 0xFFC4, 0x3151, 0, 13, 0xFFC5, 0x3152, 0, 13, 0xFFC6, 0x3153, 0, 13, 0xFFC7, 0x3154, 0, 13, 0xFFCA, 0x3155, 0, 13, 0xFFCB, 0x3156, 0, 13, 0xFFCC, 0x3157, 0, 13, 0xFFCD, 0x3158, 0, 13, 0xFFCE, 0x3159, 0, 13, 0xFFCF, 0x315A, 0, 13, 0xFFD2, 0x315B, 0, 13, 0xFFD3, 0x315C, 0, 13, 0xFFD4, 0x315D, 0, 13, 0xFFD5, 0x315E, 0, 13, 0xFFD6, 0x315F, 0, 13, 0xFFD7, 0x3160, 0, 13, 0xFFDA, 0x3161, 0, 13, 0xFFDB, 0x3162, 0, 13, 0xFFDC, 0x3163, 0, 12, 0xFFE0, 0x00A2, 0, 12, 0xFFE1, 0x00A3, 0, 12, 0xFFE2, 0x00AC, 0, 12, 0xFFE3, 0x00AF, 0, 12, 0xFFE4, 0x00A6, 0, 12, 0xFFE5, 0x00A5, 0, 12, 0xFFE6, 0x20A9, 0, 13, 0xFFE8, 0x2502, 0, 13, 0xFFE9, 0x2190, 0, 13, 0xFFEA, 0x2191, 0, 13, 0xFFEB, 0x2192, 0, 13, 0xFFEC, 0x2193, 0, 13, 0xFFED, 0x25A0, 0, 13, 0xFFEE, 0x25CB, 0, }; static const Q_UINT16 di_00[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 10, 0, 0, 0, 0, 14, 0, 0, 19, 23, 27, 32, 0, 0, 36, 41, 45, 0, 49, 55, 61, 0, 67, 72, 77, 82, 87, 92, 0, 97, 102, 107, 112, 117, 122, 127, 132, 137, 0, 142, 147, 152, 157, 162, 167, 0, 0, 172, 177, 182, 187, 192, 0, 0, 197, 202, 207, 212, 217, 222, 0, 227, 232, 237, 242, 247, 252, 257, 262, 267, 0, 272, 277, 282, 287, 292, 297, 0, 0, 302, 307, 312, 317, 322, 0, 327, }; static const Q_UINT16 di_01[] = { 332, 337, 342, 347, 352, 357, 362, 367, 372, 377, 382, 387, 392, 397, 402, 407, 0, 0, 412, 417, 422, 427, 432, 437, 442, 447, 452, 457, 462, 467, 472, 477, 482, 487, 492, 497, 502, 507, 0, 0, 512, 517, 522, 527, 532, 537, 542, 547, 552, 0, 557, 562, 567, 572, 577, 582, 0, 587, 592, 597, 602, 607, 612, 617, 622, 0, 0, 627, 632, 637, 642, 647, 652, 657, 0, 0, 662, 667, 672, 677, 682, 687, 0, 0, 692, 697, 702, 707, 712, 717, 722, 727, 732, 737, 742, 747, 752, 757, 762, 767, 772, 777, 0, 0, 782, 787, 792, 797, 802, 807, 812, 817, 822, 827, 832, 837, 842, 847, 852, 857, 862, 867, 872, 877, 882, 887, 892, 897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 901, 906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 911, 916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 921, 926, 931, 936, 941, 946, 951, 956, 961, 966, 971, 976, 981, 986, 991, 996, 1001, 1006, 1011, 1016, 1021, 1026, 1031, 1036, 1041, 0, 1046, 1051, 1056, 1061, 1066, 1071, 0, 0, 1076, 1081, 1086, 1091, 1096, 1101, 1106, 1111, 1116, 1121, 1126, 1131, 1136, 1141, 1146, 1151, 0, 0, 1156, 1161, 1166, 1171, 1176, 1181, 1186, 1191, }; static const Q_UINT16 di_02[] = { 1196, 1201, 1206, 1211, 1216, 1221, 1226, 1231, 1236, 1241, 1246, 1251, 1256, 1261, 1266, 1271, 1276, 1281, 1286, 1291, 1296, 1301, 1306, 1311, 1316, 1321, 1326, 1331, 0, 0, 1336, 1341, 0, 0, 0, 0, 0, 0, 1346, 1351, 1356, 1361, 1366, 1371, 1376, 1381, 1386, 1391, 1396, 1401, 1406, 1411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1416, 1420, 1424, 1428, 1432, 1436, 1440, 1444, 1448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1452, 1457, 1462, 1467, 1472, 1477, 0, 0, 1482, 1486, 1490, 1494, 1498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_03[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1502, 1506, 0, 1510, 1514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1519, 0, 0, 0, 0, 0, 1523, 0, 0, 0, 1528, 0, 0, 0, 0, 0, 1532, 1537, 1542, 1547, 1551, 1556, 1561, 0, 1566, 0, 1571, 1576, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1586, 1591, 1596, 1601, 1606, 1611, 1616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1621, 1626, 1631, 1636, 1641, 0, 1646, 1650, 1654, 1658, 1663, 1668, 1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1676, 1680, 1684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_04[] = { 1688, 1693, 0, 1698, 0, 0, 0, 1703, 0, 0, 0, 0, 1708, 1713, 1718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1733, 1738, 0, 1743, 0, 0, 0, 1748, 0, 0, 0, 0, 1753, 1758, 1763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1768, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1778, 1783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1788, 1793, 1798, 1803, 0, 0, 1808, 1813, 0, 0, 1818, 1823, 1828, 1833, 1838, 1843, 0, 0, 1848, 1853, 1858, 1863, 1868, 1873, 0, 0, 1878, 1883, 1888, 1893, 1898, 1903, 1908, 1913, 1918, 1923, 1928, 1933, 0, 0, 1938, 1943, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_05[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_06[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1953, 1958, 1963, 1968, 1973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1978, 1983, 1988, 1993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1998, 0, 2003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_07[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_09[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2013, 0, 0, 0, 0, 0, 0, 0, 2018, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2028, 2033, 2038, 2043, 2048, 2053, 2058, 2063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2068, 2073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2078, 2083, 0, 2088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_0A[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2093, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2103, 2108, 2113, 0, 0, 2118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_0B[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2123, 0, 0, 2128, 2133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2138, 2143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2153, 2158, 2163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_0C[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2173, 0, 0, 0, 0, 0, 0, 2178, 2183, 0, 2188, 2193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_0D[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2198, 2203, 2208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2213, 0, 2218, 2223, 2228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_0E[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2243, 2248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_0F[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2262, 0, 0, 0, 0, 2267, 0, 0, 0, 0, 2272, 0, 0, 0, 0, 2277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2287, 0, 2292, 2297, 2302, 2307, 2312, 0, 0, 0, 0, 0, 0, 0, 2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2327, 0, 0, 0, 0, 2332, 0, 0, 0, 0, 2337, 0, 0, 0, 0, 2342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_10[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_1E[] = { 2357, 2362, 2367, 2372, 2377, 2382, 2387, 2392, 2397, 2402, 2407, 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2477, 2482, 2487, 2492, 2497, 2502, 2507, 2512, 2517, 2522, 2527, 2532, 2537, 2542, 2547, 2552, 2557, 2562, 2567, 2572, 2577, 2582, 2587, 2592, 2597, 2602, 2607, 2612, 2617, 2622, 2627, 2632, 2637, 2642, 2647, 2652, 2657, 2662, 2667, 2672, 2677, 2682, 2687, 2692, 2697, 2702, 2707, 2712, 2717, 2722, 2727, 2732, 2737, 2742, 2747, 2752, 2757, 2762, 2767, 2772, 2777, 2782, 2787, 2792, 2797, 2802, 2807, 2812, 2817, 2822, 2827, 2832, 2837, 2842, 2847, 2852, 2857, 2862, 2867, 2872, 2877, 2882, 2887, 2892, 2897, 2902, 2907, 2912, 2917, 2922, 2927, 2932, 2937, 2942, 2947, 2952, 2957, 2962, 2967, 2972, 2977, 2982, 2987, 2992, 2997, 3002, 3007, 3012, 3017, 3022, 3027, 3032, 3037, 3042, 3047, 3052, 3057, 3062, 3067, 3072, 3077, 3082, 3087, 3092, 3097, 3102, 3107, 3112, 3117, 3122, 3127, 3132, 0, 0, 0, 0, 3137, 3142, 3147, 3152, 3157, 3162, 3167, 3172, 3177, 3182, 3187, 3192, 3197, 3202, 3207, 3212, 3217, 3222, 3227, 3232, 3237, 3242, 3247, 3252, 3257, 3262, 3267, 3272, 3277, 3282, 3287, 3292, 3297, 3302, 3307, 3312, 3317, 3322, 3327, 3332, 3337, 3342, 3347, 3352, 3357, 3362, 3367, 3372, 3377, 3382, 3387, 3392, 3397, 3402, 3407, 3412, 3417, 3422, 3427, 3432, 3437, 3442, 3447, 3452, 3457, 3462, 3467, 3472, 3477, 3482, 3487, 3492, 3497, 3502, 3507, 3512, 3517, 3522, 3527, 3532, 3537, 3542, 3547, 3552, 3557, 3562, 3567, 3572, 3577, 3582, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_1F[] = { 3587, 3592, 3597, 3602, 3607, 3612, 3617, 3622, 3627, 3632, 3637, 3642, 3647, 3652, 3657, 3662, 3667, 3672, 3677, 3682, 3687, 3692, 0, 0, 3697, 3702, 3707, 3712, 3717, 3722, 0, 0, 3727, 3732, 3737, 3742, 3747, 3752, 3757, 3762, 3767, 3772, 3777, 3782, 3787, 3792, 3797, 3802, 3807, 3812, 3817, 3822, 3827, 3832, 3837, 3842, 3847, 3852, 3857, 3862, 3867, 3872, 3877, 3882, 3887, 3892, 3897, 3902, 3907, 3912, 0, 0, 3917, 3922, 3927, 3932, 3937, 3942, 0, 0, 3947, 3952, 3957, 3962, 3967, 3972, 3977, 3982, 0, 3987, 0, 3992, 0, 3997, 0, 4002, 4007, 4012, 4017, 4022, 4027, 4032, 4037, 4042, 4047, 4052, 4057, 4062, 4067, 4072, 4077, 4082, 4087, 4092, 4096, 4101, 4105, 4110, 4114, 4119, 4123, 4128, 4132, 4137, 4141, 4146, 0, 0, 4150, 4155, 4160, 4165, 4170, 4175, 4180, 4185, 4190, 4195, 4200, 4205, 4210, 4215, 4220, 4225, 4230, 4235, 4240, 4245, 4250, 4255, 4260, 4265, 4270, 4275, 4280, 4285, 4290, 4295, 4300, 4305, 4310, 4315, 4320, 4325, 4330, 4335, 4340, 4345, 4350, 4355, 4360, 4365, 4370, 4375, 4380, 4385, 4390, 4395, 4400, 4405, 4410, 0, 4415, 4420, 4425, 4430, 4435, 4440, 4444, 4449, 4454, 4458, 4463, 4468, 4473, 4478, 4483, 0, 4488, 4493, 4498, 4503, 4507, 4512, 4516, 4521, 4526, 4531, 4536, 4541, 4546, 4551, 0, 0, 4555, 4560, 4565, 4570, 4575, 4580, 0, 4584, 4589, 4594, 4599, 4604, 4609, 4614, 4618, 4623, 4628, 4633, 4638, 4643, 4648, 4653, 4657, 4662, 4667, 4671, 0, 0, 4675, 4680, 4685, 0, 4690, 4695, 4700, 4705, 4709, 4714, 4718, 4723, 4727, 0, }; static const Q_UINT16 di_20[] = { 4732, 4736, 4740, 4744, 4748, 4752, 4756, 4760, 4764, 4768, 4772, 0, 0, 0, 0, 0, 0, 4776, 0, 0, 0, 0, 0, 4780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4785, 4789, 4794, 0, 0, 0, 0, 0, 0, 0, 0, 4800, 0, 0, 0, 4804, 4809, 0, 4815, 4820, 0, 0, 0, 0, 4826, 0, 4831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4836, 4841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4846, 0, 0, 0, 4850, 4854, 4858, 4862, 4866, 4870, 4874, 4878, 4882, 4886, 4890, 4894, 4898, 4902, 4906, 4910, 4914, 4918, 4922, 4926, 4930, 4934, 4938, 4942, 4946, 4950, 4954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_21[] = { 4963, 4969, 4975, 4979, 0, 4984, 4990, 4996, 0, 5000, 5005, 5009, 5013, 5017, 5021, 5025, 5029, 5033, 5037, 5041, 0, 5045, 5049, 0, 0, 5054, 5058, 5062, 5066, 5070, 0, 0, 5074, 5079, 5085, 0, 5090, 0, 5094, 0, 5098, 0, 5102, 5106, 5110, 5114, 0, 5118, 5122, 5126, 0, 5130, 5134, 5138, 5142, 5146, 5150, 5154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5158, 5164, 5170, 5176, 5182, 5188, 5194, 5200, 5206, 5212, 5218, 5224, 5230, 5235, 5239, 5244, 5250, 5255, 5259, 5264, 5270, 5277, 5282, 5286, 5291, 5297, 5301, 5305, 5309, 5313, 5317, 5322, 5328, 5333, 5337, 5342, 5348, 5355, 5360, 5364, 5369, 5375, 5379, 5383, 5387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5391, 5396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5406, 5411, 5416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_22[] = { 0, 0, 0, 0, 5421, 0, 0, 0, 0, 5426, 0, 0, 5431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5436, 0, 5441, 0, 0, 0, 0, 0, 5446, 5451, 0, 5457, 5462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5468, 0, 0, 5473, 0, 0, 5478, 0, 5483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5488, 0, 5493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5498, 5503, 5508, 5513, 5518, 0, 0, 5523, 5528, 0, 0, 5533, 5538, 0, 0, 0, 0, 0, 0, 5543, 5548, 0, 0, 5553, 5558, 0, 0, 5563, 5568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5573, 5578, 5583, 5588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5593, 5598, 5603, 5608, 0, 0, 0, 0, 0, 0, 5613, 5618, 5623, 5628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_23[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5633, 5637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5641, 5645, 5649, 5653, 5657, 5661, 5665, 5669, 5673, 5677, 5682, 5687, 5692, 5697, 5702, 5707, 5712, 5717, 5722, 5727, 5732, 5738, 5744, 5750, 5756, 5762, 5768, 5774, 5780, 5786, 5793, 5800, 5807, 5814, 5821, 5828, 5835, 5842, 5849, 5856, 5863, 5868, 5873, 5878, 5883, 5888, 5893, 5898, 5903, 5908, 5914, 5920, 5926, 5932, 5938, 5944, 5950, 5956, 5962, 5968, 5974, 5980, 5986, 5992, 5998, 6004, 6010, 6016, 6022, 6028, 6034, 6040, 6046, 6052, 6058, 6064, 6070, 6076, 6082, 6088, 6094, 6100, 6106, 6112, 6118, 6124, 6130, 6134, 6138, 6142, 6146, 6150, 6154, 6158, 6162, 6166, 6170, 6174, 6178, 6182, 6186, 6190, 6194, 6198, 6202, 6206, 6210, 6214, 6218, 6222, 6226, 6230, 6234, 6238, 6242, 6246, 6250, 6254, 6258, 6262, 6266, 6270, 6274, 6278, 6282, 6286, 6290, 6294, 6298, 6302, 6306, 6310, 6314, 6318, 6322, 6326, 6330, 6334, 6338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_2E[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_2F[] = { 6350, 6354, 6358, 6362, 6366, 6370, 6374, 6378, 6382, 6386, 6390, 6394, 6398, 6402, 6406, 6410, 6414, 6418, 6422, 6426, 6430, 6434, 6438, 6442, 6446, 6450, 6454, 6458, 6462, 6466, 6470, 6474, 6478, 6482, 6486, 6490, 6494, 6498, 6502, 6506, 6510, 6514, 6518, 6522, 6526, 6530, 6534, 6538, 6542, 6546, 6550, 6554, 6558, 6562, 6566, 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, 6618, 6622, 6626, 6630, 6634, 6638, 6642, 6646, 6650, 6654, 6658, 6662, 6666, 6670, 6674, 6678, 6682, 6686, 6690, 6694, 6698, 6702, 6706, 6710, 6714, 6718, 6722, 6726, 6730, 6734, 6738, 6742, 6746, 6750, 6754, 6758, 6762, 6766, 6770, 6774, 6778, 6782, 6786, 6790, 6794, 6798, 6802, 6806, 6810, 6814, 6818, 6822, 6826, 6830, 6834, 6838, 6842, 6846, 6850, 6854, 6858, 6862, 6866, 6870, 6874, 6878, 6882, 6886, 6890, 6894, 6898, 6902, 6906, 6910, 6914, 6918, 6922, 6926, 6930, 6934, 6938, 6942, 6946, 6950, 6954, 6958, 6962, 6966, 6970, 6974, 6978, 6982, 6986, 6990, 6994, 6998, 7002, 7006, 7010, 7014, 7018, 7022, 7026, 7030, 7034, 7038, 7042, 7046, 7050, 7054, 7058, 7062, 7066, 7070, 7074, 7078, 7082, 7086, 7090, 7094, 7098, 7102, 7106, 7110, 7114, 7118, 7122, 7126, 7130, 7134, 7138, 7142, 7146, 7150, 7154, 7158, 7162, 7166, 7170, 7174, 7178, 7182, 7186, 7190, 7194, 7198, 7202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_30[] = { 7206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7210, 0, 7214, 7218, 7222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7226, 0, 7231, 0, 7236, 0, 7241, 0, 7246, 0, 7251, 0, 7256, 0, 7261, 0, 7266, 0, 7271, 0, 7276, 0, 7281, 0, 0, 7286, 0, 7291, 0, 7296, 0, 0, 0, 0, 0, 0, 7301, 7306, 0, 7311, 7316, 0, 7321, 7326, 0, 7331, 7336, 0, 7341, 7346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7351, 0, 0, 0, 0, 0, 0, 7356, 7361, 0, 7366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7371, 0, 7376, 0, 7381, 0, 7386, 0, 7391, 0, 7396, 0, 7401, 0, 7406, 0, 7411, 0, 7416, 0, 7421, 0, 7426, 0, 0, 7431, 0, 7436, 0, 7441, 0, 0, 0, 0, 0, 0, 7446, 7451, 0, 7456, 7461, 0, 7466, 7471, 0, 7476, 7481, 0, 7486, 7491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7496, 0, 0, 7501, 7506, 7511, 7516, 0, 0, 0, 7521, 0, }; static const Q_UINT16 di_31[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7526, 7530, 7534, 7538, 7542, 7546, 7550, 7554, 7558, 7562, 7566, 7570, 7574, 7578, 7582, 7586, 7590, 7594, 7598, 7602, 7606, 7610, 7614, 7618, 7622, 7626, 7630, 7634, 7638, 7642, 7646, 7650, 7654, 7658, 7662, 7666, 7670, 7674, 7678, 7682, 7686, 7690, 7694, 7698, 7702, 7706, 7710, 7714, 7718, 7722, 7726, 7730, 7734, 7738, 7742, 7746, 7750, 7754, 7758, 7762, 7766, 7770, 7774, 7778, 7782, 7786, 7790, 7794, 7798, 7802, 7806, 7810, 7814, 7818, 7822, 7826, 7830, 7834, 7838, 7842, 7846, 7850, 7854, 7858, 7862, 7866, 7870, 7874, 7878, 7882, 7886, 7890, 7894, 7898, 0, 0, 0, 7902, 7906, 7910, 7914, 7918, 7922, 7926, 7930, 7934, 7938, 7942, 7946, 7950, 7954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_32[] = { 7958, 7964, 7970, 7976, 7982, 7988, 7994, 8000, 8006, 8012, 8018, 8024, 8030, 8036, 8042, 8049, 8056, 8063, 8070, 8077, 8084, 8091, 8098, 8105, 8112, 8119, 8126, 8133, 8140, 0, 0, 0, 8147, 8153, 8159, 8165, 8171, 8177, 8183, 8189, 8195, 8201, 8207, 8213, 8219, 8225, 8231, 8237, 8243, 8249, 8255, 8261, 8267, 8273, 8279, 8285, 8291, 8297, 8303, 8309, 8315, 8321, 8327, 8333, 8339, 8345, 8351, 8357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8363, 8367, 8371, 8375, 8379, 8383, 8387, 8391, 8395, 8399, 8403, 8407, 8411, 8415, 8419, 8424, 8429, 8434, 8439, 8444, 8449, 8454, 8459, 8464, 8469, 8474, 8479, 8484, 0, 0, 0, 0, 8489, 8493, 8497, 8501, 8505, 8509, 8513, 8517, 8521, 8525, 8529, 8533, 8537, 8541, 8545, 8549, 8553, 8557, 8561, 8565, 8569, 8573, 8577, 8581, 8585, 8589, 8593, 8597, 8601, 8605, 8609, 8613, 8617, 8621, 8625, 8629, 8633, 8637, 8641, 8645, 8649, 8653, 8657, 8661, 8665, 8669, 8673, 8677, 8681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8685, 8690, 8695, 8700, 8705, 8710, 8715, 8720, 8725, 8730, 8736, 8742, 0, 0, 0, 0, 8748, 8752, 8756, 8760, 8764, 8768, 8772, 8776, 8780, 8784, 8788, 8792, 8796, 8800, 8804, 8808, 8812, 8816, 8820, 8824, 8828, 8832, 8836, 8840, 8844, 8848, 8852, 8856, 8860, 8864, 8868, 8872, 8876, 8880, 8884, 8888, 8892, 8896, 8900, 8904, 8908, 8912, 8916, 8920, 8924, 8928, 8932, 0, }; static const Q_UINT16 di_33[] = { 8936, 8943, 8950, 8957, 8963, 8970, 8976, 8982, 8990, 8997, 9003, 9009, 9015, 9022, 9029, 9035, 9041, 9046, 9052, 9059, 9066, 9071, 9079, 9088, 9096, 9102, 9110, 9118, 9125, 9131, 9137, 9143, 9150, 9158, 9165, 9171, 9177, 9183, 9188, 9193, 9198, 9203, 9209, 9215, 9223, 9229, 9236, 9244, 9250, 9255, 9260, 9268, 9275, 9283, 9289, 9297, 9302, 9308, 9314, 9320, 9326, 9332, 9339, 9345, 9350, 9356, 9362, 9368, 9375, 9381, 9387, 9393, 9401, 9408, 9413, 9421, 9426, 9433, 9440, 9446, 9452, 9458, 9465, 9470, 9476, 9483, 9488, 9496, 9502, 9507, 9512, 9517, 9522, 9527, 9532, 9537, 9542, 9547, 9552, 9558, 9564, 9570, 9576, 9582, 9588, 9594, 9600, 9606, 9612, 9618, 9624, 9630, 9636, 9642, 9648, 9653, 9658, 9664, 9669, 0, 0, 0, 0, 9674, 9679, 9684, 9689, 9694, 9701, 9706, 9711, 9716, 9721, 9726, 9731, 9736, 9741, 9747, 9754, 9759, 9764, 9769, 9774, 9779, 9784, 9789, 9795, 9801, 9807, 9813, 9818, 9823, 9828, 9833, 9838, 9843, 9848, 9853, 9858, 9863, 9869, 9875, 9880, 9886, 9892, 9898, 9903, 9909, 9915, 9922, 9927, 9933, 9939, 9945, 9951, 9959, 9968, 9973, 9978, 9983, 9988, 9993, 9998, 10003, 10008, 10013, 10018, 10023, 10028, 10033, 10038, 10043, 10048, 10053, 10058, 10065, 10070, 10075, 10080, 10087, 10093, 10098, 10103, 10108, 10113, 10118, 10123, 10128, 10133, 10138, 10143, 10149, 10154, 10159, 10165, 10171, 10176, 10183, 10189, 10194, 10199, 10204, 0, 0, 10209, 10214, 10219, 10224, 10229, 10234, 10239, 10244, 10249, 10254, 10260, 10266, 10272, 10278, 10284, 10290, 10296, 10302, 10308, 10314, 10320, 10326, 10332, 10338, 10344, 10350, 10356, 10362, 10368, 10374, 10380, 0, }; static const Q_UINT16 di_F9[] = { 10386, 10390, 10394, 10398, 10402, 10406, 10410, 10414, 10418, 10422, 10426, 10430, 10434, 10438, 10442, 10446, 10450, 10454, 10458, 10462, 10466, 10470, 10474, 10478, 10482, 10486, 10490, 10494, 10498, 10502, 10506, 10510, 10514, 10518, 10522, 10526, 10530, 10534, 10538, 10542, 10546, 10550, 10554, 10558, 10562, 10566, 10570, 10574, 10578, 10582, 10586, 10590, 10594, 10598, 10602, 10606, 10610, 10614, 10618, 10622, 10626, 10630, 10634, 10638, 10642, 10646, 10650, 10654, 10658, 10662, 10666, 10670, 10674, 10678, 10682, 10686, 10690, 10694, 10698, 10702, 10706, 10710, 10714, 10718, 10722, 10726, 10730, 10734, 10738, 10742, 10746, 10750, 10754, 10758, 10762, 10766, 10770, 10774, 10778, 10782, 10786, 10790, 10794, 10798, 10802, 10806, 10810, 10814, 10818, 10822, 10826, 10830, 10834, 10838, 10842, 10846, 10850, 10854, 10858, 10862, 10866, 10870, 10874, 10878, 10882, 10886, 10890, 10894, 10898, 10902, 10906, 10910, 10914, 10918, 10922, 10926, 10930, 10934, 10938, 10942, 10946, 10950, 10954, 10958, 10962, 10966, 10970, 10974, 10978, 10982, 10986, 10990, 10994, 10998, 11002, 11006, 11010, 11014, 11018, 11022, 11026, 11030, 11034, 11038, 11042, 11046, 11050, 11054, 11058, 11062, 11066, 11070, 11074, 11078, 11082, 11086, 11090, 11094, 11098, 11102, 11106, 11110, 11114, 11118, 11122, 11126, 11130, 11134, 11138, 11142, 11146, 11150, 11154, 11158, 11162, 11166, 11170, 11174, 11178, 11182, 11186, 11190, 11194, 11198, 11202, 11206, 11210, 11214, 11218, 11222, 11226, 11230, 11234, 11238, 11242, 11246, 11250, 11254, 11258, 11262, 11266, 11270, 11274, 11278, 11282, 11286, 11290, 11294, 11298, 11302, 11306, 11310, 11314, 11318, 11322, 11326, 11330, 11334, 11338, 11342, 11346, 11350, 11354, 11358, 11362, 11366, 11370, 11374, 11378, 11382, 11386, 11390, 11394, 11398, 11402, 11406, }; static const Q_UINT16 di_FA[] = { 11410, 11414, 11418, 11422, 11426, 11430, 11434, 11438, 11442, 11446, 11450, 11454, 11458, 11462, 0, 0, 11466, 0, 11470, 0, 0, 11474, 11478, 11482, 11486, 11490, 11494, 11498, 11502, 11506, 11510, 0, 11514, 0, 11518, 0, 0, 11522, 11526, 0, 0, 0, 11530, 11534, 11538, 11542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 di_FB[] = { 11546, 11551, 11556, 11561, 11567, 11573, 11578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11583, 11588, 11593, 11598, 11603, 0, 0, 0, 0, 0, 11608, 0, 11613, 11618, 11622, 11626, 11630, 11634, 11638, 11642, 11646, 11650, 11654, 11658, 11663, 11668, 11673, 11678, 11683, 11688, 11693, 11698, 11703, 11708, 11713, 11718, 0, 11723, 11728, 11733, 11738, 11743, 0, 11748, 0, 11753, 11758, 0, 11763, 11768, 0, 11773, 11778, 11783, 11788, 11793, 11798, 11803, 11808, 11813, 11818, 11823, 11827, 11831, 11835, 11839, 11843, 11847, 11851, 11855, 11859, 11863, 11867, 11871, 11875, 11879, 11883, 11887, 11891, 11895, 11899, 11903, 11907, 11911, 11915, 11919, 11923, 11927, 11931, 11935, 11939, 11943, 11947, 11951, 11955, 11959, 11963, 11967, 11971, 11975, 11979, 11983, 11987, 11991, 11995, 11999, 12003, 12007, 12011, 12015, 12019, 12023, 12027, 12031, 12035, 12039, 12043, 12047, 12051, 12055, 12059, 12063, 12067, 12071, 12075, 12079, 12083, 12087, 12091, 12095, 12099, 12103, 12107, 12111, 12115, 12119, 12123, 12127, 12131, 12135, 12139, 12143, 12147, 12151, 12155, 12159, 12163, 12167, 12171, 12175, 12179, 12183, 12187, 12191, 12195, 12199, 12203, 12207, 12211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12215, 12219, 12223, 12227, 12231, 12235, 12239, 12243, 12247, 12251, 12255, 12259, 12263, 12267, 12271, 12275, 12279, 12283, 12287, 12291, 12295, 12299, 12303, 12307, 12312, 12317, 12322, 12327, 12332, 12337, 12342, 12347, 12352, 12357, 12362, 12367, 12372, 12377, 12382, 12387, 12392, 12397, 12401, 12405, 12409, }; static const Q_UINT16 di_FC[] = { 12413, 12418, 12423, 12428, 12433, 12438, 12443, 12448, 12453, 12458, 12463, 12468, 12473, 12478, 12483, 12488, 12493, 12498, 12503, 12508, 12513, 12518, 12523, 12528, 12533, 12538, 12543, 12548, 12553, 12558, 12563, 12568, 12573, 12578, 12583, 12588, 12593, 12598, 12603, 12608, 12613, 12618, 12623, 12628, 12633, 12638, 12643, 12648, 12653, 12658, 12663, 12668, 12673, 12678, 12683, 12688, 12693, 12698, 12703, 12708, 12713, 12718, 12723, 12728, 12733, 12738, 12743, 12748, 12753, 12758, 12763, 12768, 12773, 12778, 12783, 12788, 12793, 12798, 12803, 12808, 12813, 12818, 12823, 12828, 12833, 12838, 12843, 12848, 12853, 12858, 12863, 12868, 12873, 12878, 12883, 12889, 12895, 12901, 12907, 12913, 12919, 12924, 12929, 12934, 12939, 12944, 12949, 12954, 12959, 12964, 12969, 12974, 12979, 12984, 12989, 12994, 12999, 13004, 13009, 13014, 13019, 13024, 13029, 13034, 13039, 13044, 13049, 13054, 13059, 13064, 13069, 13074, 13079, 13084, 13089, 13094, 13099, 13104, 13109, 13114, 13119, 13124, 13129, 13134, 13139, 13144, 13149, 13154, 13159, 13164, 13169, 13174, 13179, 13184, 13189, 13194, 13199, 13204, 13209, 13214, 13219, 13224, 13229, 13234, 13239, 13244, 13249, 13254, 13259, 13264, 13269, 13274, 13279, 13284, 13289, 13294, 13299, 13304, 13309, 13314, 13319, 13324, 13329, 13334, 13339, 13344, 13349, 13354, 13359, 13364, 13369, 13374, 13379, 13384, 13389, 13394, 13399, 13404, 13409, 13414, 13419, 13424, 13429, 13434, 13439, 13444, 13449, 13454, 13459, 13464, 13469, 13474, 13479, 13484, 13489, 13494, 13499, 13504, 13509, 13514, 13519, 13524, 13529, 13534, 13539, 13544, 13549, 13554, 13559, 13564, 13569, 13574, 13579, 13584, 13589, 13594, 13599, 13604, 13609, 13614, 13619, 13624, 13629, 13635, 13641, 13647, 13652, 13657, 13662, 13667, 13672, 13677, 13682, 13687, 13692, 13697, }; static const Q_UINT16 di_FD[] = { 13702, 13707, 13712, 13717, 13722, 13727, 13732, 13737, 13742, 13747, 13752, 13757, 13762, 13767, 13772, 13777, 13782, 13787, 13792, 13797, 13802, 13807, 13812, 13817, 13822, 13827, 13832, 13837, 13842, 13847, 13852, 13857, 13862, 13867, 13872, 13877, 13882, 13887, 13892, 13897, 13902, 13907, 13912, 13917, 13922, 13927, 13932, 13937, 13942, 13947, 13952, 13957, 13962, 13967, 13972, 13977, 13982, 13987, 13992, 13997, 14002, 14007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14012, 14018, 14024, 14030, 14036, 14042, 14048, 14054, 14060, 14066, 14072, 14078, 14084, 14090, 14096, 14102, 14108, 14114, 14120, 14126, 14132, 14138, 14144, 14150, 14156, 14162, 14168, 14174, 14180, 14186, 14192, 14198, 14204, 14210, 14216, 14222, 14228, 14234, 14240, 14246, 14252, 14258, 14264, 14270, 14276, 14282, 14288, 14294, 14300, 14306, 14312, 14318, 14324, 14330, 14336, 14342, 14348, 14354, 14360, 14366, 14372, 14378, 14384, 14390, 0, 0, 14396, 14402, 14408, 14414, 14420, 14426, 14432, 14438, 14444, 14450, 14456, 14462, 14468, 14474, 14480, 14486, 14492, 14498, 14504, 14510, 14516, 14522, 14528, 14534, 14540, 14546, 14552, 14558, 14564, 14570, 14576, 14582, 14588, 14594, 14600, 14606, 14612, 14618, 14624, 14630, 14636, 14642, 14648, 14654, 14660, 14666, 14672, 14678, 14684, 14690, 14696, 14702, 14708, 14714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14720, 14726, 14732, 14739, 14746, 14753, 14760, 14767, 14774, 14781, 14787, 14808, 0, 0, 0, 0, }; static const Q_UINT16 di_FE[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14819, 14823, 14827, 14831, 14835, 14839, 14843, 14847, 14851, 14855, 14859, 14863, 14867, 14871, 14875, 14879, 14883, 14887, 14891, 14895, 14899, 0, 0, 0, 0, 14903, 14907, 14911, 14915, 14919, 14923, 14927, 14931, 14935, 14939, 0, 14943, 14947, 14951, 14955, 14959, 14963, 14967, 14971, 14975, 14979, 14983, 14987, 14991, 14995, 14999, 15003, 15007, 15011, 15015, 0, 15019, 15023, 15027, 15031, 0, 0, 0, 0, 15035, 15040, 15045, 0, 15050, 0, 15055, 15060, 15065, 15070, 15075, 15080, 15085, 15090, 15095, 15100, 15105, 15109, 15113, 15117, 15121, 15125, 15129, 15133, 15137, 15141, 15145, 15149, 15153, 15157, 15161, 15165, 15169, 15173, 15177, 15181, 15185, 15189, 15193, 15197, 15201, 15205, 15209, 15213, 15217, 15221, 15225, 15229, 15233, 15237, 15241, 15245, 15249, 15253, 15257, 15261, 15265, 15269, 15273, 15277, 15281, 15285, 15289, 15293, 15297, 15301, 15305, 15309, 15313, 15317, 15321, 15325, 15329, 15333, 15337, 15341, 15345, 15349, 15353, 15357, 15361, 15365, 15369, 15373, 15377, 15381, 15385, 15389, 15393, 15397, 15401, 15405, 15409, 15413, 15417, 15421, 15425, 15429, 15433, 15437, 15441, 15445, 15449, 15453, 15457, 15461, 15465, 15469, 15473, 15477, 15481, 15485, 15489, 15493, 15497, 15501, 15505, 15509, 15513, 15517, 15521, 15525, 15529, 15533, 15537, 15541, 15545, 15549, 15553, 15557, 15561, 15565, 15569, 15573, 15578, 15583, 15588, 15593, 15598, 15603, 15608, 0, 0, 0, }; static const Q_UINT16 di_FF[] = { 0, 15613, 15617, 15621, 15625, 15629, 15633, 15637, 15641, 15645, 15649, 15653, 15657, 15661, 15665, 15669, 15673, 15677, 15681, 15685, 15689, 15693, 15697, 15701, 15705, 15709, 15713, 15717, 15721, 15725, 15729, 15733, 15737, 15741, 15745, 15749, 15753, 15757, 15761, 15765, 15769, 15773, 15777, 15781, 15785, 15789, 15793, 15797, 15801, 15805, 15809, 15813, 15817, 15821, 15825, 15829, 15833, 15837, 15841, 15845, 15849, 15853, 15857, 15861, 15865, 15869, 15873, 15877, 15881, 15885, 15889, 15893, 15897, 15901, 15905, 15909, 15913, 15917, 15921, 15925, 15929, 15933, 15937, 15941, 15945, 15949, 15953, 15957, 15961, 15965, 15969, 15973, 15977, 15981, 15985, 0, 0, 15989, 15993, 15997, 16001, 16005, 16009, 16013, 16017, 16021, 16025, 16029, 16033, 16037, 16041, 16045, 16049, 16053, 16057, 16061, 16065, 16069, 16073, 16077, 16081, 16085, 16089, 16093, 16097, 16101, 16105, 16109, 16113, 16117, 16121, 16125, 16129, 16133, 16137, 16141, 16145, 16149, 16153, 16157, 16161, 16165, 16169, 16173, 16177, 16181, 16185, 16189, 16193, 16197, 16201, 16205, 16209, 16213, 16217, 16221, 16225, 16229, 16233, 16237, 16241, 16245, 16249, 16253, 16257, 16261, 16265, 16269, 16273, 16277, 16281, 16285, 16289, 16293, 16297, 16301, 16305, 16309, 16313, 16317, 16321, 16325, 16329, 16333, 16337, 16341, 16345, 16349, 16353, 16357, 16361, 0, 0, 0, 16365, 16369, 16373, 16377, 16381, 16385, 0, 0, 16389, 16393, 16397, 16401, 16405, 16409, 0, 0, 16413, 16417, 16421, 16425, 16429, 16433, 0, 0, 16437, 16441, 16445, 0, 0, 0, 16449, 16453, 16457, 16461, 16465, 16469, 16473, 0, 16477, 16481, 16485, 16489, 16493, 16497, 16501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 * const decomposition_info[256] = { di_00, di_01, di_02, di_03, di_04, di_05, di_06, di_07, di_07, di_09, di_0A, di_0B, di_0C, di_0D, di_0E, di_0F, di_10, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_1E, di_1F, di_20, di_21, di_22, di_23, di_24, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_2E, di_2F, di_30, di_31, di_32, di_33, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_F9, di_FA, di_FB, di_FC, di_FD, di_FE, di_FF, }; // 68080 bytes static const Q_UINT16 ligature_map [] = { 0, 12883, 12889, 12895, 12901, 12907, 12913, 15035, 15045, 15050, 15055, 15065, 15075, 15085, 15095, 0, 5503, 0, 5488, 0, 5508, 0, 67, 72, 77, 82, 87, 92, 332, 342, 352, 966, 1196, 1206, 1346, 2357, 3137, 3147, 0, 2367, 2377, 2387, 0, 97, 362, 372, 382, 392, 0, 402, 2407, 2417, 2427, 2437, 2447, 0, 102, 107, 112, 117, 412, 422, 432, 442, 452, 1216, 1226, 1356, 2477, 2487, 3257, 3267, 3277, 0, 2507, 0, 462, 472, 482, 492, 1076, 1146, 2517, 0, 502, 1336, 2527, 2537, 2547, 2557, 2567, 0, 122, 127, 132, 137, 512, 522, 532, 542, 552, 976, 1236, 1246, 2577, 3337, 3347, 0, 567, 0, 577, 1086, 2597, 2607, 2617, 0, 587, 597, 607, 2627, 2647, 2657, 0, 2667, 2677, 2687, 0, 142, 627, 637, 647, 1156, 2697, 2707, 2717, 2727, 0, 147, 152, 157, 162, 167, 662, 672, 682, 901, 986, 1096, 1256, 1266, 1386, 3357, 3367, 0, 2777, 2787, 0, 692, 702, 712, 1276, 1286, 2797, 2807, 2827, 0, 722, 732, 742, 752, 1316, 2837, 2847, 0, 762, 772, 1326, 2887, 2897, 2907, 2917, 0, 172, 177, 182, 187, 782, 792, 802, 812, 822, 832, 911, 996, 1296, 1306, 2927, 2937, 2947, 3477, 3487, 0, 2977, 2987, 0, 842, 2997, 3007, 3017, 3027, 3037, 0, 3047, 3057, 0, 192, 852, 862, 1406, 3067, 3547, 3557, 3567, 3577, 0, 867, 877, 887, 3077, 3087, 3097, 0, 197, 202, 207, 212, 217, 222, 337, 347, 357, 971, 1201, 1211, 1351, 2362, 3142, 3152, 0, 2372, 2382, 2392, 0, 227, 367, 377, 387, 397, 0, 407, 2412, 2422, 2432, 2442, 2452, 0, 232, 237, 242, 247, 417, 427, 437, 447, 457, 1221, 1231, 1361, 2482, 2492, 3262, 3272, 3282, 0, 2512, 0, 467, 477, 487, 497, 1081, 1151, 2522, 0, 507, 1341, 2532, 2542, 2552, 2562, 2572, 3107, 0, 252, 257, 262, 267, 517, 527, 537, 547, 981, 1241, 1251, 2582, 3342, 3352, 0, 572, 1126, 0, 582, 1091, 2602, 2612, 2622, 0, 592, 602, 612, 2632, 2652, 2662, 0, 2672, 2682, 2692, 0, 272, 632, 642, 652, 1161, 2702, 2712, 2722, 2732, 0, 277, 282, 287, 292, 297, 667, 677, 687, 906, 991, 1101, 1261, 1271, 1391, 3362, 3372, 0, 2782, 2792, 0, 697, 707, 717, 1281, 1291, 2802, 2812, 2832, 0, 727, 737, 747, 757, 1321, 2842, 2852, 0, 767, 777, 1331, 2892, 2902, 2912, 2922, 3112, 0, 302, 307, 312, 317, 787, 797, 807, 817, 827, 837, 916, 1001, 1301, 1311, 2932, 2942, 2952, 3482, 3492, 0, 2982, 2992, 0, 847, 3002, 3012, 3022, 3032, 3042, 3117, 0, 3052, 3062, 0, 322, 327, 857, 1411, 3072, 3122, 3552, 3562, 3572, 3582, 0, 872, 882, 892, 3082, 3092, 3102, 0, 1537, 4468, 4662, 0, 3157, 3167, 3177, 3187, 0, 1046, 0, 1166, 0, 1066, 1176, 0, 2397, 0, 3287, 3297, 3307, 3317, 0, 2587, 0, 3377, 3387, 3397, 3407, 0, 1376, 2737, 2747, 0, 1366, 0, 1186, 0, 1006, 1016, 1026, 1036, 0, 3162, 3172, 3182, 3192, 0, 1051, 0, 1171, 0, 1071, 1181, 0, 2402, 0, 3292, 3302, 3312, 3322, 0, 2592, 0, 3382, 3392, 3402, 3412, 0, 1381, 2742, 2752, 0, 1371, 0, 1191, 0, 1011, 1021, 1031, 1041, 0, 3207, 3217, 3227, 3237, 0, 3212, 3222, 3232, 3242, 0, 2457, 2467, 0, 2462, 2472, 0, 2757, 2767, 0, 2762, 2772, 0, 2857, 0, 2862, 0, 2867, 0, 2872, 0, 2957, 0, 2962, 0, 2967, 0, 2972, 0, 3132, 0, 3427, 3437, 3447, 3457, 3467, 0, 3432, 3442, 3452, 3462, 3472, 0, 3497, 3507, 3517, 3527, 3537, 0, 3502, 3512, 3522, 3532, 3542, 0, 1116, 0, 1106, 0, 1111, 0, 1056, 0, 1061, 0, 2497, 0, 2502, 0, 1396, 0, 1401, 0, 1121, 0, 1514, 0, 1542, 3627, 3632, 4425, 4430, 4435, 4444, 0, 1551, 3697, 3702, 4498, 0, 1556, 3767, 3772, 4507, 4516, 0, 1561, 1586, 3847, 3852, 4565, 4570, 4575, 0, 1566, 3917, 3922, 4700, 0, 4657, 0, 1571, 1591, 3987, 4638, 4643, 4648, 0, 1576, 4047, 4052, 4709, 4718, 0, 4410, 0, 4483, 0, 1596, 3587, 3592, 4087, 4390, 4395, 4405, 4415, 0, 1601, 3667, 3672, 4096, 0, 1606, 3727, 3732, 4105, 4478, 4488, 0, 1611, 1621, 3807, 3812, 4114, 4536, 4541, 4555, 0, 1631, 3887, 3892, 4123, 0, 4618, 4623, 0, 1626, 1636, 3947, 3952, 4132, 4599, 4604, 4628, 0, 1641, 4007, 4012, 4141, 4680, 4690, 0, 1581, 4546, 4560, 0, 1616, 4609, 4633, 0, 4685, 0, 1658, 1663, 0, 1703, 0, 1788, 1798, 0, 1698, 0, 1688, 1693, 1808, 0, 1778, 1828, 0, 1838, 0, 1713, 1723, 1848, 1858, 0, 1708, 0, 1868, 0, 1718, 1898, 1908, 1918, 0, 1928, 0, 1938, 0, 1888, 0, 1793, 1803, 0, 1743, 0, 1733, 1738, 1813, 0, 1783, 1833, 0, 1843, 0, 1728, 1758, 1853, 1863, 0, 1753, 0, 1873, 0, 1763, 1903, 1913, 1923, 0, 1933, 0, 1943, 0, 1893, 0, 1748, 0, 1768, 0, 1773, 0, 1818, 0, 1823, 0, 1878, 0, 1883, 0, 11678, 11683, 11688, 0, 11693, 11803, 0, 11698, 0, 11703, 0, 11708, 0, 11713, 11798, 0, 11718, 0, 11723, 0, 11608, 11728, 0, 11733, 0, 11738, 11808, 0, 11743, 0, 11748, 0, 11753, 0, 11758, 0, 11763, 0, 11768, 11813, 0, 11773, 0, 11778, 0, 11783, 0, 11658, 11663, 11788, 0, 11793, 0, 11613, 0, 15105, 0, 15109, 15113, 0, 15117, 15121, 0, 15125, 15129, 0, 15133, 15137, 0, 12307, 12312, 12317, 12322, 12327, 12332, 12337, 12342, 12347, 12352, 12357, 12362, 12367, 12372, 12377, 12382, 12387, 12392, 12413, 12418, 12423, 12428, 12433, 12919, 12924, 12929, 12934, 12939, 12944, 13174, 13179, 13184, 13189, 13194, 13534, 13539, 15141, 15145, 15149, 15153, 0, 14732, 14739, 1958, 1968, 14007, 14002, 1953, 15157, 15161, 0, 14468, 14684, 12448, 12453, 12458, 12463, 12949, 12954, 12959, 12964, 12969, 12974, 13199, 13204, 13209, 13214, 13219, 13544, 13549, 12438, 12443, 15165, 15169, 15173, 15177, 0, 15181, 15185, 0, 14012, 14018, 14024, 14030, 14036, 14042, 14048, 14054, 14474, 14480, 14486, 14492, 14498, 14504, 13229, 13234, 13239, 13244, 13559, 13554, 12468, 12473, 12478, 12483, 12488, 12493, 12979, 12984, 12989, 12994, 12999, 13004, 13224, 15189, 15193, 15197, 15201, 0, 12498, 12503, 12508, 12513, 13009, 13014, 13019, 13024, 13029, 13034, 13249, 13564, 13569, 15205, 15209, 15213, 15217, 0, 14808, 14660, 14060, 14066, 14510, 14516, 14522, 12518, 12523, 13254, 13259, 13707, 13712, 13847, 13852, 15221, 15225, 15229, 15233, 0, 14072, 14078, 14666, 13264, 13269, 13697, 13702, 13842, 13837, 12528, 12533, 15237, 15241, 15245, 15249, 0, 12538, 12543, 12548, 13274, 13279, 13717, 13722, 13857, 13862, 15253, 15257, 15261, 15265, 0, 15269, 15273, 0, 12868, 15277, 15281, 0, 14760, 12873, 15285, 15289, 0, 15293, 15297, 0, 14084, 14090, 14096, 14102, 14108, 14114, 14120, 14126, 14528, 14708, 13677, 13682, 13772, 13817, 13822, 13912, 13947, 13962, 13967, 13972, 12553, 12558, 12563, 12568, 13284, 13289, 13294, 13299, 13574, 13579, 15301, 15305, 15309, 15313, 0, 14150, 14156, 14162, 14168, 14174, 14180, 14186, 14540, 13767, 13827, 13832, 13887, 13892, 13897, 13902, 13907, 13927, 13932, 13937, 13942, 13952, 13977, 13982, 13987, 13584, 13589, 13687, 13692, 13747, 13752, 13757, 13762, 15317, 15321, 15325, 15329, 0, 14787, 14753, 14781, 14138, 14132, 14144, 14534, 14702, 14720, 12573, 12578, 13304, 13309, 13314, 13727, 13732, 13777, 13872, 13917, 13867, 15333, 15337, 15341, 15345, 0, 14192, 14198, 14204, 14546, 13319, 13324, 13329, 13334, 13737, 13742, 13782, 13877, 13882, 13922, 12583, 12588, 12593, 12598, 15349, 15353, 15357, 15361, 0, 14210, 14216, 14222, 14228, 13647, 13652, 13787, 13792, 13992, 13957, 12603, 12608, 13339, 15365, 15369, 15373, 15377, 0, 12613, 13344, 13997, 15381, 15385, 15389, 15393, 0, 14767, 14696, 14234, 14240, 14246, 14252, 14612, 12618, 12623, 13349, 13354, 13657, 13662, 13797, 13802, 15397, 15401, 15405, 15409, 0, 14258, 14264, 14270, 13359, 13364, 13667, 13672, 13812, 13807, 12628, 12633, 15413, 15417, 15421, 15425, 0, 13629, 13635, 13641, 15040, 15060, 15070, 15080, 15090, 15100, 0, 14276, 14282, 14678, 12653, 12658, 12663, 13039, 13044, 13369, 13374, 13379, 13384, 12638, 12643, 12648, 15429, 15433, 15437, 15441, 0, 14600, 14726, 14294, 14288, 14588, 12668, 12673, 12678, 12683, 13049, 13054, 13389, 13394, 15445, 15449, 15453, 15457, 0, 14618, 14642, 14690, 12703, 12708, 12713, 12718, 12723, 13059, 13064, 13069, 13074, 13079, 13399, 13404, 13409, 13414, 13419, 13594, 13599, 12688, 12693, 12698, 15461, 15465, 15469, 15473, 0, 14648, 14300, 14306, 14312, 14318, 14324, 14330, 14336, 14342, 14348, 14552, 14558, 14606, 14636, 12728, 12733, 12738, 12743, 12748, 12753, 13084, 13089, 13094, 13424, 13429, 13434, 13439, 13444, 13604, 15573, 15578, 15583, 15588, 15593, 15598, 15603, 15608, 15477, 15481, 15485, 15489, 0, 14746, 14354, 14360, 14366, 14372, 14378, 14384, 14390, 14396, 14582, 14630, 14672, 12758, 12763, 12768, 12773, 12778, 12783, 13099, 13104, 13449, 13454, 13459, 13464, 15493, 15497, 15501, 15505, 0, 14414, 14420, 14426, 14432, 14438, 14444, 14450, 14594, 14624, 14654, 14714, 13134, 13469, 13474, 13479, 13484, 13489, 13609, 13614, 12788, 12793, 12798, 12803, 12808, 12813, 13109, 13114, 13119, 13124, 13129, 15509, 15513, 15517, 15521, 0, 14402, 14408, 12823, 12828, 12833, 13494, 13504, 13499, 12818, 15525, 15529, 15533, 15537, 0, 14774, 1963, 15541, 15545, 0, 12878, 13139, 12299, 12303, 15549, 15553, 0, 14456, 14462, 14564, 14570, 14576, 12858, 12863, 13144, 13149, 13154, 13159, 13164, 13169, 13509, 13514, 13519, 13524, 13529, 13619, 13624, 1973, 12838, 12843, 12848, 12853, 15557, 15561, 15565, 15569, 0, 11823, 11827, 0, 12255, 0, 11911, 11915, 11919, 11923, 0, 11879, 11883, 11887, 11891, 0, 11831, 11835, 11839, 11843, 0, 11847, 11851, 11855, 11859, 0, 11895, 11899, 11903, 11907, 0, 11863, 11867, 11871, 11875, 0, 11975, 11979, 11983, 11987, 0, 11959, 11963, 11967, 11971, 0, 11991, 11995, 11999, 12003, 0, 12007, 12011, 12015, 12019, 0, 12047, 12051, 0, 12031, 12035, 0, 12023, 12027, 0, 12039, 12043, 0, 12063, 12067, 0, 12055, 12059, 0, 11927, 11931, 11935, 11939, 0, 11943, 11947, 11951, 11955, 0, 12071, 12075, 12079, 12083, 0, 12215, 12219, 12223, 12227, 0, 12087, 12091, 12095, 12099, 0, 12119, 12123, 12127, 12131, 0, 12103, 12107, 12111, 12115, 0, 12135, 12139, 0, 12143, 12147, 12151, 12155, 0, 12183, 12187, 12191, 12195, 0, 12159, 12163, 0, 2003, 12167, 12171, 12175, 12179, 0, 12267, 12271, 0, 12239, 12243, 0, 12231, 12235, 0, 12247, 12251, 0, 12275, 12279, 0, 12259, 12263, 0, 12397, 12401, 12405, 12409, 0, 12283, 12287, 12291, 12295, 0, 2008, 12199, 12203, 0, 12207, 12211, 0, 1998, 0, 2028, 0, 2033, 0, 2038, 0, 2043, 0, 2048, 0, 2053, 0, 2013, 0, 2058, 0, 2063, 0, 2018, 0, 2023, 0, 2078, 0, 2083, 0, 2088, 0, 2068, 2073, 0, 2103, 0, 2108, 0, 2113, 0, 2118, 0, 2093, 0, 2098, 0, 2138, 0, 2143, 0, 2123, 2128, 2133, 0, 2148, 0, 2153, 2163, 0, 2158, 0, 2168, 0, 2173, 0, 2178, 2183, 2188, 0, 2193, 0, 2198, 2208, 0, 2203, 0, 2213, 2218, 2228, 0, 2223, 0, 2282, 0, 2257, 0, 2262, 0, 2267, 0, 2272, 0, 2277, 0, 2287, 2292, 2317, 0, 2347, 0, 2322, 0, 2327, 0, 2332, 0, 2337, 0, 2342, 0, 2297, 0, 2307, 0, 2352, 0, 2637, 0, 2642, 0, 2817, 0, 2822, 0, 2877, 0, 2882, 0, 3197, 3247, 0, 3202, 3252, 0, 3327, 0, 3332, 0, 3417, 0, 3422, 0, 3597, 3607, 3617, 4150, 0, 3602, 3612, 3622, 4155, 0, 4160, 0, 4165, 0, 4170, 0, 4175, 0, 4180, 0, 4185, 0, 3637, 3647, 3657, 4190, 0, 3642, 3652, 3662, 4195, 0, 4200, 0, 4205, 0, 4210, 0, 4215, 0, 4220, 0, 4225, 0, 3677, 3687, 0, 3682, 3692, 0, 3707, 3717, 0, 3712, 3722, 0, 3737, 3747, 3757, 4230, 0, 3742, 3752, 3762, 4235, 0, 4240, 0, 4245, 0, 4250, 0, 4255, 0, 4260, 0, 4265, 0, 3777, 3787, 3797, 4270, 0, 3782, 3792, 3802, 4275, 0, 4280, 0, 4285, 0, 4290, 0, 4295, 0, 4300, 0, 4305, 0, 3817, 3827, 3837, 0, 3822, 3832, 3842, 0, 3857, 3867, 3877, 0, 3862, 3872, 3882, 0, 3897, 3907, 0, 3902, 3912, 0, 3927, 3937, 0, 3932, 3942, 0, 3957, 3967, 3977, 0, 3962, 3972, 3982, 0, 3992, 3997, 4002, 0, 4017, 4027, 4037, 4310, 0, 4022, 4032, 4042, 4315, 0, 4320, 0, 4325, 0, 4330, 0, 4335, 0, 4340, 0, 4345, 0, 4057, 4067, 4077, 4350, 0, 4062, 4072, 4082, 4355, 0, 4360, 0, 4365, 0, 4370, 0, 4375, 0, 4380, 0, 4385, 0, 4400, 0, 4473, 0, 4675, 0, 4420, 0, 4521, 4526, 4531, 0, 4493, 0, 4695, 0, 4584, 4589, 4594, 0, 5391, 0, 5396, 0, 5401, 0, 5406, 0, 5416, 0, 5411, 0, 5421, 0, 5426, 0, 5431, 0, 5436, 0, 5441, 0, 5468, 0, 5473, 0, 5478, 0, 5483, 0, 5498, 0, 5493, 0, 5513, 0, 5518, 0, 5523, 0, 5528, 0, 5533, 0, 5538, 0, 5543, 0, 5548, 0, 5593, 0, 5598, 0, 5553, 0, 5558, 0, 5563, 0, 5568, 0, 5603, 0, 5608, 0, 5573, 0, 5578, 0, 5583, 0, 5588, 0, 5613, 0, 5618, 0, 5623, 0, 5628, 0, 7351, 0, 7226, 0, 7231, 0, 7236, 0, 7241, 0, 7246, 0, 7251, 0, 7256, 0, 7261, 0, 7266, 0, 7271, 0, 7276, 0, 7281, 0, 7286, 0, 7291, 0, 7296, 0, 7301, 7306, 0, 7311, 7316, 0, 7321, 7326, 0, 7331, 7336, 0, 7341, 7346, 0, 7366, 0, 7496, 0, 7371, 0, 7376, 0, 7381, 0, 7386, 0, 7391, 0, 7396, 0, 7401, 0, 7406, 0, 7411, 0, 7416, 0, 7421, 0, 7426, 0, 7431, 0, 7436, 0, 7441, 0, 7446, 7451, 0, 7456, 7461, 0, 7466, 7471, 0, 7476, 7481, 0, 7486, 7491, 0, 7501, 0, 7506, 0, 7511, 0, 7516, 0, 7521, 0, 11668, 11673, 0, }; static const Q_UINT16 li_00[] = { 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 18, 20, 0, 0, 22, 39, 43, 49, 56, 74, 76, 84, 92, 108, 110, 116, 123, 127, 137, 154, 0, 157, 166, 174, 182, 202, 205, 212, 215, 225, 0, 0, 0, 0, 0, 0, 232, 249, 253, 259, 266, 284, 286, 294, 303, 318, 321, 327, 334, 338, 348, 365, 0, 368, 377, 385, 394, 414, 417, 425, 428, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 455, 457, 459, 462, 0, 0, 464, 0, 0, 0, 0, 469, 0, 0, 0, 0, 471, 476, 480, 0, 482, 0, 0, 0, 484, 0, 0, 0, 0, 0, 489, 0, 494, 496, 498, 501, 0, 0, 503, 0, 0, 0, 0, 508, 0, 0, 0, 0, 510, 515, 519, 0, 521, 0, 0, 0, 523, 0, 0, 0, }; static const Q_UINT16 li_01[] = { 0, 0, 528, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 552, 0, 0, 0, 0, 554, 556, 0, 0, 0, 0, 0, 0, 558, 560, 562, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 586, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_02[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 600, 602, 604, 0, 0, 0, 0, 606, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_03[] = { 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 622, 0, 627, 0, 633, 0, 0, 0, 0, 0, 641, 0, 646, 0, 0, 0, 648, 0, 0, 0, 655, 0, 0, 661, 0, 663, 0, 0, 665, 0, 0, 0, 674, 0, 679, 0, 686, 0, 0, 0, 0, 0, 695, 0, 700, 0, 0, 0, 703, 0, 0, 0, 712, 719, 723, 0, 0, 727, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_04[] = { 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 737, 0, 739, 743, 746, 748, 0, 753, 0, 0, 0, 755, 0, 0, 0, 0, 757, 0, 0, 0, 762, 0, 0, 0, 764, 0, 766, 0, 0, 768, 0, 0, 771, 0, 773, 777, 780, 782, 0, 787, 0, 0, 0, 789, 0, 0, 0, 0, 791, 0, 0, 0, 796, 0, 0, 0, 798, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 804, 806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 808, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 812, 814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_05[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 820, 823, 825, 827, 829, 832, 0, 834, 836, 839, 841, 844, 0, 846, 0, 848, 850, 0, 852, 854, 0, 857, 859, 861, 863, 867, 0, 0, 0, 0, 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_06[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 871, 873, 876, 879, 882, 885, 926, 936, 962, 965, 1003, 1021, 1041, 1057, 1071, 1074, 1078, 1083, 1086, 1121, 1158, 1183, 1206, 1224, 1232, 1252, 0, 0, 0, 0, 0, 1268, 1278, 1298, 1316, 1344, 1386, 1415, 1450, 1464, 1469, 1476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1506, 0, 0, 0, 0, 0, 1509, 0, 1511, 1516, 1521, 0, 0, 1526, 1531, 1536, 0, 0, 1541, 1546, 0, 1551, 1556, 1561, 0, 0, 0, 1564, 1567, 1570, 0, 0, 1573, 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1579, 0, 1584, 0, 0, 1589, 0, 0, 0, 1594, 0, 1599, 0, 1604, 0, 1609, 0, 0, 0, 0, 0, 0, 1614, 1617, 0, 0, 1622, 0, 1627, 1630, 0, 0, 0, 1636, 1639, 1642, 1645, 1648, 0, 1651, 1654, 0, 0, 0, 1659, 0, 1664, 1668, 0, 1671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_07[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_09[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1673, 1675, 1677, 0, 0, 0, 0, 1679, 0, 0, 0, 0, 1681, 1683, 0, 0, 0, 0, 0, 1685, 0, 0, 1687, 0, 0, 0, 1689, 1691, 0, 0, 1693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1695, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_0A[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1704, 1706, 0, 0, 0, 0, 1708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_0B[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1716, 1718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1726, 1729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_0C[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1733, 0, 0, 0, 0, 0, 0, 1735, 0, 0, 0, 1739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_0D[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1741, 1744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1746, 0, 0, 1750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_0F[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1752, 0, 1754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1756, 0, 0, 0, 0, 1758, 0, 0, 0, 0, 1760, 0, 0, 0, 0, 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1768, 0, 1770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1772, 0, 0, 0, 0, 1774, 0, 0, 0, 0, 1776, 0, 0, 0, 0, 1778, 0, 0, 0, 0, 0, 0, 1780, 1782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_10[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_1E[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1786, 1788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1790, 1792, 0, 0, 0, 0, 0, 0, 1794, 1796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1798, 1801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1804, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1808, 1810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_1F[] = { 1812, 1817, 1822, 1824, 1826, 1828, 1830, 1832, 1834, 1839, 1844, 1846, 1848, 1850, 1852, 1854, 1856, 1859, 0, 0, 0, 0, 0, 0, 1862, 1865, 0, 0, 0, 0, 0, 0, 1868, 1873, 1878, 1880, 1882, 1884, 1886, 1888, 1890, 1895, 1900, 1902, 1904, 1906, 1908, 1910, 1912, 1916, 0, 0, 0, 0, 0, 0, 1920, 1924, 0, 0, 0, 0, 0, 0, 1928, 1931, 0, 0, 0, 0, 0, 0, 1934, 1937, 0, 0, 0, 0, 0, 0, 1940, 1944, 0, 0, 0, 0, 0, 0, 0, 1948, 0, 0, 0, 0, 0, 0, 1952, 1957, 1962, 1964, 1966, 1968, 1970, 1972, 1974, 1979, 1984, 1986, 1988, 1990, 1992, 1994, 1996, 0, 0, 0, 1998, 0, 0, 0, 0, 0, 0, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2002, 0, 0, 0, 0, 0, 0, 0, 0, 2004, 0, 0, 0, 0, 0, 0, 2008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2010, 0, 0, 0, 0, 0, 0, 0, 2012, 0, }; static const Q_UINT16 li_21[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2016, 0, 2018, 0, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 2024, 0, 2026, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_22[] = { 0, 0, 0, 2028, 0, 0, 0, 0, 2030, 0, 0, 2032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2034, 0, 2036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2038, 0, 0, 0, 0, 0, 0, 2040, 0, 2042, 0, 0, 2044, 0, 0, 0, 0, 2046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 0, 2050, 2052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2054, 2056, 0, 0, 2058, 2060, 0, 0, 2062, 2064, 2066, 2068, 0, 0, 0, 0, 2070, 2072, 0, 0, 2074, 2076, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2078, 2080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2082, 0, 0, 0, 0, 0, 2084, 2086, 0, 2088, 0, 0, 0, 0, 0, 0, 2090, 2092, 2094, 2096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 li_30[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2098, 0, 0, 0, 0, 2100, 0, 2102, 0, 2104, 0, 2106, 0, 2108, 0, 2110, 0, 2112, 0, 2114, 0, 2116, 0, 2118, 0, 2120, 0, 2122, 0, 0, 2124, 0, 2126, 0, 2128, 0, 0, 0, 0, 0, 0, 2130, 0, 0, 2133, 0, 0, 2136, 0, 0, 2139, 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2145, 0, 0, 0, 0, 0, 0, 0, 0, 2147, 0, 0, 0, 0, 2149, 0, 2151, 0, 2153, 0, 2155, 0, 2157, 0, 2159, 0, 2161, 0, 2163, 0, 2165, 0, 2167, 0, 2169, 0, 2171, 0, 0, 2173, 0, 2175, 0, 2177, 0, 0, 0, 0, 0, 0, 2179, 0, 0, 2182, 0, 0, 2185, 0, 0, 2188, 0, 0, 2191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2194, 2196, 2198, 2200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2202, 0, 0, }; static const Q_UINT16 li_FB[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 * const ligature_info[256] = { li_00, li_01, li_02, li_03, li_04, li_05, li_06, li_07, li_07, li_09, li_0A, li_0B, li_0C, li_0D, li_07, li_0F, li_10, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_1E, li_1F, li_07, li_21, li_22, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_30, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_FB, li_07, li_07, li_07, li_07, }; // 16188 bytes static const Q_UINT8 dir_00[] = { 18, 18, 18, 18, 18, 18, 18, 18, 18, 8, 7, 8, 9, 7, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 7, 7, 7, 8, 9, 10, 10, 4, 4, 4, 10, 10, 138, 138, 10, 4, 6, 4, 6, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 10, 138, 10, 138, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 10, 138, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 10, 138, 10, 18, 18, 18, 18, 18, 18, 7, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 6, 10, 4, 4, 4, 4, 10, 10, 10, 10, 0, 138, 10, 10, 10, 10, 4, 4, 2, 2, 10, 0, 10, 10, 10, 2, 0, 138, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_01[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_02[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_03[] = { 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_04[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_05[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 1, 17, 1, 17, 17, 1, 17, 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, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_06[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 13, 0, 13, 77, 77, 77, 77, 45, 77, 45, 77, 45, 45, 45, 45, 45, 77, 77, 77, 77, 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 0, 0, 109, 45, 45, 45, 45, 45, 45, 45, 77, 77, 45, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 13, 0, 0, 17, 13, 77, 77, 13, 77, 77, 77, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 77, 45, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 45, 77, 45, 77, 45, 45, 77, 77, 13, 13, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 17, 17, 10, 17, 17, 17, 17, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 45, 45, 45, 13, 13, 0, }; static const Q_UINT8 dir_07[] = { 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 18, 77, 17, 45, 45, 45, 77, 77, 77, 77, 77, 45, 45, 45, 45, 77, 45, 45, 45, 45, 45, 45, 45, 45, 45, 77, 45, 77, 45, 77, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_09[] = { 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 0, 0, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_0A[] = { 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_0B[] = { 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 17, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_0C[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 17, 17, 17, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_0D[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_0E[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 17, 17, 17, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_0F[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_10[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 0, 17, 0, 0, 0, 17, 17, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_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, 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, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_17[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 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, }; static const Q_UINT8 dir_18[] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_1F[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, }; static const Q_UINT8 dir_20[] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 0, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 7, 11, 14, 16, 12, 15, 9, 4, 4, 4, 4, 4, 10, 10, 10, 10, 138, 138, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 138, 138, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 4, 4, 10, 138, 138, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 10, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_21[] = { 10, 10, 0, 10, 10, 10, 10, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 10, 0, 10, 0, 10, 0, 0, 0, 0, 4, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_22[] = { 10, 138, 138, 138, 138, 10, 10, 10, 138, 138, 138, 138, 138, 138, 10, 10, 10, 138, 4, 4, 10, 138, 138, 10, 10, 10, 138, 138, 138, 138, 10, 138, 138, 138, 138, 10, 138, 10, 138, 10, 10, 10, 10, 138, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 10, 10, 10, 138, 10, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 10, 10, 10, 138, 138, 138, 138, 10, 10, 10, 10, 10, 10, 10, 10, 10, 138, 138, 10, 138, 10, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 138, 138, 138, 138, 10, 10, 10, 10, 10, 138, 10, 10, 10, 10, 10, 10, 10, 10, 10, 138, 138, 10, 10, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 10, 10, 10, 138, 138, 10, 10, 10, 10, 10, 10, 10, 10, 10, 138, 138, 138, 138, 138, 10, 10, 138, 138, 10, 10, 10, 10, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_23[] = { 10, 10, 10, 10, 10, 10, 10, 10, 138, 138, 138, 138, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 138, 138, 10, 10, 10, 10, 10, 10, 10, 138, 138, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_24[] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_25[] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_26[] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_27[] = { 0, 10, 10, 10, 10, 0, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 0, 10, 10, 10, 10, 0, 0, 0, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_28[] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, }; static const Q_UINT8 dir_2E[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_2F[] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, }; static const Q_UINT8 dir_30[] = { 9, 10, 10, 10, 10, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 138, 138, 138, 138, 138, 138, 138, 138, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 10, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, }; static const Q_UINT8 dir_A4[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 10, 10, 10, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT8 dir_FB[] = { 0, 0, 0, 0, 0, 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, 17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, }; static const Q_UINT8 dir_FC[] = { 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, }; static const Q_UINT8 dir_FD[] = { 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, }; static const Q_UINT8 dir_FE[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 6, 10, 6, 0, 10, 6, 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 10, 10, 4, 4, 10, 10, 10, 0, 10, 4, 4, 10, 0, 0, 0, 0, 13, 13, 13, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 18, }; static const Q_UINT8 dir_FF[] = { 0, 10, 10, 4, 4, 4, 10, 10, 10, 10, 10, 4, 6, 4, 6, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 10, 10, 10, 4, 4, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 10, 10, 0, 0, }; static const Q_UINT8 * const direction_info[256] = { dir_00, dir_01, dir_02, dir_03, dir_04, dir_05, dir_06, dir_07, dir_01, dir_09, dir_0A, dir_0B, dir_0C, dir_0D, dir_0E, dir_0F, dir_10, dir_01, dir_01, dir_01, dir_01, dir_01, dir_16, dir_17, dir_18, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_1F, dir_20, dir_21, dir_22, dir_23, dir_24, dir_25, dir_26, dir_27, dir_28, dir_01, dir_01, dir_01, dir_01, dir_01, dir_2E, dir_2F, dir_30, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_A4, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_FB, dir_FC, dir_FD, dir_FE, dir_FF, }; // 26940 bytes #endif // END OF GENERATED DATA // This is generated too. Script? #ifndef QT_NO_UNICODETABLES static const Q_UINT16 case_0 [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0, 0, 0, 0, 0, 0, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0, 0, 0, 0, 0x0, 0, 0, 0, 0, 0, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x0, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178, }; static const Q_UINT16 case_1 [] = { 0x101, 0x100, 0x103, 0x102, 0x105, 0x104, 0x107, 0x106, 0x109, 0x108, 0x10b, 0x10a, 0x10d, 0x10c, 0x10f, 0x10e, 0x111, 0x110, 0x113, 0x112, 0x115, 0x114, 0x117, 0x116, 0x119, 0x118, 0x11b, 0x11a, 0x11d, 0x11c, 0x11f, 0x11e, 0x121, 0x120, 0x123, 0x122, 0x125, 0x124, 0x127, 0x126, 0x129, 0x128, 0x12b, 0x12a, 0x12d, 0x12c, 0x12f, 0x12e, 0x69, 0x49, 0x133, 0x132, 0x135, 0x134, 0x137, 0x136, 0x0, 0x13a, 0x139, 0x13c, 0x13b, 0x13e, 0x13d, 0x140, 0x13f, 0x142, 0x141, 0x144, 0x143, 0x146, 0x145, 0x148, 0x147, 0x0, 0x14b, 0x14a, 0x14d, 0x14c, 0x14f, 0x14e, 0x151, 0x150, 0x153, 0x152, 0x155, 0x154, 0x157, 0x156, 0x159, 0x158, 0x15b, 0x15a, 0x15d, 0x15c, 0x15f, 0x15e, 0x161, 0x160, 0x163, 0x162, 0x165, 0x164, 0x167, 0x166, 0x169, 0x168, 0x16b, 0x16a, 0x16d, 0x16c, 0x16f, 0x16e, 0x171, 0x170, 0x173, 0x172, 0x175, 0x174, 0x177, 0x176, 0xff, 0x17a, 0x179, 0x17c, 0x17b, 0x17e, 0x17d, 0x53, 0x0, 0x253, 0x183, 0x182, 0x185, 0x184, 0x254, 0x188, 0x187, 0x256, 0x257, 0x18c, 0x18b, 0x0, 0x1dd, 0x259, 0x25b, 0x192, 0x191, 0x260, 0x263, 0x3d9, 0x269, 0x268, 0x199, 0x198, 0x51, 0x0, 0x26f, 0x272, 0x0, 0x275, 0x1a1, 0x1a0, 0x1a3, 0x1a2, 0x1a5, 0x1a4, 0x280, 0x1a8, 0x1a7, 0x283, 0, 0x0, 0x1ad, 0x1ac, 0x288, 0x1b0, 0x1af, 0x28a, 0x28b, 0x1b4, 0x1b3, 0x1b6, 0x1b5, 0x292, 0x1b9, 0x1b8, 0x0, 0, 0x1bd, 0x1bc, 0, 0, 0, 0, 0, 0, 0x1c6, 0, 0x1c4, 0x1c9, 0, 0x1c7, 0x1cc, 0, 0x1ca, 0x1ce, 0x1cd, 0x1d0, 0x1cf, 0x1d2, 0x1d1, 0x1d4, 0x1d3, 0x1d6, 0x1d5, 0x1d8, 0x1d7, 0x1da, 0x1d9, 0x1dc, 0x1db, 0x18e, 0x1df, 0x1de, 0x1e1, 0x1e0, 0x1e3, 0x1e2, 0x1e5, 0x1e4, 0x1e7, 0x1e6, 0x1e9, 0x1e8, 0x1eb, 0x1ea, 0x1ed, 0x1ec, 0x1ef, 0x1ee, 0x0, 0x1f3, 0, 0x1f1, 0x1f5, 0x1f4, 0, 0, 0, 0, 0x1fb, 0x1fa, 0x1fd, 0x1fc, 0x1ff, 0x1fe, }; static const Q_UINT16 case_2 [] = { 0x201, 0x200, 0x203, 0x202, 0x205, 0x204, 0x207, 0x206, 0x209, 0x208, 0x20b, 0x20a, 0x20d, 0x20c, 0x20f, 0x20e, 0x211, 0x210, 0x213, 0x212, 0x215, 0x214, 0x217, 0x216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0x0, 0x0, 0x181, 0x186, 0x0, 0x189, 0x18a, 0x0, 0x18f, 0x0, 0x190, 0x0, 0x0, 0x0, 0x0, 0x193, 0x0, 0x0, 0x194, 0x0, 0x0, 0x631, 0x579, 0x197, 0x196, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19c, 0x0, 0x0, 0x19d, 0x0, 0x0, 0x19f, 0x0, 0x0, 0x0, 0x0, 0x7e1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a6, 0x0, 0x0, 0x1a9, 0x0, 0x0, 0x0, 0x0, 0x1ae, 0x0, 0x1b1, 0x1b2, 0x0, 0xa21, 0x971, 0x0, 0x0, 0x0, 0x1b7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_3 [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3ac, 0, 0x3ad, 0x3ae, 0x3af, 0, 0x3cc, 0, 0x3cd, 0x3ce, 0x0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c0, 0x3c1, 0, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x386, 0x388, 0x389, 0x38a, 0x0, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a3, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x38c, 0x38e, 0x38f, 0, 0x392, 0x398, 0x0, 0x0, 0x0, 0x3a6, 0x3a0, 0, 0, 0, 0x0, 0, 0x0, 0, 0x0, 0, 0x0, 0, 0x3e3, 0x3e2, 0x3e5, 0x3e4, 0x3e7, 0x3e6, 0x3e9, 0x3e8, 0x3eb, 0x3ea, 0x3ed, 0x3ec, 0x3ef, 0x3ee, 0x39a, 0x3a1, 0x3a3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_4 [] = { 0, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0, 0x45e, 0x45f, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0, 0x40e, 0x40f, 0x461, 0x460, 0x463, 0x462, 0x465, 0x464, 0x467, 0x466, 0x469, 0x468, 0x46b, 0x46a, 0x46d, 0x46c, 0x46f, 0x46e, 0x471, 0x470, 0x473, 0x472, 0x475, 0x474, 0x477, 0x476, 0x479, 0x478, 0x47b, 0x47a, 0x47d, 0x47c, 0x47f, 0x47e, 0x481, 0x480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x491, 0x490, 0x493, 0x492, 0x495, 0x494, 0x497, 0x496, 0x499, 0x498, 0x49b, 0x49a, 0x49d, 0x49c, 0x49f, 0x49e, 0x4a1, 0x4a0, 0x4a3, 0x4a2, 0x4a5, 0x4a4, 0x4a7, 0x4a6, 0x4a9, 0x4a8, 0x4ab, 0x4aa, 0x4ad, 0x4ac, 0x4af, 0x4ae, 0x4b1, 0x4b0, 0x4b3, 0x4b2, 0x4b5, 0x4b4, 0x4b7, 0x4b6, 0x4b9, 0x4b8, 0x4bb, 0x4ba, 0x4bd, 0x4bc, 0x4bf, 0x4be, 0, 0x4c2, 0x4c1, 0x4c4, 0x4c3, 0, 0, 0x4c8, 0x4c7, 0, 0, 0x4cc, 0x4cb, 0, 0, 0, 0x4d1, 0x4d0, 0x4d3, 0x4d2, 0x4d5, 0x4d4, 0x4d7, 0x4d6, 0x4d9, 0x4d8, 0x4db, 0x4da, 0x4dd, 0x4dc, 0x4df, 0x4de, 0x4e1, 0x4e0, 0x4e3, 0x4e2, 0x4e5, 0x4e4, 0x4e7, 0x4e6, 0x4e9, 0x4e8, 0x4eb, 0x4ea, 0, 0, 0x4ef, 0x4ee, 0x4f1, 0x4f0, 0x4f3, 0x4f2, 0x4f5, 0x4f4, 0, 0, 0x4f9, 0x4f8, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_5 [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f, 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f, 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_10 [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_1e [] = { 0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09, 0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10, 0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b, 0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22, 0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d, 0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34, 0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f, 0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46, 0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51, 0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58, 0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63, 0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a, 0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75, 0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c, 0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87, 0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e, 0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e60, 0, 0, 0, 0, 0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9, 0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0, 0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb, 0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2, 0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd, 0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4, 0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf, 0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6, 0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1, 0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_1f [] = { 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0, 0, 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0, 0, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0, 0, 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0, 0, 0x0, 0x1f59, 0x0, 0x1f5b, 0x0, 0x1f5d, 0x0, 0x1f5f, 0, 0x1f51, 0, 0x1f53, 0, 0x1f55, 0, 0x1f57, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb, 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, 0x1feb, 0x1ffa, 0x1ffb, 0, 0, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fb8, 0x1fb9, 0x0, 0x1fbc, 0x0, 0, 0x0, 0x0, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0, 0x399, 0, 0, 0, 0x0, 0x1fcc, 0x0, 0, 0x0, 0x0, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1fc3, 0, 0, 0, 0x1fd8, 0x1fd9, 0x0, 0x0, 0, 0, 0x0, 0x0, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0, 0, 0, 0, 0x1fe8, 0x1fe9, 0x0, 0x0, 0x0, 0x1fec, 0x0, 0x0, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0, 0, 0, 0, 0, 0x0, 0x1ffc, 0x0, 0, 0x0, 0x0, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0, 0, 0, }; static const Q_UINT16 case_20 [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_21 [] = { 0, 0, 0x0, 0, 0, 0, 0, 0x0, 0, 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0x0, 0, 0, 0x761, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0, 0x0, 0, 0x0, 0, 0x0, 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0x0, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_fb [] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 case_ff [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0, 0, 0, 0, 0, 0, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const Q_UINT16 * const case_info[256] = { case_0, case_1, case_2, case_3, case_4, case_5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, case_10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, case_1e, case_1f, case_20, case_21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, case_fb, 0, 0, 0, case_ff, }; static const Q_INT8 num_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, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_6 [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_9 [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_b [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_d [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_e [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_f [] = { -1, -1, -1, -1, -1, -1, -1, -1, -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, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_20 [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 num_ff [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const Q_INT8 * const decimal_info[256] = { num_0, 0, 0, 0, 0, 0, num_6, 0, 0, num_9, num_9, num_b, num_9, num_d, num_e, num_f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, num_20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, num_ff, }; static const Q_UINT16 symmetricPairs[] = { 0x0028, 0x0029, 0x0029, 0x0028, 0x003C, 0x003E, 0x003E, 0x003C, 0x005B, 0x005D, 0x005D, 0x005B, 0x007B, 0x007D, 0x007D, 0x007B, 0x2045, 0x2046, 0x2046, 0x2045, 0x207D, 0x207E, 0x207E, 0x207D, 0x208D, 0x208E, 0x208E, 0x208D, 0x3008, 0x3009, 0x3009, 0x3008, 0x300A, 0x300B, 0x300B, 0x300A, 0x300C, 0x300D, 0x300D, 0x300C, 0x300E, 0x300F, 0x300F, 0x300E, 0x3010, 0x3011, 0x3011, 0x3010, 0x3014, 0x3015, 0x3015, 0x3014, 0x3016, 0x3017, 0x3017, 0x3016, 0x3018, 0x3019, 0x3019, 0x3018, 0x301A, 0x301B, 0x301B, 0x301A, 0xFD3E, 0xFD3F, 0xFD3F, 0xFD3E, 0xFE59, 0xFE5A, 0xFE5A, 0xFE59, 0xFE5B, 0xFE5C, 0xFE5C, 0xFE5B, 0xFE5D, 0xFE5E, 0xFE5E, 0xFE5D, 0xFF08, 0xFF09, 0xFF09, 0xFF08, 0xFF3B, 0xFF3D, 0xFF3D, 0xFF3B, 0xFF5B, 0xFF5D, 0xFF5D, 0xFF5B, 0xFF62, 0xFF63, 0xFF63, 0xFF62, }; static int symmetricPairsSize = sizeof(symmetricPairs)/sizeof(symmetricPairs[0]); /* * ---------------------------------------------------------------------- * End of unicode tables * ---------------------------------------------------------------------- */ #endif static int ucstrcmp( const QString &as, const QString &bs ) { const QChar *a = as.unicode(); const QChar *b = bs.unicode(); if ( a == b ) return 0; if ( a == 0 ) return 1; if ( b == 0 ) return -1; int l=QMIN(as.length(),bs.length()); while ( l-- && *a == *b ) a++,b++; if ( l==-1 ) return ( as.length()-bs.length() ); return a->unicode() - b->unicode(); } static int ucstrncmp( const QChar *a, const QChar *b, int l ) { while ( l-- && *a == *b ) a++,b++; if ( l==-1 ) return 0; return a->unicode() - b->unicode(); } static int ucstrnicmp( const QChar *a, const QChar *b, int l ) { while ( l-- && a->lower() == b->lower() ) a++,b++; if ( l==-1 ) return 0; QChar al = a->lower(); QChar bl = b->lower(); return al.unicode() - bl.unicode(); } // NOT REVISED /*! \class QCharRef qstring.h \brief The QCharRef class is a helper class for QString. It provides the ability to work on characters in a QString in a natural fashion. When you get an object of type QCharRef, you can assign to it, which will operate on the string from which you got it. That is its whole purpose in life. It becomes invalid once further modifications are made to the string: If you want to keep it, copy it into a QChar. Most of the QChar member functions also exist in QCharRef. However, they are not explicitly documented here. \sa QString::operator[]() QString::at() QChar */ /*! \class QChar qstring.h \brief The QChar class provides a light-weight Unicode character. Unicode characters are (so far) 16-bit entities without any markup or structure. This class represents such an entity. It is rather light-weight, so it can be used everywhere. Most compilers treat it approximately like "short int". (In a few years, it may be necessary to make QChar 32-bit, once more than 65536 Unicode code points have been defined and come into use.) QChar provides a full complement of testing/classification functions, conversion to and from other formats, from composed to decomposed unicode, and will try to compare and case-convert if you ask it to. The classification functions include functions like those in ctype.h, but operating on the full range of unicode characters. They all return TRUE if the character is a certain type of character, and FALSE otherwise. These functions are: isNull() (returns TRUE if the character is U+0000), isPrint() (TRUE if the character is any sort of printable character, including whitespace), isPunct() (any sort of punctation), isMark() (Unicode Marks), isLetter (letters), isNumber() (any sort of numeric characters), isLetterOrNumber(), and isDigit() (decimal digits). All of these are wrappers around category(), which returns the unicode-defined category of each character. QChar further provides direction(), which indicates the "natural" writing direction of this character, joining(), which indicates how this character joins with its neighbors (needed mostly for Arabic) and finally mirrored(), which indicates whether this character needs to be mirrored when it is printed in its unnatural writing direction. Composed Unicode characters (like å) can be converted to decomposed Unicode ("a" followed by "ring above") using decomposition(). In Unicode, comparison is not necessarily possible, and case conversion is at best very hard. Unicode, covering the "entire" globe, also includes a globe-sized collection of case and sorting problems. Qt tries, but not very hard: operator== and friends will do comparison based purely on the numeric Unicode value (code point) of the characters, and upper() and lower() will do case changes when the character has a well-defined upper/lower-case equivalent. There is no provision for locale-dependent case folding rules or comparison: These functions are meant to be fast, so they can be used unambiguously in data structures. The conversion functions include unicode() (to a scalar), latin1() (to scalar, but converts all non-Latin1 characters to 0), row() (gives the Unicode row), cell() (gives the unicode cell), digitValue() (gives the integer value of any of the numerous digit characters), and a host of constructors. \sa QString QCharRef \link unicode.html About Unicode \endlink */ /*! \enum QChar::Category This enum maps the Unicode character categories. The currently known categories are:
  • \c NoCategory - used when Qt is dazed and confused and cannot make sense of anything.
  • \c Mark_NonSpacing - (Mn) -
  • \c Mark_SpacingCombining - (Mc) -
  • \c Mark_Enclosing - (Me) -
  • \c Number_DecimalDigit - (Nd) -
  • \c Number_Letter - (Nl) -
  • \c Number_Other - (No) -
  • \c Separator_Space - (Zs) -
  • \c Separator_Line - (Zl) -
  • \c Separator_Paragraph - (Zp) -
  • \c Other_Control - (Cc) -
  • \c Other_Format - (Cf) -
  • \c Other_Surrogate - (Cs) -
  • \c Other_PrivateUse - (Co) -
  • \c Other_NotAssigned - (Cn) -
  • \c Letter_Uppercase - (Lu) -
  • \c Letter_Lowercase - (Ll) -
  • \c Letter_Titlecase - (Lt) -
  • \c Letter_Modifier - (Lm) -
  • \c Letter_Other - (Lo) -
  • \c Punctuation_Connector - (Pc) -
  • \c Punctuation_Dask - (Pd) -
  • \c Punctuation_Open - (Ps) -
  • \c Punctuation_Close - (Pe) -
  • \c Punctuation_InitialQuote - (Pi) -
  • \c Punctuation_FinalQuote - (Pf) -
  • \c Punctuation_Other - (Po) -
  • \c Symbol_Math - (Sm) -
  • \c Symbol_Currency - (Sc) -
  • \c Symbol_Modifier - (Sk) -
  • \c Symbol_Other - (So) -
*/ /*! \enum QChar::Direction This enum type defines the Unicode direction attributes. See the Unicode Standard for a description of the values. In order to conform to C/C++ naming conventions "Dir" is prepended to the codes used in The Unicode Standard. */ /*! \enum QChar::Decomposition This enum type defines the Unicode decomposition attributes. See the Unicode Standard for a description of the values. */ /*! \enum QChar::Joining This enum type defines the Unicode decomposition attributes. See the Unicode Standard for a description of the values. */ /*! \fn QChar::QChar() Constructs a null QChar (one that isNull()). */ /*! \fn QChar::QChar( char c ) Constructs a QChar corresponding to ASCII/Latin1 character \a c. */ /*! \fn QChar::QChar( uchar c ) Constructs a QChar corresponding to ASCII/Latin1 character \a c. */ /*! \fn QChar::QChar( uchar c, uchar r ) Constructs a QChar for Unicode cell \a c in row \a r. */ /*! \fn QChar::QChar( const QChar& c ) Constructs a copy of \a c. This is a deep copy, if such a light-weight object can be said to have deep copies. */ /*! \fn QChar::QChar( ushort rc ) Constructs a QChar for the character with Unicode code point \a rc. */ /*! \fn QChar::QChar( short rc ) Constructs a QChar for the character with Unicode code point \a rc. */ /*! \fn QChar::QChar( uint rc ) Constructs a QChar for the character with Unicode code point \a rc. */ /*! \fn QChar::QChar( int rc ) Constructs a QChar for the character with Unicode code point \a rc. */ /*! \fn bool QChar::networkOrdered () Returns TRUE if this character is in network byte order (MSB first), and FALSE if it is not. This is a platform-dependent property, so we strongly advise against using this function in portable code. */ /*! \fn bool QChar::isNull() const Returns TRUE if the characters is the unicode character 0x0000, ie. ASCII NUL. */ /*! \fn uchar QChar::cell () const Returns the cell (least significant byte) of the Unicode character. */ /*! \fn uchar QChar::row () const Returns the row (most significant byte) of the Unicode character. */ /*! \fn uchar& QChar::cell () Returns a reference to the cell (least significant byte) of the Unicode character. */ /*! \fn uchar& QChar::row () Returns a reference to the row (most significant byte) of the Unicode character. */ /*! Returns whether the character is a printable character. This is any character not of category Cc or Cn. Note that this gives no indication of whether the character is available in some font. */ bool QChar::isPrint() const { Category c = category(); return !(c == Other_Control || c == Other_NotAssigned); } /*! Returns whether the character is a separator character (Separator_* categories). */ bool QChar::isSpace() const { if( !row() ) if( cell() >= 9 && cell() <=13 ) return TRUE; Category c = category(); return c >= Separator_Space && c <= Separator_Paragraph; } /*! Returns whether the character is a mark (Mark_* categories). */ bool QChar::isMark() const { Category c = category(); return c >= Mark_NonSpacing && c <= Mark_Enclosing; } /*! Returns whether the character is punctuation (Punctuation_* categories). */ bool QChar::isPunct() const { Category c = category(); return (c >= Punctuation_Connector && c <= Punctuation_Other); } /*! Returns whether the character is a letter (Letter_* categories). */ bool QChar::isLetter() const { Category c = category(); return (c >= Letter_Uppercase && c <= Letter_Other); } /*! Returns whether the character is a number (of any sort - Number_* categories). \sa isDigit() */ bool QChar::isNumber() const { Category c = category(); return c >= Number_DecimalDigit && c <= Number_Other; } /*! Returns whether the character is a letter or number (Letter_* or Number_* categories). */ bool QChar::isLetterOrNumber() const { Category c = category(); return (c >= Letter_Uppercase && c <= Letter_Other) || (c >= Number_DecimalDigit && c <= Number_Other); } /*! Returns whether the character is a decimal digit (Number_DecimalDigit). */ bool QChar::isDigit() const { return (category() == Number_DecimalDigit); } /*! Returns the numeric value of the digit, or -1 if the character is not a digit. */ int QChar::digitValue() const { #ifndef QT_NO_UNICODETABLES const Q_INT8 *dec_row = decimal_info[row()]; if( !dec_row ) return -1; return decimal_info[row()][cell()]; #else // ##### just latin1 if ( rw != 0 || cl < '0' || cl > '9' ) return -1; else return cl - '0'; #endif } /*! Returns the character category. \sa Category */ QChar::Category QChar::category() const { #ifndef QT_NO_UNICODETABLES return (Category)(unicode_info[row()][cell()]); #else // ### just ASCII if ( rw == 0 ) { return (Category)(ui_00[cell()]); } return Letter_Uppercase; //####### #endif } /*! Returns the characters directionality. \sa Direction */ QChar::Direction QChar::direction() const { #ifndef QT_NO_UNICODETABLES const Q_UINT8 *rowp = direction_info[row()]; if(!rowp) return QChar::DirL; return (Direction) ( *(rowp+cell()) &0x1f ); #else return DirL; #endif } /*! This function is not supported (it may change to use Unicode character classes). Returns information about the joining properties of the character (needed for arabic). */ QChar::Joining QChar::joining() const { #ifndef QT_NO_UNICODETABLES const Q_UINT8 *rowp = direction_info[row()]; if ( !rowp ) return QChar::OtherJoining; return (Joining) ((*(rowp+cell()) >> 5) &0x3); #else return OtherJoining; #endif } /*! Returns whether the character is a mirrored character (one that should be reversed if the text direction is reversed). */ bool QChar::mirrored() const { #ifndef QT_NO_UNICODETABLES const Q_UINT8 *rowp = direction_info[row()]; if ( !rowp ) return FALSE; return *(rowp+cell())>128; #else return FALSE; #endif } /*! Returns the mirrored char if this character is a mirrored char, the char itself otherwise */ QChar QChar::mirroredChar() const { #ifndef QT_NO_UNICODETABLES if(!mirrored()) return *this; int i; int c = unicode(); for (i = 0; i < symmetricPairsSize; i += 2) { if (symmetricPairs[i] == c) return symmetricPairs[i+1]; } return 0; #else return *this; #endif } /*! Decomposes a character into its parts. Returns QString::null if no decomposition exists. */ QString QChar::decomposition() const { #ifndef QT_NO_UNICODETABLES const Q_UINT16 *r = decomposition_info[row()]; if(!r) return QString::null; Q_UINT16 pos = r[cell()]; if(!pos) return QString::null; pos+=2; QString s; Q_UINT16 c; while((c = decomposition_map[pos++]) != 0) s += QChar(c); return s; #else return null; #endif } /*! Returns the tag defining the composition of the character. Returns QChar::Single if no decomposition exists. */ QChar::Decomposition QChar::decompositionTag() const { #ifndef QT_NO_UNICODETABLES const Q_UINT16 *r = decomposition_info[row()]; if(!r) return QChar::Single; Q_UINT16 pos = r[cell()]; if(!pos) return QChar::Single; return (QChar::Decomposition) decomposition_map[pos]; #else return Single; // ########### FIX eg. just latin1 #endif } /*! Returns the lowercase equivalent if the character is uppercase, or the character itself otherwise. */ QChar QChar::lower() const { #ifndef QT_NO_UNICODETABLES if(category() != Letter_Uppercase) return *this; Q_UINT16 lower = *(case_info[row()]+cell()); if(lower == 0) return *this; return lower; #else if (row()) return *this; else return QChar(tolower(latin1())); #endif } /*! Returns the uppercase equivalent if the character is lowercase, or the character itself otherwise. */ QChar QChar::upper() const { #ifndef QT_NO_UNICODETABLES if(category() != Letter_Lowercase) return *this; Q_UINT16 upper = *(case_info[row()]+cell()); if(upper == 0) return *this; return upper; #else if (row()) return *this; else return QChar(toupper(latin1())); #endif } /*! \fn QChar::operator char() const Returns the Latin1 character equivalent to the QChar, or 0. This is mainly useful for non-internationalized software. \sa unicode() */ /*! \fn ushort QChar::unicode() const Returns the numeric Unicode value equal to the QChar. Normally, you should use QChar objects as they are equivalent, but for some low-level tasks (eg. indexing into an array of Unicode information), this function is useful. */ /***************************************************************************** Documentation of QChar related functions *****************************************************************************/ /*! \fn int operator==( QChar c1, QChar c2 ) \relates QChar Returns TRUE if \a c1 and \a c2 are the same Unicode character. */ /*! \fn int operator==( char ch, QChar c ) \relates QChar Returns TRUE if \a c is the ASCII/Latin1 character \a ch. */ /*! \fn int operator==( QChar c, char ch ) \relates QChar Returns TRUE if \a c is the ASCII/Latin1 character \a ch. */ /*! \fn int operator!=( QChar c1, QChar c2 ) \relates QChar Returns TRUE if \a c1 and \a c2 are not the same Unicode character. */ /*! \fn int operator!=( char ch, QChar c ) \relates QChar Returns TRUE if \a c is not the ASCII/Latin1 character \a ch. */ /*! \fn int operator!=( QChar c, char ch ) \relates QChar Returns TRUE if \a c is not the ASCII/Latin1 character \a ch. */ /*! \fn int operator<=( QChar c1, QChar c2 ) \relates QChar Returns TRUE if the numeric Unicode value of \a c1 is less than that of \a c2, or they are the same Unicode character. */ /*! \fn int operator<=( QChar c, char ch ) \relates QChar Returns TRUE if the numeric Unicode value of \a c is less than or equal to that of the ASCII/Latin1 character \a ch. */ /*! \fn int operator<=( char ch, QChar c ) \relates QChar Returns TRUE if the numeric Unicode value of the ASCII/Latin1 character \a ch is less than or equal to that of \a c. */ /*! \fn int operator>=( QChar c1, QChar c2 ) \relates QChar Returns TRUE if the numeric Unicode value of \a c1 is greater than that of \a c2, or they are the same Unicode character. */ /*! \fn int operator>=( QChar c, char ch ) \relates QChar Returns TRUE if the numeric Unicode value of \a c is greater than or equal to that of the ASCII/Latin1 character \a ch. */ /*! \fn int operator>=( char ch, QChar c ) \relates QChar Returns TRUE if the numeric Unicode value of the ASCII/Latin1 character \a ch is greater than or equal to that of \a c. */ /*! \fn int operator<( QChar c1, QChar c2 ) \relates QChar Returns TRUE if the numeric Unicode value of \a c1 is less than that of \a c2. */ /*! \fn int operator<( QChar c, char ch ) \relates QChar Returns TRUE if the numeric Unicode value of \a c is less than that of the ASCII/Latin1 character \a ch. */ /*! \fn int operator<( char ch, QChar c ) \relates QChar Returns TRUE if the numeric Unicode value of the ASCII/Latin1 character \a ch is less than that of \a c. */ /*! \fn int operator>( QChar c1, QChar c2 ) \relates QChar Returns TRUE if the numeric Unicode value of \a c1 is greater than that of \a c2. */ /*! \fn int operator>( QChar c, char ch ) \relates QChar Returns TRUE if the numeric Unicode value of \a c is greater than that of the ASCII/Latin1 character \a ch. */ /*! \fn int operator>( char ch, QChar c ) \relates QChar Returns TRUE if the numeric Unicode value of the ASCII/Latin1 character \a ch is greater than that of \a c. */ #ifndef QT_NO_UNICODETABLES // small class used internally in QString::Compose() class QLigature { public: QLigature( QChar c ); Q_UINT16 first() { cur = ligatures; return cur ? *cur : 0; } Q_UINT16 next() { return cur && *cur ? *(cur++) : 0; } Q_UINT16 current() { return cur ? *cur : 0; } int match(QString & str, unsigned int index); QChar head(); QChar::Decomposition tag(); private: Q_UINT16 *ligatures; Q_UINT16 *cur; }; QLigature::QLigature( QChar c ) { const Q_UINT16 *r = ligature_info[c.row()]; if( !r ) ligatures = 0; else { const Q_UINT16 pos = r[c.cell()]; ligatures = (Q_UINT16 *)&(ligature_map[pos]); } cur = ligatures; } QChar QLigature::head() { if(current()) return QChar(decomposition_map[current()+1]); return QChar::null; } QChar::Decomposition QLigature::tag() { if(current()) return (QChar::Decomposition) decomposition_map[current()]; return QChar::Canonical; } int QLigature::match(QString & str, unsigned int index) { unsigned int i=index; if(!current()) return 0; Q_UINT16 lig = current() + 2; Q_UINT16 ch; while ((i < str.length()) && (ch = decomposition_map[lig])) { if (str[(int)i] != QChar(ch)) return 0; i++; lig++; } if (!decomposition_map[lig]) { return i-index; } return 0; } // this function is just used in QString::compose() static inline bool format(QChar::Decomposition tag, QString & str, int index, int len) { unsigned int l = index + len; unsigned int r = index; bool right = FALSE; bool left = ((l < str.length()) && ((str[(int)l].joining() == QChar::Dual) || (str[(int)l].joining() == QChar::Right))); if (r > 0) { r--; //printf("joining(right) = %d\n", str[(int)r].joining()); right = (str[(int)r].joining() == QChar::Dual); } switch (tag) { case QChar::Medial: return (left && right); case QChar::Initial: return (left && !right); case QChar::Final: return (right);// && !left); case QChar::Isolated: default: return (!right && !left); } } // format() #endif /* QString::compose() and visual() were developed by Gordon Tisher , with input from Lars Knoll , who developed the unicode data tables. */ /*! Note that this function is not supported in Qt 2.0, and is merely for experimental and illustrative purposes. It is mainly of interest to those experimenting with Arabic and other composition-rich texts. Applies possible ligatures to a QString, useful when composition-rich text requires rendering with glyph-poor fonts, but also makes compositions such as QChar(0x0041) ('A') and QChar(0x0308) (Unicode accent diaresis) giving QChar(0x00c4) (German A Umlaut). */ void QString::compose() { #ifndef QT_NO_UNICODETABLES unsigned int index=0, len; unsigned int cindex = 0; QChar code, head; QArray dia; QString composed = *this; while (index < length()) { code = at(index); //printf("\n\nligature for 0x%x:\n", code.unicode()); QLigature ligature(code); ligature.first(); while(ligature.current()) { if ((len = ligature.match(*this, index)) != 0) { head = ligature.head(); unsigned short code = head.unicode(); // we exclude Arabic presentation forms A and a few // other ligatures, which are undefined in most fonts if(!(code > 0xfb50 && code < 0xfe80) && !(code > 0xfb00 && code < 0xfb2a)) { // joining info is only needed for arabic if (format(ligature.tag(), *this, index, len)) { //printf("using ligature 0x%x, len=%d\n",code,len); // replace letter composed.replace(cindex, len, QChar(head)); index += len-1; // we continue searching in case we have a final // form because medial ones are preferred. if ( len != 1 || ligature.tag() !=QChar::Final ) break; } } } ligature.next(); } cindex++; index++; } *this = composed; #endif } static QChar LRM ((ushort)0x200e); static QChar RLM ((ushort)0x200f); static QChar LRE ((ushort)0x202a); static QChar RLE ((ushort)0x202b); static QChar RLO ((ushort)0x202e); static QChar LRO ((ushort)0x202d); static QChar PDF ((ushort)0x202c); #if 0 static inline bool is_arabic(unsigned short x) { return (((x >= 0x0600) && (x <= 0x07bf)) || ((x >= 0xfb50) && (x <= 0xfdff)) || ((x >= 0xfe70) && (x <= 0xfeff))); } #endif #ifndef QT_NO_UNICODETABLES static inline bool is_neutral(unsigned short dir) { return ((dir == QChar::DirB) || (dir == QChar::DirS) || (dir == QChar::DirWS) || (dir == QChar::DirON) || (dir == QChar::DirNSM)); } #endif /*! This function returns the basic directionality of the string (QChar::DirR for right to left and QChar::DirL for left to right). Useful to find the right alignment. */ QChar::Direction QString::basicDirection() { #ifndef QT_NO_UNICODETABLES // find base direction unsigned int pos = 0; while ((pos < length()) && (at(pos) != RLE) && (at(pos) != LRE) && (at(pos) != RLO) && (at(pos) != LRO) && (at(pos).direction() > 1) && (at(pos).direction() != QChar::DirAL)) // not R and not L pos++; if ((at(pos).direction() == QChar::DirR) || (at(pos).direction() == QChar::DirAL) || (at(pos) == RLE) || (at(pos) == RLO)) return QChar::DirR; #endif return QChar::DirL; } #ifndef QT_NO_UNICODETABLES // reverses part of the QChar array to get visual ordering // called from QString::visual() // static unsigned int reverse( QString &chars, unsigned char *level, unsigned int a, unsigned int b) { unsigned int c = a; unsigned char lev = level[c]; while ((c < b) && (level[c] >= lev)) { if (level[c] > lev) c = reverse(chars, level, c, b); c++; } if (lev > 0) { QChar temp; unsigned int d = a, e = c-1; while (d < e) { temp = chars[(int)d]; chars[(int)d] = chars[(int)e]; chars[(int)e] = temp; d++; e--; } } return c; } // small class used for the ordering algorithm in QString::visual() class QBidiState { public: unsigned char level; signed char override; QBidiState(unsigned char l, signed char o) : level(l), override(o) {}; }; // matrix for resolving neutral types #define NEG1 (QChar::Direction)(-1) static QChar::Direction resolv[5][5] = { { NEG1, QChar::DirR, QChar::DirL, QChar::DirEN, QChar::DirAN }, { QChar::DirR, QChar::DirR, NEG1, QChar::DirR, QChar::DirR }, { QChar::DirL, NEG1, QChar::DirL, QChar::DirL, NEG1 }, { QChar::DirEN, QChar::DirR, QChar::DirL, QChar::DirEN, QChar::DirR }, { QChar::DirAN, QChar::DirR, NEG1, NEG1, QChar::DirAN } }; #endif /*! This function returns the QString ordered visually. Useful for painting the string or when transforming to a visually ordered encoding. */ QString QString::visual(int index, int len) { #ifndef QT_NO_UNICODETABLES // #### This needs much more optimizing - it is called for // #### every text operation. unsigned char *level; QChar::Direction *dir; unsigned char base = 0; unsigned int l = length(); // check bounds if (len == -1) len = length()-index; if ((uint)index > l) return QString::null; // find base direction unsigned int pos = 0; while ((pos < length()) && (at(pos) != RLE) && (at(pos) != LRE) && (at(pos) != RLO) && (at(pos) != LRO) && (at(pos).direction() > 1) && (at(pos).direction() != QChar::DirAL) ) // not R and not L pos++; if ((pos < length()) && ((at(pos).direction() == QChar::DirR) || (at(pos).direction() == QChar::DirAL) || (at(pos) == RLE) || (at(pos) == RLO))) base = 1; // is there any BiDi char at all? if ( base == 0 && pos == l ) { return mid(index, len); } level = new uchar[l]; dir = new QChar::Direction[l]; // explicit override pass //unsigned int code_count = 0; QStack stack; stack.setAutoDelete(TRUE); unsigned char clevel = base; signed char override = -1; for (pos = 0; pos < l; pos++) { if (at(pos) == RLE) { //code_count++; stack.push(new QBidiState(clevel, override)); if (clevel < 254) clevel += 1 + clevel % 2; override = -1; } else if (at(pos) == LRE) { //code_count++; stack.push(new QBidiState(clevel, override)); if (clevel < 254) clevel += 2 - clevel % 2; override = -1; } else if (at(pos) == RLO) { //code_count++; stack.push(new QBidiState(clevel, override)); if (clevel < 254) clevel += 1 + clevel % 2; override = QChar::DirR; } else if (at(pos) == LRO) { //code_count++; stack.push(new QBidiState(clevel, override)); if (clevel < 254) clevel += 2 - clevel % 2; override = QChar::DirL; } else if (at(pos) == PDF) { //code_count++; if (!stack.isEmpty()) { override = stack.top()->override; clevel = stack.top()->level; stack.remove(); } } // TODO: catch block separators (newlines, paras, etc.) level[pos] = clevel; if (override != -1) dir[pos] = (QChar::Direction) override; else dir[pos] = at(pos).direction(); } // weak type pass for (pos = 0; pos < l; pos++) { int i; switch (at(pos).direction()) { case QChar::DirEN: i = pos-1; while ((i >= 0) && !(at(i).direction() == QChar::DirAN) && !(at(i).direction() == QChar::DirAL) && !(at(i).direction() == QChar::DirB)) i--; if ((i >= 0) && ((at(i).direction() == QChar::DirAN) || (at(i).direction() == QChar::DirAL))) dir[pos] = QChar::DirAN; break; case QChar::DirES: case QChar::DirCS: if ((pos > 0) && (pos < l-1) && (dir[pos-1] == dir[pos+1])) dir[pos] = dir[pos-1]; else dir[pos] = QChar::DirON; break; case QChar::DirET: if (((pos > 0) && (dir[pos-1] == QChar::DirEN)) || ((pos < l-1) && (dir[pos+1] == QChar::DirEN))) dir[pos] = QChar::DirEN; else dir[pos] = QChar::DirON; break; case QChar::DirAL: dir[pos] = QChar::DirR; break; default: break; } } // neutral type pass for (pos = 0; pos < l; pos++) { QChar::Direction left,right; // declaring l here shadowed previous l if (is_neutral(dir[pos])) { if (pos > 0) left = dir[pos-1]; else left = (base == 0 ? QChar::DirL : QChar::DirR); int i = pos; while ((i < (int)l-1) && is_neutral(dir[i+1])) i++; if (i < (int)l-1) right = dir[i+1]; else right = (base == 0 ? QChar::DirL : QChar::DirR); for (int j=pos; j <= i; j++) { int a = 1, b = 1; while ((a < 5) && (left != resolv[0][a])) a++; while ((b < 5) && (right != resolv[0][b])) b++; if ((a == 5) || (b == 5)) dir[j] = (base == 0 ? QChar::DirL : QChar::DirR); else dir[j] = resolv[a][b]; if (dir[j] == (QChar::Direction)(-1)) dir[j] = (base == 0 ? QChar::DirL : QChar::DirR); } } } // implicit level pass QChar::Direction prec = (base == 0 ? QChar::DirL : QChar::DirR); for (pos = 0; pos < l; pos++) { if (level[pos] % 2) { switch (dir[pos]) { case QChar::DirL: case QChar::DirAN: case QChar::DirEN: level[pos] += 1; break; default: break; } } else { switch (dir[pos]) { case QChar::DirL: // do nothing break; case QChar::DirR: level[pos] += 1; break; case QChar::DirEN: if (prec == QChar::DirL) continue; // fall through case QChar::DirAN: level[pos] += 2; break; default: break; } } prec = dir[pos]; } // now do the work! QString ret(*this); reverse(ret, level, index, index+len); delete [] level; delete [] dir; return ret; #else return mid(index,len); #endif } // These macros are used for efficient allocation of QChar strings. // IMPORTANT! If you change these, make sure you also change the // "delete unicode" statement in ~QStringData() in qstring.h correspondingly! #define QT_ALLOC_QCHAR_VEC( N ) (QChar*) new char[ sizeof(QChar)*( N ) ] #define QT_DELETE_QCHAR_VEC( P ) delete[] ((char*)( P )) /*! This utility function converts the 8-bit string \a ba to Unicode, returning the result. The caller is responsible for deleting the return value with delete[]. */ QChar* QString::asciiToUnicode( const QByteArray& ba, uint* len ) { if ( ba.isNull() ) { if ( len ) *len = 0; return 0; } int l = 0; while ( l < (int)ba.size() && ba[l] ) l++; const char* str = ba.data(); QChar *uc = new QChar[ l ]; // Can't use macro, since function is public QChar *result = uc; if ( len ) *len = l; while (l--) *uc++ = *str++; return result; } static QChar* internalAsciiToUnicode( const QByteArray& ba, uint* len ) { if ( ba.isNull() ) { if ( len ) *len = 0; return 0; } int l = 0; while ( l < (int)ba.size() && ba[l] ) l++; const char* str = ba.data(); QChar *uc = QT_ALLOC_QCHAR_VEC( l ); QChar *result = uc; if ( len ) *len = l; while (l--) *uc++ = *str++; return result; } /*! This utility function converts the NUL-terminated 8-bit string \a str to Unicode, returning the result and setting \a len to the length of the Unicode string. The caller is responsible for deleting the return value with delete[]. */ QChar* QString::asciiToUnicode( const char *str, uint* len, uint maxlen ) { QChar* result = 0; uint l = 0; if ( str ) { if ( maxlen != (uint)-1 ) { while ( l < maxlen && str[l] ) l++; } else { // Faster? l = qstrlen(str); } QChar *uc = new QChar[ l ]; // Can't use macro since function is public result = uc; uint i = l; while ( i-- ) *uc++ = *str++; } if ( len ) *len = l; return result; } static QChar* internalAsciiToUnicode( const char *str, uint* len, uint maxlen = (uint)-1 ) { QChar* result = 0; uint l = 0; if ( str ) { if ( maxlen != (uint)-1 ) { while ( l < maxlen && str[l] ) l++; } else { // Faster? l = qstrlen(str); } QChar *uc = QT_ALLOC_QCHAR_VEC( l ); result = uc; uint i = l; while ( i-- ) *uc++ = *str++; } if ( len ) *len = l; return result; } /*! This utility function converts \a l 16-bit characters from \a uc to ASCII, returning a NUL-terminated string. The caller is responsible for deleting the string with delete[]. */ char* QString::unicodeToAscii(const QChar *uc, uint l) { if (!uc) { return 0; } char *a = new char[l+1]; char *result = a; while (l--) *a++ = *uc++; *a = '\0'; return result; } static uint computeNewMax( uint len ) { if (len >= 0x80000000) return len; uint newMax = 4; while ( newMax < len ) newMax *= 2; // try to save some memory if ( newMax >= 1024 * 1024 && len <= newMax - (newMax >> 2) ) newMax -= newMax >> 2; return newMax; } /*! Returns the QString as a zero terminated array of unsigned shorts if the string is not null; otherwise returns zero. The result remains valid so long as one unmodified copy of the source string exists. */ const unsigned short *QString::ucs2() const { if ( ! d->unicode ) return 0; unsigned int len = d->len; if ( d->maxl < len + 1 ) { // detach, grow or shrink uint newMax = computeNewMax( len + 1 ); QChar* nd = QT_ALLOC_QCHAR_VEC( newMax ); if ( nd ) { if ( d->unicode ) memcpy( nd, d->unicode, sizeof(QChar)*len ); ((QString *)this)->deref(); ((QString *)this)->d = new QStringData( nd, len, newMax ); } } d->unicode[len] = 0; return (unsigned short *) d->unicode; } /*! Constructs a string that is a deep copy of \a str, interpreted as a UCS2 encoded, zero terminated, Unicode string. If \a str is 0, then a null string is created. \sa isNull() */ QString QString::fromUcs2( const unsigned short *str ) { if ( !str ) { return QString::null; } else { int length = 0; while ( str[length] != 0 ) length++; QChar* uc = QT_ALLOC_QCHAR_VEC( length ); memcpy( uc, str, length*sizeof(QChar) ); return QString( new QStringData( uc, length, length ), TRUE ); } } /***************************************************************************** QString member functions *****************************************************************************/ /*! \class QString qstring.h \brief The QString class provides an abstraction of Unicode text and the classic C null-terminated char array (char*). \ingroup tools \ingroup shared QString uses \link shclass.html implicit sharing\endlink, and so it is very efficient and easy to use. In all QString methods that take const char* parameters, the const char* is interpreted as a classic C-style 0-terminated ASCII string. It is legal for the const char* parameter to be 0. The results are undefined if the const char* string is not 0-terminated. Functions that copy classic C strings into a QString will not copy the terminating 0-character. The QChar array of the QString (as returned by unicode()) is not terminated by a null. A QString that has not been assigned to anything is \a null, i.e. both the length and data pointer is 0. A QString that references the empty string ("", a single '\0' char) is \a empty. Both null and empty QStrings are legal parameters to the methods. Assigning const char * 0 to QString gives a null QString. Note that if you find that you are mixing usage of QCString, QString, and QByteArray, this causes lots of unnecessary copying and might indicate that the true nature of the data you are dealing with is uncertain. If the data is NUL-terminated 8-bit data, use QCString; if it is unterminated (ie. contains NULs) 8-bit data, use QByteArray; if it is text, use QString. \sa QChar \link shclass.html Shared classes\endlink */ Q_EXPORT QStringData *QString::shared_null = 0; //QT_STATIC_CONST_IMPL QString QString::null; QT_STATIC_CONST_IMPL QChar QChar::null; QT_STATIC_CONST_IMPL QChar QChar::replacement((ushort)0xfffd); QT_STATIC_CONST_IMPL QChar QChar::byteOrderMark((ushort)0xfeff); QT_STATIC_CONST_IMPL QChar QChar::byteOrderSwapped((ushort)0xfffe); QT_STATIC_CONST_IMPL QChar QChar::nbsp((ushort)0x00a0); #if defined(_CC_MSVC_) && _MSC_VER <= 1300 const QString::Null QString::null; #else const QString::Null QString::null = { }; #endif QStringData* QString::makeSharedNull() { return shared_null=new QStringData; } // Uncomment this to get some useful statistics. // #define Q2HELPER(x) x #ifdef Q2HELPER static int stat_construct_charstar=0; static int stat_construct_charstar_size=0; static int stat_construct_null=0; static int stat_construct_int=0; static int stat_construct_int_size=0; static int stat_construct_ba=0; static int stat_get_ascii=0; static int stat_get_ascii_size=0; static int stat_copy_on_write=0; static int stat_copy_on_write_size=0; static int stat_fast_copy=0; Q_EXPORT void qt_qstring_stats() { qDebug("construct_charstar = %d (%d chars)", stat_construct_charstar, stat_construct_charstar_size); qDebug("construct_null = %d", stat_construct_null); qDebug("construct_int = %d (%d chars)", stat_construct_int, stat_construct_int_size); qDebug("construct_ba = %d", stat_construct_ba); qDebug("get_ascii = %d (%d chars)", stat_get_ascii, stat_get_ascii_size); qDebug("copy_on_write = %d (%d chars)", stat_copy_on_write, stat_copy_on_write_size); qDebug("fast_copy = %d", stat_fast_copy); } #else #define Q2HELPER(x) #endif /*! \fn QString::QString() Constructs a null string. \sa isNull() */ /*! Constructs a string containing the one character \a ch. */ QString::QString( QChar ch ) { d = new QStringData( QT_ALLOC_QCHAR_VEC( 1 ), 1, 1 ); d->unicode[0] = ch; } /*! Constructs an implicitly-shared copy of \a s. */ QString::QString( const QString &s ) : d(s.d) { Q2HELPER(stat_fast_copy++) d->ref(); } /*! Private function. Constructs a string with preallocated space for \a size characters. The string is empty. \sa isNull() */ QString::QString( int size, bool /*dummy*/ ) { if ( size ) { Q2HELPER(stat_construct_int++) int l = size; Q2HELPER(stat_construct_int_size+=l) QChar* uc = QT_ALLOC_QCHAR_VEC( l ); d = new QStringData( uc, 0, l ); } else { Q2HELPER(stat_construct_null++) d = shared_null ? shared_null : (shared_null=new QStringData); d->ref(); } } /*! Constructs a string that is a deep copy of \a ba interpreted as a classic C string. */ QString::QString( const QByteArray& ba ) { Q2HELPER(stat_construct_ba++) uint l; QChar *uc = internalAsciiToUnicode(ba,&l); d = new QStringData(uc,l,l); } QString::QString( const QCString& ba ) { //Q2HELPER(stat_construct_ba++) //uint l; //QChar *uc = internalAsciiToUnicode(ba,&l); //d = new QStringData(uc,l,l); Q2HELPER(stat_fast_copy++) QString s = QString::fromUtf8(ba.data(),ba.length()); d = s.d; d->ref(); } /*! Constructs a string that is a deep copy of the first \a length QChar in the array \a unicode. If \a unicode and \a length are 0, a null string is created. If only \a unicode is 0, the string is empty, but has \a length characters of space preallocated - QString expands automatically anyway, but this may speed some cases up a little. \sa isNull() */ QString::QString( const QChar* unicode, uint length ) { if ( !unicode && !length ) { d = shared_null ? shared_null : makeSharedNull(); d->ref(); } else { QChar* uc = QT_ALLOC_QCHAR_VEC( length ); if ( unicode ) memcpy(uc, unicode, length*sizeof(QChar)); d = new QStringData(uc,unicode ? length : 0,length); } } /*! Constructs a string that is a deep copy of \a str, interpreted as a classic C string. If \a str is 0 a null string is created. This is a cast constructor, but it is perfectly safe: converting a Latin1 const char* to QString preserves all the information. You can disable this constructor by defining QT_NO_CAST_ASCII when you compile your applications. You can also make QString objects by using setLatin1()/fromLatin1(), or fromLocal8Bit(), fromUtf8(), or whatever encoding is appropriate for the 8-bit data you have. \sa isNull() */ QString::QString( const char *str ) { //Q2HELPER(stat_construct_charstar++) //uint l; //QChar *uc = internalAsciiToUnicode(str,&l); //Q2HELPER(stat_construct_charstar_size+=l) //d = new QStringData(uc,l,l); Q2HELPER(stat_fast_copy++) QString s = QString::fromUtf8(str); d = s.d; d->ref(); } /*! \fn QString::~QString() Destroys the string and frees the "real" string, if this was the last copy of that string. */ /*! Deallocates any space reserved solely by this QString. */ void QString::real_detach() { setLength( length() ); } void QString::deref() { if ( d->deref() ) { if ( d == shared_null ) shared_null = 0; delete d; d = 0; // helps debugging } } void QStringData::deleteSelf() { delete this; } /*! \fn QString& QString::operator=( QChar c ) Sets the string to contain just the single character \a c. */ /*! \fn QString& QString::operator=( char c ) Sets the string to contain just the single character \a c. */ /*! Assigns a shallow copy of \a s to this string and returns a reference to this string. */ QString &QString::operator=( const QString &s ) { Q2HELPER(stat_fast_copy++) s.d->ref(); deref(); d = s.d; return *this; } /*! Assigns a deep copy of \a cs, interpreted as a classic C string, to this string and returns a reference to this string. */ QString &QString::operator=( const QCString& cs ) { return setLatin1(cs); } /*! Assigns a deep copy of \a str, interpreted as a classic C string, to this string and returns a reference to this string. If \a str is 0 a null string is created. \sa isNull() */ QString &QString::operator=( const char *str ) { return setLatin1(str); } /*! \fn bool QString::isNull() const Returns TRUE if the string is null. A null string is also an empty string. Example: \code QString a; // a.unicode() == 0, a.length() == 0 QString b = ""; // b.unicode() == "", b.length() == 0 a.isNull(); // TRUE, because a.unicode() == 0 a.isEmpty(); // TRUE, because a.length() == 0 b.isNull(); // FALSE, because b.unicode() != 0 b.isEmpty(); // TRUE, because b.length() == 0 \endcode \sa isEmpty(), length() */ /*! \fn bool QString::isEmpty() const Returns TRUE if the string is empty, i.e. if length() == 0. An empty string is not always a null string. See example in isNull(). \sa isNull(), length() */ /*! \fn uint QString::length() const Returns the length of the string. Null strings and empty strings have zero length. \sa isNull(), isEmpty() */ /*! Truncates the string at position \a newLen if newLen is less than the current length . Otherwise, nothing happens. Example: \code QString s = "truncate this string"; s.truncate( 5 ); // s == "trunc" \endcode In Qt 1.x, it was possible to "truncate" a string to a longer length. This is no longer possible. */ void QString::truncate( uint newLen ) { if ( newLen < d->len ) setLength( newLen ); } /*### Make this public in 3.0 Ensures that at least \a newLen characters are allocated, and sets the length to \a newLen. This function always detaches the string from other references to the same data. Any new space allocated is \e not defined. If \a newLen is 0, this string becomes empty, unless this string is null, in which case it remains null. \sa truncate(), isNull(), isEmpty() */ void QString::setLength( uint newLen ) { if ( d->count != 1 || newLen > d->maxl || // detach, grow, or ( newLen*4 < d->maxl && d->maxl > 4 ) ) { // shrink Q2HELPER(stat_copy_on_write++) Q2HELPER(stat_copy_on_write_size+=d->len) uint newMax = 4; while ( newMax < newLen ) newMax *= 2; QChar* nd = QT_ALLOC_QCHAR_VEC( newMax ); uint len = QMIN( d->len, newLen ); if ( d->unicode ) memcpy( nd, d->unicode, sizeof(QChar)*len ); deref(); d = new QStringData( nd, newLen, newMax ); } else { d->len = newLen; d->dirtyascii = 1; } } /*! Returns a string equal to this one, but with the lowest-numbered occurrence of \c %i (for a positive integer i) replaced by \a a. \code label.setText( tr("Rename %1 to %2?").arg(oldName).arg(newName) ); \endcode \a fieldwidth is the minimum amount of space \a a is padded to. A positive value produces right-aligned text, while a negative value produces left aligned text. \warning Using arg() for constructing "real" sentences programmatically is likely to lead to translation problems. Inserting objects like numbers or file names is fairly safe. \warning Relying on spaces to create alignment is prone to lead to translation problems. If there is no \c %i pattern, a warning message (qWarning()) is printed and the text as appended at the end of the string. This is error recovery and should not occur in correct code. \sa QObject::tr() */ QString QString::arg(const QString& a, int fieldwidth) const { int pos, len; QString r = *this; if ( !findArg( pos, len ) ) { qWarning( "QString::arg(): Argument missing: %s, %s", (const char *)ascii(), (const char *)ascii() ); // Make sure the text at least appears SOMEWHERE r += ' '; pos = r.length(); len = 0; } r.replace( pos, len, a ); if ( fieldwidth < 0 ) { QString s; while ( (uint)-fieldwidth > a.length() ) { s += ' '; fieldwidth++; } r.insert( pos + a.length(), s ); } else if ( fieldwidth ) { QString s; while ( (uint)fieldwidth > a.length() ) { s += ' '; fieldwidth--; } r.insert( pos, s ); } return r; } /*! \overload \a a is expressed in to \a base notation, which is decimal by default and must be in the range 2-36 inclusive. */ QString QString::arg(long a, int fieldwidth, int base) const { return arg( QString::number( a, base ), fieldwidth ); } /*! \overload \a a is expressed in to \a base notation, which is decimal by default and must be in the range 2-36 inclusive. */ QString QString::arg(ulong a, int fieldwidth, int base) const { return arg( QString::number( a, base ), fieldwidth ); } /*! \overload QString QString::arg(int a, int fieldwidth, int base) const \a a is expressed in to \a base notation, which is decimal by default and must be in the range 2-36 inclusive. */ /*! \overload QString QString::arg(uint a, int fieldwidth, int base) const \a a is expressed in to \a base notation, which is decimal by default and must be in the range 2-36 inclusive. */ /*! \overload QString QString::arg(short a, int fieldwidth, int base) const \a a is expressed in to \a base notation, which is decimal by default and must be in the range 2-36 inclusive. */ /*! \overload QString QString::arg(ushort a, int fieldwidth, int base) const \a a is expressed in to \a base notation, which is decimal by default and must be in the range 2-36 inclusive. */ /*! \overload \a a is assumed to be in the Latin1 character set. */ QString QString::arg(char a, int fieldwidth) const { QString c; c += a; return arg( c, fieldwidth ); } /*! \overload */ QString QString::arg(QChar a, int fieldwidth) const { QString c; c += a; return arg( c, fieldwidth ); } /*! \overload \a is formatted according to the \a fmt format specified, which is 'g' by default and can be any of 'f', 'F', 'e', 'E', 'g' or 'G', all of which have the same meaning as for sprintf(). \a prec determines the precision, just as for number() and sprintf(). */ QString QString::arg(double a, int fieldwidth, char fmt, int prec) const { return arg( QString::number( a, fmt, prec ), fieldwidth ); } /*! Just 1-digit arguments. */ bool QString::findArg(int& pos, int& len) const { char lowest=0; for (uint i=0; i= '0' && dig <= '9' ) { if ( !lowest || dig < lowest ) { lowest = dig; pos = i; len = 2; } } } } return lowest != 0; } /*! Safely builds a formatted string from a format string and an arbitrary list of arguments. The format string supports all the escape sequences of printf() in the standard C library. The %s escape sequence expects a utf8() encoded string. The format string \e cformat is expected to be in latin1. If you need a unicode format string, use QString::arg() instead. For typesafe string building, with full Unicode support, you can use QTextOStream like this: \code QString str; QString s = ...; int x = ...; QTextOStream(&str) << s << " : " << x; \endcode For \link QObject::tr() translations,\endlink especially if the strings contains more than one escape sequence, you should consider using the arg() function instead. This allows the order of the replacements to be controlled by the translator, and has Unicode support. \sa arg() */ QString &QString::sprintf( const char* cformat, ... ) { va_list ap; va_start( ap, cformat ); if ( !cformat || !*cformat ) { // Qt 1.x compat *this = QString::fromLatin1( "" ); return *this; } QString format = QString::fromLatin1( cformat ); static QRegExp *escape = 0; if (!escape) escape = new QRegExp( "%#?0?-? ?\\+?'?[0-9*]*\\.?[0-9*]*h?l?L?q?Z?" ); QString result; uint last = 0; int len = 0; int pos; while ( 1 ) { pos = escape->match( cformat, last, &len ); // Non-escaped text if ( pos > (int)last ) result += format.mid(last,pos-last); if ( pos < 0 ) { // The rest if ( last < format.length() ) result += format.mid(last); break; } last = pos + len + 1; // Escape QString f = format.mid( pos, len ); uint width, decimals; int params = 0; int wpos = f.find('*'); if ( wpos >= 0 ) { params++; width = va_arg( ap, int ); if ( f.find('*', wpos + 1) >= 0 ) { decimals = va_arg( ap, int ); params++; } else { decimals = 0; } } else { decimals = width = 0; } QString replacement; if ( format[pos+len] == 's' || format[pos+len] == 'S' || format[pos+len] == 'c' ) { bool rightjust = ( f.find('-') < 0 ); // Yes, %-5s really means left adjust in sprintf if ( wpos < 0 ) { QRegExp num( "[0-9]+" ); QRegExp dot( "\\." ); int nlen; int p = num.match( f.data(), 0, &nlen ); int q = dot.match( f.data(), 0 ); if ( q < 0 || (p < q && p >= 0) ) width = f.mid( p, nlen ).toInt(); if ( q >= 0 ) { p = num.match( f.data(), q ); // "decimals" is used to specify string truncation if ( p >= 0 ) decimals = f.mid( p, nlen ).toInt(); } } if ( format[pos+len] == 's' ) { #ifndef QT_NO_TEXTCODEC QString s = QString::fromUtf8(va_arg(ap, char*)); #else QString s = QString::fromLatin1(va_arg(ap, char*)); #endif if ( decimals <= 0 ) replacement = s; else replacement = s.left(decimals); } else { int ch = va_arg(ap, int); replacement = QChar((ushort)ch); } if ( replacement.length() < width ) { replacement = rightjust ? replacement.rightJustify(width) : replacement.leftJustify(width); } } else if ( format[pos+len] == '%' ) { replacement = '%'; } else if ( format[pos+len] == 'n' ) { int* n = va_arg(ap, int*); *n = result.length(); } else { char in[64], out[330] = ""; strncpy(in,f.latin1(),63); char fch = format[pos+len].latin1(); in[f.length()] = fch; switch ( fch ) { case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': { int value = va_arg(ap, int); switch (params) { case 0: ::sprintf( out, in, value ); break; case 1: ::sprintf( out, in, width, value ); break; case 2: ::sprintf( out, in, width, decimals, value ); break; } } break; case 'e': case 'E': case 'f': case 'g': case 'G': { double value = va_arg(ap, double); switch (params) { case 0: ::sprintf( out, in, value ); break; case 1: ::sprintf( out, in, width, value ); break; case 2: ::sprintf( out, in, width, decimals, value ); break; } } break; case 'p': { void* value = va_arg(ap, void*); switch (params) { case 0: ::sprintf( out, in, value ); break; case 1: ::sprintf( out, in, width, value ); break; case 2: ::sprintf( out, in, width, decimals, value ); break; } } break; } replacement = QString::fromLatin1(out); } result += replacement; } *this = result; va_end( ap ); return *this; } /*! Fills the string with \a len characters of value \a c. If \a len is negative, the current string length is used. */ void QString::fill( QChar c, int len ) { if ( len < 0 ) len = length(); if ( len == 0 ) { *this = ""; } else { deref(); QChar * nd = QT_ALLOC_QCHAR_VEC( len ); d = new QStringData(nd,len,len); while (len--) *nd++ = c; } } /*! \fn QString QString::copy() const \obsolete Returns a deep copy of this string. Doing this is redundant in Qt 2.x, since QString is implicitly shared, and so will automatically be deeply copied as necessary. */ /*! Finds the first occurrence of the character \a c, starting at position \a index. If \a index is -1, the search starts at the last character; if -2, at the next to last character; etc. The search is case sensitive if \a cs is TRUE, or case insensitive if \a cs is FALSE. Returns the position of \a c, or -1 if \a c could not be found. */ int QString::find( QChar c, int index, bool cs ) const { if ( index < 0 ) index += length(); if ( (uint)index >= length() ) // index outside string return -1; register const QChar *uc; uc = unicode()+index; int n = length()-index; if ( cs ) { while ( n-- && *uc != c ) uc++; } else { c = c.lower(); while ( n-- && uc->lower() != c ) uc++; } if ( uint(uc - unicode()) >= length() ) return -1; return (int)(uc - unicode()); } /*! Finds the first occurrence of the string \a str, starting at position \a index. If \a index is -1, the search starts at the last character; if -2, at the next to last character; etc. The search is case sensitive if \a cs is TRUE, or case insensitive if \a cs is FALSE. Returns the position of \a str, or -1 if \a str could not be found. */ int QString::find( const QString& str, int index, bool cs ) const { /* We use some weird hashing for efficiency's sake. Instead of comparing strings, we compare the hash value of str with that of a part of this QString. Only if that matches, we call ucstrncmp or ucstrnicmp. The hash value of a string is the sum of the cells of its QChars. */ if ( index < 0 ) index += length(); int lstr = str.length(); int lthis = length() - index; if ( (uint)lthis > length() ) return -1; int delta = lthis - lstr; if ( delta < 0 ) return -1; const QChar *uthis = unicode() + index; const QChar *ustr = str.unicode(); uint hthis = 0; uint hstr = 0; int i; if ( cs ) { for ( i = 0; i < lstr; i++ ) { hthis += uthis[i].cell(); hstr += ustr[i].cell(); } i = 0; while ( TRUE ) { if ( hthis == hstr && ucstrncmp(uthis + i, ustr, lstr) == 0 ) return index + i; if ( i == delta ) return -1; hthis += uthis[i + lstr].cell(); hthis -= uthis[i].cell(); i++; } } else { for ( i = 0; i < lstr; i++ ) { hthis += uthis[i].lower().cell(); hstr += ustr[i].lower().cell(); } i = 0; while ( TRUE ) { if ( hthis == hstr && ucstrnicmp(uthis + i, ustr, lstr) == 0 ) return index + i; if ( i == delta ) return -1; hthis += uthis[i + lstr].lower().cell(); hthis -= uthis[i].lower().cell(); i++; } } #if defined(Q_SPURIOUS_NON_VOID_WARNING) return -1; #endif } /*! \fn int QString::findRev( const char* str, int index ) const Equivalent to findRev(QString(str), index). */ /*! \fn int QString::find( const char* str, int index ) const Equivalent to find(QString(str), index). */ /*! Finds the first occurrence of the character \a c, starting at position \a index and searching backwards. If \a index is -1, the search starts at the last character; if -2, at the next to last character; etc. The search is case sensitive if \a cs is TRUE, or case insensitive if \a cs is FALSE. Returns the position of \a c, or -1 if \a c could not be found. */ int QString::findRev( QChar c, int index, bool cs ) const { QString t( c ); return findRev( t, index, cs ); } /*! Finds the first occurrence of the string \a str, starting at position \a index and searching backwards. If \a index is -1, the search starts at the last character; -2, at the next to last character; etc. The search is case sensitive if \a cs is TRUE, or case insensitive if \e cs is FALSE. Returns the position of \a str, or -1 if \a str could not be found. */ int QString::findRev( const QString& str, int index, bool cs ) const { /* See QString::find() for explanations. */ int lthis = length(); if ( index < 0 ) index += lthis; int lstr = str.length(); int delta = lthis - lstr; if ( index < 0 || index > lthis || delta < 0 ) return -1; if ( index > delta ) index = delta; const QChar *uthis = unicode(); const QChar *ustr = str.unicode(); uint hthis = 0; uint hstr = 0; int i; if ( cs ) { for ( i = 0; i < lstr; i++ ) { hthis += uthis[index + i].cell(); hstr += ustr[i].cell(); } i = index; while ( TRUE ) { if ( hthis == hstr && ucstrncmp(uthis + i, ustr, lstr) == 0 ) return i; if ( i == 0 ) return -1; i--; hthis -= uthis[i + lstr].cell(); hthis += uthis[i].cell(); } } else { for ( i = 0; i < lstr; i++ ) { hthis += uthis[index + i].lower().cell(); hstr += ustr[i].lower().cell(); } i = index; while ( TRUE ) { if ( hthis == hstr && ucstrnicmp(uthis + i, ustr, lstr) == 0 ) return i; if ( i == 0 ) return -1; i--; hthis -= uthis[i + lstr].lower().cell(); hthis += uthis[i].lower().cell(); } } #if defined(Q_SPURIOUS_NON_VOID_WARNING) return -1; #endif } /*! Returns the number of times the character \a c occurs in the string. The match is case sensitive if \a cs is TRUE, or case insensitive if \a cs is FALSE. */ int QString::contains( QChar c, bool cs ) const { int count = 0; const QChar *uc = unicode(); if ( !uc ) return 0; int n = length(); if ( cs ) { // case sensitive while ( n-- ) if ( *uc++ == c ) count++; } else { // case insensitive c = c.lower(); while ( n-- ) { if ( uc->lower() == c ) count++; uc++; } } return count; } /*! \overload */ int QString::contains( const char* str, bool cs ) const { return contains(QString(str),cs); } /*! \overload int QString::contains (char c, bool cs) const */ /*! \overload int QString::find (char c, int index, bool cs) const */ /*! \overload int QString::findRev (char c, int index, bool cs) const */ /*! Returns the number of times \a str occurs in the string. The match is case sensitive if \a cs is TRUE, or case insensitive if \e cs is FALSE. This function counts overlapping substrings, for example, "banana" contains two occurrences of "ana". \sa findRev() */ int QString::contains( const QString &str, bool cs ) const { int count = 0; const QChar *uc = unicode(); if ( !uc ) return 0; int len = str.length(); int n = length(); while ( n-- ) { // counts overlapping strings // ### Doesn't account for length of this - searches over "end" if ( cs ) { if ( ucstrncmp( uc, str.unicode(), len ) == 0 ) count++; } else { if ( ucstrnicmp(uc, str.unicode(), len) == 0 ) count++; } uc++; } return count; } /*! Returns a substring that contains the \a len leftmost characters of the string. The whole string is returned if \a len exceeds the length of the string. Example: \code QString s = "Pineapple"; QString t = s.left( 4 ); // t == "Pine" \endcode \sa right(), mid(), isEmpty() */ QString QString::left( uint len ) const { if ( isEmpty() ) { return QString(); } else if ( len == 0 ) { // ## just for 1.x compat: return QString::fromLatin1(""); } else if ( len > length() ) { return *this; } else { QString s( len, TRUE ); memcpy( s.d->unicode, d->unicode, len*sizeof(QChar) ); s.d->len = len; return s; } } /*! Returns a substring that contains the \a len rightmost characters of the string. The whole string is returned if \a len exceeds the length of the string. Example: \code QString s = "Pineapple"; QString t = s.right( 5 ); // t == "apple" \endcode \sa left(), mid(), isEmpty() */ QString QString::right( uint len ) const { if ( isEmpty() ) { return QString(); } else if ( len == 0 ) { // ## just for 1.x compat: return QString::fromLatin1(""); } else { uint l = length(); if ( len > l ) len = l; QString s( len, TRUE ); memcpy( s.d->unicode, d->unicode+(l-len), len*sizeof(QChar) ); s.d->len = len; return s; } } /*! Returns a substring that contains the \a len characters of this string, starting at position \a index. Returns a null string if the string is empty or \a index is out of range. Returns the whole string from \a index if \a index+len exceeds the length of the string. Example: \code QString s = "Five pineapples"; QString t = s.mid( 5, 4 ); // t == "pine" \endcode \sa left(), right() */ QString QString::mid( uint index, uint len ) const { uint slen = length(); if ( isEmpty() || index >= slen ) { return QString(); } else if ( len == 0 ) { // ## just for 1.x compat: return QString::fromLatin1(""); } else { if ( len > slen-index ) len = slen - index; if ( index == 0 && len == length() ) return *this; register const QChar *p = unicode()+index; QString s( len, TRUE ); memcpy( s.d->unicode, p, len*sizeof(QChar) ); s.d->len = len; return s; } } /*! Returns a string of length \a width that contains this string and padded by the \a fill character. If the length of the string exceeds \a width and \a truncate is FALSE, then the returned string is a copy of the string. If the length of the string exceeds \a width and \a truncate is TRUE, then the returned string is a left(\a width). Example: \code QString s("apple"); QString t = s.leftJustify(8, '.'); // t == "apple..." \endcode \sa rightJustify() */ QString QString::leftJustify( uint width, QChar fill, bool truncate ) const { QString result; int len = length(); int padlen = width - len; if ( padlen > 0 ) { result.setLength(len+padlen); if ( len ) memcpy( result.d->unicode, unicode(), sizeof(QChar)*len ); QChar* uc = result.d->unicode + len; while (padlen--) *uc++ = fill; } else { if ( truncate ) result = left( width ); else result = *this; } return result; } /*! Returns a string of length \a width that contains pad characters followed by the string. If the length of the string exceeds \a width and \a truncate is FALSE, then the returned string is a copy of the string. If the length of the string exceeds \a width and \a truncate is TRUE, then the returned string is a left(\a width). Example: \code QString s("pie"); QString t = s.rightJustify(8, '.'); // t == ".....pie" \endcode \sa leftJustify() */ QString QString::rightJustify( uint width, QChar fill, bool truncate ) const { QString result; int len = length(); int padlen = width - len; if ( padlen > 0 ) { result.setLength( len+padlen ); QChar* uc = result.d->unicode; while (padlen--) *uc++ = fill; if ( len ) memcpy( uc, unicode(), sizeof(QChar)*len ); } else { if ( truncate ) result = left( width ); else result = *this; } return result; } /*! Returns a new string that is the string converted to lower case. Example: \code QString s("TeX"); QString t = s.lower(); // t == "tex" \endcode \sa upper() */ QString QString::lower() const { QString s(*this); int l=length(); if ( l ) { s.real_detach(); // could do this only when we find a change register QChar *p=s.d->unicode; if ( p ) { while ( l-- ) { *p = p->lower(); p++; } } } return s; } /*! Returns a new string that is the string converted to upper case. Example: \code QString s("TeX"); QString t = s.upper(); // t == "TEX" \endcode \sa lower() */ QString QString::upper() const { QString s(*this); int l=length(); if ( l ) { s.real_detach(); // could do this only when we find a change register QChar *p=s.d->unicode; if ( p ) { while ( l-- ) { *p = p->upper(); p++; } } } return s; } /*! Returns a new string that has white space removed from the start and the end. White space means any character for which QChar::isSpace() returns TRUE. This includes ASCII characters 9 (TAB), 10 (LF), 11 (VT), 12 (FF), 13 (CR), and 32 (Space). Example: \code QString s = " space "; QString t = s.stripWhiteSpace(); // t == "space" \endcode \sa simplifyWhiteSpace() */ QString QString::stripWhiteSpace() const { if ( isEmpty() ) // nothing to do return *this; if ( !at(0).isSpace() && !at(length()-1).isSpace() ) return *this; register const QChar *s = unicode(); QString result = fromLatin1(""); int start = 0; int end = length() - 1; while ( start<=end && s[start].isSpace() ) // skip white space from start start++; if ( start > end ) { // only white space return result; } while ( end && s[end].isSpace() ) // skip white space from end end--; int l = end - start + 1; result.setLength( l ); if ( l ) memcpy( result.d->unicode, &s[start], sizeof(QChar)*l ); return result; } /*! Returns a new string that has white space removed from the start and the end, plus any sequence of internal white space replaced with a single space (ASCII 32). White space means any character for which QChar::isSpace() returns TRUE. This includes ASCII characters 9 (TAB), 10 (LF), 11 (VT), 12 (FF), 13 (CR), and 32 (Space). \code QString s = " lots\t of\nwhite space "; QString t = s.simplifyWhiteSpace(); // t == "lots of white space" \endcode \sa stripWhiteSpace() */ QString QString::simplifyWhiteSpace() const { if ( isEmpty() ) // nothing to do return *this; QString result; result.setLength( length() ); const QChar *from = unicode(); const QChar *fromend = from+length(); int outc=0; QChar *to = result.d->unicode; while ( TRUE ) { while ( from!=fromend && from->isSpace() ) from++; while ( from!=fromend && !from->isSpace() ) to[outc++] = *from++; if ( from!=fromend ) to[outc++] = ' '; else break; } if ( outc > 0 && to[outc-1] == ' ' ) outc--; result.truncate( outc ); return result; } /*! Insert \a s into the string before position \a index. If \a index is beyond the end of the string, the string is extended with spaces (ASCII 32) to length \a index and \a s is then appended. \code QString s = "I like fish"; s.insert( 2, "don't "); // s == "I don't like fish" s = "x"; s.insert( 3, "yz" ); // s == "x yz" \endcode */ QString &QString::insert( uint index, const QString &s ) { // the sub function takes care of &s == this case. return insert( index, s.unicode(), s.length() ); } /*! Insert \a len units of QChar data from \a s into the string before position \a index. */ QString &QString::insert( uint index, const QChar* s, uint len ) { if ( len == 0 ) return *this; uint olen = length(); int nlen = olen + len; int df = (int)(s - d->unicode); // ### pointer subtraction, cast down to int if ( df >= 0 && (uint)df < d->maxl ) { // Part of me - take a copy. QChar *tmp = QT_ALLOC_QCHAR_VEC( len ); memcpy(tmp,s,len*sizeof(QChar)); insert(index,tmp,len); QT_DELETE_QCHAR_VEC( tmp ); return *this; } if ( index >= olen ) { // insert after end of string setLength( len+index ); int n = index-olen; QChar* uc = d->unicode+olen; while (n--) *uc++ = ' '; memcpy( d->unicode+index, s, sizeof(QChar)*len ); } else { // normal insert setLength( nlen ); memmove( d->unicode+index+len, unicode()+index, sizeof(QChar)*(olen-index) ); memcpy( d->unicode+index, s, sizeof(QChar)*len ); } return *this; } /*! Insert \a c into the string at (before) position \a index and returns a reference to the string. If \a index is beyond the end of the string, the string is extended with spaces (ASCII 32) to length \a index and \a c is then appended. Example: \code QString s = "Ys"; s.insert( 1, 'e' ); // s == "Yes" s.insert( 3, '!'); // s == "Yes!" \endcode \sa remove(), replace() */ QString &QString::insert( uint index, QChar c ) // insert char { QString s( c ); return insert( index, s ); } /*! \overload QString& QString::insert( uint index, char c ) */ /*! \fn QString &QString::prepend( const QString &s ) Prepend \a s to the string. Equivalent to insert(0,s). \sa insert() */ /*! \fn QString& QString::prepend( char ch ) Prepends \a ch to the string and returns a reference to the result. \sa insert() */ /*! \fn QString& QString::prepend( QChar ch ) Prepends \a ch to the string and returns a reference to the result. \sa insert() */ /*! Removes \a len characters starting at position \a index from the string and returns a reference to the string. If \a index is too big, nothing happens. If \a index is valid, but \a len is too large, the rest of the string is removed. \code QString s = "Montreal"; s.remove( 1, 4 ); // s == "Meal" \endcode \sa insert(), replace() */ QString &QString::remove( uint index, uint len ) { uint olen = length(); if ( index + len >= olen ) { // range problems if ( index < olen ) { // index ok setLength( index ); } } else if ( len != 0 ) { real_detach(); memmove( d->unicode+index, d->unicode+index+len, sizeof(QChar)*(olen-index-len) ); setLength( olen-len ); } return *this; } /*! Replaces \a len characters starting at position \a index from the string with \a s, and returns a reference to the string. If \a index is too big, nothing is deleted and \a s is inserted at the end of the string. If \a index is valid, but \a len is too large, \e str replaces the rest of the string. \code QString s = "Say yes!"; s.replace( 4, 3, "NO" ); // s == "Say NO!" \endcode \sa insert(), remove() */ QString &QString::replace( uint index, uint len, const QString &s ) { return replace( index, len, s.unicode(), s.length() ); } /*! Replaces \a len characters starting at position \a index by \a slen units to QChar data from \a s, and returns a reference to the string. \sa insert(), remove() */ QString &QString::replace( uint index, uint len, const QChar* s, uint slen ) { if ( len == slen && index + len <= length() ) { // Optimized common case: replace without size change real_detach(); memcpy( d->unicode+index, s, len*sizeof(QChar) ); } else { int df = (int)(s - d->unicode); // ### pointer subtraction, cast down to int if ( df >= 0 && (uint)df < d->maxl ) { // Part of me - take a copy. QChar *tmp = QT_ALLOC_QCHAR_VEC( slen ); memcpy(tmp,s,slen*sizeof(QChar)); replace(index,len,tmp,slen); QT_DELETE_QCHAR_VEC( tmp ); return *this; } remove( index, len ); insert( index, s, slen ); } return *this; } /*! Finds the first occurrence of the regular expression \a rx, starting at position \a index. If \a index is -1, the search starts at the last character; if -2, at the next to last character; etc. Returns the position of the next match, or -1 if \a rx was not found. \sa findRev() replace() contains() */ int QString::find( const QRegExp &rx, int index ) const { if ( index < 0 ) index += length(); return rx.match( data(), index ); } /*! Finds the first occurrence of the regular expression \a rx, starting at position \a index and searching backwards. If \a index is -1, the search starts at the last character; if -2, at the next to last character; etc. Returns the position of the next match (backwards), or -1 if \a rx was not found. \sa find() */ int QString::findRev( const QRegExp &rx, int index ) const { if ( index < 0 ) // neg index ==> start from end index += length(); if ( (uint)index > length() ) // bad index return -1; while( index >= 0 ) { if ( rx.match( data(), index ) == index ) return index; index--; } return -1; } /*! Counts the number of overlapping occurrences of \a rx in the string. Example: \code QString s = "banana and panama"; QRegExp r = QRegExp("a[nm]a", TRUE, FALSE); s.contains( r ); // 4 matches \endcode \sa find() findRev() */ int QString::contains( const QRegExp &rx ) const { if ( isEmpty() ) return rx.match( data() ) < 0 ? 0 : 1; int count = 0; int index = -1; int len = length(); while ( index < len-1 ) { // count overlapping matches index = rx.match( data(), index+1 ); if ( index < 0 ) break; count++; } return count; } /*! Replaces every occurrence of \a rx in the string with \a str. Returns a reference to the string. Examples: \code QString s = "banana"; s.replace( QRegExp("a.*a"), "" ); // becomes "b" QString s = "banana"; s.replace( QRegExp("^[bn]a"), " " ); // becomes " nana" QString s = "banana"; s.replace( QRegExp("^[bn]a"), "" ); // NOTE! becomes "" \endcode \sa find() findRev() */ QString &QString::replace( const QRegExp &rx, const QString &str ) { if ( isEmpty() ) return *this; int index = 0; int slen = str.length(); int len; while ( index < (int)length() ) { index = rx.match( data(), index, &len, FALSE ); if ( index >= 0 ) { replace( index, len, str ); index += slen; if ( !len ) break; // Avoid infinite loop on 0-length matches, e.g. [a-z]* } else break; } return *this; } static bool ok_in_base( QChar c, int base ) { if ( base <= 10 ) return c.isDigit() && c.digitValue() < base; else return c.isDigit() || (c >= 'a' && c < char('a'+base-10)) || (c >= 'A' && c < char('A'+base-10)); } /*! Returns the string converted to a long value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ long QString::toLong( bool *ok, int base ) const { const QChar *p = unicode(); long val=0; int l = length(); const long max_mult = INT_MAX / base; bool is_ok = FALSE; int neg = 0; if ( !p ) goto bye; while ( l && p->isSpace() ) // skip leading space l--,p++; if ( l && *p == '-' ) { l--; p++; neg = 1; } else if ( *p == '+' ) { l--; p++; } // NOTE: toULong() code is similar if ( !l || !ok_in_base(*p,base) ) goto bye; while ( l && ok_in_base(*p,base) ) { l--; int dv; if ( p->isDigit() ) { dv = p->digitValue(); } else { if ( *p >= 'a' && *p <= 'z' ) dv = *p - 'a' + 10; else dv = *p - 'A' + 10; } if ( val > max_mult || (val == max_mult && dv > (INT_MAX%base)+neg) ) goto bye; val = base*val + dv; p++; } if ( neg ) val = -val; while ( l && p->isSpace() ) // skip trailing space l--,p++; if ( !l ) is_ok = TRUE; bye: if ( ok ) *ok = is_ok; return is_ok ? val : 0; } /*! Returns the string converted to an unsigned long value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ ulong QString::toULong( bool *ok, int base ) const { const QChar *p = unicode(); ulong val=0; int l = length(); const ulong max_mult = 429496729; // UINT_MAX/10, rounded down bool is_ok = FALSE; if ( !p ) goto bye; while ( l && p->isSpace() ) // skip leading space l--,p++; if ( *p == '+' ) l--,p++; // NOTE: toLong() code is similar if ( !l || !ok_in_base(*p,base) ) goto bye; while ( l && ok_in_base(*p,base) ) { l--; uint dv; if ( p->isDigit() ) { dv = p->digitValue(); } else { if ( *p >= 'a' && *p <= 'z' ) dv = *p - 'a' + 10; else dv = *p - 'A' + 10; } if ( val > max_mult || (val == max_mult && dv > (UINT_MAX%base)) ) goto bye; val = base*val + dv; p++; } while ( l && p->isSpace() ) // skip trailing space l--,p++; if ( !l ) is_ok = TRUE; bye: if ( ok ) *ok = is_ok; return is_ok ? val : 0; } /*! Returns the string converted to an unsigned long value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ uint64 QString::toUInt64( bool *ok, int base ) const { const QChar *p = unicode(); uint64 val=0; int l = length(); const uint64 max_mult = 1844674407370955161ULL; // ULLONG_MAX/10, rounded down bool is_ok = FALSE; if ( !p ) goto bye; while ( l && p->isSpace() ) // skip leading space l--,p++; if ( *p == '+' ) l--,p++; // NOTE: toULong() code is similar if ( !l || !ok_in_base(*p,base) ) goto bye; while ( l && ok_in_base(*p,base) ) { l--; uint dv; if ( p->isDigit() ) { dv = p->digitValue(); } else { if ( *p >= 'a' && *p <= 'z' ) dv = *p - 'a' + 10; else dv = *p - 'A' + 10; } if ( val > max_mult || (val == max_mult && dv > (ULLONG_MAX%base)) ) goto bye; val = base*val + dv; p++; } while ( l && p->isSpace() ) // skip trailing space l--,p++; if ( !l ) is_ok = TRUE; bye: if ( ok ) *ok = is_ok; return is_ok ? val : 0; } /*! Returns the string converted to a short value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ short QString::toShort( bool *ok, int base ) const { long v = toLong( ok, base ); if ( ok && *ok && (v < -32768 || v > 32767) ) { *ok = FALSE; v = 0; } return (short)v; } /*! Returns the string converted to an unsigned short value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ ushort QString::toUShort( bool *ok, int base ) const { ulong v = toULong( ok, base ); if ( ok && *ok && (v > 65535) ) { *ok = FALSE; v = 0; } return (ushort)v; } /*! Returns the string converted to a int value. \code QString str("FF"); bool ok; int hex = str.toInt( &ok, 16 ); // will return 255, and ok set to TRUE int dec = str.toInt( &ok, 10 ); // will return 0, and ok set to FALSE \endcode If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ int QString::toInt( bool *ok, int base ) const { return (int)toLong( ok, base ); } /*! Returns the string converted to an unsigned int value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ uint QString::toUInt( bool *ok, int base ) const { return (uint)toULong( ok, base ); } /*! Returns the string converted to a double value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ double QString::toDouble( bool *ok ) const { char *end; QCString a = latin1(); // Just latin1() is not sufficient, since U0131 would look like '1'. for (uint i=0; ilen; i++) if ( d->unicode[i].row() ) a[(int)i]='z'; double val = strtod( a.data() ? a.data() : "", &end ); if ( ok ) *ok = ( a && *a && ( end == 0 || *end == '\0' ) ); return val; } /*! Returns the string converted to a float value. If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable errors, and FALSE if the string is not a number at all, or if it has trailing garbage. */ float QString::toFloat( bool *ok ) const { return (float)toDouble( ok ); } /*! Sets the string to the printed value of \a n and returns a reference to the string. The value is converted to \a base notation (default is decimal). The base must be a value from 2 to 36. */ QString &QString::setNum( long n, int base ) { #if defined(CHECK_RANGE) if ( base < 2 || base > 36 ) { qWarning( "QString::setNum: Invalid base %d", base ); base = 10; } #endif char charbuf[65*sizeof(QChar)]; QChar *buf = (QChar*)charbuf; QChar *p = &buf[64]; int len = 0; bool neg; if ( n < 0 ) { neg = TRUE; if ( n == INT_MIN ) { // Cannot always negate this special case QString s1, s2; s1.setNum(n/base); s2.setNum((-(n+base))%base); *this = s1 + s2; return *this; } n = -n; } else { neg = FALSE; } do { *--p = "0123456789abcdefghijklmnopqrstuvwxyz"[((int)(n%base))]; n /= base; len++; } while ( n ); if ( neg ) { *--p = '-'; len++; } return setUnicode( p, len ); } /*! Sets the string to the printed unsigned value of \a n and returns a reference to the string. The value is converted to \a base notation (default is decimal). The base must be a value from 2 to 36. */ QString &QString::setNum( ulong n, int base ) { #if defined(CHECK_RANGE) if ( base < 2 || base > 36 ) { qWarning( "QString::setNum: Invalid base %d", base ); base = 10; } #endif char charbuf[65*sizeof(QChar)]; QChar *buf = (QChar*)charbuf; QChar *p = &buf[64]; int len = 0; do { *--p = "0123456789abcdefghijklmnopqrstuvwxyz"[((int)(n%base))]; n /= base; len++; } while ( n ); return setUnicode(p,len); } /*! \fn QString &QString::setNum( int n, int base ) Sets the string to the printed value of \a n and returns a reference to the string. */ /*! \fn QString &QString::setNum( uint n, int base ) Sets the string to the printed unsigned value of \a n and returns a reference to the string. */ /*! \fn QString &QString::setNum( short n, int base ) Sets the string to the printed value of \a n and returns a reference to the string. */ /*! \fn QString &QString::setNum( ushort n, int base ) Sets the string to the printed unsigned value of \a n and returns a reference to the string. */ /*! Sets the string to the printed value of \a n, formatted in the \a f format with \a prec precision, and returns a reference to the string. \a f can be 'f', 'F', 'e', 'E', 'g' or 'G', all of which have the same meaning as for sprintf(). */ QString &QString::setNum( double n, char f, int prec ) { #if defined(CHECK_RANGE) if ( !(f=='f' || f=='F' || f=='e' || f=='E' || f=='g' || f=='G') ) { qWarning( "QString::setNum: Invalid format char '%c'", f ); f = 'f'; } #endif char format[20]; char buf[120]; // enough for 99 precision? char *fs = format; // generate format string *fs++ = '%'; // "%.l" if ( prec >= 0 ) { if ( prec > 99 ) // buf big enough for precision? prec = 99; *fs++ = '.'; if ( prec >= 10 ) { *fs++ = prec / 10 + '0'; *fs++ = prec % 10 + '0'; } else { *fs++ = prec + '0'; } } *fs++ = 'l'; *fs++ = f; *fs = '\0'; ::sprintf( buf, format, n ); return setLatin1(buf); } /*! \overload QString &QString::setNum( float n, char f, int prec ) */ /*! A convenience factory function that returns a string representation of the number \a n. \sa setNum() */ QString QString::number( long n, int base ) { QString s; s.setNum( n, base ); return s; } /*! A convenience factory function that returns a string representation of the number \a n. \sa setNum() */ QString QString::number( ulong n, int base ) { QString s; s.setNum( n, base ); return s; } /*! A convenience factory function that returns a string representation of the number \a n. \sa setNum() */ QString QString::number( int n, int base ) { QString s; s.setNum( n, base ); return s; } /*! A convenience factory function that returns a string representation of the number \a n. \sa setNum() */ QString QString::number( uint n, int base ) { QString s; s.setNum( n, base ); return s; } /*! This static function returns the printed value of \a n, formatted in the \a f format with \a prec precision. \a f can be 'f', 'F', 'e', 'E', 'g' or 'G', all of which have the same meaning as for sprintf(). \sa setNum() */ QString QString::number( double n, char f, int prec ) { QString s; s.setNum( n, f, prec ); return s; } /*! \obsolete Sets the character at position \a index to \a c and expands the string if necessary, filling with spaces. This method is redundant in Qt 2.x, because operator[] will expand the string as necessary. */ void QString::setExpand( uint index, QChar c ) { int spaces = index - d->len; at(index) = c; while (spaces-->0) d->unicode[--index]=' '; } /*! \fn const char* QString::data() const \obsolete Returns a pointer to a 0-terminated classic C string. In Qt 1.x, this returned a char* allowing direct manipulation of the string as a sequence of bytes. In Qt 2.x where QString is a Unicode string, char* conversion constructs a temporary string, and hence direct character operations are meaningless. */ /*! \fn bool QString::operator!() const Returns TRUE if it is a null string, otherwise FALSE. Thus you can write: \code QString name = getName(); if ( !name ) name = "Rodney"; \endcode Note that if you say: \code QString name = getName(); if ( name ) doSomethingWith(name); \endcode Then this will call operator const char*(), which will do what you want, but rather inefficiently - you may wish to define the macro QT_NO_ASCII_CAST when writing code which you wish to strictly remain Unicode-clean. When you want the above semantics, use !isNull() or even !!: \code QString name = getName(); if ( !!name ) doSomethingWith(name); \endcode */ /*! \fn QString& QString::append( const QString& str ) Appends \a str to the string and returns a reference to the result. Equivalent to operator+=(). */ /*! \fn QString& QString::append( char ch ) Appends \a ch to the string and returns a reference to the result. Equivalent to operator+=(). */ /*! \fn QString& QString::append( QChar ch ) Appends \a ch to the string and returns a reference to the result. Equivalent to operator+=(). */ /*! Appends \a str to the string and returns a reference to the string. */ QString& QString::operator+=( const QString &str ) { uint len1 = length(); uint len2 = str.length(); if ( len2 ) { setLength(len1+len2); memcpy( d->unicode+len1, str.unicode(), sizeof(QChar)*len2 ); } else if ( isNull() && !str.isNull() ) { // ## just for 1.x compat: *this = fromLatin1(""); } return *this; } /*! Appends \a c to the string and returns a reference to the string. */ QString &QString::operator+=( QChar c ) { setLength(length()+1); d->unicode[length()-1] = c; return *this; } /*! Appends \a c to the string and returns a reference to the string. */ QString &QString::operator+=( char c ) { setLength(length()+1); d->unicode[length()-1] = c; return *this; } /*! \fn char QChar::latin1() const Returns a latin-1 copy of this character, if this character is in the latin-1 character set. If not, this function returns 0. */ /*! Returns a Latin-1 representation of the string. Note that the returned value is undefined if the string contains non-Latin-1 characters. If you want to convert strings into formats other than Unicode, see the QTextCodec classes. This function is mainly useful for boot-strapping legacy code to use Unicode. The result remains valid so long as one unmodified copy of the source string exists. \sa utf8(), local8Bit() */ const char* QString::latin1() const { if ( d->ascii ) { if ( d->dirtyascii ) delete [] d->ascii; else return d->ascii; } Q2HELPER(stat_get_ascii++) Q2HELPER(stat_get_ascii_size+=d->len) static QTextCodec* codec = QTextCodec::codecForMib(106); if (codec) // we use utf8 coding also for latin1 if possible { QCString utf8str(codec->fromUnicode(*this)); d->ascii = new char[utf8str.length()+1]; if (utf8str.isEmpty()) { d->ascii[0]='\0'; // make empty string } else // copy string { qstrcpy(d->ascii,utf8str.data()); } } else // fall back to latin1 { d->ascii = unicodeToAscii( d->unicode, d->len ); } QCString utf8str(utf8()); d->dirtyascii = 0; return d->ascii; } /*! \obsolete This functions simply calls latin1() and returns the result. */ const char* QString::ascii() const { return latin1(); } #ifndef QT_NO_TEXTCODEC /*! Returns the string encoded in UTF8 format. See QTextCodec for more diverse coding/decoding of Unicode strings. \sa QString::fromUtf8(), local8Bit(), latin1() */ QCString QString::utf8() const { static QTextCodec* codec = QTextCodec::codecForMib(106); return codec ? codec->fromUnicode(*this) : QCString(latin1()); } /*! Returns the unicode string decoded from the first \a len bytes of \a utf8. If \a len is -1 (the default), the length of \a utf8 is used. If trailing partial characters are in \a utf8, they are ignored. See QTextCodec for more diverse coding/decoding of Unicode strings. */ QString QString::fromUtf8(const char* utf8, int len) { static QTextCodec* codec = QTextCodec::codecForMib(106); if ( len < 0 ) len = qstrlen(utf8); return codec ? codec->toUnicode(utf8, len) : QString::fromLatin1(utf8, len); } #endif // QT_NO_TEXTCODEC /*! Creates a QString from Latin1 text. This is the same as the QString(const char*) constructor, but you can make that constructor invisible if you compile with the define QT_NO_CAST_ASCII, in which case you can explicitly create a QString from Latin-1 text using this function. */ QString QString::fromLatin1(const char* chars, int len) { uint l; QChar *uc; if ( len < 0 ) { uc = internalAsciiToUnicode(chars,&l); } else { uc = internalAsciiToUnicode(chars,&l,len); } return QString(new QStringData(uc,l,l), TRUE); } /*! \fn const QChar* QString::unicode() const Returns the Unicode representation of the string. The result remains valid until the string is modified. */ /*! Returns the string encoded in a locale-specific format. On X11, this is the QTextCodec::codecForLocale(). On Windows, it is a system-defined encoding. See QTextCodec for more diverse coding/decoding of Unicode strings. \sa QString::fromLocal8Bit(), latin1(), utf8() */ QCString QString::local8Bit() const { #ifdef QT_NO_TEXTCODEC return latin1(); #else #ifdef _WS_X11_ static QTextCodec* codec = QTextCodec::codecForLocale(); return codec ? codec->fromUnicode(*this) : QCString(latin1()); #endif #ifdef _WS_MAC_ static QTextCodec* codec = QTextCodec::codecForLocale(); return codec ? codec->fromUnicode(*this) : QCString(latin1()); #endif #ifdef _WS_WIN_ return qt_winQString2MB( *this ); #endif #ifdef _WS_QWS_ return utf8(); // ##### if there is ANY 8 bit format supported? #endif #endif } /*! Returns the unicode string decoded from the first \a len bytes of \a local8Bit. If \a len is -1 (the default), the length of \a local8Bit is used. If trailing partial characters are in \a local8Bit, they are ignored. \a local8Bit is assumed to be encoded in a locale-specific format. See QTextCodec for more diverse coding/decoding of Unicode strings. */ QString QString::fromLocal8Bit(const char* local8Bit, int len) { #ifdef QT_NO_TEXTCODEC return fromLatin1( local8Bit, len ); #else if ( !local8Bit ) return QString::null; #ifdef _WS_X11_ static QTextCodec* codec = QTextCodec::codecForLocale(); if ( len < 0 ) len = qstrlen(local8Bit); return codec ? codec->toUnicode(local8Bit, len) : QString::fromLatin1(local8Bit,len); #endif #ifdef _WS_MAC_ static QTextCodec* codec = QTextCodec::codecForLocale(); if ( len < 0 ) len = qstrlen(local8Bit); return codec ? codec->toUnicode(local8Bit, len) : QString::fromLatin1(local8Bit,len); #endif // Should this be OS_WIN32? #ifdef _WS_WIN_ if ( len >= 0 ) { QCString s(local8Bit,len+1); return qt_winMB2QString(s); } return qt_winMB2QString( local8Bit ); #endif #ifdef _WS_QWS_ return fromUtf8(local8Bit,len); #endif #endif // QT_NO_TEXTCODEC } /*! \fn QString::operator const char *() const Returns latin1(). Be sure to see the warnings documented there. Note that for new code which you wish to be strictly Unicode-clean, you can define the macro QT_NO_ASCII_CAST when compiling your code to hide this function so that automatic casts are not done. This has the added advantage that you catch the programming error described under operator!(). */ /*! \fn QChar QString::at( uint ) const Returns the character at \a i, or 0 if \a i is beyond the length of the string. Note: If this QString is not const or const&, the non-const at() will be used instead, which will expand the string if \a i is beyond the length of the string. */ /*! \fn QChar QString::constref(uint i) const Equivalent to at(i), this returns the QChar at \a i by value. \sa ref() */ /*! \fn QChar& QString::ref(uint i) Returns the QChar at \a i by reference. \sa constref() */ /*! \fn QChar QString::operator[](int) const Returns the character at \a i, or QChar::null if \a i is beyond the length of the string. Note: If this QString is not const or const&, the non-const operator[] will be used instead, which will expand the string if \a i is beyond the length of the string. */ /*! \fn QCharRef QString::operator[](int) Returns an object that references the character at \a i. This reference can then be assigned to, or otherwise used immediately, but becomes invalid once further modifications are made to the string. The QCharRef internal class can be used much like a constant QChar, but if you assign to it, you change the original string (which enlarges and detaches itself). You will get compilation errors if you try to use the result as anything but a QChar. */ /*! \fn QCharRef QString::at( uint i ) Returns a reference to the character at \a i, expanding the string with QChar::null if necessary. The resulting reference can then be assigned to, or otherwise used immediately, but becomes invalid once further modifications are made to the string. */ /*! Internal chunk of code to handle the uncommon cases of at() above. */ void QString::subat( uint i ) { uint olen = d->len; if ( i >= olen ) { setLength( i+1 ); // i is index; i+1 is needed length for ( uint j=olen; j<=i; j++ ) d->unicode[j] = QChar::null; } else { // Just be sure to detach real_detach(); } } /*! Resizes the string to \a len unicode characters and copies \a unicode into the string. If \a unicode is null, nothing is copied, but the string is resized to \a len anyway. If \a len is zero, the string becomes a \link isNull() null\endlink string. \sa setLatin1(), isNull() */ QString& QString::setUnicode( const QChar *unicode, uint len ) { if ( len == 0 ) { // set to null string if ( d != shared_null ) { // beware of nullstring being set to nullstring deref(); d = shared_null ? shared_null : makeSharedNull(); d->ref(); } } else if ( d->count != 1 || len > d->maxl || ( len*4 < d->maxl && d->maxl > 4 ) ) { // detach, grown or shrink Q2HELPER(stat_copy_on_write++) Q2HELPER(stat_copy_on_write_size+=d->len) uint newMax = 4; while ( newMax < len ) newMax *= 2; QChar* nd = QT_ALLOC_QCHAR_VEC( newMax ); if ( unicode ) memcpy( nd, unicode, sizeof(QChar)*len ); deref(); d = new QStringData( nd, len, newMax ); } else { d->len = len; d->dirtyascii = 1; if ( unicode ) memcpy( d->unicode, unicode, sizeof(QChar)*len ); } return *this; } /*! Resizes the string to \a len unicode characters and copies \a unicode_as_ushorts into the string (on some X11 client platforms this will involve a byte-swapping pass). If \a unicode is null, nothing is copied, but the string is resized to \a len anyway. If \a len is zero, the string becomes a \link isNull() null\endlink string. \sa setLatin1(), isNull() */ QString& QString::setUnicodeCodes( const ushort* unicode_as_ushorts, uint len ) { setUnicode((const QChar*)unicode_as_ushorts, len); QChar t(0x1234); if ( unicode_as_ushorts && *((ushort*)&t) == 0x3412 ) { // Need to byteswap char* b = (char*)d->unicode; while ( len-- ) { char c = b[0]; b[0] = b[1]; b[1] = c; b += sizeof(QChar); } } return *this; } /*! Sets this string to \a str, interpreted as a classic Latin 1 C string. If the \a len argument is negative (default), it is set to strlen(str). If \a str is 0 a null string is created. If \a str is "" an empty string is created. \sa isNull(), isEmpty() */ QString &QString::setLatin1( const char *str, int len ) { if ( str == 0 ) return setUnicode(0,0); if ( len < 0 ) len = qstrlen(str); if ( len == 0 ) { // won't make a null string deref(); uint l; QChar *uc = internalAsciiToUnicode(str,&l); d = new QStringData(uc,l,l); } else { setUnicode( 0, len ); // resize but not copy QChar *p = d->unicode; while ( len-- ) *p++ = *str++; } return *this; } /*! \fn int QString::compare (const QString & s1, const QString & s2) Compare \a s1 to \a s2 returning an integer less than, equal to, or greater than zero if s1 is, respectively, lexically less than, equal to, or greater than s2. */ /*! Compares this string to \a s, returning an integer less than, equal to, or greater than zero if it is, respectively, lexically less than, equal to, or greater than \a s. */ int QString::compare( const QString& s ) const { return ucstrcmp(*this,s); } bool operator==( const QString &s1, const QString &s2 ) { return (s1.length() == s2.length()) && s1.isNull() == s2.isNull() && (memcmp((char*)s1.unicode(),(char*)s2.unicode(), s1.length()*sizeof(QChar)) ==0); } bool operator!=( const QString &s1, const QString &s2 ) { return !(s1==s2); } bool operator<( const QString &s1, const QString &s2 ) { return ucstrcmp(s1,s2) < 0; } bool operator<=( const QString &s1, const QString &s2 ) { return ucstrcmp(s1,s2) <= 0; } bool operator>( const QString &s1, const QString &s2 ) { return ucstrcmp(s1,s2) > 0; } bool operator>=( const QString &s1, const QString &s2 ) { return ucstrcmp(s1,s2) >= 0; } bool operator==( const QString &s1, const char *s2 ) { return s1==QString(s2); } bool operator==( const char *s1, const QString &s2 ) { return QString(s1)==s2; } bool operator!=( const QString &s1, const char *s2 ) { return !(s1==s2); } bool operator!=( const char *s1, const QString &s2 ) { return !(s1==s2); } bool operator<( const QString &s1, const char *s2 ) { return ucstrcmp(s1,s2) < 0; } bool operator<( const char *s1, const QString &s2 ) { return ucstrcmp(s1,s2) < 0; } bool operator<=( const QString &s1, const char *s2 ) { return ucstrcmp(s1,s2) <= 0; } bool operator<=( const char *s1, const QString &s2 ) { return ucstrcmp(s1,s2) <= 0; } bool operator>( const QString &s1, const char *s2 ) { return ucstrcmp(s1,s2) > 0; } bool operator>( const char *s1, const QString &s2 ) { return ucstrcmp(s1,s2) > 0; } bool operator>=( const QString &s1, const char *s2 ) { return ucstrcmp(s1,s2) >= 0; } bool operator>=( const char *s1, const QString &s2 ) { return ucstrcmp(s1,s2) >= 0; } /***************************************************************************** Documentation for QString related functions *****************************************************************************/ /*! \fn bool operator==( const QString &s1, const QString &s2 ) \relates QString Returns TRUE if the two strings are equal, or FALSE if they are different. A null string is different from an empty, non-null string. Equivalent to qstrcmp(s1,s2) == 0. */ /*! \fn bool operator==( const QString &s1, const char *s2 ) \relates QString Returns TRUE if the two strings are equal, or FALSE if they are different. Equivalent to qstrcmp(s1,s2) == 0. */ /*! \fn bool operator==( const char *s1, const QString &s2 ) \relates QString Returns TRUE if the two strings are equal, or FALSE if they are different. Equivalent to qstrcmp(s1,s2) == 0. */ /*! \fn bool operator!=( const QString &s1, const QString &s2 ) \relates QString Returns TRUE if the two strings are different, or FALSE if they are equal. Equivalent to qstrcmp(s1,s2) != 0. */ /*! \fn bool operator!=( const QString &s1, const char *s2 ) \relates QString Returns TRUE if the two strings are different, or FALSE if they are equal. Equivalent to qstrcmp(s1,s2) != 0. */ /*! \fn bool operator!=( const char *s1, const QString &s2 ) \relates QString Returns TRUE if the two strings are different, or FALSE if they are equal. Equivalent to qstrcmp(s1,s2) != 0. */ /*! \fn bool operator<( const QString &s1, const char *s2 ) \relates QString Returns TRUE if \a s1 is alphabetically less than \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \< 0. */ /*! \fn bool operator<( const char *s1, const QString &s2 ) \relates QString Returns TRUE if \a s1 is alphabetically less than \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \< 0. */ /*! \fn bool operator<=( const QString &s1, const char *s2 ) \relates QString Returns TRUE if \a s1 is alphabetically less than or equal to \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \<= 0. */ /*! \fn bool operator<=( const char *s1, const QString &s2 ) \relates QString Returns TRUE if \a s1 is alphabetically less than or equal to \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \<= 0. */ /*! \fn bool operator>( const QString &s1, const char *s2 ) \relates QString Returns TRUE if \a s1 is alphabetically greater than \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \> 0. */ /*! \fn bool operator>( const char *s1, const QString &s2 ) \relates QString Returns TRUE if \a s1 is alphabetically greater than \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \> 0. */ /*! \fn bool operator>=( const QString &s1, const char *s2 ) \relates QString Returns TRUE if \a s1 is alphabetically greater than or equal to \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \>= 0. */ /*! \fn bool operator>=( const char *s1, const QString &s2 ) \relates QString Returns TRUE if \a s1 is alphabetically greater than or equal to \a s2, otherwise FALSE. Equivalent to qstrcmp(s1,s2) \>= 0. */ /*! \fn QString operator+( const QString &s1, const QString &s2 ) \relates QString Returns the concatenated string of s1 and s2. */ /*! \fn QString operator+( const QString &s1, const char *s2 ) \relates QString Returns the concatenated string of s1 and s2. */ /*! \fn QString operator+( const char *s1, const QString &s2 ) \relates QString Returns the concatenated string of s1 and s2. */ /*! \fn QString operator+( const QString &s, char c ) \relates QString Returns the concatenated string of s and c. */ /*! \fn QString operator+( char c, const QString &s ) \relates QString Returns the concatenated string of c and s. */ /***************************************************************************** QString stream functions *****************************************************************************/ #ifndef QT_NO_DATASTREAM /*! \relates QString Writes a string to the stream. \sa \link datastreamformat.html Format of the QDataStream operators \endlink */ QDataStream &operator<<( QDataStream &s, const QString &str ) { if ( s.version() == 1 ) { QCString l( str.latin1() ); s << l; } else { const char* ub = (const char*)str.unicode(); if ( ub || s.version() < 3 ) { if ( QChar::networkOrdered() == (s.byteOrder()==QDataStream::BigEndian) ) { s.writeBytes( ub, (int)sizeof(QChar)*str.length() ); } else { static const uint auto_size = 1024; char t[auto_size]; char *b; if ( str.length()*sizeof(QChar) > auto_size ) { b = new char[str.length()*sizeof(QChar)]; } else { b = t; } int l = str.length(); char *c=b; while ( l-- ) { *c++ = ub[1]; *c++ = ub[0]; ub+=sizeof(QChar); } s.writeBytes( b, (int)sizeof(QChar)*str.length() ); if ( str.length()*sizeof(QChar) > auto_size ) delete [] b; } } else { // write null marker s << (Q_UINT32)0xffffffff; } } return s; } /*! \relates QString Reads a string from the stream. \sa \link datastreamformat.html Format of the QDataStream operators \endlink */ QDataStream &operator>>( QDataStream &s, QString &str ) { #ifdef QT_QSTRING_UCS_4 #if defined(_CC_GNU_) #warning "operator>> not working properly" #endif #endif if ( s.version() == 1 ) { QCString l; s >> l; str = QString( l ); } else { Q_UINT32 bytes; s >> bytes; // read size of string if ( bytes == 0xffffffff ) { // null string str = QString::null; } else if ( bytes > 0 ) { // not empty str.setLength( bytes/2 ); char* b = (char*)str.d->unicode; s.readRawBytes( b, bytes ); if ( QChar::networkOrdered() != (s.byteOrder()==QDataStream::BigEndian) ) { bytes /= 2; while ( bytes-- ) { char c = b[0]; b[0] = b[1]; b[1] = c; b += 2; } } } else { str = ""; } } return s; } #endif // QT_NO_DATASTREAM /***************************************************************************** QConstString member functions *****************************************************************************/ /*! \class QConstString qstring.h \brief A QString which uses constant Unicode data. In order to minimize copying, highly optimized applications can use QConstString to provide a QString-compatible object from existing Unicode data. It is then the user's responsibility to make sure that the Unicode data must exist for the entire lifetime of the QConstString object. */ /*! Constructs a QConstString that uses the first \a length Unicode characters in the array \a unicode. Any attempt to modify copies of the string will cause it to create a copy of the data, thus it remains forever unmodified. Note that \a unicode is \e not \e copied. The caller \e must be able to guarantee that \a unicode will not be deleted or modified. Since that is generally not the case with \c const strings (they are references), this constructor demands a non-const pointer even though it never modifies \a unicode. */ QConstString::QConstString( QChar* unicode, uint length ) : QString(new QStringData(unicode, length, length),TRUE) { } /*! Destroys the QConstString, creating a copy of the data if other strings are still using it. */ QConstString::~QConstString() { if ( d->count > 1 ) { QChar* cp = QT_ALLOC_QCHAR_VEC( d->len ); memcpy( cp, d->unicode, d->len*sizeof(QChar) ); d->unicode = cp; } else { d->unicode = 0; } // The original d->unicode is now unlinked. } /*! \fn const QString& QConstString::string() const Returns a constant string referencing the data passed during construction. */ /*! Returns whether the strings starts with \a s, or not. */ bool QString::startsWith( const QString& s ) const { for ( int i =0; i < (int) s.length(); i++ ) { if ( i >= (int) length() || d->unicode[i] != s[i] ) return FALSE; } return TRUE; } #if defined(_OS_WIN32_) #include /*! Returns a static Windows TCHAR* from a QString, possibly adding NUL. The lifetime of the return value is until the next call to this function. */ const void* qt_winTchar(const QString& str_in, bool addnul) { // So that the return value lives long enough. static QString str; str = str_in; #ifdef UNICODE static uint buflen = 256; static TCHAR *buf = new TCHAR[buflen]; const QChar* uc = str.unicode(); #define EXTEND if (str.length() > buflen) { delete buf; buf = new TCHAR[buflen=str.length()+1]; } #if defined(_WS_X11_) || defined(_OS_WIN32_BYTESWAP_) EXTEND for ( int i=str.length(); i--; ) buf[i] = uc[i].row() << 8 | uc[i].cell(); if ( addnul ) buf[str.length()] = 0; #else // Same endianness of TCHAR if ( addnul ) { EXTEND memcpy(buf,uc,sizeof(TCHAR)*str.length()); buf[str.length()] = 0; } else { return uc; } #endif return buf; #undef EXTEND #else return str.latin1(); #endif } /*! Makes a new null terminated Windows TCHAR* from a QString. */ void* qt_winTchar_new(const QString& str) { TCHAR* result = new TCHAR[str.length()+1]; memcpy(result, qt_winTchar(str,FALSE), sizeof(TCHAR)*str.length()); result[str.length()] = 0; return result; } /*! Makes a QString from a Windows TCHAR*. */ QString qt_winQString(void* tc) { #ifdef UNICODE int len=0; while ( ((TCHAR*)tc)[len] ) len++; #if defined(_WS_X11_) || defined(_OS_WIN32_BYTESWAP_) QString r; for ( int i=0; i>8); return r; #else // Same endianness of TCHAR return QString((QChar*)tc,len); #endif #undef EXTEND #else return (TCHAR*)tc; #endif } QCString qt_winQString2MB( const QString& s, int uclen ) { if ( uclen < 0 ) uclen = s.length(); if ( uclen == 0 ) return QCString(); BOOL used_def; int bufSize=4096; QCString mb(bufSize); int len; while ( !(len=WideCharToMultiByte(CP_ACP, 0, (const WCHAR*)s.unicode(), uclen, mb.rawData(), bufSize-1, 0, &used_def)) ) { int r = GetLastError(); if ( r == ERROR_INSUFFICIENT_BUFFER ) { bufSize=1+WideCharToMultiByte( CP_ACP, 0, (const WCHAR*)s.unicode(), uclen, 0, 0, 0, &used_def); mb.resize(bufSize); // and try again... } else { // Fail. qWarning("WideCharToMultiByte cannot convert multibyte text (error %d): %s (UTF8)", r, s.utf8().data()); break; } } mb[len]='\0'; return mb; } // WATCH OUT: mblen must include the NUL (or just use -1) QString qt_winMB2QString( const char* mb, int mblen ) { if ( !mb || !mblen ) return QString::null; const int wclen_auto = 4096; WCHAR wc_auto[wclen_auto]; int wclen = wclen_auto; WCHAR *wc = wc_auto; int len; while ( !(len=MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, mb, mblen, wc, wclen )) ) { int r = GetLastError(); if ( r == ERROR_INSUFFICIENT_BUFFER ) { if ( wc != wc_auto ) { qWarning("Size changed in MultiByteToWideChar"); break; } else { wclen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, mb, mblen, 0, 0 ); wc = new WCHAR[wclen]; // and try again... } } else { // Fail. qWarning("MultiByteToWideChar cannot convert multibyte text"); break; } } if ( len <= 0 ) return QString::null; QString s( (QChar*)wc, len-1 ); // len-1: we don't want terminator if ( wc != wc_auto ) delete [] wc; return s; } #endif // _OS_WIN32_