whoami7 - Manager
:
/
home
/
creaupfw
/
www
/
wp-includes
/
assets
/
Upload File:
files >> /home/creaupfw/www/wp-includes/assets/vendor_perl.tar
version.pm 0000644 00000006735 15037233313 0006602 0 ustar 00 #!perl -w package version; use 5.006002; use strict; use warnings::register; if ($] >= 5.015) { warnings::register_categories(qw/version/); } our $VERSION = 0.9924; our $CLASS = 'version'; our (@ISA, $STRICT, $LAX); # !!!!Delete this next block completely when adding to Perl core!!!! { local $SIG{'__DIE__'}; eval "use version::vxs $VERSION"; if ( $@ ) { # don't have the XS version installed eval "use version::vpp $VERSION"; # don't tempt fate die "$@" if ( $@ ); push @ISA, "version::vpp"; local $^W; *version::qv = \&version::vpp::qv; *version::declare = \&version::vpp::declare; *version::_VERSION = \&version::vpp::_VERSION; *version::vcmp = \&version::vpp::vcmp; *version::new = \&version::vpp::new; *version::numify = \&version::vpp::numify; *version::normal = \&version::vpp::normal; if ($] >= 5.009000) { no strict 'refs'; *version::stringify = \&version::vpp::stringify; *{'version::(""'} = \&version::vpp::stringify; *{'version::(<=>'} = \&version::vpp::vcmp; *{'version::(cmp'} = \&version::vpp::vcmp; *version::parse = \&version::vpp::parse; } } else { # use XS module push @ISA, "version::vxs"; local $^W; *version::declare = \&version::vxs::declare; *version::qv = \&version::vxs::qv; *version::_VERSION = \&version::vxs::_VERSION; *version::vcmp = \&version::vxs::VCMP; *version::new = \&version::vxs::new; *version::numify = \&version::vxs::numify; *version::normal = \&version::vxs::normal; if ($] >= 5.009000) { no strict 'refs'; *version::stringify = \&version::vxs::stringify; *{'version::(""'} = \&version::vxs::stringify; *{'version::(<=>'} = \&version::vxs::VCMP; *{'version::(cmp'} = \&version::vxs::VCMP; *version::parse = \&version::vxs::parse; } } } # avoid using Exporter require version::regex; *version::is_lax = \&version::regex::is_lax; *version::is_strict = \&version::regex::is_strict; *LAX = \$version::regex::LAX; *LAX_DECIMAL_VERSION = \$version::regex::LAX_DECIMAL_VERSION; *LAX_DOTTED_DECIMAL_VERSION = \$version::regex::LAX_DOTTED_DECIMAL_VERSION; *STRICT = \$version::regex::STRICT; *STRICT_DECIMAL_VERSION = \$version::regex::STRICT_DECIMAL_VERSION; *STRICT_DOTTED_DECIMAL_VERSION = \$version::regex::STRICT_DOTTED_DECIMAL_VERSION; sub import { no strict 'refs'; my ($class) = shift; # Set up any derived class unless ($class eq $CLASS) { local $^W; *{$class.'::declare'} = \&{$CLASS.'::declare'}; *{$class.'::qv'} = \&{$CLASS.'::qv'}; } my %args; if (@_) { # any remaining terms are arguments map { $args{$_} = 1 } @_ } else { # no parameters at all on use line %args = ( qv => 1, 'UNIVERSAL::VERSION' => 1, ); } my $callpkg = caller(); if (exists($args{declare})) { *{$callpkg.'::declare'} = sub {return $class->declare(shift) } unless defined(&{$callpkg.'::declare'}); } if (exists($args{qv})) { *{$callpkg.'::qv'} = sub {return $class->qv(shift) } unless defined(&{$callpkg.'::qv'}); } if (exists($args{'UNIVERSAL::VERSION'})) { local $^W; *UNIVERSAL::VERSION = \&{$CLASS.'::_VERSION'}; } if (exists($args{'VERSION'})) { *{$callpkg.'::VERSION'} = \&{$CLASS.'::_VERSION'}; } if (exists($args{'is_strict'})) { *{$callpkg.'::is_strict'} = \&{$CLASS.'::is_strict'} unless defined(&{$callpkg.'::is_strict'}); } if (exists($args{'is_lax'})) { *{$callpkg.'::is_lax'} = \&{$CLASS.'::is_lax'} unless defined(&{$callpkg.'::is_lax'}); } } 1; version.pod 0000644 00000023150 15037233313 0006736 0 ustar 00 =head1 NAME version - Perl extension for Version Objects =head1 SYNOPSIS # Parsing version strings (decimal or dotted-decimal) use version 0.77; # get latest bug-fixes and API $ver = version->parse($string) # Declaring a dotted-decimal $VERSION (keep on one line!) use version; our $VERSION = version->declare("v1.2.3"); # formal use version; our $VERSION = qv("v1.2.3"); # deprecated use version; our $VERSION = qv("v1.2_3"); # deprecated # Declaring an old-style decimal $VERSION (use quotes!) our $VERSION = "1.0203"; # recommended use version; our $VERSION = version->parse("1.0203"); # formal use version; our $VERSION = version->parse("1.02_03"); # alpha # Comparing mixed version styles (decimals, dotted-decimals, objects) if ( version->parse($v1) == version->parse($v2) ) { # do stuff } # Sorting mixed version styles @ordered = sort { version->parse($a) <=> version->parse($b) } @list; =head1 DESCRIPTION Version objects were added to Perl in 5.10. This module implements version objects for older version of Perl and provides the version object API for all versions of Perl. All previous releases before 0.74 are deprecated and should not be used due to incompatible API changes. Version 0.77 introduces the new 'parse' and 'declare' methods to standardize usage. You are strongly urged to set 0.77 as a minimum in your code, e.g. use version 0.77; # even for Perl v.5.10.0 =head1 TYPES OF VERSION OBJECTS There are two different types of version objects, corresponding to the two different styles of versions in use: =over 2 =item Decimal Versions The classic floating-point number $VERSION. The advantage to this style is that you don't need to do anything special, just type a number into your source file. Quoting is recommended, as it ensures that trailing zeroes ("1.50") are preserved in any warnings or other output. =item Dotted Decimal Versions The more modern form of version assignment, with 3 (or potentially more) integers separated by decimal points (e.g. v1.2.3). This is the form that Perl itself has used since 5.6.0 was released. The leading 'v' is now strongly recommended for clarity, and will throw a warning in a future release if omitted. A leading 'v' character is required to pass the L</is_strict()> test. =back =head1 DECLARING VERSIONS If you have a module that uses a decimal $VERSION (floating point), and you do not intend to ever change that, this module is not for you. There is nothing that version.pm gains you over a simple $VERSION assignment: our $VERSION = "1.02"; Since Perl v5.10.0 includes the version.pm comparison logic anyways, you don't need to do anything at all. =head2 How to convert a module from decimal to dotted-decimal If you have used a decimal $VERSION in the past and wish to switch to a dotted-decimal $VERSION, then you need to make a one-time conversion to the new format. B<Important Note>: you must ensure that your new $VERSION is numerically greater than your current decimal $VERSION; this is not always obvious. First, convert your old decimal version (e.g. 1.02) to a normalized dotted-decimal form: $ perl -Mversion -e 'print version->parse("1.02")->normal' v1.20.0 Then increment any of the dotted-decimal components (v1.20.1 or v1.21.0). =head2 How to C<declare()> a dotted-decimal version use version; our $VERSION = version->declare("v1.2.3"); The C<declare()> method always creates dotted-decimal version objects. When used in a module, you B<must> put it on the same line as "use version" to ensure that $VERSION is read correctly by PAUSE and installer tools. You should also add 'version' to the 'configure_requires' section of your module metadata file. See instructions in L<ExtUtils::MakeMaker> or L<Module::Build> for details. B<Important Note>: Even if you pass in what looks like a decimal number ("1.2"), a dotted-decimal will be created ("v1.200.0"). To avoid confusion or unintentional errors on older Perls, follow these guidelines: =over 2 =item * Always use a dotted-decimal with (at least) three components =item * Always use a leading-v =item * Always quote the version =back If you really insist on using version.pm with an ordinary decimal version, use C<parse()> instead of declare. See the L<PARSING AND COMPARING VERSIONS> for details. See also L<version::Internals> for more on version number conversion, quoting, calculated version numbers and declaring developer or "alpha" version numbers. =head1 PARSING AND COMPARING VERSIONS If you need to compare version numbers, but can't be sure whether they are expressed as numbers, strings, v-strings or version objects, then you should use version.pm to parse them all into objects for comparison. =head2 How to C<parse()> a version The C<parse()> method takes in anything that might be a version and returns a corresponding version object, doing any necessary conversion along the way. =over 2 =item * Dotted-decimal: bare v-strings (v1.2.3) and strings with more than one decimal point and a leading 'v' ("v1.2.3"); NOTE you can technically use a v-string or strings with a leading-v and only one decimal point (v1.2 or "v1.2"), but you will confuse both yourself and others. =item * Decimal: regular decimal numbers (literal or in a string) =back Some examples: $variable version->parse($variable) --------- ------------------------- 1.23 v1.230.0 "1.23" v1.230.0 v1.23 v1.23.0 "v1.23" v1.23.0 "1.2.3" v1.2.3 "v1.2.3" v1.2.3 See L<version::Internals> for more on version number conversion. =head2 How to check for a legal version string If you do not want to actually create a full blown version object, but would still like to verify that a given string meets the criteria to be parsed as a version, there are two helper functions that can be employed directly: =over 4 =item C<is_lax()> The lax criteria corresponds to what is currently allowed by the version parser. All of the following formats are acceptable for dotted-decimal formats strings: v1.2 1.2345.6 v1.23_4 1.2345 1.2345_01 =item C<is_strict()> If you want to limit yourself to a much more narrow definition of what a version string constitutes, C<is_strict()> is limited to version strings like the following list: v1.234.5 2.3456 =back See L<version::Internals> for details of the regular expressions that define the legal version string forms, as well as how to use those regular expressions in your own code if C<is_lax()> and C<is_strict()> are not sufficient for your needs. =head2 How to compare version objects Version objects overload the C<cmp> and C<< <=> >> operators. Perl automatically generates all of the other comparison operators based on those two so all the normal logical comparisons will work. if ( version->parse($v1) == version->parse($v2) ) { # do stuff } If a version object is compared against a non-version object, the non-object term will be converted to a version object using C<parse()>. This may give surprising results: $v1 = version->parse("v0.95.0"); $bool = $v1 < 0.96; # FALSE since 0.96 is v0.960.0 Always comparing to a version object will help avoid surprises: $bool = $v1 < version->parse("v0.96.0"); # TRUE Note that "alpha" version objects (where the version string contains a trailing underscore segment) compare as less than the equivalent version without an underscore: $bool = version->parse("1.23_45") < version->parse("1.2345"); # TRUE See L<version::Internals> for more details on "alpha" versions. =head1 OBJECT METHODS =head2 is_alpha() True if and only if the version object was created with a underscore, e.g. version->parse('1.002_03')->is_alpha; # TRUE version->declare('1.2.3_4')->is_alpha; # TRUE =head2 is_qv() True only if the version object is a dotted-decimal version, e.g. version->parse('v1.2.0')->is_qv; # TRUE version->declare('v1.2')->is_qv; # TRUE qv('1.2')->is_qv; # TRUE version->parse('1.2')->is_qv; # FALSE =head2 normal() Returns a string with a standard 'normalized' dotted-decimal form with a leading-v and at least 3 components. version->declare('v1.2')->normal; # v1.2.0 version->parse('1.2')->normal; # v1.200.0 =head2 numify() Returns a value representing the object in a pure decimal. version->declare('v1.2')->numify; # 1.002000 version->parse('1.2')->numify; # 1.200 =head2 stringify() Returns a string that is as close to the original representation as possible. If the original representation was a numeric literal, it will be returned the way perl would normally represent it in a string. This method is used whenever a version object is interpolated into a string. version->declare('v1.2')->stringify; # v1.2 version->parse('1.200')->stringify; # 1.2 version->parse(1.02_30)->stringify; # 1.023 =head1 EXPORTED FUNCTIONS =head2 qv() This function is no longer recommended for use, but is maintained for compatibility with existing code. If you do not want to have it exported to your namespace, use this form: use version 0.77 (); =head2 is_lax() (Not exported by default) This function takes a scalar argument and returns a boolean value indicating whether the argument meets the "lax" rules for a version number. Leading and trailing spaces are not allowed. =head2 is_strict() (Not exported by default) This function takes a scalar argument and returns a boolean value indicating whether the argument meets the "strict" rules for a version number. Leading and trailing spaces are not allowed. =head1 AUTHOR John Peacock E<lt>jpeacock@cpan.orgE<gt> =head1 SEE ALSO L<version::Internals>. L<perl>. =cut Sub/Util.pm 0000644 00000010642 15037233313 0006553 0 ustar 00 # Copyright (c) 2014 Paul Evans <leonerd@leonerd.org.uk>. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. package Sub::Util; use strict; use warnings; require Exporter; our @ISA = qw( Exporter ); our @EXPORT_OK = qw( prototype set_prototype subname set_subname ); our $VERSION = "1.49"; $VERSION = eval $VERSION; require List::Util; # as it has the XS List::Util->VERSION( $VERSION ); # Ensure we got the right XS version (RT#100863) =head1 NAME Sub::Util - A selection of utility subroutines for subs and CODE references =head1 SYNOPSIS use Sub::Util qw( prototype set_prototype subname set_subname ); =head1 DESCRIPTION C<Sub::Util> contains a selection of utility subroutines that are useful for operating on subs and CODE references. The rationale for inclusion in this module is that the function performs some work for which an XS implementation is essential because it cannot be implemented in Pure Perl, and which is sufficiently-widely used across CPAN that its popularity warrants inclusion in a core module, which this is. =cut =head1 FUNCTIONS =cut =head2 prototype my $proto = prototype( $code ) I<Since version 1.40.> Returns the prototype of the given C<$code> reference, if it has one, as a string. This is the same as the C<CORE::prototype> operator; it is included here simply for symmetry and completeness with the other functions. =cut sub prototype { my ( $code ) = @_; return CORE::prototype( $code ); } =head2 set_prototype my $code = set_prototype $prototype, $code; I<Since version 1.40.> Sets the prototype of the function given by the C<$code> reference, or deletes it if C<$prototype> is C<undef>. Returns the C<$code> reference itself. I<Caution>: This function takes arguments in a different order to the previous copy of the code from C<Scalar::Util>. This is to match the order of C<set_subname>, and other potential additions in this file. This order has been chosen as it allows a neat and simple chaining of other C<Sub::Util::set_*> functions as might become available, such as: my $code = set_subname name_here => set_prototype '&@' => set_attribute ':lvalue' => sub { ...... }; =cut =head2 subname my $name = subname( $code ) I<Since version 1.40.> Returns the name of the given C<$code> reference, if it has one. Normal named subs will give a fully-qualified name consisting of the package and the localname separated by C<::>. Anonymous code references will give C<__ANON__> as the localname. If a name has been set using L</set_subname>, this name will be returned instead. This function was inspired by C<sub_fullname> from L<Sub::Identify>. The remaining functions that C<Sub::Identify> implements can easily be emulated using regexp operations, such as sub get_code_info { return (subname $_[0]) =~ m/^(.+)::(.+?)$/ } sub sub_name { return (get_code_info $_[0])[0] } sub stash_name { return (get_code_info $_[0])[1] } I<Users of Sub::Name beware>: This function is B<not> the same as C<Sub::Name::subname>; it returns the existing name of the sub rather than changing it. To set or change a name, see instead L</set_subname>. =cut =head2 set_subname my $code = set_subname $name, $code; I<Since version 1.40.> Sets the name of the function given by the C<$code> reference. Returns the C<$code> reference itself. If the C<$name> is unqualified, the package of the caller is used to qualify it. This is useful for applying names to anonymous CODE references so that stack traces and similar situations, to give a useful name rather than having the default of C<__ANON__>. Note that this name is only used for this situation; the C<set_subname> will not install it into the symbol table; you will have to do that yourself if required. However, since the name is not used by perl except as the return value of C<caller>, for stack traces or similar, there is no actual requirement that the name be syntactically valid as a perl function name. This could be used to attach extra information that could be useful in debugging stack traces. This function was copied from C<Sub::Name::subname> and renamed to the naming convention of this module. =cut =head1 AUTHOR The general structure of this module was written by Paul Evans <leonerd@leonerd.org.uk>. The XS implementation of L</set_subname> was copied from L<Sub::Name> by Matthijs van Duin <xmath@cpan.org> =cut 1; IO/Pty.pm 0000644 00000021632 15037233313 0006171 0 ustar 00 # Documentation at the __END__ package IO::Pty; use strict; use Carp; use IO::Tty qw(TIOCSCTTY TCSETCTTY TIOCNOTTY); use IO::File; require POSIX; use vars qw(@ISA $VERSION); $VERSION = '1.12'; # keep same as in Tty.pm @ISA = qw(IO::Handle); eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty }; push @ISA, "IO::Stty" if (not $@); # if IO::Stty is installed sub new { my ($class) = $_[0] || "IO::Pty"; $class = ref($class) if ref($class); @_ <= 1 or croak 'usage: new $class'; my ($ptyfd, $ttyfd, $ttyname) = pty_allocate(); croak "Cannot open a pty" if not defined $ptyfd; my $pty = $class->SUPER::new_from_fd($ptyfd, "r+"); croak "Cannot create a new $class from fd $ptyfd: $!" if not $pty; $pty->autoflush(1); bless $pty => $class; my $slave = IO::Tty->new_from_fd($ttyfd, "r+"); croak "Cannot create a new IO::Tty from fd $ttyfd: $!" if not $slave; $slave->autoflush(1); ${*$pty}{'io_pty_slave'} = $slave; ${*$pty}{'io_pty_ttyname'} = $ttyname; ${*$slave}{'io_tty_ttyname'} = $ttyname; return $pty; } sub ttyname { @_ == 1 or croak 'usage: $pty->ttyname();'; my $pty = shift; ${*$pty}{'io_pty_ttyname'}; } sub close_slave { @_ == 1 or croak 'usage: $pty->close_slave();'; my $master = shift; if (exists ${*$master}{'io_pty_slave'}) { close ${*$master}{'io_pty_slave'}; delete ${*$master}{'io_pty_slave'}; } } sub slave { @_ == 1 or croak 'usage: $pty->slave();'; my $master = shift; if (exists ${*$master}{'io_pty_slave'}) { return ${*$master}{'io_pty_slave'}; } my $tty = ${*$master}{'io_pty_ttyname'}; my $slave = new IO::Tty; $slave->open($tty, O_RDWR | O_NOCTTY) || croak "Cannot open slave $tty: $!"; return $slave; } sub make_slave_controlling_terminal { @_ == 1 or croak 'usage: $pty->make_slave_controlling_terminal();'; my $self = shift; local(*DEVTTY); # loose controlling terminal explicitly if (defined TIOCNOTTY) { if (open (\*DEVTTY, "/dev/tty")) { ioctl( \*DEVTTY, TIOCNOTTY, 0 ); close \*DEVTTY; } } # Create a new 'session', lose controlling terminal. if (not POSIX::setsid()) { warn "setsid() failed, strange behavior may result: $!\r\n" if $^W; } if (open(\*DEVTTY, "/dev/tty")) { warn "Could not disconnect from controlling terminal?!\n" if $^W; close \*DEVTTY; } # now open slave, this should set it as controlling tty on some systems my $ttyname = ${*$self}{'io_pty_ttyname'}; my $slv = new IO::Tty; $slv->open($ttyname, O_RDWR) or croak "Cannot open slave $ttyname: $!"; if (not exists ${*$self}{'io_pty_slave'}) { ${*$self}{'io_pty_slave'} = $slv; } else { $slv->close; } # Acquire a controlling terminal if this doesn't happen automatically if (not open(\*DEVTTY, "/dev/tty")) { if (defined TIOCSCTTY) { if (not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 )) { warn "warning: TIOCSCTTY failed, slave might not be set as controlling terminal: $!" if $^W; } } elsif (defined TCSETCTTY) { if (not defined ioctl( ${*$self}{'io_pty_slave'}, TCSETCTTY, 0 )) { warn "warning: TCSETCTTY failed, slave might not be set as controlling terminal: $!" if $^W; } } else { warn "warning: You have neither TIOCSCTTY nor TCSETCTTY on your system\n" if $^W; return 0; } } if (not open(\*DEVTTY, "/dev/tty")) { warn "Error: could not connect pty as controlling terminal!\n"; return undef; } else { close \*DEVTTY; } return 1; } *clone_winsize_from = \&IO::Tty::clone_winsize_from; *get_winsize = \&IO::Tty::get_winsize; *set_winsize = \&IO::Tty::set_winsize; *set_raw = \&IO::Tty::set_raw; 1; __END__ =head1 NAME IO::Pty - Pseudo TTY object class =head1 VERSION 1.12 =head1 SYNOPSIS use IO::Pty; $pty = new IO::Pty; $slave = $pty->slave; foreach $val (1..10) { print $pty "$val\n"; $_ = <$slave>; print "$_"; } close($slave); =head1 DESCRIPTION C<IO::Pty> provides an interface to allow the creation of a pseudo tty. C<IO::Pty> inherits from C<IO::Handle> and so provide all the methods defined by the C<IO::Handle> package. Please note that pty creation is very system-dependend. If you have problems, see L<IO::Tty> for help. =head1 CONSTRUCTOR =over 3 =item new The C<new> constructor takes no arguments and returns a new file object which is the master side of the pseudo tty. =back =head1 METHODS =over 4 =item ttyname() Returns the name of the slave pseudo tty. On UNIX machines this will be the pathname of the device. Use this name for informational purpose only, to get a slave filehandle, use slave(). =item slave() The C<slave> method will return the slave filehandle of the given master pty, opening it anew if necessary. If IO::Stty is installed, you can then call C<$slave-E<gt>stty()> to modify the terminal settings. =item close_slave() The slave filehandle will be closed and destroyed. This is necessary in the parent after forking to get rid of the open filehandle, otherwise the parent will not notice if the child exits. Subsequent calls of C<slave()> will return a newly opened slave filehandle. =item make_slave_controlling_terminal() This will set the slave filehandle as the controlling terminal of the current process, which will become a session leader, so this should only be called by a child process after a fork(), e.g. in the callback to C<sync_exec()> (see L<Proc::SyncExec>). See the C<try> script (also C<test.pl>) for an example how to correctly spawn a subprocess. =item set_raw() Will set the pty to raw. Note that this is a one-way operation, you need IO::Stty to set the terminal settings to anything else. On some systems, the master pty is not a tty. This method checks for that and returns success anyway on such systems. Note that this method must be called on the slave, and probably should be called on the master, just to be sure, i.e. $pty->slave->set_raw(); $pty->set_raw(); =item clone_winsize_from(\*FH) Gets the terminal size from filehandle FH (which must be a terminal) and transfers it to the pty. Returns true on success and undef on failure. Note that this must be called upon the I<slave>, i.e. $pty->slave->clone_winsize_from(\*STDIN); On some systems, the master pty also isatty. I actually have no idea if setting terminal sizes there is passed through to the slave, so if this method is called for a master that is not a tty, it silently returns OK. See the C<try> script for example code how to propagate SIGWINCH. =item get_winsize() Returns the terminal size, in a 4-element list. ($row, $col, $xpixel, $ypixel) = $tty->get_winsize() =item set_winsize($row, $col, $xpixel, $ypixel) Sets the terminal size. If not specified, C<$xpixel> and C<$ypixel> are set to 0. As with C<clone_winsize_from>, this must be called upon the I<slave>. =back =head1 SEE ALSO L<IO::Tty>, L<IO::Tty::Constant>, L<IO::Handle>, L<Expect>, L<Proc::SyncExec> =head1 MAILING LISTS As this module is mainly used by Expect, support for it is available via the two Expect mailing lists, expectperl-announce and expectperl-discuss, at http://lists.sourceforge.net/lists/listinfo/expectperl-announce and http://lists.sourceforge.net/lists/listinfo/expectperl-discuss =head1 AUTHORS Originally by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>, based on the Ptty module by Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>. Now maintained and heavily rewritten by Roland Giersig E<lt>F<RGiersig@cpan.org>E<gt>. Contains copyrighted stuff from openssh v3.0p1, authored by Tatu Ylonen <ylo@cs.hut.fi>, Markus Friedl and Todd C. Miller <Todd.Miller@courtesan.com>. =head1 COPYRIGHT Now all code is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Nevertheless the above AUTHORS retain their copyrights to the various parts and want to receive credit if their source code is used. See the source for details. =head1 DISCLAIMER THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. In other words: Use at your own risk. Provided as is. Your mileage may vary. Read the source, Luke! And finally, just to be sure: Any Use of This Product, in Any Manner Whatsoever, Will Increase the Amount of Disorder in the Universe. Although No Liability Is Implied Herein, the Consumer Is Warned That This Process Will Ultimately Lead to the Heat Death of the Universe. =cut IO/Tty.pm 0000644 00000017640 15037233313 0006201 0 ustar 00 # Documentation at the __END__ # -*-cperl-*- package IO::Tty; use IO::Handle; use IO::File; use IO::Tty::Constant; use Carp; require POSIX; require DynaLoader; use vars qw(@ISA $VERSION $XS_VERSION $CONFIG $DEBUG); $VERSION = '1.12'; $XS_VERSION = "1.12"; @ISA = qw(IO::Handle); eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty }; push @ISA, "IO::Stty" if (not $@); # if IO::Stty is installed BOOT_XS: { # If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO require DynaLoader; # DynaLoader calls dl_load_flags as a static method. *dl_load_flags = DynaLoader->can('dl_load_flags'); do { defined(&bootstrap) ? \&bootstrap : \&DynaLoader::bootstrap }->(__PACKAGE__); } sub import { IO::Tty::Constant->export_to_level(1, @_); } sub open { my($tty,$dev,$mode) = @_; IO::File::open($tty,$dev,$mode) or return undef; $tty->autoflush; 1; } sub clone_winsize_from { my ($self, $fh) = @_; croak "Given filehandle is not a tty in clone_winsize_from, called" if not POSIX::isatty($fh); return 1 if not POSIX::isatty($self); # ignored for master ptys my $winsize = " "x1024; # preallocate memory ioctl($fh, &IO::Tty::Constant::TIOCGWINSZ, $winsize) and ioctl($self, &IO::Tty::Constant::TIOCSWINSZ, $winsize) and return 1; warn "clone_winsize_from: error: $!" if $^W; return undef; } # ioctl() doesn't tell us how long the structure is, so we'll have to trim it # after TIOCGWINSZ my $SIZEOF_WINSIZE = length IO::Tty::pack_winsize(0,0,0,0); sub get_winsize { my $self = shift; ioctl($self, IO::Tty::Constant::TIOCGWINSZ(), my $winsize) or croak "Cannot TIOCGWINSZ - $!"; substr($winsize, $SIZEOF_WINSIZE) = ""; return IO::Tty::unpack_winsize($winsize); } sub set_winsize { my $self = shift; my $winsize = IO::Tty::pack_winsize(@_); ioctl($self, IO::Tty::Constant::TIOCSWINSZ(), $winsize) or croak "Cannot TIOCSWINSZ - $!"; } sub set_raw($) { require POSIX; my $self = shift; return 1 if not POSIX::isatty($self); my $ttyno = fileno($self); my $termios = new POSIX::Termios; unless ($termios) { warn "set_raw: new POSIX::Termios failed: $!"; return undef; } unless ($termios->getattr($ttyno)) { warn "set_raw: getattr($ttyno) failed: $!"; return undef; } $termios->setiflag(0); $termios->setoflag(0); $termios->setlflag(0); $termios->setcc(&POSIX::VMIN, 1); $termios->setcc(&POSIX::VTIME, 0); unless ($termios->setattr($ttyno, &POSIX::TCSANOW)) { warn "set_raw: setattr($ttyno) failed: $!"; return undef; } return 1; } 1; __END__ =head1 NAME IO::Tty - Low-level allocate a pseudo-Tty, import constants. =head1 VERSION 1.12 =head1 SYNOPSIS use IO::Tty qw(TIOCNOTTY); ... # use only to import constants, see IO::Pty to create ptys. =head1 DESCRIPTION C<IO::Tty> is used internally by C<IO::Pty> to create a pseudo-tty. You wouldn't want to use it directly except to import constants, use C<IO::Pty>. For a list of importable constants, see L<IO::Tty::Constant>. Windows is now supported, but ONLY under the Cygwin environment, see L<http://sources.redhat.com/cygwin/>. Please note that pty creation is very system-dependend. From my experience, any modern POSIX system should be fine. Find below a list of systems that C<IO::Tty> should work on. A more detailed table (which is slowly getting out-of-date) is available from the project pages document manager at SourceForge L<http://sourceforge.net/projects/expectperl/>. If you have problems on your system and your system is listed in the "verified" list, you probably have some non-standard setup, e.g. you compiled your Linux-kernel yourself and disabled ptys (bummer!). Please ask your friendly sysadmin for help. If your system is not listed, unpack the latest version of C<IO::Tty>, do a C<'perl Makefile.PL; make; make test; uname -a'> and send me (F<RGiersig@cpan.org>) the results and I'll see what I can deduce from that. There are chances that it will work right out-of-the-box... If it's working on your system, please send me a short note with details (version number, distribution, etc. 'uname -a' and 'perl -V' is a good start; also, the output from "perl Makefile.PL" contains a lot of interesting info, so please include that as well) so I can get an overview. Thanks! =head1 VERIFIED SYSTEMS, KNOWN ISSUES This is a list of systems that C<IO::Tty> seems to work on ('make test' passes) with comments about "features": =over 4 =item * AIX 4.3 Returns EIO instead of EOF when the slave is closed. Benign. =item * AIX 5.x =item * FreeBSD 4.4 EOF on the slave tty is not reported back to the master. =item * OpenBSD 2.8 The ioctl TIOCSCTTY sometimes fails. This is also known in Tcl/Expect, see http://expect.nist.gov/FAQ.html EOF on the slave tty is not reported back to the master. =item * Darwin 7.9.0 =item * HPUX 10.20 & 11.00 EOF on the slave tty is not reported back to the master. =item * IRIX 6.5 =item * Linux 2.2.x & 2.4.x Returns EIO instead of EOF when the slave is closed. Benign. =item * OSF 4.0 EOF on the slave tty is not reported back to the master. =item * Solaris 8, 2.7, 2.6 Has the "feature" of returning EOF just once?! EOF on the slave tty is not reported back to the master. =item * Windows NT/2k/XP (under Cygwin) When you send (print) a too long line (>160 chars) to a non-raw pty, the call just hangs forever and even alarm() cannot get you out. Don't complain to me... EOF on the slave tty is not reported back to the master. =item * z/OS =back The following systems have not been verified yet for this version, but a previous version worked on them: =over 4 =item * SCO Unix =item * NetBSD probably the same as the other *BSDs... =back If you have additions to these lists, please mail them to E<lt>F<RGiersig@cpan.org>E<gt>. =head1 SEE ALSO L<IO::Pty>, L<IO::Tty::Constant> =head1 MAILING LISTS As this module is mainly used by Expect, support for it is available via the two Expect mailing lists, expectperl-announce and expectperl-discuss, at http://lists.sourceforge.net/lists/listinfo/expectperl-announce and http://lists.sourceforge.net/lists/listinfo/expectperl-discuss =head1 AUTHORS Originally by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>, based on the Ptty module by Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>. Now maintained and heavily rewritten by Roland Giersig E<lt>F<RGiersig@cpan.org>E<gt>. Contains copyrighted stuff from openssh v3.0p1, authored by Tatu Ylonen <ylo@cs.hut.fi>, Markus Friedl and Todd C. Miller <Todd.Miller@courtesan.com>. I also got a lot of inspiration from the pty code in Xemacs. =head1 COPYRIGHT Now all code is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Nevertheless the above AUTHORS retain their copyrights to the various parts and want to receive credit if their source code is used. See the source for details. =head1 DISCLAIMER THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. In other words: Use at your own risk. Provided as is. Your mileage may vary. Read the source, Luke! And finally, just to be sure: Any Use of This Product, in Any Manner Whatsoever, Will Increase the Amount of Disorder in the Universe. Although No Liability Is Implied Herein, the Consumer Is Warned That This Process Will Ultimately Lead to the Heat Death of the Universe. =cut IO/Tty/Constant.pm 0000644 00000016020 15037233313 0007761 0 ustar 00 package IO::Tty::Constant; use vars qw(@ISA @EXPORT_OK); require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(B0 B110 B115200 B1200 B134 B150 B153600 B1800 B19200 B200 B230400 B2400 B300 B307200 B38400 B460800 B4800 B50 B57600 B600 B75 B76800 B9600 BRKINT BS0 BS1 BSDLY CBAUD CBAUDEXT CBRK CCTS_OFLOW CDEL CDSUSP CEOF CEOL CEOL2 CEOT CERASE CESC CFLUSH CIBAUD CIBAUDEXT CINTR CKILL CLNEXT CLOCAL CNSWTCH CNUL CQUIT CR0 CR1 CR2 CR3 CRDLY CREAD CRPRNT CRTSCTS CRTSXOFF CRTS_IFLOW CS5 CS6 CS7 CS8 CSIZE CSTART CSTOP CSTOPB CSUSP CSWTCH CWERASE DEFECHO DIOC DIOCGETP DIOCSETP DOSMODE ECHO ECHOCTL ECHOE ECHOK ECHOKE ECHONL ECHOPRT EXTA EXTB FF0 FF1 FFDLY FIORDCHK FLUSHO HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR IMAXBEL INLCR INPCK ISIG ISTRIP IUCLC IXANY IXOFF IXON KBENABLED LDCHG LDCLOSE LDDMAP LDEMAP LDGETT LDGMAP LDIOC LDNMAP LDOPEN LDSETT LDSMAP LOBLK NCCS NL0 NL1 NLDLY NOFLSH OCRNL OFDEL OFILL OLCUC ONLCR ONLRET ONOCR OPOST PAGEOUT PARENB PAREXT PARMRK PARODD PENDIN RCV1EN RTS_TOG TAB0 TAB1 TAB2 TAB3 TABDLY TCDSET TCFLSH TCGETA TCGETS TCIFLUSH TCIOFF TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW TCSBRK TCSETA TCSETAF TCSETAW TCSETCTTY TCSETS TCSETSF TCSETSW TCXONC TERM_D40 TERM_D42 TERM_H45 TERM_NONE TERM_TEC TERM_TEX TERM_V10 TERM_V61 TIOCCBRK TIOCCDTR TIOCCONS TIOCEXCL TIOCFLUSH TIOCGETD TIOCGETC TIOCGETP TIOCGLTC TIOCSETC TIOCSETN TIOCSETP TIOCSLTC TIOCGPGRP TIOCGSID TIOCGSOFTCAR TIOCGWINSZ TIOCHPCL TIOCKBOF TIOCKBON TIOCLBIC TIOCLBIS TIOCLGET TIOCLSET TIOCMBIC TIOCMBIS TIOCMGET TIOCMSET TIOCM_CAR TIOCM_CD TIOCM_CTS TIOCM_DSR TIOCM_DTR TIOCM_LE TIOCM_RI TIOCM_RNG TIOCM_RTS TIOCM_SR TIOCM_ST TIOCNOTTY TIOCNXCL TIOCOUTQ TIOCREMOTE TIOCSBRK TIOCSCTTY TIOCSDTR TIOCSETD TIOCSIGNAL TIOCSPGRP TIOCSSID TIOCSSOFTCAR TIOCSTART TIOCSTI TIOCSTOP TIOCSWINSZ TM_ANL TM_CECHO TM_CINVIS TM_LCF TM_NONE TM_SET TM_SNL TOSTOP VCEOF VCEOL VDISCARD VDSUSP VEOF VEOL VEOL2 VERASE VINTR VKILL VLNEXT VMIN VQUIT VREPRINT VSTART VSTOP VSUSP VSWTCH VT0 VT1 VTDLY VTIME VWERASE WRAP XCASE XCLUDE XMT1EN XTABS); __END__ =head1 NAME IO::Tty::Constant - Terminal Constants (autogenerated) =head1 SYNOPSIS use IO::Tty::Constant qw(TIOCNOTTY); ... =head1 DESCRIPTION This package defines constants usually found in <termio.h> or <termios.h> (and their #include hierarchy). Find below an autogenerated alphabetic list of all known constants and whether they are defined on your system (prefixed with '+') and have compilation problems ('o'). Undefined or problematic constants are set to 'undef'. =head1 DEFINED CONSTANTS =item + B0 =item + B110 =item + B115200 =item + B1200 =item + B134 =item + B150 =item - B153600 =item + B1800 =item + B19200 =item + B200 =item + B230400 =item + B2400 =item + B300 =item - B307200 =item + B38400 =item + B460800 =item + B4800 =item + B50 =item + B57600 =item + B600 =item + B75 =item - B76800 =item + B9600 =item + BRKINT =item + BS0 =item + BS1 =item + BSDLY =item + CBAUD =item - CBAUDEXT =item + CBRK =item - CCTS_OFLOW =item - CDEL =item + CDSUSP =item + CEOF =item + CEOL =item - CEOL2 =item + CEOT =item + CERASE =item - CESC =item + CFLUSH =item + CIBAUD =item - CIBAUDEXT =item + CINTR =item + CKILL =item + CLNEXT =item + CLOCAL =item - CNSWTCH =item - CNUL =item + CQUIT =item + CR0 =item + CR1 =item + CR2 =item + CR3 =item + CRDLY =item + CREAD =item + CRPRNT =item + CRTSCTS =item - CRTSXOFF =item - CRTS_IFLOW =item + CS5 =item + CS6 =item + CS7 =item + CS8 =item + CSIZE =item + CSTART =item + CSTOP =item + CSTOPB =item + CSUSP =item - CSWTCH =item + CWERASE =item - DEFECHO =item - DIOC =item - DIOCGETP =item - DIOCSETP =item - DOSMODE =item + ECHO =item + ECHOCTL =item + ECHOE =item + ECHOK =item + ECHOKE =item + ECHONL =item + ECHOPRT =item + EXTA =item + EXTB =item + FF0 =item + FF1 =item + FFDLY =item - FIORDCHK =item + FLUSHO =item + HUPCL =item + ICANON =item + ICRNL =item + IEXTEN =item + IGNBRK =item + IGNCR =item + IGNPAR =item + IMAXBEL =item + INLCR =item + INPCK =item + ISIG =item + ISTRIP =item + IUCLC =item + IXANY =item + IXOFF =item + IXON =item - KBENABLED =item - LDCHG =item - LDCLOSE =item - LDDMAP =item - LDEMAP =item - LDGETT =item - LDGMAP =item - LDIOC =item - LDNMAP =item - LDOPEN =item - LDSETT =item - LDSMAP =item - LOBLK =item + NCCS =item + NL0 =item + NL1 =item + NLDLY =item + NOFLSH =item + OCRNL =item + OFDEL =item + OFILL =item + OLCUC =item + ONLCR =item + ONLRET =item + ONOCR =item + OPOST =item - PAGEOUT =item + PARENB =item - PAREXT =item + PARMRK =item + PARODD =item + PENDIN =item - RCV1EN =item - RTS_TOG =item + TAB0 =item + TAB1 =item + TAB2 =item + TAB3 =item + TABDLY =item - TCDSET =item + TCFLSH =item + TCGETA =item + TCGETS =item + TCIFLUSH =item + TCIOFF =item + TCIOFLUSH =item + TCION =item + TCOFLUSH =item + TCOOFF =item + TCOON =item + TCSADRAIN =item + TCSAFLUSH =item + TCSANOW =item + TCSBRK =item + TCSETA =item + TCSETAF =item + TCSETAW =item - TCSETCTTY =item + TCSETS =item + TCSETSF =item + TCSETSW =item + TCXONC =item - TERM_D40 =item - TERM_D42 =item - TERM_H45 =item - TERM_NONE =item - TERM_TEC =item - TERM_TEX =item - TERM_V10 =item - TERM_V61 =item + TIOCCBRK =item - TIOCCDTR =item + TIOCCONS =item + TIOCEXCL =item - TIOCFLUSH =item + TIOCGETD =item - TIOCGETC =item - TIOCGETP =item - TIOCGLTC =item - TIOCSETC =item - TIOCSETN =item - TIOCSETP =item - TIOCSLTC =item + TIOCGPGRP =item + TIOCGSID =item + TIOCGSOFTCAR =item + TIOCGWINSZ =item - TIOCHPCL =item - TIOCKBOF =item - TIOCKBON =item - TIOCLBIC =item - TIOCLBIS =item - TIOCLGET =item - TIOCLSET =item + TIOCMBIC =item + TIOCMBIS =item + TIOCMGET =item + TIOCMSET =item + TIOCM_CAR =item + TIOCM_CD =item + TIOCM_CTS =item + TIOCM_DSR =item + TIOCM_DTR =item + TIOCM_LE =item + TIOCM_RI =item + TIOCM_RNG =item + TIOCM_RTS =item + TIOCM_SR =item + TIOCM_ST =item + TIOCNOTTY =item + TIOCNXCL =item + TIOCOUTQ =item - TIOCREMOTE =item + TIOCSBRK =item + TIOCSCTTY =item - TIOCSDTR =item + TIOCSETD =item - TIOCSIGNAL =item + TIOCSPGRP =item - TIOCSSID =item + TIOCSSOFTCAR =item - TIOCSTART =item + TIOCSTI =item - TIOCSTOP =item + TIOCSWINSZ =item - TM_ANL =item - TM_CECHO =item - TM_CINVIS =item - TM_LCF =item - TM_NONE =item - TM_SET =item - TM_SNL =item + TOSTOP =item - VCEOF =item - VCEOL =item + VDISCARD =item - VDSUSP =item + VEOF =item + VEOL =item + VEOL2 =item + VERASE =item + VINTR =item + VKILL =item + VLNEXT =item + VMIN =item + VQUIT =item + VREPRINT =item + VSTART =item + VSTOP =item + VSUSP =item - VSWTCH =item + VT0 =item + VT1 =item + VTDLY =item + VTIME =item + VWERASE =item - WRAP =item + XCASE =item - XCLUDE =item - XMT1EN =item + XTABS =head1 FOR MORE INFO SEE L<IO::Tty> =cut JSON/Syck.pm 0000644 00000015201 15037233313 0006563 0 ustar 00 package JSON::Syck; use strict; use vars qw( $VERSION @EXPORT_OK @ISA ); use Exporter; use YAML::Syck (); BEGIN { $VERSION = '1.30'; @EXPORT_OK = qw( Load Dump LoadFile DumpFile DumpInto ); @ISA = 'Exporter'; *Load = \&YAML::Syck::LoadJSON; *Dump = \&YAML::Syck::DumpJSON; } sub DumpFile { my $file = shift; if ( YAML::Syck::_is_glob($file) ) { my $err = YAML::Syck::DumpJSONFile( $_[0], $file ); if ($err) { $! = 0 + $err; die "Error writing to filehandle $file: $!\n"; } } else { open( my $fh, '>', $file ) or die "Cannot write to $file: $!"; my $err = YAML::Syck::DumpJSONFile( $_[0], $fh ); if ($err) { $! = 0 + $err; die "Error writing to file $file: $!\n"; } close $fh or die "Error writing to file $file: $!\n"; } return 1; } sub LoadFile { my $file = shift; if ( YAML::Syck::_is_glob($file) ) { YAML::Syck::LoadJSON( do { local $/; <$file> } ); } else { if ( !-e $file || -z $file ) { die("'$file' is non-existent or empty"); } open( my $fh, '<', $file ) or die "Cannot read from $file: $!"; YAML::Syck::LoadJSON( do { local $/; <$fh> } ); } } sub DumpInto { my $bufref = shift; ( ref $bufref ) or die "DumpInto not given reference to output buffer\n"; YAML::Syck::DumpJSONInto( $_[0], $bufref ); 1; } $JSON::Syck::ImplicitTyping = 1; $JSON::Syck::MaxDepth = 512; $JSON::Syck::Headless = 1; $JSON::Syck::ImplicitUnicode = 0; $JSON::Syck::SingleQuote = 0; 1; __END__ =head1 NAME JSON::Syck - JSON is YAML (but consider using L<JSON::XS> instead!) =head1 SYNOPSIS use JSON::Syck; # no exports by default my $data = JSON::Syck::Load($json); my $json = JSON::Syck::Dump($data); # $file can be an IO object, or a filename my $data = JSON::Syck::LoadFile($file); JSON::Syck::DumpFile($file, $data); # Dump into a pre-existing buffer my $json; JSON::Syck::DumpInto(\$json, $data); =head1 DESCRIPTION JSON::Syck is a syck implementation of JSON parsing and generation. Because JSON is YAML (L<http://redhanded.hobix.com/inspect/yamlIsJson.html>), using syck gives you a fast and memory-efficient parser and dumper for JSON data representation. However, a newer module L<JSON::XS>, has since emerged. It is more flexible, efficient and robust, so please consider using it instead of this module. =head1 DIFFERENCE WITH JSON You might want to know the difference between the I<JSON> module and this one. Since JSON is a pure-perl module and JSON::Syck is based on libsyck, JSON::Syck is supposed to be very fast and memory efficient. See chansen's benchmark table at L<http://idisk.mac.com/christian.hansen/Public/perl/serialize.pl> JSON.pm comes with dozens of ways to do the same thing and lots of options, while JSON::Syck doesn't. There's only C<Load> and C<Dump>. Oh, and JSON::Syck doesn't use camelCase method names :-) =head1 REFERENCES =head2 SCALAR REFERENCE For now, when you pass a scalar reference to JSON::Syck, it dereferences to get the actual scalar value. JSON::Syck raises an exception when you pass in circular references. If you want to serialize self referencing stuff, you should use YAML which supports it. =head2 SUBROUTINE REFERENCE When you pass subroutine reference, JSON::Syck dumps it as null. =head1 UTF-8 FLAGS By default this module doesn't touch any of utf-8 flags set in strings, and assumes UTF-8 bytes to be passed and emit. However, when you set C<$JSON::Syck::ImplicitUnicode> to 1, this module properly decodes UTF-8 binaries and sets UTF-8 flag everywhere, as in: JSON (UTF-8 bytes) => Perl (UTF-8 flagged) JSON (UTF-8 flagged) => Perl (UTF-8 flagged) Perl (UTF-8 bytes) => JSON (UTF-8 flagged) Perl (UTF-8 flagged) => JSON (UTF-8 flagged) By default, JSON::Syck::Dump will only transverse up to 512 levels of a datastructure in order to avoid an infinite loop when it is presented with an circular reference. However, you set C<$JSON::Syck::MaxLevels> to a larger value if you have very complex structures. Unfortunately, there's no implicit way to dump Perl UTF-8 flagged data structure to utf-8 encoded JSON. To do this, simply use Encode module, e.g.: use Encode; use JSON::Syck qw(Dump); my $json = encode_utf8( Dump($data) ); Alternatively you can use Encode::JavaScript::UCS to encode Unicode strings as in I<%uXXXX> form. use Encode; use Encode::JavaScript::UCS; use JSON::Syck qw(Dump); my $json_unicode_escaped = encode( 'JavaScript-UCS', Dump($data) ); =head1 QUOTING According to the JSON specification, all JSON strings are to be double-quoted. However, when embedding JavaScript in HTML attributes, it may be more convenient to use single quotes. Set C<$JSON::Syck::SingleQuote> to 1 will make both C<Dump> and C<Load> expect single-quoted string literals. =head1 BUGS Dumping into tied (or other magic variables) with C<DumpInto> might not work properly in all cases. When dumping with C<DumpFile>, some spacing might be wrong and C<$JSON::Syck::SingleQuote> might be handled incorrectly. =head1 SEE ALSO L<JSON::XS>, L<YAML::Syck> =head1 AUTHORS Audrey Tang E<lt>cpan@audreyt.orgE<gt> Tatsuhiko Miyagawa E<lt>miyagawa@gmail.comE<gt> =head1 COPYRIGHT Copyright 2005-2009 by Audrey Tang E<lt>cpan@audreyt.orgE<gt>. This software is released under the MIT license cited below. The F<libsyck> code bundled with this library is released by "why the lucky stiff", under a BSD-style license. See the F<COPYING> file for details. =head2 The "MIT" License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =cut JSON/XS.pm 0000644 00000203442 15037233313 0006212 0 ustar 00 =head1 NAME JSON::XS - JSON serialising/deserialising, done correctly and fast =encoding utf-8 JSON::XS - 正しくて高速な JSON シリアライザ/デシリアライザ (http://fleur.hio.jp/perldoc/mix/lib/JSON/XS.html) =head1 SYNOPSIS use JSON::XS; # exported functions, they croak on error # and expect/generate UTF-8 $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref; $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text; # OO-interface $coder = JSON::XS->new->ascii->pretty->allow_nonref; $pretty_printed_unencoded = $coder->encode ($perl_scalar); $perl_scalar = $coder->decode ($unicode_json_text); # Note that JSON version 2.0 and above will automatically use JSON::XS # if available, at virtually no speed overhead either, so you should # be able to just: use JSON; # and do the same things, except that you have a pure-perl fallback now. =head1 DESCRIPTION This module converts Perl data structures to JSON and vice versa. Its primary goal is to be I<correct> and its secondary goal is to be I<fast>. To reach the latter goal it was written in C. Beginning with version 2.0 of the JSON module, when both JSON and JSON::XS are installed, then JSON will fall back on JSON::XS (this can be overridden) with no overhead due to emulation (by inheriting constructor and methods). If JSON::XS is not available, it will fall back to the compatible JSON::PP module as backend, so using JSON instead of JSON::XS gives you a portable JSON API that can be fast when you need it and doesn't require a C compiler when that is a problem. As this is the n-th-something JSON module on CPAN, what was the reason to write yet another JSON module? While it seems there are many JSON modules, none of them correctly handle all corner cases, and in most cases their maintainers are unresponsive, gone missing, or not listening to bug reports for other reasons. See MAPPING, below, on how JSON::XS maps perl values to JSON values and vice versa. =head2 FEATURES =over 4 =item * correct Unicode handling This module knows how to handle Unicode, documents how and when it does so, and even documents what "correct" means. =item * round-trip integrity When you serialise a perl data structure using only data types supported by JSON and Perl, the deserialised data structure is identical on the Perl level. (e.g. the string "2.0" doesn't suddenly become "2" just because it looks like a number). There I<are> minor exceptions to this, read the MAPPING section below to learn about those. =item * strict checking of JSON correctness There is no guessing, no generating of illegal JSON texts by default, and only JSON is accepted as input by default (the latter is a security feature). =item * fast Compared to other JSON modules and other serialisers such as Storable, this module usually compares favourably in terms of speed, too. =item * simple to use This module has both a simple functional interface as well as an object oriented interface. =item * reasonably versatile output formats You can choose between the most compact guaranteed-single-line format possible (nice for simple line-based protocols), a pure-ASCII format (for when your transport is not 8-bit clean, still supports the whole Unicode range), or a pretty-printed format (for when you want to read that stuff). Or you can combine those features in whatever way you like. =back =cut package JSON::XS; use common::sense; our $VERSION = 3.04; our @ISA = qw(Exporter); our @EXPORT = qw(encode_json decode_json); use Exporter; use XSLoader; use Types::Serialiser (); =head1 FUNCTIONAL INTERFACE The following convenience methods are provided by this module. They are exported by default: =over 4 =item $json_text = encode_json $perl_scalar Converts the given Perl data structure to a UTF-8 encoded, binary string (that is, the string contains octets only). Croaks on error. This function call is functionally identical to: $json_text = JSON::XS->new->utf8->encode ($perl_scalar) Except being faster. =item $perl_scalar = decode_json $json_text The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries to parse that as an UTF-8 encoded JSON text, returning the resulting reference. Croaks on error. This function call is functionally identical to: $perl_scalar = JSON::XS->new->utf8->decode ($json_text) Except being faster. =back =head1 A FEW NOTES ON UNICODE AND PERL Since this often leads to confusion, here are a few very clear words on how Unicode works in Perl, modulo bugs. =over 4 =item 1. Perl strings can store characters with ordinal values > 255. This enables you to store Unicode characters as single characters in a Perl string - very natural. =item 2. Perl does I<not> associate an encoding with your strings. ... until you force it to, e.g. when matching it against a regex, or printing the scalar to a file, in which case Perl either interprets your string as locale-encoded text, octets/binary, or as Unicode, depending on various settings. In no case is an encoding stored together with your data, it is I<use> that decides encoding, not any magical meta data. =item 3. The internal utf-8 flag has no meaning with regards to the encoding of your string. Just ignore that flag unless you debug a Perl bug, a module written in XS or want to dive into the internals of perl. Otherwise it will only confuse you, as, despite the name, it says nothing about how your string is encoded. You can have Unicode strings with that flag set, with that flag clear, and you can have binary data with that flag set and that flag clear. Other possibilities exist, too. If you didn't know about that flag, just the better, pretend it doesn't exist. =item 4. A "Unicode String" is simply a string where each character can be validly interpreted as a Unicode code point. If you have UTF-8 encoded data, it is no longer a Unicode string, but a Unicode string encoded in UTF-8, giving you a binary string. =item 5. A string containing "high" (> 255) character values is I<not> a UTF-8 string. It's a fact. Learn to live with it. =back I hope this helps :) =head1 OBJECT-ORIENTED INTERFACE The object oriented interface lets you configure your own encoding or decoding style, within the limits of supported formats. =over 4 =item $json = new JSON::XS Creates a new JSON::XS object that can be used to de/encode JSON strings. All boolean flags described below are by default I<disabled>. The mutators for flags all return the JSON object again and thus calls can be chained: my $json = JSON::XS->new->utf8->space_after->encode ({a => [1,2]}) => {"a": [1, 2]} =item $json = $json->ascii ([$enable]) =item $enabled = $json->get_ascii If C<$enable> is true (or missing), then the C<encode> method will not generate characters outside the code range C<0..127> (which is ASCII). Any Unicode characters outside that range will be escaped using either a single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence, as per RFC4627. The resulting encoded JSON text can be treated as a native Unicode string, an ascii-encoded, latin1-encoded or UTF-8 encoded string, or any other superset of ASCII. If C<$enable> is false, then the C<encode> method will not escape Unicode characters unless required by the JSON syntax or other flags. This results in a faster and more compact format. See also the section I<ENCODING/CODESET FLAG NOTES> later in this document. The main use for this flag is to produce JSON texts that can be transmitted over a 7-bit channel, as the encoded JSON texts will not contain any 8 bit characters. JSON::XS->new->ascii (1)->encode ([chr 0x10401]) => ["\ud801\udc01"] =item $json = $json->latin1 ([$enable]) =item $enabled = $json->get_latin1 If C<$enable> is true (or missing), then the C<encode> method will encode the resulting JSON text as latin1 (or iso-8859-1), escaping any characters outside the code range C<0..255>. The resulting string can be treated as a latin1-encoded JSON text or a native Unicode string. The C<decode> method will not be affected in any way by this flag, as C<decode> by default expects Unicode, which is a strict superset of latin1. If C<$enable> is false, then the C<encode> method will not escape Unicode characters unless required by the JSON syntax or other flags. See also the section I<ENCODING/CODESET FLAG NOTES> later in this document. The main use for this flag is efficiently encoding binary data as JSON text, as most octets will not be escaped, resulting in a smaller encoded size. The disadvantage is that the resulting JSON text is encoded in latin1 (and must correctly be treated as such when storing and transferring), a rare encoding for JSON. It is therefore most useful when you want to store data structures known to contain binary data efficiently in files or databases, not when talking to other JSON encoders/decoders. JSON::XS->new->latin1->encode (["\x{89}\x{abc}"] => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not) =item $json = $json->utf8 ([$enable]) =item $enabled = $json->get_utf8 If C<$enable> is true (or missing), then the C<encode> method will encode the JSON result into UTF-8, as required by many protocols, while the C<decode> method expects to be handled an UTF-8-encoded string. Please note that UTF-8-encoded strings do not contain any characters outside the range C<0..255>, they are thus useful for bytewise/binary I/O. In future versions, enabling this option might enable autodetection of the UTF-16 and UTF-32 encoding families, as described in RFC4627. If C<$enable> is false, then the C<encode> method will return the JSON string as a (non-encoded) Unicode string, while C<decode> expects thus a Unicode string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs to be done yourself, e.g. using the Encode module. See also the section I<ENCODING/CODESET FLAG NOTES> later in this document. Example, output UTF-16BE-encoded JSON: use Encode; $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object); Example, decode UTF-32LE-encoded JSON: use Encode; $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext); =item $json = $json->pretty ([$enable]) This enables (or disables) all of the C<indent>, C<space_before> and C<space_after> (and in the future possibly more) flags in one call to generate the most readable (or most compact) form possible. Example, pretty-print some simple structure: my $json = JSON::XS->new->pretty(1)->encode ({a => [1,2]}) => { "a" : [ 1, 2 ] } =item $json = $json->indent ([$enable]) =item $enabled = $json->get_indent If C<$enable> is true (or missing), then the C<encode> method will use a multiline format as output, putting every array member or object/hash key-value pair into its own line, indenting them properly. If C<$enable> is false, no newlines or indenting will be produced, and the resulting JSON text is guaranteed not to contain any C<newlines>. This setting has no effect when decoding JSON texts. =item $json = $json->space_before ([$enable]) =item $enabled = $json->get_space_before If C<$enable> is true (or missing), then the C<encode> method will add an extra optional space before the C<:> separating keys from values in JSON objects. If C<$enable> is false, then the C<encode> method will not add any extra space at those places. This setting has no effect when decoding JSON texts. You will also most likely combine this setting with C<space_after>. Example, space_before enabled, space_after and indent disabled: {"key" :"value"} =item $json = $json->space_after ([$enable]) =item $enabled = $json->get_space_after If C<$enable> is true (or missing), then the C<encode> method will add an extra optional space after the C<:> separating keys from values in JSON objects and extra whitespace after the C<,> separating key-value pairs and array members. If C<$enable> is false, then the C<encode> method will not add any extra space at those places. This setting has no effect when decoding JSON texts. Example, space_before and indent disabled, space_after enabled: {"key": "value"} =item $json = $json->relaxed ([$enable]) =item $enabled = $json->get_relaxed If C<$enable> is true (or missing), then C<decode> will accept some extensions to normal JSON syntax (see below). C<encode> will not be affected in anyway. I<Be aware that this option makes you accept invalid JSON texts as if they were valid!>. I suggest only to use this option to parse application-specific files written by humans (configuration files, resource files etc.) If C<$enable> is false (the default), then C<decode> will only accept valid JSON texts. Currently accepted extensions are: =over 4 =item * list items can have an end-comma JSON I<separates> array elements and key-value pairs with commas. This can be annoying if you write JSON texts manually and want to be able to quickly append elements, so this extension accepts comma at the end of such items not just between them: [ 1, 2, <- this comma not normally allowed ] { "k1": "v1", "k2": "v2", <- this comma not normally allowed } =item * shell-style '#'-comments Whenever JSON allows whitespace, shell-style comments are additionally allowed. They are terminated by the first carriage-return or line-feed character, after which more white-space and comments are allowed. [ 1, # this comment not allowed in JSON # neither this one... ] =item * literal ASCII TAB characters in strings Literal ASCII TAB characters are now allowed in strings (and treated as C<\t>). [ "Hello\tWorld", "Hello<TAB>World", # literal <TAB> would not normally be allowed ] =back =item $json = $json->canonical ([$enable]) =item $enabled = $json->get_canonical If C<$enable> is true (or missing), then the C<encode> method will output JSON objects by sorting their keys. This is adding a comparatively high overhead. If C<$enable> is false, then the C<encode> method will output key-value pairs in the order Perl stores them (which will likely change between runs of the same script, and can change even within the same run from 5.18 onwards). This option is useful if you want the same data structure to be encoded as the same JSON text (given the same overall settings). If it is disabled, the same hash might be encoded differently even if contains the same data, as key-value pairs have no inherent ordering in Perl. This setting has no effect when decoding JSON texts. This setting has currently no effect on tied hashes. =item $json = $json->allow_nonref ([$enable]) =item $enabled = $json->get_allow_nonref If C<$enable> is true (or missing), then the C<encode> method can convert a non-reference into its corresponding string, number or null JSON value, which is an extension to RFC4627. Likewise, C<decode> will accept those JSON values instead of croaking. If C<$enable> is false, then the C<encode> method will croak if it isn't passed an arrayref or hashref, as JSON texts must either be an object or array. Likewise, C<decode> will croak if given something that is not a JSON object or array. Example, encode a Perl scalar as JSON value with enabled C<allow_nonref>, resulting in an invalid JSON text: JSON::XS->new->allow_nonref->encode ("Hello, World!") => "Hello, World!" =item $json = $json->allow_unknown ([$enable]) =item $enabled = $json->get_allow_unknown If C<$enable> is true (or missing), then C<encode> will I<not> throw an exception when it encounters values it cannot represent in JSON (for example, filehandles) but instead will encode a JSON C<null> value. Note that blessed objects are not included here and are handled separately by c<allow_nonref>. If C<$enable> is false (the default), then C<encode> will throw an exception when it encounters anything it cannot encode as JSON. This option does not affect C<decode> in any way, and it is recommended to leave it off unless you know your communications partner. =item $json = $json->allow_blessed ([$enable]) =item $enabled = $json->get_allow_blessed See L<OBJECT SERIALISATION> for details. If C<$enable> is true (or missing), then the C<encode> method will not barf when it encounters a blessed reference that it cannot convert otherwise. Instead, a JSON C<null> value is encoded instead of the object. If C<$enable> is false (the default), then C<encode> will throw an exception when it encounters a blessed object that it cannot convert otherwise. This setting has no effect on C<decode>. =item $json = $json->convert_blessed ([$enable]) =item $enabled = $json->get_convert_blessed See L<OBJECT SERIALISATION> for details. If C<$enable> is true (or missing), then C<encode>, upon encountering a blessed object, will check for the availability of the C<TO_JSON> method on the object's class. If found, it will be called in scalar context and the resulting scalar will be encoded instead of the object. The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON> returns other blessed objects, those will be handled in the same way. C<TO_JSON> must take care of not causing an endless recursion cycle (== crash) in this case. The name of C<TO_JSON> was chosen because other methods called by the Perl core (== not by the user of the object) are usually in upper case letters and to avoid collisions with any C<to_json> function or method. If C<$enable> is false (the default), then C<encode> will not consider this type of conversion. This setting has no effect on C<decode>. =item $json = $json->allow_tags ([$enable]) =item $enabled = $json->allow_tags See L<OBJECT SERIALISATION> for details. If C<$enable> is true (or missing), then C<encode>, upon encountering a blessed object, will check for the availability of the C<FREEZE> method on the object's class. If found, it will be used to serialise the object into a nonstandard tagged JSON value (that JSON decoders cannot decode). It also causes C<decode> to parse such tagged JSON values and deserialise them via a call to the C<THAW> method. If C<$enable> is false (the default), then C<encode> will not consider this type of conversion, and tagged JSON values will cause a parse error in C<decode>, as if tags were not part of the grammar. =item $json = $json->filter_json_object ([$coderef->($hashref)]) When C<$coderef> is specified, it will be called from C<decode> each time it decodes a JSON object. The only argument is a reference to the newly-created hash. If the code references returns a single scalar (which need not be a reference), this value (i.e. a copy of that scalar to avoid aliasing) is inserted into the deserialised data structure. If it returns an empty list (NOTE: I<not> C<undef>, which is a valid scalar), the original deserialised hash will be inserted. This setting can slow down decoding considerably. When C<$coderef> is omitted or undefined, any existing callback will be removed and C<decode> will not change the deserialised hash in any way. Example, convert all JSON objects into the integer 5: my $js = JSON::XS->new->filter_json_object (sub { 5 }); # returns [5] $js->decode ('[{}]') # throw an exception because allow_nonref is not enabled # so a lone 5 is not allowed. $js->decode ('{"a":1, "b":2}'); =item $json = $json->filter_json_single_key_object ($key [=> $coderef->($value)]) Works remotely similar to C<filter_json_object>, but is only called for JSON objects having a single key named C<$key>. This C<$coderef> is called before the one specified via C<filter_json_object>, if any. It gets passed the single value in the JSON object. If it returns a single value, it will be inserted into the data structure. If it returns nothing (not even C<undef> but the empty list), the callback from C<filter_json_object> will be called next, as if no single-key callback were specified. If C<$coderef> is omitted or undefined, the corresponding callback will be disabled. There can only ever be one callback for a given key. As this callback gets called less often then the C<filter_json_object> one, decoding speed will not usually suffer as much. Therefore, single-key objects make excellent targets to serialise Perl objects into, especially as single-key JSON objects are as close to the type-tagged value concept as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not support this in any way, so you need to make sure your data never looks like a serialised Perl hash. Typical names for the single object key are C<__class_whatever__>, or C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even things like C<__class_md5sum(classname)__>, to reduce the risk of clashing with real hashes. Example, decode JSON objects of the form C<< { "__widget__" => <id> } >> into the corresponding C<< $WIDGET{<id>} >> object: # return whatever is in $WIDGET{5}: JSON::XS ->new ->filter_json_single_key_object (__widget__ => sub { $WIDGET{ $_[0] } }) ->decode ('{"__widget__": 5') # this can be used with a TO_JSON method in some "widget" class # for serialisation to json: sub WidgetBase::TO_JSON { my ($self) = @_; unless ($self->{id}) { $self->{id} = ..get..some..id..; $WIDGET{$self->{id}} = $self; } { __widget__ => $self->{id} } } =item $json = $json->shrink ([$enable]) =item $enabled = $json->get_shrink Perl usually over-allocates memory a bit when allocating space for strings. This flag optionally resizes strings generated by either C<encode> or C<decode> to their minimum size possible. This can save memory when your JSON texts are either very very long or you have many short strings. It will also try to downgrade any strings to octet-form if possible: perl stores strings internally either in an encoding called UTF-X or in octet-form. The latter cannot store everything but uses less space in general (and some buggy Perl or C code might even rely on that internal representation being used). The actual definition of what shrink does might change in future versions, but it will always try to save space at the expense of time. If C<$enable> is true (or missing), the string returned by C<encode> will be shrunk-to-fit, while all strings generated by C<decode> will also be shrunk-to-fit. If C<$enable> is false, then the normal perl allocation algorithms are used. If you work with your data, then this is likely to be faster. In the future, this setting might control other things, such as converting strings that look like integers or floats into integers or floats internally (there is no difference on the Perl level), saving space. =item $json = $json->max_depth ([$maximum_nesting_depth]) =item $max_depth = $json->get_max_depth Sets the maximum nesting level (default C<512>) accepted while encoding or decoding. If a higher nesting level is detected in JSON text or a Perl data structure, then the encoder and decoder will stop and croak at that point. Nesting level is defined by number of hash- or arrayrefs that the encoder needs to traverse to reach a given point or the number of C<{> or C<[> characters without their matching closing parenthesis crossed to reach a given character in a string. Setting the maximum depth to one disallows any nesting, so that ensures that the object is only a single hash/object or array. If no argument is given, the highest possible setting will be used, which is rarely useful. Note that nesting is implemented by recursion in C. The default value has been chosen to be as large as typical operating systems allow without crashing. See SECURITY CONSIDERATIONS, below, for more info on why this is useful. =item $json = $json->max_size ([$maximum_string_size]) =item $max_size = $json->get_max_size Set the maximum length a JSON text may have (in bytes) where decoding is being attempted. The default is C<0>, meaning no limit. When C<decode> is called on a string that is longer then this many bytes, it will not attempt to decode the string but throw an exception. This setting has no effect on C<encode> (yet). If no argument is given, the limit check will be deactivated (same as when C<0> is specified). See SECURITY CONSIDERATIONS, below, for more info on why this is useful. =item $json_text = $json->encode ($perl_scalar) Converts the given Perl value or data structure to its JSON representation. Croaks on error. =item $perl_scalar = $json->decode ($json_text) The opposite of C<encode>: expects a JSON text and tries to parse it, returning the resulting simple scalar or reference. Croaks on error. =item ($perl_scalar, $characters) = $json->decode_prefix ($json_text) This works like the C<decode> method, but instead of raising an exception when there is trailing garbage after the first JSON object, it will silently stop parsing there and return the number of characters consumed so far. This is useful if your JSON texts are not delimited by an outer protocol and you need to know where the JSON text ends. JSON::XS->new->decode_prefix ("[1] the tail") => ([1], 3) =back =head1 INCREMENTAL PARSING In some cases, there is the need for incremental parsing of JSON texts. While this module always has to keep both JSON text and resulting Perl data structure in memory at one time, it does allow you to parse a JSON stream incrementally. It does so by accumulating text until it has a full JSON object, which it then can decode. This process is similar to using C<decode_prefix> to see if a full JSON object is available, but is much more efficient (and can be implemented with a minimum of method calls). JSON::XS will only attempt to parse the JSON text once it is sure it has enough text to get a decisive result, using a very simple but truly incremental parser. This means that it sometimes won't stop as early as the full parser, for example, it doesn't detect mismatched parentheses. The only thing it guarantees is that it starts decoding as soon as a syntactically valid JSON text has been seen. This means you need to set resource limits (e.g. C<max_size>) to ensure the parser will stop parsing in the presence if syntax errors. The following methods implement this incremental parser. =over 4 =item [void, scalar or list context] = $json->incr_parse ([$string]) This is the central parsing function. It can both append new text and extract objects from the stream accumulated so far (both of these functions are optional). If C<$string> is given, then this string is appended to the already existing JSON fragment stored in the C<$json> object. After that, if the function is called in void context, it will simply return without doing anything further. This can be used to add more text in as many chunks as you want. If the method is called in scalar context, then it will try to extract exactly I<one> JSON object. If that is successful, it will return this object, otherwise it will return C<undef>. If there is a parse error, this method will croak just as C<decode> would do (one can then use C<incr_skip> to skip the erroneous part). This is the most common way of using the method. And finally, in list context, it will try to extract as many objects from the stream as it can find and return them, or the empty list otherwise. For this to work, there must be no separators (other than whitespace) between the JSON objects or arrays, instead they must be concatenated back-to-back. If an error occurs, an exception will be raised as in the scalar context case. Note that in this case, any previously-parsed JSON texts will be lost. Example: Parse some JSON arrays/objects in a given string and return them. my @objs = JSON::XS->new->incr_parse ("[5][7][1,2]"); =item $lvalue_string = $json->incr_text This method returns the currently stored JSON fragment as an lvalue, that is, you can manipulate it. This I<only> works when a preceding call to C<incr_parse> in I<scalar context> successfully returned an object. Under all other circumstances you must not call this function (I mean it. although in simple tests it might actually work, it I<will> fail under real world conditions). As a special exception, you can also call this method before having parsed anything. That means you can only use this function to look at or manipulate text before or after complete JSON objects, not while the parser is in the middle of parsing a JSON object. This function is useful in two cases: a) finding the trailing text after a JSON object or b) parsing multiple JSON objects separated by non-JSON text (such as commas). =item $json->incr_skip This will reset the state of the incremental parser and will remove the parsed text from the input buffer so far. This is useful after C<incr_parse> died, in which case the input buffer and incremental parser state is left unchanged, to skip the text parsed so far and to reset the parse state. The difference to C<incr_reset> is that only text until the parse error occurred is removed. =item $json->incr_reset This completely resets the incremental parser, that is, after this call, it will be as if the parser had never parsed anything. This is useful if you want to repeatedly parse JSON objects and want to ignore any trailing data, which means you have to reset the parser after each successful decode. =back =head2 LIMITATIONS All options that affect decoding are supported, except C<allow_nonref>. The reason for this is that it cannot be made to work sensibly: JSON objects and arrays are self-delimited, i.e. you can concatenate them back to back and still decode them perfectly. This does not hold true for JSON numbers, however. For example, is the string C<1> a single JSON number, or is it simply the start of C<12>? Or is C<12> a single JSON number, or the concatenation of C<1> and C<2>? In neither case you can tell, and this is why JSON::XS takes the conservative route and disallows this case. =head2 EXAMPLES Some examples will make all this clearer. First, a simple example that works similarly to C<decode_prefix>: We want to decode the JSON object at the start of a string and identify the portion after the JSON object: my $text = "[1,2,3] hello"; my $json = new JSON::XS; my $obj = $json->incr_parse ($text) or die "expected JSON object or array at beginning of string"; my $tail = $json->incr_text; # $tail now contains " hello" Easy, isn't it? Now for a more complicated example: Imagine a hypothetical protocol where you read some requests from a TCP stream, and each request is a JSON array, without any separation between them (in fact, it is often useful to use newlines as "separators", as these get interpreted as whitespace at the start of the JSON text, which makes it possible to test said protocol with C<telnet>...). Here is how you'd do it (it is trivial to write this in an event-based manner): my $json = new JSON::XS; # read some data from the socket while (sysread $socket, my $buf, 4096) { # split and decode as many requests as possible for my $request ($json->incr_parse ($buf)) { # act on the $request } } Another complicated example: Assume you have a string with JSON objects or arrays, all separated by (optional) comma characters (e.g. C<[1],[2], [3]>). To parse them, we have to skip the commas between the JSON texts, and here is where the lvalue-ness of C<incr_text> comes in useful: my $text = "[1],[2], [3]"; my $json = new JSON::XS; # void context, so no parsing done $json->incr_parse ($text); # now extract as many objects as possible. note the # use of scalar context so incr_text can be called. while (my $obj = $json->incr_parse) { # do something with $obj # now skip the optional comma $json->incr_text =~ s/^ \s* , //x; } Now lets go for a very complex example: Assume that you have a gigantic JSON array-of-objects, many gigabytes in size, and you want to parse it, but you cannot load it into memory fully (this has actually happened in the real world :). Well, you lost, you have to implement your own JSON parser. But JSON::XS can still help you: You implement a (very simple) array parser and let JSON decode the array elements, which are all full JSON objects on their own (this wouldn't work if the array elements could be JSON numbers, for example): my $json = new JSON::XS; # open the monster open my $fh, "<bigfile.json" or die "bigfile: $!"; # first parse the initial "[" for (;;) { sysread $fh, my $buf, 65536 or die "read error: $!"; $json->incr_parse ($buf); # void context, so no parsing # Exit the loop once we found and removed(!) the initial "[". # In essence, we are (ab-)using the $json object as a simple scalar # we append data to. last if $json->incr_text =~ s/^ \s* \[ //x; } # now we have the skipped the initial "[", so continue # parsing all the elements. for (;;) { # in this loop we read data until we got a single JSON object for (;;) { if (my $obj = $json->incr_parse) { # do something with $obj last; } # add more data sysread $fh, my $buf, 65536 or die "read error: $!"; $json->incr_parse ($buf); # void context, so no parsing } # in this loop we read data until we either found and parsed the # separating "," between elements, or the final "]" for (;;) { # first skip whitespace $json->incr_text =~ s/^\s*//; # if we find "]", we are done if ($json->incr_text =~ s/^\]//) { print "finished.\n"; exit; } # if we find ",", we can continue with the next element if ($json->incr_text =~ s/^,//) { last; } # if we find anything else, we have a parse error! if (length $json->incr_text) { die "parse error near ", $json->incr_text; } # else add more data sysread $fh, my $buf, 65536 or die "read error: $!"; $json->incr_parse ($buf); # void context, so no parsing } This is a complex example, but most of the complexity comes from the fact that we are trying to be correct (bear with me if I am wrong, I never ran the above example :). =head1 MAPPING This section describes how JSON::XS maps Perl values to JSON values and vice versa. These mappings are designed to "do the right thing" in most circumstances automatically, preserving round-tripping characteristics (what you put in comes out as something equivalent). For the more enlightened: note that in the following descriptions, lowercase I<perl> refers to the Perl interpreter, while uppercase I<Perl> refers to the abstract Perl language itself. =head2 JSON -> PERL =over 4 =item object A JSON object becomes a reference to a hash in Perl. No ordering of object keys is preserved (JSON does not preserve object key ordering itself). =item array A JSON array becomes a reference to an array in Perl. =item string A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON are represented by the same codepoints in the Perl string, so no manual decoding is necessary. =item number A JSON number becomes either an integer, numeric (floating point) or string scalar in perl, depending on its range and any fractional parts. On the Perl level, there is no difference between those as Perl handles all the conversion details, but an integer may take slightly less memory and might represent more values exactly than floating point numbers. If the number consists of digits only, JSON::XS will try to represent it as an integer value. If that fails, it will try to represent it as a numeric (floating point) value if that is possible without loss of precision. Otherwise it will preserve the number as a string value (in which case you lose roundtripping ability, as the JSON number will be re-encoded to a JSON string). Numbers containing a fractional or exponential part will always be represented as numeric (floating point) values, possibly at a loss of precision (in which case you might lose perfect roundtripping ability, but the JSON number will still be re-encoded as a JSON number). Note that precision is not accuracy - binary floating point values cannot represent most decimal fractions exactly, and when converting from and to floating point, JSON::XS only guarantees precision up to but not including the least significant bit. =item true, false These JSON atoms become C<Types::Serialiser::true> and C<Types::Serialiser::false>, respectively. They are overloaded to act almost exactly like the numbers C<1> and C<0>. You can check whether a scalar is a JSON boolean by using the C<Types::Serialiser::is_bool> function (after C<use Types::Serialier>, of course). =item null A JSON null atom becomes C<undef> in Perl. =item shell-style comments (C<< # I<text> >>) As a nonstandard extension to the JSON syntax that is enabled by the C<relaxed> setting, shell-style comments are allowed. They can start anywhere outside strings and go till the end of the line. =item tagged values (C<< (I<tag>)I<value> >>). Another nonstandard extension to the JSON syntax, enabled with the C<allow_tags> setting, are tagged values. In this implementation, the I<tag> must be a perl package/class name encoded as a JSON string, and the I<value> must be a JSON array encoding optional constructor arguments. See L<OBJECT SERIALISATION>, below, for details. =back =head2 PERL -> JSON The mapping from Perl to JSON is slightly more difficult, as Perl is a truly typeless language, so we can only guess which JSON type is meant by a Perl value. =over 4 =item hash references Perl hash references become JSON objects. As there is no inherent ordering in hash keys (or JSON objects), they will usually be encoded in a pseudo-random order. JSON::XS can optionally sort the hash keys (determined by the I<canonical> flag), so the same datastructure will serialise to the same JSON text (given same settings and version of JSON::XS), but this incurs a runtime overhead and is only rarely useful, e.g. when you want to compare some JSON text against another for equality. =item array references Perl array references become JSON arrays. =item other references Other unblessed references are generally not allowed and will cause an exception to be thrown, except for references to the integers C<0> and C<1>, which get turned into C<false> and C<true> atoms in JSON. Since C<JSON::XS> uses the boolean model from L<Types::Serialiser>, you can also C<use Types::Serialiser> and then use C<Types::Serialiser::false> and C<Types::Serialiser::true> to improve readability. use Types::Serialiser; encode_json [\0, Types::Serialiser::true] # yields [false,true] =item Types::Serialiser::true, Types::Serialiser::false These special values from the L<Types::Serialiser> module become JSON true and JSON false values, respectively. You can also use C<\1> and C<\0> directly if you want. =item blessed objects Blessed objects are not directly representable in JSON, but C<JSON::XS> allows various ways of handling objects. See L<OBJECT SERIALISATION>, below, for details. =item simple scalars Simple Perl scalars (any scalar that is not a reference) are the most difficult objects to encode: JSON::XS will encode undefined scalars as JSON C<null> values, scalars that have last been used in a string context before encoding as JSON strings, and anything else as number value: # dump as number encode_json [2] # yields [2] encode_json [-3.0e17] # yields [-3e+17] my $value = 5; encode_json [$value] # yields [5] # used as string, so dump as string print $value; encode_json [$value] # yields ["5"] # undef becomes null encode_json [undef] # yields [null] You can force the type to be a JSON string by stringifying it: my $x = 3.1; # some variable containing a number "$x"; # stringified $x .= ""; # another, more awkward way to stringify print $x; # perl does it for you, too, quite often You can force the type to be a JSON number by numifying it: my $x = "3"; # some variable containing a string $x += 0; # numify it, ensuring it will be dumped as a number $x *= 1; # same thing, the choice is yours. You can not currently force the type in other, less obscure, ways. Tell me if you need this capability (but don't forget to explain why it's needed :). Note that numerical precision has the same meaning as under Perl (so binary to decimal conversion follows the same rules as in Perl, which can differ to other languages). Also, your perl interpreter might expose extensions to the floating point numbers of your platform, such as infinities or NaN's - these cannot be represented in JSON, and it is an error to pass those in. =back =head2 OBJECT SERIALISATION As JSON cannot directly represent Perl objects, you have to choose between a pure JSON representation (without the ability to deserialise the object automatically again), and a nonstandard extension to the JSON syntax, tagged values. =head3 SERIALISATION What happens when C<JSON::XS> encounters a Perl object depends on the C<allow_blessed>, C<convert_blessed> and C<allow_tags> settings, which are used in this order: =over 4 =item 1. C<allow_tags> is enabled and the object has a C<FREEZE> method. In this case, C<JSON::XS> uses the L<Types::Serialiser> object serialisation protocol to create a tagged JSON value, using a nonstandard extension to the JSON syntax. This works by invoking the C<FREEZE> method on the object, with the first argument being the object to serialise, and the second argument being the constant string C<JSON> to distinguish it from other serialisers. The C<FREEZE> method can return any number of values (i.e. zero or more). These values and the paclkage/classname of the object will then be encoded as a tagged JSON value in the following format: ("classname")[FREEZE return values...] e.g.: ("URI")["http://www.google.com/"] ("MyDate")[2013,10,29] ("ImageData::JPEG")["Z3...VlCg=="] For example, the hypothetical C<My::Object> C<FREEZE> method might use the objects C<type> and C<id> members to encode the object: sub My::Object::FREEZE { my ($self, $serialiser) = @_; ($self->{type}, $self->{id}) } =item 2. C<convert_blessed> is enabled and the object has a C<TO_JSON> method. In this case, the C<TO_JSON> method of the object is invoked in scalar context. It must return a single scalar that can be directly encoded into JSON. This scalar replaces the object in the JSON text. For example, the following C<TO_JSON> method will convert all L<URI> objects to JSON strings when serialised. The fatc that these values originally were L<URI> objects is lost. sub URI::TO_JSON { my ($uri) = @_; $uri->as_string } =item 3. C<allow_blessed> is enabled. The object will be serialised as a JSON null value. =item 4. none of the above If none of the settings are enabled or the respective methods are missing, C<JSON::XS> throws an exception. =back =head3 DESERIALISATION For deserialisation there are only two cases to consider: either nonstandard tagging was used, in which case C<allow_tags> decides, or objects cannot be automatically be deserialised, in which case you can use postprocessing or the C<filter_json_object> or C<filter_json_single_key_object> callbacks to get some real objects our of your JSON. This section only considers the tagged value case: I a tagged JSON object is encountered during decoding and C<allow_tags> is disabled, a parse error will result (as if tagged values were not part of the grammar). If C<allow_tags> is enabled, C<JSON::XS> will look up the C<THAW> method of the package/classname used during serialisation (it will not attempt to load the package as a Perl module). If there is no such method, the decoding will fail with an error. Otherwise, the C<THAW> method is invoked with the classname as first argument, the constant string C<JSON> as second argument, and all the values from the JSON array (the values originally returned by the C<FREEZE> method) as remaining arguments. The method must then return the object. While technically you can return any Perl scalar, you might have to enable the C<enable_nonref> setting to make that work in all cases, so better return an actual blessed reference. As an example, let's implement a C<THAW> function that regenerates the C<My::Object> from the C<FREEZE> example earlier: sub My::Object::THAW { my ($class, $serialiser, $type, $id) = @_; $class->new (type => $type, id => $id) } =head1 ENCODING/CODESET FLAG NOTES The interested reader might have seen a number of flags that signify encodings or codesets - C<utf8>, C<latin1> and C<ascii>. There seems to be some confusion on what these do, so here is a short comparison: C<utf8> controls whether the JSON text created by C<encode> (and expected by C<decode>) is UTF-8 encoded or not, while C<latin1> and C<ascii> only control whether C<encode> escapes character values outside their respective codeset range. Neither of these flags conflict with each other, although some combinations make less sense than others. Care has been taken to make all flags symmetrical with respect to C<encode> and C<decode>, that is, texts encoded with any combination of these flag values will be correctly decoded when the same flags are used - in general, if you use different flag settings while encoding vs. when decoding you likely have a bug somewhere. Below comes a verbose discussion of these flags. Note that a "codeset" is simply an abstract set of character-codepoint pairs, while an encoding takes those codepoint numbers and I<encodes> them, in our case into octets. Unicode is (among other things) a codeset, UTF-8 is an encoding, and ISO-8859-1 (= latin 1) and ASCII are both codesets I<and> encodings at the same time, which can be confusing. =over 4 =item C<utf8> flag disabled When C<utf8> is disabled (the default), then C<encode>/C<decode> generate and expect Unicode strings, that is, characters with high ordinal Unicode values (> 255) will be encoded as such characters, and likewise such characters are decoded as-is, no changes to them will be done, except "(re-)interpreting" them as Unicode codepoints or Unicode characters, respectively (to Perl, these are the same thing in strings unless you do funny/weird/dumb stuff). This is useful when you want to do the encoding yourself (e.g. when you want to have UTF-16 encoded JSON texts) or when some other layer does the encoding for you (for example, when printing to a terminal using a filehandle that transparently encodes to UTF-8 you certainly do NOT want to UTF-8 encode your data first and have Perl encode it another time). =item C<utf8> flag enabled If the C<utf8>-flag is enabled, C<encode>/C<decode> will encode all characters using the corresponding UTF-8 multi-byte sequence, and will expect your input strings to be encoded as UTF-8, that is, no "character" of the input string must have any value > 255, as UTF-8 does not allow that. The C<utf8> flag therefore switches between two modes: disabled means you will get a Unicode string in Perl, enabled means you get an UTF-8 encoded octet/binary string in Perl. =item C<latin1> or C<ascii> flags enabled With C<latin1> (or C<ascii>) enabled, C<encode> will escape characters with ordinal values > 255 (> 127 with C<ascii>) and encode the remaining characters as specified by the C<utf8> flag. If C<utf8> is disabled, then the result is also correctly encoded in those character sets (as both are proper subsets of Unicode, meaning that a Unicode string with all character values < 256 is the same thing as a ISO-8859-1 string, and a Unicode string with all character values < 128 is the same thing as an ASCII string in Perl). If C<utf8> is enabled, you still get a correct UTF-8-encoded string, regardless of these flags, just some more characters will be escaped using C<\uXXXX> then before. Note that ISO-8859-1-I<encoded> strings are not compatible with UTF-8 encoding, while ASCII-encoded strings are. That is because the ISO-8859-1 encoding is NOT a subset of UTF-8 (despite the ISO-8859-1 I<codeset> being a subset of Unicode), while ASCII is. Surprisingly, C<decode> will ignore these flags and so treat all input values as governed by the C<utf8> flag. If it is disabled, this allows you to decode ISO-8859-1- and ASCII-encoded strings, as both strict subsets of Unicode. If it is enabled, you can correctly decode UTF-8 encoded strings. So neither C<latin1> nor C<ascii> are incompatible with the C<utf8> flag - they only govern when the JSON output engine escapes a character or not. The main use for C<latin1> is to relatively efficiently store binary data as JSON, at the expense of breaking compatibility with most JSON decoders. The main use for C<ascii> is to force the output to not contain characters with values > 127, which means you can interpret the resulting string as UTF-8, ISO-8859-1, ASCII, KOI8-R or most about any character set and 8-bit-encoding, and still get the same data structure back. This is useful when your channel for JSON transfer is not 8-bit clean or the encoding might be mangled in between (e.g. in mail), and works because ASCII is a proper subset of most 8-bit and multibyte encodings in use in the world. =back =head2 JSON and ECMAscript JSON syntax is based on how literals are represented in javascript (the not-standardised predecessor of ECMAscript) which is presumably why it is called "JavaScript Object Notation". However, JSON is not a subset (and also not a superset of course) of ECMAscript (the standard) or javascript (whatever browsers actually implement). If you want to use javascript's C<eval> function to "parse" JSON, you might run into parse errors for valid JSON texts, or the resulting data structure might not be queryable: One of the problems is that U+2028 and U+2029 are valid characters inside JSON strings, but are not allowed in ECMAscript string literals, so the following Perl fragment will not output something that can be guaranteed to be parsable by javascript's C<eval>: use JSON::XS; print encode_json [chr 0x2028]; The right fix for this is to use a proper JSON parser in your javascript programs, and not rely on C<eval> (see for example Douglas Crockford's F<json2.js> parser). If this is not an option, you can, as a stop-gap measure, simply encode to ASCII-only JSON: use JSON::XS; print JSON::XS->new->ascii->encode ([chr 0x2028]); Note that this will enlarge the resulting JSON text quite a bit if you have many non-ASCII characters. You might be tempted to run some regexes to only escape U+2028 and U+2029, e.g.: # DO NOT USE THIS! my $json = JSON::XS->new->utf8->encode ([chr 0x2028]); $json =~ s/\xe2\x80\xa8/\\u2028/g; # escape U+2028 $json =~ s/\xe2\x80\xa9/\\u2029/g; # escape U+2029 print $json; Note that I<this is a bad idea>: the above only works for U+2028 and U+2029 and thus only for fully ECMAscript-compliant parsers. Many existing javascript implementations, however, have issues with other characters as well - using C<eval> naively simply I<will> cause problems. Another problem is that some javascript implementations reserve some property names for their own purposes (which probably makes them non-ECMAscript-compliant). For example, Iceweasel reserves the C<__proto__> property name for its own purposes. If that is a problem, you could parse try to filter the resulting JSON output for these property strings, e.g.: $json =~ s/"__proto__"\s*:/"__proto__renamed":/g; This works because C<__proto__> is not valid outside of strings, so every occurrence of C<"__proto__"\s*:> must be a string used as property name. If you know of other incompatibilities, please let me know. =head2 JSON and YAML You often hear that JSON is a subset of YAML. This is, however, a mass hysteria(*) and very far from the truth (as of the time of this writing), so let me state it clearly: I<in general, there is no way to configure JSON::XS to output a data structure as valid YAML> that works in all cases. If you really must use JSON::XS to generate YAML, you should use this algorithm (subject to change in future versions): my $to_yaml = JSON::XS->new->utf8->space_after (1); my $yaml = $to_yaml->encode ($ref) . "\n"; This will I<usually> generate JSON texts that also parse as valid YAML. Please note that YAML has hardcoded limits on (simple) object key lengths that JSON doesn't have and also has different and incompatible unicode character escape syntax, so you should make sure that your hash keys are noticeably shorter than the 1024 "stream characters" YAML allows and that you do not have characters with codepoint values outside the Unicode BMP (basic multilingual page). YAML also does not allow C<\/> sequences in strings (which JSON::XS does not I<currently> generate, but other JSON generators might). There might be other incompatibilities that I am not aware of (or the YAML specification has been changed yet again - it does so quite often). In general you should not try to generate YAML with a JSON generator or vice versa, or try to parse JSON with a YAML parser or vice versa: chances are high that you will run into severe interoperability problems when you least expect it. =over 4 =item (*) I have been pressured multiple times by Brian Ingerson (one of the authors of the YAML specification) to remove this paragraph, despite him acknowledging that the actual incompatibilities exist. As I was personally bitten by this "JSON is YAML" lie, I refused and said I will continue to educate people about these issues, so others do not run into the same problem again and again. After this, Brian called me a (quote)I<complete and worthless idiot>(unquote). In my opinion, instead of pressuring and insulting people who actually clarify issues with YAML and the wrong statements of some of its proponents, I would kindly suggest reading the JSON spec (which is not that difficult or long) and finally make YAML compatible to it, and educating users about the changes, instead of spreading lies about the real compatibility for many I<years> and trying to silence people who point out that it isn't true. Addendum/2009: the YAML 1.2 spec is still incompatible with JSON, even though the incompatibilities have been documented (and are known to Brian) for many years and the spec makes explicit claims that YAML is a superset of JSON. It would be so easy to fix, but apparently, bullying people and corrupting userdata is so much easier. =back =head2 SPEED It seems that JSON::XS is surprisingly fast, as shown in the following tables. They have been generated with the help of the C<eg/bench> program in the JSON::XS distribution, to make it easy to compare on your own system. First comes a comparison between various modules using a very short single-line JSON string (also available at L<http://dist.schmorp.de/misc/json/short.json>). {"method": "handleMessage", "params": ["user1", "we were just talking"], "id": null, "array":[1,11,234,-5,1e5,1e7, 1, 0]} It shows the number of encodes/decodes per second (JSON::XS uses the functional interface, while JSON::XS/2 uses the OO interface with pretty-printing and hashkey sorting enabled, JSON::XS/3 enables shrink. JSON::DWIW/DS uses the deserialise function, while JSON::DWIW::FJ uses the from_json method). Higher is better: module | encode | decode | --------------|------------|------------| JSON::DWIW/DS | 86302.551 | 102300.098 | JSON::DWIW/FJ | 86302.551 | 75983.768 | JSON::PP | 15827.562 | 6638.658 | JSON::Syck | 63358.066 | 47662.545 | JSON::XS | 511500.488 | 511500.488 | JSON::XS/2 | 291271.111 | 388361.481 | JSON::XS/3 | 361577.931 | 361577.931 | Storable | 66788.280 | 265462.278 | --------------+------------+------------+ That is, JSON::XS is almost six times faster than JSON::DWIW on encoding, about five times faster on decoding, and over thirty to seventy times faster than JSON's pure perl implementation. It also compares favourably to Storable for small amounts of data. Using a longer test string (roughly 18KB, generated from Yahoo! Locals search API (L<http://dist.schmorp.de/misc/json/long.json>). module | encode | decode | --------------|------------|------------| JSON::DWIW/DS | 1647.927 | 2673.916 | JSON::DWIW/FJ | 1630.249 | 2596.128 | JSON::PP | 400.640 | 62.311 | JSON::Syck | 1481.040 | 1524.869 | JSON::XS | 20661.596 | 9541.183 | JSON::XS/2 | 10683.403 | 9416.938 | JSON::XS/3 | 20661.596 | 9400.054 | Storable | 19765.806 | 10000.725 | --------------+------------+------------+ Again, JSON::XS leads by far (except for Storable which non-surprisingly decodes a bit faster). On large strings containing lots of high Unicode characters, some modules (such as JSON::PC) seem to decode faster than JSON::XS, but the result will be broken due to missing (or wrong) Unicode handling. Others refuse to decode or encode properly, so it was impossible to prepare a fair comparison table for that case. =head1 SECURITY CONSIDERATIONS When you are using JSON in a protocol, talking to untrusted potentially hostile creatures requires relatively few measures. First of all, your JSON decoder should be secure, that is, should not have any buffer overflows. Obviously, this module should ensure that and I am trying hard on making that true, but you never know. Second, you need to avoid resource-starving attacks. That means you should limit the size of JSON texts you accept, or make sure then when your resources run out, that's just fine (e.g. by using a separate process that can crash safely). The size of a JSON text in octets or characters is usually a good indication of the size of the resources required to decode it into a Perl structure. While JSON::XS can check the size of the JSON text, it might be too late when you already have it in memory, so you might want to check the size before you accept the string. Third, JSON::XS recurses using the C stack when decoding objects and arrays. The C stack is a limited resource: for instance, on my amd64 machine with 8MB of stack size I can decode around 180k nested arrays but only 14k nested JSON objects (due to perl itself recursing deeply on croak to free the temporary). If that is exceeded, the program crashes. To be conservative, the default nesting limit is set to 512. If your process has a smaller stack, you should adjust this setting accordingly with the C<max_depth> method. Something else could bomb you, too, that I forgot to think of. In that case, you get to keep the pieces. I am always open for hints, though... Also keep in mind that JSON::XS might leak contents of your Perl data structures in its error messages, so when you serialise sensitive information you might want to make sure that exceptions thrown by JSON::XS will not end up in front of untrusted eyes. If you are using JSON::XS to return packets to consumption by JavaScript scripts in a browser you should have a look at L<http://blog.archive.jpsykes.com/47/practical-csrf-and-json-security/> to see whether you are vulnerable to some common attack vectors (which really are browser design bugs, but it is still you who will have to deal with it, as major browser developers care only for features, not about getting security right). =head1 "OLD" VS. "NEW" JSON (RFC 4627 VS. RFC 7159) TL;DR: Due to security concerns, JSON::XS will not allow scalar data in JSON texts by default - you need to create your own JSON::XS object and enable C<allow_nonref>: my $json = JSON::XS->new->allow_nonref; $text = $json->encode ($data); $data = $json->decode ($text); The long version: JSON being an important and supposedly stable format, the IETF standardised it as RFC 4627 in 2006. Unfortunately, the inventor of JSON, Dougles Crockford, unilaterally changed the definition of JSON in javascript. Rather than create a fork, the IETF decided to standardise the new syntax (apparently, so Iw as told, without finding it very amusing). The biggest difference between thed original JSON and the new JSON is that the new JSON supports scalars (anything other than arrays and objects) at the toplevel of a JSON text. While this is strictly backwards compatible to older versions, it breaks a number of protocols that relied on sending JSON back-to-back, and is a minor security concern. For example, imagine you have two banks communicating, and on one side, trhe JSON coder gets upgraded. Two messages, such as C<10> and C<1000> might then be confused to mean C<101000>, something that couldn't happen in the original JSON, because niether of these messages would be valid JSON. If one side accepts these messages, then an upgrade in the coder on either side could result in this becoming exploitable. This module has always allowed these messages as an optional extension, by default disabled. The security concerns are the reason why the default is still disabled, but future versions might/will likely upgrade to the newer RFC as default format, so you are advised to check your implementation and/or override the default with C<< ->allow_nonref (0) >> to ensure that future versions are safe. =head1 INTEROPERABILITY WITH OTHER MODULES C<JSON::XS> uses the L<Types::Serialiser> module to provide boolean constants. That means that the JSON true and false values will be comaptible to true and false values of other modules that do the same, such as L<JSON::PP> and L<CBOR::XS>. =head1 INTEROPERABILITY WITH OTHER JSON DECODERS As long as you only serialise data that can be directly expressed in JSON, C<JSON::XS> is incapable of generating invalid JSON output (modulo bugs, but C<JSON::XS> has found more bugs in the official JSON testsuite (1) than the official JSON testsuite has found in C<JSON::XS> (0)). When you have trouble decoding JSON generated by this module using other decoders, then it is very likely that you have an encoding mismatch or the other decoder is broken. When decoding, C<JSON::XS> is strict by default and will likely catch all errors. There are currently two settings that change this: C<relaxed> makes C<JSON::XS> accept (but not generate) some non-standard extensions, and C<allow_tags> will allow you to encode and decode Perl objects, at the cost of not outputting valid JSON anymore. =head2 TAGGED VALUE SYNTAX AND STANDARD JSON EN/DECODERS When you use C<allow_tags> to use the extended (and also nonstandard and invalid) JSON syntax for serialised objects, and you still want to decode the generated When you want to serialise objects, you can run a regex to replace the tagged syntax by standard JSON arrays (it only works for "normal" package names without comma, newlines or single colons). First, the readable Perl version: # if your FREEZE methods return no values, you need this replace first: $json =~ s/\( \s* (" (?: [^\\":,]+|\\.|::)* ") \s* \) \s* \[\s*\]/[$1]/gx; # this works for non-empty constructor arg lists: $json =~ s/\( \s* (" (?: [^\\":,]+|\\.|::)* ") \s* \) \s* \[/[$1,/gx; And here is a less readable version that is easy to adapt to other languages: $json =~ s/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/[$1,/g; Here is an ECMAScript version (same regex): json = json.replace (/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/g, "[$1,"); Since this syntax converts to standard JSON arrays, it might be hard to distinguish serialised objects from normal arrays. You can prepend a "magic number" as first array element to reduce chances of a collision: $json =~ s/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/["XU1peReLzT4ggEllLanBYq4G9VzliwKF",$1,/g; And after decoding the JSON text, you could walk the data structure looking for arrays with a first element of C<XU1peReLzT4ggEllLanBYq4G9VzliwKF>. The same approach can be used to create the tagged format with another encoder. First, you create an array with the magic string as first member, the classname as second, and constructor arguments last, encode it as part of your JSON structure, and then: $json =~ s/\[\s*"XU1peReLzT4ggEllLanBYq4G9VzliwKF"\s*,\s*("([^\\":,]+|\\.|::)*")\s*,/($1)[/g; Again, this has some limitations - the magic string must not be encoded with character escapes, and the constructor arguments must be non-empty. =head1 RFC7159 Since this module was written, Google has written a new JSON RFC, RFC 7159 (and RFC7158). Unfortunately, this RFC breaks compatibility with both the original JSON specification on www.json.org and RFC4627. As far as I can see, you can get partial compatibility when parsing by using C<< ->allow_nonref >>. However, consider the security implications of doing so. I haven't decided yet when to break compatibility with RFC4627 by default (and potentially leave applications insecure) and change the default to follow RFC7159, but application authors are well advised to call C<< ->allow_nonref(0) >> even if this is the current default, if they cannot handle non-reference values, in preparation for the day when the default will change. =head1 (I-)THREADS This module is I<not> guaranteed to be ithread (or MULTIPLICITY-) safe and there are no plans to change this. Note that perl's builtin so-called theeads/ithreads are officially deprecated and should not be used. =head1 THE PERILS OF SETLOCALE Sometimes people avoid the Perl locale support and directly call the system's setlocale function with C<LC_ALL>. This breaks both perl and modules such as JSON::XS, as stringification of numbers no longer works correctly (e.g. C<$x = 0.1; print "$x"+1> might print C<1>, and JSON::XS might output illegal JSON as JSON::XS relies on perl to stringify numbers). The solution is simple: don't call C<setlocale>, or use it for only those categories you need, such as C<LC_MESSAGES> or C<LC_CTYPE>. If you need C<LC_NUMERIC>, you should enable it only around the code that actually needs it (avoiding stringification of numbers), and restore it afterwards. =head1 BUGS While the goal of this module is to be correct, that unfortunately does not mean it's bug-free, only that I think its design is bug-free. If you keep reporting bugs they will be fixed swiftly, though. Please refrain from using rt.cpan.org or any other bug reporting service. I put the contact address into my modules for a reason. =cut BEGIN { *true = \$Types::Serialiser::true; *true = \&Types::Serialiser::true; *false = \$Types::Serialiser::false; *false = \&Types::Serialiser::false; *is_bool = \&Types::Serialiser::is_bool; *JSON::XS::Boolean:: = *Types::Serialiser::Boolean::; } XSLoader::load "JSON::XS", $VERSION; =head1 SEE ALSO The F<json_xs> command line utility for quick experiments. =head1 AUTHOR Marc Lehmann <schmorp@schmorp.de> http://home.schmorp.de/ =cut 1 JSON/XS/Boolean.pm 0000644 00000001122 15037233313 0007560 0 ustar 00 =head1 NAME JSON::XS::Boolean - dummy module providing JSON::XS::Boolean =head1 SYNOPSIS # do not "use" yourself =head1 DESCRIPTION This module exists only to provide overload resolution for Storable and similar modules. It's only needed for compatibility with data serialised (by other modules such as Storable) that was decoded by JSON::XS versions before 3.0. Since 3.0, JSON::PP::Boolean has replaced it. Support for JSON::XS::Boolean will be removed in a future release. =cut use JSON::XS (); 1; =head1 AUTHOR Marc Lehmann <schmorp@schmorp.de> http://home.schmorp.de/ =cut Term/ReadKey.pm 0000644 00000035013 15037233314 0007340 0 ustar 00 # -*- buffer-read-only: t -*- # # This file is auto-generated. ***ANY*** changes here will be lost # package Term::ReadKey; use strict; use warnings; =head1 NAME Term::ReadKey - A perl module for simple terminal control =head1 SYNOPSIS use Term::ReadKey; ReadMode 4; # Turn off controls keys while (not defined ($key = ReadKey(-1))) { # No key yet } print "Get key $key\n"; ReadMode 0; # Reset tty mode before exiting =head1 DESCRIPTION Term::ReadKey is a compiled perl module dedicated to providing simple control over terminal driver modes (cbreak, raw, cooked, etc.,) support for non-blocking reads, if the architecture allows, and some generalized handy functions for working with terminals. One of the main goals is to have the functions as portable as possible, so you can just plug in "use Term::ReadKey" on any architecture and have a good likelihood of it working. Version 2.30.01: Added handling of arrows, page up/down, home/end, insert/delete keys under Win32. These keys emit xterm-compatible sequences. Works with Term::ReadLine::Perl. =over 4 =item ReadMode MODE [, Filehandle] Takes an integer argument or a string synonym (case insensitive), which can currently be one of the following values: INT SYNONYM DESCRIPTION 0 'restore' Restore original settings. 1 'normal' Change to what is commonly the default mode, echo on, buffered, signals enabled, Xon/Xoff possibly enabled, and 8-bit mode possibly disabled. 2 'noecho' Same as 1, just with echo off. Nice for reading passwords. 3 'cbreak' Echo off, unbuffered, signals enabled, Xon/Xoff possibly enabled, and 8-bit mode possibly enabled. 4 'raw' Echo off, unbuffered, signals disabled, Xon/Xoff disabled, and 8-bit mode possibly disabled. 5 'ultra-raw' Echo off, unbuffered, signals disabled, Xon/Xoff disabled, 8-bit mode enabled if parity permits, and CR to CR/LF translation turned off. These functions are automatically applied to the STDIN handle if no other handle is supplied. Modes 0 and 5 have some special properties worth mentioning: not only will mode 0 restore original settings, but it cause the next ReadMode call to save a new set of default settings. Mode 5 is similar to mode 4, except no CR/LF translation is performed, and if possible, parity will be disabled (only if not being used by the terminal, however. It is no different from mode 4 under Windows.) If you just need to read a key at a time, then modes 3 or 4 are probably sufficient. Mode 4 is a tad more flexible, but needs a bit more work to control. If you use ReadMode 3, then you should install a SIGINT or END handler to reset the terminal (via ReadMode 0) if the user aborts the program via C<^C>. (For any mode, an END handler consisting of "ReadMode 0" is actually a good idea.) If you are executing another program that may be changing the terminal mode, you will either want to say ReadMode 1; # same as ReadMode 'normal' system('someprogram'); ReadMode 1; which resets the settings after the program has run, or: $somemode=1; ReadMode 0; # same as ReadMode 'restore' system('someprogram'); ReadMode 1; which records any changes the program may have made, before resetting the mode. =item ReadKey MODE [, Filehandle] Takes an integer argument, which can currently be one of the following values: 0 Perform a normal read using getc -1 Perform a non-blocked read >0 Perform a timed read If the filehandle is not supplied, it will default to STDIN. If there is nothing waiting in the buffer during a non-blocked read, then undef will be returned. In most situations, you will probably want to use C<ReadKey -1>. I<NOTE> that if the OS does not provide any known mechanism for non-blocking reads, then a C<ReadKey -1> can die with a fatal error. This will hopefully not be common. If MODE is greater then zero, then ReadKey will use it as a timeout value in seconds (fractional seconds are allowed), and won't return C<undef> until that time expires. I<NOTE>, again, that some OS's may not support this timeout behaviour. If MODE is less then zero, then this is treated as a timeout of zero, and thus will return immediately if no character is waiting. A MODE of zero, however, will act like a normal getc. I<NOTE>, there are currently some limitations with this call under Windows. It may be possible that non-blocking reads will fail when reading repeating keys from more then one console. =item ReadLine MODE [, Filehandle] Takes an integer argument, which can currently be one of the following values: 0 Perform a normal read using scalar(<FileHandle>) -1 Perform a non-blocked read >0 Perform a timed read If there is nothing waiting in the buffer during a non-blocked read, then undef will be returned. I<NOTE>, that if the OS does not provide any known mechanism for non-blocking reads, then a C<ReadLine 1> can die with a fatal error. This will hopefully not be common. I<NOTE> that a non-blocking test is only performed for the first character in the line, not the entire line. This call will probably B<not> do what you assume, especially with C<ReadMode> MODE values higher then 1. For example, pressing Space and then Backspace would appear to leave you where you started, but any timeouts would now be suspended. B<This call is currently not available under Windows>. =item GetTerminalSize [Filehandle] Returns either an empty array if this operation is unsupported, or a four element array containing: the width of the terminal in characters, the height of the terminal in character, the width in pixels, and the height in pixels. (The pixel size will only be valid in some environments.) I<NOTE>, under Windows, this function must be called with an B<output> filehandle, such as C<STDOUT>, or a handle opened to C<CONOUT$>. =item SetTerminalSize WIDTH,HEIGHT,XPIX,YPIX [, Filehandle] Return -1 on failure, 0 otherwise. I<NOTE> that this terminal size is only for B<informative> value, and changing the size via this mechanism will B<not> change the size of the screen. For example, XTerm uses a call like this when it resizes the screen. If any of the new measurements vary from the old, the OS will probably send a SIGWINCH signal to anything reading that tty or pty. B<This call does not work under Windows>. =item GetSpeed [, Filehandle] Returns either an empty array if the operation is unsupported, or a two value array containing the terminal in and out speeds, in B<decimal>. E.g, an in speed of 9600 baud and an out speed of 4800 baud would be returned as (9600,4800). Note that currently the in and out speeds will always be identical in some OS's. B<No speeds are reported under Windows>. =item GetControlChars [, Filehandle] Returns an array containing key/value pairs suitable for a hash. The pairs consist of a key, the name of the control character/signal, and the value of that character, as a single character. B<This call does nothing under Windows>. Each key will be an entry from the following list: DISCARD DSUSPEND EOF EOL EOL2 ERASE ERASEWORD INTERRUPT KILL MIN QUIT QUOTENEXT REPRINT START STATUS STOP SUSPEND SWITCH TIME Thus, the following will always return the current interrupt character, regardless of platform. %keys = GetControlChars; $int = $keys{INTERRUPT}; =item SetControlChars [, Filehandle] Takes an array containing key/value pairs, as a hash will produce. The pairs should consist of a key that is the name of a legal control character/signal, and the value should be either a single character, or a number in the range 0-255. SetControlChars will die with a runtime error if an invalid character name is passed or there is an error changing the settings. The list of valid names is easily available via %cchars = GetControlChars(); @cnames = keys %cchars; B<This call does nothing under Windows>. =back =head1 AUTHOR Kenneth Albanowski <kjahds@kjahds.com> Currently maintained by Jonathan Stowe <jns@gellyfish.co.uk> =head1 SUPPORT The code is maintained at https://github.com/jonathanstowe/TermReadKey Please feel free to fork and suggest patches. =head1 LICENSE Prior to the 2.31 release the license statement was: Copyright (C) 1994-1999 Kenneth Albanowski. 2001-2005 Jonathan Stowe and others Unlimited distribution and/or modification is allowed as long as this copyright notice remains intact. And was only stated in the README file. Because I believe the original author's intent was to be more open than the other commonly used licenses I would like to leave that in place. However if you or your lawyers require something with some more words you can optionally choose to license this under the standard Perl license: This module is free software; you can redistribute it and/or modify it under the terms of the Artistic License. For details, see the full text of the license in the file "Artistic" that should have been provided with the version of perl you are using. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut use vars qw($VERSION); $VERSION = '2.37'; require Exporter; require DynaLoader; use vars qw(@ISA @EXPORT_OK @EXPORT); @ISA = qw(Exporter DynaLoader); # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) @EXPORT = qw( ReadKey ReadMode ReadLine GetTerminalSize SetTerminalSize GetSpeed GetControlChars SetControlChars ); @EXPORT_OK = qw(); bootstrap Term::ReadKey; # Should we use LINES and COLUMNS to try and get the terminal size? # Change this to zero if you have systems where these are commonly # set to erroneous values. (But if either are near zero, they won't be # used anyhow.) use vars qw($UseEnv $CurrentMode %modes); $UseEnv = 1; $CurrentMode = 0; %modes = ( # lowercase is canonical original => 0, restore => 0, normal => 1, noecho => 2, cbreak => 3, raw => 4, 'ultra-raw' => 5 ); # reduce Carp memory footprint, only load when needed sub croak { require Carp; goto &Carp::croak; } sub carp { require Carp; goto &Carp::carp; } sub ReadMode { my $mode = $modes{ lc $_[0] }; # lowercase is canonical my $fh = normalizehandle( ( @_ > 1 ? $_[1] : \*STDIN ) ); if ( defined($mode) ) { $CurrentMode = $mode } elsif ( $_[0] =~ /^\d/ ) { $CurrentMode = $_[0] } else { croak("Unknown terminal mode `$_[0]'"); } SetReadMode($CurrentMode, $fh); } sub normalizehandle { my ($file) = @_; # allows fake signature optimization no strict; # print "Handle = $file\n"; if ( ref($file) ) { return $file; } # Reference is fine # if ($file =~ /^\*/) { return $file; } # Type glob is good if ( ref( \$file ) eq 'GLOB' ) { return $file; } # Glob is good # print "Caller = ",(caller(1))[0],"\n"; return \*{ ( ( caller(1) )[0] ) . "::$file" }; } sub GetTerminalSize { my $file = normalizehandle( ( @_ > 0 ? $_[0] : \*STDOUT ) ); my (@results, @fail); if ( &termsizeoptions() & 1 ) # VIO { @results = GetTermSizeVIO($file); push( @fail, "VIOGetMode call" ); } elsif ( &termsizeoptions() & 2 ) # GWINSZ { @results = GetTermSizeGWINSZ($file); push( @fail, "TIOCGWINSZ ioctl" ); } elsif ( &termsizeoptions() & 4 ) # GSIZE { @results = GetTermSizeGSIZE($file); push( @fail, "TIOCGSIZE ioctl" ); } elsif ( &termsizeoptions() & 8 ) # WIN32 { @results = GetTermSizeWin32($file); push( @fail, "Win32 GetConsoleScreenBufferInfo call" ); } else { @results = (); } if ( @results < 4 and $UseEnv ) { my ($C) = defined( $ENV{COLUMNS} ) ? $ENV{COLUMNS} : 0; my ($L) = defined( $ENV{LINES} ) ? $ENV{LINES} : 0; if ( ( $C >= 2 ) and ( $L >= 2 ) ) { @results = ( $C + 0, $L + 0, 0, 0 ); } push( @fail, "COLUMNS and LINES environment variables" ); } if ( @results < 4 && $^O ne 'MSWin32') { my ($prog) = "resize"; # Workaround for Solaris path silliness if ( -f "/usr/openwin/bin/resize" ) { $prog = "/usr/openwin/bin/resize"; } my ($resize) = scalar(`$prog 2>/dev/null`); if (defined $resize and ( $resize =~ /COLUMNS\s*=\s*(\d+)/ or $resize =~ /setenv\s+COLUMNS\s+'?(\d+)/ ) ) { $results[0] = $1; if ( $resize =~ /LINES\s*=\s*(\d+)/ or $resize =~ /setenv\s+LINES\s+'?(\d+)/ ) { $results[1] = $1; @results[ 2, 3 ] = ( 0, 0 ); } else { @results = (); } } else { @results = (); } push( @fail, "resize program" ); } if ( @results < 4 && $^O ne 'MSWin32' ) { my ($prog) = "stty size"; my ($stty) = scalar(`$prog 2>/dev/null`); if (defined $stty and ( $stty =~ /(\d+) (\d+)/ ) ) { $results[0] = $2; $results[1] = $1; @results[ 2, 3 ] = ( 0, 0 ); } else { @results = (); } push( @fail, "stty program" ); } if ( @results != 4 ) { carp("Unable to get Terminal Size." . join( "", map( " The $_ didn't work.", @fail ) )); return undef; } @results; } # blockoptions: #nodelay #select sub ReadKey { my $File = normalizehandle((@_>1?$_[1]:\*STDIN)); if (defined $_[0] && $_[0] > 0) { if ($_[0]) { return undef if &selectfile($File,$_[0]) == 0 } } if (defined $_[0] && $_[0] < 0) { &setnodelay($File,1); } my $value = getc $File; if (defined $_[0] && $_[0] < 0) { &setnodelay($File,0); } $value; } sub ReadLine { my $File = normalizehandle((@_>1?$_[1]:\*STDIN)); if (defined $_[0] && $_[0] > 0) { if ($_[0]) { return undef if &selectfile($File,$_[0]) == 0 } } if (defined $_[0] && $_[0] < 0) { &setnodelay($File,1) }; my $value = scalar(<$File>); if (defined $_[0] && $_[0] < 0) { &setnodelay($File,0) }; $value; } 1; # ex: set ro: threads.pm 0000644 00000110063 15037233314 0006536 0 ustar 00 package threads; use 5.008; use strict; use warnings; our $VERSION = '2.21'; # remember to update version in POD! my $XS_VERSION = $VERSION; $VERSION = eval $VERSION; # Verify this Perl supports threads require Config; if (! $Config::Config{useithreads}) { die("This Perl not built to support threads\n"); } # Complain if 'threads' is loaded after 'threads::shared' if ($threads::shared::threads_shared) { warn <<'_MSG_'; Warning, threads::shared has already been loaded. To enable shared variables, 'use threads' must be called before threads::shared or any module that uses it. _MSG_ } # Declare that we have been loaded $threads::threads = 1; # Load the XS code require XSLoader; XSLoader::load('threads', $XS_VERSION); ### Export ### sub import { my $class = shift; # Not used # Exported subroutines my @EXPORT = qw(async); # Handle args while (my $sym = shift) { if ($sym =~ /^(?:stack|exit)/i) { if (defined(my $arg = shift)) { if ($sym =~ /^stack/i) { threads->set_stack_size($arg); } else { $threads::thread_exit_only = $arg =~ /^thread/i; } } else { require Carp; Carp::croak("threads: Missing argument for option: $sym"); } } elsif ($sym =~ /^str/i) { import overload ('""' => \&tid); } elsif ($sym =~ /^(?::all|yield)$/) { push(@EXPORT, qw(yield)); } else { require Carp; Carp::croak("threads: Unknown import option: $sym"); } } # Export subroutine names my $caller = caller(); foreach my $sym (@EXPORT) { no strict 'refs'; *{$caller.'::'.$sym} = \&{$sym}; } # Set stack size via environment variable if (exists($ENV{'PERL5_ITHREADS_STACK_SIZE'})) { threads->set_stack_size($ENV{'PERL5_ITHREADS_STACK_SIZE'}); } } ### Methods, etc. ### # Exit from a thread (only) sub exit { my ($class, $status) = @_; if (! defined($status)) { $status = 0; } # Class method only if (ref($class)) { require Carp; Carp::croak('Usage: threads->exit(status)'); } $class->set_thread_exit_only(1); CORE::exit($status); } # 'Constant' args for threads->list() sub threads::all { } sub threads::running { 1 } sub threads::joinable { 0 } # 'new' is an alias for 'create' *new = \&create; # 'async' is a function alias for the 'threads->create()' method sub async (&;@) { unshift(@_, 'threads'); # Use "goto" trick to avoid pad problems from 5.8.1 (fixed in 5.8.2) goto &create; } # Thread object equality checking use overload ( '==' => \&equal, '!=' => sub { ! equal(@_) }, 'fallback' => 1 ); 1; __END__ =head1 NAME threads - Perl interpreter-based threads =head1 VERSION This document describes threads version 2.21 =head1 WARNING The "interpreter-based threads" provided by Perl are not the fast, lightweight system for multitasking that one might expect or hope for. Threads are implemented in a way that make them easy to misuse. Few people know how to use them correctly or will be able to provide help. The use of interpreter-based threads in perl is officially L<discouraged|perlpolicy/discouraged>. =head1 SYNOPSIS use threads ('yield', 'stack_size' => 64*4096, 'exit' => 'threads_only', 'stringify'); sub start_thread { my @args = @_; print('Thread started: ', join(' ', @args), "\n"); } my $thr = threads->create('start_thread', 'argument'); $thr->join(); threads->create(sub { print("I am a thread\n"); })->join(); my $thr2 = async { foreach (@files) { ... } }; $thr2->join(); if (my $err = $thr2->error()) { warn("Thread error: $err\n"); } # Invoke thread in list context (implicit) so it can return a list my ($thr) = threads->create(sub { return (qw/a b c/); }); # or specify list context explicitly my $thr = threads->create({'context' => 'list'}, sub { return (qw/a b c/); }); my @results = $thr->join(); $thr->detach(); # Get a thread's object $thr = threads->self(); $thr = threads->object($tid); # Get a thread's ID $tid = threads->tid(); $tid = $thr->tid(); $tid = "$thr"; # Give other threads a chance to run threads->yield(); yield(); # Lists of non-detached threads my @threads = threads->list(); my $thread_count = threads->list(); my @running = threads->list(threads::running); my @joinable = threads->list(threads::joinable); # Test thread objects if ($thr1 == $thr2) { ... } # Manage thread stack size $stack_size = threads->get_stack_size(); $old_size = threads->set_stack_size(32*4096); # Create a thread with a specific context and stack size my $thr = threads->create({ 'context' => 'list', 'stack_size' => 32*4096, 'exit' => 'thread_only' }, \&foo); # Get thread's context my $wantarray = $thr->wantarray(); # Check thread's state if ($thr->is_running()) { sleep(1); } if ($thr->is_joinable()) { $thr->join(); } # Send a signal to a thread $thr->kill('SIGUSR1'); # Exit a thread threads->exit(); =head1 DESCRIPTION Since Perl 5.8, thread programming has been available using a model called I<interpreter threads> which provides a new Perl interpreter for each thread, and, by default, results in no data or state information being shared between threads. (Prior to Perl 5.8, I<5005threads> was available through the C<Thread.pm> API. This threading model has been deprecated, and was removed as of Perl 5.10.0.) As just mentioned, all variables are, by default, thread local. To use shared variables, you need to also load L<threads::shared>: use threads; use threads::shared; When loading L<threads::shared>, you must C<use threads> before you C<use threads::shared>. (C<threads> will emit a warning if you do it the other way around.) It is strongly recommended that you enable threads via C<use threads> as early as possible in your script. If needed, scripts can be written so as to run on both threaded and non-threaded Perls: my $can_use_threads = eval 'use threads; 1'; if ($can_use_threads) { # Do processing using threads ... } else { # Do it without using threads ... } =over =item $thr = threads->create(FUNCTION, ARGS) This will create a new thread that will begin execution with the specified entry point function, and give it the I<ARGS> list as parameters. It will return the corresponding threads object, or C<undef> if thread creation failed. I<FUNCTION> may either be the name of a function, an anonymous subroutine, or a code ref. my $thr = threads->create('func_name', ...); # or my $thr = threads->create(sub { ... }, ...); # or my $thr = threads->create(\&func, ...); The C<-E<gt>new()> method is an alias for C<-E<gt>create()>. =item $thr->join() This will wait for the corresponding thread to complete its execution. When the thread finishes, C<-E<gt>join()> will return the return value(s) of the entry point function. The context (void, scalar or list) for the return value(s) for C<-E<gt>join()> is determined at the time of thread creation. # Create thread in list context (implicit) my ($thr1) = threads->create(sub { my @results = qw(a b c); return (@results); }); # or (explicit) my $thr1 = threads->create({'context' => 'list'}, sub { my @results = qw(a b c); return (@results); }); # Retrieve list results from thread my @res1 = $thr1->join(); # Create thread in scalar context (implicit) my $thr2 = threads->create(sub { my $result = 42; return ($result); }); # Retrieve scalar result from thread my $res2 = $thr2->join(); # Create a thread in void context (explicit) my $thr3 = threads->create({'void' => 1}, sub { print("Hello, world\n"); }); # Join the thread in void context (i.e., no return value) $thr3->join(); See L</"THREAD CONTEXT"> for more details. If the program exits without all threads having either been joined or detached, then a warning will be issued. Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already joined thread will cause an error to be thrown. =item $thr->detach() Makes the thread unjoinable, and causes any eventual return value to be discarded. When the program exits, any detached threads that are still running are silently terminated. If the program exits without all threads having either been joined or detached, then a warning will be issued. Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already detached thread will cause an error to be thrown. =item threads->detach() Class method that allows a thread to detach itself. =item threads->self() Class method that allows a thread to obtain its own I<threads> object. =item $thr->tid() Returns the ID of the thread. Thread IDs are unique integers with the main thread in a program being 0, and incrementing by 1 for every thread created. =item threads->tid() Class method that allows a thread to obtain its own ID. =item "$thr" If you add the C<stringify> import option to your C<use threads> declaration, then using a threads object in a string or a string context (e.g., as a hash key) will cause its ID to be used as the value: use threads qw(stringify); my $thr = threads->create(...); print("Thread $thr started\n"); # Prints: Thread 1 started =item threads->object($tid) This will return the I<threads> object for the I<active> thread associated with the specified thread ID. If C<$tid> is the value for the current thread, then this call works the same as C<-E<gt>self()>. Otherwise, returns C<undef> if there is no thread associated with the TID, if the thread is joined or detached, if no TID is specified or if the specified TID is undef. =item threads->yield() This is a suggestion to the OS to let this thread yield CPU time to other threads. What actually happens is highly dependent upon the underlying thread implementation. You may do C<use threads qw(yield)>, and then just use C<yield()> in your code. =item threads->list() =item threads->list(threads::all) =item threads->list(threads::running) =item threads->list(threads::joinable) With no arguments (or using C<threads::all>) and in a list context, returns a list of all non-joined, non-detached I<threads> objects. In a scalar context, returns a count of the same. With a I<true> argument (using C<threads::running>), returns a list of all non-joined, non-detached I<threads> objects that are still running. With a I<false> argument (using C<threads::joinable>), returns a list of all non-joined, non-detached I<threads> objects that have finished running (i.e., for which C<-E<gt>join()> will not I<block>). =item $thr1->equal($thr2) Tests if two threads objects are the same thread or not. This is overloaded to the more natural forms: if ($thr1 == $thr2) { print("Threads are the same\n"); } # or if ($thr1 != $thr2) { print("Threads differ\n"); } (Thread comparison is based on thread IDs.) =item async BLOCK; C<async> creates a thread to execute the block immediately following it. This block is treated as an anonymous subroutine, and so must have a semicolon after the closing brace. Like C<threads-E<gt>create()>, C<async> returns a I<threads> object. =item $thr->error() Threads are executed in an C<eval> context. This method will return C<undef> if the thread terminates I<normally>. Otherwise, it returns the value of C<$@> associated with the thread's execution status in its C<eval> context. =item $thr->_handle() This I<private> method returns a pointer (i.e., the memory location expressed as an unsigned integer) to the internal thread structure associated with a threads object. For Win32, this is a pointer to the C<HANDLE> value returned by C<CreateThread> (i.e., C<HANDLE *>); for other platforms, it is a pointer to the C<pthread_t> structure used in the C<pthread_create> call (i.e., C<pthread_t *>). This method is of no use for general Perl threads programming. Its intent is to provide other (XS-based) thread modules with the capability to access, and possibly manipulate, the underlying thread structure associated with a Perl thread. =item threads->_handle() Class method that allows a thread to obtain its own I<handle>. =back =head1 EXITING A THREAD The usual method for terminating a thread is to L<return()|perlfunc/"return EXPR"> from the entry point function with the appropriate return value(s). =over =item threads->exit() If needed, a thread can be exited at any time by calling C<threads-E<gt>exit()>. This will cause the thread to return C<undef> in a scalar context, or the empty list in a list context. When called from the I<main> thread, this behaves the same as C<exit(0)>. =item threads->exit(status) When called from a thread, this behaves like C<threads-E<gt>exit()> (i.e., the exit status code is ignored). When called from the I<main> thread, this behaves the same as C<exit(status)>. =item die() Calling C<die()> in a thread indicates an abnormal exit for the thread. Any C<$SIG{__DIE__}> handler in the thread will be called first, and then the thread will exit with a warning message that will contain any arguments passed in the C<die()> call. =item exit(status) Calling L<exit()|perlfunc/"exit EXPR"> inside a thread causes the whole application to terminate. Because of this, the use of C<exit()> inside threaded code, or in modules that might be used in threaded applications, is strongly discouraged. If C<exit()> really is needed, then consider using the following: threads->exit() if threads->can('exit'); # Thread friendly exit(status); =item use threads 'exit' => 'threads_only' This globally overrides the default behavior of calling C<exit()> inside a thread, and effectively causes such calls to behave the same as C<threads-E<gt>exit()>. In other words, with this setting, calling C<exit()> causes only the thread to terminate. Because of its global effect, this setting should not be used inside modules or the like. The I<main> thread is unaffected by this setting. =item threads->create({'exit' => 'thread_only'}, ...) This overrides the default behavior of C<exit()> inside the newly created thread only. =item $thr->set_thread_exit_only(boolean) This can be used to change the I<exit thread only> behavior for a thread after it has been created. With a I<true> argument, C<exit()> will cause only the thread to exit. With a I<false> argument, C<exit()> will terminate the application. The I<main> thread is unaffected by this call. =item threads->set_thread_exit_only(boolean) Class method for use inside a thread to change its own behavior for C<exit()>. The I<main> thread is unaffected by this call. =back =head1 THREAD STATE The following boolean methods are useful in determining the I<state> of a thread. =over =item $thr->is_running() Returns true if a thread is still running (i.e., if its entry point function has not yet finished or exited). =item $thr->is_joinable() Returns true if the thread has finished running, is not detached and has not yet been joined. In other words, the thread is ready to be joined, and a call to C<$thr-E<gt>join()> will not I<block>. =item $thr->is_detached() Returns true if the thread has been detached. =item threads->is_detached() Class method that allows a thread to determine whether or not it is detached. =back =head1 THREAD CONTEXT As with subroutines, the type of value returned from a thread's entry point function may be determined by the thread's I<context>: list, scalar or void. The thread's context is determined at thread creation. This is necessary so that the context is available to the entry point function via L<wantarray()|perlfunc/"wantarray">. The thread may then specify a value of the appropriate type to be returned from C<-E<gt>join()>. =head2 Explicit context Because thread creation and thread joining may occur in different contexts, it may be desirable to state the context explicitly to the thread's entry point function. This may be done by calling C<-E<gt>create()> with a hash reference as the first argument: my $thr = threads->create({'context' => 'list'}, \&foo); ... my @results = $thr->join(); In the above, the threads object is returned to the parent thread in scalar context, and the thread's entry point function C<foo> will be called in list (array) context such that the parent thread can receive a list (array) from the C<-E<gt>join()> call. (C<'array'> is synonymous with C<'list'>.) Similarly, if you need the threads object, but your thread will not be returning a value (i.e., I<void> context), you would do the following: my $thr = threads->create({'context' => 'void'}, \&foo); ... $thr->join(); The context type may also be used as the I<key> in the hash reference followed by a I<true> value: threads->create({'scalar' => 1}, \&foo); ... my ($thr) = threads->list(); my $result = $thr->join(); =head2 Implicit context If not explicitly stated, the thread's context is implied from the context of the C<-E<gt>create()> call: # Create thread in list context my ($thr) = threads->create(...); # Create thread in scalar context my $thr = threads->create(...); # Create thread in void context threads->create(...); =head2 $thr->wantarray() This returns the thread's context in the same manner as L<wantarray()|perlfunc/"wantarray">. =head2 threads->wantarray() Class method to return the current thread's context. This returns the same value as running L<wantarray()|perlfunc/"wantarray"> inside the current thread's entry point function. =head1 THREAD STACK SIZE The default per-thread stack size for different platforms varies significantly, and is almost always far more than is needed for most applications. On Win32, Perl's makefile explicitly sets the default stack to 16 MB; on most other platforms, the system default is used, which again may be much larger than is needed. By tuning the stack size to more accurately reflect your application's needs, you may significantly reduce your application's memory usage, and increase the number of simultaneously running threads. Note that on Windows, address space allocation granularity is 64 KB, therefore, setting the stack smaller than that on Win32 Perl will not save any more memory. =over =item threads->get_stack_size(); Returns the current default per-thread stack size. The default is zero, which means the system default stack size is currently in use. =item $size = $thr->get_stack_size(); Returns the stack size for a particular thread. A return value of zero indicates the system default stack size was used for the thread. =item $old_size = threads->set_stack_size($new_size); Sets a new default per-thread stack size, and returns the previous setting. Some platforms have a minimum thread stack size. Trying to set the stack size below this value will result in a warning, and the minimum stack size will be used. Some Linux platforms have a maximum stack size. Setting too large of a stack size will cause thread creation to fail. If needed, C<$new_size> will be rounded up to the next multiple of the memory page size (usually 4096 or 8192). Threads created after the stack size is set will then either call C<pthread_attr_setstacksize()> I<(for pthreads platforms)>, or supply the stack size to C<CreateThread()> I<(for Win32 Perl)>. (Obviously, this call does not affect any currently extant threads.) =item use threads ('stack_size' => VALUE); This sets the default per-thread stack size at the start of the application. =item $ENV{'PERL5_ITHREADS_STACK_SIZE'} The default per-thread stack size may be set at the start of the application through the use of the environment variable C<PERL5_ITHREADS_STACK_SIZE>: PERL5_ITHREADS_STACK_SIZE=1048576 export PERL5_ITHREADS_STACK_SIZE perl -e'use threads; print(threads->get_stack_size(), "\n")' This value overrides any C<stack_size> parameter given to C<use threads>. Its primary purpose is to permit setting the per-thread stack size for legacy threaded applications. =item threads->create({'stack_size' => VALUE}, FUNCTION, ARGS) To specify a particular stack size for any individual thread, call C<-E<gt>create()> with a hash reference as the first argument: my $thr = threads->create({'stack_size' => 32*4096}, \&foo, @args); =item $thr2 = $thr1->create(FUNCTION, ARGS) This creates a new thread (C<$thr2>) that inherits the stack size from an existing thread (C<$thr1>). This is shorthand for the following: my $stack_size = $thr1->get_stack_size(); my $thr2 = threads->create({'stack_size' => $stack_size}, FUNCTION, ARGS); =back =head1 THREAD SIGNALLING When safe signals is in effect (the default behavior - see L</"Unsafe signals"> for more details), then signals may be sent and acted upon by individual threads. =over 4 =item $thr->kill('SIG...'); Sends the specified signal to the thread. Signal names and (positive) signal numbers are the same as those supported by L<kill()|perlfunc/"kill SIGNAL, LIST">. For example, 'SIGTERM', 'TERM' and (depending on the OS) 15 are all valid arguments to C<-E<gt>kill()>. Returns the thread object to allow for method chaining: $thr->kill('SIG...')->join(); =back Signal handlers need to be set up in the threads for the signals they are expected to act upon. Here's an example for I<cancelling> a thread: use threads; sub thr_func { # Thread 'cancellation' signal handler $SIG{'KILL'} = sub { threads->exit(); }; ... } # Create a thread my $thr = threads->create('thr_func'); ... # Signal the thread to terminate, and then detach # it so that it will get cleaned up automatically $thr->kill('KILL')->detach(); Here's another simplistic example that illustrates the use of thread signalling in conjunction with a semaphore to provide rudimentary I<suspend> and I<resume> capabilities: use threads; use Thread::Semaphore; sub thr_func { my $sema = shift; # Thread 'suspend/resume' signal handler $SIG{'STOP'} = sub { $sema->down(); # Thread suspended $sema->up(); # Thread resumes }; ... } # Create a semaphore and pass it to a thread my $sema = Thread::Semaphore->new(); my $thr = threads->create('thr_func', $sema); # Suspend the thread $sema->down(); $thr->kill('STOP'); ... # Allow the thread to continue $sema->up(); CAVEAT: The thread signalling capability provided by this module does not actually send signals via the OS. It I<emulates> signals at the Perl-level such that signal handlers are called in the appropriate thread. For example, sending C<$thr-E<gt>kill('STOP')> does not actually suspend a thread (or the whole process), but does cause a C<$SIG{'STOP'}> handler to be called in that thread (as illustrated above). As such, signals that would normally not be appropriate to use in the C<kill()> command (e.g., C<kill('KILL', $$)>) are okay to use with the C<-E<gt>kill()> method (again, as illustrated above). Correspondingly, sending a signal to a thread does not disrupt the operation the thread is currently working on: The signal will be acted upon after the current operation has completed. For instance, if the thread is I<stuck> on an I/O call, sending it a signal will not cause the I/O call to be interrupted such that the signal is acted up immediately. Sending a signal to a terminated/finished thread is ignored. =head1 WARNINGS =over 4 =item Perl exited with active threads: If the program exits without all threads having either been joined or detached, then this warning will be issued. NOTE: If the I<main> thread exits, then this warning cannot be suppressed using C<no warnings 'threads';> as suggested below. =item Thread creation failed: pthread_create returned # See the appropriate I<man> page for C<pthread_create> to determine the actual cause for the failure. =item Thread # terminated abnormally: ... A thread terminated in some manner other than just returning from its entry point function, or by using C<threads-E<gt>exit()>. For example, the thread may have terminated because of an error, or by using C<die>. =item Using minimum thread stack size of # Some platforms have a minimum thread stack size. Trying to set the stack size below this value will result in the above warning, and the stack size will be set to the minimum. =item Thread creation failed: pthread_attr_setstacksize(I<SIZE>) returned 22 The specified I<SIZE> exceeds the system's maximum stack size. Use a smaller value for the stack size. =back If needed, thread warnings can be suppressed by using: no warnings 'threads'; in the appropriate scope. =head1 ERRORS =over 4 =item This Perl not built to support threads The particular copy of Perl that you're trying to use was not built using the C<useithreads> configuration option. Having threads support requires all of Perl and all of the XS modules in the Perl installation to be rebuilt; it is not just a question of adding the L<threads> module (i.e., threaded and non-threaded Perls are binary incompatible). =item Cannot change stack size of an existing thread The stack size of currently extant threads cannot be changed, therefore, the following results in the above error: $thr->set_stack_size($size); =item Cannot signal threads without safe signals Safe signals must be in effect to use the C<-E<gt>kill()> signalling method. See L</"Unsafe signals"> for more details. =item Unrecognized signal name: ... The particular copy of Perl that you're trying to use does not support the specified signal being used in a C<-E<gt>kill()> call. =back =head1 BUGS AND LIMITATIONS Before you consider posting a bug report, please consult, and possibly post a message to the discussion forum to see if what you've encountered is a known problem. =over =item Thread-safe modules See L<perlmod/"Making your module threadsafe"> when creating modules that may be used in threaded applications, especially if those modules use non-Perl data, or XS code. =item Using non-thread-safe modules Unfortunately, you may encounter Perl modules that are not I<thread-safe>. For example, they may crash the Perl interpreter during execution, or may dump core on termination. Depending on the module and the requirements of your application, it may be possible to work around such difficulties. If the module will only be used inside a thread, you can try loading the module from inside the thread entry point function using C<require> (and C<import> if needed): sub thr_func { require Unsafe::Module # Unsafe::Module->import(...); .... } If the module is needed inside the I<main> thread, try modifying your application so that the module is loaded (again using C<require> and C<-E<gt>import()>) after any threads are started, and in such a way that no other threads are started afterwards. If the above does not work, or is not adequate for your application, then file a bug report on L<http://rt.cpan.org/Public/> against the problematic module. =item Memory consumption On most systems, frequent and continual creation and destruction of threads can lead to ever-increasing growth in the memory footprint of the Perl interpreter. While it is simple to just launch threads and then C<-E<gt>join()> or C<-E<gt>detach()> them, for long-lived applications, it is better to maintain a pool of threads, and to reuse them for the work needed, using L<queues|Thread::Queue> to notify threads of pending work. The CPAN distribution of this module contains a simple example (F<examples/pool_reuse.pl>) illustrating the creation, use and monitoring of a pool of I<reusable> threads. =item Current working directory On all platforms except MSWin32, the setting for the current working directory is shared among all threads such that changing it in one thread (e.g., using C<chdir()>) will affect all the threads in the application. On MSWin32, each thread maintains its own the current working directory setting. =item Environment variables Currently, on all platforms except MSWin32, all I<system> calls (e.g., using C<system()> or back-ticks) made from threads use the environment variable settings from the I<main> thread. In other words, changes made to C<%ENV> in a thread will not be visible in I<system> calls made by that thread. To work around this, set environment variables as part of the I<system> call. For example: my $msg = 'hello'; system("FOO=$msg; echo \$FOO"); # Outputs 'hello' to STDOUT On MSWin32, each thread maintains its own set of environment variables. =item Catching signals Signals are I<caught> by the main thread (thread ID = 0) of a script. Therefore, setting up signal handlers in threads for purposes other than L</"THREAD SIGNALLING"> as documented above will not accomplish what is intended. This is especially true if trying to catch C<SIGALRM> in a thread. To handle alarms in threads, set up a signal handler in the main thread, and then use L</"THREAD SIGNALLING"> to relay the signal to the thread: # Create thread with a task that may time out my $thr = threads->create(sub { threads->yield(); eval { $SIG{ALRM} = sub { die("Timeout\n"); }; alarm(10); ... # Do work here alarm(0); }; if ($@ =~ /Timeout/) { warn("Task in thread timed out\n"); } }; # Set signal handler to relay SIGALRM to thread $SIG{ALRM} = sub { $thr->kill('ALRM') }; ... # Main thread continues working =item Parent-child threads On some platforms, it might not be possible to destroy I<parent> threads while there are still existing I<child> threads. =item Unsafe signals Since Perl 5.8.0, signals have been made safer in Perl by postponing their handling until the interpreter is in a I<safe> state. See L<perl58delta/"Safe Signals"> and L<perlipc/"Deferred Signals (Safe Signals)"> for more details. Safe signals is the default behavior, and the old, immediate, unsafe signalling behavior is only in effect in the following situations: =over 4 =item * Perl has been built with C<PERL_OLD_SIGNALS> (see C<perl -V>). =item * The environment variable C<PERL_SIGNALS> is set to C<unsafe> (see L<perlrun/"PERL_SIGNALS">). =item * The module L<Perl::Unsafe::Signals> is used. =back If unsafe signals is in effect, then signal handling is not thread-safe, and the C<-E<gt>kill()> signalling method cannot be used. =item Identity of objects returned from threads When a value is returned from a thread through a C<join> operation, the value and everything that it references is copied across to the joining thread, in much the same way that values are copied upon thread creation. This works fine for most kinds of value, including arrays, hashes, and subroutines. The copying recurses through array elements, reference scalars, variables closed over by subroutines, and other kinds of reference. However, everything referenced by the returned value is a fresh copy in the joining thread, even if a returned object had in the child thread been a copy of something that previously existed in the parent thread. After joining, the parent will therefore have a duplicate of each such object. This sometimes matters, especially if the object gets mutated; this can especially matter for private data to which a returned subroutine provides access. =item Returning blessed objects from threads Returning blessed objects from threads does not work. Depending on the classes involved, you may be able to work around this by returning a serialized version of the object (e.g., using L<Data::Dumper> or L<Storable>), and then reconstituting it in the joining thread. If you're using Perl 5.10.0 or later, and if the class supports L<shared objects|threads::shared/"OBJECTS">, you can pass them via L<shared queues|Thread::Queue>. =item END blocks in threads It is possible to add L<END blocks|perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END"> to threads by using L<require|perlfunc/"require VERSION"> or L<eval|perlfunc/"eval EXPR"> with the appropriate code. These C<END> blocks will then be executed when the thread's interpreter is destroyed (i.e., either during a C<-E<gt>join()> call, or at program termination). However, calling any L<threads> methods in such an C<END> block will most likely I<fail> (e.g., the application may hang, or generate an error) due to mutexes that are needed to control functionality within the L<threads> module. For this reason, the use of C<END> blocks in threads is B<strongly> discouraged. =item Open directory handles In perl 5.14 and higher, on systems other than Windows that do not support the C<fchdir> C function, directory handles (see L<opendir|perlfunc/"opendir DIRHANDLE,EXPR">) will not be copied to new threads. You can use the C<d_fchdir> variable in L<Config.pm|Config> to determine whether your system supports it. In prior perl versions, spawning threads with open directory handles would crash the interpreter. L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154> =item Detached threads and global destruction If the main thread exits while there are detached threads which are still running, then Perl's global destruction phase is not executed because otherwise certain global structures that control the operation of threads and that are allocated in the main thread's memory may get destroyed before the detached thread is destroyed. If you are using any code that requires the execution of the global destruction phase for clean up (e.g., removing temp files), then do not use detached threads, but rather join all threads before exiting the program. =item Perl Bugs and the CPAN Version of L<threads> Support for threads extends beyond the code in this module (i.e., F<threads.pm> and F<threads.xs>), and into the Perl interpreter itself. Older versions of Perl contain bugs that may manifest themselves despite using the latest version of L<threads> from CPAN. There is no workaround for this other than upgrading to the latest version of Perl. Even with the latest version of Perl, it is known that certain constructs with threads may result in warning messages concerning leaked scalars or unreferenced scalars. However, such warnings are harmless, and may safely be ignored. You can search for L<threads> related bug reports at L<http://rt.cpan.org/Public/>. If needed submit any new bugs, problems, patches, etc. to: L<http://rt.cpan.org/Public/Dist/Display.html?Name=threads> =back =head1 REQUIREMENTS Perl 5.8.0 or later =head1 SEE ALSO threads on MetaCPAN: L<https://metacpan.org/release/threads> Code repository for CPAN distribution: L<https://github.com/Dual-Life/threads> L<threads::shared>, L<perlthrtut> L<http://www.perl.com/pub/a/2002/06/11/threads.html> and L<http://www.perl.com/pub/a/2002/09/04/threads.html> Perl threads mailing list: L<http://lists.perl.org/list/ithreads.html> Stack size discussion: L<http://www.perlmonks.org/?node_id=532956> Sample code in the I<examples> directory of this distribution on CPAN. =head1 AUTHOR Artur Bergman E<lt>sky AT crucially DOT netE<gt> CPAN version produced by Jerry D. Hedden <jdhedden AT cpan DOT org> =head1 LICENSE threads is released under the same license as Perl. =head1 ACKNOWLEDGEMENTS Richard Soderberg E<lt>perl AT crystalflame DOT netE<gt> - Helping me out tons, trying to find reasons for races and other weird bugs! Simon Cozens E<lt>simon AT brecon DOT co DOT ukE<gt> - Being there to answer zillions of annoying questions Rocco Caputo E<lt>troc AT netrus DOT netE<gt> Vipul Ved Prakash E<lt>mail AT vipul DOT netE<gt> - Helping with debugging Dean Arnold E<lt>darnold AT presicient DOT comE<gt> - Stack size API =cut DB_File.pm 0000644 00000177124 15037233314 0006343 0 ustar 00 # DB_File.pm -- Perl 5 interface to Berkeley DB # # Written by Paul Marquess (pmqs@cpan.org) # # Copyright (c) 1995-2018 Paul Marquess. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. package DB_File::HASHINFO ; require 5.008003; use warnings; use strict; use Carp; require Tie::Hash; @DB_File::HASHINFO::ISA = qw(Tie::Hash); sub new { my $pkg = shift ; my %x ; tie %x, $pkg ; bless \%x, $pkg ; } sub TIEHASH { my $pkg = shift ; bless { VALID => { bsize => 1, ffactor => 1, nelem => 1, cachesize => 1, hash => 2, lorder => 1, }, GOT => {} }, $pkg ; } sub FETCH { my $self = shift ; my $key = shift ; return $self->{GOT}{$key} if exists $self->{VALID}{$key} ; my $pkg = ref $self ; croak "${pkg}::FETCH - Unknown element '$key'" ; } sub STORE { my $self = shift ; my $key = shift ; my $value = shift ; my $type = $self->{VALID}{$key}; if ( $type ) { croak "Key '$key' not associated with a code reference" if $type == 2 && !ref $value && ref $value ne 'CODE'; $self->{GOT}{$key} = $value ; return ; } my $pkg = ref $self ; croak "${pkg}::STORE - Unknown element '$key'" ; } sub DELETE { my $self = shift ; my $key = shift ; if ( exists $self->{VALID}{$key} ) { delete $self->{GOT}{$key} ; return ; } my $pkg = ref $self ; croak "DB_File::HASHINFO::DELETE - Unknown element '$key'" ; } sub EXISTS { my $self = shift ; my $key = shift ; exists $self->{VALID}{$key} ; } sub NotHere { my $self = shift ; my $method = shift ; croak ref($self) . " does not define the method ${method}" ; } sub FIRSTKEY { my $self = shift ; $self->NotHere("FIRSTKEY") } sub NEXTKEY { my $self = shift ; $self->NotHere("NEXTKEY") } sub CLEAR { my $self = shift ; $self->NotHere("CLEAR") } package DB_File::RECNOINFO ; use warnings; use strict ; @DB_File::RECNOINFO::ISA = qw(DB_File::HASHINFO) ; sub TIEHASH { my $pkg = shift ; bless { VALID => { map {$_, 1} qw( bval cachesize psize flags lorder reclen bfname ) }, GOT => {}, }, $pkg ; } package DB_File::BTREEINFO ; use warnings; use strict ; @DB_File::BTREEINFO::ISA = qw(DB_File::HASHINFO) ; sub TIEHASH { my $pkg = shift ; bless { VALID => { flags => 1, cachesize => 1, maxkeypage => 1, minkeypage => 1, psize => 1, compare => 2, prefix => 2, lorder => 1, }, GOT => {}, }, $pkg ; } package DB_File ; use warnings; use strict; our ($VERSION, @ISA, @EXPORT, $AUTOLOAD, $DB_BTREE, $DB_HASH, $DB_RECNO); our ($db_version, $use_XSLoader, $splice_end_array_no_length, $splice_end_array, $Error); use Carp; # Module not thread safe, so don't clone sub CLONE_SKIP { 1 } $VERSION = "1.842" ; $VERSION = eval $VERSION; # needed for dev releases { local $SIG{__WARN__} = sub {$splice_end_array_no_length = join(" ",@_);}; my @a =(1); splice(@a, 3); $splice_end_array_no_length = ($splice_end_array_no_length =~ /^splice\(\) offset past end of array at /); } { local $SIG{__WARN__} = sub {$splice_end_array = join(" ", @_);}; my @a =(1); splice(@a, 3, 1); $splice_end_array = ($splice_end_array =~ /^splice\(\) offset past end of array at /); } #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE; $DB_BTREE = new DB_File::BTREEINFO ; $DB_HASH = new DB_File::HASHINFO ; $DB_RECNO = new DB_File::RECNOINFO ; require Tie::Hash; require Exporter; BEGIN { $use_XSLoader = 1 ; { local $SIG{__DIE__} ; eval { require XSLoader } ; } if ($@) { $use_XSLoader = 0 ; require DynaLoader; @ISA = qw(DynaLoader); } } push @ISA, qw(Tie::Hash Exporter); @EXPORT = qw( $DB_BTREE $DB_HASH $DB_RECNO BTREEMAGIC BTREEVERSION DB_LOCK DB_SHMEM DB_TXN HASHMAGIC HASHVERSION MAX_PAGE_NUMBER MAX_PAGE_OFFSET MAX_REC_NUMBER RET_ERROR RET_SPECIAL RET_SUCCESS R_CURSOR R_DUP R_FIRST R_FIXEDLEN R_IAFTER R_IBEFORE R_LAST R_NEXT R_NOKEY R_NOOVERWRITE R_PREV R_RECNOSYNC R_SETCURSOR R_SNAPSHOT __R_UNUSED ); sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; my ($error, $val) = constant($constname); Carp::croak $error if $error; no strict 'refs'; *{$AUTOLOAD} = sub { $val }; goto &{$AUTOLOAD}; } eval { # Make all Fcntl O_XXX constants available for importing require Fcntl; my @O = grep /^O_/, @Fcntl::EXPORT; Fcntl->import(@O); # first we import what we want to export push(@EXPORT, @O); }; if ($use_XSLoader) { XSLoader::load("DB_File", $VERSION)} else { bootstrap DB_File $VERSION } sub tie_hash_or_array { my (@arg) = @_ ; my $tieHASH = ( (caller(1))[3] =~ /TIEHASH/ ) ; use File::Spec; $arg[1] = File::Spec->rel2abs($arg[1]) if defined $arg[1] ; $arg[4] = tied %{ $arg[4] } if @arg >= 5 && ref $arg[4] && $arg[4] =~ /=HASH/ && tied %{ $arg[4] } ; $arg[2] = O_CREAT()|O_RDWR() if @arg >=3 && ! defined $arg[2]; $arg[3] = 0666 if @arg >=4 && ! defined $arg[3]; # make recno in Berkeley DB version 2 (or better) work like # recno in version 1. if ($db_version >= 4 and ! $tieHASH) { $arg[2] |= O_CREAT(); } if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and $arg[1] and ! -e $arg[1]) { open(FH, ">$arg[1]") or return undef ; close FH ; chmod $arg[3] ? $arg[3] : 0666 , $arg[1] ; } DoTie_($tieHASH, @arg) ; } sub TIEHASH { tie_hash_or_array(@_) ; } sub TIEARRAY { tie_hash_or_array(@_) ; } sub CLEAR { my $self = shift; my $key = 0 ; my $value = "" ; my $status = $self->seq($key, $value, R_FIRST()); my @keys; while ($status == 0) { push @keys, $key; $status = $self->seq($key, $value, R_NEXT()); } foreach $key (reverse @keys) { my $s = $self->del($key); } } sub EXTEND { } sub STORESIZE { my $self = shift; my $length = shift ; my $current_length = $self->length() ; if ($length < $current_length) { my $key ; for ($key = $current_length - 1 ; $key >= $length ; -- $key) { $self->del($key) } } elsif ($length > $current_length) { $self->put($length-1, "") ; } } sub SPLICE { my $self = shift; my $offset = shift; if (not defined $offset) { warnings::warnif('uninitialized', 'Use of uninitialized value in splice'); $offset = 0; } my $has_length = @_; my $length = @_ ? shift : 0; # Carping about definedness comes _after_ the OFFSET sanity check. # This is so we get the same error messages as Perl's splice(). # my @list = @_; my $size = $self->FETCHSIZE(); # 'If OFFSET is negative then it start that far from the end of # the array.' # if ($offset < 0) { my $new_offset = $size + $offset; if ($new_offset < 0) { die "Modification of non-creatable array value attempted, " . "subscript $offset"; } $offset = $new_offset; } if (not defined $length) { warnings::warnif('uninitialized', 'Use of uninitialized value in splice'); $length = 0; } if ($offset > $size) { $offset = $size; warnings::warnif('misc', 'splice() offset past end of array') if $has_length ? $splice_end_array : $splice_end_array_no_length; } # 'If LENGTH is omitted, removes everything from OFFSET onward.' if (not defined $length) { $length = $size - $offset; } # 'If LENGTH is negative, leave that many elements off the end of # the array.' # if ($length < 0) { $length = $size - $offset + $length; if ($length < 0) { # The user must have specified a length bigger than the # length of the array passed in. But perl's splice() # doesn't catch this, it just behaves as for length=0. # $length = 0; } } if ($length > $size - $offset) { $length = $size - $offset; } # $num_elems holds the current number of elements in the database. my $num_elems = $size; # 'Removes the elements designated by OFFSET and LENGTH from an # array,'... # my @removed = (); foreach (0 .. $length - 1) { my $old; my $status = $self->get($offset, $old); if ($status != 0) { my $msg = "error from Berkeley DB on get($offset, \$old)"; if ($status == 1) { $msg .= ' (no such element?)'; } else { $msg .= ": error status $status"; if (defined $! and $! ne '') { $msg .= ", message $!"; } } die $msg; } push @removed, $old; $status = $self->del($offset); if ($status != 0) { my $msg = "error from Berkeley DB on del($offset)"; if ($status == 1) { $msg .= ' (no such element?)'; } else { $msg .= ": error status $status"; if (defined $! and $! ne '') { $msg .= ", message $!"; } } die $msg; } -- $num_elems; } # ...'and replaces them with the elements of LIST, if any.' my $pos = $offset; while (defined (my $elem = shift @list)) { my $old_pos = $pos; my $status; if ($pos >= $num_elems) { $status = $self->put($pos, $elem); } else { $status = $self->put($pos, $elem, $self->R_IBEFORE); } if ($status != 0) { my $msg = "error from Berkeley DB on put($pos, $elem, ...)"; if ($status == 1) { $msg .= ' (no such element?)'; } else { $msg .= ", error status $status"; if (defined $! and $! ne '') { $msg .= ", message $!"; } } die $msg; } die "pos unexpectedly changed from $old_pos to $pos with R_IBEFORE" if $old_pos != $pos; ++ $pos; ++ $num_elems; } if (wantarray) { # 'In list context, returns the elements removed from the # array.' # return @removed; } elsif (defined wantarray and not wantarray) { # 'In scalar context, returns the last element removed, or # undef if no elements are removed.' # if (@removed) { my $last = pop @removed; return "$last"; } else { return undef; } } elsif (not defined wantarray) { # Void context } else { die } } sub ::DB_File::splice { &SPLICE } sub find_dup { croak "Usage: \$db->find_dup(key,value)\n" unless @_ == 3 ; my $db = shift ; my ($origkey, $value_wanted) = @_ ; my ($key, $value) = ($origkey, 0); my ($status) = 0 ; for ($status = $db->seq($key, $value, R_CURSOR() ) ; $status == 0 ; $status = $db->seq($key, $value, R_NEXT() ) ) { return 0 if $key eq $origkey and $value eq $value_wanted ; } return $status ; } sub del_dup { croak "Usage: \$db->del_dup(key,value)\n" unless @_ == 3 ; my $db = shift ; my ($key, $value) = @_ ; my ($status) = $db->find_dup($key, $value) ; return $status if $status != 0 ; $status = $db->del($key, R_CURSOR() ) ; return $status ; } sub get_dup { croak "Usage: \$db->get_dup(key [,flag])\n" unless @_ == 2 or @_ == 3 ; my $db = shift ; my $key = shift ; my $flag = shift ; my $value = 0 ; my $origkey = $key ; my $wantarray = wantarray ; my %values = () ; my @values = () ; my $counter = 0 ; my $status = 0 ; # iterate through the database until either EOF ($status == 0) # or a different key is encountered ($key ne $origkey). for ($status = $db->seq($key, $value, R_CURSOR()) ; $status == 0 and $key eq $origkey ; $status = $db->seq($key, $value, R_NEXT()) ) { # save the value or count number of matches if ($wantarray) { if ($flag) { ++ $values{$value} } else { push (@values, $value) } } else { ++ $counter } } return ($wantarray ? ($flag ? %values : @values) : $counter) ; } sub STORABLE_freeze { my $type = ref shift; croak "Cannot freeze $type object\n"; } sub STORABLE_thaw { my $type = ref shift; croak "Cannot thaw $type object\n"; } 1; __END__ =head1 NAME DB_File - Perl5 access to Berkeley DB version 1.x =head1 SYNOPSIS use DB_File; [$X =] tie %hash, 'DB_File', [$filename, $flags, $mode, $DB_HASH] ; [$X =] tie %hash, 'DB_File', $filename, $flags, $mode, $DB_BTREE ; [$X =] tie @array, 'DB_File', $filename, $flags, $mode, $DB_RECNO ; $status = $X->del($key [, $flags]) ; $status = $X->put($key, $value [, $flags]) ; $status = $X->get($key, $value [, $flags]) ; $status = $X->seq($key, $value, $flags) ; $status = $X->sync([$flags]) ; $status = $X->fd ; # BTREE only $count = $X->get_dup($key) ; @list = $X->get_dup($key) ; %list = $X->get_dup($key, 1) ; $status = $X->find_dup($key, $value) ; $status = $X->del_dup($key, $value) ; # RECNO only $a = $X->length; $a = $X->pop ; $X->push(list); $a = $X->shift; $X->unshift(list); @r = $X->splice(offset, length, elements); # DBM Filters $old_filter = $db->filter_store_key ( sub { ... } ) ; $old_filter = $db->filter_store_value( sub { ... } ) ; $old_filter = $db->filter_fetch_key ( sub { ... } ) ; $old_filter = $db->filter_fetch_value( sub { ... } ) ; untie %hash ; untie @array ; =head1 DESCRIPTION B<DB_File> is a module which allows Perl programs to make use of the facilities provided by Berkeley DB version 1.x (if you have a newer version of DB, see L<Using DB_File with Berkeley DB version 2 or greater>). It is assumed that you have a copy of the Berkeley DB manual pages at hand when reading this documentation. The interface defined here mirrors the Berkeley DB interface closely. Berkeley DB is a C library which provides a consistent interface to a number of database formats. B<DB_File> provides an interface to all three of the database types currently supported by Berkeley DB. The file types are: =over 5 =item B<DB_HASH> This database type allows arbitrary key/value pairs to be stored in data files. This is equivalent to the functionality provided by other hashing packages like DBM, NDBM, ODBM, GDBM, and SDBM. Remember though, the files created using DB_HASH are not compatible with any of the other packages mentioned. A default hashing algorithm, which will be adequate for most applications, is built into Berkeley DB. If you do need to use your own hashing algorithm it is possible to write your own in Perl and have B<DB_File> use it instead. =item B<DB_BTREE> The btree format allows arbitrary key/value pairs to be stored in a sorted, balanced binary tree. As with the DB_HASH format, it is possible to provide a user defined Perl routine to perform the comparison of keys. By default, though, the keys are stored in lexical order. =item B<DB_RECNO> DB_RECNO allows both fixed-length and variable-length flat text files to be manipulated using the same key/value pair interface as in DB_HASH and DB_BTREE. In this case the key will consist of a record (line) number. =back =head2 Using DB_File with Berkeley DB version 2 or greater Although B<DB_File> is intended to be used with Berkeley DB version 1, it can also be used with version 2, 3 or 4. In this case the interface is limited to the functionality provided by Berkeley DB 1.x. Anywhere the version 2 or greater interface differs, B<DB_File> arranges for it to work like version 1. This feature allows B<DB_File> scripts that were built with version 1 to be migrated to version 2 or greater without any changes. If you want to make use of the new features available in Berkeley DB 2.x or greater, use the Perl module B<BerkeleyDB> instead. B<Note:> The database file format has changed multiple times in Berkeley DB version 2, 3 and 4. If you cannot recreate your databases, you must dump any existing databases with either the C<db_dump> or the C<db_dump185> utility that comes with Berkeley DB. Once you have rebuilt DB_File to use Berkeley DB version 2 or greater, your databases can be recreated using C<db_load>. Refer to the Berkeley DB documentation for further details. Please read L<"COPYRIGHT"> before using version 2.x or greater of Berkeley DB with DB_File. =head2 Interface to Berkeley DB B<DB_File> allows access to Berkeley DB files using the tie() mechanism in Perl 5 (for full details, see L<perlfunc/tie()>). This facility allows B<DB_File> to access Berkeley DB files using either an associative array (for DB_HASH & DB_BTREE file types) or an ordinary array (for the DB_RECNO file type). In addition to the tie() interface, it is also possible to access most of the functions provided in the Berkeley DB API directly. See L<THE API INTERFACE>. =head2 Opening a Berkeley DB Database File Berkeley DB uses the function dbopen() to open or create a database. Here is the C prototype for dbopen(): DB* dbopen (const char * file, int flags, int mode, DBTYPE type, const void * openinfo) The parameter C<type> is an enumeration which specifies which of the 3 interface methods (DB_HASH, DB_BTREE or DB_RECNO) is to be used. Depending on which of these is actually chosen, the final parameter, I<openinfo> points to a data structure which allows tailoring of the specific interface method. This interface is handled slightly differently in B<DB_File>. Here is an equivalent call using B<DB_File>: tie %array, 'DB_File', $filename, $flags, $mode, $DB_HASH ; The C<filename>, C<flags> and C<mode> parameters are the direct equivalent of their dbopen() counterparts. The final parameter $DB_HASH performs the function of both the C<type> and C<openinfo> parameters in dbopen(). In the example above $DB_HASH is actually a pre-defined reference to a hash object. B<DB_File> has three of these pre-defined references. Apart from $DB_HASH, there is also $DB_BTREE and $DB_RECNO. The keys allowed in each of these pre-defined references is limited to the names used in the equivalent C structure. So, for example, the $DB_HASH reference will only allow keys called C<bsize>, C<cachesize>, C<ffactor>, C<hash>, C<lorder> and C<nelem>. To change one of these elements, just assign to it like this: $DB_HASH->{'cachesize'} = 10000 ; The three predefined variables $DB_HASH, $DB_BTREE and $DB_RECNO are usually adequate for most applications. If you do need to create extra instances of these objects, constructors are available for each file type. Here are examples of the constructors and the valid options available for DB_HASH, DB_BTREE and DB_RECNO respectively. $a = new DB_File::HASHINFO ; $a->{'bsize'} ; $a->{'cachesize'} ; $a->{'ffactor'}; $a->{'hash'} ; $a->{'lorder'} ; $a->{'nelem'} ; $b = new DB_File::BTREEINFO ; $b->{'flags'} ; $b->{'cachesize'} ; $b->{'maxkeypage'} ; $b->{'minkeypage'} ; $b->{'psize'} ; $b->{'compare'} ; $b->{'prefix'} ; $b->{'lorder'} ; $c = new DB_File::RECNOINFO ; $c->{'bval'} ; $c->{'cachesize'} ; $c->{'psize'} ; $c->{'flags'} ; $c->{'lorder'} ; $c->{'reclen'} ; $c->{'bfname'} ; The values stored in the hashes above are mostly the direct equivalent of their C counterpart. Like their C counterparts, all are set to a default values - that means you don't have to set I<all> of the values when you only want to change one. Here is an example: $a = new DB_File::HASHINFO ; $a->{'cachesize'} = 12345 ; tie %y, 'DB_File', "filename", $flags, 0777, $a ; A few of the options need extra discussion here. When used, the C equivalent of the keys C<hash>, C<compare> and C<prefix> store pointers to C functions. In B<DB_File> these keys are used to store references to Perl subs. Below are templates for each of the subs: sub hash { my ($data) = @_ ; ... # return the hash value for $data return $hash ; } sub compare { my ($key, $key2) = @_ ; ... # return 0 if $key1 eq $key2 # -1 if $key1 lt $key2 # 1 if $key1 gt $key2 return (-1 , 0 or 1) ; } sub prefix { my ($key, $key2) = @_ ; ... # return number of bytes of $key2 which are # necessary to determine that it is greater than $key1 return $bytes ; } See L<Changing the BTREE sort order> for an example of using the C<compare> template. If you are using the DB_RECNO interface and you intend making use of C<bval>, you should check out L<The 'bval' Option>. =head2 Default Parameters It is possible to omit some or all of the final 4 parameters in the call to C<tie> and let them take default values. As DB_HASH is the most common file format used, the call: tie %A, "DB_File", "filename" ; is equivalent to: tie %A, "DB_File", "filename", O_CREAT|O_RDWR, 0666, $DB_HASH ; It is also possible to omit the filename parameter as well, so the call: tie %A, "DB_File" ; is equivalent to: tie %A, "DB_File", undef, O_CREAT|O_RDWR, 0666, $DB_HASH ; See L<In Memory Databases> for a discussion on the use of C<undef> in place of a filename. =head2 In Memory Databases Berkeley DB allows the creation of in-memory databases by using NULL (that is, a C<(char *)0> in C) in place of the filename. B<DB_File> uses C<undef> instead of NULL to provide this functionality. =head1 DB_HASH The DB_HASH file format is probably the most commonly used of the three file formats that B<DB_File> supports. It is also very straightforward to use. =head2 A Simple Example This example shows how to create a database, add key/value pairs to the database, delete keys/value pairs and finally how to enumerate the contents of the database. use warnings ; use strict ; use DB_File ; our (%h, $k, $v) ; unlink "fruit" ; tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0666, $DB_HASH or die "Cannot open file 'fruit': $!\n"; # Add a few key/value pairs to the file $h{"apple"} = "red" ; $h{"orange"} = "orange" ; $h{"banana"} = "yellow" ; $h{"tomato"} = "red" ; # Check for existence of a key print "Banana Exists\n\n" if $h{"banana"} ; # Delete a key/value pair. delete $h{"apple"} ; # print the contents of the file while (($k, $v) = each %h) { print "$k -> $v\n" } untie %h ; here is the output: Banana Exists orange -> orange tomato -> red banana -> yellow Note that the like ordinary associative arrays, the order of the keys retrieved is in an apparently random order. =head1 DB_BTREE The DB_BTREE format is useful when you want to store data in a given order. By default the keys will be stored in lexical order, but as you will see from the example shown in the next section, it is very easy to define your own sorting function. =head2 Changing the BTREE sort order This script shows how to override the default sorting algorithm that BTREE uses. Instead of using the normal lexical ordering, a case insensitive compare function will be used. use warnings ; use strict ; use DB_File ; my %h ; sub Compare { my ($key1, $key2) = @_ ; "\L$key1" cmp "\L$key2" ; } # specify the Perl sub that will do the comparison $DB_BTREE->{'compare'} = \&Compare ; unlink "tree" ; tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open file 'tree': $!\n" ; # Add a key/value pair to the file $h{'Wall'} = 'Larry' ; $h{'Smith'} = 'John' ; $h{'mouse'} = 'mickey' ; $h{'duck'} = 'donald' ; # Delete delete $h{"duck"} ; # Cycle through the keys printing them in order. # Note it is not necessary to sort the keys as # the btree will have kept them in order automatically. foreach (keys %h) { print "$_\n" } untie %h ; Here is the output from the code above. mouse Smith Wall There are a few point to bear in mind if you want to change the ordering in a BTREE database: =over 5 =item 1. The new compare function must be specified when you create the database. =item 2. You cannot change the ordering once the database has been created. Thus you must use the same compare function every time you access the database. =item 3 Duplicate keys are entirely defined by the comparison function. In the case-insensitive example above, the keys: 'KEY' and 'key' would be considered duplicates, and assigning to the second one would overwrite the first. If duplicates are allowed for (with the R_DUP flag discussed below), only a single copy of duplicate keys is stored in the database --- so (again with example above) assigning three values to the keys: 'KEY', 'Key', and 'key' would leave just the first key: 'KEY' in the database with three values. For some situations this results in information loss, so care should be taken to provide fully qualified comparison functions when necessary. For example, the above comparison routine could be modified to additionally compare case-sensitively if two keys are equal in the case insensitive comparison: sub compare { my($key1, $key2) = @_; lc $key1 cmp lc $key2 || $key1 cmp $key2; } And now you will only have duplicates when the keys themselves are truly the same. (note: in versions of the db library prior to about November 1996, such duplicate keys were retained so it was possible to recover the original keys in sets of keys that compared as equal). =back =head2 Handling Duplicate Keys The BTREE file type optionally allows a single key to be associated with an arbitrary number of values. This option is enabled by setting the flags element of C<$DB_BTREE> to R_DUP when creating the database. There are some difficulties in using the tied hash interface if you want to manipulate a BTREE database with duplicate keys. Consider this code: use warnings ; use strict ; use DB_File ; my ($filename, %h) ; $filename = "tree" ; unlink $filename ; # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file $h{'Wall'} = 'Larry' ; $h{'Wall'} = 'Brick' ; # Note the duplicate key $h{'Wall'} = 'Brick' ; # Note the duplicate key and value $h{'Smith'} = 'John' ; $h{'mouse'} = 'mickey' ; # iterate through the associative array # and print each key/value pair. foreach (sort keys %h) { print "$_ -> $h{$_}\n" } untie %h ; Here is the output: Smith -> John Wall -> Larry Wall -> Larry Wall -> Larry mouse -> mickey As you can see 3 records have been successfully created with key C<Wall> - the only thing is, when they are retrieved from the database they I<seem> to have the same value, namely C<Larry>. The problem is caused by the way that the associative array interface works. Basically, when the associative array interface is used to fetch the value associated with a given key, it will only ever retrieve the first value. Although it may not be immediately obvious from the code above, the associative array interface can be used to write values with duplicate keys, but it cannot be used to read them back from the database. The way to get around this problem is to use the Berkeley DB API method called C<seq>. This method allows sequential access to key/value pairs. See L<THE API INTERFACE> for details of both the C<seq> method and the API in general. Here is the script above rewritten using the C<seq> API method. use warnings ; use strict ; use DB_File ; my ($filename, $x, %h, $status, $key, $value) ; $filename = "tree" ; unlink $filename ; # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file $h{'Wall'} = 'Larry' ; $h{'Wall'} = 'Brick' ; # Note the duplicate key $h{'Wall'} = 'Brick' ; # Note the duplicate key and value $h{'Smith'} = 'John' ; $h{'mouse'} = 'mickey' ; # iterate through the btree using seq # and print each key/value pair. $key = $value = 0 ; for ($status = $x->seq($key, $value, R_FIRST) ; $status == 0 ; $status = $x->seq($key, $value, R_NEXT) ) { print "$key -> $value\n" } undef $x ; untie %h ; that prints: Smith -> John Wall -> Brick Wall -> Brick Wall -> Larry mouse -> mickey This time we have got all the key/value pairs, including the multiple values associated with the key C<Wall>. To make life easier when dealing with duplicate keys, B<DB_File> comes with a few utility methods. =head2 The get_dup() Method The C<get_dup> method assists in reading duplicate values from BTREE databases. The method can take the following forms: $count = $x->get_dup($key) ; @list = $x->get_dup($key) ; %list = $x->get_dup($key, 1) ; In a scalar context the method returns the number of values associated with the key, C<$key>. In list context, it returns all the values which match C<$key>. Note that the values will be returned in an apparently random order. In list context, if the second parameter is present and evaluates TRUE, the method returns an associative array. The keys of the associative array correspond to the values that matched in the BTREE and the values of the array are a count of the number of times that particular value occurred in the BTREE. So assuming the database created above, we can use C<get_dup> like this: use warnings ; use strict ; use DB_File ; my ($filename, $x, %h) ; $filename = "tree" ; # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; my $cnt = $x->get_dup("Wall") ; print "Wall occurred $cnt times\n" ; my %hash = $x->get_dup("Wall", 1) ; print "Larry is there\n" if $hash{'Larry'} ; print "There are $hash{'Brick'} Brick Walls\n" ; my @list = sort $x->get_dup("Wall") ; print "Wall => [@list]\n" ; @list = $x->get_dup("Smith") ; print "Smith => [@list]\n" ; @list = $x->get_dup("Dog") ; print "Dog => [@list]\n" ; and it will print: Wall occurred 3 times Larry is there There are 2 Brick Walls Wall => [Brick Brick Larry] Smith => [John] Dog => [] =head2 The find_dup() Method $status = $X->find_dup($key, $value) ; This method checks for the existence of a specific key/value pair. If the pair exists, the cursor is left pointing to the pair and the method returns 0. Otherwise the method returns a non-zero value. Assuming the database from the previous example: use warnings ; use strict ; use DB_File ; my ($filename, $x, %h, $found) ; $filename = "tree" ; # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; print "Larry Wall is $found there\n" ; $found = ( $x->find_dup("Wall", "Harry") == 0 ? "" : "not") ; print "Harry Wall is $found there\n" ; undef $x ; untie %h ; prints this Larry Wall is there Harry Wall is not there =head2 The del_dup() Method $status = $X->del_dup($key, $value) ; This method deletes a specific key/value pair. It returns 0 if they exist and have been deleted successfully. Otherwise the method returns a non-zero value. Again assuming the existence of the C<tree> database use warnings ; use strict ; use DB_File ; my ($filename, $x, %h, $found) ; $filename = "tree" ; # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; $x->del_dup("Wall", "Larry") ; $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; print "Larry Wall is $found there\n" ; undef $x ; untie %h ; prints this Larry Wall is not there =head2 Matching Partial Keys The BTREE interface has a feature which allows partial keys to be matched. This functionality is I<only> available when the C<seq> method is used along with the R_CURSOR flag. $x->seq($key, $value, R_CURSOR) ; Here is the relevant quote from the dbopen man page where it defines the use of the R_CURSOR flag with seq: Note, for the DB_BTREE access method, the returned key is not necessarily an exact match for the specified key. The returned key is the smallest key greater than or equal to the specified key, permitting partial key matches and range searches. In the example script below, the C<match> sub uses this feature to find and print the first matching key/value pair given a partial key. use warnings ; use strict ; use DB_File ; use Fcntl ; my ($filename, $x, %h, $st, $key, $value) ; sub match { my $key = shift ; my $value = 0; my $orig_key = $key ; $x->seq($key, $value, R_CURSOR) ; print "$orig_key\t-> $key\t-> $value\n" ; } $filename = "tree" ; unlink $filename ; $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file $h{'mouse'} = 'mickey' ; $h{'Wall'} = 'Larry' ; $h{'Walls'} = 'Brick' ; $h{'Smith'} = 'John' ; $key = $value = 0 ; print "IN ORDER\n" ; for ($st = $x->seq($key, $value, R_FIRST) ; $st == 0 ; $st = $x->seq($key, $value, R_NEXT) ) { print "$key -> $value\n" } print "\nPARTIAL MATCH\n" ; match "Wa" ; match "A" ; match "a" ; undef $x ; untie %h ; Here is the output: IN ORDER Smith -> John Wall -> Larry Walls -> Brick mouse -> mickey PARTIAL MATCH Wa -> Wall -> Larry A -> Smith -> John a -> mouse -> mickey =head1 DB_RECNO DB_RECNO provides an interface to flat text files. Both variable and fixed length records are supported. In order to make RECNO more compatible with Perl, the array offset for all RECNO arrays begins at 0 rather than 1 as in Berkeley DB. As with normal Perl arrays, a RECNO array can be accessed using negative indexes. The index -1 refers to the last element of the array, -2 the second last, and so on. Attempting to access an element before the start of the array will raise a fatal run-time error. =head2 The 'bval' Option The operation of the bval option warrants some discussion. Here is the definition of bval from the Berkeley DB 1.85 recno manual page: The delimiting byte to be used to mark the end of a record for variable-length records, and the pad charac- ter for fixed-length records. If no value is speci- fied, newlines (``\n'') are used to mark the end of variable-length records and fixed-length records are padded with spaces. The second sentence is wrong. In actual fact bval will only default to C<"\n"> when the openinfo parameter in dbopen is NULL. If a non-NULL openinfo parameter is used at all, the value that happens to be in bval will be used. That means you always have to specify bval when making use of any of the options in the openinfo parameter. This documentation error will be fixed in the next release of Berkeley DB. That clarifies the situation with regards Berkeley DB itself. What about B<DB_File>? Well, the behavior defined in the quote above is quite useful, so B<DB_File> conforms to it. That means that you can specify other options (e.g. cachesize) and still have bval default to C<"\n"> for variable length records, and space for fixed length records. Also note that the bval option only allows you to specify a single byte as a delimiter. =head2 A Simple Example Here is a simple example that uses RECNO (if you are using a version of Perl earlier than 5.004_57 this example won't work -- see L<Extra RECNO Methods> for a workaround). use warnings ; use strict ; use DB_File ; my $filename = "text" ; unlink $filename ; my @h ; tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_RECNO or die "Cannot open file 'text': $!\n" ; # Add a few key/value pairs to the file $h[0] = "orange" ; $h[1] = "blue" ; $h[2] = "yellow" ; push @h, "green", "black" ; my $elements = scalar @h ; print "The array contains $elements entries\n" ; my $last = pop @h ; print "popped $last\n" ; unshift @h, "white" ; my $first = shift @h ; print "shifted $first\n" ; # Check for existence of a key print "Element 1 Exists with value $h[1]\n" if $h[1] ; # use a negative index print "The last element is $h[-1]\n" ; print "The 2nd last element is $h[-2]\n" ; untie @h ; Here is the output from the script: The array contains 5 entries popped black shifted white Element 1 Exists with value blue The last element is green The 2nd last element is yellow =head2 Extra RECNO Methods If you are using a version of Perl earlier than 5.004_57, the tied array interface is quite limited. In the example script above C<push>, C<pop>, C<shift>, C<unshift> or determining the array length will not work with a tied array. To make the interface more useful for older versions of Perl, a number of methods are supplied with B<DB_File> to simulate the missing array operations. All these methods are accessed via the object returned from the tie call. Here are the methods: =over 5 =item B<$X-E<gt>push(list) ;> Pushes the elements of C<list> to the end of the array. =item B<$value = $X-E<gt>pop ;> Removes and returns the last element of the array. =item B<$X-E<gt>shift> Removes and returns the first element of the array. =item B<$X-E<gt>unshift(list) ;> Pushes the elements of C<list> to the start of the array. =item B<$X-E<gt>length> Returns the number of elements in the array. =item B<$X-E<gt>splice(offset, length, elements);> Returns a splice of the array. =back =head2 Another Example Here is a more complete example that makes use of some of the methods described above. It also makes use of the API interface directly (see L<THE API INTERFACE>). use warnings ; use strict ; my (@h, $H, $file, $i) ; use DB_File ; use Fcntl ; $file = "text" ; unlink $file ; $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0666, $DB_RECNO or die "Cannot open file $file: $!\n" ; # first create a text file to play with $h[0] = "zero" ; $h[1] = "one" ; $h[2] = "two" ; $h[3] = "three" ; $h[4] = "four" ; # Print the records in order. # # The length method is needed here because evaluating a tied # array in a scalar context does not return the number of # elements in the array. print "\nORIGINAL\n" ; foreach $i (0 .. $H->length - 1) { print "$i: $h[$i]\n" ; } # use the push & pop methods $a = $H->pop ; $H->push("last") ; print "\nThe last record was [$a]\n" ; # and the shift & unshift methods $a = $H->shift ; $H->unshift("first") ; print "The first record was [$a]\n" ; # Use the API to add a new record after record 2. $i = 2 ; $H->put($i, "Newbie", R_IAFTER) ; # and a new record before record 1. $i = 1 ; $H->put($i, "New One", R_IBEFORE) ; # delete record 3 $H->del(3) ; # now print the records in reverse order print "\nREVERSE\n" ; for ($i = $H->length - 1 ; $i >= 0 ; -- $i) { print "$i: $h[$i]\n" } # same again, but use the API functions instead print "\nREVERSE again\n" ; my ($s, $k, $v) = (0, 0, 0) ; for ($s = $H->seq($k, $v, R_LAST) ; $s == 0 ; $s = $H->seq($k, $v, R_PREV)) { print "$k: $v\n" } undef $H ; untie @h ; and this is what it outputs: ORIGINAL 0: zero 1: one 2: two 3: three 4: four The last record was [four] The first record was [zero] REVERSE 5: last 4: three 3: Newbie 2: one 1: New One 0: first REVERSE again 5: last 4: three 3: Newbie 2: one 1: New One 0: first Notes: =over 5 =item 1. Rather than iterating through the array, C<@h> like this: foreach $i (@h) it is necessary to use either this: foreach $i (0 .. $H->length - 1) or this: for ($a = $H->get($k, $v, R_FIRST) ; $a == 0 ; $a = $H->get($k, $v, R_NEXT) ) =item 2. Notice that both times the C<put> method was used the record index was specified using a variable, C<$i>, rather than the literal value itself. This is because C<put> will return the record number of the inserted line via that parameter. =back =head1 THE API INTERFACE As well as accessing Berkeley DB using a tied hash or array, it is also possible to make direct use of most of the API functions defined in the Berkeley DB documentation. To do this you need to store a copy of the object returned from the tie. $db = tie %hash, "DB_File", "filename" ; Once you have done that, you can access the Berkeley DB API functions as B<DB_File> methods directly like this: $db->put($key, $value, R_NOOVERWRITE) ; B<Important:> If you have saved a copy of the object returned from C<tie>, the underlying database file will I<not> be closed until both the tied variable is untied and all copies of the saved object are destroyed. use DB_File ; $db = tie %hash, "DB_File", "filename" or die "Cannot tie filename: $!" ; ... undef $db ; untie %hash ; See L<The untie() Gotcha> for more details. All the functions defined in L<dbopen> are available except for close() and dbopen() itself. The B<DB_File> method interface to the supported functions have been implemented to mirror the way Berkeley DB works whenever possible. In particular note that: =over 5 =item * The methods return a status value. All return 0 on success. All return -1 to signify an error and set C<$!> to the exact error code. The return code 1 generally (but not always) means that the key specified did not exist in the database. Other return codes are defined. See below and in the Berkeley DB documentation for details. The Berkeley DB documentation should be used as the definitive source. =item * Whenever a Berkeley DB function returns data via one of its parameters, the equivalent B<DB_File> method does exactly the same. =item * If you are careful, it is possible to mix API calls with the tied hash/array interface in the same piece of code. Although only a few of the methods used to implement the tied interface currently make use of the cursor, you should always assume that the cursor has been changed any time the tied hash/array interface is used. As an example, this code will probably not do what you expect: $X = tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0777, $DB_BTREE or die "Cannot tie $filename: $!" ; # Get the first key/value pair and set the cursor $X->seq($key, $value, R_FIRST) ; # this line will modify the cursor $count = scalar keys %x ; # Get the second key/value pair. # oops, it didn't, it got the last key/value pair! $X->seq($key, $value, R_NEXT) ; The code above can be rearranged to get around the problem, like this: $X = tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0777, $DB_BTREE or die "Cannot tie $filename: $!" ; # this line will modify the cursor $count = scalar keys %x ; # Get the first key/value pair and set the cursor $X->seq($key, $value, R_FIRST) ; # Get the second key/value pair. # worked this time. $X->seq($key, $value, R_NEXT) ; =back All the constants defined in L<dbopen> for use in the flags parameters in the methods defined below are also available. Refer to the Berkeley DB documentation for the precise meaning of the flags values. Below is a list of the methods available. =over 5 =item B<$status = $X-E<gt>get($key, $value [, $flags]) ;> Given a key (C<$key>) this method reads the value associated with it from the database. The value read from the database is returned in the C<$value> parameter. If the key does not exist the method returns 1. No flags are currently defined for this method. =item B<$status = $X-E<gt>put($key, $value [, $flags]) ;> Stores the key/value pair in the database. If you use either the R_IAFTER or R_IBEFORE flags, the C<$key> parameter will have the record number of the inserted key/value pair set. Valid flags are R_CURSOR, R_IAFTER, R_IBEFORE, R_NOOVERWRITE and R_SETCURSOR. =item B<$status = $X-E<gt>del($key [, $flags]) ;> Removes all key/value pairs with key C<$key> from the database. A return code of 1 means that the requested key was not in the database. R_CURSOR is the only valid flag at present. =item B<$status = $X-E<gt>fd ;> Returns the file descriptor for the underlying database. See L<Locking: The Trouble with fd> for an explanation for why you should not use C<fd> to lock your database. =item B<$status = $X-E<gt>seq($key, $value, $flags) ;> This interface allows sequential retrieval from the database. See L<dbopen> for full details. Both the C<$key> and C<$value> parameters will be set to the key/value pair read from the database. The flags parameter is mandatory. The valid flag values are R_CURSOR, R_FIRST, R_LAST, R_NEXT and R_PREV. =item B<$status = $X-E<gt>sync([$flags]) ;> Flushes any cached buffers to disk. R_RECNOSYNC is the only valid flag at present. =back =head1 DBM FILTERS A DBM Filter is a piece of code that is be used when you I<always> want to make the same transformation to all keys and/or values in a DBM database. An example is when you need to encode your data in UTF-8 before writing to the database and then decode the UTF-8 when reading from the database file. There are two ways to use a DBM Filter. =over 5 =item 1. Using the low-level API defined below. =item 2. Using the L<DBM_Filter> module. This module hides the complexity of the API defined below and comes with a number of "canned" filters that cover some of the common use-cases. =back Use of the L<DBM_Filter> module is recommended. =head2 DBM Filter Low-level API There are four methods associated with DBM Filters. All work identically, and each is used to install (or uninstall) a single DBM Filter. Each expects a single parameter, namely a reference to a sub. The only difference between them is the place that the filter is installed. To summarise: =over 5 =item B<filter_store_key> If a filter has been installed with this method, it will be invoked every time you write a key to a DBM database. =item B<filter_store_value> If a filter has been installed with this method, it will be invoked every time you write a value to a DBM database. =item B<filter_fetch_key> If a filter has been installed with this method, it will be invoked every time you read a key from a DBM database. =item B<filter_fetch_value> If a filter has been installed with this method, it will be invoked every time you read a value from a DBM database. =back You can use any combination of the methods, from none, to all four. All filter methods return the existing filter, if present, or C<undef> in not. To delete a filter pass C<undef> to it. =head2 The Filter When each filter is called by Perl, a local copy of C<$_> will contain the key or value to be filtered. Filtering is achieved by modifying the contents of C<$_>. The return code from the filter is ignored. =head2 An Example -- the NULL termination problem. Consider the following scenario. You have a DBM database that you need to share with a third-party C application. The C application assumes that I<all> keys and values are NULL terminated. Unfortunately when Perl writes to DBM databases it doesn't use NULL termination, so your Perl application will have to manage NULL termination itself. When you write to the database you will have to use something like this: $hash{"$key\0"} = "$value\0" ; Similarly the NULL needs to be taken into account when you are considering the length of existing keys/values. It would be much better if you could ignore the NULL terminations issue in the main application code and have a mechanism that automatically added the terminating NULL to all keys and values whenever you write to the database and have them removed when you read from the database. As I'm sure you have already guessed, this is a problem that DBM Filters can fix very easily. use warnings ; use strict ; use DB_File ; my %hash ; my $filename = "filt" ; unlink $filename ; my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH or die "Cannot open $filename: $!\n" ; # Install DBM Filters $db->filter_fetch_key ( sub { s/\0$// } ) ; $db->filter_store_key ( sub { $_ .= "\0" } ) ; $db->filter_fetch_value( sub { s/\0$// } ) ; $db->filter_store_value( sub { $_ .= "\0" } ) ; $hash{"abc"} = "def" ; my $a = $hash{"ABC"} ; # ... undef $db ; untie %hash ; Hopefully the contents of each of the filters should be self-explanatory. Both "fetch" filters remove the terminating NULL, and both "store" filters add a terminating NULL. =head2 Another Example -- Key is a C int. Here is another real-life example. By default, whenever Perl writes to a DBM database it always writes the key and value as strings. So when you use this: $hash{12345} = "something" ; the key 12345 will get stored in the DBM database as the 5 byte string "12345". If you actually want the key to be stored in the DBM database as a C int, you will have to use C<pack> when writing, and C<unpack> when reading. Here is a DBM Filter that does it: use warnings ; use strict ; use DB_File ; my %hash ; my $filename = "filt" ; unlink $filename ; my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH or die "Cannot open $filename: $!\n" ; $db->filter_fetch_key ( sub { $_ = unpack("i", $_) } ) ; $db->filter_store_key ( sub { $_ = pack ("i", $_) } ) ; $hash{123} = "def" ; # ... undef $db ; untie %hash ; This time only two filters have been used -- we only need to manipulate the contents of the key, so it wasn't necessary to install any value filters. =head1 HINTS AND TIPS =head2 Locking: The Trouble with fd Until version 1.72 of this module, the recommended technique for locking B<DB_File> databases was to flock the filehandle returned from the "fd" function. Unfortunately this technique has been shown to be fundamentally flawed (Kudos to David Harris for tracking this down). Use it at your own peril! The locking technique went like this. $db = tie(%db, 'DB_File', 'foo.db', O_CREAT|O_RDWR, 0644) || die "dbcreat foo.db $!"; $fd = $db->fd; open(DB_FH, "+<&=$fd") || die "dup $!"; flock (DB_FH, LOCK_EX) || die "flock: $!"; ... $db{"Tom"} = "Jerry" ; ... flock(DB_FH, LOCK_UN); undef $db; untie %db; close(DB_FH); In simple terms, this is what happens: =over 5 =item 1. Use "tie" to open the database. =item 2. Lock the database with fd & flock. =item 3. Read & Write to the database. =item 4. Unlock and close the database. =back Here is the crux of the problem. A side-effect of opening the B<DB_File> database in step 2 is that an initial block from the database will get read from disk and cached in memory. To see why this is a problem, consider what can happen when two processes, say "A" and "B", both want to update the same B<DB_File> database using the locking steps outlined above. Assume process "A" has already opened the database and has a write lock, but it hasn't actually updated the database yet (it has finished step 2, but not started step 3 yet). Now process "B" tries to open the same database - step 1 will succeed, but it will block on step 2 until process "A" releases the lock. The important thing to notice here is that at this point in time both processes will have cached identical initial blocks from the database. Now process "A" updates the database and happens to change some of the data held in the initial buffer. Process "A" terminates, flushing all cached data to disk and releasing the database lock. At this point the database on disk will correctly reflect the changes made by process "A". With the lock released, process "B" can now continue. It also updates the database and unfortunately it too modifies the data that was in its initial buffer. Once that data gets flushed to disk it will overwrite some/all of the changes process "A" made to the database. The result of this scenario is at best a database that doesn't contain what you expect. At worst the database will corrupt. The above won't happen every time competing process update the same B<DB_File> database, but it does illustrate why the technique should not be used. =head2 Safe ways to lock a database Starting with version 2.x, Berkeley DB has internal support for locking. The companion module to this one, B<BerkeleyDB>, provides an interface to this locking functionality. If you are serious about locking Berkeley DB databases, I strongly recommend using B<BerkeleyDB>. If using B<BerkeleyDB> isn't an option, there are a number of modules available on CPAN that can be used to implement locking. Each one implements locking differently and has different goals in mind. It is therefore worth knowing the difference, so that you can pick the right one for your application. Here are the three locking wrappers: =over 5 =item B<Tie::DB_Lock> A B<DB_File> wrapper which creates copies of the database file for read access, so that you have a kind of a multiversioning concurrent read system. However, updates are still serial. Use for databases where reads may be lengthy and consistency problems may occur. =item B<Tie::DB_LockFile> A B<DB_File> wrapper that has the ability to lock and unlock the database while it is being used. Avoids the tie-before-flock problem by simply re-tie-ing the database when you get or drop a lock. Because of the flexibility in dropping and re-acquiring the lock in the middle of a session, this can be massaged into a system that will work with long updates and/or reads if the application follows the hints in the POD documentation. =item B<DB_File::Lock> An extremely lightweight B<DB_File> wrapper that simply flocks a lockfile before tie-ing the database and drops the lock after the untie. Allows one to use the same lockfile for multiple databases to avoid deadlock problems, if desired. Use for databases where updates are reads are quick and simple flock locking semantics are enough. =back =head2 Sharing Databases With C Applications There is no technical reason why a Berkeley DB database cannot be shared by both a Perl and a C application. The vast majority of problems that are reported in this area boil down to the fact that C strings are NULL terminated, whilst Perl strings are not. See L<DBM FILTERS> for a generic way to work around this problem. Here is a real example. Netscape 2.0 keeps a record of the locations you visit along with the time you last visited them in a DB_HASH database. This is usually stored in the file F<~/.netscape/history.db>. The key field in the database is the location string and the value field is the time the location was last visited stored as a 4 byte binary value. If you haven't already guessed, the location string is stored with a terminating NULL. This means you need to be careful when accessing the database. Here is a snippet of code that is loosely based on Tom Christiansen's I<ggh> script (available from your nearest CPAN archive in F<authors/id/TOMC/scripts/nshist.gz>). use warnings ; use strict ; use DB_File ; use Fcntl ; my ($dotdir, $HISTORY, %hist_db, $href, $binary_time, $date) ; $dotdir = $ENV{HOME} || $ENV{LOGNAME}; $HISTORY = "$dotdir/.netscape/history.db"; tie %hist_db, 'DB_File', $HISTORY or die "Cannot open $HISTORY: $!\n" ;; # Dump the complete database while ( ($href, $binary_time) = each %hist_db ) { # remove the terminating NULL $href =~ s/\x00$// ; # convert the binary time into a user friendly string $date = localtime unpack("V", $binary_time); print "$date $href\n" ; } # check for the existence of a specific key # remember to add the NULL if ( $binary_time = $hist_db{"http://mox.perl.com/\x00"} ) { $date = localtime unpack("V", $binary_time) ; print "Last visited mox.perl.com on $date\n" ; } else { print "Never visited mox.perl.com\n" } untie %hist_db ; =head2 The untie() Gotcha If you make use of the Berkeley DB API, it is I<very> strongly recommended that you read L<perltie/The untie Gotcha>. Even if you don't currently make use of the API interface, it is still worth reading it. Here is an example which illustrates the problem from a B<DB_File> perspective: use DB_File ; use Fcntl ; my %x ; my $X ; $X = tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_TRUNC or die "Cannot tie first time: $!" ; $x{123} = 456 ; untie %x ; tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_CREAT or die "Cannot tie second time: $!" ; untie %x ; When run, the script will produce this error message: Cannot tie second time: Invalid argument at bad.file line 14. Although the error message above refers to the second tie() statement in the script, the source of the problem is really with the untie() statement that precedes it. Having read L<perltie> you will probably have already guessed that the error is caused by the extra copy of the tied object stored in C<$X>. If you haven't, then the problem boils down to the fact that the B<DB_File> destructor, DESTROY, will not be called until I<all> references to the tied object are destroyed. Both the tied variable, C<%x>, and C<$X> above hold a reference to the object. The call to untie() will destroy the first, but C<$X> still holds a valid reference, so the destructor will not get called and the database file F<tst.fil> will remain open. The fact that Berkeley DB then reports the attempt to open a database that is already open via the catch-all "Invalid argument" doesn't help. If you run the script with the C<-w> flag the error message becomes: untie attempted while 1 inner references still exist at bad.file line 12. Cannot tie second time: Invalid argument at bad.file line 14. which pinpoints the real problem. Finally the script can now be modified to fix the original problem by destroying the API object before the untie: ... $x{123} = 456 ; undef $X ; untie %x ; $X = tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_CREAT ... =head1 COMMON QUESTIONS =head2 Why is there Perl source in my database? If you look at the contents of a database file created by DB_File, there can sometimes be part of a Perl script included in it. This happens because Berkeley DB uses dynamic memory to allocate buffers which will subsequently be written to the database file. Being dynamic, the memory could have been used for anything before DB malloced it. As Berkeley DB doesn't clear the memory once it has been allocated, the unused portions will contain random junk. In the case where a Perl script gets written to the database, the random junk will correspond to an area of dynamic memory that happened to be used during the compilation of the script. Unless you don't like the possibility of there being part of your Perl scripts embedded in a database file, this is nothing to worry about. =head2 How do I store complex data structures with DB_File? Although B<DB_File> cannot do this directly, there is a module which can layer transparently over B<DB_File> to accomplish this feat. Check out the MLDBM module, available on CPAN in the directory F<modules/by-module/MLDBM>. =head2 What does "wide character in subroutine entry" mean? You will usually get this message if you are working with UTF-8 data and want to read/write it from/to a Berkeley DB database file. The easist way to deal with this issue is to use the pre-defined "utf8" B<DBM_Filter> (see L<DBM_Filter>) that was designed to deal with this situation. The example below shows what you need if I<both> the key and value are expected to be in UTF-8. use DB_File; use DBM_Filter; my $db = tie %h, 'DB_File', '/tmp/try.db', O_CREAT|O_RDWR, 0666, $DB_BTREE; $db->Filter_Key_Push('utf8'); $db->Filter_Value_Push('utf8'); my $key = "\N{LATIN SMALL LETTER A WITH ACUTE}"; my $value = "\N{LATIN SMALL LETTER E WITH ACUTE}"; $h{ $key } = $value; =head2 What does "Invalid Argument" mean? You will get this error message when one of the parameters in the C<tie> call is wrong. Unfortunately there are quite a few parameters to get wrong, so it can be difficult to figure out which one it is. Here are a couple of possibilities: =over 5 =item 1. Attempting to reopen a database without closing it. =item 2. Using the O_WRONLY flag. =back =head2 What does "Bareword 'DB_File' not allowed" mean? You will encounter this particular error message when you have the C<strict 'subs'> pragma (or the full strict pragma) in your script. Consider this script: use warnings ; use strict ; use DB_File ; my %x ; tie %x, DB_File, "filename" ; Running it produces the error in question: Bareword "DB_File" not allowed while "strict subs" in use To get around the error, place the word C<DB_File> in either single or double quotes, like this: tie %x, "DB_File", "filename" ; Although it might seem like a real pain, it is really worth the effort of having a C<use strict> in all your scripts. =head1 REFERENCES Articles that are either about B<DB_File> or make use of it. =over 5 =item 1. I<Full-Text Searching in Perl>, Tim Kientzle (tkientzle@ddj.com), Dr. Dobb's Journal, Issue 295, January 1999, pp 34-41 =back =head1 HISTORY Moved to the Changes file. =head1 BUGS Some older versions of Berkeley DB had problems with fixed length records using the RECNO file format. This problem has been fixed since version 1.85 of Berkeley DB. I am sure there are bugs in the code. If you do find any, or can suggest any enhancements, I would welcome your comments. =head1 AVAILABILITY B<DB_File> comes with the standard Perl source distribution. Look in the directory F<ext/DB_File>. Given the amount of time between releases of Perl the version that ships with Perl is quite likely to be out of date, so the most recent version can always be found on CPAN (see L<perlmodlib/CPAN> for details), in the directory F<modules/by-module/DB_File>. This version of B<DB_File> will work with either version 1.x, 2.x or 3.x of Berkeley DB, but is limited to the functionality provided by version 1. The official web site for Berkeley DB is F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>. All versions of Berkeley DB are available there. Alternatively, Berkeley DB version 1 is available at your nearest CPAN archive in F<src/misc/db.1.85.tar.gz>. =head1 COPYRIGHT Copyright (c) 1995-2016 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Although B<DB_File> is covered by the Perl license, the library it makes use of, namely Berkeley DB, is not. Berkeley DB has its own copyright and its own license. Please take the time to read it. Here are a few words taken from the Berkeley DB FAQ (at F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>) regarding the license: Do I have to license DB to use it in Perl scripts? No. The Berkeley DB license requires that software that uses Berkeley DB be freely redistributable. In the case of Perl, that software is Perl, and not your scripts. Any Perl scripts that you write are your property, including scripts that make use of Berkeley DB. Neither the Perl license nor the Berkeley DB license place any restriction on what you may do with them. If you are in any doubt about the license situation, contact either the Berkeley DB authors or the author of DB_File. See L<"AUTHOR"> for details. =head1 SEE ALSO L<perl>, L<dbopen(3)>, L<hash(3)>, L<recno(3)>, L<btree(3)>, L<perldbmfilter>, L<DBM_Filter> =head1 AUTHOR The DB_File interface was written by Paul Marquess E<lt>pmqs@cpan.orgE<gt>. =cut threads/shared.pm 0000644 00000050032 15037233314 0010003 0 ustar 00 package threads::shared; use 5.008; use strict; use warnings; use Scalar::Util qw(reftype refaddr blessed); our $VERSION = '1.58'; # Please update the pod, too. my $XS_VERSION = $VERSION; $VERSION = eval $VERSION; # Declare that we have been loaded $threads::shared::threads_shared = 1; # Method of complaint about things we can't clone $threads::shared::clone_warn = undef; # Load the XS code, if applicable if ($threads::threads) { require XSLoader; XSLoader::load('threads::shared', $XS_VERSION); *is_shared = \&_id; } else { # String eval is generally evil, but we don't want these subs to # exist at all if 'threads' is not loaded successfully. # Vivifying them conditionally this way saves on average about 4K # of memory per thread. eval <<'_MARKER_'; sub share (\[$@%]) { return $_[0] } sub is_shared (\[$@%]) { undef } sub cond_wait (\[$@%];\[$@%]) { undef } sub cond_timedwait (\[$@%]$;\[$@%]) { undef } sub cond_signal (\[$@%]) { undef } sub cond_broadcast (\[$@%]) { undef } _MARKER_ } ### Export ### sub import { # Exported subroutines my @EXPORT = qw(share is_shared cond_wait cond_timedwait cond_signal cond_broadcast shared_clone); if ($threads::threads) { push(@EXPORT, 'bless'); } # Export subroutine names my $caller = caller(); foreach my $sym (@EXPORT) { no strict 'refs'; *{$caller.'::'.$sym} = \&{$sym}; } } # Predeclarations for internal functions my ($make_shared); ### Methods, etc. ### sub threads::shared::tie::SPLICE { require Carp; Carp::croak('Splice not implemented for shared arrays'); } # Create a thread-shared clone of a complex data structure or object sub shared_clone { if (@_ != 1) { require Carp; Carp::croak('Usage: shared_clone(REF)'); } return $make_shared->(shift, {}); } ### Internal Functions ### # Used by shared_clone() to recursively clone # a complex data structure or object $make_shared = sub { my ($item, $cloned) = @_; # Just return the item if: # 1. Not a ref; # 2. Already shared; or # 3. Not running 'threads'. return $item if (! ref($item) || is_shared($item) || ! $threads::threads); # Check for previously cloned references # (this takes care of circular refs as well) my $addr = refaddr($item); if (exists($cloned->{$addr})) { # Return the already existing clone return $cloned->{$addr}; } # Make copies of array, hash and scalar refs and refs of refs my $copy; my $ref_type = reftype($item); # Copy an array ref if ($ref_type eq 'ARRAY') { # Make empty shared array ref $copy = &share([]); # Add to clone checking hash $cloned->{$addr} = $copy; # Recursively copy and add contents push(@$copy, map { $make_shared->($_, $cloned) } @$item); } # Copy a hash ref elsif ($ref_type eq 'HASH') { # Make empty shared hash ref $copy = &share({}); # Add to clone checking hash $cloned->{$addr} = $copy; # Recursively copy and add contents foreach my $key (keys(%{$item})) { $copy->{$key} = $make_shared->($item->{$key}, $cloned); } } # Copy a scalar ref elsif ($ref_type eq 'SCALAR') { $copy = \do{ my $scalar = $$item; }; share($copy); # Add to clone checking hash $cloned->{$addr} = $copy; } # Copy of a ref of a ref elsif ($ref_type eq 'REF') { # Special handling for $x = \$x if ($addr == refaddr($$item)) { $copy = \$copy; share($copy); $cloned->{$addr} = $copy; } else { my $tmp; $copy = \$tmp; share($copy); # Add to clone checking hash $cloned->{$addr} = $copy; # Recursively copy and add contents $tmp = $make_shared->($$item, $cloned); } } else { require Carp; if (! defined($threads::shared::clone_warn)) { Carp::croak("Unsupported ref type: ", $ref_type); } elsif ($threads::shared::clone_warn) { Carp::carp("Unsupported ref type: ", $ref_type); } return undef; } # If input item is an object, then bless the copy into the same class if (my $class = blessed($item)) { bless($copy, $class); } # Clone READONLY flag if ($ref_type eq 'SCALAR') { if (Internals::SvREADONLY($$item)) { Internals::SvREADONLY($$copy, 1) if ($] >= 5.008003); } } if (Internals::SvREADONLY($item)) { Internals::SvREADONLY($copy, 1) if ($] >= 5.008003); } return $copy; }; 1; __END__ =head1 NAME threads::shared - Perl extension for sharing data structures between threads =head1 VERSION This document describes threads::shared version 1.58 =head1 SYNOPSIS use threads; use threads::shared; my $var :shared; my %hsh :shared; my @ary :shared; my ($scalar, @array, %hash); share($scalar); share(@array); share(%hash); $var = $scalar_value; $var = $shared_ref_value; $var = shared_clone($non_shared_ref_value); $var = shared_clone({'foo' => [qw/foo bar baz/]}); $hsh{'foo'} = $scalar_value; $hsh{'bar'} = $shared_ref_value; $hsh{'baz'} = shared_clone($non_shared_ref_value); $hsh{'quz'} = shared_clone([1..3]); $ary[0] = $scalar_value; $ary[1] = $shared_ref_value; $ary[2] = shared_clone($non_shared_ref_value); $ary[3] = shared_clone([ {}, [] ]); { lock(%hash); ... } cond_wait($scalar); cond_timedwait($scalar, time() + 30); cond_broadcast(@array); cond_signal(%hash); my $lockvar :shared; # condition var != lock var cond_wait($var, $lockvar); cond_timedwait($var, time()+30, $lockvar); =head1 DESCRIPTION By default, variables are private to each thread, and each newly created thread gets a private copy of each existing variable. This module allows you to share variables across different threads (and pseudo-forks on Win32). It is used together with the L<threads> module. This module supports the sharing of the following data types only: scalars and scalar refs, arrays and array refs, and hashes and hash refs. =head1 EXPORT The following functions are exported by this module: C<share>, C<shared_clone>, C<is_shared>, C<cond_wait>, C<cond_timedwait>, C<cond_signal> and C<cond_broadcast> Note that if this module is imported when L<threads> has not yet been loaded, then these functions all become no-ops. This makes it possible to write modules that will work in both threaded and non-threaded environments. =head1 FUNCTIONS =over 4 =item share VARIABLE C<share> takes a variable and marks it as shared: my ($scalar, @array, %hash); share($scalar); share(@array); share(%hash); C<share> will return the shared rvalue, but always as a reference. Variables can also be marked as shared at compile time by using the C<:shared> attribute: my ($var, %hash, @array) :shared; Shared variables can only store scalars, refs of shared variables, or refs of shared data (discussed in next section): my ($var, %hash, @array) :shared; my $bork; # Storing scalars $var = 1; $hash{'foo'} = 'bar'; $array[0] = 1.5; # Storing shared refs $var = \%hash; $hash{'ary'} = \@array; $array[1] = \$var; # The following are errors: # $var = \$bork; # ref of non-shared variable # $hash{'bork'} = []; # non-shared array ref # push(@array, { 'x' => 1 }); # non-shared hash ref =item shared_clone REF C<shared_clone> takes a reference, and returns a shared version of its argument, performing a deep copy on any non-shared elements. Any shared elements in the argument are used as is (i.e., they are not cloned). my $cpy = shared_clone({'foo' => [qw/foo bar baz/]}); Object status (i.e., the class an object is blessed into) is also cloned. my $obj = {'foo' => [qw/foo bar baz/]}; bless($obj, 'Foo'); my $cpy = shared_clone($obj); print(ref($cpy), "\n"); # Outputs 'Foo' For cloning empty array or hash refs, the following may also be used: $var = &share([]); # Same as $var = shared_clone([]); $var = &share({}); # Same as $var = shared_clone({}); Not all Perl data types can be cloned (e.g., globs, code refs). By default, C<shared_clone> will L<croak|Carp> if it encounters such items. To change this behaviour to a warning, then set the following: $threads::shared::clone_warn = 1; In this case, C<undef> will be substituted for the item to be cloned. If set to zero: $threads::shared::clone_warn = 0; then the C<undef> substitution will be performed silently. =item is_shared VARIABLE C<is_shared> checks if the specified variable is shared or not. If shared, returns the variable's internal ID (similar to C<refaddr()> (see L<Scalar::Util>). Otherwise, returns C<undef>. if (is_shared($var)) { print("\$var is shared\n"); } else { print("\$var is not shared\n"); } When used on an element of an array or hash, C<is_shared> checks if the specified element belongs to a shared array or hash. (It does not check the contents of that element.) my %hash :shared; if (is_shared(%hash)) { print("\%hash is shared\n"); } $hash{'elem'} = 1; if (is_shared($hash{'elem'})) { print("\$hash{'elem'} is in a shared hash\n"); } =item lock VARIABLE C<lock> places a B<advisory> lock on a variable until the lock goes out of scope. If the variable is locked by another thread, the C<lock> call will block until it's available. Multiple calls to C<lock> by the same thread from within dynamically nested scopes are safe -- the variable will remain locked until the outermost lock on the variable goes out of scope. C<lock> follows references exactly I<one> level: my %hash :shared; my $ref = \%hash; lock($ref); # This is equivalent to lock(%hash) Note that you cannot explicitly unlock a variable; you can only wait for the lock to go out of scope. This is most easily accomplished by locking the variable inside a block. my $var :shared; { lock($var); # $var is locked from here to the end of the block ... } # $var is now unlocked As locks are advisory, they do not prevent data access or modification by another thread that does not itself attempt to obtain a lock on the variable. You cannot lock the individual elements of a container variable: my %hash :shared; $hash{'foo'} = 'bar'; #lock($hash{'foo'}); # Error lock(%hash); # Works If you need more fine-grained control over shared variable access, see L<Thread::Semaphore>. =item cond_wait VARIABLE =item cond_wait CONDVAR, LOCKVAR The C<cond_wait> function takes a B<locked> variable as a parameter, unlocks the variable, and blocks until another thread does a C<cond_signal> or C<cond_broadcast> for that same locked variable. The variable that C<cond_wait> blocked on is re-locked after the C<cond_wait> is satisfied. If there are multiple threads C<cond_wait>ing on the same variable, all but one will re-block waiting to reacquire the lock on the variable. (So if you're only using C<cond_wait> for synchronization, give up the lock as soon as possible). The two actions of unlocking the variable and entering the blocked wait state are atomic, the two actions of exiting from the blocked wait state and re-locking the variable are not. In its second form, C<cond_wait> takes a shared, B<unlocked> variable followed by a shared, B<locked> variable. The second variable is unlocked and thread execution suspended until another thread signals the first variable. It is important to note that the variable can be notified even if no thread C<cond_signal> or C<cond_broadcast> on the variable. It is therefore important to check the value of the variable and go back to waiting if the requirement is not fulfilled. For example, to pause until a shared counter drops to zero: { lock($counter); cond_wait($counter) until $counter == 0; } =item cond_timedwait VARIABLE, ABS_TIMEOUT =item cond_timedwait CONDVAR, ABS_TIMEOUT, LOCKVAR In its two-argument form, C<cond_timedwait> takes a B<locked> variable and an absolute timeout in I<epoch> seconds (see L<time() in perlfunc|perlfunc/time> for more) as parameters, unlocks the variable, and blocks until the timeout is reached or another thread signals the variable. A false value is returned if the timeout is reached, and a true value otherwise. In either case, the variable is re-locked upon return. Like C<cond_wait>, this function may take a shared, B<locked> variable as an additional parameter; in this case the first parameter is an B<unlocked> condition variable protected by a distinct lock variable. Again like C<cond_wait>, waking up and reacquiring the lock are not atomic, and you should always check your desired condition after this function returns. Since the timeout is an absolute value, however, it does not have to be recalculated with each pass: lock($var); my $abs = time() + 15; until ($ok = desired_condition($var)) { last if !cond_timedwait($var, $abs); } # we got it if $ok, otherwise we timed out! =item cond_signal VARIABLE The C<cond_signal> function takes a B<locked> variable as a parameter and unblocks one thread that's C<cond_wait>ing on that variable. If more than one thread is blocked in a C<cond_wait> on that variable, only one (and which one is indeterminate) will be unblocked. If there are no threads blocked in a C<cond_wait> on the variable, the signal is discarded. By always locking before signaling, you can (with care), avoid signaling before another thread has entered cond_wait(). C<cond_signal> will normally generate a warning if you attempt to use it on an unlocked variable. On the rare occasions where doing this may be sensible, you can suppress the warning with: { no warnings 'threads'; cond_signal($foo); } =item cond_broadcast VARIABLE The C<cond_broadcast> function works similarly to C<cond_signal>. C<cond_broadcast>, though, will unblock B<all> the threads that are blocked in a C<cond_wait> on the locked variable, rather than only one. =back =head1 OBJECTS L<threads::shared> exports a version of L<bless()|perlfunc/"bless REF"> that works on shared objects such that I<blessings> propagate across threads. # Create a shared 'Foo' object my $foo :shared = shared_clone({}); bless($foo, 'Foo'); # Create a shared 'Bar' object my $bar :shared = shared_clone({}); bless($bar, 'Bar'); # Put 'bar' inside 'foo' $foo->{'bar'} = $bar; # Rebless the objects via a thread threads->create(sub { # Rebless the outer object bless($foo, 'Yin'); # Cannot directly rebless the inner object #bless($foo->{'bar'}, 'Yang'); # Retrieve and rebless the inner object my $obj = $foo->{'bar'}; bless($obj, 'Yang'); $foo->{'bar'} = $obj; })->join(); print(ref($foo), "\n"); # Prints 'Yin' print(ref($foo->{'bar'}), "\n"); # Prints 'Yang' print(ref($bar), "\n"); # Also prints 'Yang' =head1 NOTES L<threads::shared> is designed to disable itself silently if threads are not available. This allows you to write modules and packages that can be used in both threaded and non-threaded applications. If you want access to threads, you must C<use threads> before you C<use threads::shared>. L<threads> will emit a warning if you use it after L<threads::shared>. =head1 WARNINGS =over 4 =item cond_broadcast() called on unlocked variable =item cond_signal() called on unlocked variable See L</"cond_signal VARIABLE">, above. =back =head1 BUGS AND LIMITATIONS When C<share> is used on arrays, hashes, array refs or hash refs, any data they contain will be lost. my @arr = qw(foo bar baz); share(@arr); # @arr is now empty (i.e., == ()); # Create a 'foo' object my $foo = { 'data' => 99 }; bless($foo, 'foo'); # Share the object share($foo); # Contents are now wiped out print("ERROR: \$foo is empty\n") if (! exists($foo->{'data'})); Therefore, populate such variables B<after> declaring them as shared. (Scalar and scalar refs are not affected by this problem.) Blessing a shared item after it has been nested in another shared item does not propagate the blessing to the shared reference: my $foo = &share({}); my $bar = &share({}); $bar->{foo} = $foo; bless($foo, 'baz'); # $foo is now of class 'baz', # but $bar->{foo} is unblessed. Therefore, you should bless objects before sharing them. It is often not wise to share an object unless the class itself has been written to support sharing. For example, a shared object's destructor may get called multiple times, once for each thread's scope exit, or may not get called at all if it is embedded inside another shared object. Another issue is that the contents of hash-based objects will be lost due to the above mentioned limitation. See F<examples/class.pl> (in the CPAN distribution of this module) for how to create a class that supports object sharing. Destructors may not be called on objects if those objects still exist at global destruction time. If the destructors must be called, make sure there are no circular references and that nothing is referencing the objects before the program ends. Does not support C<splice> on arrays. Does not support explicitly changing array lengths via $#array -- use C<push> and C<pop> instead. Taking references to the elements of shared arrays and hashes does not autovivify the elements, and neither does slicing a shared array/hash over non-existent indices/keys autovivify the elements. C<share()> allows you to C<< share($hashref->{key}) >> and C<< share($arrayref->[idx]) >> without giving any error message. But the C<< $hashref->{key} >> or C<< $arrayref->[idx] >> is B<not> shared, causing the error "lock can only be used on shared values" to occur when you attempt to C<< lock($hashref->{key}) >> or C<< lock($arrayref->[idx]) >> in another thread. Using C<refaddr()> is unreliable for testing whether or not two shared references are equivalent (e.g., when testing for circular references). Use L<is_shared()|/"is_shared VARIABLE">, instead: use threads; use threads::shared; use Scalar::Util qw(refaddr); # If ref is shared, use threads::shared's internal ID. # Otherwise, use refaddr(). my $addr1 = is_shared($ref1) || refaddr($ref1); my $addr2 = is_shared($ref2) || refaddr($ref2); if ($addr1 == $addr2) { # The refs are equivalent } L<each()|perlfunc/"each HASH"> does not work properly on shared references embedded in shared structures. For example: my %foo :shared; $foo{'bar'} = shared_clone({'a'=>'x', 'b'=>'y', 'c'=>'z'}); while (my ($key, $val) = each(%{$foo{'bar'}})) { ... } Either of the following will work instead: my $ref = $foo{'bar'}; while (my ($key, $val) = each(%{$ref})) { ... } foreach my $key (keys(%{$foo{'bar'}})) { my $val = $foo{'bar'}{$key}; ... } This module supports dual-valued variables created using C<dualvar()> from L<Scalar::Util>. However, while C<$!> acts like a dualvar, it is implemented as a tied SV. To propagate its value, use the follow construct, if needed: my $errno :shared = dualvar($!,$!); View existing bug reports at, and submit any new bugs, problems, patches, etc. to: L<http://rt.cpan.org/Public/Dist/Display.html?Name=threads-shared> =head1 SEE ALSO threads::shared on MetaCPAN: L<https://metacpan.org/release/threads-shared> Code repository for CPAN distribution: L<https://github.com/Dual-Life/threads-shared> L<threads>, L<perlthrtut> L<http://www.perl.com/pub/a/2002/06/11/threads.html> and L<http://www.perl.com/pub/a/2002/09/04/threads.html> Perl threads mailing list: L<http://lists.perl.org/list/ithreads.html> Sample code in the I<examples> directory of this distribution on CPAN. =head1 AUTHOR Artur Bergman E<lt>sky AT crucially DOT netE<gt> Documentation borrowed from the old Thread.pm. CPAN version produced by Jerry D. Hedden E<lt>jdhedden AT cpan DOT orgE<gt>. =head1 LICENSE threads::shared is released under the same license as Perl. =cut encoding.pm 0000644 00000054646 15037233314 0006710 0 ustar 00 # $Id: encoding.pm,v 2.22 2018/02/11 05:32:03 dankogai Exp $ package encoding; our $VERSION = sprintf "%d.%02d", q$Revision: 2.22 $ =~ /(\d+)/g; use Encode; use strict; use warnings; use Config; use constant { DEBUG => !!$ENV{PERL_ENCODE_DEBUG}, HAS_PERLIO => eval { require PerlIO::encoding; PerlIO::encoding->VERSION(0.02) }, PERL_5_21_7 => $^V && $^V ge v5.21.7, # lexically scoped }; sub _exception { my $name = shift; $] > 5.008 and return 0; # 5.8.1 or higher then no my %utfs = map { $_ => 1 } qw(utf8 UCS-2BE UCS-2LE UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE); $utfs{$name} or return 0; # UTFs or no require Config; Config->import(); our %Config; return $Config{perl_patchlevel} ? 0 : 1 # maintperl then no } sub in_locale { $^H & ( $locale::hint_bits || 0 ) } sub _get_locale_encoding { my $locale_encoding; if ($^O eq 'MSWin32') { my @tries = ( # First try to get the OutputCP. This will work only if we # are attached to a console 'Win32.pm' => 'Win32::GetConsoleOutputCP', 'Win32/Console.pm' => 'Win32::Console::OutputCP', # If above failed, this means that we are a GUI app # Let's assume that the ANSI codepage is what matters 'Win32.pm' => 'Win32::GetACP', ); while (@tries) { my $cp = eval { require $tries[0]; no strict 'refs'; &{$tries[1]}() }; if ($cp) { if ($cp == 65001) { # Code page for UTF-8 $locale_encoding = 'UTF-8'; } else { $locale_encoding = 'cp' . $cp; } return $locale_encoding; } splice(@tries, 0, 2) } } # I18N::Langinfo isn't available everywhere $locale_encoding = eval { require I18N::Langinfo; find_encoding( I18N::Langinfo::langinfo( I18N::Langinfo::CODESET() ) )->name }; return $locale_encoding if defined $locale_encoding; eval { require POSIX; # Get the current locale # Remember that MSVCRT impl is quite different from Unixes my $locale = POSIX::setlocale(POSIX::LC_CTYPE()); if ( $locale =~ /^([^.]+)\.([^.@]+)(?:@.*)?$/ ) { my $country_language; ( $country_language, $locale_encoding ) = ( $1, $2 ); # Could do more heuristics based on the country and language # since we have Locale::Country and Locale::Language available. # TODO: get a database of Language -> Encoding mappings # (the Estonian database at http://www.eki.ee/letter/ # would be excellent!) --jhi if (lc($locale_encoding) eq 'euc') { if ( $country_language =~ /^ja_JP|japan(?:ese)?$/i ) { $locale_encoding = 'euc-jp'; } elsif ( $country_language =~ /^ko_KR|korean?$/i ) { $locale_encoding = 'euc-kr'; } elsif ( $country_language =~ /^zh_CN|chin(?:a|ese)$/i ) { $locale_encoding = 'euc-cn'; } elsif ( $country_language =~ /^zh_TW|taiwan(?:ese)?$/i ) { $locale_encoding = 'euc-tw'; } else { require Carp; Carp::croak( "encoding: Locale encoding '$locale_encoding' too ambiguous" ); } } } }; return $locale_encoding; } sub import { if ( ord("A") == 193 ) { require Carp; Carp::croak("encoding: pragma does not support EBCDIC platforms"); } my $deprecate = ($] >= 5.017 and !$Config{usecperl}) ? "Use of the encoding pragma is deprecated" : 0; my $class = shift; my $name = shift; if (!$name){ require Carp; Carp::croak("encoding: no encoding specified."); } if ( $name eq ':_get_locale_encoding' ) { # used by lib/open.pm my $caller = caller(); { no strict 'refs'; *{"${caller}::_get_locale_encoding"} = \&_get_locale_encoding; } return; } $name = _get_locale_encoding() if $name eq ':locale'; BEGIN { strict->unimport('hashpairs') if $] >= 5.027 and $^V =~ /c$/; } my %arg = @_; $name = $ENV{PERL_ENCODING} unless defined $name; my $enc = find_encoding($name); unless ( defined $enc ) { require Carp; Carp::croak("encoding: Unknown encoding '$name'"); } $name = $enc->name; # canonize unless ( $arg{Filter} ) { if ($] >= 5.025003 and !$Config{usecperl}) { require Carp; Carp::croak("The encoding pragma is no longer supported. Check cperl"); } warnings::warnif("deprecated",$deprecate) if $deprecate; DEBUG and warn "_exception($name) = ", _exception($name); if (! _exception($name)) { if (!PERL_5_21_7) { ${^ENCODING} = $enc; } else { # Starting with 5.21.7, this pragma uses a shadow variable # designed explicitly for it, ${^E_NCODING}, to enforce # lexical scope; instead of ${^ENCODING}. $^H{'encoding'} = 1; ${^E_NCODING} = $enc; } } if (! HAS_PERLIO ) { return 1; } } else { warnings::warnif("deprecated",$deprecate) if $deprecate; defined( ${^ENCODING} ) and undef ${^ENCODING}; undef ${^E_NCODING} if PERL_5_21_7; # implicitly 'use utf8' require utf8; # to fetch $utf8::hint_bits; $^H |= $utf8::hint_bits; require Filter::Util::Call; Filter::Util::Call->import; filter_add( sub { my $status = filter_read(); if ( $status > 0 ) { $_ = $enc->decode( $_, 1 ); DEBUG and warn $_; } $status; } ); } defined ${^UNICODE} and ${^UNICODE} != 0 and return 1; for my $h (qw(STDIN STDOUT)) { if ( $arg{$h} ) { unless ( defined find_encoding( $arg{$h} ) ) { require Carp; Carp::croak( "encoding: Unknown encoding for $h, '$arg{$h}'"); } binmode( $h, ":raw :encoding($arg{$h})" ); } else { unless ( exists $arg{$h} ) { no warnings 'uninitialized'; binmode( $h, ":raw :encoding($name)" ); } } } return 1; # I doubt if we need it, though } sub unimport { no warnings; undef ${^ENCODING}; undef ${^E_NCODING} if PERL_5_21_7; if (HAS_PERLIO) { binmode( STDIN, ":raw" ); binmode( STDOUT, ":raw" ); } else { binmode(STDIN); binmode(STDOUT); } if ( $INC{"Filter/Util/Call.pm"} ) { eval { filter_del() }; } } 1; __END__ =pod =head1 NAME encoding - allows you to write your script in non-ASCII and non-UTF-8 =head1 WARNING This module has been deprecated since perl v5.18. See L</DESCRIPTION> and L</BUGS>. =head1 SYNOPSIS use encoding "greek"; # Perl like Greek to you? use encoding "euc-jp"; # Jperl! # or you can even do this if your shell supports your native encoding perl -Mencoding=latin2 -e'...' # Feeling centrally European? perl -Mencoding=euc-kr -e'...' # Or Korean? # more control # A simple euc-cn => utf-8 converter use encoding "euc-cn", STDOUT => "utf8"; while(<>){print}; # "no encoding;" supported no encoding; # an alternate way, Filter use encoding "euc-jp", Filter=>1; # now you can use kanji identifiers -- in euc-jp! # encode based on the current locale - specialized purposes only; # fraught with danger!! use encoding ':locale'; =head1 DESCRIPTION This pragma is used to enable a Perl script to be written in encodings that aren't strictly ASCII nor UTF-8. It translates all or portions of the Perl program script from a given encoding into UTF-8, and changes the PerlIO layers of C<STDIN> and C<STDOUT> to the encoding specified. This pragma dates from the days when UTF-8-enabled editors were uncommon. But that was long ago, and the need for it is greatly diminished. That, coupled with the fact that it doesn't work with threads, along with other problems, (see L</BUGS>) have led to its being deprecated. It is planned to remove this pragma in a future Perl version. New code should be written in UTF-8, and the C<use utf8> pragma used instead (see L<perluniintro> and L<utf8> for details). Old code should be converted to UTF-8, via something like the recipe in the L</SYNOPSIS> (though this simple approach may require manual adjustments afterwards). If UTF-8 is not an option, it is recommended that one use a simple source filter, such as that provided by L<Filter::Encoding> on CPAN or this pragma's own C<Filter> option (see below). The only legitimate use of this pragma is almost certainly just one per file, near the top, with file scope, as the file is likely going to only be written in one encoding. Further restrictions apply in Perls before v5.22 (see L</Prior to Perl v5.22>). There are two basic modes of operation (plus turning if off): =over 4 =item C<use encoding ['I<ENCNAME>'] ;> Please note: This mode of operation is no longer supported as of Perl v5.26. This is the normal operation. It translates various literals encountered in the Perl source file from the encoding I<ENCNAME> into UTF-8, and similarly converts character code points. This is used when the script is a combination of ASCII (for the variable names and punctuation, I<etc>), but the literal data is in the specified encoding. I<ENCNAME> is optional. If omitted, the encoding specified in the environment variable L<C<PERL_ENCODING>|perlrun/PERL_ENCODING> is used. If this isn't set, or the resolved-to encoding is not known to C<L<Encode>>, the error C<Unknown encoding 'I<ENCNAME>'> will be thrown. Starting in Perl v5.8.6 (C<Encode> version 2.0.1), I<ENCNAME> may be the name C<:locale>. This is for very specialized applications, and is documented in L</The C<:locale> sub-pragma> below. The literals that are converted are C<q//, qq//, qr//, qw///, qx//>, and starting in v5.8.1, C<tr///>. Operations that do conversions include C<chr>, C<ord>, C<utf8::upgrade> (but not C<utf8::downgrade>), and C<chomp>. Also starting in v5.8.1, the C<DATA> pseudo-filehandle is translated from the encoding into UTF-8. For example, you can write code in EUC-JP as follows: my $Rakuda = "\xF1\xD1\xF1\xCC"; # Camel in Kanji #<-char-><-char-> # 4 octets s/\bCamel\b/$Rakuda/; And with C<use encoding "euc-jp"> in effect, it is the same thing as that code in UTF-8: my $Rakuda = "\x{99F1}\x{99DD}"; # two Unicode Characters s/\bCamel\b/$Rakuda/; See L</EXAMPLE> below for a more complete example. Unless C<${^UNICODE}> (available starting in v5.8.2) exists and is non-zero, the PerlIO layers of C<STDIN> and C<STDOUT> are set to "C<:encoding(I<ENCNAME>)>". Therefore, use encoding "euc-jp"; my $message = "Camel is the symbol of perl.\n"; my $Rakuda = "\xF1\xD1\xF1\xCC"; # Camel in Kanji $message =~ s/\bCamel\b/$Rakuda/; print $message; will print "\xF1\xD1\xF1\xCC is the symbol of perl.\n" not "\x{99F1}\x{99DD} is the symbol of perl.\n" You can override this by giving extra arguments; see below. Note that C<STDERR> WILL NOT be changed, regardless. Also note that non-STD file handles remain unaffected. Use C<use open> or C<binmode> to change the layers of those. =item C<use encoding I<ENCNAME>, Filter=E<gt>1;> This operates as above, but the C<Filter> argument with a non-zero value causes the entire script, and not just literals, to be translated from the encoding into UTF-8. This allows identifiers in the source to be in that encoding as well. (Problems may occur if the encoding is not a superset of ASCII; imagine all your semi-colons being translated into something different.) One can use this form to make ${"\x{4eba}"}++ work. (This is equivalent to C<$I<human>++>, where I<human> is a single Han ideograph). This effectively means that your source code behaves as if it were written in UTF-8 with C<'use utf8>' in effect. So even if your editor only supports Shift_JIS, for example, you can still try examples in Chapter 15 of C<Programming Perl, 3rd Ed.>. This option is significantly slower than the other one. =item C<no encoding;> Unsets the script encoding. The layers of C<STDIN>, C<STDOUT> are reset to "C<:raw>" (the default unprocessed raw stream of bytes). =back =head1 OPTIONS =head2 Setting C<STDIN> and/or C<STDOUT> individually The encodings of C<STDIN> and C<STDOUT> are individually settable by parameters to the pragma: use encoding 'euc-tw', STDIN => 'greek' ...; In this case, you cannot omit the first I<ENCNAME>. C<< STDIN => undef >> turns the I/O transcoding completely off for that filehandle. When C<${^UNICODE}> (available starting in v5.8.2) exists and is non-zero, these options will be completely ignored. See L<perlvar/C<${^UNICODE}>> and L<"C<-C>" in perlrun|perlrun/-C [numberE<sol>list]> for details. =head2 The C<:locale> sub-pragma Starting in v5.8.6, the encoding name may be C<:locale>. This means that the encoding is taken from the current locale, and not hard-coded by the pragma. Since a script really can only be encoded in exactly one encoding, this option is dangerous. It makes sense only if the script itself is written in ASCII, and all the possible locales that will be in use when the script is executed are supersets of ASCII. That means that the script itself doesn't get changed, but the I/O handles have the specified encoding added, and the operations like C<chr> and C<ord> use that encoding. The logic of finding which locale C<:locale> uses is as follows: =over 4 =item 1. If the platform supports the C<langinfo(CODESET)> interface, the codeset returned is used as the default encoding for the open pragma. =item 2. If 1. didn't work but we are under the locale pragma, the environment variables C<LC_ALL> and C<LANG> (in that order) are matched for encodings (the part after "C<.>", if any), and if any found, that is used as the default encoding for the open pragma. =item 3. If 1. and 2. didn't work, the environment variables C<LC_ALL> and C<LANG> (in that order) are matched for anything looking like UTF-8, and if any found, C<:utf8> is used as the default encoding for the open pragma. =back If your locale environment variables (C<LC_ALL>, C<LC_CTYPE>, C<LANG>) contain the strings 'UTF-8' or 'UTF8' (case-insensitive matching), the default encoding of your C<STDIN>, C<STDOUT>, and C<STDERR>, and of B<any subsequent file open>, is UTF-8. =head1 CAVEATS =head2 SIDE EFFECTS =over =item * If the C<encoding> pragma is in scope then the lengths returned are calculated from the length of C<$/> in Unicode characters, which is not always the same as the length of C<$/> in the native encoding. =item * Without this pragma, if strings operating under byte semantics and strings with Unicode character data are concatenated, the new string will be created by decoding the byte strings as I<ISO 8859-1 (Latin-1)>. The B<encoding> pragma changes this to use the specified encoding instead. For example: use encoding 'utf8'; my $string = chr(20000); # a Unicode string utf8::encode($string); # now it's a UTF-8 encoded byte string # concatenate with another Unicode string print length($string . chr(20000)); Will print C<2>, because C<$string> is upgraded as UTF-8. Without C<use encoding 'utf8';>, it will print C<4> instead, since C<$string> is three octets when interpreted as Latin-1. =back =head2 DO NOT MIX MULTIPLE ENCODINGS Notice that only literals (string or regular expression) having only legacy code points are affected: if you mix data like this \x{100}\xDF \xDF\x{100} the data is assumed to be in (Latin 1 and) Unicode, not in your native encoding. In other words, this will match in "greek": "\xDF" =~ /\x{3af}/ but this will not "\xDF\x{100}" =~ /\x{3af}\x{100}/ since the C<\xDF> (ISO 8859-7 GREEK SMALL LETTER IOTA WITH TONOS) on the left will B<not> be upgraded to C<\x{3af}> (Unicode GREEK SMALL LETTER IOTA WITH TONOS) because of the C<\x{100}> on the left. You should not be mixing your legacy data and Unicode in the same string. This pragma also affects encoding of the 0x80..0xFF code point range: normally characters in that range are left as eight-bit bytes (unless they are combined with characters with code points 0x100 or larger, in which case all characters need to become UTF-8 encoded), but if the C<encoding> pragma is present, even the 0x80..0xFF range always gets UTF-8 encoded. After all, the best thing about this pragma is that you don't have to resort to \x{....} just to spell your name in a native encoding. So feel free to put your strings in your encoding in quotes and regexes. =head2 Prior to Perl v5.22 The pragma was a per script, not a per block lexical. Only the last C<use encoding> or C<no encoding> mattered, and it affected B<the whole script>. However, the C<no encoding> pragma was supported and C<use encoding> could appear as many times as you want in a given script (though only the last was effective). Since the scope wasn't lexical, other modules' use of C<chr>, C<ord>, I<etc.> were affected. This leads to spooky, incorrect action at a distance that is hard to debug. This means you would have to be very careful of the load order: # called module package Module_IN_BAR; use encoding "bar"; # stuff in "bar" encoding here 1; # caller script use encoding "foo" use Module_IN_BAR; # surprise! use encoding "bar" is in effect. The best way to avoid this oddity is to use this pragma RIGHT AFTER other modules are loaded. i.e. use Module_IN_BAR; use encoding "foo"; =head2 Prior to Encode version 1.87 =over =item * C<STDIN> and C<STDOUT> were not set under the filter option. And C<< STDIN=>I<ENCODING> >> and C<< STDOUT=>I<ENCODING> >> didn't work like non-filter version. =item * C<use utf8> wasn't implicitly declared so you have to C<use utf8> to do ${"\x{4eba}"}++ =back =head2 Prior to Perl v5.8.1 =over =item "NON-EUC" doublebyte encodings Because perl needs to parse the script before applying this pragma, such encodings as Shift_JIS and Big-5 that may contain C<'\'> (BACKSLASH; C<\x5c>) in the second byte fail because the second byte may accidentally escape the quoting character that follows. =item C<tr///> The B<encoding> pragma works by decoding string literals in C<q//,qq//,qr//,qw///, qx//> and so forth. In perl v5.8.0, this does not apply to C<tr///>. Therefore, use encoding 'euc-jp'; #.... $kana =~ tr/\xA4\xA1-\xA4\xF3/\xA5\xA1-\xA5\xF3/; # -------- -------- -------- -------- Does not work as $kana =~ tr/\x{3041}-\x{3093}/\x{30a1}-\x{30f3}/; =over =item Legend of characters above utf8 euc-jp charnames::viacode() ----------------------------------------- \x{3041} \xA4\xA1 HIRAGANA LETTER SMALL A \x{3093} \xA4\xF3 HIRAGANA LETTER N \x{30a1} \xA5\xA1 KATAKANA LETTER SMALL A \x{30f3} \xA5\xF3 KATAKANA LETTER N =back This counterintuitive behavior has been fixed in perl v5.8.1. In perl v5.8.0, you can work around this as follows; use encoding 'euc-jp'; # .... eval qq{ \$kana =~ tr/\xA4\xA1-\xA4\xF3/\xA5\xA1-\xA5\xF3/ }; Note the C<tr//> expression is surrounded by C<qq{}>. The idea behind this is the same as the classic idiom that makes C<tr///> 'interpolate': tr/$from/$to/; # wrong! eval qq{ tr/$from/$to/ }; # workaround. =back =head1 EXAMPLE - Greekperl use encoding "iso 8859-7"; # \xDF in ISO 8859-7 (Greek) is \x{3af} in Unicode. $a = "\xDF"; $b = "\x{100}"; printf "%#x\n", ord($a); # will print 0x3af, not 0xdf $c = $a . $b; # $c will be "\x{3af}\x{100}", not "\x{df}\x{100}". # chr() is affected, and ... print "mega\n" if ord(chr(0xdf)) == 0x3af; # ... ord() is affected by the encoding pragma ... print "tera\n" if ord(pack("C", 0xdf)) == 0x3af; # ... as are eq and cmp ... print "peta\n" if "\x{3af}" eq pack("C", 0xdf); print "exa\n" if "\x{3af}" cmp pack("C", 0xdf) == 0; # ... but pack/unpack C are not affected, in case you still # want to go back to your native encoding print "zetta\n" if unpack("C", (pack("C", 0xdf))) == 0xdf; =head1 BUGS =over =item Thread safety C<use encoding ...> is not thread-safe (i.e., do not use in threaded applications). =item Can't be used by more than one module in a single program. Only one encoding is allowed. If you combine modules in a program that have different encodings, only one will be actually used. =item Other modules using C<STDIN> and C<STDOUT> get the encoded stream They may be expecting something completely different. =item literals in regex that are longer than 127 bytes For native multibyte encodings (either fixed or variable length), the current implementation of the regular expressions may introduce recoding errors for regular expression literals longer than 127 bytes. =item EBCDIC The encoding pragma is not supported on EBCDIC platforms. =item C<format> This pragma doesn't work well with C<format> because PerlIO does not get along very well with it. When C<format> contains non-ASCII characters it prints funny or gets "wide character warnings". To understand it, try the code below. # Save this one in utf8 # replace *non-ascii* with a non-ascii string my $camel; format STDOUT = *non-ascii*@>>>>>>> $camel . $camel = "*non-ascii*"; binmode(STDOUT=>':encoding(utf8)'); # bang! write; # funny print $camel, "\n"; # fine Without binmode this happens to work but without binmode, print() fails instead of write(). At any rate, the very use of C<format> is questionable when it comes to unicode characters since you have to consider such things as character width (i.e. double-width for ideographs) and directions (i.e. BIDI for Arabic and Hebrew). =item See also L</CAVEATS> =back =head1 HISTORY This pragma first appeared in Perl v5.8.0. It has been enhanced in later releases as specified above. =head1 SEE ALSO L<perlunicode>, L<Encode>, L<open>, L<Filter::Util::Call>, Ch. 15 of C<Programming Perl (3rd Edition)> by Larry Wall, Tom Christiansen, Jon Orwant; O'Reilly & Associates; ISBN 0-596-00027-8 =cut Sys/Syslog.pm 0000644 00000135431 15037233314 0007150 0 ustar 00 package Sys::Syslog; use strict; use warnings; use warnings::register; use Carp; use Config; use Exporter (); use File::Basename; use POSIX qw< strftime setlocale LC_TIME >; use Socket qw< :all >; require 5.005; *import = \&Exporter::import; { no strict 'vars'; $VERSION = '0.35'; %EXPORT_TAGS = ( standard => [qw(openlog syslog closelog setlogmask)], extended => [qw(setlogsock)], macros => [ # levels qw( LOG_ALERT LOG_CRIT LOG_DEBUG LOG_EMERG LOG_ERR LOG_INFO LOG_NOTICE LOG_WARNING ), # standard facilities qw( LOG_AUTH LOG_AUTHPRIV LOG_CRON LOG_DAEMON LOG_FTP LOG_KERN LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR LOG_MAIL LOG_NEWS LOG_SYSLOG LOG_USER LOG_UUCP ), # Mac OS X specific facilities qw( LOG_INSTALL LOG_LAUNCHD LOG_NETINFO LOG_RAS LOG_REMOTEAUTH ), # modern BSD specific facilities qw( LOG_CONSOLE LOG_NTP LOG_SECURITY ), # IRIX specific facilities qw( LOG_AUDIT LOG_LFMT ), # options qw( LOG_CONS LOG_PID LOG_NDELAY LOG_NOWAIT LOG_ODELAY LOG_PERROR ), # others macros qw( LOG_FACMASK LOG_NFACILITIES LOG_PRIMASK LOG_MASK LOG_UPTO ), ], ); @EXPORT = ( @{$EXPORT_TAGS{standard}}, ); @EXPORT_OK = ( @{$EXPORT_TAGS{extended}}, @{$EXPORT_TAGS{macros}}, ); eval { require XSLoader; XSLoader::load('Sys::Syslog', $VERSION); 1 } or do { require DynaLoader; push @ISA, 'DynaLoader'; bootstrap Sys::Syslog $VERSION; }; } # # Constants # use constant HAVE_GETPROTOBYNAME => $Config::Config{d_getpbyname}; use constant HAVE_GETPROTOBYNUMBER => $Config::Config{d_getpbynumber}; use constant HAVE_SETLOCALE => $Config::Config{d_setlocale}; use constant HAVE_IPPROTO_TCP => defined &Socket::IPPROTO_TCP ? 1 : 0; use constant HAVE_IPPROTO_UDP => defined &Socket::IPPROTO_UDP ? 1 : 0; use constant HAVE_TCP_NODELAY => defined &Socket::TCP_NODELAY ? 1 : 0; use constant SOCKET_IPPROTO_TCP => HAVE_IPPROTO_TCP ? Socket::IPPROTO_TCP : HAVE_GETPROTOBYNAME ? scalar getprotobyname("tcp") : 6; use constant SOCKET_IPPROTO_UDP => HAVE_IPPROTO_UDP ? Socket::IPPROTO_UDP : HAVE_GETPROTOBYNAME ? scalar getprotobyname("udp") : 17; use constant SOCKET_TCP_NODELAY => HAVE_TCP_NODELAY ? Socket::TCP_NODELAY : 1; # # Public variables # use vars qw($host); # host to send syslog messages to (see notes at end) # # Prototypes # sub silent_eval (&); # # Global variables # use vars qw($facility); my $connected = 0; # flag to indicate if we're connected or not my $syslog_send; # coderef of the function used to send messages my $syslog_path = undef; # syslog path for "stream" and "unix" mechanisms my $syslog_xobj = undef; # if defined, holds the external object used to send messages my $transmit_ok = 0; # flag to indicate if the last message was transmitted my $sock_port = undef; # socket port my $sock_timeout = 0; # socket timeout, see below my $current_proto = undef; # current mechanism used to transmit messages my $ident = ''; # identifiant prepended to each message $facility = ''; # current facility my $maskpri = LOG_UPTO(&LOG_DEBUG); # current log mask my %options = ( ndelay => 0, noeol => 0, nofatal => 0, nonul => 0, nowait => 0, perror => 0, pid => 0, ); # Default is now to first use the native mechanism, so Perl programs # behave like other normal Unix programs, then try other mechanisms. my @connectMethods = qw(native tcp udp unix pipe stream console); if ($^O eq "freebsd" or $^O eq "linux") { @connectMethods = grep { $_ ne 'udp' } @connectMethods; } # And on Win32 systems, we try to use the native mechanism for this # platform, the events logger, available through Win32::EventLog. EVENTLOG: { my $verbose_if_Win32 = $^O =~ /Win32/i; if (can_load_sys_syslog_win32($verbose_if_Win32)) { unshift @connectMethods, 'eventlog'; } } my @defaultMethods = @connectMethods; my @fallbackMethods = (); # The timeout in connection_ok() was pushed up to 0.25 sec in # Sys::Syslog v0.19 in order to address a heisenbug on MacOSX: # http://london.pm.org/pipermail/london.pm/Week-of-Mon-20061211/005961.html # # However, this also had the effect of slowing this test for # all other operating systems, which apparently impacted some # users (cf. CPAN-RT #34753). So, in order to make everybody # happy, the timeout is now zero by default on all systems # except on OSX where it is set to 250 msec, and can be set # with the infamous setlogsock() function. # # Update 2011-08: this issue is also been seen on multiprocessor # Debian GNU/kFreeBSD systems. See http://bugs.debian.org/627821 # and https://rt.cpan.org/Ticket/Display.html?id=69997 # Also, lowering the delay to 1 ms, which should be enough. $sock_timeout = 0.001 if $^O =~ /darwin|gnukfreebsd/; # Perl 5.6.0's warnings.pm doesn't have warnings::warnif() if (not defined &warnings::warnif) { *warnings::warnif = sub { goto &warnings::warn if warnings::enabled(__PACKAGE__) } } # coderef for a nicer handling of errors my $err_sub = $options{nofatal} ? \&warnings::warnif : \&croak; sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. no strict 'vars'; my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; croak "Sys::Syslog::constant() not defined" if $constname eq 'constant'; my ($error, $val) = constant($constname); croak $error if $error; no strict 'refs'; *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; } sub openlog { ($ident, my $logopt, $facility) = @_; # default values $ident ||= basename($0) || getlogin() || getpwuid($<) || 'syslog'; $logopt ||= ''; $facility ||= LOG_USER(); for my $opt (split /\b/, $logopt) { $options{$opt} = 1 if exists $options{$opt} } $err_sub = delete $options{nofatal} ? \&warnings::warnif : \&croak; return 1 unless $options{ndelay}; connect_log(); } sub closelog { disconnect_log() if $connected; $options{$_} = 0 for keys %options; $facility = $ident = ""; $connected = 0; return 1 } sub setlogmask { my $oldmask = $maskpri; $maskpri = shift unless $_[0] == 0; $oldmask; } my %mechanism = ( console => { check => sub { 1 }, }, eventlog => { check => sub { return can_load_sys_syslog_win32() }, err_msg => "no Win32 API available", }, inet => { check => sub { 1 }, }, native => { check => sub { 1 }, }, pipe => { check => sub { ($syslog_path) = grep { defined && length && -p && -w _ } $syslog_path, &_PATH_LOG, "/dev/log"; return $syslog_path ? 1 : 0 }, err_msg => "path not available", }, stream => { check => sub { if (not defined $syslog_path) { my @try = qw(/dev/log /dev/conslog); unshift @try, &_PATH_LOG if length &_PATH_LOG; ($syslog_path) = grep { -w } @try; } return defined $syslog_path && -w $syslog_path }, err_msg => "could not find any writable device", }, tcp => { check => sub { return 1 if defined $sock_port; if (eval { local $SIG{__DIE__}; getservbyname('syslog','tcp') || getservbyname('syslogng','tcp') }) { $host = $syslog_path; return 1 } else { return } }, err_msg => "TCP service unavailable", }, udp => { check => sub { return 1 if defined $sock_port; if (eval { local $SIG{__DIE__}; getservbyname('syslog', 'udp') }) { $host = $syslog_path; return 1 } else { return } }, err_msg => "UDP service unavailable", }, unix => { check => sub { my @try = ($syslog_path, &_PATH_LOG); ($syslog_path) = grep { defined && length && -w } @try; return defined $syslog_path && -w $syslog_path }, err_msg => "path not available", }, ); sub setlogsock { my %opt; # handle arguments # - old API: setlogsock($sock_type, $sock_path, $sock_timeout) # - new API: setlogsock(\%options) croak "setlogsock(): Invalid number of arguments" unless @_ >= 1 and @_ <= 3; if (my $ref = ref $_[0]) { if ($ref eq "HASH") { %opt = %{ $_[0] }; croak "setlogsock(): No argument given" unless keys %opt; } elsif ($ref eq "ARRAY") { @opt{qw< type path timeout >} = @_; } else { croak "setlogsock(): Unexpected \L$ref\E reference" } } else { @opt{qw< type path timeout >} = @_; } # check socket type, remove invalid ones my $diag_invalid_type = "setlogsock(): Invalid type%s; must be one of " . join ", ", map { "'$_'" } sort keys %mechanism; croak sprintf $diag_invalid_type, "" unless defined $opt{type}; my @sock_types = ref $opt{type} eq "ARRAY" ? @{$opt{type}} : ($opt{type}); my @tmp; for my $sock_type (@sock_types) { carp sprintf $diag_invalid_type, " '$sock_type'" and next unless exists $mechanism{$sock_type}; push @tmp, "tcp", "udp" and next if $sock_type eq "inet"; push @tmp, $sock_type; } @sock_types = @tmp; # set global options $syslog_path = $opt{path} if defined $opt{path}; $host = $opt{host} if defined $opt{host}; $sock_timeout = $opt{timeout} if defined $opt{timeout}; $sock_port = $opt{port} if defined $opt{port}; disconnect_log() if $connected; $transmit_ok = 0; @fallbackMethods = (); @connectMethods = (); my $found = 0; # check each given mechanism and test if it can be used on the current system for my $sock_type (@sock_types) { if ( $mechanism{$sock_type}{check}->() ) { push @connectMethods, $sock_type; $found = 1; } else { warnings::warnif("setlogsock(): type='$sock_type': " . $mechanism{$sock_type}{err_msg}); } } # if no mechanism worked from the given ones, use the default ones @connectMethods = @defaultMethods unless @connectMethods; return $found; } sub syslog { my ($priority, $mask, @args) = @_; my ($message, $buf); my (@words, $num, $numpri, $numfac, $sum); my $failed = undef; my $fail_time = undef; my $error = $!; # if $ident is undefined, it means openlog() wasn't previously called # so do it now in order to have sensible defaults openlog() unless $ident; local $facility = $facility; # may need to change temporarily. croak "syslog: expecting argument \$priority" unless defined $priority; croak "syslog: expecting argument \$format" unless defined $mask; if ($priority =~ /^\d+$/) { $numpri = LOG_PRI($priority); $numfac = LOG_FAC($priority) << 3; undef $numfac if $numfac == 0; # no facility given => use default } elsif ($priority =~ /^\w+/) { # Allow "level" or "level|facility". @words = split /\W+/, $priority, 2; undef $numpri; undef $numfac; for my $word (@words) { next if length $word == 0; # Translate word to number. $num = xlate($word); if ($num < 0) { croak "syslog: invalid level/facility: $word" } elsif ($num <= LOG_PRIMASK() and $word ne "kern") { croak "syslog: too many levels given: $word" if defined $numpri; $numpri = $num; } else { croak "syslog: too many facilities given: $word" if defined $numfac; $facility = $word if $word =~ /^[A-Za-z]/; $numfac = $num; } } } else { croak "syslog: invalid level/facility: $priority" } croak "syslog: level must be given" unless defined $numpri; # don't log if priority is below mask level return 0 unless LOG_MASK($numpri) & $maskpri; if (not defined $numfac) { # Facility not specified in this call. $facility = 'user' unless $facility; $numfac = xlate($facility); } connect_log() unless $connected; if ($mask =~ /%m/) { # escape percent signs for sprintf() $error =~ s/%/%%/g if @args; # replace %m with $error, if preceded by an even number of percent signs $mask =~ s/(?<!%)((?:%%)*)%m/$1$error/g; } # add (or not) a newline $mask .= "\n" if !$options{noeol} and rindex($mask, "\n") == -1; $message = @args ? sprintf($mask, @args) : $mask; if ($current_proto eq 'native') { $buf = $message; } elsif ($current_proto eq 'eventlog') { $buf = $message; } else { my $whoami = $ident; $whoami .= "[$$]" if $options{pid}; $sum = $numpri + $numfac; my $oldlocale; if (HAVE_SETLOCALE) { $oldlocale = setlocale(LC_TIME); setlocale(LC_TIME, 'C'); } # %e format isn't available on all systems (Win32, cf. CPAN RT #69310) my $day = strftime "%e", localtime; if (index($day, "%") == 0) { $day = strftime "%d", localtime; $day =~ s/^0/ /; } my $timestamp = strftime "%b $day %H:%M:%S", localtime; setlocale(LC_TIME, $oldlocale) if HAVE_SETLOCALE; # construct the stream that will be transmitted $buf = "<$sum>$timestamp $whoami: $message"; # add (or not) a NUL character $buf .= "\0" if !$options{nonul}; } # handle PERROR option # "native" mechanism already handles it by itself if ($options{perror} and $current_proto ne 'native') { my $whoami = $ident; $whoami .= "[$$]" if $options{pid}; print STDERR "$whoami: $message"; print STDERR "\n" if rindex($message, "\n") == -1; } # it's possible that we'll get an error from sending # (e.g. if method is UDP and there is no UDP listener, # then we'll get ECONNREFUSED on the send). So what we # want to do at this point is to fallback onto a different # connection method. while (scalar @fallbackMethods || $syslog_send) { if ($failed && (time - $fail_time) > 60) { # it's been a while... maybe things have been fixed @fallbackMethods = (); disconnect_log(); $transmit_ok = 0; # make it look like a fresh attempt connect_log(); } if ($connected && !connection_ok()) { # Something was OK, but has now broken. Remember coz we'll # want to go back to what used to be OK. $failed = $current_proto unless $failed; $fail_time = time; disconnect_log(); } connect_log() unless $connected; $failed = undef if ($current_proto && $failed && $current_proto eq $failed); if ($syslog_send) { if ($syslog_send->($buf, $numpri, $numfac)) { $transmit_ok++; return 1; } # typically doesn't happen, since errors are rare from write(). disconnect_log(); } } # could not send, could not fallback onto a working # connection method. Lose. return 0; } sub _syslog_send_console { my ($buf) = @_; # The console print is a method which could block # so we do it in a child process and always return success # to the caller. if (my $pid = fork) { if ($options{nowait}) { return 1; } else { if (waitpid($pid, 0) >= 0) { return ($? >> 8); } else { # it's possible that the caller has other # plans for SIGCHLD, so let's not interfere return 1; } } } else { if (open(CONS, ">/dev/console")) { my $ret = print CONS $buf . "\r"; # XXX: should this be \x0A ? POSIX::_exit($ret) if defined $pid; close CONS; } POSIX::_exit(0) if defined $pid; } } sub _syslog_send_stream { my ($buf) = @_; # XXX: this only works if the OS stream implementation makes a write # look like a putmsg() with simple header. For instance it works on # Solaris 8 but not Solaris 7. # To be correct, it should use a STREAMS API, but perl doesn't have one. return syswrite(SYSLOG, $buf, length($buf)); } sub _syslog_send_pipe { my ($buf) = @_; return print SYSLOG $buf; } sub _syslog_send_socket { my ($buf) = @_; return syswrite(SYSLOG, $buf, length($buf)); #return send(SYSLOG, $buf, 0); } sub _syslog_send_native { my ($buf, $numpri, $numfac) = @_; syslog_xs($numpri|$numfac, $buf); return 1; } # xlate() # ----- # private function to translate names to numeric values # sub xlate { my ($name) = @_; return $name+0 if $name =~ /^\s*\d+\s*$/; $name = uc $name; $name = "LOG_$name" unless $name =~ /^LOG_/; # ExtUtils::Constant 0.20 introduced a new way to implement # constants, called ProxySubs. When it was used to generate # the C code, the constant() function no longer returns the # correct value. Therefore, we first try a direct call to # constant(), and if the value is an error we try to call the # constant by its full name. my $value = constant($name); if (index($value, "not a valid") >= 0) { $name = "Sys::Syslog::$name"; $value = eval { no strict "refs"; &$name }; $value = $@ unless defined $value; } $value = -1 if index($value, "not a valid") >= 0; return defined $value ? $value : -1; } # connect_log() # ----------- # This function acts as a kind of front-end: it tries to connect to # a syslog service using the selected methods, trying each one in the # selected order. # sub connect_log { @fallbackMethods = @connectMethods unless scalar @fallbackMethods; if ($transmit_ok && $current_proto) { # Retry what we were on, because it has worked in the past. unshift(@fallbackMethods, $current_proto); } $connected = 0; my @errs = (); my $proto = undef; while ($proto = shift @fallbackMethods) { no strict 'refs'; my $fn = "connect_$proto"; $connected = &$fn(\@errs) if defined &$fn; last if $connected; } $transmit_ok = 0; if ($connected) { $current_proto = $proto; my ($old) = select(SYSLOG); $| = 1; select($old); } else { @fallbackMethods = (); $err_sub->(join "\n\t- ", "no connection to syslog available", @errs); return undef; } } sub connect_tcp { my ($errs) = @_; my $port = $sock_port || eval { local $SIG{__DIE__}; getservbyname('syslog', 'tcp') } || eval { local $SIG{__DIE__}; getservbyname('syslogng', 'tcp') }; if (!defined $port) { push @$errs, "getservbyname failed for syslog/tcp and syslogng/tcp"; return 0; } my $addr; if (defined $host) { $addr = inet_aton($host); if (!$addr) { push @$errs, "can't lookup $host"; return 0; } } else { $addr = INADDR_LOOPBACK; } $addr = sockaddr_in($port, $addr); if (!socket(SYSLOG, AF_INET, SOCK_STREAM, SOCKET_IPPROTO_TCP)) { push @$errs, "tcp socket: $!"; return 0; } setsockopt(SYSLOG, SOL_SOCKET, SO_KEEPALIVE, 1); setsockopt(SYSLOG, SOCKET_IPPROTO_TCP, SOCKET_TCP_NODELAY, 1); if (!connect(SYSLOG, $addr)) { push @$errs, "tcp connect: $!"; return 0; } $syslog_send = \&_syslog_send_socket; return 1; } sub connect_udp { my ($errs) = @_; my $port = $sock_port || eval { local $SIG{__DIE__}; getservbyname('syslog', 'udp') }; if (!defined $port) { push @$errs, "getservbyname failed for syslog/udp"; return 0; } my $addr; if (defined $host) { $addr = inet_aton($host); if (!$addr) { push @$errs, "can't lookup $host"; return 0; } } else { $addr = INADDR_LOOPBACK; } $addr = sockaddr_in($port, $addr); if (!socket(SYSLOG, AF_INET, SOCK_DGRAM, SOCKET_IPPROTO_UDP)) { push @$errs, "udp socket: $!"; return 0; } if (!connect(SYSLOG, $addr)) { push @$errs, "udp connect: $!"; return 0; } # We want to check that the UDP connect worked. However the only # way to do that is to send a message and see if an ICMP is returned _syslog_send_socket(""); if (!connection_ok()) { push @$errs, "udp connect: nobody listening"; return 0; } $syslog_send = \&_syslog_send_socket; return 1; } sub connect_stream { my ($errs) = @_; # might want syslog_path to be variable based on syslog.h (if only # it were in there!) $syslog_path = '/dev/conslog' unless defined $syslog_path; if (!-w $syslog_path) { push @$errs, "stream $syslog_path is not writable"; return 0; } require Fcntl; if (!sysopen(SYSLOG, $syslog_path, Fcntl::O_WRONLY(), 0400)) { push @$errs, "stream can't open $syslog_path: $!"; return 0; } $syslog_send = \&_syslog_send_stream; return 1; } sub connect_pipe { my ($errs) = @_; $syslog_path ||= &_PATH_LOG || "/dev/log"; if (not -w $syslog_path) { push @$errs, "$syslog_path is not writable"; return 0; } if (not open(SYSLOG, ">$syslog_path")) { push @$errs, "can't write to $syslog_path: $!"; return 0; } $syslog_send = \&_syslog_send_pipe; return 1; } sub connect_unix { my ($errs) = @_; $syslog_path ||= _PATH_LOG() if length _PATH_LOG(); if (not defined $syslog_path) { push @$errs, "_PATH_LOG not available in syslog.h and no user-supplied socket path"; return 0; } if (not (-S $syslog_path or -c _)) { push @$errs, "$syslog_path is not a socket"; return 0; } my $addr = sockaddr_un($syslog_path); if (!$addr) { push @$errs, "can't locate $syslog_path"; return 0; } if (!socket(SYSLOG, AF_UNIX, SOCK_STREAM, 0)) { push @$errs, "unix stream socket: $!"; return 0; } if (!connect(SYSLOG, $addr)) { if (!socket(SYSLOG, AF_UNIX, SOCK_DGRAM, 0)) { push @$errs, "unix dgram socket: $!"; return 0; } if (!connect(SYSLOG, $addr)) { push @$errs, "unix dgram connect: $!"; return 0; } } $syslog_send = \&_syslog_send_socket; return 1; } sub connect_native { my ($errs) = @_; my $logopt = 0; # reconstruct the numeric equivalent of the options for my $opt (keys %options) { $logopt += xlate($opt) if $options{$opt} } openlog_xs($ident, $logopt, xlate($facility)); $syslog_send = \&_syslog_send_native; return 1; } sub connect_eventlog { my ($errs) = @_; $syslog_xobj = Sys::Syslog::Win32::_install(); $syslog_send = \&Sys::Syslog::Win32::_syslog_send; return 1; } sub connect_console { my ($errs) = @_; if (!-w '/dev/console') { push @$errs, "console is not writable"; return 0; } $syslog_send = \&_syslog_send_console; return 1; } # To test if the connection is still good, we need to check if any # errors are present on the connection. The errors will not be raised # by a write. Instead, sockets are made readable and the next read # would cause the error to be returned. Unfortunately the syslog # 'protocol' never provides anything for us to read. But with # judicious use of select(), we can see if it would be readable... sub connection_ok { return 1 if defined $current_proto and ( $current_proto eq 'native' or $current_proto eq 'console' or $current_proto eq 'eventlog' ); my $rin = ''; vec($rin, fileno(SYSLOG), 1) = 1; my $ret = select $rin, undef, $rin, $sock_timeout; return ($ret ? 0 : 1); } sub disconnect_log { $connected = 0; $syslog_send = undef; if (defined $current_proto and $current_proto eq 'native') { closelog_xs(); unshift @fallbackMethods, $current_proto; $current_proto = undef; return 1; } elsif (defined $current_proto and $current_proto eq 'eventlog') { $syslog_xobj->Close(); unshift @fallbackMethods, $current_proto; $current_proto = undef; return 1; } return close SYSLOG; } # # Wrappers around eval() that makes sure that nobody, ever knows that # we wanted to poke & test if something was here or not. This is needed # because some applications are trying to be too smart, install their # own __DIE__ handler, and mysteriously, things are starting to fail # when they shouldn't. SpamAssassin among them. # sub silent_eval (&) { local($SIG{__DIE__}, $SIG{__WARN__}, $@); return eval { $_[0]->() } } sub can_load_sys_syslog_win32 { my ($verbose) = @_; local($SIG{__DIE__}, $SIG{__WARN__}, $@); (my $module_path = __FILE__) =~ s:Syslog.pm$:Syslog/Win32.pm:; my $loaded = eval { require $module_path } ? 1 : 0; warn $@ if not $loaded and $verbose; return $loaded } "Eighth Rule: read the documentation." __END__ =head1 NAME Sys::Syslog - Perl interface to the UNIX syslog(3) calls =head1 VERSION This is the documentation of version 0.35 =head1 SYNOPSIS use Sys::Syslog; # all except setlogsock() use Sys::Syslog qw(:standard :macros); # standard functions & macros openlog($ident, $logopt, $facility); # don't forget this syslog($priority, $format, @args); $oldmask = setlogmask($mask_priority); closelog(); =head1 DESCRIPTION C<Sys::Syslog> is an interface to the UNIX C<syslog(3)> program. Call C<syslog()> with a string priority and a list of C<printf()> args just like C<syslog(3)>. =head1 EXPORTS C<Sys::Syslog> exports the following C<Exporter> tags: =over 4 =item * C<:standard> exports the standard C<syslog(3)> functions: openlog closelog setlogmask syslog =item * C<:extended> exports the Perl specific functions for C<syslog(3)>: setlogsock =item * C<:macros> exports the symbols corresponding to most of your C<syslog(3)> macros and the C<LOG_UPTO()> and C<LOG_MASK()> functions. See L<"CONSTANTS"> for the supported constants and their meaning. =back By default, C<Sys::Syslog> exports the symbols from the C<:standard> tag. =head1 FUNCTIONS =over 4 =item B<openlog($ident, $logopt, $facility)> Opens the syslog. C<$ident> is prepended to every message. C<$logopt> contains zero or more of the options detailed below. C<$facility> specifies the part of the system to report about, for example C<LOG_USER> or C<LOG_LOCAL0>: see L<"Facilities"> for a list of well-known facilities, and your C<syslog(3)> documentation for the facilities available in your system. Check L<"SEE ALSO"> for useful links. Facility can be given as a string or a numeric macro. This function will croak if it can't connect to the syslog daemon. Note that C<openlog()> now takes three arguments, just like C<openlog(3)>. B<You should use C<openlog()> before calling C<syslog()>.> B<Options> =over 4 =item * C<cons> - This option is ignored, since the failover mechanism will drop down to the console automatically if all other media fail. =item * C<ndelay> - Open the connection immediately (normally, the connection is opened when the first message is logged). =item * C<noeol> - When set to true, no end of line character (C<\n>) will be appended to the message. This can be useful for some syslog daemons. Added in C<Sys::Syslog> 0.29. =item * C<nofatal> - When set to true, C<openlog()> and C<syslog()> will only emit warnings instead of dying if the connection to the syslog can't be established. Added in C<Sys::Syslog> 0.15. =item * C<nonul> - When set to true, no C<NUL> character (C<\0>) will be appended to the message. This can be useful for some syslog daemons. Added in C<Sys::Syslog> 0.29. =item * C<nowait> - Don't wait for child processes that may have been created while logging the message. (The GNU C library does not create a child process, so this option has no effect on Linux.) =item * C<perror> - Write the message to standard error output as well to the system log. Added in C<Sys::Syslog> 0.22. =item * C<pid> - Include PID with each message. =back B<Examples> Open the syslog with options C<ndelay> and C<pid>, and with facility C<LOCAL0>: openlog($name, "ndelay,pid", "local0"); Same thing, but this time using the macro corresponding to C<LOCAL0>: openlog($name, "ndelay,pid", LOG_LOCAL0); =item B<syslog($priority, $message)> =item B<syslog($priority, $format, @args)> If C<$priority> permits, logs C<$message> or C<sprintf($format, @args)> with the addition that C<%m> in $message or C<$format> is replaced with C<"$!"> (the latest error message). C<$priority> can specify a level, or a level and a facility. Levels and facilities can be given as strings or as macros. When using the C<eventlog> mechanism, priorities C<DEBUG> and C<INFO> are mapped to event type C<informational>, C<NOTICE> and C<WARNING> to C<warning> and C<ERR> to C<EMERG> to C<error>. If you didn't use C<openlog()> before using C<syslog()>, C<syslog()> will try to guess the C<$ident> by extracting the shortest prefix of C<$format> that ends in a C<":">. B<Examples> # informational level syslog("info", $message); syslog(LOG_INFO, $message); # information level, Local0 facility syslog("info|local0", $message); syslog(LOG_INFO|LOG_LOCAL0, $message); =over 4 =item B<Note> C<Sys::Syslog> version v0.07 and older passed the C<$message> as the formatting string to C<sprintf()> even when no formatting arguments were provided. If the code calling C<syslog()> might execute with older versions of this module, make sure to call the function as C<syslog($priority, "%s", $message)> instead of C<syslog($priority, $message)>. This protects against hostile formatting sequences that might show up if $message contains tainted data. =back =item B<setlogmask($mask_priority)> Sets the log mask for the current process to C<$mask_priority> and returns the old mask. If the mask argument is 0, the current log mask is not modified. See L<"Levels"> for the list of available levels. You can use the C<LOG_UPTO()> function to allow all levels up to a given priority (but it only accept the numeric macros as arguments). B<Examples> Only log errors: setlogmask( LOG_MASK(LOG_ERR) ); Log everything except informational messages: setlogmask( ~(LOG_MASK(LOG_INFO)) ); Log critical messages, errors and warnings: setlogmask( LOG_MASK(LOG_CRIT) | LOG_MASK(LOG_ERR) | LOG_MASK(LOG_WARNING) ); Log all messages up to debug: setlogmask( LOG_UPTO(LOG_DEBUG) ); =item B<setlogsock()> Sets the socket type and options to be used for the next call to C<openlog()> or C<syslog()>. Returns true on success, C<undef> on failure. Being Perl-specific, this function has evolved along time. It can currently be called as follow: =over =item * C<setlogsock($sock_type)> =item * C<setlogsock($sock_type, $stream_location)> (added in Perl 5.004_02) =item * C<setlogsock($sock_type, $stream_location, $sock_timeout)> (added in C<Sys::Syslog> 0.25) =item * C<setlogsock(\%options)> (added in C<Sys::Syslog> 0.28) =back The available options are: =over =item * C<type> - equivalent to C<$sock_type>, selects the socket type (or "mechanism"). An array reference can be passed to specify several mechanisms to try, in the given order. =item * C<path> - equivalent to C<$stream_location>, sets the stream location. Defaults to standard Unix location, or C<_PATH_LOG>. =item * C<timeout> - equivalent to C<$sock_timeout>, sets the socket timeout in seconds. Defaults to 0 on all systems except S<Mac OS X> where it is set to 0.25 sec. =item * C<host> - sets the hostname to send the messages to. Defaults to the local host. =item * C<port> - sets the TCP or UDP port to connect to. Defaults to the first standard syslog port available on the system. =back The available mechanisms are: =over =item * C<"native"> - use the native C functions from your C<syslog(3)> library (added in C<Sys::Syslog> 0.15). =item * C<"eventlog"> - send messages to the Win32 events logger (Win32 only; added in C<Sys::Syslog> 0.19). =item * C<"tcp"> - connect to a TCP socket, on the C<syslog/tcp> or C<syslogng/tcp> service. See also the C<host>, C<port> and C<timeout> options. =item * C<"udp"> - connect to a UDP socket, on the C<syslog/udp> service. See also the C<host>, C<port> and C<timeout> options. =item * C<"inet"> - connect to an INET socket, either TCP or UDP, tried in that order. See also the C<host>, C<port> and C<timeout> options. =item * C<"unix"> - connect to a UNIX domain socket (in some systems a character special device). The name of that socket is given by the C<path> option or, if omitted, the value returned by the C<_PATH_LOG> macro (if your system defines it), F</dev/log> or F</dev/conslog>, whichever is writable. =item * C<"stream"> - connect to the stream indicated by the C<path> option, or, if omitted, the value returned by the C<_PATH_LOG> macro (if your system defines it), F</dev/log> or F</dev/conslog>, whichever is writable. For example Solaris and IRIX system may prefer C<"stream"> instead of C<"unix">. =item * C<"pipe"> - connect to the named pipe indicated by the C<path> option, or, if omitted, to the value returned by the C<_PATH_LOG> macro (if your system defines it), or F</dev/log> (added in C<Sys::Syslog> 0.21). HP-UX is a system which uses such a named pipe. =item * C<"console"> - send messages directly to the console, as for the C<"cons"> option of C<openlog()>. =back The default is to try C<native>, C<tcp>, C<udp>, C<unix>, C<pipe>, C<stream>, C<console>. Under systems with the Win32 API, C<eventlog> will be added as the first mechanism to try if C<Win32::EventLog> is available. Giving an invalid value for C<$sock_type> will C<croak>. B<Examples> Select the UDP socket mechanism: setlogsock("udp"); Send messages using the TCP socket mechanism on a custom port: setlogsock({ type => "tcp", port => 2486 }); Send messages to a remote host using the TCP socket mechanism: setlogsock({ type => "tcp", host => $loghost }); Try the native, UDP socket then UNIX domain socket mechanisms: setlogsock(["native", "udp", "unix"]); =over =item B<Note> Now that the "native" mechanism is supported by C<Sys::Syslog> and selected by default, the use of the C<setlogsock()> function is discouraged because other mechanisms are less portable across operating systems. Authors of modules and programs that use this function, especially its cargo-cult form C<setlogsock("unix")>, are advised to remove any occurrence of it unless they specifically want to use a given mechanism (like TCP or UDP to connect to a remote host). =back =item B<closelog()> Closes the log file and returns true on success. =back =head1 THE RULES OF SYS::SYSLOG I<The First Rule of Sys::Syslog is:> You do not call C<setlogsock>. I<The Second Rule of Sys::Syslog is:> You B<do not> call C<setlogsock>. I<The Third Rule of Sys::Syslog is:> The program crashes, C<die>s, calls C<closelog>, the log is over. I<The Fourth Rule of Sys::Syslog is:> One facility, one priority. I<The Fifth Rule of Sys::Syslog is:> One log at a time. I<The Sixth Rule of Sys::Syslog is:> No C<syslog> before C<openlog>. I<The Seventh Rule of Sys::Syslog is:> Logs will go on as long as they have to. I<The Eighth, and Final Rule of Sys::Syslog is:> If this is your first use of Sys::Syslog, you must read the doc. =head1 EXAMPLES An example: openlog($program, 'cons,pid', 'user'); syslog('info', '%s', 'this is another test'); syslog('mail|warning', 'this is a better test: %d', time); closelog(); syslog('debug', 'this is the last test'); Another example: openlog("$program $$", 'ndelay', 'user'); syslog('notice', 'fooprogram: this is really done'); Example of use of C<%m>: $! = 55; syslog('info', 'problem was %m'); # %m == $! in syslog(3) Log to UDP port on C<$remotehost> instead of logging locally: setlogsock("udp", $remotehost); openlog($program, 'ndelay', 'user'); syslog('info', 'something happened over here'); =head1 CONSTANTS =head2 Facilities =over 4 =item * C<LOG_AUDIT> - audit daemon (IRIX); falls back to C<LOG_AUTH> =item * C<LOG_AUTH> - security/authorization messages =item * C<LOG_AUTHPRIV> - security/authorization messages (private) =item * C<LOG_CONSOLE> - C</dev/console> output (FreeBSD); falls back to C<LOG_USER> =item * C<LOG_CRON> - clock daemons (B<cron> and B<at>) =item * C<LOG_DAEMON> - system daemons without separate facility value =item * C<LOG_FTP> - FTP daemon =item * C<LOG_KERN> - kernel messages =item * C<LOG_INSTALL> - installer subsystem (Mac OS X); falls back to C<LOG_USER> =item * C<LOG_LAUNCHD> - launchd - general bootstrap daemon (Mac OS X); falls back to C<LOG_DAEMON> =item * C<LOG_LFMT> - logalert facility; falls back to C<LOG_USER> =item * C<LOG_LOCAL0> through C<LOG_LOCAL7> - reserved for local use =item * C<LOG_LPR> - line printer subsystem =item * C<LOG_MAIL> - mail subsystem =item * C<LOG_NETINFO> - NetInfo subsystem (Mac OS X); falls back to C<LOG_DAEMON> =item * C<LOG_NEWS> - USENET news subsystem =item * C<LOG_NTP> - NTP subsystem (FreeBSD, NetBSD); falls back to C<LOG_DAEMON> =item * C<LOG_RAS> - Remote Access Service (VPN / PPP) (Mac OS X); falls back to C<LOG_AUTH> =item * C<LOG_REMOTEAUTH> - remote authentication/authorization (Mac OS X); falls back to C<LOG_AUTH> =item * C<LOG_SECURITY> - security subsystems (firewalling, etc.) (FreeBSD); falls back to C<LOG_AUTH> =item * C<LOG_SYSLOG> - messages generated internally by B<syslogd> =item * C<LOG_USER> (default) - generic user-level messages =item * C<LOG_UUCP> - UUCP subsystem =back =head2 Levels =over 4 =item * C<LOG_EMERG> - system is unusable =item * C<LOG_ALERT> - action must be taken immediately =item * C<LOG_CRIT> - critical conditions =item * C<LOG_ERR> - error conditions =item * C<LOG_WARNING> - warning conditions =item * C<LOG_NOTICE> - normal, but significant, condition =item * C<LOG_INFO> - informational message =item * C<LOG_DEBUG> - debug-level message =back =head1 DIAGNOSTICS =over =item C<Invalid argument passed to setlogsock> B<(F)> You gave C<setlogsock()> an invalid value for C<$sock_type>. =item C<eventlog passed to setlogsock, but no Win32 API available> B<(W)> You asked C<setlogsock()> to use the Win32 event logger but the operating system running the program isn't Win32 or does not provides Win32 compatible facilities. =item C<no connection to syslog available> B<(F)> C<syslog()> failed to connect to the specified socket. =item C<stream passed to setlogsock, but %s is not writable> B<(W)> You asked C<setlogsock()> to use a stream socket, but the given path is not writable. =item C<stream passed to setlogsock, but could not find any device> B<(W)> You asked C<setlogsock()> to use a stream socket, but didn't provide a path, and C<Sys::Syslog> was unable to find an appropriate one. =item C<tcp passed to setlogsock, but tcp service unavailable> B<(W)> You asked C<setlogsock()> to use a TCP socket, but the service is not available on the system. =item C<syslog: expecting argument %s> B<(F)> You forgot to give C<syslog()> the indicated argument. =item C<syslog: invalid level/facility: %s> B<(F)> You specified an invalid level or facility. =item C<syslog: too many levels given: %s> B<(F)> You specified too many levels. =item C<syslog: too many facilities given: %s> B<(F)> You specified too many facilities. =item C<syslog: level must be given> B<(F)> You forgot to specify a level. =item C<udp passed to setlogsock, but udp service unavailable> B<(W)> You asked C<setlogsock()> to use a UDP socket, but the service is not available on the system. =item C<unix passed to setlogsock, but path not available> B<(W)> You asked C<setlogsock()> to use a UNIX socket, but C<Sys::Syslog> was unable to find an appropriate an appropriate device. =back =head1 HISTORY C<Sys::Syslog> is a core module, part of the standard Perl distribution since 1990. At this time, modules as we know them didn't exist, the Perl library was a collection of F<.pl> files, and the one for sending syslog messages with was simply F<lib/syslog.pl>, included with Perl 3.0. It was converted as a module with Perl 5.0, but had a version number only starting with Perl 5.6. Here is a small table with the matching Perl and C<Sys::Syslog> versions. Sys::Syslog Perl ----------- ---- undef 5.0.0 ~ 5.5.4 0.01 5.6.* 0.03 5.8.0 0.04 5.8.1, 5.8.2, 5.8.3 0.05 5.8.4, 5.8.5, 5.8.6 0.06 5.8.7 0.13 5.8.8 0.22 5.10.0 0.27 5.8.9, 5.10.1 ~ 5.14.* 0.29 5.16.* 0.32 5.18.* 0.33 5.20.* 0.33 5.22.* =head1 SEE ALSO =head2 Other modules L<Log::Log4perl> - Perl implementation of the Log4j API L<Log::Dispatch> - Dispatches messages to one or more outputs L<Log::Report> - Report a problem, with exceptions and language support =head2 Manual Pages L<syslog(3)> SUSv3 issue 6, IEEE Std 1003.1, 2004 edition, L<http://www.opengroup.org/onlinepubs/000095399/basedefs/syslog.h.html> GNU C Library documentation on syslog, L<http://www.gnu.org/software/libc/manual/html_node/Syslog.html> FreeBSD documentation on syslog, L<https://www.freebsd.org/cgi/man.cgi?query=syslog> Solaris 11 documentation on syslog, L<https://docs.oracle.com/cd/E53394_01/html/E54766/syslog-3c.html> Mac OS X documentation on syslog, L<http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/syslog.3.html> IRIX documentation on syslog, L<http://nixdoc.net/man-pages/IRIX/man3/syslog.3c.html> AIX 5L 5.3 documentation on syslog, L<http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf2/syslog.htm> HP-UX 11i documentation on syslog, L<http://docs.hp.com/en/B2355-60130/syslog.3C.html> Tru64 documentation on syslog, L<http://nixdoc.net/man-pages/Tru64/man3/syslog.3.html> Stratus VOS 15.1, L<http://stratadoc.stratus.com/vos/15.1.1/r502-01/wwhelp/wwhimpl/js/html/wwhelp.htm?context=r502-01&file=ch5r502-01bi.html> =head2 RFCs I<RFC 3164 - The BSD syslog Protocol>, L<http://www.faqs.org/rfcs/rfc3164.html> -- Please note that this is an informational RFC, and therefore does not specify a standard of any kind. I<RFC 3195 - Reliable Delivery for syslog>, L<http://www.faqs.org/rfcs/rfc3195.html> =head2 Articles I<Syslogging with Perl>, L<http://lexington.pm.org/meetings/022001.html> =head2 Event Log Windows Event Log, L<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wes/wes/windows_event_log.asp> =head1 AUTHORS & ACKNOWLEDGEMENTS Tom Christiansen E<lt>F<tchrist (at) perl.com>E<gt> and Larry Wall E<lt>F<larry (at) wall.org>E<gt>. UNIX domain sockets added by Sean Robinson E<lt>F<robinson_s (at) sc.maricopa.edu>E<gt> with support from Tim Bunce E<lt>F<Tim.Bunce (at) ig.co.uk>E<gt> and the C<perl5-porters> mailing list. Dependency on F<syslog.ph> replaced with XS code by Tom Hughes E<lt>F<tom (at) compton.nu>E<gt>. Code for C<constant()>s regenerated by Nicholas Clark E<lt>F<nick (at) ccl4.org>E<gt>. Failover to different communication modes by Nick Williams E<lt>F<Nick.Williams (at) morganstanley.com>E<gt>. Extracted from core distribution for publishing on the CPAN by SE<eacute>bastien Aperghis-Tramoni E<lt>sebastien (at) aperghis.netE<gt>. XS code for using native C functions borrowed from C<L<Unix::Syslog>>, written by Marcus Harnisch E<lt>F<marcus.harnisch (at) gmx.net>E<gt>. Yves Orton suggested and helped for making C<Sys::Syslog> use the native event logger under Win32 systems. Jerry D. Hedden and Reini Urban provided greatly appreciated help to debug and polish C<Sys::Syslog> under Cygwin. =head1 BUGS Please report any bugs or feature requests to C<bug-sys-syslog (at) rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/Public/Dist/Display.html?Name=Sys-Syslog>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Sys::Syslog You can also look for information at: =over =item * Perl Documentation L<http://perldoc.perl.org/Sys/Syslog.html> =item * MetaCPAN L<https://metacpan.org/module/Sys::Syslog> =item * Search CPAN L<http://search.cpan.org/dist/Sys-Syslog/> =item * AnnoCPAN: Annotated CPAN documentation L<http://annocpan.org/dist/Sys-Syslog> =item * CPAN Ratings L<http://cpanratings.perl.org/d/Sys-Syslog> =item * RT: CPAN's request tracker L<http://rt.cpan.org/Dist/Display.html?Queue=Sys-Syslog> =back The source code is available on Git Hub: L<https://github.com/maddingue/Sys-Syslog/> =head1 COPYRIGHT Copyright (C) 1990-2012 by Larry Wall and others. =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut =begin comment Notes for the future maintainer (even if it's still me..) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Using Google Code Search, I search who on Earth was relying on $host being public. It found 5 hits: * First was inside Indigo Star Perl2exe documentation. Just an old version of Sys::Syslog. * One real hit was inside DalWeathDB, a weather related program. It simply does a $Sys::Syslog::host = '127.0.0.1'; - L<http://www.gallistel.net/nparker/weather/code/> * Two hits were in TPC, a fax server thingy. It does a $Sys::Syslog::host = $TPC::LOGHOST; but also has this strange piece of code: # work around perl5.003 bug sub Sys::Syslog::hostname {} I don't know what bug the author referred to. - L<http://www.tpc.int/> - L<ftp://ftp-usa.tpc.int/pub/tpc/server/UNIX/> * Last hit was in Filefix, which seems to be a FIDOnet mail program (!). This one does not use $host, but has the following piece of code: sub Sys::Syslog::hostname { use Sys::Hostname; return hostname; } I guess this was a more elaborate form of the previous bit, maybe because of a bug in Sys::Syslog back then? - L<ftp://ftp.kiae.su/pub/unix/fido/> Links ----- Linux Fast-STREAMS - L<http://www.openss7.org/streams.html> II12021: SYSLOGD HOWTO TCPIPINFO (z/OS, OS/390, MVS) - L<http://www-1.ibm.com/support/docview.wss?uid=isg1II12021> Getting the most out of the Event Viewer - L<http://www.codeproject.com/dotnet/evtvwr.asp?print=true> Log events to the Windows NT Event Log with JNI - L<http://www.javaworld.com/javaworld/jw-09-2001/jw-0928-ntmessages.html> =end comment DBI/Changes.pm 0000644 00000363213 15037233314 0007061 0 ustar 00 =head1 NAME DBI::Changes - List of significant changes to the DBI =encoding ISO8859-1 =cut =head2 Changes in DBI 1.641 - 19th March 2018 Remove dependency on Storable 2.16 introduced in DBI 1.639 thanks to Ribasushi #60 Avoid compiler warnings in Driver.xst #59 thanks to pali #59 =head2 Changes in DBI 1.640 - 28th January 2018 Fix test t/91_store_warning.t for perl 5.10.0 thanks to pali #57 Add Perl 5.10.0 and 5.8.1 specific versions to Travis testing thanks to pali #57 Add registration of mariadb_ prefix for new DBD::MariaDB driver thanks to pali #56 =head2 Changes in DBI 1.639 - 28th December 2017 Fix UTF-8 support for warn/croak calls within DBI internals, thanks to pali #53 Fix dependency on Storable for perl older than 5.8.9, thanks to H.Merijn Brand. Add DBD::Mem driver, a pure-perl in-memory driver using DBI::DBD::SqlEngine, thanks to Jens Rehsack #42 Corrected missing semicolon in example in documentation, thanks to pali #55 =head2 Changes in DBI 1.637 - 16th August 2017 Fix use of externally controlled format string (CWE-134) thanks to pali #44 This could cause a crash if, for example, a db error contained a %. https://cwe.mitre.org/data/definitions/134.html Fix extension detection for DBD::File related drivers Fix tests for perl without dot in @INC RT#120443 Fix loss of error message on parent handle, thanks to charsbar #34 Fix disappearing $_ inside callbacks, thanks to robschaber #47 Fix dependency on Storable for perl older than 5.8.9 Allow objects to be used as passwords without throwing an error, thanks to demerphq #40 Allow $sth NAME_* attributes to be set from Perl code, re #45 Added support for DBD::XMLSimple thanks to nigelhorne #38 Documentation updates: Improve examples using eval to be more correct, thanks to pali #39 Add cautionary note to prepare_cached docs re refs in %attr #46 Small POD changes (Getting Help -> Online) thanks to openstrike #33 Adds links to more module names and fix typo, thanks to oalders #43 Typo fix thanks to bor #37 =head2 Changes in DBI 1.636 - 24th April 2016 Fix compilation for threaded perl <= 5.12 broken in 1.635 RT#113955 Revert change to DBI::PurePerl DESTROY in 1.635 Change t/16destroy.t to avoid race hazard RT#113951 Output perl version and archname in t/01basics.t Add perl 5.22 and 5.22-extras to travis-ci config =head2 Changes in DBI 1.635 - 24th April 2016 Fixed RaiseError/PrintError for UTF-8 errors/warnings. RT#102404 Fixed cases where ShowErrorStatement might show incorrect Statement RT#97434 Fixed DBD::Gofer for UTF-8-enabled STDIN/STDOUT thanks to mauke PR#32 Fixed fetchall_arrayref({}) behavior with no columns thanks to Dan McGee PR#31 Fixed tied CachedKids ref leak in attribute cache by weakening thanks to Michael Conrad RT#113852 Fixed "panic: attempt to copy freed scalar" upon commit() or rollback() thanks to fbriere for detailed bug report RT#102791 Ceased to ignore DESTROY of outer handle in DBI::PurePerl Treat undef in DBI::Profile Path as string "undef" thanks to fREW Schmidt RT#113298 Fix SQL::Nano parser to ignore trailing semicolon thanks to H.Merijn Brand. Added @ary = $dbh->selectall_array(...) method thanks to Ed Avis RT#106411 Added appveyor support (Travis like CI for windows) thanks to mbeijen PR#30 Corrected spelling errors in pod thanks to Gregor Herrmann RT#107838 Corrected and/or removed broken links to SQL standards thanks to David Pottage RT#111437 Corrected doc example to use dbi: instead of DBI: in DSN thanks to Michael R. Davis RT#101181 Removed/updated broken links in docs thanks to mbeijen PR#29 Clarified docs for DBI::hash($string) Removed the ancient DBI::FAQ module RT#102714 Fixed t/pod.t to require Test::Pod >= 1.41 RT#101769 This release was developed at the Perl QA Hackathon 2016 L<http://act.qa-hackathon.org/qa2016/> which was made possible by the generosity of many sponsors: L<https://www.fastmail.com> FastMail, L<https://www.ziprecruiter.com> ZipRecruiter, L<http://www.activestate.com> ActiveState, L<http://www.opusvl.com> OpusVL, L<https://www.strato.com> Strato, L<http://www.surevoip.co.uk> SureVoIP, L<http://www.cv-library.co.uk> CV-Library, L<https://www.iinteractive.com/> Infinity, L<https://opensource.careers/perl-careers/> Perl Careers, L<https://www.mongodb.com> MongoDB, L<https://www.thinkproject.com> thinkproject!, L<https://www.dreamhost.com/> Dreamhost, L<http://www.perl6.org/> Perl 6, L<http://www.perl-services.de/> Perl Services, L<https://www.evozon.com/> Evozon, L<http://www.booking.com> Booking, L<http://eligo.co.uk> Eligo, L<http://www.oetiker.ch/> Oetiker+Partner, L<http://capside.com/en/> CAPSiDE, L<https://www.procura.nl/> Procura, L<https://constructor.io/> Constructor.io, L<https://metacpan.org/author/BABF> Robbie Bow, L<https://metacpan.org/author/RSAVAGE> Ron Savage, L<https://metacpan.org/author/ITCHARLIE> Charlie Gonzalez, L<https://twitter.com/jscook2345> Justin Cook. =head2 Changes in DBI 1.634 - 3rd August 2015 Enabled strictures on all modules (Jose Luis Perez Diez) #22 Note that this might cause new exceptions in existing code. Please take time for extra testing before deploying to production. Improved handling of row counts for compiled drivers and enable them to return larger row counts (IV type) by defining new *_iv macros. Fixed quote_identifier that was adding a trailing separator when there was only a catalog (Martin J. Evans) Removed redundant keys() call in fetchall_arrayref with hash slice (ilmari) #24 Corrected pod xref to Placeholders section (Matthew D. Fuller) Corrected pod grammar (Nick Tonkin) #25 Added support for tables('', '', '', '%') special case (Martin J. Evans) Added support for DBD prefixes with numbers (Jens Rehsack) #19 Added extra initializer for DBI::DBD::SqlEngine based DBD's (Jens Rehsack) Added Memory Leaks section to the DBI docs (Tim) Added Artistic v1 & GPL v1 LICENSE file (Jose Luis Perez Diez) #21 =head2 Changes in DBI 1.633 - 11th Jan 2015 Fixed selectrow_*ref to return undef on error in list context instead if an empty list. Changed t/42prof_data.t more informative Changed $sth->{TYPE} to be NUMERIC in DBD::File drivers as per the DBI docs. Note TYPE_NAME is now also available. [H.Merijn Brand] Fixed compilation error on bleadperl due DEFSV no longer being an lvalue [Dagfinn Ilmari Manns�ker] Added docs for escaping placeholders using a backslash. Added docs for get_info(9000) indicating ability to escape placeholders. Added multi_ prefix for DBD::Multi (Dan Wright) and ad2_ prefix for DBD::AnyData2 =head2 Changes in DBI 1.632 - 9th Nov 2014 Fixed risk of memory corruption with many arguments to methods originally reported by OSCHWALD for Callbacks but may apply to other functionality in DBI method dispatch RT#86744. Fixed DBD::PurePerl to not set $sth->{Active} true by default drivers are expected to set it true as needed. Fixed DBI::DBD::SqlEngine to complain loudly when prerequite driver_prefix is not fulfilled (RT#93204) [Jens Rehsack] Fixed redundant sprintf argument warning RT#97062 [Reini Urban] Fixed security issue where DBD::File drivers would open files from folders other than specifically passed using the f_dir attribute RT#99508 [H.Merijn Brand] Changed delete $h->{$key} to work for keys with 'private_' prefix per request in RT#83156. local $h->{$key} works as before. Added security notice to DBD::Proxy and DBI::ProxyServer because they use Storable which is insecure. Thanks to ppisar@redhat.com RT#90475 Added note to AutoInactiveDestroy docs strongly recommending that it is enabled in all new code. =head2 Changes in DBI 1.631 - 20th Jan 2014 NOTE: This release changes the handle passed to Callbacks from being an 'inner' handle to being an 'outer' handle. If you have code that makes use of Callbacks, ensure that you understand what this change means and review your callback code. Fixed err_hash handling of integer err RT#92172 [Dagfinn Ilmari] Fixed use of \Q vs \E in t/70callbacks.t Changed the handle passed to Callbacks from being an 'inner' handle to being an 'outer' handle. Improved reliability of concurrent testing PR#8 [Peter Rabbitson] Changed optional dependencies to "suggest" PR#9 [Karen Etheridge] Changed to avoid mg_get in neatsvpv during global destruction PR#10 [Matt Phillips] =head2 Changes in DBI 1.630 - 28th Oct 2013 NOTE: This release enables PrintWarn by default regardless of $^W. Your applications may generate more log messages than before. Fixed err for new drh to be undef not to 0 [Martin J. Evans] Fixed RT#83132 - moved DBIstcf* constants to util export tag [Martin J. Evans] PrintWarn is now triggered by warnings recorded in methods like STORE that don't clear err RT#89015 [Tim Bunce] Changed tracing to no longer show quote and quote_identifier calls at trace level 1. Changed DBD::Gofer ping while disconnected set_err from warn to info. Clarified wording of log message when err is cleared. Changed bootstrap to use $XS_VERSION RT#89618 [Andreas Koenig] Added connect_cached.connected Callback PR#3 [David E. Wheeler] Clarified effect of refs in connect_cached attributes [David E. Wheeler] Extended ReadOnly attribute docs for when the driver cannot ensure read only [Martin J. Evans] Corrected SQL_BIGINT docs to say ODBC value is used PR#5 [ilmari] There was no DBI 1.629 release. =head2 Changes in DBI 1.628 - 22nd July 2013 Fixed missing fields on partial insert via DBI::DBD::SqlEngine engines (DBD::CSV, DBD::DBM etc.) [H.Merijn Brand, Jens Rehsack] Fixed stack corruption on callbacks RT#85562 RT#84974 [Aaron Schweiger] Fixed DBI::SQL::Nano_::Statement handling of "0" [Jens Rehsack] Fixed exit op precedence in test RT#87029 [Reni Urban] Added support for finding tables in multiple directories via new DBD::File f_dir_search attribute [H.Merijn Brand] Enable compiling by C++ RT#84285 [Kurt Jaeger] Typo fixes in pod and comment [David Steinbrunner] Change DBI's docs to refer to git not svn [H.Merijn Brand] Clarify bind_col TYPE attribute is sticky [Martin J. Evans] Fixed reference to $sth in selectall_arrayref docs RT#84873 Spelling fixes [Ville Skytt�] Changed $VERSIONs to hardcoded strings [H.Merijn Brand] =head2 Changes in DBI 1.627 - 16th May 2013 Fixed VERSION regression in DBI::SQL::Nano [Tim Bunce] =head2 Changes in DBI 1.626 - 15th May 2013 Fixed pod text/link was reversed in a few cases RT#85168 [H.Merijn Brand] Handle aliasing of STORE'd attributes in DBI::DBD::SqlEngine [Jens Rehsack] Updated repository URI to git [Jens Rehsack] Fixed skip() count arg in t/48dbi_dbd_sqlengine.t [Tim Bunce] =head2 Changes in DBI 1.625 (svn r15595) 28th March 2013 Fixed heap-use-after-free during global destruction RT#75614 thanks to Reini Urban. Fixed ignoring RootClass attribute during connect() by DBI::DBD::SqlEngine reported in RT#84260 by Michael Schout =head2 Changes in DBI 1.624 (svn r15576) 22nd March 2013 Fixed Gofer for hash randomization in perl 5.17.10+ RT#84146 Clarify docs for can() re RT#83207 =head2 Changes in DBI 1.623 (svn r15547) 2nd Jan 2013 Fixed RT#64330 - ping wipes out errstr (Martin J. Evans). Fixed RT#75868 - DBD::Proxy shouldn't call connected() on the server. Fixed RT#80474 - segfault in DESTROY with threads. Fixed RT#81516 - Test failures due to hash randomisation in perl 5.17.6 thanks to Jens Rehsack and H.Merijn Brand and feedback on IRC Fixed RT#81724 - Handle copy-on-write scalars (sprout) Fixed unused variable / self-assignment compiler warnings. Fixed default table_info in DBI::DBD::SqlEngine which passed NAMES attribute instead of NAME to DBD::Sponge RT72343 (Martin J. Evans) Corrected a spelling error thanks to Chris Sanders. Corrected typo in DBI->installed_versions docs RT#78825 thanks to Jan Dubois. Refactored table meta information management from DBD::File into DBI::DBD::SqlEngine (H.Merijn Brand, Jens Rehsack) Prevent undefined f_dir being used in opendir (H.Merijn Brand) Added logic to force destruction of children before parents during global destruction. See RT#75614. Added DBD::File Plugin-Support for table names and data sources (Jens Rehsack, #dbi Team) Added new tests to 08keeperr for RT#64330 thanks to Kenichi Ishigaki. Added extra internal handle type check, RT#79952 thanks to Reini Urban. Added cubrid_ registered prefix for DBD::cubrid, RT#78453 Removed internal _not_impl method (Martin J. Evans). NOTE: The "old-style" DBD::DBM attributes 'dbm_ext' and 'dbm_lockfile' have been deprecated for several years and their use will now generate a warning. =head2 Changes in DBI 1.622 (svn r15327) 6th June 2012 Fixed lack of =encoding in non-ASCII pod docs. RT#77588 Corrected typo in DBI::ProfileDumper thanks to Finn Hakansson. =head2 Changes in DBI 1.621 (svn r15315) 21st May 2012 Fixed segmentation fault when a thread is created from within another thread RT#77137, thanks to Dave Mitchell. Updated previous Changes to credit Booking.com for sponsoring Dave Mitchell's recent DBI optimization work. =head2 Changes in DBI 1.620 (svn r15300) 25th April 2012 Modified column renaming in fetchall_arrayref, added in 1.619, to work on column index numbers not names (an incompatible change). Reworked the fetchall_arrayref documentation. Hash slices in fetchall_arrayref now detect invalid column names. =head2 Changes in DBI 1.619 (svn r15294) 23rd April 2012 Fixed the connected method to stop showing the password in trace file (Martin J. Evans). Fixed _install_method to set CvFILE correctly thanks to sprout RT#76296 Fixed SqlEngine "list_tables" thanks to David McMath and Norbert Gruener. RT#67223 RT#69260 Optimized DBI method dispatch thanks to Dave Mitchell. Optimized driver access to DBI internal state thanks to Dave Mitchell. Optimized driver access to handle data thanks to Dave Mitchell. Dave's work on these optimizations was sponsored by Booking.com. Optimized fetchall_arrayref with hash slice thanks to Dagfinn Ilmari Manns�ker. RT#76520 Allow renaming columns in fetchall_arrayref hash slices thanks to Dagfinn Ilmari Manns�ker. RT#76572 Reserved snmp_ and tree_ for DBD::SNMP and DBD::TreeData =head2 Changes in DBI 1.618 (svn r15170) 25rd February 2012 Fixed compiler warnings in Driver_xst.h (Martin J. Evans) Fixed compiler warning in DBI.xs (H.Merijn Brand) Fixed Gofer tests failing on Windows RT74975 (Manoj Kumar) Fixed my_ctx compile errors on Windows (Dave Mitchell) Significantly optimized method dispatch via cache (Dave Mitchell) Significantly optimized DBI internals for threads (Dave Mitchell) Dave's work on these optimizations was sponsored by Booking.com. Xsub to xsub calling optimization now enabled for threaded perls. Corrected typo in example in docs (David Precious) Added note that calling clone() without an arg may warn in future. Minor changes to the install_method() docs in DBI::DBD. Updated dbipport.h from Devel::PPPort 3.20 =head2 Changes in DBI 1.617 (svn r15107) 30th January 2012 NOTE: The officially supported minimum perl version will change from perl 5.8.1 (2003) to perl 5.8.3 (2004) in a future release. (The last change, from perl 5.6 to 5.8.1, was announced in July 2008 and implemented in DBI 1.611 in April 2010.) Fixed ParamTypes example in the pod (Martin J. Evans) Fixed the definition of ArrayTupleStatus and remove confusion over rows affected in list context of execute_array (Martin J. Evans) Fixed sql_type_cast example and typo in errors (Martin J. Evans) Fixed Gofer error handling for keeperr methods like ping (Tim Bunce) Fixed $dbh->clone({}) RT73250 (Tim Bunce) Fixed is_nested_call logic error RT73118 (Reini Urban) Enhanced performance for threaded perls (Dave Mitchell, Tim Bunce) Dave's work on this optimization was sponsored by Booking.com. Enhanced and standardized driver trace level mechanism (Tim Bunce) Removed old code that was an inneffective attempt to detect people doing DBI->{Attrib}. Clear ParamValues on bind_param param count error RT66127 (Tim Bunce) Changed DBI::ProxyServer to require DBI at compile-time RT62672 (Tim Bunce) Added pod for default_user to DBI::DBD (Martin J. Evans) Added CON, ENC and DBD trace flags and extended 09trace.t (Martin J. Evans) Added TXN trace flags and applied CON and TXN to relevant methods (Tim Bunce) Added some more fetchall_arrayref(..., $maxrows) tests (Tim Bunce) Clarified docs for fetchall_arrayref called on an inactive handle. Clarified docs for clone method (Tim Bunce) Added note to DBI::Profile about async queries (Marcel Gr�nauer). Reserved spatialite_ as a driver prefix for DBD::Spatialite Reserved mo_ as a driver prefix for DBD::MO Updated link to the SQL Reunion 95 docs, RT69577 (Ash Daminato) Changed links for DBI recipes. RT73286 (Martin J. Evans) =head2 Changes in DBI 1.616 (svn r14616) 30th December 2010 Fixed spurious dbi_profile lines written to the log when profiling is enabled and a trace flag, like SQL, is used. Fixed to recognize SQL::Statement errors even if instantiated with RaiseError=0 (Jens Rehsack) Fixed RT#61513 by catching attribute assignment to tied table access interface (Jens Rehsack) Fixing some misbehavior of DBD::File when running within the Gofer server. Fixed compiler warnings RT#62640 Optimized connect() to remove redundant FETCH of \%attrib values. Improved initialization phases in DBI::DBD::SqlEngine (Jens Rehsack) Added DBD::Gofer::Transport::corostream. An experimental proof-of-concept transport that enables asynchronous database calls with few code changes. It enables asynchronous use of DBI frameworks like DBIx::Class. Added additional notes on DBDs which avoid creating a statement in the do() method and the effects on error handlers (Martin J. Evans) Adding new attribute "sql_dialect" to DBI::DBD::SqlEngine to allow users control used SQL dialect (ANSI, CSV or AnyData), defaults to CSV (Jens Rehsack) Add documentation for DBI::DBD::SqlEngine attributes (Jens Rehsack) Documented dbd_st_execute return (Martin J. Evans) Fixed typo in InactiveDestroy thanks to Emmanuel Rodriguez. =head2 Changes in DBI 1.615 (svn r14438) 21st September 2010 Fixed t/51dbm_file for file/directory names with whitespaces in them RT#61445 (Jens Rehsack) Fixed compiler warnings from ignored hv_store result (Martin J. Evans) Fixed portability to VMS (Craig A. Berry) =head2 Changes in DBI 1.614 (svn r14408) 17th September 2010 Fixed bind_param () in DBI::DBD::SqlEngine (rt#61281) Fixed internals to not refer to old perl symbols that will no longer be visible in perl >5.13.3 (Andreas Koenig) Many compiled drivers are likely to need updating. Fixed issue in DBD::File when absolute filename is used as table name (Jens Rehsack) Croak manually when file after tie doesn't exists in DBD::DBM when it have to exists (Jens Rehsack) Fixed issue in DBD::File when users set individual file name for tables via f_meta compatibility interface - reported by H.Merijn Brand while working on RT#61168 (Jens Rehsack) Changed 50dbm_simple to simplify and fix problems (Martin J. Evans) Changed 50dbm_simple to skip aggregation tests when not using SQL::Statement (Jens Rehsack) Minor speed improvements in DBD::File (Jens Rehsack) Added $h->{AutoInactiveDestroy} as simpler safer form of $h->{InactiveDestroy} (David E. Wheeler) Added ability for parallel testing "prove -j4 ..." (Jens Rehsack) Added tests for delete in DBM (H.Merijn Brand) Added test for absolute filename as table to 51dbm_file (Jens Rehsack) Added two initialization phases to DBI::DBD::SqlEngine (Jens Rehsack) Added improved developers documentation for DBI::DBD::SqlEngine (Jens Rehsack) Added guides how to write DBI drivers using DBI::DBD::SqlEngine or DBD::File (Jens Rehsack) Added register_compat_map() and table_meta_attr_changed() to DBD::File::Table to support clean fix of RT#61168 (Jens Rehsack) =head2 Changes in DBI 1.613 (svn r14271) 22nd July 2010 Fixed Win32 prerequisite module from PathTools to File::Spec. Changed attribute headings and fixed references in DBI pod (Martin J. Evans) Corrected typos in DBI::FAQ and DBI::ProxyServer (Ansgar Burchardt) =head2 Changes in DBI 1.612 (svn r14254) 16th July 2010 NOTE: This is a minor release for the DBI core but a major release for DBD::File and drivers that depend on it, like DBD::DBM and DBD::CSV. This is also the first release where the bulk of the development work has been done by other people. I'd like to thank (in no particular order) Jens Rehsack, Martin J. Evans, and H.Merijn Brand for all their contributions. Fixed DBD::File's {ChopBlank} handling (it stripped \s instead of space only as documented in DBI) (H.Merijn Brand) Fixed DBD::DBM breakage with SQL::Statement (Jens Rehsack, fixes RT#56561) Fixed DBD::File file handle leak (Jens Rehsack) Fixed problems in 50dbm.t when running tests with multiple dbms (Martin J. Evans) Fixed DBD::DBM bugs found during tests (Jens Rehsack) Fixed DBD::File doesn't find files without extensions under some circumstances (Jens Rehsack, H.Merijn Brand, fixes RT#59038) Changed Makefile.PL to modernize with CONFLICTS, recommended dependencies and resources (Jens Rehsack) Changed DBI::ProfileDumper to rename any existing profile file by appending .prev, instead of overwriting it. Changed DBI::ProfileDumper::Apache to work in more configurations including vhosts using PerlOptions +Parent. Add driver_prefix method to DBI (Jens Rehsack) Added more tests to 50dbm_simple.t to prove optimizations in DBI::SQL::Nano and SQL::Statement (Jens Rehsack) Updated tests to cover optional installed SQL::Statement (Jens Rehsack) Synchronize API between SQL::Statement and DBI::SQL::Nano (Jens Rehsack) Merged some optimizations from SQL::Statement into DBI::SQL::Nano (Jens Rehsack) Added basic test for DBD::File (H.Merijn Brand, Jens Rehsack) Extract dealing with Perl SQL engines from DBD::File into DBI::DBD::SqlEngine for better subclassing of 3rd party non-db DBDs (Jens Rehsack) Updated and clarified documentation for finish method (Tim Bunce). Changes to DBD::File for better English and hopefully better explanation (Martin J. Evans) Update documentation of DBD::DBM to cover current implementation, tried to explain some things better and changes most examples to preferred style of Merijn and myself (Jens Rehsack) Added developer documentation (including a roadmap of future plans) for DBD::File =head2 Changes in DBI 1.611 (svn r13935) 29th April 2010 NOTE: minimum perl version is now 5.8.1 (as announced in DBI 1.607) Fixed selectcol_arrayref MaxRows attribute to count rows not values thanks to Vernon Lyon. Fixed DBI->trace(0, *STDERR); (H.Merijn Brand) which tried to open a file named "*main::STDERR" in perl-5.10.x Fixes in DBD::DBM for use under threads (Jens Rehsack) Changed "Issuing rollback() due to DESTROY without explicit disconnect" warning to not be issued if ReadOnly set for that dbh. Added f_lock and f_encoding support to DBD::File (H.Merijn Brand) Added ChildCallbacks => { ... } to Callbacks as a way to specify Callbacks for child handles. With tests added by David E. Wheeler. Added DBI::sql_type_cast($value, $type, $flags) to cast a string value to an SQL type. e.g. SQL_INTEGER effectively does $value += 0; Has other options plus an internal interface for drivers. Documentation changes: Small fixes in the documentation of DBD::DBM (H.Merijn Brand) Documented specification of type casting behaviour for bind_col() based on DBI::sql_type_cast() and two new bind_col attributes StrictlyTyped and DiscardString. Thanks to Martin Evans. Document fetchrow_hashref() behaviour for functions, aliases and duplicate names (H.Merijn Brand) Updated DBI::Profile and DBD::File docs to fix pod nits thanks to Frank Wiegand. Corrected typos in Gopher documentation reported by Jan Krynicky. Documented the Callbacks attribute thanks to David E. Wheeler. Corrected the Timeout examples as per rt 50621 (Martin J. Evans). Removed some internal broken links in the pod (Martin J. Evans) Added Note to column_info for drivers which do not support it (Martin J. Evans) Updated dbipport.h to Devel::PPPort 3.19 (H.Merijn Brand) =head2 Changes in DBI 1.609 (svn r12816) 8th June 2009 Fixes to DBD::File (H.Merijn Brand) added f_schema attribute table names case sensitive when quoted, insensitive when unquoted workaround a bug in SQL::Statement (temporary fix) related to the "You passed x parameters where y required" error Added ImplementorClass and Name info to the "Issuing rollback() due to DESTROY without explicit disconnect" warning to identify the handle. Applies to compiled drivers when they are recompiled. Added DBI->visit_handles($coderef) method. Added $h->visit_child_handles($coderef) method. Added docs for column_info()'s COLUMN_DEF value. Clarified docs on stickyness of data type via bind_param(). Clarified docs on stickyness of data type via bind_col(). =head2 Changes in DBI 1.608 (svn r12742) 5th May 2009 Fixes to DBD::File (H.Merijn Brand) bind_param () now honors the attribute argument added f_ext attribute File::Spec is always required. (CORE since 5.00405) Fail and set errstr on parameter count mismatch in execute () Fixed two small memory leaks when running in mod_perl one in DBI->connect and one in DBI::Gofer::Execute. Both due to "local $ENV{...};" leaking memory. Fixed DBD_ATTRIB_DELETE macro for driver authors and updated DBI::DBD docs thanks to Martin J. Evans. Fixed 64bit issues in trace messages thanks to Charles Jardine. Fixed FETCH_many() method to work with drivers that incorrectly return an empty list from $h->FETCH. Affected gofer. Added 'sqlite_' as registered prefix for DBD::SQLite. Corrected many typos in DBI docs thanks to Martin J. Evans. Improved DBI::DBD docs thanks to H.Merijn Brand. =head2 Changes in DBI 1.607 (svn r11571) 22nd July 2008 NOTE: Perl 5.8.1 is now the minimum supported version. If you need support for earlier versions send me a patch. Fixed missing import of carp in DBI::Gofer::Execute. Added note to docs about effect of execute(@empty_array). Clarified docs for ReadOnly thanks to Martin Evans. =head2 Changes in DBI 1.605 (svn r11434) 16th June 2008 Fixed broken DBIS macro with threads on big-endian machines with 64bit ints but 32bit pointers. Ticket #32309. Fixed the selectall_arrayref, selectrow_arrayref, and selectrow_array methods that get embedded into compiled drivers to use the inner sth handle when passed a $sth instead of an sql string. Drivers will need to be recompiled to pick up this change. Fixed leak in neat() for some kinds of values thanks to Rudolf Lippan. Fixed DBI::PurePerl neat() to behave more like XS neat(). Increased default $DBI::neat_maxlen from 400 to 1000. Increased timeout on tests to accommodate very slow systems. Changed behaviour of trace levels 1..4 to show less information at lower levels. Changed the format of the key used for $h->{CachedKids} (which is undocumented so you shouldn't depend on it anyway) Changed gofer error handling to avoid duplicate error text in errstr. Clarified docs re ":N" style placeholders. Improved gofer retry-on-error logic and refactored to aid subclassing. Improved gofer trace output in assorted ways. Removed the beeps "\a" from Makefile.PL warnings. Removed check for PlRPC-modules from Makefile.PL Added sorting of ParamValues reported by ShowErrorStatement thanks to to Rudolf Lippan. Added cache miss trace message to DBD::Gofer transport class. Added $drh->dbixs_revision method. Added explicit LICENSE specification (perl) to META.yaml =head2 Changes in DBI 1.604 (svn rev 10994) 24th March 2008 Fixed fetchall_arrayref with $max_rows argument broken in 1.603, thanks to Greg Sabino Mullane. Fixed a few harmless compiler warnings on cygwin. =head2 Changes in DBI 1.603 Fixed pure-perl fetchall_arrayref with $max_rows argument to not error when fetching after all rows already fetched. (Was fixed for compiled drivers back in DBI 1.31.) Thanks to Mark Overmeer. Fixed C sprintf formats and casts, fixing compiler warnings. Changed dbi_profile() to accept a hash of profiles and apply to all. Changed gofer stream transport to improve error reporting. Changed gofer test timeout to avoid spurious failures on slow systems. Added options to t/85gofer.t so it's more useful for manual testing. =head2 Changes in DBI 1.602 (svn rev 10706) 8th February 2008 Fixed potential coredump if stack reallocated while calling back into perl from XS code. Thanks to John Gardiner Myers. Fixed DBI::Util::CacheMemory->new to not clear the cache. Fixed avg in DBI::Profile as_text() thanks to Abe Ingersoll. Fixed DBD::DBM bug in push_names thanks to J M Davitt. Fixed take_imp_data for some platforms thanks to Jeffrey Klein. Fixed docs tie'ing CacheKids (ie LRU cache) thanks to Peter John Edwards. Expanded DBI::DBD docs for driver authors thanks to Martin Evans. Enhanced t/80proxy.t test script. Enhanced t/85gofer.t test script thanks to Stig. Enhanced t/10examp.t test script thanks to David Cantrell. Documented $DBI::stderr as the default value of err for internal errors. Gofer changes: track_recent now also keeps track of N most recent errors. The connect method is now also counted in stats. =head2 Changes in DBI 1.601 (svn rev 10103), 21st October 2007 Fixed t/05thrclone.t to work with Test::More >= 0.71 thanks to Jerry D. Hedden and Michael G Schwern. Fixed DBI for VMS thanks to Peter (Stig) Edwards. Added client-side caching to DBD::Gofer. Can use any cache with get($k)/set($k,$v) methods, including all the Cache and Cache::Cache distribution modules plus Cache::Memcached, Cache::FastMmap etc. Works for all transports. Overridable per handle. Added DBI::Util::CacheMemory for use with DBD::Gofer caching. It's a very fast and small strict subset of Cache::Memory. =head2 Changes in DBI 1.59 (svn rev 9874), 23rd August 2007 Fixed DBI::ProfileData to unescape headers lines read from data file. Fixed DBI::ProfileData to not clobber $_, thanks to Alexey Tourbin. Fixed DBI::SQL::Nano to not clobber $_, thanks to Alexey Tourbin. Fixed DBI::PurePerl to return undef for ChildHandles if weaken not available. Fixed DBD::Proxy disconnect error thanks to Philip Dye. Fixed DBD::Gofer::Transport::Base bug (typo) in timeout code. Fixed DBD::Proxy rows method thanks to Philip Dye. Fixed dbiprof compile errors, thanks to Alexey Tourbin. Fixed t/03handle.t to skip some tests if ChildHandles not available. Added check_response_sub to DBI::Gofer::Execute =head2 Changes in DBI 1.58 (svn rev 9678), 25th June 2007 Fixed code triggering fatal error in bleadperl, thanks to Steve Hay. Fixed compiler warning thanks to Jerry D. Hedden. Fixed t/40profile.t to use int(dbi_time()) for systems like Cygwin where time() seems to be rounded not truncated from the high resolution time. Removed dump_results() test from t/80proxy.t. =head2 Changes in DBI 1.57 (svn rev 9639), 13th June 2007 Note: this release includes a change to the DBI::hash() function which will now produce different values than before *if* your perl was built with 64-bit 'int' type (i.e. "perl -V:intsize" says intsize='8'). It's relatively rare for perl to be configured that way, even on 64-bit systems. Fixed XS versions of select*_*() methods to call execute() fetch() etc., with inner handle instead of outer. Fixed execute_for_fetch() to not cache errstr values thanks to Bart Degryse. Fixed unused var compiler warning thanks to JDHEDDEN. Fixed t/86gofer_fail tests to be less likely to fail falsely. Changed DBI::hash to return 'I32' type instead of 'int' so results are portable/consistent regardless of size of the int type. Corrected timeout example in docs thanks to Egmont Koblinger. Changed t/01basic.t to warn instead of failing when it detects a problem with Math::BigInt (some recent versions had problems). Added support for !Time and !Time~N to DBI::Profile Path. See docs. Added extra trace info to connect_cached thanks to Walery Studennikov. Added non-random (deterministic) mode to DBI_GOFER_RANDOM mechanism. Added DBIXS_REVISION macro that drivers can use. Added more docs for private_attribute_info() method. DBI::Profile changes: dbi_profile() now returns ref to relevant leaf node. Don't profile DESTROY during global destruction. Added as_node_path_list() and as_text() methods. DBI::ProfileDumper changes: Don't write file if there's no profile data. Uses full natural precision when saving data (was using %.6f) Optimized flush_to_disk(). Locks the data file while writing. Enabled filename to be a code ref for dynamic names. DBI::ProfileDumper::Apache changes: Added Quiet=>1 to avoid write to STDERR in flush_to_disk(). Added Dir=>... to specify a writable destination directory. Enabled DBI_PROFILE_APACHE_LOG_DIR for mod_perl 1 as well as 2. Added parent pid to default data file name. DBI::ProfileData changes: Added DeleteFiles option to rename & delete files once read. Locks the data files while reading. Added ability to sort by Path elements. dbiprof changes: Added --dumpnodes and --delete options. Added/updated docs for both DBI::ProfileDumper && ::Apache. =head2 Changes in DBI 1.56 (svn rev 9660), 18th June 2007 Fixed printf arg warnings thanks to JDHEDDEN. Fixed returning driver-private sth attributes via gofer. Changed pod docs docs to use =head3 instead of =item so now in html you get links to individual methods etc. Changed default gofer retry_limit from 2 to 0. Changed tests to workaround Math::BigInt broken versions. Changed dbi_profile_merge() to dbi_profile_merge_nodes() old name still works as an alias for the new one. Removed old DBI internal sanity check that's no longer valid causing "panic: DESTROY (dbih_clearcom)" when tracing enabled Added DBI_GOFER_RANDOM env var that can be use to trigger random failures and delays when executing gofer requests. Designed to help test automatic retry on failures and timeout handling. Added lots more docs to all the DBD::Gofer and DBI::Gofer classes. =head2 Changes in DBI 1.55 (svn rev 9504), 4th May 2007 Fixed set_err() so HandleSetErr hook is executed reliably, if set. Fixed accuracy of profiling when perl configured to use long doubles. Fixed 42prof_data.t on fast systems with poor timers thanks to Malcolm Nooning. Fixed potential corruption in selectall_arrayref and selectrow_arrayref for compiled drivers, thanks to Rob Davies. Rebuild your compiled drivers after installing DBI. Changed some handle creation code from perl to C code, to reduce handle creation cost by ~20%. Changed internal implementation of the CachedKids attribute so it's a normal handle attribute (and initially undef). Changed connect_cached and prepare_cached to avoid a FETCH method call, and thereby reduced cost by ~5% and ~30% respectively. Changed _set_fbav to not croak when given a wrongly sized array, it now warns and adjusts the row buffer to match. Changed some internals to improve performance with threaded perls. Changed DBD::NullP to be slightly more useful for testing. Changed File::Spec prerequisite to not require a minimum version. Changed tests to work with other DBMs thanks to ZMAN. Changed ex/perl_dbi_nulls_test.pl to be more descriptive. Added more functionality to the (undocumented) Callback mechanism. Callbacks can now elect to provide a value to be returned, in which case the method won't be called. A callback for "*" is applied to all methods that don't have their own callback. Added $h->{ReadOnly} attribute. Added support for DBI Profile Path to contain refs to scalars which will be de-ref'd for each profile sample. Added dbilogstrip utility to edit DBI logs for diff'ing (gets installed) Added details for SQLite 3.3 to NULL handling docs thanks to Alex Teslik. Added take_imp_data() to DBI::PurePerl. Gofer related changes: Fixed gofer pipeone & stream transports to avoid risk of hanging. Improved error handling and tracing significantly. Added way to generate random 1-in-N failures for methods. Added automatic retry-on-error mechanism to gofer transport base class. Added tests to show automatic retry mechanism works a treat! Added go_retry_hook callback hook so apps can fine-tune retry behaviour. Added header to request and response packets for sanity checking and to enable version skew between client and server. Added forced_single_resultset, max_cached_sth_per_dbh and max_cached_dbh_per_drh to gofer executor config. Driver-private methods installed with install_method are now proxied. No longer does a round-trip to the server for methods it knows have not been overridden by the remote driver. Most significant aspects of gofer behaviour are controlled by policy mechanism. Added policy-controlled caching of results for some methods, such as schema metadata. The connect_cached and prepare_cached methods cache on client and server. The bind_param_array and execute_array methods are now supported. Worked around a DBD::Sybase bind_param bug (which is fixed in DBD::Sybase 1.07) Added goferperf.pl utility (doesn't get installed). Many other assorted Gofer related bug fixes, enhancements and docs. The http and mod_perl transports have been remove to their own distribution. Client and server will need upgrading together for this release. =head2 Changes in DBI 1.54 (svn rev 9157), 23rd February 2007 NOTE: This release includes the 'next big thing': DBD::Gofer. Take a look! WARNING: This version has some subtle changes in DBI internals. It's possible, though doubtful, that some may affect your code. I recommend some extra testing before using this release. Or perhaps I'm just being over cautious... Fixed type_info when called for multiple dbh thanks to Cosimo Streppone. Fixed compile warnings in bleadperl on freebsd-6.1-release and solaris 10g thanks to Philip M. Gollucci. Fixed to compile for perl built with -DNO_MATHOMS thanks to Jerry D. Hedden. Fixed to work for bleadperl (r29544) thanks to Nicholas Clark. Users of Perl >= 5.9.5 will require DBI >= 1.54. Fixed rare error when profiling access to $DBI::err etc tied variables. Fixed DBI::ProfileDumper to not be affected by changes to $/ and $, thanks to Michael Schwern. Changed t/40profile.t to skip tests for perl < 5.8.0. Changed setting trace file to no longer write "Trace file set" to new file. Changed 'handle cleared whilst still active' warning for dbh to only be given for dbh that have active sth or are not AutoCommit. Changed take_imp_data to call finish on all Active child sth. Changed DBI::PurePerl trace() method to be more consistent. Changed set_err method to effectively not append to errstr if the new errstr is the same as the current one. Changed handle factory methods, like connect, prepare, and table_info, to copy any error/warn/info state of the handle being returned up into the handle the method was called on. Changed row buffer handling to not alter NUM_OF_FIELDS if it's inconsistent with number of elements in row buffer array. Updated DBI::DBD docs re handling multiple result sets. Updated DBI::DBD docs for driver authors thanks to Ammon Riley and Dean Arnold. Updated column_info docs to note that if a table doesn't exist you get an sth for an empty result set and not an error. Added new DBD::Gofer 'stateless proxy' driver and framework, and the DBI test suite is now also executed via DBD::Gofer, and DBD::Gofer+DBI::PurePerl, in addition to DBI::PurePerl. Added ability for trace() to support filehandle argument, including tracing into a string, thanks to Dean Arnold. Added ability for drivers to implement func() method so proxy drivers can proxy the func method itself. Added SQL_BIGINT type code (resolved to the ODBC/JDBC value (-5)) Added $h->private_attribute_info method. =head2 Changes in DBI 1.53 (svn rev 7995), 31st October 2006 Fixed checks for weaken to work with early 5.8.x versions Fixed DBD::Proxy handling of some methods, including commit and rollback. Fixed t/40profile.t to be more insensitive to long double precision. Fixed t/40profile.t to be insensitive to small negative shifts in time thanks to Jamie McCarthy. Fixed t/40profile.t to skip tests for perl < 5.8.0. Fixed to work with current 'bleadperl' (~5.9.5) thanks to Steve Peters. Users of Perl >= 5.9.5 will require DBI >= 1.53. Fixed to be more robust against drivers not handling multiple result sets properly, thanks to Gisle Aas. Added array context support to execute_array and execute_for_fetch methods which returns executed tuples and rows affected. Added Tie::Cache::LRU example to docs thanks to Brandon Black. =head2 Changes in DBI 1.52 (svn rev 6840), 30th July 2006 Fixed memory leak (per handle) thanks to Nicholas Clark and Ephraim Dan. Fixed memory leak (16 bytes per sth) thanks to Doru Theodor Petrescu. Fixed execute_for_fetch/execute_array to RaiseError thanks to Martin J. Evans. Fixed for perl 5.9.4. Users of Perl >= 5.9.4 will require DBI >= 1.52. Updated DBD::File to 0.35 to match the latest release on CPAN. Added $dbh->statistics_info specification thanks to Brandon Black. Many changes and additions to profiling: Profile Path can now uses sane strings instead of obscure numbers, can refer to attributes, assorted magical values, and even code refs! Parsing of non-numeric DBI_PROFILE env var values has changed. Changed DBI::Profile docs extensively - many new features. See DBI::Profile docs for more information. =head2 Changes in DBI 1.51 (svn rev 6475), 6th June 2006 Fixed $dbh->clone method 'signature' thanks to Jeffrey Klein. Fixed default ping() method to return false if !$dbh->{Active}. Fixed t/40profile.t to be insensitive to long double precision. Fixed for perl 5.8.0's more limited weaken() function. Fixed DBD::Proxy to not alter $@ in disconnect or AUTOLOADd methods. Fixed bind_columns() to use return set_err(...) instead of die() to report incorrect number of parameters, thanks to Ben Thul. Fixed bind_col() to ignore undef as bind location, thanks to David Wheeler. Fixed for perl 5.9.x for non-threaded builds thanks to Nicholas Clark. Users of Perl >= 5.9.x will require DBI >= 1.51. Fixed fetching of rows as hash refs to preserve utf8 on field names from $sth->{NAME} thanks to Alexey Gaidukov. Fixed build on Win32 (dbd_postamble) thanks to David Golden. Improved performance for thread-enabled perls thanks to Gisle Aas. Drivers can now use PERL_NO_GET_CONTEXT thanks to Gisle Aas. Driver authors please read the notes in the DBI::DBD docs. Changed DBI::Profile format to always include a percentage, if not exiting then uses time between the first and last DBI call. Changed DBI::ProfileData to be more forgiving of systems with unstable clocks (where time may go backwards occasionally). Clarified the 'Subclassing the DBI' docs. Assorted minor changes to docs from comments on annocpan.org. Changed Makefile.PL to avoid incompatible options for old gcc. Added 'fetch array of hash refs' example to selectall_arrayref docs thanks to Tom Schindl. Added docs for $sth->{ParamArrays} thanks to Martin J. Evans. Added reference to $DBI::neat_maxlen in TRACING section of docs. Added ability for DBI::Profile Path to include attributes and a summary of where the code was called from. =head2 Changes in DBI 1.50 (svn rev 2307), 13 December 2005 Fixed Makefile.PL options for gcc bug introduced in 1.49. Fixed handle magic order to keep DBD::Oracle happy. Fixed selectrow_array to return empty list on error. Changed dbi_profile_merge() to be able to recurse and merge sub-trees of profile data. Added documentation for dbi_profile_merge(), including how to measure the time spent inside the DBI for an http request. =head2 Changes in DBI 1.49 (svn rev 2287), 29th November 2005 Fixed assorted attribute handling bugs in DBD::Proxy. Fixed croak() in DBD::NullP thanks to Sergey Skvortsov. Fixed handling of take_imp_data() and dbi_imp_data attribute. Fixed bugs in DBD::DBM thanks to Jeff Zucker. Fixed bug in DBI::ProfileDumper thanks to Sam Tregar. Fixed ping in DBD::Proxy thanks to George Campbell. Fixed dangling ref in $sth after parent $dbh destroyed with thanks to il@rol.ru for the bug report #13151 Fixed prerequisites to include Storable thanks to Michael Schwern. Fixed take_imp_data to be more practical. Change to require perl 5.6.1 (as advertised in 2003) not 5.6.0. Changed internals to be more strictly coded thanks to Andy Lester. Changed warning about multiple copies of Driver.xst found in @INC to ignore duplicated directories thanks to Ed Avis. Changed Driver.xst to enable drivers to define an dbd_st_prepare_sv function where the statement parameter is an SV. That enables compiled drivers to support SQL strings that are UTF-8. Changed "use DBI" to only set $DBI::connect_via if not already set. Changed docs to clarify pre-method clearing of err values. Added ability for DBI::ProfileData to edit profile path on loading. This enables aggregation of different SQL statements into the same profile node - very handy when not using placeholders or when working multiple separate tables for the same thing (ie logtable_2005_11_28) Added $sth->{ParamTypes} specification thanks to Dean Arnold. Added $h->{Callbacks} attribute to enable code hooks to be invoked when certain methods are called. For example: $dbh->{Callbacks}->{prepare} = sub { ... }; With thanks to David Wheeler for the kick start. Added $h->{ChildHandles} (using weakrefs) thanks to Sam Tregar I've recoded it in C so there's no significant performance impact. Added $h->{Type} docs (returns 'dr', 'db', or 'st') Adding trace message in DESTROY if InactiveDestroy enabled. Added %drhs = DBI->installed_drivers(); Ported DBI::ProfileDumper::Apache to mod_perl2 RC5+ thanks to Philip M. Golluci =head2 Changes in DBI 1.48 (svn rev 928), 14th March 2005 Fixed DBI::DBD::Metadata generation of type_info_all thanks to Steffen Goeldner (driver authors who have used it should rerun it). Updated docs for NULL Value placeholders thanks to Brian Campbell. Added multi-keyfield nested hash fetching to fetchall_hashref() thanks to Zhuang (John) Li for polishing up my draft. Added registered driver prefixes: amzn_ for DBD::Amazon and yaswi_ for DBD::Yaswi. =head2 Changes in DBI 1.47 (svn rev 854), 2nd February 2005 Fixed DBI::ProxyServer to not create pid files by default. References: Ubuntu Security Notice USN-70-1, CAN-2005-0077 Thanks to Javier Fern�ndez-Sanguino Pe�a from the Debian Security Audit Project, and Jonathan Leffler. Fixed some tests to work with older Test::More versions. Fixed setting $DBI::err/errstr in DBI::PurePerl. Fixed potential undef warning from connect_cached(). Fixed $DBI::lasth handling for DESTROY so lasth points to parent even if DESTROY called other methods. Fixed DBD::Proxy method calls to not alter $@. Fixed DBD::File problem with encoding pragma thanks to Erik Rijkers. Changed error handling so undef errstr doesn't cause warning. Changed DBI::DBD docs to use =head3/=head4 pod thanks to Jonathan Leffler. This may generate warnings for perl 5.6. Changed DBI::PurePerl to set autoflush on trace filehandle. Changed DBD::Proxy to treat Username as a local attribute so recent DBI version can be used with old DBI::ProxyServer. Changed driver handle caching in DBD::File. Added $GetInfoType{SQL_DATABASE_NAME} thanks to Steffen Goeldner. Updated docs to recommend some common DSN string attributes. Updated connect_cached() docs with issues and suggestions. Updated docs for NULL Value placeholders thanks to Brian Campbell. Updated docs for primary_key_info and primary_keys. Updated docs to clarify that the default fetchrow_hashref behaviour, of returning a ref to a new hash for each row, will not change. Updated err/errstr/state docs for DBD authors thanks to Steffen Goeldner. Updated handle/attribute docs for DBD authors thanks to Steffen Goeldner. Corrected and updated LongReadLen docs thanks to Bart Lateur. Added DBD::JDBC as a registered driver. =head2 Changes in DBI 1.46 (svn rev 584), 16th November 2004 Fixed parsing bugs in DBI::SQL::Nano thanks to Jeff Zucker. Fixed a couple of bad links in docs thanks to Graham Barr. Fixed test.pl Win32 undef warning thanks to H.Merijn Brand & David Repko. Fixed minor issues in DBI::DBD::Metadata thanks to Steffen Goeldner. Fixed DBI::PurePerl neat() to use double quotes for utf8. Changed execute_array() definition, and default implementation, to not consider scalar values for execute tuple count. See docs. Changed DBD::File to enable ShowErrorStatement by default, which affects DBD::File subclasses such as DBD::CSV and DBD::DBM. Changed use DBI qw(:utils) tag to include $neat_maxlen. Updated Roadmap and ToDo. Added data_string_diff() data_string_desc() and data_diff() utility functions to help diagnose Unicode issues. All can be imported via the use DBI qw(:utils) tag. =head2 Changes in DBI 1.45 (svn rev 480), 6th October 2004 Fixed DBI::DBD code for drivers broken in 1.44. Fixed "Free to wrong pool"/"Attempt to free unreferenced scalar" in FETCH. =head2 Changes in DBI 1.44 (svn rev 478), 5th October 2004 Fixed build issues on VMS thanks to Jakob Snoer. Fixed DBD::File finish() method to return 1 thanks to Jan Dubois. Fixed rare core dump during global destruction thanks to Mark Jason Dominus. Fixed risk of utf8 flag persisting from one row to the next. Changed bind_param_array() so it doesn't require all bind arrays to have the same number of elements. Changed bind_param_array() to error if placeholder number <= 0. Changed execute_array() definition, and default implementation, to effectively NULL-pad shorter bind arrays. Changed execute_array() to return "0E0" for 0 as per the docs. Changed execute_for_fetch() definition, and default implementation, to return "0E0" for 0 like execute() and execute_array(). Changed Test::More prerequisite to Test::Simple (which is also the name of the distribution both are packaged in) to work around ppm behaviour. Corrected docs to say that get/set of unknown attribute generates a warning and is no longer fatal. Thanks to Vadim. Corrected fetchall_arrayref() docs example thanks to Drew Broadley. Added $h1->swap_inner_handle($h2) sponsored by BizRate.com =head2 Changes in DBI 1.43 (svn rev 377), 2nd July 2004 Fixed connect() and connect_cached() RaiseError/PrintError which would sometimes show "(no error string)" as the error. Fixed compiler warning thanks to Paul Marquess. Fixed "trace level set to" trace message thanks to H.Merijn Brand. Fixed DBD::DBM $dbh->{dbm_tables}->{...} to be keyed by the table name not the file name thanks to Jeff Zucker. Fixed last_insert_id(...) thanks to Rudy Lippan. Fixed propagation of scalar/list context into proxied methods. Fixed DBI::Profile::DESTROY to not alter $@. Fixed DBI::ProfileDumper new() docs thanks to Michael Schwern. Fixed _load_class to propagate $@ thanks to Drew Taylor. Fixed compile warnings on Win32 thanks to Robert Baron. Fixed problem building with recent versions of MakeMaker. Fixed DBD::Sponge not to generate warning with threads. Fixed DBI_AUTOPROXY to work more than once thanks to Steven Hirsch. Changed TraceLevel 1 to not show recursive/nested calls. Changed getting or setting an invalid attribute to no longer be a fatal error but generate a warning instead. Changed selectall_arrayref() to call finish() if $attr->{MaxRows} is defined. Changed all tests to use Test::More and enhanced the tests thanks to Stevan Little and Andy Lester. See http://qa.perl.org/phalanx/ Changed Test::More minimum prerequisite version to 0.40 (2001). Changed DBI::Profile header to include the date and time. Added DBI->parse_dsn($dsn) method. Added warning if build directory path contains white space. Added docs for parse_trace_flags() and parse_trace_flag(). Removed "may change" warnings from the docs for table_info(), primary_key_info(), and foreign_key_info() methods. =head2 Changes in DBI 1.42 (svn rev 222), 12th March 2004 Fixed $sth->{NUM_OF_FIELDS} of non-executed statement handle to be undef as per the docs (it was 0). Fixed t/41prof_dump.t to work with perl5.9.1. Fixed DBD_ATTRIB_DELETE macro thanks to Marco Paskamp. Fixed DBI::PurePerl looks_like_number() and $DBI::rows. Fixed ref($h)->can("foo") to not croak. Changed attributes (NAME, TYPE etc) of non-executed statement handle to be undef instead of triggering an error. Changed ShowErrorStatement to apply to more $dbh methods. Changed DBI_TRACE env var so just does this at load time: DBI->trace(split '=', $ENV{DBI_TRACE}, 2); Improved "invalid number of parameters" error message. Added DBI::common as base class for DBI::db, DBD::st etc. Moved methods common to all handles into DBI::common. Major tracing enhancement: Added $h->parse_trace_flags("foo|SQL|7") to map a group of trace flags into the corresponding trace flag bits. Added automatic calling of parse_trace_flags() if setting the trace level to a non-numeric value: $h->{TraceLevel}="foo|SQL|7"; $h->trace("foo|SQL|7"); DBI->connect("dbi:Driver(TraceLevel=SQL|foo):...", ...); Currently no trace flags have been defined. Added to, and reworked, the trace documentation. Added dbivport.h for driver authors to use. Major driver additions that Jeff Zucker and I have been working on: Added DBI::SQL::Nano a 'smaller than micro' SQL parser with an SQL::Statement compatible API. If SQL::Statement is installed then DBI::SQL::Nano becomes an empty subclass of SQL::Statement, unless the DBI_SQL_NANO env var is true. Added DBD::File, modified to use DBI::SQL::Nano. Added DBD::DBM, an SQL interface to DBM files using DBD::File. Documentation changes: Corrected typos in docs thanks to Steffen Goeldner. Corrected execute_for_fetch example thanks to Dean Arnold. =head2 Changes in DBI 1.41 (svn rev 130), 22nd February 2004 Fixed execute_for_array() so tuple_status parameter is optional as per docs, thanks to Ed Avis. Fixed execute_for_array() docs to say that it returns undef if any of the execute() calls fail. Fixed take_imp_data() test on m68k reported by Christian Hammers. Fixed write_typeinfo_pm inconsistencies in DBI::DBD::Metadata thanks to Andy Hassall. Fixed $h->{TraceLevel} to not return DBI->trace trace level which it used to if DBI->trace trace level was higher. Changed set_err() to append to errstr, with a leading "\n" if it's not empty, so that multiple error/warning messages are recorded. Changed trace to limit elements dumped when an array reference is returned from a method to the max(40, $DBI::neat_maxlen/10) so that fetchall_arrayref(), for example, doesn't flood the trace. Changed trace level to be a four bit integer (levels 0 thru 15) and a set of topic flags (no topics have been assigned yet). Changed column_info() to check argument count. Extended bind_param() TYPE attribute specification to imply standard formating of value, eg SQL_DATE implies 'YYYY-MM-DD'. Added way for drivers to indicate 'success with info' or 'warning' by setting err to "0" for warning and "" for information. Both values are false and so don't trigger RaiseError etc. Thanks to Steffen Goeldner for the original idea. Added $h->{HandleSetErr} = sub { ... } to be called at the point that an error, warn, or info state is recorded. The code can alter the err, errstr, and state values (e.g., to promote an error to a warning, or the reverse). Added $h->{PrintWarn} attribute to enable printing of warnings recorded by the driver. Defaults to same value as $^W (perl -w). Added $h->{ErrCount} attribute, incremented whenever an error is recorded by the driver via set_err(). Added $h->{Executed} attribute, set if do()/execute() called. Added \%attr parameter to foreign_key_info() method. Added ref count of inner handle to "DESTROY ignored for outer" msg. Added Win32 build config checks to DBI::DBD thanks to Andy Hassall. Added bind_col to Driver.xst so drivers can define their own. Added TYPE attribute to bind_col and specified the expected driver behaviour. Major update to signal handling docs thanks to Lincoln Baxter. Corrected dbiproxy usage doc thanks to Christian Hammers. Corrected type_info_all index hash docs thanks to Steffen Goeldner. Corrected type_info COLUMN_SIZE to chars not bytes thanks to Dean Arnold. Corrected get_info() docs to include details of DBI::Const::GetInfoType. Clarified that $sth->{PRECISION} is OCTET_LENGTH for char types. =head2 Changes in DBI 1.40, 7th January 2004 Fixed handling of CachedKids when DESTROYing threaded handles. Fixed sql_user_name() in DBI::DBD::Metadata (used by write_getinfo_pm) to use $dbh->{Username}. Driver authors please update your code. Changed connect_cached() when running under Apache::DBI to route calls to Apache::DBI::connect(). Added CLONE() to DBD::Sponge and DBD::ExampleP. Added warning when starting a new thread about any loaded driver which does not have a CLONE() function. Added new prepare_cache($sql, \%attr, 3) option to manage Active handles. Added SCALE and NULLABLE support to DBD::Sponge. Added missing execute() in fetchall_hashref docs thanks to Iain Truskett. Added a CONTRIBUTING section to the docs with notes on creating patches. =head2 Changes in DBI 1.39, 27th November 2003 Fixed STORE to not clear error during nested DBI call, again/better, thanks to Tony Bowden for the report and helpful test case. Fixed DBI dispatch to not try to use AUTOLOAD for driver methods unless the method has been declared (as methods should be when using AUTOLOAD). This fixes a problem when the Attribute::Handlers module is loaded. Fixed cwd check code to use $Config{path_sep} thanks to Steve Hay. Fixed unqualified croak() calls thanks to Steffen Goeldner. Fixed DBD::ExampleP TYPE and PRECISION attributes thanks to Tom Lowery. Fixed tracing of methods that only get traced at high trace levels. The level 1 trace no longer includes nested method calls so it generally just shows the methods the application explicitly calls. Added line to trace log (level>=4) when err/errstr is cleared. Updated docs for InactiveDestroy and point out where and when the trace includes the process id. Update DBI::DBD docs thanks to Steffen Goeldner. Removed docs saying that the DBI->data_sources method could be passed a $dbh. The $dbh->data_sources method should be used instead. Added link to 'DBI recipes' thanks to Giuseppe Maxia: http://gmax.oltrelinux.com/dbirecipes.html (note that this is not an endorsement that the recipies are 'optimal') Note: There is a bug in perl 5.8.2 when configured with threads and debugging enabled (bug #24463) which causes a DBI test to fail. =head2 Changes in DBI 1.38, 21th August 2003 NOTE: The DBI now requires perl version 5.6.0 or later. (As per notice in DBI 1.33 released 27th February 2003) Fixed spurious t/03handles failure on 64bit perls reported by H.Merijn Brand. Fixed spurious t/15array failure on some perl versions thanks to Ed Avis. Fixed build using dmake on windows thanks to Steffen Goeldner. Fixed build on using some shells thanks to Gurusamy Sarathy. Fixed ParamValues to only be appended to ShowErrorStatement if not empty. Fixed $dbh->{Statement} not being writable by drivers in some cases. Fixed occasional undef warnings on connect failures thanks to Ed Avis. Fixed small memory leak when using $sth->{NAME..._hash}. Fixed 64bit warnings thanks to Marian Jancar. Fixed DBD::Proxy::db::DESTROY to not alter $@ thanks to Keith Chapman. Fixed Makefile.PL status from WriteMakefile() thanks to Leon Brocard. Changed "Can't set ...->{Foo}: unrecognised attribute" from an error to a warning when running with DBI::ProxyServer to simplify upgrades. Changed execute_array() to no longer require ArrayTupleStatus attribute. Changed DBI->available_drivers to not hide DBD::Sponge. Updated/moved placeholder docs to a better place thanks to Johan Vromans. Changed dbd_db_do4 api in Driver.xst to match dbd_st_execute (return int, not bool), relevant only to driver authors. Changed neat(), and thus trace(), so strings marked as utf8 are presented in double quotes instead of single quotes and are not sanitized. Added $dbh->data_sources method. Added $dbh->last_insert_id method. Added $sth->execute_for_fetch($fetch_tuple_sub, \@tuple_status) method. Added DBI->installed_versions thanks to Jeff Zucker. Added $DBI::Profile::ON_DESTROY_DUMP variable. Added docs for DBD::Sponge thanks to Mark Stosberg. =head2 Changes in DBI 1.37, 15th May 2003 Fixed "Can't get dbh->{Statement}: unrecognised attribute" error in test caused by change to perl internals in 5.8.0 Fixed to build with latest development perl (5.8.1@19525). Fixed C code to use all ANSI declarations thanks to Steven Lembark. =head2 Changes in DBI 1.36, 11th May 2003 Fixed DBI->connect to carp instead of croak on 'old-style' usage. Fixed connect(,,, { RootClass => $foo }) to not croak if module not found. Fixed code generated by DBI::DBD::Metadata thanks to DARREN@cpan.org (#2270) Fixed DBI::PurePerl to not reset $@ during method dispatch. Fixed VMS build thanks to Michael Schwern. Fixed Proxy disconnect thanks to Steven Hirsch. Fixed error in DBI::DBD docs thanks to Andy Hassall. Changed t/40profile.t to not require Time::HiRes. Changed DBI::ProxyServer to load DBI only on first request, which helps threaded server mode, thanks to Bob Showalter. Changed execute_array() return value from row count to executed tuple count, and now the ArrayTupleStatus attribute is mandatory. NOTE: That is an API definition change that may affect your code. Changed CompatMode attribute to also disable attribute 'quick FETCH'. Changed attribute FETCH to be slightly faster thanks to Stas Bekman. Added workaround for perl bug #17575 tied hash nested FETCH thanks to Silvio Wanka. Added Username and Password attributes to connect(..., \%attr) and so also embedded in DSN like "dbi:Driver(Username=user,Password=pass):..." Username and Password can't contain ")", ",", or "=" characters. The predence is DSN first, then \%attr, then $user & $pass parameters, and finally the DBI_USER & DBI_PASS environment variables. The Username attribute is stored in the $dbh but the Password is not. Added ProxyServer HOWTO configure restrictions docs thanks to Jochen Wiedmann. Added MaxRows attribute to selectcol_arrayref prompted by Wojciech Pietron. Added dump_handle as a method not just a DBI:: utility function. Added on-demand by-row data feed into execute_array() using code ref, or statement handle. For example, to insert from a select: $insert_sth->execute_array( { ArrayTupleFetch => $select_sth, ... } ) Added warning to trace log when $h->{foo}=... is ignored due to invalid prefix (e.g., not 'private_'). =head2 Changes in DBI 1.35, 7th March 2003 Fixed memory leak in fetchrow_hashref introduced in DBI 1.33. Fixed various DBD::Proxy errors introduced in DBI 1.33. Fixed to ANSI C in dbd_dr_data_sources thanks to Jonathan Leffler. Fixed $h->can($method_name) to return correct code ref. Removed DBI::Format from distribution as it's now part of the separate DBI::Shell distribution by Tom Lowery. Updated DBI::DBD docs with a note about the CLONE method. Updated DBI::DBD docs thanks to Jonathan Leffler. Updated DBI::DBD::Metadata for perl 5.5.3 thanks to Jonathan Leffler. Added note to install_method docs about setup_driver() method. =head2 Changes in DBI 1.34, 28th February 2003 Fixed DBI::DBD docs to refer to DBI::DBD::Metadata thanks to Jonathan Leffler. Fixed dbi_time() compile using BorlandC on Windows thanks to Steffen Goeldner. Fixed profile tests to do enough work to measure on Windows. Fixed disconnect_all() to not be required by drivers. Added $okay = $h->can($method_name) to check if a method exists. Added DBD::*::*->install_method($method_name, \%attr) so driver private methods can be 'installed' into the DBI dispatcher and no longer need to be called using $h->func(..., $method_name). Enhanced $dbh->clone() and documentation. Enhanced docs to note that dbi_time(), and thus profiling, is limited to only millisecond (seconds/1000) resolution on Windows. Removed old DBI::Shell from distribution and added Tom Lowery's improved version to the Bundle::DBI file. Updated minimum version numbers for modules in Bundle::DBI. =head2 Changes in DBI 1.33, 27th February 2003 NOTE: Future versions of the DBI *will not* support perl 5.6.0 or earlier. : Perl 5.6.1 will be the minimum supported version. NOTE: The "old-style" connect: DBI->connect($database, $user, $pass, $driver); : has been deprecated for several years and will now generate a warning. : It will be removed in a later release. Please change any old connect() calls. Added $dbh2 = $dbh1->clone to make a new connection to the database that is identical to the original one. clone() can be called even after the original handle has been disconnected. See the docs for more details. Fixed merging of profile data to not sum DBIprof_FIRST_TIME values. Fixed unescaping of newlines in DBI::ProfileData thanks to Sam Tregar. Fixed Taint bug with fetchrow_hashref with help from Bradley Baetz. Fixed $dbh->{Active} for DBD::Proxy, reported by Bob Showalter. Fixed STORE to not clear error during nested DBI call, thanks to Tony Bowden for the report and helpful test case. Fixed DBI::PurePerl error clearing behaviour. Fixed dbi_time() and thus DBI::Profile on Windows thanks to Smejkal Petr. Fixed problem that meant ShowErrorStatement could show wrong statement, thanks to Ron Savage for the report and test case. Changed Apache::DBI hook to check for $ENV{MOD_PERL} instead of $ENV{GATEWAY_INTERFACE} thanks to Ask Bjoern Hansen. No longer tries to dup trace logfp when an interpreter is being cloned. Database handles no longer inherit shared $h->err/errstr/state storage from their drivers, so each $dbh has it's own $h->err etc. values and is no longer affected by calls made on other dbh's. Now when a dbh is destroyed it's err/errstr/state values are copied up to the driver so checking $DBI::errstr still works as expected. Build / portability fixes: Fixed t/40profile.t to not use Time::HiRes. Fixed t/06attrs.t to not be locale sensitive, reported by Christian Hammers. Fixed sgi compiler warnings, reported by Paul Blake. Fixed build using make -j4, reported by Jonathan Leffler. Fixed build and tests under VMS thanks to Craig A. Berry. Documentation changes: Documented $high_resolution_time = dbi_time() function. Documented that bind_col() can take an attribute hash. Clarified documentation for ParamValues attribute hash keys. Many good DBI documentation tweaks from Jonathan Leffler, including a major update to the DBI::DBD driver author guide. Clarified that execute() should itself call finish() if it's called on a statement handle that's still active. Clarified $sth->{ParamValues}. Driver authors please note. Removed "NEW" markers on some methods and attributes and added text to each giving the DBI version it was added in, if it was added after DBI 1.21 (Feb 2002). Changes of note for authors of all drivers: Added SQL_DATA_TYPE, SQL_DATETIME_SUB, NUM_PREC_RADIX, and INTERVAL_PRECISION fields to docs for type_info_all. There were already in type_info(), but type_info_all() didn't specify the index values. Please check and update your type_info_all() code. Added DBI::DBD::Metadata module that auto-generates your drivers get_info and type_info_all data and code, thanks mainly to Jonathan Leffler and Steffen Goeldner. If you've not implemented get_info and type_info_all methods and your database has an ODBC driver available then this will do all the hard work for you! Drivers should no longer pass Err, Errstr, or State to _new_drh or _new_dbh functions. Please check that you support the slightly modified behaviour of $sth->{ParamValues}, e.g., always return hash with keys if possible. Changes of note for authors of compiled drivers: Added dbd_db_login6 & dbd_st_finish3 prototypes thanks to Jonathan Leffler. All dbd_*_*() functions implemented by drivers must have a corresponding #define dbd_*_* <driver_prefix>_*_* otherwise the driver may not work with a future release of the DBI. Changes of note for authors of drivers which use Driver.xst: Some new method hooks have been added are are enabled by defining corresponding macros: $drh->data_sources() - dbd_dr_data_sources $dbh->do() - dbd_db_do4 The following methods won't be compiled into the driver unless the corresponding macro has been #defined: $drh->disconnect_all() - dbd_discon_all =head2 Changes in DBI 1.32, 1st December 2002 Fixed to work with 5.005_03 thanks to Tatsuhiko Miyagawa (I've not tested it). Reenabled taint tests (accidentally left disabled) spotted by Bradley Baetz. Improved docs for FetchHashKeyName attribute thanks to Ian Barwick. Fixed core dump if fetchrow_hashref given bad argument (name of attribute with a value that wasn't an array reference), spotted by Ian Barwick. Fixed some compiler warnings thanks to David Wheeler. Updated Steven Hirsch's enhanced proxy work (seems I left out a bit). Made t/40profile.t tests more reliable, reported by Randy, who is part of the excellent CPAN testers team: http://testers.cpan.org/ (Please visit, see the valuable work they do and, ideally, join in!) =head2 Changes in DBI 1.31, 29th November 2002 The fetchall_arrayref method, when called with a $maxrows parameter, no longer gives an error if called again after all rows have been fetched. This simplifies application logic when fetching in batches. Also added batch-fetch while() loop example to the docs. The proxy now supports non-lazy (synchronous) prepare, positioned updates (for selects containing 'for update'), PlRPC config set via attributes, and accurate propagation of errors, all thanks to Steven Hirsch (plus a minor fix from Sean McMurray and doc tweaks from Michael A Chase). The DBI_AUTOPROXY env var can now hold the full dsn of the proxy driver plus attributes, like "dbi:Proxy(proxy_foo=>1):host=...". Added TaintIn & TaintOut attributes to give finer control over tainting thanks to Bradley Baetz. The RootClass attribute no longer ignores failure to load a module, but also doesn't try to load a module if the class already exists, with thanks to James FitzGibbon. HandleError attribute works for connect failures thanks to David Wheeler. The connect() RaiseError/PrintError message now includes the username. Changed "last handle unknown or destroyed" warning to be a trace message. Removed undocumented $h->event() method. Further enhancements to DBD::PurePerl accuracy. The CursorName attribute now defaults to undef and not an error. DBI::Profile changes: New DBI::ProfileDumper, DBI::ProfileDumper::Apache, and DBI::ProfileData modules (to manage the storage and processing of profile data), plus dbiprof program for analyzing profile data - with many thanks to Sam Tregar. Added $DBI::err (etc) tied variable lookup time to profile. Added time for DESTROY method into parent handles profile (used to be ignored). Documentation changes: Documented $dbh = $sth->{Database} attribute. Documented $dbh->connected(...) post-connection call when subclassing. Updated some minor doc issues thanks to H.Merijn Brand. Updated Makefile.PL example in DBI::DBD thanks to KAWAI,Takanori. Fixed execute_array() example thanks to Peter van Hardenberg. Changes for driver authors, not required but strongly recommended: Change DBIS to DBIc_DBISTATE(imp_xxh) [or imp_dbh, imp_sth etc] Change DBILOGFP to DBIc_LOGPIO(imp_xxh) [or imp_dbh, imp_sth etc] Any function from which all instances of DBIS and DBILOGFP are removed can also have dPERLINTERP removed (a good thing). All use of the DBIh_EVENT* macros should be removed. Major update to DBI::DBD docs thanks largely to Jonathan Leffler. Add these key values: 'Err' => \my $err, 'Errstr' => \my $errstr, to the hash passed to DBI::_new_dbh() in your driver source code. That will make each $dbh have it's own $h->err and $h->errstr values separate from other $dbh belonging to the same driver. If you have a ::db or ::st DESTROY methods that do nothing you can now remove them - which speeds up handle destruction. =head2 Changes in DBI 1.30, 18th July 2002 Fixed problems with selectrow_array, selectrow_arrayref, and selectall_arrayref introduced in DBI 1.29. Fixed FETCHing a handle attribute to not clear $DBI::err etc (broken in 1.29). Fixed core dump at trace level 9 or above. Fixed compilation with perl 5.6.1 + ithreads (i.e. Windows). Changed definition of behaviour of selectrow_array when called in a scalar context to match fetchrow_array. Corrected selectrow_arrayref docs which showed selectrow_array thanks to Paul DuBois. =head2 Changes in DBI 1.29, 15th July 2002 NOTE: This release changes the specified behaviour for the : fetchrow_array method when called in a scalar context: : The DBI spec used to say that it would return the FIRST field. : Which field it returns (i.e., the first or the last) is now undefined. : This does not affect statements that only select one column, which is : usually the case when fetchrow_array is called in a scalar context. : FYI, this change was triggered by discovering that the fetchrow_array : implementation in Driver.xst (used by most compiled drivers) : didn't match the DBI specification. Rather than change the code : to match, and risk breaking existing applications, I've changed the : specification (that part was always of dubious value anyway). NOTE: Future versions of the DBI may not support for perl 5.5 much longer. : If you are still using perl 5.005_03 you should be making plans to : upgrade to at least perl 5.6.1, or 5.8.0. Perl 5.8.0 is due to be : released in the next week or so. (Although it's a "point 0" release, : it is the most thoroughly tested release ever.) Added XS/C implementations of selectrow_array, selectrow_arrayref, and selectall_arrayref to Driver.xst. See DBI 1.26 Changes for more info. Removed support for the old (fatally flawed) "5005" threading model. Added support for new perl 5.8 iThreads thanks to Gerald Richter. (Threading support and safety should still be regarded as beta quality until further notice. But it's much better than it was.) Updated the "Threads and Thread Safety" section of the docs. The trace output can be sent to STDOUT instead of STDERR by using "STDOUT" as the name of the file, i.e., $h->trace(..., "STDOUT") Added pointer to perlreftut, perldsc, perllol, and perlboot manuals into the intro section of the docs, suggested by Brian McCain. Fixed DBI::Const::GetInfo::* pod docs thanks to Zack Weinberg. Some changes to how $dbh method calls are treated by DBI::Profile: Meta-data methods now clear $dbh->{Statement} on entry. Some $dbh methods are now profiled as if $dbh->{Statement} was empty (because thet're unlikely to actually relate to its contents). Updated dbiport.h to ppport.h from perl 5.8.0. Tested with perl 5.5.3 (vanilla, Solaris), 5.6.1 (vanilla, Solaris), and perl 5.8.0 (RC3@17527 with iThreads & Multiplicity on Solaris and FreeBSD). =head2 Changes in DBI 1.28, 14th June 2002 Added $sth->{ParamValues} to return a hash of the most recent values bound to placeholders via bind_param() or execute(). Individual drivers need to be updated to support it. Enhanced ShowErrorStatement to include ParamValues if available: "DBD::foo::st execute failed: errstr [for statement ``...'' with params: 1='foo']" Further enhancements to DBD::PurePerl accuracy. =head2 Changes in DBI 1.27, 13th June 2002 Fixed missing column in C implementation of fetchall_arrayref() thanks to Philip Molter for the prompt reporting of the problem. =head2 Changes in DBI 1.26, 13th June 2002 Fixed t/40profile.t to work on Windows thanks to Smejkal Petr. Fixed $h->{Profile} to return undef, not error, if not set. Fixed DBI->available_drivers in scalar context thanks to Michael Schwern. Added C implementations of selectrow_arrayref() and fetchall_arrayref() in Driver.xst. All compiled drivers using Driver.xst will now be faster making those calls. Most noticeable with fetchall_arrayref for many rows or selectrow_arrayref with a fast query. For example, using DBD::mysql a selectrow_arrayref for a single row using a primary key is ~20% faster, and fetchall_arrayref for 20000 rows is twice as fast! Drivers just need to be recompiled and reinstalled to enable it. The fetchall_arrayref speed up only applies if $slice parameter is not used. Added $max_rows parameter to fetchall_arrayref() to optionally limit the number of rows returned. Can now fetch batches of rows. Added MaxRows attribute to selectall_arrayref() which then passes it to fetchall_arrayref(). Changed selectrow_array to make use of selectrow_arrayref. Trace level 1 now shows first two parameters of all methods (used to only for that for some, like prepare,execute,do etc) Trace indicator for recursive calls (first char on trace lines) now starts at 1 not 2. Documented that $h->func() does not trigger RaiseError etc so applications must explicitly check for errors. DBI::Profile with DBI_PROFILE now shows percentage time inside DBI. HandleError docs updated to show that handler can edit error message. HandleError subroutine interface is now regarded as stable. =head2 Changes in DBI 1.25, 5th June 2002 Fixed build problem on Windows and some compiler warnings. Fixed $dbh->{Driver} and $sth->{Statement} for driver internals These are 'inner' handles as per behaviour prior to DBI 1.16. Further minor improvements to DBI::PurePerl accuracy. =head2 Changes in DBI 1.24, 4th June 2002 Fixed reference loop causing a handle/memory leak that was introduced in DBI 1.16. Fixed DBI::Format to work with 'filehandles' from IO::Scalar and similar modules thanks to report by Jeff Boes. Fixed $h->func for DBI::PurePerl thanks to Jeff Zucker. Fixed $dbh->{Name} for DBI::PurePerl thanks to Dean Arnold. Added DBI method call profiling and benchmarking. This is a major new addition to the DBI. See $h->{Profile} attribute and DBI::Profile module. For a quick trial, set the DBI_PROFILE environment variable and run your favourite DBI script. Try it with DBI_PROFILE set to 1, then try 2, 4, 8, 10, and -10. Have fun! Added execute_array() and bind_param_array() documentation with thanks to Dean Arnold. Added notes about the DBI having not yet been tested with iThreads (testing and patches for SvLOCK etc welcome). Removed undocumented Handlers attribute (replaced by HandleError). Tested with 5.5.3 and 5.8.0 RC1. =head2 Changes in DBI 1.23, 25th May 2002 Greatly improved DBI::PurePerl in performance and accuracy. Added more detail to DBI::PurePerl docs about what's not supported. Fixed undef warnings from t/15array.t and DBD::Sponge. =head2 Changes in DBI 1.22, 22nd May 2002 Added execute_array() and bind_param_array() with special thanks to Dean Arnold. Not yet documented. See t/15array.t for examples. All drivers now automatically support these methods. Added DBI::PurePerl, a transparent DBI emulation for pure-perl drivers with special thanks to Jeff Zucker. Perldoc DBI::PurePerl for details. Added DBI::Const::GetInfo* modules thanks to Steffen Goeldner. Added write_getinfo_pm utility to DBI::DBD thanks to Steffen Goeldner. Added $allow_active==2 mode for prepare_cached() thanks to Stephen Clouse. Updated DBI::Format to Revision 11.4 thanks to Tom Lowery. Use File::Spec in Makefile.PL (helps VMS etc) thanks to Craig Berry. Extend $h->{Warn} to commit/rollback ineffective warning thanks to Jeff Baker. Extended t/preparse.t and removed "use Devel::Peek" thanks to Scott Hildreth. Only copy Changes to blib/lib/Changes.pm once thanks to Jonathan Leffler. Updated internals for modern perls thanks to Jonathan Leffler and Jeff Urlwin. Tested with perl 5.7.3 (just using default perl config). Documentation changes: Added 'Catalog Methods' section to docs thanks to Steffen Goeldner. Updated README thanks to Michael Schwern. Clarified that driver may choose not to start new transaction until next use of $dbh after commit/rollback. Clarified docs for finish method. Clarified potentials problems with prepare_cached() thanks to Stephen Clouse. =head2 Changes in DBI 1.21, 7th February 2002 The minimum supported perl version is now 5.005_03. Fixed DBD::Proxy support for AutoCommit thanks to Jochen Wiedmann. Fixed DBI::ProxyServer bind_param(_inout) handing thanks to Oleg Mechtcheriakov. Fixed DBI::ProxyServer fetch loop thanks to nobull@mail.com. Fixed install_driver do-the-right-thing with $@ on error. It, and connect(), will leave $@ empty on success and holding the error message on error. Thanks to Jay Lawrence, Gavin Sherlock and others for the bug report. Fixed fetchrow_hashref to assign columns to the hash left-to-right so later fields with the same name overwrite earlier ones as per DBI < 1.15, thanks to Kay Roepke. Changed tables() to use quote_indentifier() if the driver returns a true value for $dbh->get_info(29) # SQL_IDENTIFIER_QUOTE_CHAR Changed ping() so it no longer triggers RaiseError/PrintError. Changed connect() to not call $class->install_driver unless needed. Changed DESTROY to catch fatal exceptions and append to $@. Added ISO SQL/CLI & ODBCv3 data type definitions thanks to Steffen Goeldner. Removed the definition of SQL_BIGINT data type constant as the value is inconsistent between standards (ODBC=-5, SQL/CLI=25). Added $dbh->column_info(...) thanks to Steffen Goeldner. Added $dbh->foreign_key_info(...) thanks to Steffen Goeldner. Added $dbh->quote_identifier(...) insipred by Simon Oliver. Added $dbh->set_err(...) for DBD authors and DBI subclasses (actually been there for a while, now expanded and documented). Added $h->{HandleError} = sub { ... } addition and/or alternative to RaiseError/PrintError. See the docs for more info. Added $h->{TraceLevel} = N attribute to set/get trace level of handle thus can set trace level via an (eg externally specified) DSN using the embedded attribute syntax: $dsn = 'dbi:DB2(PrintError=1,TraceLevel=2):dbname'; Plus, you can also now do: local($h->{TraceLevel}) = N; (but that leaks a little memory in some versions of perl). Added some call tree information to trace output if trace level >= 3 With thanks to Graham Barr for the stack walking code. Added experimental undocumented $dbh->preparse(), see t/preparse.t With thanks to Scott T. Hildreth for much of the work. Added Fowler/Noll/Vo hash type as an option to DBI::hash(). Documentation changes: Added DBI::Changes so now you can "perldoc DBI::Changes", yeah! Added selectrow_arrayref & selectrow_hashref docs thanks to Doug Wilson. Added 'Standards Reference Information' section to docs to gather together all references to relevant on-line standards. Added link to poop.sourceforge.net into the docs thanks to Dave Rolsky. Added link to hyperlinked BNF for SQL92 thanks to Jeff Zucker. Added 'Subclassing the DBI' docs thanks to Stephen Clouse, and then changed some of them to reflect the new approach to subclassing. Added stronger wording to description of $h->{private_*} attributes. Added docs for DBI::hash. Driver API changes: Now a COPY of the DBI->connect() attributes is passed to the driver connect() method, so it can process and delete any elements it wants. Deleting elements reduces/avoids the explicit $dbh->{$_} = $attr->{$_} foreach keys %$attr; that DBI->connect does after the driver connect() method returns. =head2 Changes in DBI 1.20, 24th August 2001 WARNING: This release contains two changes that may affect your code. : Any code using selectall_hashref(), which was added in March 2001, WILL : need to be changed. Any code using fetchall_arrayref() with a non-empty : hash slice parameter may, in a few rare cases, need to be changed. : See the change list below for more information about the changes. : See the DBI documentation for a description of current behaviour. Fixed memory leak thanks to Toni Andjelkovic. Changed fetchall_arrayref({ foo=>1, ...}) specification again (sorry): The key names of the returned hashes is identical to the letter case of the names in the parameter hash, regardless of the L</FetchHashKeyName> attribute. The letter case is ignored for matching. Changed fetchall_arrayref([...]) array slice syntax specification to clarify that the numbers in the array slice are perl index numbers (which start at 0) and not column numbers (which start at 1). Added { Columns=>... } and { Slice =>... } attributes to selectall_arrayref() which is passed to fetchall_arrayref() so it can fetch hashes now. Added a { Columns => [...] } attribute to selectcol_arrayref() so that the list it returns can be built from more than one column per row. Why? Consider my %hash = @{$dbh->selectcol_arrayref($sql,{ Columns=>[1,2]})} to return id-value pairs which can be used directly to build a hash. Added $hash_ref = $sth->fetchall_hashref( $key_field ) which returns a ref to a hash with, typically, one element per row. $key_field is the name of the field to get the key for each row from. The value of the hash for each row is a hash returned by fetchrow_hashref. Changed selectall_hashref to return a hash ref (from fetchall_hashref) and not an array of hashes as it has since DBI 1.15 (end March 2001). WARNING: THIS CHANGE WILL BREAK ANY CODE USING selectall_hashref()! Sorry, but I think this is an important regularization of the API. To get previous selectall_hashref() behaviour (an array of hash refs) change $ary_ref = $dbh->selectall_hashref( $statement, undef, @bind); to $ary_ref = $dbh->selectall_arrayref($statement, { Columns=>{} }, @bind); Added NAME_lc_hash, NAME_uc_hash, NAME_hash statement handle attributes. which return a ref to a hash of field_name => field_index (0..n-1) pairs. Fixed select_hash() example thanks to Doug Wilson. Removed (unbundled) DBD::ADO and DBD::Multiplex from the DBI distribution. The latest versions of those modules are available from CPAN sites. Added $dbh->begin_work. This method causes AutoCommit to be turned off just until the next commit() or rollback(). Driver authors: if the DBIcf_BegunWork flag is set when your commit or rollback method is called then please turn AutoCommit on and clear the DBIcf_BegunWork flag. If you don't then the DBI will but it'll be much less efficient and won't handle error conditions very cleanly. Retested on perl 5.4.4, but the DBI won't support 5.4.x much longer. Added text to SUPPORT section of the docs: For direct DBI and DBD::Oracle support, enhancement, and related work I am available for consultancy on standard commercial terms. Added text to ACKNOWLEDGEMENTS section of the docs: Much of the DBI and DBD::Oracle was developed while I was Technical Director (CTO) of the Paul Ingram Group (www.ig.co.uk). So I'd especially like to thank Paul for his generosity and vision in supporting this work for many years. =head2 Changes in DBI 1.19, 20th July 2001 Made fetchall_arrayref({ foo=>1, ...}) be more strict to the specification in relation to wanting hash slice keys to be lowercase names. WARNING: If you've used fetchall_arrayref({...}) with a hash slice that contains keys with uppercase letters then your code will break. (As far as I recall the spec has always said don't do that.) Fixed $sth->execute() to update $dbh->{Statement} to $sth->{Statement}. Added row number to trace output for fetch method calls. Trace level 1 no longer shows fetches with row>1 (to reduce output volume). Added $h->{FetchHashKeyName} = 'NAME_lc' or 'NAME_uc' to alter behaviour of fetchrow_hashref() method. See docs. Added type_info quote caching to quote() method thanks to Dean Kopesky. Makes using quote() with second data type param much much faster. Added type_into_all() caching to type_info(), spotted by Dean Kopesky. Added new API definition for table_info() and tables(), driver authors please note! Added primary_key_info() to DBI API thanks to Steffen Goeldner. Added primary_key() to DBI API as simpler interface to primary_key_info(). Indent and other fixes for DBI::DBD doc thanks to H.Merijn Brand. Added prepare_cached() insert_hash() example thanks to Doug Wilson. Removed false docs for fetchall_hashref(), use fetchall_arrayref({}). =head2 Changes in DBI 1.18, 4th June 2001 Fixed that altering ShowErrorStatement also altered AutoCommit! Thanks to Jeff Boes for spotting that clanger. Fixed DBD::Proxy to handle commit() and rollback(). Long overdue, sorry. Fixed incompatibility with perl 5.004 (but no one's using that right? :) Fixed connect_cached and prepare_cached to not be affected by the order of elements in the attribute hash. Spotted by Mitch Helle-Morrissey. Fixed version number of DBI::Shell reported by Stuhlpfarrer Gerhard and others. Defined and documented table_info() attribute semantics (ODBC compatible) thanks to Olga Voronova, who also implemented then in DBD::Oracle. Updated Win32::DBIODBC (Win32::ODBC emulation) thanks to Roy Lee. =head2 Changes in DBI 1.16, 30th May 2001 Reimplemented fetchrow_hashref in C, now fetches about 25% faster! Changed behaviour if both PrintError and RaiseError are enabled to simply do both (in that order, obviously :) Slight reduction in DBI handle creation overhead. Fixed $dbh->{Driver} & $sth->{Database} to return 'outer' handles. Fixed execute param count check to honour RaiseError spotted by Belinda Giardie. Fixed build for perl5.6.1 with PERLIO thanks to H.Merijn Brand. Fixed client sql restrictions in ProxyServer.pm thanks to Jochen Wiedmann. Fixed batch mode command parsing in Shell thanks to Christian Lemburg. Fixed typo in selectcol_arrayref docs thanks to Jonathan Leffler. Fixed selectrow_hashref to be available to callers thanks to T.J.Mather. Fixed core dump if statement handle didn't define Statement attribute. Added bind_param_inout docs to DBI::DBD thanks to Jonathan Leffler. Added note to data_sources() method docs that some drivers may require a connected database handle to be supplied as an attribute. Trace of install_driver method now shows path of driver file loaded. Changed many '||' to 'or' in the docs thanks to H.Merijn Brand. Updated DBD::ADO again (improvements in error handling) from Tom Lowery. Updated Win32::DBIODBC (Win32::ODBC emulation) thanks to Roy Lee. Updated email and web addresses in DBI::FAQ thanks to Michael A Chase. =head2 Changes in DBI 1.15, 28th March 2001 Added selectrow_arrayref Added selectrow_hashref Added selectall_hashref thanks to Leon Brocard. Added DBI->connect(..., { dbi_connect_method => 'method' }) Added $dbh->{Statement} aliased to most recent child $sth->{Statement}. Added $h->{ShowErrorStatement}=1 to cause the appending of the relevant Statement text to the RaiseError/PrintError text. Modified type_info to always return hash keys in uppercase and to not require uppercase 'DATA_TYPE' key from type_info_all. Thanks to Jennifer Tong and Rob Douglas. Added \%attr param to tables() and table_info() methods. Trace method uses warn() if it can't open the new file. Trace shows source line and filename during global destruction. Updated packages: Updated Win32::DBIODBC (Win32::ODBC emulation) thanks to Roy Lee. Updated DBD::ADO to much improved version 0.4 from Tom Lowery. Updated DBD::Sponge to include $sth->{PRECISION} thanks to Tom Lowery. Changed DBD::ExampleP to use lstat() instead of stat(). Documentation: Documented $DBI::lasth (which has been there since day 1). Documented SQL_* names. Clarified and extended docs for $h->state thanks to Masaaki Hirose. Clarified fetchall_arrayref({}) docs (thanks to, er, someone!). Clarified type_info_all re lettercase and index values. Updated DBI::FAQ to 0.38 thanks to Alligator Descartes. Added cute bind_columns example thanks to H.Merijn Brand. Extended docs on \%attr arg to data_sources method. Makefile.PL Removed obscure potential 'rm -rf /' (thanks to Ulrich Pfeifer). Removed use of glob and find (thanks to Michael A. Chase). Proxy: Removed debug messages from DBD::Proxy AUTOLOAD thanks to Brian McCauley. Added fix for problem using table_info thanks to Tom Lowery. Added better determination of where to put the pid file, and... Added KNOWN ISSUES section to DBD::Proxy docs thanks to Jochen Wiedmann. Shell: Updated DBI::Format to include DBI::Format::String thanks to Tom Lowery. Added describe command thanks to Tom Lowery. Added columnseparator option thanks to Tom Lowery (I think). Added 'raw' format thanks to, er, someone, maybe Tom again. Known issues: Perl 5.005 and 5.006 both leak memory doing local($handle->{Foo}). Perl 5.004 doesn't. The leak is not a DBI or driver bug. =head2 Changes in DBI 1.14, 14th June 2000 NOTE: This version is the one the DBI book is based on. NOTE: This version requires at least Perl 5.004. Perl 5.6 ithreads changes with thanks to Doug MacEachern. Changed trace output to use PerlIO thanks to Paul Moore. Fixed bug in RaiseError/PrintError handling. (% chars in the error string could cause a core dump.) Fixed Win32 PerlEx IIS concurrency bugs thanks to Murray Nesbitt. Major documentation polishing thanks to Linda Mui at O'Reilly. Password parameter now shown as **** in trace output. Added two fields to type_info and type_info_all. Added $dsn to PrintError/RaiseError message from DBI->connect(). Changed prepare_cached() croak to carp if sth still Active. Added prepare_cached() example to the docs. Added further DBD::ADO enhancements from Thomas Lowery. =head2 Changes in DBI 1.13, 11th July 1999 Fixed Win32 PerlEx IIS concurrency bugs thanks to Murray Nesbitt. Fixed problems with DBD::ExampleP long_list test mode. Added SQL_WCHAR SQL_WVARCHAR SQL_WLONGVARCHAR and SQL_BIT to list of known and exportable SQL types. Improved data fetch performance of DBD::ADO. Added GetTypeInfo to DBD::ADO thanks to Thomas Lowery. Actually documented connect_cached thanks to Michael Schwern. Fixed user/key/cipher bug in ProxyServer thanks to Joshua Pincus. =head2 Changes in DBI 1.12, 29th June 1999 Fixed significant DBD::ADO bug (fetch skipped first row). Fixed ProxyServer bug handling non-select statements. Fixed VMS problem with t/examp.t thanks to Craig Berry. Trace only shows calls to trace_msg and _set_fbav at high levels. Modified t/examp.t to workaround Cygwin buffering bug. =head2 Changes in DBI 1.11, 17th June 1999 Fixed bind_columns argument checking to allow a single arg. Fixed problems with internal default_user method. Fixed broken DBD::ADO. Made default $DBI::rows more robust for some obscure cases. =head2 Changes in DBI 1.10, 14th June 1999 Fixed trace_msg.al error when using Apache. Fixed dbd_st_finish enhancement in Driver.xst (internals). Enable drivers to define default username and password and temporarily disabled warning added in 1.09. Thread safety optimised for single thread case. =head2 Changes in DBI 1.09, 9th June 1999 Added optional minimum trace level parameter to trace_msg(). Added warning in Makefile.PL that DBI will require 5.004 soon. Added $dbh->selectcol_arrayref($statement) method. Fixed fetchall_arrayref hash-slice mode undef NAME problem. Fixed problem with tainted parameter checking and t/examp.t. Fixed problem with thread safety code, including 64 bit machines. Thread safety now enabled by default for threaded perls. Enhanced code for MULTIPLICITY/PERL_OBJECT from ActiveState. Enhanced prepare_cached() method. Minor changes to trace levels (less internal info at level 2). Trace log now shows "!! ERROR..." before the "<- method" line. DBI->connect() now warn's if user / password is undefined and DBI_USER / DBI_PASS environment variables are not defined. The t/proxy.t test now ignores any /etc/dbiproxy.conf file. Added portability fixes for MacOS from Chris Nandor. Updated mailing list address from fugue.com to isc.org. =head2 Changes in DBI 1.08, 12th May 1999 Much improved DBD::ADO driver thanks to Phlip Plumlee and others. Connect now allows you to specify attribute settings within the DSN E.g., "dbi:Driver(RaiseError=>1,Taint=>1,AutoCommit=>0):dbname" The $h->{Taint} attribute now also enables taint checking of arguments to almost all DBI methods. Improved trace output in various ways. Fixed bug where $sth->{NAME_xx} was undef in some situations. Fixed code for MULTIPLICITY/PERL_OBJECT thanks to Alex Smishlajev. Fixed and documented DBI->connect_cached. Workaround for Cygwin32 build problem with help from Jong-Pork Park. bind_columns no longer needs undef or hash ref as first parameter. =head2 Changes in DBI 1.07, 6th May 1999 Trace output now shows contents of array refs returned by DBI. Changed names of some result columns from type_info, type_info_all, tables and table_info to match ODBC 3.5 / ISO/IEC standards. Many fixes for DBD::Proxy and ProxyServer. Fixed error reporting in install_driver. Major enhancement to DBI::W32ODBC from Patrick Hollins. Added $h->{Taint} to taint fetched data if tainting (perl -T). Added code for MULTIPLICITY/PERL_OBJECT contributed by ActiveState. Added $sth->more_results (undocumented for now). =head2 Changes in DBI 1.06, 6th January 1999 Fixed Win32 Makefile.PL problem in 1.04 and 1.05. Significant DBD::Proxy enhancements and fixes including support for bind_param_inout (Jochen and I) Added experimental DBI->connect_cached method. Added $sth->{NAME_uc} and $sth->{NAME_lc} attributes. Enhanced fetchrow_hashref to take an attribute name arg. =head2 Changes in DBI 1.05, 4th January 1999 Improved DBD::ADO connect (thanks to Phlip Plumlee). Improved thread safety (thanks to Jochen Wiedmann). [Quick release prompted by truncation of copies on CPAN] =head2 Changes in DBI 1.04, 3rd January 1999 Fixed error in Driver.xst. DBI build now tests Driver.xst. Removed unused variable compiler warnings in Driver.xst. DBI::DBD module now tested during DBI build. Further clarification in the DBI::DBD driver writers manual. Added optional name parameter to $sth->fetchrow_hashref. =head2 Changes in DBI 1.03, 1st January 1999 Now builds with Perl>=5.005_54 (PERL_POLLUTE in DBIXS.h) DBI trace trims path from "at yourfile.pl line nnn". Trace level 1 now shows statement passed to prepare. Assorted improvements to the DBI manual. Assorted improvements to the DBI::DBD driver writers manual. Fixed $dbh->quote prototype to include optional $data_type. Fixed $dbh->prepare_cached problems. $dbh->selectrow_array behaves better in scalar context. Added a (very) experimental DBD::ADO driver for Win32 ADO. Added experimental thread support (perl Makefile.PL -thread). Updated the DBI::FAQ - thanks to Alligator Descartes. The following changes were implemented and/or packaged by Jochen Wiedmann - thanks Jochen: Added a Bundle for CPAN installation of DBI, the DBI proxy server and prerequisites (lib/Bundle/DBI.pm). DBI->available_drivers uses File::Spec, if available. This makes it work on MacOS. (DBI.pm) Modified type_info to work with read-only values returned by type_info_all. (DBI.pm) Added handling of magic values in $sth->execute, $sth->bind_param and other methods (Driver.xst) Added Perl's CORE directory to the linkers path on Win32, required by recent versions of ActiveState Perl. Fixed DBD::Sponge to work with empty result sets. Complete rewrite of DBI::ProxyServer and DBD::Proxy. =head2 Changes in DBI 1.02, 2nd September 1998 Fixed DBI::Shell including @ARGV and /current. Added basic DBI::Shell test. Renamed DBI::Shell /display to /format. =head2 Changes in DBI 1.01, 2nd September 1998 Many enhancements to Shell (with many contributions from Jochen Wiedmann, Tom Lowery and Adam Marks). Assorted fixes to DBD::Proxy and DBI::ProxyServer. Tidied up trace messages - trace(2) much cleaner now. Added $dbh->{RowCacheSize} and $sth->{RowsInCache}. Added experimental DBI::Format (mainly for DBI::Shell). Fixed fetchall_arrayref($slice_hash). DBI->connect now honours PrintError=1 if connect fails. Assorted clarifications to the docs. =head2 Changes in DBI 1.00, 14th August 1998 The DBI is no longer 'alpha' software! Added $dbh->tables and $dbh->table_info. Documented \%attr arg to data_sources method. Added $sth->{TYPE}, $sth->{PRECISION} and $sth->{SCALE}. Added $sth->{Statement}. DBI::Shell now uses neat_list to print results It also escapes "'" chars and converts newlines to spaces. =head2 Changes in DBI 0.95, 10th August 1998 WARNING: THIS IS AN EXPERIMENTAL RELEASE! Fixed 0.94 slip so it will build on pre-5.005 again. Added DBI_AUTOPROXY environment variable. Array ref returned from fetch/fetchrow_arrayref now readonly. Improved connect error reporting by DBD::Proxy. All trace/debug messages from DBI now go to trace file. =head2 Changes in DBI 0.94, 9th August 1998 WARNING: THIS IS AN EXPERIMENTAL RELEASE! Added DBD::Shell and dbish interactive DBI shell. Try it! Any database attribs can be set via DBI->connect(,,, \%attr). Added _get_fbav and _set_fbav methods for Perl driver developers (see ExampleP driver for perl usage). Drivers which don't use one of these methods (either via XS or Perl) are not compliant. DBI trace now shows adds " at yourfile.pl line nnn"! PrintError and RaiseError now prepend driver and method name. The available_drivers method no longer returns NullP or Sponge. Added $dbh->{Name}. Added $dbh->quote($value, $data_type). Added more hints to install_driver failure message. Added DBD::Proxy and DBI::ProxyServer (from Jochen Wiedmann). Added $DBI::neat_maxlen to control truncation of trace output. Added $dbh->selectall_arrayref and $dbh->selectrow_array methods. Added $dbh->tables. Added $dbh->type_info and $dbh->type_info_all. Added $h->trace_msg($msg) to write to trace log. Added @bool = DBI::looks_like_number(@ary). Many assorted improvements to the DBI docs. =head2 Changes in DBI 0.93, 13th February 1998 Fixed DBI::DBD::dbd_postamble bug causing 'Driver.xsi not found' errors. Changes to handling of 'magic' values in neatsvpv (used by trace). execute (in Driver.xst) stops binding after first bind error. This release requires drivers to be rebuilt. =head2 Changes in DBI 0.92, 3rd February 1998 Fixed per-handle memory leak (with many thanks to Irving Reid). Added $dbh->prepare_cached() caching variant of $dbh->prepare. Added some attributes: $h->{Active} is the handle 'Active' (vague concept) (boolean) $h->{Kids} e.g. number of sth's associated with a dbh $h->{ActiveKids} number of the above which are 'Active' $dbh->{CachedKids} ref to prepare_cached sth cache Added support for general-purpose 'private_' attributes. Added experimental support for subclassing the DBI: see t/subclass.t Added SQL_ALL_TYPES to exported :sql_types. Added dbd_dbi_dir() and dbd_dbi_arch_dir() to DBI::DBD module so that DBD Makefile.PLs can work with the DBI installed in non-standard locations. Fixed 'Undefined value' warning and &sv_no output from neatsvpv/trace. Fixed small 'once per interpreter' leak. Assorted minor documentation fixes. =head2 Changes in DBI 0.91, 10th December 1997 NOTE: This fix may break some existing scripts: DBI->connect("dbi:...",$user,$pass) was not setting AutoCommit and PrintError! DBI->connect(..., { ... }) no longer sets AutoCommit or PrintError twice. DBI->connect(..., { RaiseError=>1 }) now croaks if connect fails. Fixed $fh parameter of $sth->dump_results; Added default statement DESTROY method which carps. Added default driver DESTROY method to silence AUTOLOAD/__DIE__/CGI::Carp Added more SQL_* types to %EXPORT_TAGS and @EXPORT_OK. Assorted documentation updates (mainly clarifications). Added workaround for perl's 'sticky lvalue' bug. Added better warning for bind_col(umns) where fields==0. Fixed to build okay with 5.004_54 with or without USE_THREADS. Note that the DBI has not been tested for thread safety yet. =head2 Changes in DBI 0.90, 6th September 1997 Can once again be built with Perl 5.003. The DBI class can be subclassed more easily now. InactiveDestroy fixed for drivers using the *.xst template. Slightly faster handle creation. Changed prototype for dbd_*_*_attrib() to add extra param. Note: 0.90, 0.89 and possibly some other recent versions have a small memory leak. This will be fixed in the next release. =head2 Changes in DBI 0.89, 25th July 1997 Minor fix to neatsvpv (mainly used for debug trace) to workaround bug in perl where SvPV removes IOK flag from an SV. Minor updates to the docs. =head2 Changes in DBI 0.88, 22nd July 1997 Fixed build for perl5.003 and Win32 with Borland. Fixed documentation formatting. Fixed DBI_DSN ignored for old-style connect (with explicit driver). Fixed AutoCommit in DBD::ExampleP Fixed $h->trace. The DBI can now export SQL type values: use DBI ':sql_types'; Modified Driver.xst and renamed DBDI.h to dbd_xsh.h =head2 Changes in DBI 0.87, 18th July 1997 Fixed minor type clashes. Added more docs about placeholders and bind values. =head2 Changes in DBI 0.86, 16th July 1997 Fixed failed connect causing 'unblessed ref' and other errors. Drivers must handle AutoCommit FETCH and STORE else DBI croaks. Added $h->{LongReadLen} and $h->{LongTruncOk} attributes for BLOBS. Added DBI_USER and DBI_PASS env vars. See connect docs for usage. Added DBI->trace() to set global trace level (like per-handle $h->trace). PERL_DBI_DEBUG env var renamed DBI_DEBUG (old name still works for now). Updated docs, including commit, rollback, AutoCommit and Transactions sections. Added bind_param method and execute(@bind_values) to docs. Fixed fetchall_arrayref. Since the DBIS structure has change the internal version numbers have also changed (DBIXS_VERSION == 9 and DBISTATE_VERSION == 9) so drivers will have to be recompiled. The test is also now more sensitive and the version mismatch error message now more clear about what to do. Old drivers are likely to core dump (this time) until recompiled for this DBI. In future DBI/DBD version mismatch will always produce a clear error message. Note that this DBI release contains and documents many new features that won't appear in drivers for some time. Driver writers might like to read perldoc DBI::DBD and comment on or apply the information given. =head2 Changes in DBI 0.85, 25th June 1997 NOTE: New-style connect now defaults to AutoCommit mode unless { AutoCommit => 0 } specified in connect attributes. See the docs. AutoCommit attribute now defined and tracked by DBI core. Drivers should use/honour this and not implement their own. Added pod doc changes from Andreas and Jonathan. New DBI_DSN env var default for connect method. See docs. Documented the func method. Fixed "Usage: DBD::_::common::DESTROY" error. Fixed bug which set some attributes true when there value was fetched. Added new internal DBIc_set() macro for drivers to use. =head2 Changes in DBI 0.84, 20th June 1997 Added $h->{PrintError} attribute which, if set true, causes all errors to trigger a warn(). New-style DBI->connect call now automatically sets PrintError=1 unless { PrintError => 0 } specified in the connect attributes. See the docs. The old-style connect with a separate driver parameter is deprecated. Fixed fetchrow_hashref. Renamed $h->debug to $h->trace() and added a trace filename arg. Assorted other minor tidy-ups. =head2 Changes in DBI 0.83, 11th June 1997 Added driver specification syntax to DBI->connect data_source parameter: DBI->connect('dbi:driver:...', $user, $passwd); The DBI->data_sources method should return data_source names with the appropriate 'dbi:driver:' prefix. DBI->connect will warn if \%attr is true but not a hash ref. Added the new fetchrow methods: @row_ary = $sth->fetchrow_array; $ary_ref = $sth->fetchrow_arrayref; $hash_ref = $sth->fetchrow_hashref; The old fetch and fetchrow methods still work. Driver implementors should implement the new names for fetchrow_array and fetchrow_arrayref ASAP (use the xs ALIAS: directive to define aliases for fetch and fetchrow). Fixed occasional problems with t/examp.t test. Added automatic errstr reporting to the debug trace output. Added the DBI FAQ from Alligator Descartes in module form for easy reading via "perldoc DBI::FAQ". Needs reformatting. Unknown driver specific attribute names no longer croak. Fixed problem with internal neatsvpv macro. =head2 Changes in DBI 0.82, 23rd May 1997 Added $h->{RaiseError} attribute which, if set true, causes all errors to trigger a die(). This makes it much easier to implement robust applications in terms of higher level eval { ... } blocks and rollbacks. Added DBI->data_sources($driver) method for implementation by drivers. The quote method now returns the string NULL (without quotes) for undef. Added VMS support thanks to Dan Sugalski. Added a 'quick start guide' to the README. Added neatsvpv function pointer to DBIS structure to make it available for use by drivers. A macro defines neatsvpv(sv,len) as (DBIS->neatsvpv(sv,len)). Old XS macro SV_YES_NO changes to standard boolSV. Since the DBIS structure has change the internal version numbers have also changed (DBIXS_VERSION == 8 and DBISTATE_VERSION == 8) so drivers will have to be recompiled. =head2 Changes in DBI 0.81, 7th May 1997 Minor fix to let DBI build using less modern perls. Fixed a suprious typo warning. =head2 Changes in DBI 0.80, 6th May 1997 Builds with no changes on NT using perl5.003_99 (with thanks to Jeffrey Urlwin). Automatically supports Apache::DBI (with thanks to Edmund Mergl). DBI scripts no longer need to be modified to make use of Apache::DBI. Added a ping method and an experimental connect_test_perf method. Added a fetchhash and fetch_all methods. The func method no longer pre-clears err and errstr. Added ChopBlanks attribute (currently defaults to off, that may change). Support for the attribute needs to be implemented by individual drivers. Reworked tests into standard t/*.t form. Added more pod text. Fixed assorted bugs. =head2 Changes in DBI 0.79, 7th Apr 1997 Minor release. Tidied up pod text and added some more descriptions (especially disconnect). Minor changes to DBI.xs to remove compiler warnings. =head2 Changes in DBI 0.78, 28th Mar 1997 Greatly extended the pod documentation in DBI.pm, including the under used bind_columns method. Use 'perldoc DBI' to read after installing. Fixed $h->err. Fetching an attribute value no longer resets err. Added $h->{InactiveDestroy}, see documentation for details. Improved debugging of cached ('quick') attribute fetches. errstr will return err code value if there is no string value. Added DBI/W32ODBC to the distribution. This is a pure-perl experimental DBI emulation layer for Win32::ODBC. Note that it's unsupported, your mileage will vary, and bug reports without fixes will probably be ignored. =head2 Changes in DBI 0.77, 21st Feb 1997 Removed erroneous $h->errstate and $h->errmsg methods from DBI.pm. Added $h->err, $h->errstr and $h->state default methods in DBI.xs. Updated informal DBI API notes in DBI.pm. Updated README slightly. DBIXS.h now correctly installed into INST_ARCHAUTODIR. (DBD authors will need to edit their Makefile.PL's to use -I$(INSTALLSITEARCH)/auto/DBI -I$(INSTALLSITEARCH)/DBI) =head2 Changes in DBI 0.76, 3rd Feb 1997 Fixed a compiler type warnings (pedantic IRIX again). =head2 Changes in DBI 0.75, 27th Jan 1997 Fix problem introduced by a change in Perl5.003_XX. Updated README and DBI.pm docs. =head2 Changes in DBI 0.74, 14th Jan 1997 Dispatch now sets dbi_debug to the level of the current handle (this makes tracing/debugging individual handles much easier). The '>> DISPATCH' log line now only logged at debug >= 3 (was 2). The $csr->NUM_OF_FIELDS attribute can be set if not >0 already. You can log to a file using the env var PERL_DBI_DEBUG=/tmp/dbi.log. Added a type cast needed by IRIX. No longer sets perl_destruct_level unless debug set >= 4. Make compatible with PerlIO and sfio. =head2 Changes in DBI 0.73, 10th Oct 1996 Fixed some compiler type warnings (IRIX). Fixed DBI->internal->{DebugLog} = $filename. Made debug log file unbuffered. Added experimental bind_param_inout method to interface. Usage: $dbh->bind_param_inout($param, \$value, $maxlen [, \%attribs ]) (only currently used by DBD::Oracle at this time.) =head2 Changes in DBI 0.72, 23 Sep 1996 Using an undefined value as a handle now gives a better error message (mainly useful for emulators like Oraperl). $dbh->do($sql, @params) now works for binding placeholders. =head2 Changes in DBI 0.71, 10 July 1996 Removed spurious abort() from invalid handle check. Added quote method to DBI interface and added test. =head2 Changes in DBI 0.70, 16 June 1996 Added extra invalid handle check (dbih_getcom) Fixed broken $dbh->quote method. Added check for old GCC in Makefile.PL =head2 Changes in DBI 0.69 Fixed small memory leak. Clarified the behaviour of DBI->connect. $dbh->do now returns '0E0' instead of 'OK'. Fixed "Can't read $DBI::errstr, lost last handle" problem. =head2 Changes in DBI 0.68, 2 Mar 1996 Changes to suit perl5.002 and site_lib directories. Detects old versions ahead of new in @INC. =head2 Changes in DBI 0.67, 15 Feb 1996 Trivial change to test suite to fix a problem shown up by the Perl5.002gamma release Test::Harness. =head2 Changes in DBI 0.66, 29 Jan 1996 Minor changes to bring the DBI into line with 5.002 mechanisms, specifically the xs/pm VERSION checking mechanism. No functionality changes. One no-last-handle bug fix (rare problem). Requires 5.002 (beta2 or later). =head2 Changes in DBI 0.65, 23 Oct 1995 Added $DBI::state to hold SQL CLI / ODBC SQLSTATE value. SQLSTATE "00000" (success) is returned as "" (false), all else is true. If a driver does not explicitly initialise it (via $h->{State} or DBIc_STATE(imp_xxh) then $DBI::state will automatically return "" if $DBI::err is false otherwise "S1000" (general error). As always, this is a new feature and liable to change. The is *no longer* a default error handler! You can add your own using push(@{$h->{Handlers}}, sub { ... }) but be aware that this interface may change (or go away). The DBI now automatically clears $DBI::err, errstr and state before calling most DBI methods. Previously error conditions would persist. Added DBIh_CLEAR_ERROR(imp_xxh) macro. DBI now EXPORT_OK's some utility functions, neat($value), neat_list(@values) and dump_results($sth). Slightly enhanced t/min.t minimal test script in an effort to help narrow down the few stray core dumps that some porters still report. Renamed readblob to blob_read (old name still works but warns). Added default blob_copy_to_file method. Added $sth = $dbh->tables method. This returns an $sth for a query which has these columns: TABLE_CATALOGUE, TABLE_OWNER, TABLE_NAME, TABLE_TYPE, REMARKS in that order. The TABLE_CATALOGUE column should be ignored for now. =head2 Changes in DBI 0.64, 23 Oct 1995 Fixed 'disconnect invalidates 1 associated cursor(s)' problem. Drivers using DBIc_ACTIVE_on/off() macros should not need any changes other than to test for DBIc_ACTIVE_KIDS() instead of DBIc_KIDS(). Fixed possible core dump in dbih_clearcom during global destruction. =head2 Changes in DBI 0.63, 1 Sep 1995 Minor update. Fixed uninitialised memory bug in method attribute handling and streamlined processing and debugging. Revised usage definitions for bind_* methods and readblob. =head2 Changes in DBI 0.62, 26 Aug 1995 Added method redirection method $h->func(..., $method_name). This is now the official way to call private driver methods that are not part of the DBI standard. E.g.: @ary = $sth->func('ora_types'); It can also be used to call existing methods. Has very low cost. $sth->bind_col columns now start from 1 (not 0) to match SQL. $sth->bind_columns now takes a leading attribute parameter (or undef), e.g., $sth->bind_columns($attribs, \$col1 [, \$col2 , ...]); Added handy DBD_ATTRIBS_CHECK macro to vet attribs in XS. Added handy DBD_ATTRIB_GET_SVP, DBD_ATTRIB_GET_BOOL and DBD_ATTRIB_GET_IV macros for handling attributes. Fixed STORE for NUM_OF_FIELDS and NUM_OF_PARAMS. Added FETCH for NUM_OF_FIELDS and NUM_OF_PARAMS. Dispatch no longer bothers to call _untie(). Faster startup via install_method/_add_dispatch changes. =head2 Changes in DBI 0.61, 22 Aug 1995 Added $sth->bind_col($column, \$var [, \%attribs ]); This method enables perl variable to be directly and automatically updated when a row is fetched. It requires no driver support (if the driver has been written to use DBIS->get_fbav). Currently \%attribs is unused. Added $sth->bind_columns(\$var [, \$var , ...]); This method is a short-cut for bind_col which binds all the columns of a query in one go (with no attributes). It also requires no driver support. Added $sth->bind_param($parameter, $var [, \%attribs ]); This method enables attributes to be specified when values are bound to placeholders. It also enables binding to occur away from the execute method to improve execute efficiency. The DBI does not provide a default implementation of this. See the DBD::Oracle module for a detailed example. The DBI now provides default implementations of both fetch and fetchrow. Each is written in terms of the other. A driver is expected to implement at least one of them. More macro and assorted structure changes in DBDXS.h. Sorry! The old dbihcom definitions have gone. All fields have macros. The imp_xxh_t type is now used within the DBI as well as drivers. Drivers must set DBIc_NUM_FIELDS(imp_sth) and DBIc_NUM_PARAMS(imp_sth). test.pl includes a trivial test of bind_param and bind_columns. =head2 Changes in DBI 0.60, 17 Aug 1995 This release has significant code changes but much less dramatic than the previous release. The new implementors data handling mechanism has matured significantly (don't be put off by all the struct typedefs in DBIXS.h, there's just to make it easier for drivers while keeping things type-safe). The DBI now includes two new methods: do $dbh->do($statement) This method prepares, executes and finishes a statement. It is designed to be used for executing one-off non-select statements where there is no benefit in reusing a prepared statement handle. fetch $array_ref = $sth->fetch; This method is the new 'lowest-level' row fetching method. The previous @row = $sth->fetchrow method now defaults to calling the fetch method and expanding the returned array reference. The DBI now provides fallback attribute FETCH and STORE functions which drivers should call if they don't recognise an attribute. THIS RELEASE IS A GOOD STARTING POINT FOR DRIVER DEVELOPERS! Study DBIXS.h from the DBI and Oracle.xs etc from DBD::Oracle. There will be further changes in the interface but nothing as dramatic as these last two releases! (I hope :-) =head2 Changes in DBI 0.59 15 Aug 1995 NOTE: THIS IS AN UNSTABLE RELEASE! Major reworking of internal data management! Performance improvements and memory leaks fixed. Added a new NullP (empty) driver and a -m flag to test.pl to help check for memory leaks. Study DBD::Oracle version 0.21 for more details. (Comparing parts of v0.21 with v0.20 may be useful.) =head2 Changes in DBI 0.58 21 June 1995 Added DBI->internal->{DebugLog} = $filename; Reworked internal logging. Added $VERSION. Made disconnect_all a compulsory method for drivers. =head1 ANCIENT HISTORY 12th Oct 1994: First public release of the DBI module. (for Perl 5.000-beta-3h) 19th Sep 1994: DBperl project renamed to DBI. 29th Sep 1992: DBperl project started. =cut DBI/Const/GetInfoType.pm 0000644 00000002253 15037233314 0010766 0 ustar 00 # $Id: GetInfoType.pm 8696 2007-01-24 23:12:38Z Tim $ # # Copyright (c) 2002 Tim Bunce Ireland # # Constant data describing info type codes for the DBI getinfo function. # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. package DBI::Const::GetInfoType; use strict; use Exporter (); use vars qw(@ISA @EXPORT @EXPORT_OK %GetInfoType); @ISA = qw(Exporter); @EXPORT = qw(%GetInfoType); my $VERSION = "2.008697"; =head1 NAME DBI::Const::GetInfoType - Data describing GetInfo type codes =head1 SYNOPSIS use DBI::Const::GetInfoType; =head1 DESCRIPTION Imports a %GetInfoType hash which maps names for GetInfo Type Codes into their corresponding numeric values. For example: $database_version = $dbh->get_info( $GetInfoType{SQL_DBMS_VER} ); The interface to this module is new and nothing beyond what is written here is guaranteed. =cut use DBI::Const::GetInfo::ANSI (); # liable to change use DBI::Const::GetInfo::ODBC (); # liable to change %GetInfoType = ( %DBI::Const::GetInfo::ANSI::InfoTypes # liable to change , %DBI::Const::GetInfo::ODBC::InfoTypes # liable to change ); 1; DBI/Const/GetInfoReturn.pm 0000644 00000004653 15037233315 0011333 0 ustar 00 # $Id: GetInfoReturn.pm 8696 2007-01-24 23:12:38Z Tim $ # # Copyright (c) 2002 Tim Bunce Ireland # # Constant data describing return values from the DBI getinfo function. # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. package DBI::Const::GetInfoReturn; use strict; use Exporter (); use vars qw(@ISA @EXPORT @EXPORT_OK %GetInfoReturnTypes %GetInfoReturnValues); @ISA = qw(Exporter); @EXPORT = qw(%GetInfoReturnTypes %GetInfoReturnValues); my $VERSION = "2.008697"; =head1 NAME DBI::Const::GetInfoReturn - Data and functions for describing GetInfo results =head1 SYNOPSIS The interface to this module is undocumented and liable to change. =head1 DESCRIPTION Data and functions for describing GetInfo results =cut use DBI::Const::GetInfoType; use DBI::Const::GetInfo::ANSI (); use DBI::Const::GetInfo::ODBC (); %GetInfoReturnTypes = ( %DBI::Const::GetInfo::ANSI::ReturnTypes , %DBI::Const::GetInfo::ODBC::ReturnTypes ); %GetInfoReturnValues = (); { my $A = \%DBI::Const::GetInfo::ANSI::ReturnValues; my $O = \%DBI::Const::GetInfo::ODBC::ReturnValues; while ( my ($k, $v) = each %$A ) { my %h = ( exists $O->{$k} ) ? ( %$v, %{$O->{$k}} ) : %$v; $GetInfoReturnValues{$k} = \%h; } while ( my ($k, $v) = each %$O ) { next if exists $A->{$k}; my %h = %$v; $GetInfoReturnValues{$k} = \%h; } } # ----------------------------------------------------------------------------- sub Format { my $InfoType = shift; my $Value = shift; return '' unless defined $Value; my $ReturnType = $GetInfoReturnTypes{$InfoType}; return sprintf '0x%08X', $Value if $ReturnType eq 'SQLUINTEGER bitmask'; return sprintf '0x%08X', $Value if $ReturnType eq 'SQLINTEGER bitmask'; # return '"' . $Value . '"' if $ReturnType eq 'SQLCHAR'; return $Value; } sub Explain { my $InfoType = shift; my $Value = shift; return '' unless defined $Value; return '' unless exists $GetInfoReturnValues{$InfoType}; $Value = int $Value; my $ReturnType = $GetInfoReturnTypes{$InfoType}; my %h = reverse %{$GetInfoReturnValues{$InfoType}}; if ( $ReturnType eq 'SQLUINTEGER bitmask'|| $ReturnType eq 'SQLINTEGER bitmask') { my @a = (); for my $k ( sort { $a <=> $b } keys %h ) { push @a, $h{$k} if $Value & $k; } return wantarray ? @a : join(' ', @a ); } else { return $h{$Value} ||'?'; } } 1; DBI/Const/GetInfo/ODBC.pm 0000644 00000201111 15037233315 0010626 0 ustar 00 # $Id: ODBC.pm 11373 2008-06-02 19:01:33Z Tim $ # # Copyright (c) 2002 Tim Bunce Ireland # # Constant data describing Microsoft ODBC info types and return values # for the SQLGetInfo() method of ODBC. # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; package DBI::Const::GetInfo::ODBC; our (%InfoTypes,%ReturnTypes,%ReturnValues,); =head1 NAME DBI::Const::GetInfo::ODBC - ODBC Constants for GetInfo =head1 SYNOPSIS The API for this module is private and subject to change. =head1 DESCRIPTION Information requested by GetInfo(). The API for this module is private and subject to change. =head1 REFERENCES MDAC SDK 2.6 ODBC version number (0x0351) sql.h sqlext.h =cut my $VERSION = "2.011374"; %InfoTypes = ( SQL_ACCESSIBLE_PROCEDURES => 20 , SQL_ACCESSIBLE_TABLES => 19 , SQL_ACTIVE_CONNECTIONS => 0 , SQL_ACTIVE_ENVIRONMENTS => 116 , SQL_ACTIVE_STATEMENTS => 1 , SQL_AGGREGATE_FUNCTIONS => 169 , SQL_ALTER_DOMAIN => 117 , SQL_ALTER_TABLE => 86 , SQL_ASYNC_MODE => 10021 , SQL_BATCH_ROW_COUNT => 120 , SQL_BATCH_SUPPORT => 121 , SQL_BOOKMARK_PERSISTENCE => 82 , SQL_CATALOG_LOCATION => 114 # SQL_QUALIFIER_LOCATION , SQL_CATALOG_NAME => 10003 , SQL_CATALOG_NAME_SEPARATOR => 41 # SQL_QUALIFIER_NAME_SEPARATOR , SQL_CATALOG_TERM => 42 # SQL_QUALIFIER_TERM , SQL_CATALOG_USAGE => 92 # SQL_QUALIFIER_USAGE , SQL_COLLATION_SEQ => 10004 , SQL_COLUMN_ALIAS => 87 , SQL_CONCAT_NULL_BEHAVIOR => 22 , SQL_CONVERT_BIGINT => 53 , SQL_CONVERT_BINARY => 54 , SQL_CONVERT_BIT => 55 , SQL_CONVERT_CHAR => 56 , SQL_CONVERT_DATE => 57 , SQL_CONVERT_DECIMAL => 58 , SQL_CONVERT_DOUBLE => 59 , SQL_CONVERT_FLOAT => 60 , SQL_CONVERT_FUNCTIONS => 48 , SQL_CONVERT_GUID => 173 , SQL_CONVERT_INTEGER => 61 , SQL_CONVERT_INTERVAL_DAY_TIME => 123 , SQL_CONVERT_INTERVAL_YEAR_MONTH => 124 , SQL_CONVERT_LONGVARBINARY => 71 , SQL_CONVERT_LONGVARCHAR => 62 , SQL_CONVERT_NUMERIC => 63 , SQL_CONVERT_REAL => 64 , SQL_CONVERT_SMALLINT => 65 , SQL_CONVERT_TIME => 66 , SQL_CONVERT_TIMESTAMP => 67 , SQL_CONVERT_TINYINT => 68 , SQL_CONVERT_VARBINARY => 69 , SQL_CONVERT_VARCHAR => 70 , SQL_CONVERT_WCHAR => 122 , SQL_CONVERT_WLONGVARCHAR => 125 , SQL_CONVERT_WVARCHAR => 126 , SQL_CORRELATION_NAME => 74 , SQL_CREATE_ASSERTION => 127 , SQL_CREATE_CHARACTER_SET => 128 , SQL_CREATE_COLLATION => 129 , SQL_CREATE_DOMAIN => 130 , SQL_CREATE_SCHEMA => 131 , SQL_CREATE_TABLE => 132 , SQL_CREATE_TRANSLATION => 133 , SQL_CREATE_VIEW => 134 , SQL_CURSOR_COMMIT_BEHAVIOR => 23 , SQL_CURSOR_ROLLBACK_BEHAVIOR => 24 , SQL_CURSOR_SENSITIVITY => 10001 , SQL_DATA_SOURCE_NAME => 2 , SQL_DATA_SOURCE_READ_ONLY => 25 , SQL_DATABASE_NAME => 16 , SQL_DATETIME_LITERALS => 119 , SQL_DBMS_NAME => 17 , SQL_DBMS_VER => 18 , SQL_DDL_INDEX => 170 , SQL_DEFAULT_TXN_ISOLATION => 26 , SQL_DESCRIBE_PARAMETER => 10002 , SQL_DM_VER => 171 , SQL_DRIVER_HDBC => 3 , SQL_DRIVER_HDESC => 135 , SQL_DRIVER_HENV => 4 , SQL_DRIVER_HLIB => 76 , SQL_DRIVER_HSTMT => 5 , SQL_DRIVER_NAME => 6 , SQL_DRIVER_ODBC_VER => 77 , SQL_DRIVER_VER => 7 , SQL_DROP_ASSERTION => 136 , SQL_DROP_CHARACTER_SET => 137 , SQL_DROP_COLLATION => 138 , SQL_DROP_DOMAIN => 139 , SQL_DROP_SCHEMA => 140 , SQL_DROP_TABLE => 141 , SQL_DROP_TRANSLATION => 142 , SQL_DROP_VIEW => 143 , SQL_DYNAMIC_CURSOR_ATTRIBUTES1 => 144 , SQL_DYNAMIC_CURSOR_ATTRIBUTES2 => 145 , SQL_EXPRESSIONS_IN_ORDERBY => 27 , SQL_FETCH_DIRECTION => 8 , SQL_FILE_USAGE => 84 , SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 => 146 , SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 => 147 , SQL_GETDATA_EXTENSIONS => 81 , SQL_GROUP_BY => 88 , SQL_IDENTIFIER_CASE => 28 , SQL_IDENTIFIER_QUOTE_CHAR => 29 , SQL_INDEX_KEYWORDS => 148 # SQL_INFO_DRIVER_START => 1000 # SQL_INFO_FIRST => 0 # SQL_INFO_LAST => 114 # SQL_QUALIFIER_LOCATION , SQL_INFO_SCHEMA_VIEWS => 149 , SQL_INSERT_STATEMENT => 172 , SQL_INTEGRITY => 73 , SQL_KEYSET_CURSOR_ATTRIBUTES1 => 150 , SQL_KEYSET_CURSOR_ATTRIBUTES2 => 151 , SQL_KEYWORDS => 89 , SQL_LIKE_ESCAPE_CLAUSE => 113 , SQL_LOCK_TYPES => 78 , SQL_MAXIMUM_CATALOG_NAME_LENGTH => 34 # SQL_MAX_CATALOG_NAME_LEN , SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 97 # SQL_MAX_COLUMNS_IN_GROUP_BY , SQL_MAXIMUM_COLUMNS_IN_INDEX => 98 # SQL_MAX_COLUMNS_IN_INDEX , SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 99 # SQL_MAX_COLUMNS_IN_ORDER_BY , SQL_MAXIMUM_COLUMNS_IN_SELECT => 100 # SQL_MAX_COLUMNS_IN_SELECT , SQL_MAXIMUM_COLUMN_NAME_LENGTH => 30 # SQL_MAX_COLUMN_NAME_LEN , SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 1 # SQL_MAX_CONCURRENT_ACTIVITIES , SQL_MAXIMUM_CURSOR_NAME_LENGTH => 31 # SQL_MAX_CURSOR_NAME_LEN , SQL_MAXIMUM_DRIVER_CONNECTIONS => 0 # SQL_MAX_DRIVER_CONNECTIONS , SQL_MAXIMUM_IDENTIFIER_LENGTH => 10005 # SQL_MAX_IDENTIFIER_LEN , SQL_MAXIMUM_INDEX_SIZE => 102 # SQL_MAX_INDEX_SIZE , SQL_MAXIMUM_ROW_SIZE => 104 # SQL_MAX_ROW_SIZE , SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 32 # SQL_MAX_SCHEMA_NAME_LEN , SQL_MAXIMUM_STATEMENT_LENGTH => 105 # SQL_MAX_STATEMENT_LEN , SQL_MAXIMUM_TABLES_IN_SELECT => 106 # SQL_MAX_TABLES_IN_SELECT , SQL_MAXIMUM_USER_NAME_LENGTH => 107 # SQL_MAX_USER_NAME_LEN , SQL_MAX_ASYNC_CONCURRENT_STATEMENTS => 10022 , SQL_MAX_BINARY_LITERAL_LEN => 112 , SQL_MAX_CATALOG_NAME_LEN => 34 , SQL_MAX_CHAR_LITERAL_LEN => 108 , SQL_MAX_COLUMNS_IN_GROUP_BY => 97 , SQL_MAX_COLUMNS_IN_INDEX => 98 , SQL_MAX_COLUMNS_IN_ORDER_BY => 99 , SQL_MAX_COLUMNS_IN_SELECT => 100 , SQL_MAX_COLUMNS_IN_TABLE => 101 , SQL_MAX_COLUMN_NAME_LEN => 30 , SQL_MAX_CONCURRENT_ACTIVITIES => 1 , SQL_MAX_CURSOR_NAME_LEN => 31 , SQL_MAX_DRIVER_CONNECTIONS => 0 , SQL_MAX_IDENTIFIER_LEN => 10005 , SQL_MAX_INDEX_SIZE => 102 , SQL_MAX_OWNER_NAME_LEN => 32 , SQL_MAX_PROCEDURE_NAME_LEN => 33 , SQL_MAX_QUALIFIER_NAME_LEN => 34 , SQL_MAX_ROW_SIZE => 104 , SQL_MAX_ROW_SIZE_INCLUDES_LONG => 103 , SQL_MAX_SCHEMA_NAME_LEN => 32 , SQL_MAX_STATEMENT_LEN => 105 , SQL_MAX_TABLES_IN_SELECT => 106 , SQL_MAX_TABLE_NAME_LEN => 35 , SQL_MAX_USER_NAME_LEN => 107 , SQL_MULTIPLE_ACTIVE_TXN => 37 , SQL_MULT_RESULT_SETS => 36 , SQL_NEED_LONG_DATA_LEN => 111 , SQL_NON_NULLABLE_COLUMNS => 75 , SQL_NULL_COLLATION => 85 , SQL_NUMERIC_FUNCTIONS => 49 , SQL_ODBC_API_CONFORMANCE => 9 , SQL_ODBC_INTERFACE_CONFORMANCE => 152 , SQL_ODBC_SAG_CLI_CONFORMANCE => 12 , SQL_ODBC_SQL_CONFORMANCE => 15 , SQL_ODBC_SQL_OPT_IEF => 73 , SQL_ODBC_VER => 10 , SQL_OJ_CAPABILITIES => 115 , SQL_ORDER_BY_COLUMNS_IN_SELECT => 90 , SQL_OUTER_JOINS => 38 , SQL_OUTER_JOIN_CAPABILITIES => 115 # SQL_OJ_CAPABILITIES , SQL_OWNER_TERM => 39 , SQL_OWNER_USAGE => 91 , SQL_PARAM_ARRAY_ROW_COUNTS => 153 , SQL_PARAM_ARRAY_SELECTS => 154 , SQL_POSITIONED_STATEMENTS => 80 , SQL_POS_OPERATIONS => 79 , SQL_PROCEDURES => 21 , SQL_PROCEDURE_TERM => 40 , SQL_QUALIFIER_LOCATION => 114 , SQL_QUALIFIER_NAME_SEPARATOR => 41 , SQL_QUALIFIER_TERM => 42 , SQL_QUALIFIER_USAGE => 92 , SQL_QUOTED_IDENTIFIER_CASE => 93 , SQL_ROW_UPDATES => 11 , SQL_SCHEMA_TERM => 39 # SQL_OWNER_TERM , SQL_SCHEMA_USAGE => 91 # SQL_OWNER_USAGE , SQL_SCROLL_CONCURRENCY => 43 , SQL_SCROLL_OPTIONS => 44 , SQL_SEARCH_PATTERN_ESCAPE => 14 , SQL_SERVER_NAME => 13 , SQL_SPECIAL_CHARACTERS => 94 , SQL_SQL92_DATETIME_FUNCTIONS => 155 , SQL_SQL92_FOREIGN_KEY_DELETE_RULE => 156 , SQL_SQL92_FOREIGN_KEY_UPDATE_RULE => 157 , SQL_SQL92_GRANT => 158 , SQL_SQL92_NUMERIC_VALUE_FUNCTIONS => 159 , SQL_SQL92_PREDICATES => 160 , SQL_SQL92_RELATIONAL_JOIN_OPERATORS => 161 , SQL_SQL92_REVOKE => 162 , SQL_SQL92_ROW_VALUE_CONSTRUCTOR => 163 , SQL_SQL92_STRING_FUNCTIONS => 164 , SQL_SQL92_VALUE_EXPRESSIONS => 165 , SQL_SQL_CONFORMANCE => 118 , SQL_STANDARD_CLI_CONFORMANCE => 166 , SQL_STATIC_CURSOR_ATTRIBUTES1 => 167 , SQL_STATIC_CURSOR_ATTRIBUTES2 => 168 , SQL_STATIC_SENSITIVITY => 83 , SQL_STRING_FUNCTIONS => 50 , SQL_SUBQUERIES => 95 , SQL_SYSTEM_FUNCTIONS => 51 , SQL_TABLE_TERM => 45 , SQL_TIMEDATE_ADD_INTERVALS => 109 , SQL_TIMEDATE_DIFF_INTERVALS => 110 , SQL_TIMEDATE_FUNCTIONS => 52 , SQL_TRANSACTION_CAPABLE => 46 # SQL_TXN_CAPABLE , SQL_TRANSACTION_ISOLATION_OPTION => 72 # SQL_TXN_ISOLATION_OPTION , SQL_TXN_CAPABLE => 46 , SQL_TXN_ISOLATION_OPTION => 72 , SQL_UNION => 96 , SQL_UNION_STATEMENT => 96 # SQL_UNION , SQL_USER_NAME => 47 , SQL_XOPEN_CLI_YEAR => 10000 ); =head2 %ReturnTypes See: mk:@MSITStore:X:\dm\cli\mdac\sdk26\Docs\odbc.chm::/htm/odbcsqlgetinfo.htm => : alias => !!! : edited =cut %ReturnTypes = ( SQL_ACCESSIBLE_PROCEDURES => 'SQLCHAR' # 20 , SQL_ACCESSIBLE_TABLES => 'SQLCHAR' # 19 , SQL_ACTIVE_CONNECTIONS => 'SQLUSMALLINT' # 0 => , SQL_ACTIVE_ENVIRONMENTS => 'SQLUSMALLINT' # 116 , SQL_ACTIVE_STATEMENTS => 'SQLUSMALLINT' # 1 => , SQL_AGGREGATE_FUNCTIONS => 'SQLUINTEGER bitmask' # 169 , SQL_ALTER_DOMAIN => 'SQLUINTEGER bitmask' # 117 , SQL_ALTER_TABLE => 'SQLUINTEGER bitmask' # 86 , SQL_ASYNC_MODE => 'SQLUINTEGER' # 10021 , SQL_BATCH_ROW_COUNT => 'SQLUINTEGER bitmask' # 120 , SQL_BATCH_SUPPORT => 'SQLUINTEGER bitmask' # 121 , SQL_BOOKMARK_PERSISTENCE => 'SQLUINTEGER bitmask' # 82 , SQL_CATALOG_LOCATION => 'SQLUSMALLINT' # 114 , SQL_CATALOG_NAME => 'SQLCHAR' # 10003 , SQL_CATALOG_NAME_SEPARATOR => 'SQLCHAR' # 41 , SQL_CATALOG_TERM => 'SQLCHAR' # 42 , SQL_CATALOG_USAGE => 'SQLUINTEGER bitmask' # 92 , SQL_COLLATION_SEQ => 'SQLCHAR' # 10004 , SQL_COLUMN_ALIAS => 'SQLCHAR' # 87 , SQL_CONCAT_NULL_BEHAVIOR => 'SQLUSMALLINT' # 22 , SQL_CONVERT_BIGINT => 'SQLUINTEGER bitmask' # 53 , SQL_CONVERT_BINARY => 'SQLUINTEGER bitmask' # 54 , SQL_CONVERT_BIT => 'SQLUINTEGER bitmask' # 55 , SQL_CONVERT_CHAR => 'SQLUINTEGER bitmask' # 56 , SQL_CONVERT_DATE => 'SQLUINTEGER bitmask' # 57 , SQL_CONVERT_DECIMAL => 'SQLUINTEGER bitmask' # 58 , SQL_CONVERT_DOUBLE => 'SQLUINTEGER bitmask' # 59 , SQL_CONVERT_FLOAT => 'SQLUINTEGER bitmask' # 60 , SQL_CONVERT_FUNCTIONS => 'SQLUINTEGER bitmask' # 48 , SQL_CONVERT_GUID => 'SQLUINTEGER bitmask' # 173 , SQL_CONVERT_INTEGER => 'SQLUINTEGER bitmask' # 61 , SQL_CONVERT_INTERVAL_DAY_TIME => 'SQLUINTEGER bitmask' # 123 , SQL_CONVERT_INTERVAL_YEAR_MONTH => 'SQLUINTEGER bitmask' # 124 , SQL_CONVERT_LONGVARBINARY => 'SQLUINTEGER bitmask' # 71 , SQL_CONVERT_LONGVARCHAR => 'SQLUINTEGER bitmask' # 62 , SQL_CONVERT_NUMERIC => 'SQLUINTEGER bitmask' # 63 , SQL_CONVERT_REAL => 'SQLUINTEGER bitmask' # 64 , SQL_CONVERT_SMALLINT => 'SQLUINTEGER bitmask' # 65 , SQL_CONVERT_TIME => 'SQLUINTEGER bitmask' # 66 , SQL_CONVERT_TIMESTAMP => 'SQLUINTEGER bitmask' # 67 , SQL_CONVERT_TINYINT => 'SQLUINTEGER bitmask' # 68 , SQL_CONVERT_VARBINARY => 'SQLUINTEGER bitmask' # 69 , SQL_CONVERT_VARCHAR => 'SQLUINTEGER bitmask' # 70 , SQL_CONVERT_WCHAR => 'SQLUINTEGER bitmask' # 122 => !!! , SQL_CONVERT_WLONGVARCHAR => 'SQLUINTEGER bitmask' # 125 => !!! , SQL_CONVERT_WVARCHAR => 'SQLUINTEGER bitmask' # 126 => !!! , SQL_CORRELATION_NAME => 'SQLUSMALLINT' # 74 , SQL_CREATE_ASSERTION => 'SQLUINTEGER bitmask' # 127 , SQL_CREATE_CHARACTER_SET => 'SQLUINTEGER bitmask' # 128 , SQL_CREATE_COLLATION => 'SQLUINTEGER bitmask' # 129 , SQL_CREATE_DOMAIN => 'SQLUINTEGER bitmask' # 130 , SQL_CREATE_SCHEMA => 'SQLUINTEGER bitmask' # 131 , SQL_CREATE_TABLE => 'SQLUINTEGER bitmask' # 132 , SQL_CREATE_TRANSLATION => 'SQLUINTEGER bitmask' # 133 , SQL_CREATE_VIEW => 'SQLUINTEGER bitmask' # 134 , SQL_CURSOR_COMMIT_BEHAVIOR => 'SQLUSMALLINT' # 23 , SQL_CURSOR_ROLLBACK_BEHAVIOR => 'SQLUSMALLINT' # 24 , SQL_CURSOR_SENSITIVITY => 'SQLUINTEGER' # 10001 , SQL_DATA_SOURCE_NAME => 'SQLCHAR' # 2 , SQL_DATA_SOURCE_READ_ONLY => 'SQLCHAR' # 25 , SQL_DATABASE_NAME => 'SQLCHAR' # 16 , SQL_DATETIME_LITERALS => 'SQLUINTEGER bitmask' # 119 , SQL_DBMS_NAME => 'SQLCHAR' # 17 , SQL_DBMS_VER => 'SQLCHAR' # 18 , SQL_DDL_INDEX => 'SQLUINTEGER bitmask' # 170 , SQL_DEFAULT_TXN_ISOLATION => 'SQLUINTEGER' # 26 , SQL_DESCRIBE_PARAMETER => 'SQLCHAR' # 10002 , SQL_DM_VER => 'SQLCHAR' # 171 , SQL_DRIVER_HDBC => 'SQLUINTEGER' # 3 , SQL_DRIVER_HDESC => 'SQLUINTEGER' # 135 , SQL_DRIVER_HENV => 'SQLUINTEGER' # 4 , SQL_DRIVER_HLIB => 'SQLUINTEGER' # 76 , SQL_DRIVER_HSTMT => 'SQLUINTEGER' # 5 , SQL_DRIVER_NAME => 'SQLCHAR' # 6 , SQL_DRIVER_ODBC_VER => 'SQLCHAR' # 77 , SQL_DRIVER_VER => 'SQLCHAR' # 7 , SQL_DROP_ASSERTION => 'SQLUINTEGER bitmask' # 136 , SQL_DROP_CHARACTER_SET => 'SQLUINTEGER bitmask' # 137 , SQL_DROP_COLLATION => 'SQLUINTEGER bitmask' # 138 , SQL_DROP_DOMAIN => 'SQLUINTEGER bitmask' # 139 , SQL_DROP_SCHEMA => 'SQLUINTEGER bitmask' # 140 , SQL_DROP_TABLE => 'SQLUINTEGER bitmask' # 141 , SQL_DROP_TRANSLATION => 'SQLUINTEGER bitmask' # 142 , SQL_DROP_VIEW => 'SQLUINTEGER bitmask' # 143 , SQL_DYNAMIC_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 144 , SQL_DYNAMIC_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 145 , SQL_EXPRESSIONS_IN_ORDERBY => 'SQLCHAR' # 27 , SQL_FETCH_DIRECTION => 'SQLUINTEGER bitmask' # 8 => !!! , SQL_FILE_USAGE => 'SQLUSMALLINT' # 84 , SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 146 , SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 147 , SQL_GETDATA_EXTENSIONS => 'SQLUINTEGER bitmask' # 81 , SQL_GROUP_BY => 'SQLUSMALLINT' # 88 , SQL_IDENTIFIER_CASE => 'SQLUSMALLINT' # 28 , SQL_IDENTIFIER_QUOTE_CHAR => 'SQLCHAR' # 29 , SQL_INDEX_KEYWORDS => 'SQLUINTEGER bitmask' # 148 # SQL_INFO_DRIVER_START => '' # 1000 => # SQL_INFO_FIRST => 'SQLUSMALLINT' # 0 => # SQL_INFO_LAST => 'SQLUSMALLINT' # 114 => , SQL_INFO_SCHEMA_VIEWS => 'SQLUINTEGER bitmask' # 149 , SQL_INSERT_STATEMENT => 'SQLUINTEGER bitmask' # 172 , SQL_INTEGRITY => 'SQLCHAR' # 73 , SQL_KEYSET_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 150 , SQL_KEYSET_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 151 , SQL_KEYWORDS => 'SQLCHAR' # 89 , SQL_LIKE_ESCAPE_CLAUSE => 'SQLCHAR' # 113 , SQL_LOCK_TYPES => 'SQLUINTEGER bitmask' # 78 => !!! , SQL_MAXIMUM_CATALOG_NAME_LENGTH => 'SQLUSMALLINT' # 34 => , SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 'SQLUSMALLINT' # 97 => , SQL_MAXIMUM_COLUMNS_IN_INDEX => 'SQLUSMALLINT' # 98 => , SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 'SQLUSMALLINT' # 99 => , SQL_MAXIMUM_COLUMNS_IN_SELECT => 'SQLUSMALLINT' # 100 => , SQL_MAXIMUM_COLUMN_NAME_LENGTH => 'SQLUSMALLINT' # 30 => , SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 'SQLUSMALLINT' # 1 => , SQL_MAXIMUM_CURSOR_NAME_LENGTH => 'SQLUSMALLINT' # 31 => , SQL_MAXIMUM_DRIVER_CONNECTIONS => 'SQLUSMALLINT' # 0 => , SQL_MAXIMUM_IDENTIFIER_LENGTH => 'SQLUSMALLINT' # 10005 => , SQL_MAXIMUM_INDEX_SIZE => 'SQLUINTEGER' # 102 => , SQL_MAXIMUM_ROW_SIZE => 'SQLUINTEGER' # 104 => , SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 'SQLUSMALLINT' # 32 => , SQL_MAXIMUM_STATEMENT_LENGTH => 'SQLUINTEGER' # 105 => , SQL_MAXIMUM_TABLES_IN_SELECT => 'SQLUSMALLINT' # 106 => , SQL_MAXIMUM_USER_NAME_LENGTH => 'SQLUSMALLINT' # 107 => , SQL_MAX_ASYNC_CONCURRENT_STATEMENTS => 'SQLUINTEGER' # 10022 , SQL_MAX_BINARY_LITERAL_LEN => 'SQLUINTEGER' # 112 , SQL_MAX_CATALOG_NAME_LEN => 'SQLUSMALLINT' # 34 , SQL_MAX_CHAR_LITERAL_LEN => 'SQLUINTEGER' # 108 , SQL_MAX_COLUMNS_IN_GROUP_BY => 'SQLUSMALLINT' # 97 , SQL_MAX_COLUMNS_IN_INDEX => 'SQLUSMALLINT' # 98 , SQL_MAX_COLUMNS_IN_ORDER_BY => 'SQLUSMALLINT' # 99 , SQL_MAX_COLUMNS_IN_SELECT => 'SQLUSMALLINT' # 100 , SQL_MAX_COLUMNS_IN_TABLE => 'SQLUSMALLINT' # 101 , SQL_MAX_COLUMN_NAME_LEN => 'SQLUSMALLINT' # 30 , SQL_MAX_CONCURRENT_ACTIVITIES => 'SQLUSMALLINT' # 1 , SQL_MAX_CURSOR_NAME_LEN => 'SQLUSMALLINT' # 31 , SQL_MAX_DRIVER_CONNECTIONS => 'SQLUSMALLINT' # 0 , SQL_MAX_IDENTIFIER_LEN => 'SQLUSMALLINT' # 10005 , SQL_MAX_INDEX_SIZE => 'SQLUINTEGER' # 102 , SQL_MAX_OWNER_NAME_LEN => 'SQLUSMALLINT' # 32 => , SQL_MAX_PROCEDURE_NAME_LEN => 'SQLUSMALLINT' # 33 , SQL_MAX_QUALIFIER_NAME_LEN => 'SQLUSMALLINT' # 34 => , SQL_MAX_ROW_SIZE => 'SQLUINTEGER' # 104 , SQL_MAX_ROW_SIZE_INCLUDES_LONG => 'SQLCHAR' # 103 , SQL_MAX_SCHEMA_NAME_LEN => 'SQLUSMALLINT' # 32 , SQL_MAX_STATEMENT_LEN => 'SQLUINTEGER' # 105 , SQL_MAX_TABLES_IN_SELECT => 'SQLUSMALLINT' # 106 , SQL_MAX_TABLE_NAME_LEN => 'SQLUSMALLINT' # 35 , SQL_MAX_USER_NAME_LEN => 'SQLUSMALLINT' # 107 , SQL_MULTIPLE_ACTIVE_TXN => 'SQLCHAR' # 37 , SQL_MULT_RESULT_SETS => 'SQLCHAR' # 36 , SQL_NEED_LONG_DATA_LEN => 'SQLCHAR' # 111 , SQL_NON_NULLABLE_COLUMNS => 'SQLUSMALLINT' # 75 , SQL_NULL_COLLATION => 'SQLUSMALLINT' # 85 , SQL_NUMERIC_FUNCTIONS => 'SQLUINTEGER bitmask' # 49 , SQL_ODBC_API_CONFORMANCE => 'SQLUSMALLINT' # 9 => !!! , SQL_ODBC_INTERFACE_CONFORMANCE => 'SQLUINTEGER' # 152 , SQL_ODBC_SAG_CLI_CONFORMANCE => 'SQLUSMALLINT' # 12 => !!! , SQL_ODBC_SQL_CONFORMANCE => 'SQLUSMALLINT' # 15 => !!! , SQL_ODBC_SQL_OPT_IEF => 'SQLCHAR' # 73 => , SQL_ODBC_VER => 'SQLCHAR' # 10 , SQL_OJ_CAPABILITIES => 'SQLUINTEGER bitmask' # 115 , SQL_ORDER_BY_COLUMNS_IN_SELECT => 'SQLCHAR' # 90 , SQL_OUTER_JOINS => 'SQLCHAR' # 38 => !!! , SQL_OUTER_JOIN_CAPABILITIES => 'SQLUINTEGER bitmask' # 115 => , SQL_OWNER_TERM => 'SQLCHAR' # 39 => , SQL_OWNER_USAGE => 'SQLUINTEGER bitmask' # 91 => , SQL_PARAM_ARRAY_ROW_COUNTS => 'SQLUINTEGER' # 153 , SQL_PARAM_ARRAY_SELECTS => 'SQLUINTEGER' # 154 , SQL_POSITIONED_STATEMENTS => 'SQLUINTEGER bitmask' # 80 => !!! , SQL_POS_OPERATIONS => 'SQLINTEGER bitmask' # 79 , SQL_PROCEDURES => 'SQLCHAR' # 21 , SQL_PROCEDURE_TERM => 'SQLCHAR' # 40 , SQL_QUALIFIER_LOCATION => 'SQLUSMALLINT' # 114 => , SQL_QUALIFIER_NAME_SEPARATOR => 'SQLCHAR' # 41 => , SQL_QUALIFIER_TERM => 'SQLCHAR' # 42 => , SQL_QUALIFIER_USAGE => 'SQLUINTEGER bitmask' # 92 => , SQL_QUOTED_IDENTIFIER_CASE => 'SQLUSMALLINT' # 93 , SQL_ROW_UPDATES => 'SQLCHAR' # 11 , SQL_SCHEMA_TERM => 'SQLCHAR' # 39 , SQL_SCHEMA_USAGE => 'SQLUINTEGER bitmask' # 91 , SQL_SCROLL_CONCURRENCY => 'SQLUINTEGER bitmask' # 43 => !!! , SQL_SCROLL_OPTIONS => 'SQLUINTEGER bitmask' # 44 , SQL_SEARCH_PATTERN_ESCAPE => 'SQLCHAR' # 14 , SQL_SERVER_NAME => 'SQLCHAR' # 13 , SQL_SPECIAL_CHARACTERS => 'SQLCHAR' # 94 , SQL_SQL92_DATETIME_FUNCTIONS => 'SQLUINTEGER bitmask' # 155 , SQL_SQL92_FOREIGN_KEY_DELETE_RULE => 'SQLUINTEGER bitmask' # 156 , SQL_SQL92_FOREIGN_KEY_UPDATE_RULE => 'SQLUINTEGER bitmask' # 157 , SQL_SQL92_GRANT => 'SQLUINTEGER bitmask' # 158 , SQL_SQL92_NUMERIC_VALUE_FUNCTIONS => 'SQLUINTEGER bitmask' # 159 , SQL_SQL92_PREDICATES => 'SQLUINTEGER bitmask' # 160 , SQL_SQL92_RELATIONAL_JOIN_OPERATORS => 'SQLUINTEGER bitmask' # 161 , SQL_SQL92_REVOKE => 'SQLUINTEGER bitmask' # 162 , SQL_SQL92_ROW_VALUE_CONSTRUCTOR => 'SQLUINTEGER bitmask' # 163 , SQL_SQL92_STRING_FUNCTIONS => 'SQLUINTEGER bitmask' # 164 , SQL_SQL92_VALUE_EXPRESSIONS => 'SQLUINTEGER bitmask' # 165 , SQL_SQL_CONFORMANCE => 'SQLUINTEGER' # 118 , SQL_STANDARD_CLI_CONFORMANCE => 'SQLUINTEGER bitmask' # 166 , SQL_STATIC_CURSOR_ATTRIBUTES1 => 'SQLUINTEGER bitmask' # 167 , SQL_STATIC_CURSOR_ATTRIBUTES2 => 'SQLUINTEGER bitmask' # 168 , SQL_STATIC_SENSITIVITY => 'SQLUINTEGER bitmask' # 83 => !!! , SQL_STRING_FUNCTIONS => 'SQLUINTEGER bitmask' # 50 , SQL_SUBQUERIES => 'SQLUINTEGER bitmask' # 95 , SQL_SYSTEM_FUNCTIONS => 'SQLUINTEGER bitmask' # 51 , SQL_TABLE_TERM => 'SQLCHAR' # 45 , SQL_TIMEDATE_ADD_INTERVALS => 'SQLUINTEGER bitmask' # 109 , SQL_TIMEDATE_DIFF_INTERVALS => 'SQLUINTEGER bitmask' # 110 , SQL_TIMEDATE_FUNCTIONS => 'SQLUINTEGER bitmask' # 52 , SQL_TRANSACTION_CAPABLE => 'SQLUSMALLINT' # 46 => , SQL_TRANSACTION_ISOLATION_OPTION => 'SQLUINTEGER bitmask' # 72 => , SQL_TXN_CAPABLE => 'SQLUSMALLINT' # 46 , SQL_TXN_ISOLATION_OPTION => 'SQLUINTEGER bitmask' # 72 , SQL_UNION => 'SQLUINTEGER bitmask' # 96 , SQL_UNION_STATEMENT => 'SQLUINTEGER bitmask' # 96 => , SQL_USER_NAME => 'SQLCHAR' # 47 , SQL_XOPEN_CLI_YEAR => 'SQLCHAR' # 10000 ); =head2 %ReturnValues See: sql.h, sqlext.h Edited: SQL_TXN_ISOLATION_OPTION =cut $ReturnValues{SQL_AGGREGATE_FUNCTIONS} = { SQL_AF_AVG => 0x00000001 , SQL_AF_COUNT => 0x00000002 , SQL_AF_MAX => 0x00000004 , SQL_AF_MIN => 0x00000008 , SQL_AF_SUM => 0x00000010 , SQL_AF_DISTINCT => 0x00000020 , SQL_AF_ALL => 0x00000040 }; $ReturnValues{SQL_ALTER_DOMAIN} = { SQL_AD_CONSTRAINT_NAME_DEFINITION => 0x00000001 , SQL_AD_ADD_DOMAIN_CONSTRAINT => 0x00000002 , SQL_AD_DROP_DOMAIN_CONSTRAINT => 0x00000004 , SQL_AD_ADD_DOMAIN_DEFAULT => 0x00000008 , SQL_AD_DROP_DOMAIN_DEFAULT => 0x00000010 , SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED => 0x00000020 , SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000040 , SQL_AD_ADD_CONSTRAINT_DEFERRABLE => 0x00000080 , SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE => 0x00000100 }; $ReturnValues{SQL_ALTER_TABLE} = { SQL_AT_ADD_COLUMN => 0x00000001 , SQL_AT_DROP_COLUMN => 0x00000002 , SQL_AT_ADD_CONSTRAINT => 0x00000008 , SQL_AT_ADD_COLUMN_SINGLE => 0x00000020 , SQL_AT_ADD_COLUMN_DEFAULT => 0x00000040 , SQL_AT_ADD_COLUMN_COLLATION => 0x00000080 , SQL_AT_SET_COLUMN_DEFAULT => 0x00000100 , SQL_AT_DROP_COLUMN_DEFAULT => 0x00000200 , SQL_AT_DROP_COLUMN_CASCADE => 0x00000400 , SQL_AT_DROP_COLUMN_RESTRICT => 0x00000800 , SQL_AT_ADD_TABLE_CONSTRAINT => 0x00001000 , SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE => 0x00002000 , SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT => 0x00004000 , SQL_AT_CONSTRAINT_NAME_DEFINITION => 0x00008000 , SQL_AT_CONSTRAINT_INITIALLY_DEFERRED => 0x00010000 , SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00020000 , SQL_AT_CONSTRAINT_DEFERRABLE => 0x00040000 , SQL_AT_CONSTRAINT_NON_DEFERRABLE => 0x00080000 }; $ReturnValues{SQL_ASYNC_MODE} = { SQL_AM_NONE => 0 , SQL_AM_CONNECTION => 1 , SQL_AM_STATEMENT => 2 }; $ReturnValues{SQL_ATTR_MAX_ROWS} = { SQL_CA2_MAX_ROWS_SELECT => 0x00000080 , SQL_CA2_MAX_ROWS_INSERT => 0x00000100 , SQL_CA2_MAX_ROWS_DELETE => 0x00000200 , SQL_CA2_MAX_ROWS_UPDATE => 0x00000400 , SQL_CA2_MAX_ROWS_CATALOG => 0x00000800 # SQL_CA2_MAX_ROWS_AFFECTS_ALL => }; $ReturnValues{SQL_ATTR_SCROLL_CONCURRENCY} = { SQL_CA2_READ_ONLY_CONCURRENCY => 0x00000001 , SQL_CA2_LOCK_CONCURRENCY => 0x00000002 , SQL_CA2_OPT_ROWVER_CONCURRENCY => 0x00000004 , SQL_CA2_OPT_VALUES_CONCURRENCY => 0x00000008 , SQL_CA2_SENSITIVITY_ADDITIONS => 0x00000010 , SQL_CA2_SENSITIVITY_DELETIONS => 0x00000020 , SQL_CA2_SENSITIVITY_UPDATES => 0x00000040 }; $ReturnValues{SQL_BATCH_ROW_COUNT} = { SQL_BRC_PROCEDURES => 0x0000001 , SQL_BRC_EXPLICIT => 0x0000002 , SQL_BRC_ROLLED_UP => 0x0000004 }; $ReturnValues{SQL_BATCH_SUPPORT} = { SQL_BS_SELECT_EXPLICIT => 0x00000001 , SQL_BS_ROW_COUNT_EXPLICIT => 0x00000002 , SQL_BS_SELECT_PROC => 0x00000004 , SQL_BS_ROW_COUNT_PROC => 0x00000008 }; $ReturnValues{SQL_BOOKMARK_PERSISTENCE} = { SQL_BP_CLOSE => 0x00000001 , SQL_BP_DELETE => 0x00000002 , SQL_BP_DROP => 0x00000004 , SQL_BP_TRANSACTION => 0x00000008 , SQL_BP_UPDATE => 0x00000010 , SQL_BP_OTHER_HSTMT => 0x00000020 , SQL_BP_SCROLL => 0x00000040 }; $ReturnValues{SQL_CATALOG_LOCATION} = { SQL_CL_START => 0x0001 # SQL_QL_START , SQL_CL_END => 0x0002 # SQL_QL_END }; $ReturnValues{SQL_CATALOG_USAGE} = { SQL_CU_DML_STATEMENTS => 0x00000001 # SQL_QU_DML_STATEMENTS , SQL_CU_PROCEDURE_INVOCATION => 0x00000002 # SQL_QU_PROCEDURE_INVOCATION , SQL_CU_TABLE_DEFINITION => 0x00000004 # SQL_QU_TABLE_DEFINITION , SQL_CU_INDEX_DEFINITION => 0x00000008 # SQL_QU_INDEX_DEFINITION , SQL_CU_PRIVILEGE_DEFINITION => 0x00000010 # SQL_QU_PRIVILEGE_DEFINITION }; $ReturnValues{SQL_CONCAT_NULL_BEHAVIOR} = { SQL_CB_NULL => 0x0000 , SQL_CB_NON_NULL => 0x0001 }; $ReturnValues{SQL_CONVERT_} = { SQL_CVT_CHAR => 0x00000001 , SQL_CVT_NUMERIC => 0x00000002 , SQL_CVT_DECIMAL => 0x00000004 , SQL_CVT_INTEGER => 0x00000008 , SQL_CVT_SMALLINT => 0x00000010 , SQL_CVT_FLOAT => 0x00000020 , SQL_CVT_REAL => 0x00000040 , SQL_CVT_DOUBLE => 0x00000080 , SQL_CVT_VARCHAR => 0x00000100 , SQL_CVT_LONGVARCHAR => 0x00000200 , SQL_CVT_BINARY => 0x00000400 , SQL_CVT_VARBINARY => 0x00000800 , SQL_CVT_BIT => 0x00001000 , SQL_CVT_TINYINT => 0x00002000 , SQL_CVT_BIGINT => 0x00004000 , SQL_CVT_DATE => 0x00008000 , SQL_CVT_TIME => 0x00010000 , SQL_CVT_TIMESTAMP => 0x00020000 , SQL_CVT_LONGVARBINARY => 0x00040000 , SQL_CVT_INTERVAL_YEAR_MONTH => 0x00080000 , SQL_CVT_INTERVAL_DAY_TIME => 0x00100000 , SQL_CVT_WCHAR => 0x00200000 , SQL_CVT_WLONGVARCHAR => 0x00400000 , SQL_CVT_WVARCHAR => 0x00800000 , SQL_CVT_GUID => 0x01000000 }; $ReturnValues{SQL_CONVERT_BIGINT } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_BINARY } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_BIT } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_CHAR } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_DATE } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_DECIMAL } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_DOUBLE } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_FLOAT } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_GUID } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_INTEGER } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_INTERVAL_DAY_TIME } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_INTERVAL_YEAR_MONTH} = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_LONGVARBINARY } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_LONGVARCHAR } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_NUMERIC } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_REAL } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_SMALLINT } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_TIME } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_TIMESTAMP } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_TINYINT } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_VARBINARY } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_VARCHAR } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_WCHAR } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_WLONGVARCHAR } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_WVARCHAR } = $ReturnValues{SQL_CONVERT_}; $ReturnValues{SQL_CONVERT_FUNCTIONS} = { SQL_FN_CVT_CONVERT => 0x00000001 , SQL_FN_CVT_CAST => 0x00000002 }; $ReturnValues{SQL_CORRELATION_NAME} = { SQL_CN_NONE => 0x0000 , SQL_CN_DIFFERENT => 0x0001 , SQL_CN_ANY => 0x0002 }; $ReturnValues{SQL_CREATE_ASSERTION} = { SQL_CA_CREATE_ASSERTION => 0x00000001 , SQL_CA_CONSTRAINT_INITIALLY_DEFERRED => 0x00000010 , SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000020 , SQL_CA_CONSTRAINT_DEFERRABLE => 0x00000040 , SQL_CA_CONSTRAINT_NON_DEFERRABLE => 0x00000080 }; $ReturnValues{SQL_CREATE_CHARACTER_SET} = { SQL_CCS_CREATE_CHARACTER_SET => 0x00000001 , SQL_CCS_COLLATE_CLAUSE => 0x00000002 , SQL_CCS_LIMITED_COLLATION => 0x00000004 }; $ReturnValues{SQL_CREATE_COLLATION} = { SQL_CCOL_CREATE_COLLATION => 0x00000001 }; $ReturnValues{SQL_CREATE_DOMAIN} = { SQL_CDO_CREATE_DOMAIN => 0x00000001 , SQL_CDO_DEFAULT => 0x00000002 , SQL_CDO_CONSTRAINT => 0x00000004 , SQL_CDO_COLLATION => 0x00000008 , SQL_CDO_CONSTRAINT_NAME_DEFINITION => 0x00000010 , SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED => 0x00000020 , SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000040 , SQL_CDO_CONSTRAINT_DEFERRABLE => 0x00000080 , SQL_CDO_CONSTRAINT_NON_DEFERRABLE => 0x00000100 }; $ReturnValues{SQL_CREATE_SCHEMA} = { SQL_CS_CREATE_SCHEMA => 0x00000001 , SQL_CS_AUTHORIZATION => 0x00000002 , SQL_CS_DEFAULT_CHARACTER_SET => 0x00000004 }; $ReturnValues{SQL_CREATE_TABLE} = { SQL_CT_CREATE_TABLE => 0x00000001 , SQL_CT_COMMIT_PRESERVE => 0x00000002 , SQL_CT_COMMIT_DELETE => 0x00000004 , SQL_CT_GLOBAL_TEMPORARY => 0x00000008 , SQL_CT_LOCAL_TEMPORARY => 0x00000010 , SQL_CT_CONSTRAINT_INITIALLY_DEFERRED => 0x00000020 , SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE => 0x00000040 , SQL_CT_CONSTRAINT_DEFERRABLE => 0x00000080 , SQL_CT_CONSTRAINT_NON_DEFERRABLE => 0x00000100 , SQL_CT_COLUMN_CONSTRAINT => 0x00000200 , SQL_CT_COLUMN_DEFAULT => 0x00000400 , SQL_CT_COLUMN_COLLATION => 0x00000800 , SQL_CT_TABLE_CONSTRAINT => 0x00001000 , SQL_CT_CONSTRAINT_NAME_DEFINITION => 0x00002000 }; $ReturnValues{SQL_CREATE_TRANSLATION} = { SQL_CTR_CREATE_TRANSLATION => 0x00000001 }; $ReturnValues{SQL_CREATE_VIEW} = { SQL_CV_CREATE_VIEW => 0x00000001 , SQL_CV_CHECK_OPTION => 0x00000002 , SQL_CV_CASCADED => 0x00000004 , SQL_CV_LOCAL => 0x00000008 }; $ReturnValues{SQL_CURSOR_COMMIT_BEHAVIOR} = { SQL_CB_DELETE => 0 , SQL_CB_CLOSE => 1 , SQL_CB_PRESERVE => 2 }; $ReturnValues{SQL_CURSOR_ROLLBACK_BEHAVIOR} = $ReturnValues{SQL_CURSOR_COMMIT_BEHAVIOR}; $ReturnValues{SQL_CURSOR_SENSITIVITY} = { SQL_UNSPECIFIED => 0 , SQL_INSENSITIVE => 1 , SQL_SENSITIVE => 2 }; $ReturnValues{SQL_DATETIME_LITERALS} = { SQL_DL_SQL92_DATE => 0x00000001 , SQL_DL_SQL92_TIME => 0x00000002 , SQL_DL_SQL92_TIMESTAMP => 0x00000004 , SQL_DL_SQL92_INTERVAL_YEAR => 0x00000008 , SQL_DL_SQL92_INTERVAL_MONTH => 0x00000010 , SQL_DL_SQL92_INTERVAL_DAY => 0x00000020 , SQL_DL_SQL92_INTERVAL_HOUR => 0x00000040 , SQL_DL_SQL92_INTERVAL_MINUTE => 0x00000080 , SQL_DL_SQL92_INTERVAL_SECOND => 0x00000100 , SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH => 0x00000200 , SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR => 0x00000400 , SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE => 0x00000800 , SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND => 0x00001000 , SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE => 0x00002000 , SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND => 0x00004000 , SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND => 0x00008000 }; $ReturnValues{SQL_DDL_INDEX} = { SQL_DI_CREATE_INDEX => 0x00000001 , SQL_DI_DROP_INDEX => 0x00000002 }; $ReturnValues{SQL_DIAG_CURSOR_ROW_COUNT} = { SQL_CA2_CRC_EXACT => 0x00001000 , SQL_CA2_CRC_APPROXIMATE => 0x00002000 , SQL_CA2_SIMULATE_NON_UNIQUE => 0x00004000 , SQL_CA2_SIMULATE_TRY_UNIQUE => 0x00008000 , SQL_CA2_SIMULATE_UNIQUE => 0x00010000 }; $ReturnValues{SQL_DROP_ASSERTION} = { SQL_DA_DROP_ASSERTION => 0x00000001 }; $ReturnValues{SQL_DROP_CHARACTER_SET} = { SQL_DCS_DROP_CHARACTER_SET => 0x00000001 }; $ReturnValues{SQL_DROP_COLLATION} = { SQL_DC_DROP_COLLATION => 0x00000001 }; $ReturnValues{SQL_DROP_DOMAIN} = { SQL_DD_DROP_DOMAIN => 0x00000001 , SQL_DD_RESTRICT => 0x00000002 , SQL_DD_CASCADE => 0x00000004 }; $ReturnValues{SQL_DROP_SCHEMA} = { SQL_DS_DROP_SCHEMA => 0x00000001 , SQL_DS_RESTRICT => 0x00000002 , SQL_DS_CASCADE => 0x00000004 }; $ReturnValues{SQL_DROP_TABLE} = { SQL_DT_DROP_TABLE => 0x00000001 , SQL_DT_RESTRICT => 0x00000002 , SQL_DT_CASCADE => 0x00000004 }; $ReturnValues{SQL_DROP_TRANSLATION} = { SQL_DTR_DROP_TRANSLATION => 0x00000001 }; $ReturnValues{SQL_DROP_VIEW} = { SQL_DV_DROP_VIEW => 0x00000001 , SQL_DV_RESTRICT => 0x00000002 , SQL_DV_CASCADE => 0x00000004 }; $ReturnValues{SQL_CURSOR_ATTRIBUTES1} = { SQL_CA1_NEXT => 0x00000001 , SQL_CA1_ABSOLUTE => 0x00000002 , SQL_CA1_RELATIVE => 0x00000004 , SQL_CA1_BOOKMARK => 0x00000008 , SQL_CA1_LOCK_NO_CHANGE => 0x00000040 , SQL_CA1_LOCK_EXCLUSIVE => 0x00000080 , SQL_CA1_LOCK_UNLOCK => 0x00000100 , SQL_CA1_POS_POSITION => 0x00000200 , SQL_CA1_POS_UPDATE => 0x00000400 , SQL_CA1_POS_DELETE => 0x00000800 , SQL_CA1_POS_REFRESH => 0x00001000 , SQL_CA1_POSITIONED_UPDATE => 0x00002000 , SQL_CA1_POSITIONED_DELETE => 0x00004000 , SQL_CA1_SELECT_FOR_UPDATE => 0x00008000 , SQL_CA1_BULK_ADD => 0x00010000 , SQL_CA1_BULK_UPDATE_BY_BOOKMARK => 0x00020000 , SQL_CA1_BULK_DELETE_BY_BOOKMARK => 0x00040000 , SQL_CA1_BULK_FETCH_BY_BOOKMARK => 0x00080000 }; $ReturnValues{ SQL_DYNAMIC_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1}; $ReturnValues{SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1}; $ReturnValues{ SQL_KEYSET_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1}; $ReturnValues{ SQL_STATIC_CURSOR_ATTRIBUTES1} = $ReturnValues{SQL_CURSOR_ATTRIBUTES1}; $ReturnValues{SQL_CURSOR_ATTRIBUTES2} = { SQL_CA2_READ_ONLY_CONCURRENCY => 0x00000001 , SQL_CA2_LOCK_CONCURRENCY => 0x00000002 , SQL_CA2_OPT_ROWVER_CONCURRENCY => 0x00000004 , SQL_CA2_OPT_VALUES_CONCURRENCY => 0x00000008 , SQL_CA2_SENSITIVITY_ADDITIONS => 0x00000010 , SQL_CA2_SENSITIVITY_DELETIONS => 0x00000020 , SQL_CA2_SENSITIVITY_UPDATES => 0x00000040 , SQL_CA2_MAX_ROWS_SELECT => 0x00000080 , SQL_CA2_MAX_ROWS_INSERT => 0x00000100 , SQL_CA2_MAX_ROWS_DELETE => 0x00000200 , SQL_CA2_MAX_ROWS_UPDATE => 0x00000400 , SQL_CA2_MAX_ROWS_CATALOG => 0x00000800 , SQL_CA2_CRC_EXACT => 0x00001000 , SQL_CA2_CRC_APPROXIMATE => 0x00002000 , SQL_CA2_SIMULATE_NON_UNIQUE => 0x00004000 , SQL_CA2_SIMULATE_TRY_UNIQUE => 0x00008000 , SQL_CA2_SIMULATE_UNIQUE => 0x00010000 }; $ReturnValues{ SQL_DYNAMIC_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2}; $ReturnValues{SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2}; $ReturnValues{ SQL_KEYSET_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2}; $ReturnValues{ SQL_STATIC_CURSOR_ATTRIBUTES2} = $ReturnValues{SQL_CURSOR_ATTRIBUTES2}; $ReturnValues{SQL_FETCH_DIRECTION} = { SQL_FD_FETCH_NEXT => 0x00000001 , SQL_FD_FETCH_FIRST => 0x00000002 , SQL_FD_FETCH_LAST => 0x00000004 , SQL_FD_FETCH_PRIOR => 0x00000008 , SQL_FD_FETCH_ABSOLUTE => 0x00000010 , SQL_FD_FETCH_RELATIVE => 0x00000020 , SQL_FD_FETCH_RESUME => 0x00000040 , SQL_FD_FETCH_BOOKMARK => 0x00000080 }; $ReturnValues{SQL_FILE_USAGE} = { SQL_FILE_NOT_SUPPORTED => 0x0000 , SQL_FILE_TABLE => 0x0001 , SQL_FILE_QUALIFIER => 0x0002 , SQL_FILE_CATALOG => 0x0002 # SQL_FILE_QUALIFIER }; $ReturnValues{SQL_GETDATA_EXTENSIONS} = { SQL_GD_ANY_COLUMN => 0x00000001 , SQL_GD_ANY_ORDER => 0x00000002 , SQL_GD_BLOCK => 0x00000004 , SQL_GD_BOUND => 0x00000008 }; $ReturnValues{SQL_GROUP_BY} = { SQL_GB_NOT_SUPPORTED => 0x0000 , SQL_GB_GROUP_BY_EQUALS_SELECT => 0x0001 , SQL_GB_GROUP_BY_CONTAINS_SELECT => 0x0002 , SQL_GB_NO_RELATION => 0x0003 , SQL_GB_COLLATE => 0x0004 }; $ReturnValues{SQL_IDENTIFIER_CASE} = { SQL_IC_UPPER => 1 , SQL_IC_LOWER => 2 , SQL_IC_SENSITIVE => 3 , SQL_IC_MIXED => 4 }; $ReturnValues{SQL_INDEX_KEYWORDS} = { SQL_IK_NONE => 0x00000000 , SQL_IK_ASC => 0x00000001 , SQL_IK_DESC => 0x00000002 # SQL_IK_ALL => }; $ReturnValues{SQL_INFO_SCHEMA_VIEWS} = { SQL_ISV_ASSERTIONS => 0x00000001 , SQL_ISV_CHARACTER_SETS => 0x00000002 , SQL_ISV_CHECK_CONSTRAINTS => 0x00000004 , SQL_ISV_COLLATIONS => 0x00000008 , SQL_ISV_COLUMN_DOMAIN_USAGE => 0x00000010 , SQL_ISV_COLUMN_PRIVILEGES => 0x00000020 , SQL_ISV_COLUMNS => 0x00000040 , SQL_ISV_CONSTRAINT_COLUMN_USAGE => 0x00000080 , SQL_ISV_CONSTRAINT_TABLE_USAGE => 0x00000100 , SQL_ISV_DOMAIN_CONSTRAINTS => 0x00000200 , SQL_ISV_DOMAINS => 0x00000400 , SQL_ISV_KEY_COLUMN_USAGE => 0x00000800 , SQL_ISV_REFERENTIAL_CONSTRAINTS => 0x00001000 , SQL_ISV_SCHEMATA => 0x00002000 , SQL_ISV_SQL_LANGUAGES => 0x00004000 , SQL_ISV_TABLE_CONSTRAINTS => 0x00008000 , SQL_ISV_TABLE_PRIVILEGES => 0x00010000 , SQL_ISV_TABLES => 0x00020000 , SQL_ISV_TRANSLATIONS => 0x00040000 , SQL_ISV_USAGE_PRIVILEGES => 0x00080000 , SQL_ISV_VIEW_COLUMN_USAGE => 0x00100000 , SQL_ISV_VIEW_TABLE_USAGE => 0x00200000 , SQL_ISV_VIEWS => 0x00400000 }; $ReturnValues{SQL_INSERT_STATEMENT} = { SQL_IS_INSERT_LITERALS => 0x00000001 , SQL_IS_INSERT_SEARCHED => 0x00000002 , SQL_IS_SELECT_INTO => 0x00000004 }; $ReturnValues{SQL_LOCK_TYPES} = { SQL_LCK_NO_CHANGE => 0x00000001 , SQL_LCK_EXCLUSIVE => 0x00000002 , SQL_LCK_UNLOCK => 0x00000004 }; $ReturnValues{SQL_NON_NULLABLE_COLUMNS} = { SQL_NNC_NULL => 0x0000 , SQL_NNC_NON_NULL => 0x0001 }; $ReturnValues{SQL_NULL_COLLATION} = { SQL_NC_HIGH => 0 , SQL_NC_LOW => 1 , SQL_NC_START => 0x0002 , SQL_NC_END => 0x0004 }; $ReturnValues{SQL_NUMERIC_FUNCTIONS} = { SQL_FN_NUM_ABS => 0x00000001 , SQL_FN_NUM_ACOS => 0x00000002 , SQL_FN_NUM_ASIN => 0x00000004 , SQL_FN_NUM_ATAN => 0x00000008 , SQL_FN_NUM_ATAN2 => 0x00000010 , SQL_FN_NUM_CEILING => 0x00000020 , SQL_FN_NUM_COS => 0x00000040 , SQL_FN_NUM_COT => 0x00000080 , SQL_FN_NUM_EXP => 0x00000100 , SQL_FN_NUM_FLOOR => 0x00000200 , SQL_FN_NUM_LOG => 0x00000400 , SQL_FN_NUM_MOD => 0x00000800 , SQL_FN_NUM_SIGN => 0x00001000 , SQL_FN_NUM_SIN => 0x00002000 , SQL_FN_NUM_SQRT => 0x00004000 , SQL_FN_NUM_TAN => 0x00008000 , SQL_FN_NUM_PI => 0x00010000 , SQL_FN_NUM_RAND => 0x00020000 , SQL_FN_NUM_DEGREES => 0x00040000 , SQL_FN_NUM_LOG10 => 0x00080000 , SQL_FN_NUM_POWER => 0x00100000 , SQL_FN_NUM_RADIANS => 0x00200000 , SQL_FN_NUM_ROUND => 0x00400000 , SQL_FN_NUM_TRUNCATE => 0x00800000 }; $ReturnValues{SQL_ODBC_API_CONFORMANCE} = { SQL_OAC_NONE => 0x0000 , SQL_OAC_LEVEL1 => 0x0001 , SQL_OAC_LEVEL2 => 0x0002 }; $ReturnValues{SQL_ODBC_INTERFACE_CONFORMANCE} = { SQL_OIC_CORE => 1 , SQL_OIC_LEVEL1 => 2 , SQL_OIC_LEVEL2 => 3 }; $ReturnValues{SQL_ODBC_SAG_CLI_CONFORMANCE} = { SQL_OSCC_NOT_COMPLIANT => 0x0000 , SQL_OSCC_COMPLIANT => 0x0001 }; $ReturnValues{SQL_ODBC_SQL_CONFORMANCE} = { SQL_OSC_MINIMUM => 0x0000 , SQL_OSC_CORE => 0x0001 , SQL_OSC_EXTENDED => 0x0002 }; $ReturnValues{SQL_OJ_CAPABILITIES} = { SQL_OJ_LEFT => 0x00000001 , SQL_OJ_RIGHT => 0x00000002 , SQL_OJ_FULL => 0x00000004 , SQL_OJ_NESTED => 0x00000008 , SQL_OJ_NOT_ORDERED => 0x00000010 , SQL_OJ_INNER => 0x00000020 , SQL_OJ_ALL_COMPARISON_OPS => 0x00000040 }; $ReturnValues{SQL_OWNER_USAGE} = { SQL_OU_DML_STATEMENTS => 0x00000001 , SQL_OU_PROCEDURE_INVOCATION => 0x00000002 , SQL_OU_TABLE_DEFINITION => 0x00000004 , SQL_OU_INDEX_DEFINITION => 0x00000008 , SQL_OU_PRIVILEGE_DEFINITION => 0x00000010 }; $ReturnValues{SQL_PARAM_ARRAY_ROW_COUNTS} = { SQL_PARC_BATCH => 1 , SQL_PARC_NO_BATCH => 2 }; $ReturnValues{SQL_PARAM_ARRAY_SELECTS} = { SQL_PAS_BATCH => 1 , SQL_PAS_NO_BATCH => 2 , SQL_PAS_NO_SELECT => 3 }; $ReturnValues{SQL_POSITIONED_STATEMENTS} = { SQL_PS_POSITIONED_DELETE => 0x00000001 , SQL_PS_POSITIONED_UPDATE => 0x00000002 , SQL_PS_SELECT_FOR_UPDATE => 0x00000004 }; $ReturnValues{SQL_POS_OPERATIONS} = { SQL_POS_POSITION => 0x00000001 , SQL_POS_REFRESH => 0x00000002 , SQL_POS_UPDATE => 0x00000004 , SQL_POS_DELETE => 0x00000008 , SQL_POS_ADD => 0x00000010 }; $ReturnValues{SQL_QUALIFIER_LOCATION} = { SQL_QL_START => 0x0001 , SQL_QL_END => 0x0002 }; $ReturnValues{SQL_QUALIFIER_USAGE} = { SQL_QU_DML_STATEMENTS => 0x00000001 , SQL_QU_PROCEDURE_INVOCATION => 0x00000002 , SQL_QU_TABLE_DEFINITION => 0x00000004 , SQL_QU_INDEX_DEFINITION => 0x00000008 , SQL_QU_PRIVILEGE_DEFINITION => 0x00000010 }; $ReturnValues{SQL_QUOTED_IDENTIFIER_CASE} = $ReturnValues{SQL_IDENTIFIER_CASE}; $ReturnValues{SQL_SCHEMA_USAGE} = { SQL_SU_DML_STATEMENTS => 0x00000001 # SQL_OU_DML_STATEMENTS , SQL_SU_PROCEDURE_INVOCATION => 0x00000002 # SQL_OU_PROCEDURE_INVOCATION , SQL_SU_TABLE_DEFINITION => 0x00000004 # SQL_OU_TABLE_DEFINITION , SQL_SU_INDEX_DEFINITION => 0x00000008 # SQL_OU_INDEX_DEFINITION , SQL_SU_PRIVILEGE_DEFINITION => 0x00000010 # SQL_OU_PRIVILEGE_DEFINITION }; $ReturnValues{SQL_SCROLL_CONCURRENCY} = { SQL_SCCO_READ_ONLY => 0x00000001 , SQL_SCCO_LOCK => 0x00000002 , SQL_SCCO_OPT_ROWVER => 0x00000004 , SQL_SCCO_OPT_VALUES => 0x00000008 }; $ReturnValues{SQL_SCROLL_OPTIONS} = { SQL_SO_FORWARD_ONLY => 0x00000001 , SQL_SO_KEYSET_DRIVEN => 0x00000002 , SQL_SO_DYNAMIC => 0x00000004 , SQL_SO_MIXED => 0x00000008 , SQL_SO_STATIC => 0x00000010 }; $ReturnValues{SQL_SQL92_DATETIME_FUNCTIONS} = { SQL_SDF_CURRENT_DATE => 0x00000001 , SQL_SDF_CURRENT_TIME => 0x00000002 , SQL_SDF_CURRENT_TIMESTAMP => 0x00000004 }; $ReturnValues{SQL_SQL92_FOREIGN_KEY_DELETE_RULE} = { SQL_SFKD_CASCADE => 0x00000001 , SQL_SFKD_NO_ACTION => 0x00000002 , SQL_SFKD_SET_DEFAULT => 0x00000004 , SQL_SFKD_SET_NULL => 0x00000008 }; $ReturnValues{SQL_SQL92_FOREIGN_KEY_UPDATE_RULE} = { SQL_SFKU_CASCADE => 0x00000001 , SQL_SFKU_NO_ACTION => 0x00000002 , SQL_SFKU_SET_DEFAULT => 0x00000004 , SQL_SFKU_SET_NULL => 0x00000008 }; $ReturnValues{SQL_SQL92_GRANT} = { SQL_SG_USAGE_ON_DOMAIN => 0x00000001 , SQL_SG_USAGE_ON_CHARACTER_SET => 0x00000002 , SQL_SG_USAGE_ON_COLLATION => 0x00000004 , SQL_SG_USAGE_ON_TRANSLATION => 0x00000008 , SQL_SG_WITH_GRANT_OPTION => 0x00000010 , SQL_SG_DELETE_TABLE => 0x00000020 , SQL_SG_INSERT_TABLE => 0x00000040 , SQL_SG_INSERT_COLUMN => 0x00000080 , SQL_SG_REFERENCES_TABLE => 0x00000100 , SQL_SG_REFERENCES_COLUMN => 0x00000200 , SQL_SG_SELECT_TABLE => 0x00000400 , SQL_SG_UPDATE_TABLE => 0x00000800 , SQL_SG_UPDATE_COLUMN => 0x00001000 }; $ReturnValues{SQL_SQL92_NUMERIC_VALUE_FUNCTIONS} = { SQL_SNVF_BIT_LENGTH => 0x00000001 , SQL_SNVF_CHAR_LENGTH => 0x00000002 , SQL_SNVF_CHARACTER_LENGTH => 0x00000004 , SQL_SNVF_EXTRACT => 0x00000008 , SQL_SNVF_OCTET_LENGTH => 0x00000010 , SQL_SNVF_POSITION => 0x00000020 }; $ReturnValues{SQL_SQL92_PREDICATES} = { SQL_SP_EXISTS => 0x00000001 , SQL_SP_ISNOTNULL => 0x00000002 , SQL_SP_ISNULL => 0x00000004 , SQL_SP_MATCH_FULL => 0x00000008 , SQL_SP_MATCH_PARTIAL => 0x00000010 , SQL_SP_MATCH_UNIQUE_FULL => 0x00000020 , SQL_SP_MATCH_UNIQUE_PARTIAL => 0x00000040 , SQL_SP_OVERLAPS => 0x00000080 , SQL_SP_UNIQUE => 0x00000100 , SQL_SP_LIKE => 0x00000200 , SQL_SP_IN => 0x00000400 , SQL_SP_BETWEEN => 0x00000800 , SQL_SP_COMPARISON => 0x00001000 , SQL_SP_QUANTIFIED_COMPARISON => 0x00002000 }; $ReturnValues{SQL_SQL92_RELATIONAL_JOIN_OPERATORS} = { SQL_SRJO_CORRESPONDING_CLAUSE => 0x00000001 , SQL_SRJO_CROSS_JOIN => 0x00000002 , SQL_SRJO_EXCEPT_JOIN => 0x00000004 , SQL_SRJO_FULL_OUTER_JOIN => 0x00000008 , SQL_SRJO_INNER_JOIN => 0x00000010 , SQL_SRJO_INTERSECT_JOIN => 0x00000020 , SQL_SRJO_LEFT_OUTER_JOIN => 0x00000040 , SQL_SRJO_NATURAL_JOIN => 0x00000080 , SQL_SRJO_RIGHT_OUTER_JOIN => 0x00000100 , SQL_SRJO_UNION_JOIN => 0x00000200 }; $ReturnValues{SQL_SQL92_REVOKE} = { SQL_SR_USAGE_ON_DOMAIN => 0x00000001 , SQL_SR_USAGE_ON_CHARACTER_SET => 0x00000002 , SQL_SR_USAGE_ON_COLLATION => 0x00000004 , SQL_SR_USAGE_ON_TRANSLATION => 0x00000008 , SQL_SR_GRANT_OPTION_FOR => 0x00000010 , SQL_SR_CASCADE => 0x00000020 , SQL_SR_RESTRICT => 0x00000040 , SQL_SR_DELETE_TABLE => 0x00000080 , SQL_SR_INSERT_TABLE => 0x00000100 , SQL_SR_INSERT_COLUMN => 0x00000200 , SQL_SR_REFERENCES_TABLE => 0x00000400 , SQL_SR_REFERENCES_COLUMN => 0x00000800 , SQL_SR_SELECT_TABLE => 0x00001000 , SQL_SR_UPDATE_TABLE => 0x00002000 , SQL_SR_UPDATE_COLUMN => 0x00004000 }; $ReturnValues{SQL_SQL92_ROW_VALUE_CONSTRUCTOR} = { SQL_SRVC_VALUE_EXPRESSION => 0x00000001 , SQL_SRVC_NULL => 0x00000002 , SQL_SRVC_DEFAULT => 0x00000004 , SQL_SRVC_ROW_SUBQUERY => 0x00000008 }; $ReturnValues{SQL_SQL92_STRING_FUNCTIONS} = { SQL_SSF_CONVERT => 0x00000001 , SQL_SSF_LOWER => 0x00000002 , SQL_SSF_UPPER => 0x00000004 , SQL_SSF_SUBSTRING => 0x00000008 , SQL_SSF_TRANSLATE => 0x00000010 , SQL_SSF_TRIM_BOTH => 0x00000020 , SQL_SSF_TRIM_LEADING => 0x00000040 , SQL_SSF_TRIM_TRAILING => 0x00000080 }; $ReturnValues{SQL_SQL92_VALUE_EXPRESSIONS} = { SQL_SVE_CASE => 0x00000001 , SQL_SVE_CAST => 0x00000002 , SQL_SVE_COALESCE => 0x00000004 , SQL_SVE_NULLIF => 0x00000008 }; $ReturnValues{SQL_SQL_CONFORMANCE} = { SQL_SC_SQL92_ENTRY => 0x00000001 , SQL_SC_FIPS127_2_TRANSITIONAL => 0x00000002 , SQL_SC_SQL92_INTERMEDIATE => 0x00000004 , SQL_SC_SQL92_FULL => 0x00000008 }; $ReturnValues{SQL_STANDARD_CLI_CONFORMANCE} = { SQL_SCC_XOPEN_CLI_VERSION1 => 0x00000001 , SQL_SCC_ISO92_CLI => 0x00000002 }; $ReturnValues{SQL_STATIC_SENSITIVITY} = { SQL_SS_ADDITIONS => 0x00000001 , SQL_SS_DELETIONS => 0x00000002 , SQL_SS_UPDATES => 0x00000004 }; $ReturnValues{SQL_STRING_FUNCTIONS} = { SQL_FN_STR_CONCAT => 0x00000001 , SQL_FN_STR_INSERT => 0x00000002 , SQL_FN_STR_LEFT => 0x00000004 , SQL_FN_STR_LTRIM => 0x00000008 , SQL_FN_STR_LENGTH => 0x00000010 , SQL_FN_STR_LOCATE => 0x00000020 , SQL_FN_STR_LCASE => 0x00000040 , SQL_FN_STR_REPEAT => 0x00000080 , SQL_FN_STR_REPLACE => 0x00000100 , SQL_FN_STR_RIGHT => 0x00000200 , SQL_FN_STR_RTRIM => 0x00000400 , SQL_FN_STR_SUBSTRING => 0x00000800 , SQL_FN_STR_UCASE => 0x00001000 , SQL_FN_STR_ASCII => 0x00002000 , SQL_FN_STR_CHAR => 0x00004000 , SQL_FN_STR_DIFFERENCE => 0x00008000 , SQL_FN_STR_LOCATE_2 => 0x00010000 , SQL_FN_STR_SOUNDEX => 0x00020000 , SQL_FN_STR_SPACE => 0x00040000 , SQL_FN_STR_BIT_LENGTH => 0x00080000 , SQL_FN_STR_CHAR_LENGTH => 0x00100000 , SQL_FN_STR_CHARACTER_LENGTH => 0x00200000 , SQL_FN_STR_OCTET_LENGTH => 0x00400000 , SQL_FN_STR_POSITION => 0x00800000 }; $ReturnValues{SQL_SUBQUERIES} = { SQL_SQ_COMPARISON => 0x00000001 , SQL_SQ_EXISTS => 0x00000002 , SQL_SQ_IN => 0x00000004 , SQL_SQ_QUANTIFIED => 0x00000008 , SQL_SQ_CORRELATED_SUBQUERIES => 0x00000010 }; $ReturnValues{SQL_SYSTEM_FUNCTIONS} = { SQL_FN_SYS_USERNAME => 0x00000001 , SQL_FN_SYS_DBNAME => 0x00000002 , SQL_FN_SYS_IFNULL => 0x00000004 }; $ReturnValues{SQL_TIMEDATE_ADD_INTERVALS} = { SQL_FN_TSI_FRAC_SECOND => 0x00000001 , SQL_FN_TSI_SECOND => 0x00000002 , SQL_FN_TSI_MINUTE => 0x00000004 , SQL_FN_TSI_HOUR => 0x00000008 , SQL_FN_TSI_DAY => 0x00000010 , SQL_FN_TSI_WEEK => 0x00000020 , SQL_FN_TSI_MONTH => 0x00000040 , SQL_FN_TSI_QUARTER => 0x00000080 , SQL_FN_TSI_YEAR => 0x00000100 }; $ReturnValues{SQL_TIMEDATE_FUNCTIONS} = { SQL_FN_TD_NOW => 0x00000001 , SQL_FN_TD_CURDATE => 0x00000002 , SQL_FN_TD_DAYOFMONTH => 0x00000004 , SQL_FN_TD_DAYOFWEEK => 0x00000008 , SQL_FN_TD_DAYOFYEAR => 0x00000010 , SQL_FN_TD_MONTH => 0x00000020 , SQL_FN_TD_QUARTER => 0x00000040 , SQL_FN_TD_WEEK => 0x00000080 , SQL_FN_TD_YEAR => 0x00000100 , SQL_FN_TD_CURTIME => 0x00000200 , SQL_FN_TD_HOUR => 0x00000400 , SQL_FN_TD_MINUTE => 0x00000800 , SQL_FN_TD_SECOND => 0x00001000 , SQL_FN_TD_TIMESTAMPADD => 0x00002000 , SQL_FN_TD_TIMESTAMPDIFF => 0x00004000 , SQL_FN_TD_DAYNAME => 0x00008000 , SQL_FN_TD_MONTHNAME => 0x00010000 , SQL_FN_TD_CURRENT_DATE => 0x00020000 , SQL_FN_TD_CURRENT_TIME => 0x00040000 , SQL_FN_TD_CURRENT_TIMESTAMP => 0x00080000 , SQL_FN_TD_EXTRACT => 0x00100000 }; $ReturnValues{SQL_TXN_CAPABLE} = { SQL_TC_NONE => 0 , SQL_TC_DML => 1 , SQL_TC_ALL => 2 , SQL_TC_DDL_COMMIT => 3 , SQL_TC_DDL_IGNORE => 4 }; $ReturnValues{SQL_TRANSACTION_ISOLATION_OPTION} = { SQL_TRANSACTION_READ_UNCOMMITTED => 0x00000001 # SQL_TXN_READ_UNCOMMITTED , SQL_TRANSACTION_READ_COMMITTED => 0x00000002 # SQL_TXN_READ_COMMITTED , SQL_TRANSACTION_REPEATABLE_READ => 0x00000004 # SQL_TXN_REPEATABLE_READ , SQL_TRANSACTION_SERIALIZABLE => 0x00000008 # SQL_TXN_SERIALIZABLE }; $ReturnValues{SQL_DEFAULT_TRANSACTION_ISOLATION} = $ReturnValues{SQL_TRANSACTION_ISOLATION_OPTION}; $ReturnValues{SQL_TXN_ISOLATION_OPTION} = { SQL_TXN_READ_UNCOMMITTED => 0x00000001 , SQL_TXN_READ_COMMITTED => 0x00000002 , SQL_TXN_REPEATABLE_READ => 0x00000004 , SQL_TXN_SERIALIZABLE => 0x00000008 }; $ReturnValues{SQL_DEFAULT_TXN_ISOLATION} = $ReturnValues{SQL_TXN_ISOLATION_OPTION}; $ReturnValues{SQL_TXN_VERSIONING} = { SQL_TXN_VERSIONING => 0x00000010 }; $ReturnValues{SQL_UNION} = { SQL_U_UNION => 0x00000001 , SQL_U_UNION_ALL => 0x00000002 }; $ReturnValues{SQL_UNION_STATEMENT} = { SQL_US_UNION => 0x00000001 # SQL_U_UNION , SQL_US_UNION_ALL => 0x00000002 # SQL_U_UNION_ALL }; 1; =head1 TODO Corrections? SQL_NULL_COLLATION: ODBC vs ANSI Unique values for $ReturnValues{...}?, e.g. SQL_FILE_USAGE =cut DBI/Const/GetInfo/ANSI.pm 0000644 00000022600 15037233315 0010655 0 ustar 00 # $Id: ANSI.pm 8696 2007-01-24 23:12:38Z Tim $ # # Copyright (c) 2002 Tim Bunce Ireland # # Constant data describing ANSI CLI info types and return values for the # SQLGetInfo() method of ODBC. # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; package DBI::Const::GetInfo::ANSI; our (%InfoTypes,%ReturnTypes,%ReturnValues,); =head1 NAME DBI::Const::GetInfo::ANSI - ISO/IEC SQL/CLI Constants for GetInfo =head1 SYNOPSIS The API for this module is private and subject to change. =head1 DESCRIPTION Information requested by GetInfo(). See: A.1 C header file SQLCLI.H, Page 316, 317. The API for this module is private and subject to change. =head1 REFERENCES ISO/IEC FCD 9075-3:200x Information technology - Database Languages - SQL - Part 3: Call-Level Interface (SQL/CLI) SC32 N00744 = WG3:VIE-005 = H2-2002-007 Date: 2002-01-15 =cut my $VERSION = "2.008697"; %InfoTypes = ( SQL_ALTER_TABLE => 86 , SQL_CATALOG_NAME => 10003 , SQL_COLLATING_SEQUENCE => 10004 , SQL_CURSOR_COMMIT_BEHAVIOR => 23 , SQL_CURSOR_SENSITIVITY => 10001 , SQL_DATA_SOURCE_NAME => 2 , SQL_DATA_SOURCE_READ_ONLY => 25 , SQL_DBMS_NAME => 17 , SQL_DBMS_VERSION => 18 , SQL_DEFAULT_TRANSACTION_ISOLATION => 26 , SQL_DESCRIBE_PARAMETER => 10002 , SQL_FETCH_DIRECTION => 8 , SQL_GETDATA_EXTENSIONS => 81 , SQL_IDENTIFIER_CASE => 28 , SQL_INTEGRITY => 73 , SQL_MAXIMUM_CATALOG_NAME_LENGTH => 34 , SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 97 , SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 99 , SQL_MAXIMUM_COLUMNS_IN_SELECT => 100 , SQL_MAXIMUM_COLUMNS_IN_TABLE => 101 , SQL_MAXIMUM_COLUMN_NAME_LENGTH => 30 , SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 1 , SQL_MAXIMUM_CURSOR_NAME_LENGTH => 31 , SQL_MAXIMUM_DRIVER_CONNECTIONS => 0 , SQL_MAXIMUM_IDENTIFIER_LENGTH => 10005 , SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 32 , SQL_MAXIMUM_STMT_OCTETS => 20000 , SQL_MAXIMUM_STMT_OCTETS_DATA => 20001 , SQL_MAXIMUM_STMT_OCTETS_SCHEMA => 20002 , SQL_MAXIMUM_TABLES_IN_SELECT => 106 , SQL_MAXIMUM_TABLE_NAME_LENGTH => 35 , SQL_MAXIMUM_USER_NAME_LENGTH => 107 , SQL_NULL_COLLATION => 85 , SQL_ORDER_BY_COLUMNS_IN_SELECT => 90 , SQL_OUTER_JOIN_CAPABILITIES => 115 , SQL_SCROLL_CONCURRENCY => 43 , SQL_SEARCH_PATTERN_ESCAPE => 14 , SQL_SERVER_NAME => 13 , SQL_SPECIAL_CHARACTERS => 94 , SQL_TRANSACTION_CAPABLE => 46 , SQL_TRANSACTION_ISOLATION_OPTION => 72 , SQL_USER_NAME => 47 ); =head2 %ReturnTypes See: Codes and data types for implementation information (Table 28), Page 85, 86. Mapped to ODBC datatype names. =cut %ReturnTypes = # maxlen ( SQL_ALTER_TABLE => 'SQLUINTEGER bitmask' # INTEGER , SQL_CATALOG_NAME => 'SQLCHAR' # CHARACTER (1) , SQL_COLLATING_SEQUENCE => 'SQLCHAR' # CHARACTER (254) , SQL_CURSOR_COMMIT_BEHAVIOR => 'SQLUSMALLINT' # SMALLINT , SQL_CURSOR_SENSITIVITY => 'SQLUINTEGER' # INTEGER , SQL_DATA_SOURCE_NAME => 'SQLCHAR' # CHARACTER (128) , SQL_DATA_SOURCE_READ_ONLY => 'SQLCHAR' # CHARACTER (1) , SQL_DBMS_NAME => 'SQLCHAR' # CHARACTER (254) , SQL_DBMS_VERSION => 'SQLCHAR' # CHARACTER (254) , SQL_DEFAULT_TRANSACTION_ISOLATION => 'SQLUINTEGER' # INTEGER , SQL_DESCRIBE_PARAMETER => 'SQLCHAR' # CHARACTER (1) , SQL_FETCH_DIRECTION => 'SQLUINTEGER bitmask' # INTEGER , SQL_GETDATA_EXTENSIONS => 'SQLUINTEGER bitmask' # INTEGER , SQL_IDENTIFIER_CASE => 'SQLUSMALLINT' # SMALLINT , SQL_INTEGRITY => 'SQLCHAR' # CHARACTER (1) , SQL_MAXIMUM_CATALOG_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_COLUMNS_IN_GROUP_BY => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_COLUMNS_IN_ORDER_BY => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_COLUMNS_IN_SELECT => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_COLUMNS_IN_TABLE => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_COLUMN_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_CONCURRENT_ACTIVITIES => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_CURSOR_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_DRIVER_CONNECTIONS => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_IDENTIFIER_LENGTH => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_SCHEMA_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_STMT_OCTETS => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_STMT_OCTETS_DATA => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_STMT_OCTETS_SCHEMA => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_TABLES_IN_SELECT => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_TABLE_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT , SQL_MAXIMUM_USER_NAME_LENGTH => 'SQLUSMALLINT' # SMALLINT , SQL_NULL_COLLATION => 'SQLUSMALLINT' # SMALLINT , SQL_ORDER_BY_COLUMNS_IN_SELECT => 'SQLCHAR' # CHARACTER (1) , SQL_OUTER_JOIN_CAPABILITIES => 'SQLUINTEGER bitmask' # INTEGER , SQL_SCROLL_CONCURRENCY => 'SQLUINTEGER bitmask' # INTEGER , SQL_SEARCH_PATTERN_ESCAPE => 'SQLCHAR' # CHARACTER (1) , SQL_SERVER_NAME => 'SQLCHAR' # CHARACTER (128) , SQL_SPECIAL_CHARACTERS => 'SQLCHAR' # CHARACTER (254) , SQL_TRANSACTION_CAPABLE => 'SQLUSMALLINT' # SMALLINT , SQL_TRANSACTION_ISOLATION_OPTION => 'SQLUINTEGER bitmask' # INTEGER , SQL_USER_NAME => 'SQLCHAR' # CHARACTER (128) ); =head2 %ReturnValues See: A.1 C header file SQLCLI.H, Page 317, 318. =cut $ReturnValues{SQL_ALTER_TABLE} = { SQL_AT_ADD_COLUMN => 0x00000001 , SQL_AT_DROP_COLUMN => 0x00000002 , SQL_AT_ALTER_COLUMN => 0x00000004 , SQL_AT_ADD_CONSTRAINT => 0x00000008 , SQL_AT_DROP_CONSTRAINT => 0x00000010 }; $ReturnValues{SQL_CURSOR_COMMIT_BEHAVIOR} = { SQL_CB_DELETE => 0 , SQL_CB_CLOSE => 1 , SQL_CB_PRESERVE => 2 }; $ReturnValues{SQL_FETCH_DIRECTION} = { SQL_FD_FETCH_NEXT => 0x00000001 , SQL_FD_FETCH_FIRST => 0x00000002 , SQL_FD_FETCH_LAST => 0x00000004 , SQL_FD_FETCH_PRIOR => 0x00000008 , SQL_FD_FETCH_ABSOLUTE => 0x00000010 , SQL_FD_FETCH_RELATIVE => 0x00000020 }; $ReturnValues{SQL_GETDATA_EXTENSIONS} = { SQL_GD_ANY_COLUMN => 0x00000001 , SQL_GD_ANY_ORDER => 0x00000002 }; $ReturnValues{SQL_IDENTIFIER_CASE} = { SQL_IC_UPPER => 1 , SQL_IC_LOWER => 2 , SQL_IC_SENSITIVE => 3 , SQL_IC_MIXED => 4 }; $ReturnValues{SQL_NULL_COLLATION} = { SQL_NC_HIGH => 1 , SQL_NC_LOW => 2 }; $ReturnValues{SQL_OUTER_JOIN_CAPABILITIES} = { SQL_OUTER_JOIN_LEFT => 0x00000001 , SQL_OUTER_JOIN_RIGHT => 0x00000002 , SQL_OUTER_JOIN_FULL => 0x00000004 , SQL_OUTER_JOIN_NESTED => 0x00000008 , SQL_OUTER_JOIN_NOT_ORDERED => 0x00000010 , SQL_OUTER_JOIN_INNER => 0x00000020 , SQL_OUTER_JOIN_ALL_COMPARISON_OPS => 0x00000040 }; $ReturnValues{SQL_SCROLL_CONCURRENCY} = { SQL_SCCO_READ_ONLY => 0x00000001 , SQL_SCCO_LOCK => 0x00000002 , SQL_SCCO_OPT_ROWVER => 0x00000004 , SQL_SCCO_OPT_VALUES => 0x00000008 }; $ReturnValues{SQL_TRANSACTION_ACCESS_MODE} = { SQL_TRANSACTION_READ_ONLY => 0x00000001 , SQL_TRANSACTION_READ_WRITE => 0x00000002 }; $ReturnValues{SQL_TRANSACTION_CAPABLE} = { SQL_TC_NONE => 0 , SQL_TC_DML => 1 , SQL_TC_ALL => 2 , SQL_TC_DDL_COMMIT => 3 , SQL_TC_DDL_IGNORE => 4 }; $ReturnValues{SQL_TRANSACTION_ISOLATION} = { SQL_TRANSACTION_READ_UNCOMMITTED => 0x00000001 , SQL_TRANSACTION_READ_COMMITTED => 0x00000002 , SQL_TRANSACTION_REPEATABLE_READ => 0x00000004 , SQL_TRANSACTION_SERIALIZABLE => 0x00000008 }; 1; =head1 TODO Corrections, e.g.: SQL_TRANSACTION_ISOLATION_OPTION vs. SQL_TRANSACTION_ISOLATION =cut DBI/ProfileSubs.pm 0000644 00000002220 15037233315 0007733 0 ustar 00 package DBI::ProfileSubs; our $VERSION = "0.009396"; =head1 NAME DBI::ProfileSubs - Subroutines for dynamic profile Path =head1 SYNOPSIS DBI_PROFILE='&norm_std_n3' prog.pl This is new and still experimental. =head1 TO DO Define come kind of naming convention for the subs. =cut use strict; use warnings; # would be good to refactor these regex into separate subs and find some # way to compose them in various combinations into multiple subs. # Perhaps via AUTOLOAD where \&auto_X_Y_Z creates a sub that does X, Y, and Z. # The final subs always need to be very fast. # sub norm_std_n3 { # my ($h, $method_name) = @_; local $_ = $_; s/\b\d+\b/<N>/g; # 42 -> <N> s/\b0x[0-9A-Fa-f]+\b/<N>/g; # 0xFE -> <N> s/'.*?'/'<S>'/g; # single quoted strings (doesn't handle escapes) s/".*?"/"<S>"/g; # double quoted strings (doesn't handle escapes) # convert names like log20001231 into log<N> s/([a-z_]+)(\d{3,})\b/${1}<N>/ig; # abbreviate massive "in (...)" statements and similar s!((\s*<[NS]>\s*,\s*){100,})!sprintf("$2,<repeated %d times>",length($1)/2)!eg; return $_; } 1; DBI/Gofer/Request.pm 0000644 00000012164 15037233315 0010200 0 ustar 00 package DBI::Gofer::Request; # $Id: Request.pm 12536 2009-02-24 22:37:09Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use DBI qw(neat neat_list); use base qw(DBI::Util::_accessor); our $VERSION = "0.012537"; use constant GOf_REQUEST_IDEMPOTENT => 0x0001; use constant GOf_REQUEST_READONLY => 0x0002; our @EXPORT = qw(GOf_REQUEST_IDEMPOTENT GOf_REQUEST_READONLY); __PACKAGE__->mk_accessors(qw( version flags dbh_connect_call dbh_method_call dbh_attributes dbh_last_insert_id_args sth_method_calls sth_result_attr )); __PACKAGE__->mk_accessors_using(make_accessor_autoviv_hashref => qw( meta )); sub new { my ($self, $args) = @_; $args->{version} ||= $VERSION; return $self->SUPER::new($args); } sub reset { my ($self, $flags) = @_; # remove everything except connect and version %$self = ( version => $self->{version}, dbh_connect_call => $self->{dbh_connect_call}, ); $self->{flags} = $flags if $flags; } sub init_request { my ($self, $method_and_args, $dbh) = @_; $self->reset( $dbh->{ReadOnly} ? GOf_REQUEST_READONLY : 0 ); $self->dbh_method_call($method_and_args); } sub is_sth_request { return shift->{sth_result_attr}; } sub statements { my $self = shift; my @statements; if (my $dbh_method_call = $self->dbh_method_call) { my $statement_method_regex = qr/^(?:do|prepare)$/; my (undef, $method, $arg1) = @$dbh_method_call; push @statements, $arg1 if $method && $method =~ $statement_method_regex; } return @statements; } sub is_idempotent { my $self = shift; if (my $flags = $self->flags) { return 1 if $flags & (GOf_REQUEST_IDEMPOTENT|GOf_REQUEST_READONLY); } # else check if all statements are SELECT statement that don't include FOR UPDATE my @statements = $self->statements; # XXX this is very minimal for now, doesn't even allow comments before the select # (and can't ever work for "exec stored_procedure_name" kinds of statements) # XXX it also doesn't deal with multiple statements: prepare("select foo; update bar") return 1 if @statements == grep { m/^ \s* SELECT \b /xmsi && !m/ \b FOR \s+ UPDATE \b /xmsi } @statements; return 0; } sub summary_as_text { my $self = shift; my ($context) = @_; my @s = ''; if ($context && %$context) { my @keys = sort keys %$context; push @s, join(", ", map { "$_=>".$context->{$_} } @keys); } my ($method, $dsn, $user, $pass, $attr) = @{ $self->dbh_connect_call }; $method ||= 'connect_cached'; $pass = '***' if defined $pass; my $tmp = ''; if ($attr) { $tmp = { %{$attr||{}} }; # copy so we can edit $tmp->{Password} = '***' if exists $tmp->{Password}; $tmp = "{ ".neat_list([ %$tmp ])." }"; } push @s, sprintf "dbh= $method(%s, %s)", neat_list([$dsn, $user, $pass]), $tmp; if (my $flags = $self->flags) { push @s, sprintf "flags: 0x%x", $flags; } if (my $dbh_attr = $self->dbh_attributes) { push @s, sprintf "dbh->FETCH: %s", @$dbh_attr if @$dbh_attr; } my ($wantarray, $meth, @args) = @{ $self->dbh_method_call }; my $args = neat_list(\@args); $args =~ s/\n+/ /g; push @s, sprintf "dbh->%s(%s)", $meth, $args; if (my $lii_args = $self->dbh_last_insert_id_args) { push @s, sprintf "dbh->last_insert_id(%s)", neat_list($lii_args); } for my $call (@{ $self->sth_method_calls || [] }) { my ($meth, @args) = @$call; ($args = neat_list(\@args)) =~ s/\n+/ /g; push @s, sprintf "sth->%s(%s)", $meth, $args; } if (my $sth_attr = $self->sth_result_attr) { push @s, sprintf "sth->FETCH: %s", %$sth_attr if %$sth_attr; } return join("\n\t", @s) . "\n"; } sub outline_as_text { # one-line version of summary_as_text my $self = shift; my @s = ''; my $neatlen = 80; if (my $flags = $self->flags) { push @s, sprintf "flags=0x%x", $flags; } my (undef, $meth, @args) = @{ $self->dbh_method_call }; push @s, sprintf "%s(%s)", $meth, neat_list(\@args, $neatlen); for my $call (@{ $self->sth_method_calls || [] }) { my ($meth, @args) = @$call; push @s, sprintf "%s(%s)", $meth, neat_list(\@args, $neatlen); } my ($method, $dsn) = @{ $self->dbh_connect_call }; push @s, "$method($dsn,...)"; # dsn last as it's usually less interesting (my $outline = join("; ", @s)) =~ s/\s+/ /g; # squish whitespace, incl newlines return $outline; } 1; =head1 NAME DBI::Gofer::Request - Encapsulate a request from DBD::Gofer to DBI::Gofer::Execute =head1 DESCRIPTION This is an internal class. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBI/Gofer/Serializer/Base.pm 0000644 00000002735 15037233315 0011536 0 ustar 00 package DBI::Gofer::Serializer::Base; # $Id: Base.pm 9949 2007-09-18 09:38:15Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. =head1 NAME DBI::Gofer::Serializer::Base - base class for Gofer serialization =head1 SYNOPSIS $serializer = $serializer_class->new(); $string = $serializer->serialize( $data ); ($string, $deserializer_class) = $serializer->serialize( $data ); $data = $serializer->deserialize( $string ); =head1 DESCRIPTION DBI::Gofer::Serializer::* classes implement a very minimal subset of the L<Data::Serializer> API. Gofer serializers are expected to be very fast and are not required to deal with anything other than non-blessed references to arrays and hashes, and plain scalars. =cut use strict; use warnings; use Carp qw(croak); our $VERSION = "0.009950"; sub new { my $class = shift; my $deserializer_class = $class->deserializer_class; return bless { deserializer_class => $deserializer_class } => $class; } sub deserializer_class { my $self = shift; my $class = ref($self) || $self; $class =~ s/^DBI::Gofer::Serializer:://; return $class; } sub serialize { my $self = shift; croak ref($self)." has not implemented the serialize method"; } sub deserialize { my $self = shift; croak ref($self)." has not implemented the deserialize method"; } 1; DBI/Gofer/Serializer/Storable.pm 0000644 00000002641 15037233315 0012433 0 ustar 00 package DBI::Gofer::Serializer::Storable; use strict; use warnings; use base qw(DBI::Gofer::Serializer::Base); # $Id: Storable.pm 15585 2013-03-22 20:31:22Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. =head1 NAME DBI::Gofer::Serializer::Storable - Gofer serialization using Storable =head1 SYNOPSIS $serializer = DBI::Gofer::Serializer::Storable->new(); $string = $serializer->serialize( $data ); ($string, $deserializer_class) = $serializer->serialize( $data ); $data = $serializer->deserialize( $string ); =head1 DESCRIPTION Uses Storable::nfreeze() to serialize and Storable::thaw() to deserialize. The serialize() method sets local $Storable::forgive_me = 1; so it doesn't croak if it encounters any data types that can't be serialized, such as code refs. See also L<DBI::Gofer::Serializer::Base>. =cut use Storable qw(nfreeze thaw); our $VERSION = "0.015586"; use base qw(DBI::Gofer::Serializer::Base); sub serialize { my $self = shift; local $Storable::forgive_me = 1; # for CODE refs etc local $Storable::canonical = 1; # for go_cache my $frozen = nfreeze(shift); return $frozen unless wantarray; return ($frozen, $self->{deserializer_class}); } sub deserialize { my $self = shift; return thaw(shift); } 1; DBI/Gofer/Serializer/DataDumper.pm 0000644 00000002437 15037233315 0012711 0 ustar 00 package DBI::Gofer::Serializer::DataDumper; use strict; use warnings; our $VERSION = "0.009950"; # $Id: DataDumper.pm 9949 2007-09-18 09:38:15Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. =head1 NAME DBI::Gofer::Serializer::DataDumper - Gofer serialization using DataDumper =head1 SYNOPSIS $serializer = DBI::Gofer::Serializer::DataDumper->new(); $string = $serializer->serialize( $data ); =head1 DESCRIPTION Uses DataDumper to serialize. Deserialization is not supported. The output of this class is only meant for human consumption. See also L<DBI::Gofer::Serializer::Base>. =cut use Data::Dumper; use base qw(DBI::Gofer::Serializer::Base); sub serialize { my $self = shift; local $Data::Dumper::Indent = 1; local $Data::Dumper::Terse = 1; local $Data::Dumper::Useqq = 0; # enabling this disables xs local $Data::Dumper::Sortkeys = 1; local $Data::Dumper::Quotekeys = 0; local $Data::Dumper::Deparse = 0; local $Data::Dumper::Purity = 0; my $frozen = Data::Dumper::Dumper(shift); return $frozen unless wantarray; return ($frozen, $self->{deserializer_class}); } 1; DBI/Gofer/Execute.pm 0000644 00000074634 15037233315 0010164 0 ustar 00 package DBI::Gofer::Execute; # $Id: Execute.pm 14282 2010-07-26 00:12:54Z David $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use Carp; use DBI qw(dbi_time); use DBI::Gofer::Request; use DBI::Gofer::Response; use base qw(DBI::Util::_accessor); our $VERSION = "0.014283"; our @all_dbh_methods = sort map { keys %$_ } $DBI::DBI_methods{db}, $DBI::DBI_methods{common}; our %all_dbh_methods = map { $_ => (DBD::_::db->can($_)||undef) } @all_dbh_methods; our $local_log = $ENV{DBI_GOFER_LOCAL_LOG}; # do extra logging to stderr our $current_dbh; # the dbh we're using for this request # set trace for server-side gofer # Could use DBI_TRACE env var when it's an unrelated separate process # but using DBI_GOFER_TRACE makes testing easier for subprocesses (eg stream) DBI->trace(split /=/, $ENV{DBI_GOFER_TRACE}, 2) if $ENV{DBI_GOFER_TRACE}; # define valid configuration attributes (args to new()) # the values here indicate the basic type of values allowed my %configuration_attributes = ( gofer_execute_class => 1, default_connect_dsn => 1, forced_connect_dsn => 1, default_connect_attributes => {}, forced_connect_attributes => {}, track_recent => 1, check_request_sub => sub {}, check_response_sub => sub {}, forced_single_resultset => 1, max_cached_dbh_per_drh => 1, max_cached_sth_per_dbh => 1, forced_response_attributes => {}, forced_gofer_random => 1, stats => {}, ); __PACKAGE__->mk_accessors( keys %configuration_attributes ); sub new { my ($self, $args) = @_; $args->{default_connect_attributes} ||= {}; $args->{forced_connect_attributes} ||= {}; $args->{max_cached_sth_per_dbh} ||= 1000; $args->{stats} ||= {}; return $self->SUPER::new($args); } sub valid_configuration_attributes { my $self = shift; return { %configuration_attributes }; } my %extra_attr = ( # Only referenced if the driver doesn't support private_attribute_info method. # What driver-specific attributes should be returned for the driver being used? # keyed by $dbh->{Driver}{Name} # XXX for sth should split into attr specific to resultsets (where NUM_OF_FIELDS > 0) and others # which would reduce processing/traffic for non-select statements mysql => { dbh => [qw( mysql_errno mysql_error mysql_hostinfo mysql_info mysql_insertid mysql_protoinfo mysql_serverinfo mysql_stat mysql_thread_id )], sth => [qw( mysql_is_blob mysql_is_key mysql_is_num mysql_is_pri_key mysql_is_auto_increment mysql_length mysql_max_length mysql_table mysql_type mysql_type_name mysql_insertid )], # XXX this dbh_after_sth stuff is a temporary, but important, hack. # should be done via hash instead of arrays where the hash value contains # flags that can indicate which attributes need to be handled in this way dbh_after_sth => [qw( mysql_insertid )], }, Pg => { dbh => [qw( pg_protocol pg_lib_version pg_server_version pg_db pg_host pg_port pg_default_port pg_options pg_pid )], sth => [qw( pg_size pg_type pg_oid_status pg_cmd_status )], }, Sybase => { dbh => [qw( syb_dynamic_supported syb_oc_version syb_server_version syb_server_version_string )], sth => [qw( syb_types syb_proc_status syb_result_type )], }, SQLite => { dbh => [qw( sqlite_version )], sth => [qw( )], }, ExampleP => { dbh => [qw( examplep_private_dbh_attrib )], sth => [qw( examplep_private_sth_attrib )], dbh_after_sth => [qw( examplep_insertid )], }, ); sub _connect { my ($self, $request) = @_; my $stats = $self->{stats}; # discard CachedKids from time to time if (++$stats->{_requests_served} % 1000 == 0 # XXX config? and my $max_cached_dbh_per_drh = $self->{max_cached_dbh_per_drh} ) { my %drivers = DBI->installed_drivers(); while ( my ($driver, $drh) = each %drivers ) { next unless my $CK = $drh->{CachedKids}; next unless keys %$CK > $max_cached_dbh_per_drh; next if $driver eq 'Gofer'; # ie transport=null when testing DBI->trace_msg(sprintf "Clearing %d cached dbh from $driver", scalar keys %$CK, $self->{max_cached_dbh_per_drh}); $_->{Active} && $_->disconnect for values %$CK; %$CK = (); } } # local $ENV{...} can leak, so only do it if required local $ENV{DBI_AUTOPROXY} if $ENV{DBI_AUTOPROXY}; my ($connect_method, $dsn, $username, $password, $attr) = @{ $request->dbh_connect_call }; $connect_method ||= 'connect_cached'; $stats->{method_calls_dbh}->{$connect_method}++; # delete attributes we don't want to affect the server-side # (Could just do this on client-side and trust the client. DoS?) delete @{$attr}{qw(Profile InactiveDestroy AutoInactiveDestroy HandleError HandleSetErr TraceLevel Taint TaintIn TaintOut)}; $dsn = $self->forced_connect_dsn || $dsn || $self->default_connect_dsn or die "No forced_connect_dsn, requested dsn, or default_connect_dsn for request"; my $random = $self->{forced_gofer_random} || $ENV{DBI_GOFER_RANDOM} || ''; my $connect_attr = { # the configured default attributes, if any %{ $self->default_connect_attributes }, # pass username and password as attributes # then they can be overridden by forced_connect_attributes Username => $username, Password => $password, # the requested attributes %$attr, # force some attributes the way we'd like them PrintWarn => $local_log, PrintError => $local_log, # the configured default attributes, if any %{ $self->forced_connect_attributes }, # RaiseError must be enabled RaiseError => 1, # reset Executed flag (of the cached handle) so we can use it to tell # if errors happened before the main part of the request was executed Executed => 0, # ensure this connect_cached doesn't have the same args as the client # because that causes subtle issues if in the same process (ie transport=null) # include pid to avoid problems with forking (ie null transport in mod_perl) # include gofer-random to avoid random behaviour leaking to other handles dbi_go_execute_unique => join("|", __PACKAGE__, $$, $random), }; # XXX implement our own private connect_cached method? (with rate-limited ping) my $dbh = DBI->$connect_method($dsn, undef, undef, $connect_attr); $dbh->{ShowErrorStatement} = 1 if $local_log; # XXX should probably just be a Callbacks => arg to connect_cached # with a cache of pre-built callback hooks (memoized, without $self) if (my $random = $self->{forced_gofer_random} || $ENV{DBI_GOFER_RANDOM}) { $self->_install_rand_callbacks($dbh, $random); } my $CK = $dbh->{CachedKids}; if ($CK && keys %$CK > $self->{max_cached_sth_per_dbh}) { %$CK = (); # clear all statement handles } #$dbh->trace(0); $current_dbh = $dbh; return $dbh; } sub reset_dbh { my ($self, $dbh) = @_; $dbh->set_err(undef, undef); # clear any error state } sub new_response_with_err { my ($self, $rv, $eval_error, $dbh) = @_; # this is the usual way to create a response for both success and failure # capture err+errstr etc and merge in $eval_error ($@) my ($err, $errstr, $state) = ($DBI::err, $DBI::errstr, $DBI::state); if ($eval_error) { $err ||= $DBI::stderr || 1; # ensure err is true if ($errstr) { $eval_error =~ s/(?: : \s)? \Q$errstr//x if $errstr; chomp $errstr; $errstr .= "; $eval_error"; } else { $errstr = $eval_error; } } chomp $errstr if $errstr; my $flags; # (XXX if we ever add transaction support then we'll need to take extra # steps because the commit/rollback would reset Executed before we get here) $flags |= GOf_RESPONSE_EXECUTED if $dbh && $dbh->{Executed}; my $response = DBI::Gofer::Response->new({ rv => $rv, err => $err, errstr => $errstr, state => $state, flags => $flags, }); return $response; } sub execute_request { my ($self, $request) = @_; # should never throw an exception DBI->trace_msg("-----> execute_request\n"); my @warnings; local $SIG{__WARN__} = sub { push @warnings, @_; warn @_ if $local_log; }; my $response = eval { if (my $check_request_sub = $self->check_request_sub) { $request = $check_request_sub->($request, $self) or die "check_request_sub failed"; } my $version = $request->version || 0; die ref($request)." version $version is not supported" if $version < 0.009116 or $version >= 1; ($request->is_sth_request) ? $self->execute_sth_request($request) : $self->execute_dbh_request($request); }; $response ||= $self->new_response_with_err(undef, $@, $current_dbh); if (my $check_response_sub = $self->check_response_sub) { # not protected with an eval so it can choose to throw an exception my $new = $check_response_sub->($response, $self, $request); $response = $new if ref $new; } undef $current_dbh; $response->warnings(\@warnings) if @warnings; DBI->trace_msg("<----- execute_request\n"); return $response; } sub execute_dbh_request { my ($self, $request) = @_; my $stats = $self->{stats}; my $dbh; my $rv_ref = eval { $dbh = $self->_connect($request); my $args = $request->dbh_method_call; # [ wantarray, 'method_name', @args ] my $wantarray = shift @$args; my $meth = shift @$args; $stats->{method_calls_dbh}->{$meth}++; my @rv = ($wantarray) ? $dbh->$meth(@$args) : scalar $dbh->$meth(@$args); \@rv; } || []; my $response = $self->new_response_with_err($rv_ref, $@, $dbh); return $response if not $dbh; # does this request also want any dbh attributes returned? if (my $dbh_attributes = $request->dbh_attributes) { $response->dbh_attributes( $self->gather_dbh_attributes($dbh, $dbh_attributes) ); } if ($rv_ref and my $lid_args = $request->dbh_last_insert_id_args) { $stats->{method_calls_dbh}->{last_insert_id}++; my $id = $dbh->last_insert_id( @$lid_args ); $response->last_insert_id( $id ); } if ($rv_ref and UNIVERSAL::isa($rv_ref->[0],'DBI::st')) { # dbh_method_call was probably a metadata method like table_info # that returns a statement handle, so turn the $sth into resultset my $sth = $rv_ref->[0]; $response->sth_resultsets( $self->gather_sth_resultsets($sth, $request, $response) ); $response->rv("(sth)"); # don't try to return actual sth } # we're finished with this dbh for this request $self->reset_dbh($dbh); return $response; } sub gather_dbh_attributes { my ($self, $dbh, $dbh_attributes) = @_; my @req_attr_names = @$dbh_attributes; if ($req_attr_names[0] eq '*') { # auto include std + private shift @req_attr_names; push @req_attr_names, @{ $self->_std_response_attribute_names($dbh) }; } my %dbh_attr_values; @dbh_attr_values{@req_attr_names} = $dbh->FETCH_many(@req_attr_names); # XXX piggyback installed_methods onto dbh_attributes for now $dbh_attr_values{dbi_installed_methods} = { DBI->installed_methods }; # XXX piggyback default_methods onto dbh_attributes for now $dbh_attr_values{dbi_default_methods} = _get_default_methods($dbh); return \%dbh_attr_values; } sub _std_response_attribute_names { my ($self, $h) = @_; $h = tied(%$h) || $h; # switch to inner handle # cache the private_attribute_info data for each handle # XXX might be better to cache it in the executor # as it's unlikely to change # or perhaps at least cache it in the dbh even for sth # as the sth are typically very short lived my ($dbh, $h_type, $driver_name, @attr_names); if ($dbh = $h->{Database}) { # is an sth # does the dbh already have the answer cached? return $dbh->{private_gofer_std_attr_names_sth} if $dbh->{private_gofer_std_attr_names_sth}; ($h_type, $driver_name) = ('sth', $dbh->{Driver}{Name}); push @attr_names, qw(NUM_OF_PARAMS NUM_OF_FIELDS NAME TYPE NULLABLE PRECISION SCALE); } else { # is a dbh return $h->{private_gofer_std_attr_names_dbh} if $h->{private_gofer_std_attr_names_dbh}; ($h_type, $driver_name, $dbh) = ('dbh', $h->{Driver}{Name}, $h); # explicitly add these because drivers may have different defaults # add Name so the client gets the real Name of the connection push @attr_names, qw(ChopBlanks LongReadLen LongTruncOk ReadOnly Name); } if (my $pai = $h->private_attribute_info) { push @attr_names, keys %$pai; } else { push @attr_names, @{ $extra_attr{ $driver_name }{$h_type} || []}; } if (my $fra = $self->{forced_response_attributes}) { push @attr_names, @{ $fra->{ $driver_name }{$h_type} || []} } $dbh->trace_msg("_std_response_attribute_names for $driver_name $h_type: @attr_names\n"); # cache into the dbh even for sth, as the dbh is usually longer lived return $dbh->{"private_gofer_std_attr_names_$h_type"} = \@attr_names; } sub execute_sth_request { my ($self, $request) = @_; my $dbh; my $sth; my $last_insert_id; my $stats = $self->{stats}; my $rv = eval { $dbh = $self->_connect($request); my $args = $request->dbh_method_call; # [ wantarray, 'method_name', @args ] shift @$args; # discard wantarray my $meth = shift @$args; $stats->{method_calls_sth}->{$meth}++; $sth = $dbh->$meth(@$args); my $last = '(sth)'; # a true value (don't try to return actual sth) # execute methods on the sth, e.g., bind_param & execute if (my $calls = $request->sth_method_calls) { for my $meth_call (@$calls) { my $method = shift @$meth_call; $stats->{method_calls_sth}->{$method}++; $last = $sth->$method(@$meth_call); } } if (my $lid_args = $request->dbh_last_insert_id_args) { $stats->{method_calls_sth}->{last_insert_id}++; $last_insert_id = $dbh->last_insert_id( @$lid_args ); } $last; }; my $response = $self->new_response_with_err($rv, $@, $dbh); return $response if not $dbh; $response->last_insert_id( $last_insert_id ) if defined $last_insert_id; # even if the eval failed we still want to try to gather attribute values # (XXX would be nice to be able to support streaming of results. # which would reduce memory usage and latency for large results) if ($sth) { $response->sth_resultsets( $self->gather_sth_resultsets($sth, $request, $response) ); $sth->finish; } # does this request also want any dbh attributes returned? my $dbh_attr_set; if (my $dbh_attributes = $request->dbh_attributes) { $dbh_attr_set = $self->gather_dbh_attributes($dbh, $dbh_attributes); } # XXX needs to be integrated with private_attribute_info() etc if (my $dbh_attr = $extra_attr{$dbh->{Driver}{Name}}{dbh_after_sth}) { @{$dbh_attr_set}{@$dbh_attr} = $dbh->FETCH_many(@$dbh_attr); } $response->dbh_attributes($dbh_attr_set) if $dbh_attr_set && %$dbh_attr_set; $self->reset_dbh($dbh); return $response; } sub gather_sth_resultsets { my ($self, $sth, $request, $response) = @_; my $resultsets = eval { my $attr_names = $self->_std_response_attribute_names($sth); my $sth_attr = {}; $sth_attr->{$_} = 1 for @$attr_names; # let the client add/remove sth attributes if (my $sth_result_attr = $request->sth_result_attr) { $sth_attr->{$_} = $sth_result_attr->{$_} for keys %$sth_result_attr; } my @sth_attr = grep { $sth_attr->{$_} } keys %$sth_attr; my $row_count = 0; my $rs_list = []; while (1) { my $rs = $self->fetch_result_set($sth, \@sth_attr); push @$rs_list, $rs; if (my $rows = $rs->{rowset}) { $row_count += @$rows; } last if $self->{forced_single_resultset}; last if !($sth->more_results || $sth->{syb_more_results}); } my $stats = $self->{stats}; $stats->{rows_returned_total} += $row_count; $stats->{rows_returned_max} = $row_count if $row_count > ($stats->{rows_returned_max}||0); $rs_list; }; $response->add_err(1, $@) if $@; return $resultsets; } sub fetch_result_set { my ($self, $sth, $sth_attr) = @_; my %meta; eval { @meta{ @$sth_attr } = $sth->FETCH_many(@$sth_attr); # we assume @$sth_attr contains NUM_OF_FIELDS $meta{rowset} = $sth->fetchall_arrayref() if (($meta{NUM_OF_FIELDS}||0) > 0); # is SELECT # the fetchall_arrayref may fail with a 'not executed' kind of error # because gather_sth_resultsets/fetch_result_set are called even if # execute() failed, or even if there was no execute() call at all. # The corresponding error goes into the resultset err, not the top-level # response err, so in most cases this resultset err is never noticed. }; if ($@) { chomp $@; $meta{err} = $DBI::err || 1; $meta{errstr} = $DBI::errstr || $@; $meta{state} = $DBI::state; } return \%meta; } sub _get_default_methods { my ($dbh) = @_; # returns a ref to a hash of dbh method names for methods which the driver # hasn't overridden i.e., quote(). These don't need to be forwarded via gofer. my $ImplementorClass = $dbh->{ImplementorClass} or die; my %default_methods; for my $method (@all_dbh_methods) { my $dbi_sub = $all_dbh_methods{$method} || 42; my $imp_sub = $ImplementorClass->can($method) || 42; next if $imp_sub != $dbi_sub; #warn("default $method\n"); $default_methods{$method} = 1; } return \%default_methods; } # XXX would be nice to make this a generic DBI module sub _install_rand_callbacks { my ($self, $dbh, $dbi_gofer_random) = @_; my $callbacks = $dbh->{Callbacks} || {}; my $prev = $dbh->{private_gofer_rand_fail_callbacks} || {}; # return if we've already setup this handle with callbacks for these specs return if (($callbacks->{_dbi_gofer_random_spec}||'') eq $dbi_gofer_random); #warn "$dbh # $callbacks->{_dbi_gofer_random_spec}"; $callbacks->{_dbi_gofer_random_spec} = $dbi_gofer_random; my ($fail_percent, $fail_err, $delay_percent, $delay_duration, %spec_part, @spec_note); my @specs = split /,/, $dbi_gofer_random; for my $spec (@specs) { if ($spec =~ m/^fail=(-?[.\d]+)%?$/) { $fail_percent = $1; $spec_part{fail} = $spec; next; } if ($spec =~ m/^err=(-?\d+)$/) { $fail_err = $1; $spec_part{err} = $spec; next; } if ($spec =~ m/^delay([.\d]+)=(-?[.\d]+)%?$/) { $delay_duration = $1; $delay_percent = $2; $spec_part{delay} = $spec; next; } elsif ($spec !~ m/^(\w+|\*)$/) { warn "Ignored DBI_GOFER_RANDOM item '$spec' which isn't a config or a dbh method name"; next; } my $method = $spec; if ($callbacks->{$method} && $prev->{$method} && $callbacks->{$method} != $prev->{$method}) { warn "Callback for $method method already installed so DBI_GOFER_RANDOM callback not installed\n"; next; } unless (defined $fail_percent or defined $delay_percent) { warn "Ignored DBI_GOFER_RANDOM item '$spec' because not preceded by 'fail=N' and/or 'delayN=N'"; next; } push @spec_note, join(",", values(%spec_part), $method); $callbacks->{$method} = $self->_mk_rand_callback($method, $fail_percent, $delay_percent, $delay_duration, $fail_err); } warn "DBI_GOFER_RANDOM failures/delays enabled: @spec_note\n" if @spec_note; $dbh->{Callbacks} = $callbacks; $dbh->{private_gofer_rand_fail_callbacks} = $callbacks; } my %_mk_rand_callback_seqn; sub _mk_rand_callback { my ($self, $method, $fail_percent, $delay_percent, $delay_duration, $fail_err) = @_; my ($fail_modrate, $delay_modrate); $fail_percent ||= 0; $fail_modrate = int(1/(-$fail_percent )*100) if $fail_percent; $delay_percent ||= 0; $delay_modrate = int(1/(-$delay_percent)*100) if $delay_percent; # note that $method may be "*" but that's not recommended or documented or wise return sub { my ($h) = @_; my $seqn = ++$_mk_rand_callback_seqn{$method}; my $delay = ($delay_percent > 0) ? rand(100) < $delay_percent : ($delay_percent < 0) ? !($seqn % $delay_modrate): 0; my $fail = ($fail_percent > 0) ? rand(100) < $fail_percent : ($fail_percent < 0) ? !($seqn % $fail_modrate) : 0; #no warnings 'uninitialized'; #warn "_mk_rand_callback($fail_percent:$fail_modrate, $delay_percent:$delay_modrate): seqn=$seqn fail=$fail delay=$delay"; if ($delay) { my $msg = "DBI_GOFER_RANDOM delaying execution of $method() by $delay_duration seconds\n"; # Note what's happening in a trace message. If the delay percent is an even # number then use warn() instead so it's sent back to the client. ($delay_percent % 2 == 1) ? warn($msg) : $h->trace_msg($msg); select undef, undef, undef, $delay_duration; # allows floating point value } if ($fail) { undef $_; # tell DBI to not call the method # the "induced by DBI_GOFER_RANDOM" is special and must be included in errstr # as it's checked for in a few places, such as the gofer retry logic return $h->set_err($fail_err || $DBI::stderr, "fake error from $method method induced by DBI_GOFER_RANDOM env var ($fail_percent%)"); } return; } } sub update_stats { my ($self, $request, $response, $frozen_request, $frozen_response, $time_received, $store_meta, $other_meta, ) = @_; # should always have a response object here carp("No response object provided") unless $request; my $stats = $self->{stats}; $stats->{frozen_request_max_bytes} = length($frozen_request) if $frozen_request && length($frozen_request) > ($stats->{frozen_request_max_bytes}||0); $stats->{frozen_response_max_bytes} = length($frozen_response) if $frozen_response && length($frozen_response) > ($stats->{frozen_response_max_bytes}||0); my $recent; if (my $track_recent = $self->{track_recent}) { $recent = { request => $frozen_request, response => $frozen_response, time_received => $time_received, duration => dbi_time()-$time_received, # for any other info ($store_meta) ? (meta => $store_meta) : (), }; $recent->{request_object} = $request if !$frozen_request && $request; $recent->{response_object} = $response if !$frozen_response; my @queues = ($stats->{recent_requests} ||= []); push @queues, ($stats->{recent_errors} ||= []) if !$response or $response->err; for my $queue (@queues) { push @$queue, $recent; shift @$queue if @$queue > $track_recent; } } return $recent; } 1; __END__ =head1 NAME DBI::Gofer::Execute - Executes Gofer requests and returns Gofer responses =head1 SYNOPSIS $executor = DBI::Gofer::Execute->new( { ...config... }); $response = $executor->execute_request( $request ); =head1 DESCRIPTION Accepts a DBI::Gofer::Request object, executes the requested DBI method calls, and returns a DBI::Gofer::Response object. Any error, including any internal 'fatal' errors are caught and converted into a DBI::Gofer::Response object. This module is usually invoked by a 'server-side' Gofer transport module. They usually have names in the "C<DBI::Gofer::Transport::*>" namespace. Examples include: L<DBI::Gofer::Transport::stream> and L<DBI::Gofer::Transport::mod_perl>. =head1 CONFIGURATION =head2 check_request_sub If defined, it must be a reference to a subroutine that will 'check' the request. It is passed the request object and the executor as its only arguments. The subroutine can either return the original request object or die with a suitable error message (which will be turned into a Gofer response). It can also construct and return a new request that should be executed instead of the original request. =head2 check_response_sub If defined, it must be a reference to a subroutine that will 'check' the response. It is passed the response object, the executor, and the request object. The sub may alter the response object and return undef, or return a new response object. This mechanism can be used to, for example, terminate the service if specific database errors are seen. =head2 forced_connect_dsn If set, this DSN is always used instead of the one in the request. =head2 default_connect_dsn If set, this DSN is used if C<forced_connect_dsn> is not set and the request does not contain a DSN itself. =head2 forced_connect_attributes A reference to a hash of connect() attributes. Individual attributes in C<forced_connect_attributes> will take precedence over corresponding attributes in the request. =head2 default_connect_attributes A reference to a hash of connect() attributes. Individual attributes in the request take precedence over corresponding attributes in C<default_connect_attributes>. =head2 max_cached_dbh_per_drh If set, the loaded drivers will be checked to ensure they don't have more than this number of cached connections. There is no default value. This limit is not enforced for every request. =head2 max_cached_sth_per_dbh If set, all the cached statement handles will be cleared once the number of cached statement handles rises above this limit. The default is 1000. =head2 forced_single_resultset If true, then only the first result set will be fetched and returned in the response. =head2 forced_response_attributes A reference to a data structure that can specify extra attributes to be returned in responses. forced_response_attributes => { DriverName => { dbh => [ qw(dbh_attrib_name) ], sth => [ qw(sth_attrib_name) ], }, }, This can be useful in cases where the driver has not implemented the private_attribute_info() method and DBI::Gofer::Execute's own fallback list of private attributes doesn't include the driver or attributes you need. =head2 track_recent If set, specifies the number of recent requests and responses that should be kept by the update_stats() method for diagnostics. See L<DBI::Gofer::Transport::mod_perl>. Note that this setting can significantly increase memory use. Use with caution. =head2 forced_gofer_random Enable forced random failures and/or delays for testing. See L</DBI_GOFER_RANDOM> below. =head1 DRIVER-SPECIFIC ISSUES Gofer needs to know about any driver-private attributes that should have their values sent back to the client. If the driver doesn't support private_attribute_info() method, and very few do, then the module fallsback to using some hard-coded details, if available, for the driver being used. Currently hard-coded details are available for the mysql, Pg, Sybase, and SQLite drivers. =head1 TESTING DBD::Gofer, DBD::Execute and related packages are well tested by executing the DBI test suite with DBI_AUTOPROXY configured to route all DBI calls via DBD::Gofer. Because Gofer includes timeout and 'retry on error' mechanisms there is a need for some way to trigger delays and/or errors. This can be done via the C<forced_gofer_random> configuration item, or else the DBI_GOFER_RANDOM environment variable. =head2 DBI_GOFER_RANDOM The value of the C<forced_gofer_random> configuration item (or else the DBI_GOFER_RANDOM environment variable) is treated as a series of tokens separated by commas. The tokens can be one of three types: =over 4 =item fail=R% Set the current failure rate to R where R is a percentage. The value R can be floating point, e.g., C<fail=0.05%>. Negative values for R have special meaning, see below. =item err=N Sets the current failure err value to N (instead of the DBI's default 'standard err value' of 2000000000). This is useful when you want to simulate a specific error. =item delayN=R% Set the current random delay rate to R where R is a percentage, and set the current delay duration to N seconds. The values of R and N can be floating point, e.g., C<delay0.5=0.2%>. Negative values for R have special meaning, see below. If R is an odd number (R % 2 == 1) then a message is logged via warn() which will be returned to, and echoed at, the client. =item methodname Applies the current fail, err, and delay values to the named method. If neither a fail nor delay have been set yet then a warning is generated. =back For example: $executor = DBI::Gofer::Execute->new( { forced_gofer_random => "fail=0.01%,do,delay60=1%,execute", }); will cause the do() method to fail for 0.01% of calls, and the execute() method to fail 0.01% of calls and be delayed by 60 seconds on 1% of calls. If the percentage value (C<R>) is negative then instead of the failures being triggered randomly (via the rand() function) they are triggered via a sequence number. In other words "C<fail=-20%>" will mean every fifth call will fail. Each method has a distinct sequence number. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBI/Gofer/Response.pm 0000644 00000014123 15037233316 0010344 0 ustar 00 package DBI::Gofer::Response; # $Id: Response.pm 11565 2008-07-22 20:17:33Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use Carp; use DBI qw(neat neat_list); use base qw(DBI::Util::_accessor Exporter); our $VERSION = "0.011566"; use constant GOf_RESPONSE_EXECUTED => 0x0001; our @EXPORT = qw(GOf_RESPONSE_EXECUTED); __PACKAGE__->mk_accessors(qw( version rv err errstr state flags last_insert_id dbh_attributes sth_resultsets warnings )); __PACKAGE__->mk_accessors_using(make_accessor_autoviv_hashref => qw( meta )); sub new { my ($self, $args) = @_; $args->{version} ||= $VERSION; chomp $args->{errstr} if $args->{errstr}; return $self->SUPER::new($args); } sub err_errstr_state { my $self = shift; return @{$self}{qw(err errstr state)}; } sub executed_flag_set { my $flags = shift->flags or return 0; return $flags & GOf_RESPONSE_EXECUTED; } sub add_err { my ($self, $err, $errstr, $state, $trace) = @_; # acts like the DBI's set_err method. # this code copied from DBI::PurePerl's set_err method. chomp $errstr if $errstr; $state ||= ''; carp ref($self)."->add_err($err, $errstr, $state)" if $trace and defined($err) || $errstr; my ($r_err, $r_errstr, $r_state) = ($self->{err}, $self->{errstr}, $self->{state}); if ($r_errstr) { $r_errstr .= sprintf " [err was %s now %s]", $r_err, $err if $r_err && $err && $r_err ne $err; $r_errstr .= sprintf " [state was %s now %s]", $r_state, $state if $r_state and $r_state ne "S1000" && $state && $r_state ne $state; $r_errstr .= "\n$errstr" if $r_errstr ne $errstr; } else { $r_errstr = $errstr; } # assign if higher priority: err > "0" > "" > undef my $err_changed; if ($err # new error: so assign or !defined $r_err # no existing warn/info: so assign # new warn ("0" len 1) > info ("" len 0): so assign or defined $err && length($err) > length($r_err) ) { $r_err = $err; ++$err_changed; } $r_state = ($state eq "00000") ? "" : $state if $state && $err_changed; ($self->{err}, $self->{errstr}, $self->{state}) = ($r_err, $r_errstr, $r_state); return undef; } sub summary_as_text { my $self = shift; my ($context) = @_; my ($rv, $err, $errstr, $state) = ($self->{rv}, $self->{err}, $self->{errstr}, $self->{state}); my @s = sprintf("\trv=%s", (ref $rv) ? "[".neat_list($rv)."]" : neat($rv)); $s[-1] .= sprintf(", err=%s, errstr=%s", $err, neat($errstr)) if defined $err; $s[-1] .= sprintf(", flags=0x%x", $self->{flags}) if defined $self->{flags}; push @s, "last_insert_id=%s", $self->last_insert_id if defined $self->last_insert_id; if (my $dbh_attr = $self->dbh_attributes) { my @keys = sort keys %$dbh_attr; push @s, sprintf "dbh= { %s }", join(", ", map { "$_=>".neat($dbh_attr->{$_},100) } @keys) if @keys; } for my $rs (@{$self->sth_resultsets || []}) { my ($rowset, $err, $errstr, $state) = @{$rs}{qw(rowset err errstr state)}; my $summary = "rowset: "; my $NUM_OF_FIELDS = $rs->{NUM_OF_FIELDS} || 0; my $rows = $rowset ? @$rowset : 0; if ($rowset || $NUM_OF_FIELDS > 0) { $summary .= sprintf "%d rows, %d columns", $rows, $NUM_OF_FIELDS; } $summary .= sprintf ", err=%s, errstr=%s", $err, neat($errstr) if defined $err; if ($rows) { my $NAME = $rs->{NAME}; # generate my @colinfo = map { "$NAME->[$_]=".neat($rowset->[0][$_], 30) } 0..@{$NAME}-1; $summary .= sprintf " [%s]", join ", ", @colinfo; $summary .= ",..." if $rows > 1; # we can be a little more helpful for Sybase/MSSQL user $summary .= " syb_result_type=$rs->{syb_result_type}" if $rs->{syb_result_type} and $rs->{syb_result_type} != 4040; } push @s, $summary; } for my $w (@{$self->warnings || []}) { chomp $w; push @s, "warning: $w"; } if ($context && %$context) { my @keys = sort keys %$context; push @s, join(", ", map { "$_=>".$context->{$_} } @keys); } return join("\n\t", @s). "\n"; } sub outline_as_text { # one-line version of summary_as_text my $self = shift; my ($context) = @_; my ($rv, $err, $errstr, $state) = ($self->{rv}, $self->{err}, $self->{errstr}, $self->{state}); my $s = sprintf("rv=%s", (ref $rv) ? "[".neat_list($rv)."]" : neat($rv)); $s .= sprintf(", err=%s %s", $err, neat($errstr)) if defined $err; $s .= sprintf(", flags=0x%x", $self->{flags}) if $self->{flags}; if (my $sth_resultsets = $self->sth_resultsets) { $s .= sprintf(", %d resultsets ", scalar @$sth_resultsets); my @rs; for my $rs (@{$self->sth_resultsets || []}) { my $summary = ""; my ($rowset, $err, $errstr) = @{$rs}{qw(rowset err errstr)}; my $NUM_OF_FIELDS = $rs->{NUM_OF_FIELDS} || 0; my $rows = $rowset ? @$rowset : 0; if ($rowset || $NUM_OF_FIELDS > 0) { $summary .= sprintf "%dr x %dc", $rows, $NUM_OF_FIELDS; } $summary .= sprintf "%serr %s %s", ($summary?", ":""), $err, neat($errstr) if defined $err; push @rs, $summary; } $s .= join "; ", map { "[$_]" } @rs; } return $s; } 1; =head1 NAME DBI::Gofer::Response - Encapsulate a response from DBI::Gofer::Execute to DBD::Gofer =head1 DESCRIPTION This is an internal class. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBI/Gofer/Transport/Base.pm 0000644 00000011664 15037233316 0011423 0 ustar 00 package DBI::Gofer::Transport::Base; # $Id: Base.pm 12536 2009-02-24 22:37:09Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use DBI; use base qw(DBI::Util::_accessor); use DBI::Gofer::Serializer::Storable; use DBI::Gofer::Serializer::DataDumper; our $VERSION = "0.012537"; __PACKAGE__->mk_accessors(qw( trace keep_meta_frozen serializer_obj )); # see also $ENV{DBI_GOFER_TRACE} in DBI::Gofer::Execute sub _init_trace { (split(/=/,$ENV{DBI_GOFER_TRACE}||0))[0] } sub new { my ($class, $args) = @_; $args->{trace} ||= $class->_init_trace; $args->{serializer_obj} ||= DBI::Gofer::Serializer::Storable->new(); my $self = bless {}, $class; $self->$_( $args->{$_} ) for keys %$args; $self->trace_msg("$class->new({ @{[ %$args ]} })\n") if $self->trace; return $self; } my $packet_header_text = "GoFER1:"; my $packet_header_regex = qr/^GoFER(\d+):/; sub _freeze_data { my ($self, $data, $serializer, $skip_trace) = @_; my $frozen = eval { $self->_dump("freezing $self->{trace} ".ref($data), $data) if !$skip_trace and $self->trace; local $data->{meta}; # don't include meta in serialization $serializer ||= $self->{serializer_obj}; my ($data, $deserializer_class) = $serializer->serialize($data); $packet_header_text . $data; }; if ($@) { chomp $@; die "Error freezing ".ref($data)." object: $@"; } # stash the frozen data into the data structure itself # to make life easy for the client caching code in DBD::Gofer::Transport::Base $data->{meta}{frozen} = $frozen if $self->keep_meta_frozen; return $frozen; } # public aliases used by subclasses *freeze_request = \&_freeze_data; *freeze_response = \&_freeze_data; sub _thaw_data { my ($self, $frozen_data, $serializer, $skip_trace) = @_; my $data; eval { # check for and extract our gofer header and the info it contains (my $frozen = $frozen_data) =~ s/$packet_header_regex//o or die "does not have gofer header\n"; my ($t_version) = $1; $serializer ||= $self->{serializer_obj}; $data = $serializer->deserialize($frozen); die ref($serializer)."->deserialize didn't return a reference" unless ref $data; $data->{_transport}{version} = $t_version; $data->{meta}{frozen} = $frozen_data if $self->keep_meta_frozen; }; if ($@) { chomp(my $err = $@); # remove extra noise from Storable $err =~ s{ at \S+?/Storable.pm \(autosplit into \S+?/Storable/thaw.al\) line \d+(, \S+ line \d+)?}{}; my $msg = sprintf "Error thawing: %s (data=%s)", $err, DBI::neat($frozen_data,50); Carp::cluck("$msg, pid $$ stack trace follows:"); # XXX if $self->trace; die $msg; } $self->_dump("thawing $self->{trace} ".ref($data), $data) if !$skip_trace and $self->trace; return $data; } # public aliases used by subclasses *thaw_request = \&_thaw_data; *thaw_response = \&_thaw_data; # this should probably live in the request and response classes # and the tace level passed in sub _dump { my ($self, $label, $data) = @_; # don't dump the binary local $data->{meta}{frozen} if $data->{meta} && $data->{meta}{frozen}; my $trace_level = $self->trace; my $summary; if ($trace_level >= 4) { require Data::Dumper; local $Data::Dumper::Indent = 1; local $Data::Dumper::Terse = 1; local $Data::Dumper::Useqq = 0; local $Data::Dumper::Sortkeys = 1; local $Data::Dumper::Quotekeys = 0; local $Data::Dumper::Deparse = 0; local $Data::Dumper::Purity = 0; $summary = Data::Dumper::Dumper($data); } elsif ($trace_level >= 2) { $summary = eval { $data->summary_as_text } || $@ || "no summary available\n"; } else { $summary = eval { $data->outline_as_text."\n" } || $@ || "no summary available\n"; } $self->trace_msg("$label: $summary"); } sub trace_msg { my ($self, $msg, $min_level) = @_; $min_level = 1 unless defined $min_level; # transport trace level can override DBI's trace level $min_level = 0 if $self->trace >= $min_level; return DBI->trace_msg("gofer ".$msg, $min_level); } 1; =head1 NAME DBI::Gofer::Transport::Base - Base class for Gofer transports =head1 DESCRIPTION This is the base class for server-side Gofer transports. It's also the base class for the client-side base class L<DBD::Gofer::Transport::Base>. This is an internal class. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBI/Gofer/Transport/pipeone.pm 0000644 00000002536 15037233316 0012206 0 ustar 00 package DBI::Gofer::Transport::pipeone; # $Id: pipeone.pm 12536 2009-02-24 22:37:09Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use DBI::Gofer::Execute; use base qw(DBI::Gofer::Transport::Base Exporter); our $VERSION = "0.012537"; our @EXPORT = qw(run_one_stdio); my $executor = DBI::Gofer::Execute->new(); sub run_one_stdio { binmode STDIN; binmode STDOUT; my $transport = DBI::Gofer::Transport::pipeone->new(); my $frozen_request = do { local $/; <STDIN> }; my $response = $executor->execute_request( $transport->thaw_request($frozen_request) ); my $frozen_response = $transport->freeze_response($response); print $frozen_response; # no point calling $executor->update_stats(...) for pipeONE } 1; __END__ =head1 NAME DBI::Gofer::Transport::pipeone - DBD::Gofer server-side transport for pipeone =head1 SYNOPSIS See L<DBD::Gofer::Transport::pipeone>. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBI/Gofer/Transport/stream.pm 0000644 00000003756 15037233316 0012047 0 ustar 00 package DBI::Gofer::Transport::stream; # $Id: stream.pm 12536 2009-02-24 22:37:09Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use DBI qw(dbi_time); use DBI::Gofer::Execute; use base qw(DBI::Gofer::Transport::pipeone Exporter); our $VERSION = "0.012537"; our @EXPORT = qw(run_stdio_hex); my $executor = DBI::Gofer::Execute->new(); sub run_stdio_hex { my $transport = DBI::Gofer::Transport::stream->new(); local $| = 1; DBI->trace_msg("$0 started (pid $$)\n"); local $\; # OUTPUT_RECORD_SEPARATOR local $/ = "\012"; # INPUT_RECORD_SEPARATOR while ( defined( my $encoded_request = <STDIN> ) ) { my $time_received = dbi_time(); $encoded_request =~ s/\015?\012$//; my $frozen_request = pack "H*", $encoded_request; my $request = $transport->thaw_request( $frozen_request ); my $response = $executor->execute_request( $request ); my $frozen_response = $transport->freeze_response($response); my $encoded_response = unpack "H*", $frozen_response; print $encoded_response, "\015\012"; # autoflushed due to $|=1 # there's no way to access the stats currently # so this just serves as a basic test and illustration of update_stats() $executor->update_stats($request, $response, $frozen_request, $frozen_response, $time_received, 1); } DBI->trace_msg("$0 ending (pid $$)\n"); } 1; __END__ =head1 NAME DBI::Gofer::Transport::stream - DBD::Gofer server-side transport for stream =head1 SYNOPSIS See L<DBD::Gofer::Transport::stream>. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBI/SQL/Nano.pm 0000644 00000073012 15037233316 0007040 0 ustar 00 ####################################################################### # # DBI::SQL::Nano - a very tiny SQL engine # # Copyright (c) 2010 by Jens Rehsack < rehsack AT cpan.org > # Copyright (c) 2004 by Jeff Zucker < jzucker AT cpan.org > # # All rights reserved. # # You may freely distribute and/or modify this module under the terms # of either the GNU General Public License (GPL) or the Artistic License, # as specified in the Perl README file. # # See the pod at the bottom of this file for help information # ####################################################################### ####################### package DBI::SQL::Nano; ####################### use strict; use warnings; use vars qw( $VERSION $versions ); use Carp qw(croak); require DBI; # for looks_like_number() BEGIN { $VERSION = "1.015544"; $versions->{nano_version} = $VERSION; if ( $ENV{DBI_SQL_NANO} || !eval { require SQL::Statement; $SQL::Statement::VERSION ge '1.400' } ) { @DBI::SQL::Nano::Statement::ISA = qw(DBI::SQL::Nano::Statement_); @DBI::SQL::Nano::Table::ISA = qw(DBI::SQL::Nano::Table_); } else { @DBI::SQL::Nano::Statement::ISA = qw( SQL::Statement ); @DBI::SQL::Nano::Table::ISA = qw( SQL::Eval::Table); $versions->{statement_version} = $SQL::Statement::VERSION; } } ################################### package DBI::SQL::Nano::Statement_; ################################### use Carp qw(croak); use Errno; if ( eval { require Clone; } ) { Clone->import("clone"); } else { require Storable; # in CORE since 5.7.3 *clone = \&Storable::dclone; } sub new { my ( $class, $sql ) = @_; my $self = {}; bless $self, $class; return $self->prepare($sql); } ##################################################################### # PREPARE ##################################################################### sub prepare { my ( $self, $sql ) = @_; $sql =~ s/\s+$//; $sql =~ s/\s*;$//; for ($sql) { /^\s*CREATE\s+TABLE\s+(.*?)\s*\((.+)\)\s*$/is && do { $self->{command} = 'CREATE'; $self->{table_name} = $1; defined $2 and $2 ne "" and $self->{column_names} = parse_coldef_list($2); $self->{column_names} or croak "Can't find columns"; }; /^\s*DROP\s+TABLE\s+(IF\s+EXISTS\s+)?(.*?)\s*$/is && do { $self->{command} = 'DROP'; $self->{table_name} = $2; defined $1 and $1 ne "" and $self->{ignore_missing_table} = 1; }; /^\s*SELECT\s+(.*?)\s+FROM\s+(\S+)((.*))?/is && do { $self->{command} = 'SELECT'; defined $1 and $1 ne "" and $self->{column_names} = parse_comma_list($1); $self->{column_names} or croak "Can't find columns"; $self->{table_name} = $2; if ( my $clauses = $4 ) { if ( $clauses =~ /^(.*)\s+ORDER\s+BY\s+(.*)$/is ) { $clauses = $1; $self->{order_clause} = $self->parse_order_clause($2); } $self->{where_clause} = $self->parse_where_clause($clauses) if ($clauses); } }; /^\s*INSERT\s+(?:INTO\s+)?(\S+)\s*(\((.*?)\))?\s*VALUES\s*\((.+)\)/is && do { $self->{command} = 'INSERT'; $self->{table_name} = $1; defined $2 and $2 ne "" and $self->{column_names} = parse_comma_list($2); defined $4 and $4 ne "" and $self->{values} = $self->parse_values_list($4); $self->{values} or croak "Can't parse values"; }; /^\s*DELETE\s+FROM\s+(\S+)((.*))?/is && do { $self->{command} = 'DELETE'; $self->{table_name} = $1; defined $3 and $3 ne "" and $self->{where_clause} = $self->parse_where_clause($3); }; /^\s*UPDATE\s+(\S+)\s+SET\s+(.+)(\s+WHERE\s+.+)/is && do { $self->{command} = 'UPDATE'; $self->{table_name} = $1; defined $2 and $2 ne "" and $self->parse_set_clause($2); defined $3 and $3 ne "" and $self->{where_clause} = $self->parse_where_clause($3); }; } croak "Couldn't parse" unless ( $self->{command} and $self->{table_name} ); return $self; } sub parse_order_clause { my ( $self, $str ) = @_; my @clause = split /\s+/, $str; return { $clause[0] => 'ASC' } if ( @clause == 1 ); croak "Bad ORDER BY clause '$str'" if ( @clause > 2 ); $clause[1] ||= ''; return { $clause[0] => uc $clause[1] } if $clause[1] =~ /^ASC$/i or $clause[1] =~ /^DESC$/i; croak "Bad ORDER BY clause '$clause[1]'"; } sub parse_coldef_list { # check column definitions my @col_defs; for ( split ',', shift ) { my $col = clean_parse_str($_); if ( $col =~ /^(\S+?)\s+.+/ ) { # doesn't check what it is $col = $1; # just checks if it exists } else { croak "No column definition for '$_'"; } push @col_defs, $col; } return \@col_defs; } sub parse_comma_list { [ map { clean_parse_str($_) } split( ',', shift ) ]; } sub clean_parse_str { local $_ = shift; s/\(//; s/\)//; s/^\s+//; s/\s+$//; $_; } sub parse_values_list { my ( $self, $str ) = @_; [ map { $self->parse_value( clean_parse_str($_) ) } split( ',', $str ) ]; } sub parse_set_clause { my $self = shift; my @cols = split /,/, shift; my $set_clause; for my $col (@cols) { my ( $col_name, $value ) = $col =~ /^\s*(.+?)\s*=\s*(.+?)\s*$/s; push @{ $self->{column_names} }, $col_name; push @{ $self->{values} }, $self->parse_value($value); } croak "Can't parse set clause" unless ( $self->{column_names} and $self->{values} ); } sub parse_value { my ( $self, $str ) = @_; return unless ( defined $str ); $str =~ s/\s+$//; $str =~ s/^\s+//; if ( $str =~ /^\?$/ ) { push @{ $self->{params} }, '?'; return { value => '?', type => 'placeholder' }; } return { value => undef, type => 'NULL' } if ( $str =~ /^NULL$/i ); return { value => $1, type => 'string' } if ( $str =~ /^'(.+)'$/s ); return { value => $str, type => 'number' } if ( DBI::looks_like_number($str) ); return { value => $str, type => 'column' }; } sub parse_where_clause { my ( $self, $str ) = @_; $str =~ s/\s+$//; if ( $str =~ /^\s*WHERE\s+(.*)/i ) { $str = $1; } else { croak "Couldn't find WHERE clause in '$str'"; } my ($neg) = $str =~ s/^\s*(NOT)\s+//is; my $opexp = '=|<>|<=|>=|<|>|LIKE|CLIKE|IS'; my ( $val1, $op, $val2 ) = $str =~ /^(.+?)\s*($opexp)\s*(.+)\s*$/iso; croak "Couldn't parse WHERE expression '$str'" unless ( defined $val1 and defined $op and defined $val2 ); return { arg1 => $self->parse_value($val1), arg2 => $self->parse_value($val2), op => $op, neg => $neg, }; } ##################################################################### # EXECUTE ##################################################################### sub execute { my ( $self, $data, $params ) = @_; my $num_placeholders = $self->params; my $num_params = scalar @$params || 0; croak "Number of params '$num_params' does not match number of placeholders '$num_placeholders'" unless ( $num_placeholders == $num_params ); if ( scalar @$params ) { for my $i ( 0 .. $#{ $self->{values} } ) { if ( $self->{values}->[$i]->{type} eq 'placeholder' ) { $self->{values}->[$i]->{value} = shift @$params; } } if ( $self->{where_clause} ) { if ( $self->{where_clause}->{arg1}->{type} eq 'placeholder' ) { $self->{where_clause}->{arg1}->{value} = shift @$params; } if ( $self->{where_clause}->{arg2}->{type} eq 'placeholder' ) { $self->{where_clause}->{arg2}->{value} = shift @$params; } } } my $command = $self->{command}; ( $self->{'NUM_OF_ROWS'}, $self->{'NUM_OF_FIELDS'}, $self->{'data'}, ) = $self->$command( $data, $params ); $self->{NAME} ||= $self->{column_names}; return $self->{'NUM_OF_ROWS'} || '0E0'; } my $enoentstr = "Cannot open .*\(" . Errno::ENOENT . "\)"; my $enoentrx = qr/$enoentstr/; sub DROP ($$$) { my ( $self, $data, $params ) = @_; my $table; my @err; eval { local $SIG{__WARN__} = sub { push @err, @_ }; ($table) = $self->open_tables( $data, 0, 1 ); }; if ( $self->{ignore_missing_table} and ( $@ or @err ) and grep { $_ =~ $enoentrx } ( @err, $@ ) ) { $@ = ''; return ( -1, 0 ); } croak( $@ || $err[0] ) if ( $@ || @err ); return ( -1, 0 ) unless $table; $table->drop($data); ( -1, 0 ); } sub CREATE ($$$) { my ( $self, $data, $params ) = @_; my $table = $self->open_tables( $data, 1, 1 ); $table->push_names( $data, $self->{column_names} ); ( 0, 0 ); } sub INSERT ($$$) { my ( $self, $data, $params ) = @_; my $table = $self->open_tables( $data, 0, 1 ); $self->verify_columns($table); my $all_columns = $table->{col_names}; $table->seek( $data, 0, 2 ) unless ( $table->can('insert_one_row') ); my ($array) = []; my ( $val, $col, $i ); $self->{column_names} = $table->col_names() unless ( $self->{column_names} ); my $cNum = scalar( @{ $self->{column_names} } ) if ( $self->{column_names} ); my $param_num = 0; $cNum or croak "Bad col names in INSERT"; my $maxCol = $#$all_columns; for ( $i = 0; $i < $cNum; $i++ ) { $col = $self->{column_names}->[$i]; $array->[ $self->column_nums( $table, $col ) ] = $self->row_values($i); } # Extend row to put values in ALL fields $#$array < $maxCol and $array->[$maxCol] = undef; $table->can('insert_new_row') ? $table->insert_new_row( $data, $array ) : $table->push_row( $data, $array ); return ( 1, 0 ); } sub DELETE ($$$) { my ( $self, $data, $params ) = @_; my $table = $self->open_tables( $data, 0, 1 ); $self->verify_columns($table); my ($affected) = 0; my ( @rows, $array ); my $can_dor = $table->can('delete_one_row'); while ( $array = $table->fetch_row($data) ) { if ( $self->eval_where( $table, $array ) ) { ++$affected; if ( $self->{fetched_from_key} ) { $array = $self->{fetched_value}; $table->delete_one_row( $data, $array ); return ( $affected, 0 ); } push( @rows, $array ) if ($can_dor); } else { push( @rows, $array ) unless ($can_dor); } } if ($can_dor) { foreach $array (@rows) { $table->delete_one_row( $data, $array ); } } else { $table->seek( $data, 0, 0 ); foreach $array (@rows) { $table->push_row( $data, $array ); } $table->truncate($data); } return ( $affected, 0 ); } sub _anycmp($$;$) { my ( $a, $b, $case_fold ) = @_; if ( !defined($a) || !defined($b) ) { return defined($a) - defined($b); } elsif ( DBI::looks_like_number($a) && DBI::looks_like_number($b) ) { return $a <=> $b; } else { return $case_fold ? lc($a) cmp lc($b) || $a cmp $b : $a cmp $b; } } sub SELECT ($$$) { my ( $self, $data, $params ) = @_; my $table = $self->open_tables( $data, 0, 0 ); $self->verify_columns($table); my $tname = $self->{table_name}; my ($affected) = 0; my ( @rows, %cols, $array, $val, $col, $i ); while ( $array = $table->fetch_row($data) ) { if ( $self->eval_where( $table, $array ) ) { $array = $self->{fetched_value} if ( $self->{fetched_from_key} ); unless ( keys %cols ) { my $col_nums = $self->column_nums($table); %cols = reverse %{$col_nums}; } my $rowhash; for ( sort keys %cols ) { $rowhash->{ $cols{$_} } = $array->[$_]; } my @newarray; for ( $i = 0; $i < @{ $self->{column_names} }; $i++ ) { $col = $self->{column_names}->[$i]; push @newarray, $rowhash->{$col}; } push( @rows, \@newarray ); return ( scalar(@rows), scalar @{ $self->{column_names} }, \@rows ) if ( $self->{fetched_from_key} ); } } if ( $self->{order_clause} ) { my ( $sort_col, $desc ) = each %{ $self->{order_clause} }; my @sortCols = ( $self->column_nums( $table, $sort_col, 1 ) ); $sortCols[1] = uc $desc eq 'DESC' ? 1 : 0; @rows = sort { my ( $result, $colNum, $desc ); my $i = 0; do { $colNum = $sortCols[ $i++ ]; $desc = $sortCols[ $i++ ]; $result = _anycmp( $a->[$colNum], $b->[$colNum] ); $result = -$result if ($desc); } while ( !$result && $i < @sortCols ); $result; } @rows; } ( scalar(@rows), scalar @{ $self->{column_names} }, \@rows ); } sub UPDATE ($$$) { my ( $self, $data, $params ) = @_; my $table = $self->open_tables( $data, 0, 1 ); $self->verify_columns($table); return undef unless $table; my $affected = 0; my $can_usr = $table->can('update_specific_row'); my $can_uor = $table->can('update_one_row'); my $can_rwu = $can_usr || $can_uor; my ( @rows, $array, $f_array, $val, $col, $i ); while ( $array = $table->fetch_row($data) ) { if ( $self->eval_where( $table, $array ) ) { $array = $self->{fetched_value} if ( $self->{fetched_from_key} and $can_rwu ); my $orig_ary = clone($array) if ($can_usr); for ( $i = 0; $i < @{ $self->{column_names} }; $i++ ) { $col = $self->{column_names}->[$i]; $array->[ $self->column_nums( $table, $col ) ] = $self->row_values($i); } $affected++; if ( $self->{fetched_value} ) { if ($can_usr) { $table->update_specific_row( $data, $array, $orig_ary ); } elsif ($can_uor) { $table->update_one_row( $data, $array ); } return ( $affected, 0 ); } push( @rows, $can_usr ? [ $array, $orig_ary ] : $array ); } else { push( @rows, $array ) unless ($can_rwu); } } if ($can_rwu) { foreach my $array (@rows) { if ($can_usr) { $table->update_specific_row( $data, @$array ); } elsif ($can_uor) { $table->update_one_row( $data, $array ); } } } else { $table->seek( $data, 0, 0 ); foreach my $array (@rows) { $table->push_row( $data, $array ); } $table->truncate($data); } return ( $affected, 0 ); } sub verify_columns { my ( $self, $table ) = @_; my @cols = @{ $self->{column_names} }; if ( $self->{where_clause} ) { if ( my $col = $self->{where_clause}->{arg1} ) { push @cols, $col->{value} if $col->{type} eq 'column'; } if ( my $col = $self->{where_clause}->{arg2} ) { push @cols, $col->{value} if $col->{type} eq 'column'; } } for (@cols) { $self->column_nums( $table, $_ ); } } sub column_nums { my ( $self, $table, $stmt_col_name, $find_in_stmt ) = @_; my %dbd_nums = %{ $table->col_nums() }; my @dbd_cols = @{ $table->col_names() }; my %stmt_nums; if ( $stmt_col_name and !$find_in_stmt ) { while ( my ( $k, $v ) = each %dbd_nums ) { return $v if uc $k eq uc $stmt_col_name; } croak "No such column '$stmt_col_name'"; } if ( $stmt_col_name and $find_in_stmt ) { for my $i ( 0 .. @{ $self->{column_names} } ) { return $i if uc $stmt_col_name eq uc $self->{column_names}->[$i]; } croak "No such column '$stmt_col_name'"; } for my $i ( 0 .. $#dbd_cols ) { for my $stmt_col ( @{ $self->{column_names} } ) { $stmt_nums{$stmt_col} = $i if uc $dbd_cols[$i] eq uc $stmt_col; } } return \%stmt_nums; } sub eval_where { my ( $self, $table, $rowary ) = @_; my $where = $self->{"where_clause"} || return 1; my $col_nums = $table->col_nums(); my %cols = reverse %{$col_nums}; my $rowhash; for ( sort keys %cols ) { $rowhash->{ uc $cols{$_} } = $rowary->[$_]; } return $self->process_predicate( $where, $table, $rowhash ); } sub process_predicate { my ( $self, $pred, $table, $rowhash ) = @_; my $val1 = $pred->{arg1}; if ( $val1->{type} eq 'column' ) { $val1 = $rowhash->{ uc $val1->{value} }; } else { $val1 = $val1->{value}; } my $val2 = $pred->{arg2}; if ( $val2->{type} eq 'column' ) { $val2 = $rowhash->{ uc $val2->{value} }; } else { $val2 = $val2->{value}; } my $op = $pred->{op}; my $neg = $pred->{neg}; if ( $op eq '=' and !$neg and $table->can('fetch_one_row') ) { my $key_col = $table->fetch_one_row( 1, 1 ); if ( $pred->{arg1}->{value} =~ /^$key_col$/i ) { $self->{fetched_from_key} = 1; $self->{fetched_value} = $table->fetch_one_row( 0, $pred->{arg2}->{value} ); return 1; } } my $match = $self->is_matched( $val1, $op, $val2 ) || 0; if ($neg) { $match = $match ? 0 : 1; } return $match; } sub is_matched { my ( $self, $val1, $op, $val2 ) = @_; if ( $op eq 'IS' ) { return 1 if ( !defined $val1 or $val1 eq '' ); return 0; } $val1 = '' unless ( defined $val1 ); $val2 = '' unless ( defined $val2 ); if ( $op =~ /LIKE|CLIKE/i ) { $val2 = quotemeta($val2); $val2 =~ s/\\%/.*/g; $val2 =~ s/_/./g; } if ( $op eq 'LIKE' ) { return $val1 =~ /^$val2$/s; } if ( $op eq 'CLIKE' ) { return $val1 =~ /^$val2$/si; } if ( DBI::looks_like_number($val1) && DBI::looks_like_number($val2) ) { if ( $op eq '<' ) { return $val1 < $val2; } if ( $op eq '>' ) { return $val1 > $val2; } if ( $op eq '=' ) { return $val1 == $val2; } if ( $op eq '<>' ) { return $val1 != $val2; } if ( $op eq '<=' ) { return $val1 <= $val2; } if ( $op eq '>=' ) { return $val1 >= $val2; } } else { if ( $op eq '<' ) { return $val1 lt $val2; } if ( $op eq '>' ) { return $val1 gt $val2; } if ( $op eq '=' ) { return $val1 eq $val2; } if ( $op eq '<>' ) { return $val1 ne $val2; } if ( $op eq '<=' ) { return $val1 ge $val2; } if ( $op eq '>=' ) { return $val1 le $val2; } } } sub params { my ( $self, $val_num ) = @_; if ( !$self->{"params"} ) { return 0; } if ( defined $val_num ) { return $self->{"params"}->[$val_num]; } return wantarray ? @{ $self->{"params"} } : scalar @{ $self->{"params"} }; } sub open_tables { my ( $self, $data, $createMode, $lockMode ) = @_; my $table_name = $self->{table_name}; my $table; eval { $table = $self->open_table( $data, $table_name, $createMode, $lockMode ) }; if ($@) { chomp $@; croak $@; } croak "Couldn't open table '$table_name'" unless $table; if ( !$self->{column_names} or $self->{column_names}->[0] eq '*' ) { $self->{column_names} = $table->col_names(); } return $table; } sub row_values { my ( $self, $val_num ) = @_; if ( !$self->{"values"} ) { return 0; } if ( defined $val_num ) { return $self->{"values"}->[$val_num]->{value}; } if (wantarray) { return map { $_->{"value"} } @{ $self->{"values"} }; } else { return scalar @{ $self->{"values"} }; } } sub column_names { my ($self) = @_; my @col_names; if ( $self->{column_names} and $self->{column_names}->[0] ne '*' ) { @col_names = @{ $self->{column_names} }; } return @col_names; } ############################### package DBI::SQL::Nano::Table_; ############################### use Carp qw(croak); sub new ($$) { my ( $proto, $attr ) = @_; my ($self) = {%$attr}; defined( $self->{col_names} ) and "ARRAY" eq ref( $self->{col_names} ) or croak("attribute 'col_names' must be defined as an array"); exists( $self->{col_nums} ) or $self->{col_nums} = _map_colnums( $self->{col_names} ); defined( $self->{col_nums} ) and "HASH" eq ref( $self->{col_nums} ) or croak("attribute 'col_nums' must be defined as a hash"); bless( $self, ( ref($proto) || $proto ) ); return $self; } sub _map_colnums { my $col_names = $_[0]; my %col_nums; for my $i ( 0 .. $#$col_names ) { next unless $col_names->[$i]; $col_nums{ $col_names->[$i] } = $i; } return \%col_nums; } sub row() { return $_[0]->{row}; } sub column($) { return $_[0]->{row}->[ $_[0]->column_num( $_[1] ) ]; } sub column_num($) { $_[0]->{col_nums}->{ $_[1] }; } sub col_nums() { $_[0]->{col_nums} } sub col_names() { $_[0]->{col_names}; } sub drop ($$) { croak "Abstract method " . ref( $_[0] ) . "::drop called" } sub fetch_row ($$$) { croak "Abstract method " . ref( $_[0] ) . "::fetch_row called" } sub push_row ($$$) { croak "Abstract method " . ref( $_[0] ) . "::push_row called" } sub push_names ($$$) { croak "Abstract method " . ref( $_[0] ) . "::push_names called" } sub truncate ($$) { croak "Abstract method " . ref( $_[0] ) . "::truncate called" } sub seek ($$$$) { croak "Abstract method " . ref( $_[0] ) . "::seek called" } 1; __END__ =pod =head1 NAME DBI::SQL::Nano - a very tiny SQL engine =head1 SYNOPSIS BEGIN { $ENV{DBI_SQL_NANO}=1 } # forces use of Nano rather than SQL::Statement use DBI::SQL::Nano; use Data::Dumper; my $stmt = DBI::SQL::Nano::Statement->new( "SELECT bar,baz FROM foo WHERE qux = 1" ) or die "Couldn't parse"; print Dumper $stmt; =head1 DESCRIPTION C<< DBI::SQL::Nano >> is meant as a I<very> minimal SQL engine for use in situations where SQL::Statement is not available. In most situations you are better off installing L<SQL::Statement> although DBI::SQL::Nano may be faster for some B<very> simple tasks. DBI::SQL::Nano, like SQL::Statement is primarily intended to provide a SQL engine for use with some pure perl DBDs including L<DBD::DBM>, L<DBD::CSV>, L<DBD::AnyData>, and L<DBD::Excel>. It is not of much use in and of itself. You can dump out the structure of a parsed SQL statement, but that is about it. =head1 USAGE =head2 Setting the DBI_SQL_NANO flag By default, when a C<< DBD >> uses C<< DBI::SQL::Nano >>, the module will look to see if C<< SQL::Statement >> is installed. If it is, SQL::Statement objects are used. If SQL::Statement is not available, DBI::SQL::Nano objects are used. In some cases, you may wish to use DBI::SQL::Nano objects even if SQL::Statement is available. To force usage of DBI::SQL::Nano objects regardless of the availability of SQL::Statement, set the environment variable DBI_SQL_NANO to 1. You can set the environment variable in your shell prior to running your script (with SET or EXPORT or whatever), or else you can set it in your script by putting this at the top of the script: BEGIN { $ENV{DBI_SQL_NANO} = 1 } =head2 Supported SQL syntax Here's a pseudo-BNF. Square brackets [] indicate optional items; Angle brackets <> indicate items defined elsewhere in the BNF. statement ::= DROP TABLE [IF EXISTS] <table_name> | CREATE TABLE <table_name> <col_def_list> | INSERT INTO <table_name> [<insert_col_list>] VALUES <val_list> | DELETE FROM <table_name> [<where_clause>] | UPDATE <table_name> SET <set_clause> <where_clause> | SELECT <select_col_list> FROM <table_name> [<where_clause>] [<order_clause>] the optional IF EXISTS clause ::= * similar to MySQL - prevents errors when trying to drop a table that doesn't exist identifiers ::= * table and column names should be valid SQL identifiers * especially avoid using spaces and commas in identifiers * note: there is no error checking for invalid names, some will be accepted, others will cause parse failures table_name ::= * only one table (no multiple table operations) * see identifier for valid table names col_def_list ::= * a parens delimited, comma-separated list of column names * see identifier for valid column names * column types and column constraints may be included but are ignored e.g. these are all the same: (id,phrase) (id INT, phrase VARCHAR(40)) (id INT PRIMARY KEY, phrase VARCHAR(40) NOT NULL) * you are *strongly* advised to put in column types even though they are ignored ... it increases portability insert_col_list ::= * a parens delimited, comma-separated list of column names * as in standard SQL, this is optional select_col_list ::= * a comma-separated list of column names * or an asterisk denoting all columns val_list ::= * a parens delimited, comma-separated list of values which can be: * placeholders (an unquoted question mark) * numbers (unquoted numbers) * column names (unquoted strings) * nulls (unquoted word NULL) * strings (delimited with single quote marks); * note: leading and trailing percent mark (%) and underscore (_) can be used as wildcards in quoted strings for use with the LIKE and CLIKE operators * note: escaped single quotation marks within strings are not supported, neither are embedded commas, use placeholders instead set_clause ::= * a comma-separated list of column = value pairs * see val_list for acceptable value formats where_clause ::= * a single "column/value <op> column/value" predicate, optionally preceded by "NOT" * note: multiple predicates combined with ORs or ANDs are not supported * see val_list for acceptable value formats * op may be one of: < > >= <= = <> LIKE CLIKE IS * CLIKE is a case insensitive LIKE order_clause ::= column_name [ASC|DESC] * a single column optional ORDER BY clause is supported * as in standard SQL, if neither ASC (ascending) nor DESC (descending) is specified, ASC becomes the default =head1 TABLES DBI::SQL::Nano::Statement operates on exactly one table. This table will be opened by inherit from DBI::SQL::Nano::Statement and implements the C<< open_table >> method. sub open_table ($$$$$) { ... return Your::Table->new( \%attributes ); } DBI::SQL::Nano::Statement_ expects a rudimentary interface is implemented by the table object, as well as SQL::Statement expects. package Your::Table; use vars qw(@ISA); @ISA = qw(DBI::SQL::Nano::Table); sub drop ($$) { ... } sub fetch_row ($$$) { ... } sub push_row ($$$) { ... } sub push_names ($$$) { ... } sub truncate ($$) { ... } sub seek ($$$$) { ... } The base class interfaces are provided by DBI::SQL::Nano::Table_ in case of relying on DBI::SQL::Nano or SQL::Eval::Table (see L<SQL::Eval> for details) otherwise. =head1 BUGS AND LIMITATIONS There are no known bugs in DBI::SQL::Nano::Statement. If you find a one and want to report, please see L<DBI> for how to report bugs. DBI::SQL::Nano::Statement is designed to provide a minimal subset for executing SQL statements. The most important limitation might be the restriction on one table per statement. This implies, that no JOINs are supported and there cannot be any foreign key relation between tables. The where clause evaluation of DBI::SQL::Nano::Statement is very slow (SQL::Statement uses a precompiled evaluation). INSERT can handle only one row per statement. To insert multiple rows, use placeholders as explained in DBI. The DBI::SQL::Nano parser is very limited and does not support any additional syntax such as brackets, comments, functions, aggregations etc. In contrast to SQL::Statement, temporary tables are not supported. =head1 ACKNOWLEDGEMENTS Tim Bunce provided the original idea for this module, helped me out of the tangled trap of namespaces, and provided help and advice all along the way. Although I wrote it from the ground up, it is based on Jochen Wiedmann's original design of SQL::Statement, so much of the credit for the API goes to him. =head1 AUTHOR AND COPYRIGHT This module is originally written by Jeff Zucker < jzucker AT cpan.org > This module is currently maintained by Jens Rehsack < jrehsack AT cpan.org > Copyright (C) 2010 by Jens Rehsack, all rights reserved. Copyright (C) 2004 by Jeff Zucker, all rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =cut DBI/DBD/SqlEngine.pm 0000644 00000177107 15037233316 0007776 0 ustar 00 # -*- perl -*- # # DBI::DBD::SqlEngine - A base class for implementing DBI drivers that # have not an own SQL engine # # This module is currently maintained by # # H.Merijn Brand & Jens Rehsack # # The original author is Jochen Wiedmann. # # Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack # Copyright (C) 2004 by Jeff Zucker # Copyright (C) 1998 by Jochen Wiedmann # # All rights reserved. # # You may distribute this module under the terms of either the GNU # General Public License or the Artistic License, as specified in # the Perl README file. require 5.008; use strict; use DBI (); require DBI::SQL::Nano; package DBI::DBD::SqlEngine; use strict; use Carp; use vars qw( @ISA $VERSION $drh %methods_installed); $VERSION = "0.06"; $drh = undef; # holds driver handle(s) once initialized DBI->setup_driver("DBI::DBD::SqlEngine"); # only needed once but harmless to repeat my %accessors = ( versions => "get_driver_versions", new_meta => "new_sql_engine_meta", get_meta => "get_sql_engine_meta", set_meta => "set_sql_engine_meta", clear_meta => "clear_sql_engine_meta", ); sub driver ($;$) { my ( $class, $attr ) = @_; # Drivers typically use a singleton object for the $drh # We use a hash here to have one singleton per subclass. # (Otherwise DBD::CSV and DBD::DBM, for example, would # share the same driver object which would cause problems.) # An alternative would be to not cache the $drh here at all # and require that subclasses do that. Subclasses should do # their own caching, so caching here just provides extra safety. $drh->{$class} and return $drh->{$class}; $attr ||= {}; { no strict "refs"; unless ( $attr->{Attribution} ) { $class eq "DBI::DBD::SqlEngine" and $attr->{Attribution} = "$class by Jens Rehsack"; $attr->{Attribution} ||= ${ $class . "::ATTRIBUTION" } || "oops the author of $class forgot to define this"; } $attr->{Version} ||= ${ $class . "::VERSION" }; $attr->{Name} or ( $attr->{Name} = $class ) =~ s/^DBD\:\://; } $drh->{$class} = DBI::_new_drh( $class . "::dr", $attr ); $drh->{$class}->STORE( ShowErrorStatement => 1 ); my $prefix = DBI->driver_prefix($class); if ($prefix) { my $dbclass = $class . "::db"; while ( my ( $accessor, $funcname ) = each %accessors ) { my $method = $prefix . $accessor; $dbclass->can($method) and next; my $inject = sprintf <<'EOI', $dbclass, $method, $dbclass, $funcname; sub %s::%s { my $func = %s->can (q{%s}); goto &$func; } EOI eval $inject; $dbclass->install_method($method); } } else { warn "Using DBI::DBD::SqlEngine with unregistered driver $class.\n" . "Reading documentation how to prevent is strongly recommended.\n"; } # XXX inject DBD::XXX::Statement unless exists my $stclass = $class . "::st"; $stclass->install_method("sql_get_colnames") unless ( $methods_installed{__PACKAGE__}++ ); return $drh->{$class}; } # driver sub CLONE { undef $drh; } # CLONE # ====== DRIVER ================================================================ package DBI::DBD::SqlEngine::dr; use strict; use warnings; use vars qw(@ISA $imp_data_size); use Carp qw/carp/; $imp_data_size = 0; sub connect ($$;$$$) { my ( $drh, $dbname, $user, $auth, $attr ) = @_; # create a 'blank' dbh my $dbh = DBI::_new_dbh( $drh, { Name => $dbname, USER => $user, CURRENT_USER => $user, } ); if ($dbh) { # must be done first, because setting flags implicitly calls $dbdname::db->STORE $dbh->func( 0, "init_default_attributes" ); my $two_phased_init; defined $dbh->{sql_init_phase} and $two_phased_init = ++$dbh->{sql_init_phase}; my %second_phase_attrs; my @func_inits; # this must be done to allow DBI.pm reblessing got handle after successful connecting exists $attr->{RootClass} and $second_phase_attrs{RootClass} = delete $attr->{RootClass}; my ( $var, $val ); while ( length $dbname ) { if ( $dbname =~ s/^((?:[^\\;]|\\.)*?);//s ) { $var = $1; } else { $var = $dbname; $dbname = ""; } if ( $var =~ m/^(.+?)=(.*)/s ) { $var = $1; ( $val = $2 ) =~ s/\\(.)/$1/g; exists $attr->{$var} and carp("$var is given in DSN *and* \$attr during DBI->connect()") if ($^W); exists $attr->{$var} or $attr->{$var} = $val; } elsif ( $var =~ m/^(.+?)=>(.*)/s ) { $var = $1; ( $val = $2 ) =~ s/\\(.)/$1/g; my $ref = eval $val; # $dbh->$var($ref); push( @func_inits, $var, $ref ); } } # The attributes need to be sorted in a specific way as the # assignment is through tied hashes and calls STORE on each # attribute. Some attributes require to be called prior to # others # e.g. f_dir *must* be done before xx_tables in DBD::File # The dbh attribute sql_init_order is a hash with the order # as key (low is first, 0 .. 100) and the attributes that # are set to that oreder as anon-list as value: # { 0 => [qw( AutoCommit PrintError RaiseError Profile ... )], # 10 => [ list of attr to be dealt with immediately after first ], # 50 => [ all fields that are unspecified or default sort order ], # 90 => [ all fields that are needed after other initialisation ], # } my %order = map { my $order = $_; map { ( $_ => $order ) } @{ $dbh->{sql_init_order}{$order} }; } sort { $a <=> $b } keys %{ $dbh->{sql_init_order} || {} }; my @ordered_attr = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, defined $order{$_} ? $order{$_} : 50 ] } keys %$attr; # initialize given attributes ... lower weighted before higher weighted foreach my $a (@ordered_attr) { exists $attr->{$a} or next; $two_phased_init and eval { $dbh->{$a} = $attr->{$a}; delete $attr->{$a}; }; $@ and $second_phase_attrs{$a} = delete $attr->{$a}; $two_phased_init or $dbh->STORE( $a, delete $attr->{$a} ); } $two_phased_init and $dbh->func( 1, "init_default_attributes" ); %$attr = %second_phase_attrs; for ( my $i = 0; $i < scalar(@func_inits); $i += 2 ) { my $func = $func_inits[$i]; my $arg = $func_inits[ $i + 1 ]; $dbh->$func($arg); } $dbh->func("init_done"); $dbh->STORE( Active => 1 ); } return $dbh; } # connect sub data_sources ($;$) { my ( $drh, $attr ) = @_; my $tbl_src; $attr and defined $attr->{sql_table_source} and $attr->{sql_table_source}->isa('DBI::DBD::SqlEngine::TableSource') and $tbl_src = $attr->{sql_table_source}; !defined($tbl_src) and $drh->{ImplementorClass}->can('default_table_source') and $tbl_src = $drh->{ImplementorClass}->default_table_source(); defined($tbl_src) or return; $tbl_src->data_sources( $drh, $attr ); } # data_sources sub disconnect_all { } # disconnect_all sub DESTROY { undef; } # DESTROY # ====== DATABASE ============================================================== package DBI::DBD::SqlEngine::db; use strict; use warnings; use vars qw(@ISA $imp_data_size); use Carp; if ( eval { require Clone; } ) { Clone->import("clone"); } else { require Storable; # in CORE since 5.7.3 *clone = \&Storable::dclone; } $imp_data_size = 0; sub ping { ( $_[0]->FETCH("Active") ) ? 1 : 0; } # ping sub data_sources { my ( $dbh, $attr, @other ) = @_; my $drh = $dbh->{Driver}; # XXX proxy issues? ref($attr) eq 'HASH' or $attr = {}; defined( $attr->{sql_table_source} ) or $attr->{sql_table_source} = $dbh->{sql_table_source}; return $drh->data_sources( $attr, @other ); } sub prepare ($$;@) { my ( $dbh, $statement, @attribs ) = @_; # create a 'blank' sth my $sth = DBI::_new_sth( $dbh, { Statement => $statement } ); if ($sth) { my $class = $sth->FETCH("ImplementorClass"); $class =~ s/::st$/::Statement/; my $stmt; # if using SQL::Statement version > 1 # cache the parser object if the DBD supports parser caching # SQL::Nano and older SQL::Statements don't support this if ( $class->isa("SQL::Statement") ) { my $parser = $dbh->{sql_parser_object}; $parser ||= eval { $dbh->func("sql_parser_object") }; if ($@) { $stmt = eval { $class->new($statement) }; } else { $stmt = eval { $class->new( $statement, $parser ) }; } } else { $stmt = eval { $class->new($statement) }; } if ( $@ || $stmt->{errstr} ) { $dbh->set_err( $DBI::stderr, $@ || $stmt->{errstr} ); undef $sth; } else { $sth->STORE( "sql_stmt", $stmt ); $sth->STORE( "sql_params", [] ); $sth->STORE( "NUM_OF_PARAMS", scalar( $stmt->params() ) ); my @colnames = $sth->sql_get_colnames(); $sth->STORE( "NUM_OF_FIELDS", scalar @colnames ); } } return $sth; } # prepare sub set_versions { my $dbh = $_[0]; $dbh->{sql_engine_version} = $DBI::DBD::SqlEngine::VERSION; for (qw( nano_version statement_version )) { defined $DBI::SQL::Nano::versions->{$_} or next; $dbh->{"sql_$_"} = $DBI::SQL::Nano::versions->{$_}; } $dbh->{sql_handler} = $dbh->{sql_statement_version} ? "SQL::Statement" : "DBI::SQL::Nano"; return $dbh; } # set_versions sub init_valid_attributes { my $dbh = $_[0]; $dbh->{sql_valid_attrs} = { sql_engine_version => 1, # DBI::DBD::SqlEngine version sql_handler => 1, # Nano or S:S sql_nano_version => 1, # Nano version sql_statement_version => 1, # S:S version sql_flags => 1, # flags for SQL::Parser sql_dialect => 1, # dialect for SQL::Parser sql_quoted_identifier_case => 1, # case for quoted identifiers sql_identifier_case => 1, # case for non-quoted identifiers sql_parser_object => 1, # SQL::Parser instance sql_sponge_driver => 1, # Sponge driver for table_info () sql_valid_attrs => 1, # SQL valid attributes sql_readonly_attrs => 1, # SQL readonly attributes sql_init_phase => 1, # Only during initialization sql_meta => 1, # meta data for tables sql_meta_map => 1, # mapping table for identifier case sql_data_source => 1, # reasonable datasource class }; $dbh->{sql_readonly_attrs} = { sql_engine_version => 1, # DBI::DBD::SqlEngine version sql_handler => 1, # Nano or S:S sql_nano_version => 1, # Nano version sql_statement_version => 1, # S:S version sql_quoted_identifier_case => 1, # case for quoted identifiers sql_parser_object => 1, # SQL::Parser instance sql_sponge_driver => 1, # Sponge driver for table_info () sql_valid_attrs => 1, # SQL valid attributes sql_readonly_attrs => 1, # SQL readonly attributes }; return $dbh; } # init_valid_attributes sub init_default_attributes { my ( $dbh, $phase ) = @_; my $given_phase = $phase; unless ( defined($phase) ) { # we have an "old" driver here $phase = defined $dbh->{sql_init_phase}; $phase and $phase = $dbh->{sql_init_phase}; } if ( 0 == $phase ) { # must be done first, because setting flags implicitly calls $dbdname::db->STORE $dbh->func("init_valid_attributes"); $dbh->func("set_versions"); $dbh->{sql_identifier_case} = 2; # SQL_IC_LOWER $dbh->{sql_quoted_identifier_case} = 3; # SQL_IC_SENSITIVE $dbh->{sql_dialect} = "CSV"; $dbh->{sql_init_phase} = $given_phase; # complete derived attributes, if required ( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//; my $drv_prefix = DBI->driver_prefix($drv_class); my $valid_attrs = $drv_prefix . "valid_attrs"; my $ro_attrs = $drv_prefix . "readonly_attrs"; # check whether we're running in a Gofer server or not (see # validate_FETCH_attr for details) $dbh->{sql_engine_in_gofer} = ( defined $INC{"DBD/Gofer.pm"} && ( caller(5) )[0] eq "DBI::Gofer::Execute" ); $dbh->{sql_meta} = {}; $dbh->{sql_meta_map} = {}; # choose new name because it contains other keys # init_default_attributes calls inherited routine before derived DBD's # init their default attributes, so we don't override something here # # defining an order of attribute initialization from connect time # specified ones with a magic baarier (see next statement) my $drv_pfx_meta = $drv_prefix . "meta"; $dbh->{sql_init_order} = { 0 => [qw( Profile RaiseError PrintError AutoCommit )], 90 => [ "sql_meta", $dbh->{$drv_pfx_meta} ? $dbh->{$drv_pfx_meta} : () ], }; # ensuring Profile, RaiseError, PrintError, AutoCommit are initialized # first when initializing attributes from connect time specified # attributes # further, initializations to predefined tables are happens after any # unspecified attribute initialization (that default to order 50) my @comp_attrs = qw(valid_attrs version readonly_attrs); if ( exists $dbh->{$drv_pfx_meta} and !$dbh->{sql_engine_in_gofer} ) { my $attr = $dbh->{$drv_pfx_meta}; defined $attr and defined $dbh->{$valid_attrs} and !defined $dbh->{$valid_attrs}{$attr} and $dbh->{$valid_attrs}{$attr} = 1; my %h; tie %h, "DBI::DBD::SqlEngine::TieTables", $dbh; $dbh->{$attr} = \%h; push @comp_attrs, "meta"; } foreach my $comp_attr (@comp_attrs) { my $attr = $drv_prefix . $comp_attr; defined $dbh->{$valid_attrs} and !defined $dbh->{$valid_attrs}{$attr} and $dbh->{$valid_attrs}{$attr} = 1; defined $dbh->{$ro_attrs} and !defined $dbh->{$ro_attrs}{$attr} and $dbh->{$ro_attrs}{$attr} = 1; } } return $dbh; } # init_default_attributes sub init_done { defined $_[0]->{sql_init_phase} and delete $_[0]->{sql_init_phase}; delete $_[0]->{sql_valid_attrs}->{sql_init_phase}; return; } sub sql_parser_object { my $dbh = $_[0]; my $dialect = $dbh->{sql_dialect} || "CSV"; my $parser = { RaiseError => $dbh->FETCH("RaiseError"), PrintError => $dbh->FETCH("PrintError"), }; my $sql_flags = $dbh->FETCH("sql_flags") || {}; %$parser = ( %$parser, %$sql_flags ); $parser = SQL::Parser->new( $dialect, $parser ); $dbh->{sql_parser_object} = $parser; return $parser; } # sql_parser_object sub sql_sponge_driver { my $dbh = $_[0]; my $dbh2 = $dbh->{sql_sponge_driver}; unless ($dbh2) { $dbh2 = $dbh->{sql_sponge_driver} = DBI->connect("DBI:Sponge:"); unless ($dbh2) { $dbh->set_err( $DBI::stderr, $DBI::errstr ); return; } } } sub disconnect ($) { %{ $_[0]->{sql_meta} } = (); %{ $_[0]->{sql_meta_map} } = (); $_[0]->STORE( Active => 0 ); return 1; } # disconnect sub validate_FETCH_attr { my ( $dbh, $attrib ) = @_; # If running in a Gofer server, access to our tied compatibility hash # would force Gofer to serialize the tieing object including it's # private $dbh reference used to do the driver function calls. # This will result in nasty exceptions. So return a copy of the # sql_meta structure instead, which is the source of for the compatibility # tie-hash. It's not as good as liked, but the best we can do in this # situation. if ( $dbh->{sql_engine_in_gofer} ) { ( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//; my $drv_prefix = DBI->driver_prefix($drv_class); exists $dbh->{ $drv_prefix . "meta" } && $attrib eq $dbh->{ $drv_prefix . "meta" } and $attrib = "sql_meta"; } return $attrib; } sub FETCH ($$) { my ( $dbh, $attrib ) = @_; $attrib eq "AutoCommit" and return 1; # Driver private attributes are lower cased if ( $attrib eq ( lc $attrib ) ) { # first let the implementation deliver an alias for the attribute to fetch # after it validates the legitimation of the fetch request $attrib = $dbh->func( $attrib, "validate_FETCH_attr" ) or return; my $attr_prefix; $attrib =~ m/^([a-z]+_)/ and $attr_prefix = $1; unless ($attr_prefix) { ( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//; $attr_prefix = DBI->driver_prefix($drv_class); $attrib = $attr_prefix . $attrib; } my $valid_attrs = $attr_prefix . "valid_attrs"; my $ro_attrs = $attr_prefix . "readonly_attrs"; exists $dbh->{$valid_attrs} and ( $dbh->{$valid_attrs}{$attrib} or return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" ) ); exists $dbh->{$ro_attrs} and $dbh->{$ro_attrs}{$attrib} and defined $dbh->{$attrib} and refaddr( $dbh->{$attrib} ) and return clone( $dbh->{$attrib} ); return $dbh->{$attrib}; } # else pass up to DBI to handle return $dbh->SUPER::FETCH($attrib); } # FETCH sub validate_STORE_attr { my ( $dbh, $attrib, $value ) = @_; if ( $attrib eq "sql_identifier_case" || $attrib eq "sql_quoted_identifier_case" and $value < 1 || $value > 4 ) { croak "attribute '$attrib' must have a value from 1 .. 4 (SQL_IC_UPPER .. SQL_IC_MIXED)"; # XXX correctly a remap of all entries in sql_meta/sql_meta_map is required here } ( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//; my $drv_prefix = DBI->driver_prefix($drv_class); exists $dbh->{ $drv_prefix . "meta" } and $attrib eq $dbh->{ $drv_prefix . "meta" } and $attrib = "sql_meta"; return ( $attrib, $value ); } # the ::db::STORE method is what gets called when you set # a lower-cased database handle attribute such as $dbh->{somekey}=$someval; # # STORE should check to make sure that "somekey" is a valid attribute name # but only if it is really one of our attributes (starts with dbm_ or foo_) # You can also check for valid values for the attributes if needed # and/or perform other operations # sub STORE ($$$) { my ( $dbh, $attrib, $value ) = @_; if ( $attrib eq "AutoCommit" ) { $value and return 1; # is already set croak "Can't disable AutoCommit"; } if ( $attrib eq lc $attrib ) { # Driver private attributes are lower cased ( $attrib, $value ) = $dbh->func( $attrib, $value, "validate_STORE_attr" ); $attrib or return; my $attr_prefix; $attrib =~ m/^([a-z]+_)/ and $attr_prefix = $1; unless ($attr_prefix) { ( my $drv_class = $dbh->{ImplementorClass} ) =~ s/::db$//; $attr_prefix = DBI->driver_prefix($drv_class); $attrib = $attr_prefix . $attrib; } my $valid_attrs = $attr_prefix . "valid_attrs"; my $ro_attrs = $attr_prefix . "readonly_attrs"; exists $dbh->{$valid_attrs} and ( $dbh->{$valid_attrs}{$attrib} or return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" ) ); exists $dbh->{$ro_attrs} and $dbh->{$ro_attrs}{$attrib} and defined $dbh->{$attrib} and return $dbh->set_err( $DBI::stderr, "attribute '$attrib' is readonly and must not be modified" ); if ( $attrib eq "sql_meta" ) { while ( my ( $k, $v ) = each %$value ) { $dbh->{$attrib}{$k} = $v; } } else { $dbh->{$attrib} = $value; } return 1; } return $dbh->SUPER::STORE( $attrib, $value ); } # STORE sub get_driver_versions { my ( $dbh, $table ) = @_; my %vsn = ( OS => "$^O ($Config::Config{osvers})", Perl => "$] ($Config::Config{archname})", DBI => $DBI::VERSION, ); my %vmp; my $sql_engine_verinfo = join " ", $dbh->{sql_engine_version}, "using", $dbh->{sql_handler}, $dbh->{sql_handler} eq "SQL::Statement" ? $dbh->{sql_statement_version} : $dbh->{sql_nano_version}; my $indent = 0; my @deriveds = ( $dbh->{ImplementorClass} ); while (@deriveds) { my $derived = shift @deriveds; $derived eq "DBI::DBD::SqlEngine::db" and last; $derived->isa("DBI::DBD::SqlEngine::db") or next; #no strict 'refs'; eval "push \@deriveds, \@${derived}::ISA"; #use strict; ( my $drv_class = $derived ) =~ s/::db$//; my $drv_prefix = DBI->driver_prefix($drv_class); my $ddgv = $dbh->{ImplementorClass}->can("get_${drv_prefix}versions"); my $drv_version = $ddgv ? &$ddgv( $dbh, $table ) : $dbh->{ $drv_prefix . "version" }; $drv_version ||= eval { $derived->VERSION() }; # XXX access $drv_class::VERSION via symbol table $vsn{$drv_class} = $drv_version; $indent and $vmp{$drv_class} = " " x $indent . $drv_class; $indent += 2; } $vsn{"DBI::DBD::SqlEngine"} = $sql_engine_verinfo; $indent and $vmp{"DBI::DBD::SqlEngine"} = " " x $indent . "DBI::DBD::SqlEngine"; $DBI::PurePerl and $vsn{"DBI::PurePerl"} = $DBI::PurePerl::VERSION; $indent += 20; my @versions = map { sprintf "%-${indent}s %s", $vmp{$_} || $_, $vsn{$_} } sort { $a->isa($b) and return -1; $b->isa($a) and return 1; $a->isa("DBI::DBD::SqlEngine") and return -1; $b->isa("DBI::DBD::SqlEngine") and return 1; return $a cmp $b; } keys %vsn; return wantarray ? @versions : join "\n", @versions; } # get_versions sub get_single_table_meta { my ( $dbh, $table, $attr ) = @_; my $meta; $table eq "." and return $dbh->FETCH($attr); ( my $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/; ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 ); $meta or croak "No such table '$table'"; # prevent creation of undef attributes return $class->get_table_meta_attr( $meta, $attr ); } # get_single_table_meta sub get_sql_engine_meta { my ( $dbh, $table, $attr ) = @_; my $gstm = $dbh->{ImplementorClass}->can("get_single_table_meta"); $table eq "*" and $table = [ ".", keys %{ $dbh->{sql_meta} } ]; $table eq "+" and $table = [ grep { m/^[_A-Za-z0-9]+$/ } keys %{ $dbh->{sql_meta} } ]; ref $table eq "Regexp" and $table = [ grep { $_ =~ $table } keys %{ $dbh->{sql_meta} } ]; ref $table || ref $attr or return $gstm->( $dbh, $table, $attr ); ref $table or $table = [$table]; ref $attr or $attr = [$attr]; "ARRAY" eq ref $table or return $dbh->set_err( $DBI::stderr, "Invalid argument for \$table - SCALAR, Regexp or ARRAY expected but got " . ref $table ); "ARRAY" eq ref $attr or return $dbh->set_err( "Invalid argument for \$attr - SCALAR or ARRAY expected but got " . ref $attr ); my %results; foreach my $tname ( @{$table} ) { my %tattrs; foreach my $aname ( @{$attr} ) { $tattrs{$aname} = $gstm->( $dbh, $tname, $aname ); } $results{$tname} = \%tattrs; } return \%results; } # get_sql_engine_meta sub new_sql_engine_meta { my ( $dbh, $table, $values ) = @_; my $respect_case = 0; "HASH" eq ref $values or croak "Invalid argument for \$values - SCALAR or HASH expected but got " . ref $values; $table =~ s/^\"// and $respect_case = 1; # handle quoted identifiers $table =~ s/\"$//; unless ($respect_case) { defined $dbh->{sql_meta_map}{$table} and $table = $dbh->{sql_meta_map}{$table}; } $dbh->{sql_meta}{$table} = { %{$values} }; my $class; defined $values->{sql_table_class} and $class = $values->{sql_table_class}; defined $class or ( $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/; # XXX we should never hit DBD::File::Table::get_table_meta here ... my ( undef, $meta ) = $class->get_table_meta( $dbh, $table, $respect_case ); 1; } # new_sql_engine_meta sub set_single_table_meta { my ( $dbh, $table, $attr, $value ) = @_; my $meta; $table eq "." and return $dbh->STORE( $attr, $value ); ( my $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/; ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 ); # 1 means: respect case $meta or croak "No such table '$table'"; $class->set_table_meta_attr( $meta, $attr, $value ); return $dbh; } # set_single_table_meta sub set_sql_engine_meta { my ( $dbh, $table, $attr, $value ) = @_; my $sstm = $dbh->{ImplementorClass}->can("set_single_table_meta"); $table eq "*" and $table = [ ".", keys %{ $dbh->{sql_meta} } ]; $table eq "+" and $table = [ grep { m/^[_A-Za-z0-9]+$/ } keys %{ $dbh->{sql_meta} } ]; ref($table) eq "Regexp" and $table = [ grep { $_ =~ $table } keys %{ $dbh->{sql_meta} } ]; ref $table || ref $attr or return $sstm->( $dbh, $table, $attr, $value ); ref $table or $table = [$table]; ref $attr or $attr = { $attr => $value }; "ARRAY" eq ref $table or croak "Invalid argument for \$table - SCALAR, Regexp or ARRAY expected but got " . ref $table; "HASH" eq ref $attr or croak "Invalid argument for \$attr - SCALAR or HASH expected but got " . ref $attr; foreach my $tname ( @{$table} ) { while ( my ( $aname, $aval ) = each %$attr ) { $sstm->( $dbh, $tname, $aname, $aval ); } } return $dbh; } # set_file_meta sub clear_sql_engine_meta { my ( $dbh, $table ) = @_; ( my $class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/; my ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 ); $meta and %{$meta} = (); return; } # clear_file_meta sub DESTROY ($) { my $dbh = shift; $dbh->SUPER::FETCH("Active") and $dbh->disconnect; undef $dbh->{sql_parser_object}; } # DESTROY sub type_info_all ($) { [ { TYPE_NAME => 0, DATA_TYPE => 1, PRECISION => 2, LITERAL_PREFIX => 3, LITERAL_SUFFIX => 4, CREATE_PARAMS => 5, NULLABLE => 6, CASE_SENSITIVE => 7, SEARCHABLE => 8, UNSIGNED_ATTRIBUTE => 9, MONEY => 10, AUTO_INCREMENT => 11, LOCAL_TYPE_NAME => 12, MINIMUM_SCALE => 13, MAXIMUM_SCALE => 14, }, [ "VARCHAR", DBI::SQL_VARCHAR(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1, 999999, ], [ "CHAR", DBI::SQL_CHAR(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1, 999999, ], [ "INTEGER", DBI::SQL_INTEGER(), undef, "", "", undef, 0, 0, 1, 0, 0, 0, undef, 0, 0, ], [ "REAL", DBI::SQL_REAL(), undef, "", "", undef, 0, 0, 1, 0, 0, 0, undef, 0, 0, ], [ "BLOB", DBI::SQL_LONGVARBINARY(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1, 999999, ], [ "BLOB", DBI::SQL_LONGVARBINARY(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1, 999999, ], [ "TEXT", DBI::SQL_LONGVARCHAR(), undef, "'", "'", undef, 0, 1, 1, 0, 0, 0, undef, 1, 999999, ], ]; } # type_info_all sub get_avail_tables { my $dbh = $_[0]; my @tables = (); if ( $dbh->{sql_handler} eq "SQL::Statement" and $dbh->{sql_ram_tables} ) { # XXX map +[ undef, undef, $_, "TABLE", "TEMP" ], keys %{...} foreach my $table ( keys %{ $dbh->{sql_ram_tables} } ) { push @tables, [ undef, undef, $table, "TABLE", "TEMP" ]; } } my $tbl_src; defined $dbh->{sql_table_source} and $dbh->{sql_table_source}->isa('DBI::DBD::SqlEngine::TableSource') and $tbl_src = $dbh->{sql_table_source}; !defined($tbl_src) and $dbh->{Driver}->{ImplementorClass}->can('default_table_source') and $tbl_src = $dbh->{Driver}->{ImplementorClass}->default_table_source(); defined($tbl_src) and push( @tables, $tbl_src->avail_tables($dbh) ); return @tables; } # get_avail_tables { my $names = [qw( TABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE REMARKS )]; sub table_info ($) { my $dbh = shift; my @tables = $dbh->func("get_avail_tables"); # Temporary kludge: DBD::Sponge dies if @tables is empty. :-( # this no longer seems to be true @tables or return; my $dbh2 = $dbh->func("sql_sponge_driver"); my $sth = $dbh2->prepare( "TABLE_INFO", { rows => \@tables, NAME => $names, } ); $sth or return $dbh->set_err( $DBI::stderr, $dbh2->errstr ); $sth->execute or return; return $sth; } # table_info } sub list_tables ($) { my $dbh = shift; my @table_list; my @tables = $dbh->func("get_avail_tables") or return; foreach my $ref (@tables) { # rt69260 and rt67223 - the same issue in 2 different queues push @table_list, $ref->[2]; } return @table_list; } # list_tables sub quote ($$;$) { my ( $self, $str, $type ) = @_; defined $str or return "NULL"; defined $type && ( $type == DBI::SQL_NUMERIC() || $type == DBI::SQL_DECIMAL() || $type == DBI::SQL_INTEGER() || $type == DBI::SQL_SMALLINT() || $type == DBI::SQL_FLOAT() || $type == DBI::SQL_REAL() || $type == DBI::SQL_DOUBLE() || $type == DBI::SQL_TINYINT() ) and return $str; $str =~ s/\\/\\\\/sg; $str =~ s/\0/\\0/sg; $str =~ s/\'/\\\'/sg; $str =~ s/\n/\\n/sg; $str =~ s/\r/\\r/sg; return "'$str'"; } # quote sub commit ($) { my $dbh = shift; $dbh->FETCH("Warn") and carp "Commit ineffective while AutoCommit is on", -1; return 1; } # commit sub rollback ($) { my $dbh = shift; $dbh->FETCH("Warn") and carp "Rollback ineffective while AutoCommit is on", -1; return 0; } # rollback # ====== Tie-Meta ============================================================== package DBI::DBD::SqlEngine::TieMeta; use Carp qw(croak); require Tie::Hash; @DBI::DBD::SqlEngine::TieMeta::ISA = qw(Tie::Hash); sub TIEHASH { my ( $class, $tblClass, $tblMeta ) = @_; my $self = bless( { tblClass => $tblClass, tblMeta => $tblMeta, }, $class ); return $self; } # new sub STORE { my ( $self, $meta_attr, $meta_val ) = @_; $self->{tblClass}->set_table_meta_attr( $self->{tblMeta}, $meta_attr, $meta_val ); return; } # STORE sub FETCH { my ( $self, $meta_attr ) = @_; return $self->{tblClass}->get_table_meta_attr( $self->{tblMeta}, $meta_attr ); } # FETCH sub FIRSTKEY { my $a = scalar keys %{ $_[0]->{tblMeta} }; each %{ $_[0]->{tblMeta} }; } # FIRSTKEY sub NEXTKEY { each %{ $_[0]->{tblMeta} }; } # NEXTKEY sub EXISTS { exists $_[0]->{tblMeta}{ $_[1] }; } # EXISTS sub DELETE { croak "Can't delete single attributes from table meta structure"; } # DELETE sub CLEAR { %{ $_[0]->{tblMeta} } = (); } # CLEAR sub SCALAR { scalar %{ $_[0]->{tblMeta} }; } # SCALAR # ====== Tie-Tables ============================================================ package DBI::DBD::SqlEngine::TieTables; use Carp qw(croak); require Tie::Hash; @DBI::DBD::SqlEngine::TieTables::ISA = qw(Tie::Hash); sub TIEHASH { my ( $class, $dbh ) = @_; ( my $tbl_class = $dbh->{ImplementorClass} ) =~ s/::db$/::Table/; my $self = bless( { dbh => $dbh, tblClass => $tbl_class, }, $class ); return $self; } # new sub STORE { my ( $self, $table, $tbl_meta ) = @_; "HASH" eq ref $tbl_meta or croak "Invalid data for storing as table meta data (must be hash)"; ( undef, my $meta ) = $self->{tblClass}->get_table_meta( $self->{dbh}, $table, 1 ); $meta or croak "Invalid table name '$table'"; while ( my ( $meta_attr, $meta_val ) = each %$tbl_meta ) { $self->{tblClass}->set_table_meta_attr( $meta, $meta_attr, $meta_val ); } return; } # STORE sub FETCH { my ( $self, $table ) = @_; ( undef, my $meta ) = $self->{tblClass}->get_table_meta( $self->{dbh}, $table, 1 ); $meta or croak "Invalid table name '$table'"; my %h; tie %h, "DBI::DBD::SqlEngine::TieMeta", $self->{tblClass}, $meta; return \%h; } # FETCH sub FIRSTKEY { my $a = scalar keys %{ $_[0]->{dbh}->{sql_meta} }; each %{ $_[0]->{dbh}->{sql_meta} }; } # FIRSTKEY sub NEXTKEY { each %{ $_[0]->{dbh}->{sql_meta} }; } # NEXTKEY sub EXISTS { exists $_[0]->{dbh}->{sql_meta}->{ $_[1] } or exists $_[0]->{dbh}->{sql_meta_map}->{ $_[1] }; } # EXISTS sub DELETE { my ( $self, $table ) = @_; ( undef, my $meta ) = $self->{tblClass}->get_table_meta( $self->{dbh}, $table, 1 ); $meta or croak "Invalid table name '$table'"; delete $_[0]->{dbh}->{sql_meta}->{ $meta->{table_name} }; } # DELETE sub CLEAR { %{ $_[0]->{dbh}->{sql_meta} } = (); %{ $_[0]->{dbh}->{sql_meta_map} } = (); } # CLEAR sub SCALAR { scalar %{ $_[0]->{dbh}->{sql_meta} }; } # SCALAR # ====== STATEMENT ============================================================= package DBI::DBD::SqlEngine::st; use strict; use warnings; use vars qw(@ISA $imp_data_size); $imp_data_size = 0; sub bind_param ($$$;$) { my ( $sth, $pNum, $val, $attr ) = @_; if ( $attr && defined $val ) { my $type = ref $attr eq "HASH" ? $attr->{TYPE} : $attr; if ( $type == DBI::SQL_BIGINT() || $type == DBI::SQL_INTEGER() || $type == DBI::SQL_SMALLINT() || $type == DBI::SQL_TINYINT() ) { $val += 0; } elsif ( $type == DBI::SQL_DECIMAL() || $type == DBI::SQL_DOUBLE() || $type == DBI::SQL_FLOAT() || $type == DBI::SQL_NUMERIC() || $type == DBI::SQL_REAL() ) { $val += 0.; } else { $val = "$val"; } } $sth->{sql_params}[ $pNum - 1 ] = $val; return 1; } # bind_param sub execute { my $sth = shift; my $params = @_ ? ( $sth->{sql_params} = [@_] ) : $sth->{sql_params}; $sth->finish; my $stmt = $sth->{sql_stmt}; # must not proved when already executed - SQL::Statement modifies # received params unless ( $sth->{sql_params_checked}++ ) { # SQL::Statement and DBI::SQL::Nano will return the list of required params # when called in list context. Do not look into the several items, they're # implementation specific and may change without warning unless ( ( my $req_prm = $stmt->params() ) == ( my $nparm = @$params ) ) { my $msg = "You passed $nparm parameters where $req_prm required"; return $sth->set_err( $DBI::stderr, $msg ); } } my @err; my $result; eval { local $SIG{__WARN__} = sub { push @err, @_ }; $result = $stmt->execute( $sth, $params ); }; unless ( defined $result ) { $sth->set_err( $DBI::stderr, $@ || $stmt->{errstr} || $err[0] ); return; } if ( $stmt->{NUM_OF_FIELDS} ) { # is a SELECT statement $sth->STORE( Active => 1 ); $sth->FETCH("NUM_OF_FIELDS") or $sth->STORE( "NUM_OF_FIELDS", $stmt->{NUM_OF_FIELDS} ); } return $result; } # execute sub finish { my $sth = $_[0]; $sth->SUPER::STORE( Active => 0 ); delete $sth->{sql_stmt}{data}; return 1; } # finish sub fetch ($) { my $sth = $_[0]; my $data = $sth->{sql_stmt}{data}; if ( !$data || ref $data ne "ARRAY" ) { $sth->set_err( $DBI::stderr, "Attempt to fetch row without a preceding execute () call or from a non-SELECT statement" ); return; } my $dav = shift @$data; unless ($dav) { $sth->finish; return; } if ( $sth->FETCH("ChopBlanks") ) # XXX: (TODO) Only chop on CHAR fields, { # not on VARCHAR or NUMERIC (see DBI docs) $_ && $_ =~ s/ +$// for @$dav; } return $sth->_set_fbav($dav); } # fetch no warnings 'once'; *fetchrow_arrayref = \&fetch; use warnings; sub sql_get_colnames { my $sth = $_[0]; # Being a bit dirty here, as neither SQL::Statement::Structure nor # DBI::SQL::Nano::Statement_ does not offer an interface to the # required data my @colnames; if ( $sth->{sql_stmt}->{NAME} and "ARRAY" eq ref( $sth->{sql_stmt}->{NAME} ) ) { @colnames = @{ $sth->{sql_stmt}->{NAME} }; } elsif ( $sth->{sql_stmt}->isa('SQL::Statement') ) { my $stmt = $sth->{sql_stmt} || {}; my @coldefs = @{ $stmt->{column_defs} || [] }; @colnames = map { $_->{name} || $_->{value} } @coldefs; } @colnames = $sth->{sql_stmt}->column_names() unless (@colnames); @colnames = () if ( grep { m/\*/ } @colnames ); return @colnames; } sub FETCH ($$) { my ( $sth, $attrib ) = @_; $attrib eq "NAME" and return [ $sth->sql_get_colnames() ]; $attrib eq "TYPE" and return [ ( DBI::SQL_VARCHAR() ) x scalar $sth->sql_get_colnames() ]; $attrib eq "TYPE_NAME" and return [ ("VARCHAR") x scalar $sth->sql_get_colnames() ]; $attrib eq "PRECISION" and return [ (0) x scalar $sth->sql_get_colnames() ]; $attrib eq "NULLABLE" and return [ (1) x scalar $sth->sql_get_colnames() ]; if ( $attrib eq lc $attrib ) { # Private driver attributes are lower cased return $sth->{$attrib}; } # else pass up to DBI to handle return $sth->SUPER::FETCH($attrib); } # FETCH sub STORE ($$$) { my ( $sth, $attrib, $value ) = @_; if ( $attrib eq lc $attrib ) # Private driver attributes are lower cased { $sth->{$attrib} = $value; return 1; } return $sth->SUPER::STORE( $attrib, $value ); } # STORE sub DESTROY ($) { my $sth = shift; $sth->SUPER::FETCH("Active") and $sth->finish; undef $sth->{sql_stmt}; undef $sth->{sql_params}; } # DESTROY sub rows ($) { return $_[0]->{sql_stmt}{NUM_OF_ROWS}; } # rows # ====== TableSource =========================================================== package DBI::DBD::SqlEngine::TableSource; use strict; use warnings; use Carp; sub data_sources ($;$) { my ( $class, $drh, $attrs ) = @_; croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement data_sources" ); } sub avail_tables { my ( $self, $dbh ) = @_; croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement avail_tables" ); } # ====== DataSource ============================================================ package DBI::DBD::SqlEngine::DataSource; use strict; use warnings; use Carp; sub complete_table_name ($$;$) { my ( $self, $meta, $table, $respect_case ) = @_; croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement complete_table_name" ); } sub open_data ($) { my ( $self, $meta, $attrs, $flags ) = @_; croak( ( ref( $_[0] ) ? ref( $_[0] ) : $_[0] ) . " must implement open_data" ); } # ====== SQL::STATEMENT ======================================================== package DBI::DBD::SqlEngine::Statement; use strict; use warnings; use Carp; @DBI::DBD::SqlEngine::Statement::ISA = qw(DBI::SQL::Nano::Statement); sub open_table ($$$$$) { my ( $self, $data, $table, $createMode, $lockMode ) = @_; my $class = ref $self; $class =~ s/::Statement/::Table/; my $flags = { createMode => $createMode, lockMode => $lockMode, }; $self->{command} eq "DROP" and $flags->{dropMode} = 1; my ( $tblnm, $table_meta ) = $class->get_table_meta( $data->{Database}, $table, 1 ) or croak "Cannot find appropriate meta for table '$table'"; defined $table_meta->{sql_table_class} and $class = $table_meta->{sql_table_class}; # because column name mapping is initialized in constructor ... # and therefore specific opening operations might be done before # reaching DBI::DBD::SqlEngine::Table->new(), we need to intercept # ReadOnly here my $write_op = $createMode || $lockMode || $flags->{dropMode}; if ($write_op) { $table_meta->{readonly} and croak "Table '$table' is marked readonly - " . $self->{command} . ( $lockMode ? " with locking" : "" ) . " command forbidden"; } return $class->new( $data, { table => $table }, $flags ); } # open_table # ====== SQL::TABLE ============================================================ package DBI::DBD::SqlEngine::Table; use strict; use warnings; use Carp; @DBI::DBD::SqlEngine::Table::ISA = qw(DBI::SQL::Nano::Table); sub bootstrap_table_meta { my ( $self, $dbh, $meta, $table ) = @_; defined $dbh->{ReadOnly} and !defined( $meta->{readonly} ) and $meta->{readonly} = $dbh->{ReadOnly}; defined $meta->{sql_identifier_case} or $meta->{sql_identifier_case} = $dbh->{sql_identifier_case}; exists $meta->{sql_data_source} or $meta->{sql_data_source} = $dbh->{sql_data_source}; $meta; } sub init_table_meta { my ( $self, $dbh, $meta, $table ) = @_ if (0); return; } # init_table_meta sub get_table_meta ($$$;$) { my ( $self, $dbh, $table, $respect_case, @other ) = @_; unless ( defined $respect_case ) { $respect_case = 0; $table =~ s/^\"// and $respect_case = 1; # handle quoted identifiers $table =~ s/\"$//; } unless ($respect_case) { defined $dbh->{sql_meta_map}{$table} and $table = $dbh->{sql_meta_map}{$table}; } my $meta = {}; defined $dbh->{sql_meta}{$table} and $meta = $dbh->{sql_meta}{$table}; do_initialize: unless ( $meta->{initialized} ) { $self->bootstrap_table_meta( $dbh, $meta, $table, @other ); $meta->{sql_data_source}->complete_table_name( $meta, $table, $respect_case, @other ) or return; if ( defined $meta->{table_name} and $table ne $meta->{table_name} ) { $dbh->{sql_meta_map}{$table} = $meta->{table_name}; $table = $meta->{table_name}; } # now we know a bit more - let's check if user can't use consequent spelling # XXX add know issue about reset sql_identifier_case here ... if ( defined $dbh->{sql_meta}{$table} ) { $meta = delete $dbh->{sql_meta}{$table}; # avoid endless loop $meta->{initialized} or goto do_initialize; #or $meta->{sql_data_source}->complete_table_name( $meta, $table, $respect_case, @other ) #or return; } unless ( $dbh->{sql_meta}{$table}{initialized} ) { $self->init_table_meta( $dbh, $meta, $table ); $meta->{initialized} = 1; $dbh->{sql_meta}{$table} = $meta; } } return ( $table, $meta ); } # get_table_meta my %reset_on_modify = (); my %compat_map = (); sub register_reset_on_modify { my ( $proto, $extra_resets ) = @_; foreach my $cv ( keys %$extra_resets ) { #%reset_on_modify = ( %reset_on_modify, %$extra_resets ); push @{ $reset_on_modify{$cv} }, ref $extra_resets->{$cv} ? @{ $extra_resets->{$cv} } : ( $extra_resets->{$cv} ); } return; } # register_reset_on_modify sub register_compat_map { my ( $proto, $extra_compat_map ) = @_; %compat_map = ( %compat_map, %$extra_compat_map ); return; } # register_compat_map sub get_table_meta_attr { my ( $class, $meta, $attrib ) = @_; exists $compat_map{$attrib} and $attrib = $compat_map{$attrib}; exists $meta->{$attrib} and return $meta->{$attrib}; return; } # get_table_meta_attr sub set_table_meta_attr { my ( $class, $meta, $attrib, $value ) = @_; exists $compat_map{$attrib} and $attrib = $compat_map{$attrib}; $class->table_meta_attr_changed( $meta, $attrib, $value ); $meta->{$attrib} = $value; } # set_table_meta_attr sub table_meta_attr_changed { my ( $class, $meta, $attrib, $value ) = @_; defined $reset_on_modify{$attrib} and delete @$meta{ @{ $reset_on_modify{$attrib} } } and $meta->{initialized} = 0; } # table_meta_attr_changed sub open_data { my ( $self, $meta, $attrs, $flags ) = @_; $meta->{sql_data_source} or croak "Table " . $meta->{table_name} . " not completely initialized"; $meta->{sql_data_source}->open_data( $meta, $attrs, $flags ); return; } # open_data # ====== SQL::Eval API ========================================================= sub new { my ( $className, $data, $attrs, $flags ) = @_; my $dbh = $data->{Database}; my ( $tblnm, $meta ) = $className->get_table_meta( $dbh, $attrs->{table}, 1 ) or croak "Cannot find appropriate table '$attrs->{table}'"; $attrs->{table} = $tblnm; # Being a bit dirty here, as SQL::Statement::Structure does not offer # me an interface to the data I want $flags->{createMode} && $data->{sql_stmt}{table_defs} and $meta->{table_defs} = $data->{sql_stmt}{table_defs}; # open_file must be called before inherited new is invoked # because column name mapping is initialized in constructor ... $className->open_data( $meta, $attrs, $flags ); my $tbl = { %{$attrs}, meta => $meta, col_names => $meta->{col_names} || [], }; return $className->SUPER::new($tbl); } # new sub DESTROY { my $self = shift; my $meta = $self->{meta}; $self->{row} and undef $self->{row}; () } 1; =pod =head1 NAME DBI::DBD::SqlEngine - Base class for DBI drivers without their own SQL engine =head1 SYNOPSIS package DBD::myDriver; use base qw(DBI::DBD::SqlEngine); sub driver { ... my $drh = $proto->SUPER::driver($attr); ... return $drh->{class}; } package DBD::myDriver::dr; @ISA = qw(DBI::DBD::SqlEngine::dr); sub data_sources { ... } ... package DBD::myDriver::db; @ISA = qw(DBI::DBD::SqlEngine::db); sub init_valid_attributes { ... } sub init_default_attributes { ... } sub set_versions { ... } sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; ... } sub validate_FETCH_attr { my ($dbh, $attrib) = @_; ... } sub get_myd_versions { ... } sub get_avail_tables { ... } package DBD::myDriver::st; @ISA = qw(DBI::DBD::SqlEngine::st); sub FETCH { ... } sub STORE { ... } package DBD::myDriver::Statement; @ISA = qw(DBI::DBD::SqlEngine::Statement); sub open_table { ... } package DBD::myDriver::Table; @ISA = qw(DBI::DBD::SqlEngine::Table); sub new { ... } =head1 DESCRIPTION DBI::DBD::SqlEngine abstracts the usage of SQL engines from the DBD. DBD authors can concentrate on the data retrieval they want to provide. It is strongly recommended that you read L<DBD::File::Developers> and L<DBD::File::Roadmap>, because many of the DBD::File API is provided by DBI::DBD::SqlEngine. Currently the API of DBI::DBD::SqlEngine is experimental and will likely change in the near future to provide the table meta data basics like DBD::File. DBI::DBD::SqlEngine expects that any driver in inheritance chain has a L<DBI prefix|DBI::DBD/The_database_handle_constructor>. =head2 Metadata The following attributes are handled by DBI itself and not by DBI::DBD::SqlEngine, thus they all work as expected: Active ActiveKids CachedKids CompatMode (Not used) InactiveDestroy AutoInactiveDestroy Kids PrintError RaiseError Warn (Not used) =head3 The following DBI attributes are handled by DBI::DBD::SqlEngine: =head4 AutoCommit Always on. =head4 ChopBlanks Works. =head4 NUM_OF_FIELDS Valid after C<< $sth->execute >>. =head4 NUM_OF_PARAMS Valid after C<< $sth->prepare >>. =head4 NAME Valid after C<< $sth->execute >>; probably undef for Non-Select statements. =head4 NULLABLE Not really working, always returns an array ref of ones, as DBD::CSV does not verify input data. Valid after C<< $sth->execute >>; undef for non-select statements. =head3 The following DBI attributes and methods are not supported: =over 4 =item bind_param_inout =item CursorName =item LongReadLen =item LongTruncOk =back =head3 DBI::DBD::SqlEngine specific attributes In addition to the DBI attributes, you can use the following dbh attributes: =head4 sql_engine_version Contains the module version of this driver (B<readonly>) =head4 sql_nano_version Contains the module version of DBI::SQL::Nano (B<readonly>) =head4 sql_statement_version Contains the module version of SQL::Statement, if available (B<readonly>) =head4 sql_handler Contains the SQL Statement engine, either DBI::SQL::Nano or SQL::Statement (B<readonly>). =head4 sql_parser_object Contains an instantiated instance of SQL::Parser (B<readonly>). This is filled when used first time (only when used with SQL::Statement). =head4 sql_sponge_driver Contains an internally used DBD::Sponge handle (B<readonly>). =head4 sql_valid_attrs Contains the list of valid attributes for each DBI::DBD::SqlEngine based driver (B<readonly>). =head4 sql_readonly_attrs Contains the list of those attributes which are readonly (B<readonly>). =head4 sql_identifier_case Contains how DBI::DBD::SqlEngine deals with non-quoted SQL identifiers: * SQL_IC_UPPER (1) means all identifiers are internally converted into upper-cased pendants * SQL_IC_LOWER (2) means all identifiers are internally converted into lower-cased pendants * SQL_IC_MIXED (4) means all identifiers are taken as they are These conversions happen if (and only if) no existing identifier matches. Once existing identifier is used as known. The SQL statement execution classes doesn't have to care, so don't expect C<sql_identifier_case> affects column names in statements like SELECT * FROM foo =head4 sql_quoted_identifier_case Contains how DBI::DBD::SqlEngine deals with quoted SQL identifiers (B<readonly>). It's fixated to SQL_IC_SENSITIVE (3), which is interpreted as SQL_IC_MIXED. =head4 sql_flags Contains additional flags to instantiate an SQL::Parser. Because an SQL::Parser is instantiated only once, it's recommended to set this flag before any statement is executed. =head4 sql_dialect Controls the dialect understood by SQL::Parser. Possible values (delivery state of SQL::Statement): * ANSI * CSV * AnyData Defaults to "CSV". Because an SQL::Parser is instantiated only once and SQL::Parser doesn't allow one to modify the dialect once instantiated, it's strongly recommended to set this flag before any statement is executed (best place is connect attribute hash). =head4 sql_engine_in_gofer This value has a true value in case of this driver is operated via L<DBD::Gofer>. The impact of being operated via Gofer is a read-only driver (not read-only databases!), so you cannot modify any attributes later - neither any table settings. B<But> you won't get an error in cases you modify table attributes, so please carefully watch C<sql_engine_in_gofer>. =head4 sql_meta Private data area which contains information about the tables this module handles. Table meta data might not be available until the table has been accessed for the first time e.g., by issuing a select on it however it is possible to pre-initialize attributes for each table you use. DBI::DBD::SqlEngine recognizes the (public) attributes C<col_names>, C<table_name>, C<readonly>, C<sql_data_source> and C<sql_identifier_case>. Be very careful when modifying attributes you do not know, the consequence might be a destroyed or corrupted table. While C<sql_meta> is a private and readonly attribute (which means, you cannot modify it's values), derived drivers might provide restricted write access through another attribute. Well known accessors are C<csv_tables> for L<DBD::CSV>, C<ad_tables> for L<DBD::AnyData> and C<dbm_tables> for L<DBD::DBM>. =head4 sql_table_source Controls the class which will be used for fetching available tables. See L</DBI::DBD::SqlEngine::TableSource> for details. =head4 sql_data_source Contains the class name to be used for opening tables. See L</DBI::DBD::SqlEngine::DataSource> for details. =head2 Driver private methods =head3 Default DBI methods =head4 data_sources The C<data_sources> method returns a list of subdirectories of the current directory in the form "dbi:CSV:f_dir=$dirname". If you want to read the subdirectories of another directory, use my ($drh) = DBI->install_driver ("CSV"); my (@list) = $drh->data_sources (f_dir => "/usr/local/csv_data"); =head4 list_tables This method returns a list of file names inside $dbh->{f_dir}. Example: my ($dbh) = DBI->connect ("dbi:CSV:f_dir=/usr/local/csv_data"); my (@list) = $dbh->func ("list_tables"); Note that the list includes all files contained in the directory, even those that have non-valid table names, from the view of SQL. =head3 Additional methods The following methods are only available via their documented name when DBI::DBD::SQlEngine is used directly. Because this is only reasonable for testing purposes, the real names must be used instead. Those names can be computed by replacing the C<sql_> in the method name with the driver prefix. =head4 sql_versions Signature: sub sql_versions (;$) { my ($table_name) = @_; $table_name ||= "."; ... } Returns the versions of the driver, including the DBI version, the Perl version, DBI::PurePerl version (if DBI::PurePerl is active) and the version of the SQL engine in use. my $dbh = DBI->connect ("dbi:File:"); my $sql_versions = $dbh->func( "sql_versions" ); print "$sql_versions\n"; __END__ # DBI::DBD::SqlEngine 0.05 using SQL::Statement 1.402 # DBI 1.623 # OS netbsd (6.99.12) # Perl 5.016002 (x86_64-netbsd-thread-multi) Called in list context, sql_versions will return an array containing each line as single entry. Some drivers might use the optional (table name) argument and modify version information related to the table (e.g. DBD::DBM provides storage backend information for the requested table, when it has a table name). =head4 sql_get_meta Signature: sub sql_get_meta ($$) { my ($table_name, $attrib) = @_; ... } Returns the value of a meta attribute set for a specific table, if any. See L<sql_meta> for the possible attributes. A table name of C<"."> (single dot) is interpreted as the default table. This will retrieve the appropriate attribute globally from the dbh. This has the same restrictions as C<< $dbh->{$attrib} >>. =head4 sql_set_meta Signature: sub sql_set_meta ($$$) { my ($table_name, $attrib, $value) = @_; ... } Sets the value of a meta attribute set for a specific table. See L<sql_meta> for the possible attributes. A table name of C<"."> (single dot) is interpreted as the default table which will set the specified attribute globally for the dbh. This has the same restrictions as C<< $dbh->{$attrib} = $value >>. =head4 sql_clear_meta Signature: sub sql_clear_meta ($) { my ($table_name) = @_; ... } Clears the table specific meta information in the private storage of the dbh. =head2 Extensibility =head3 DBI::DBD::SqlEngine::TableSource Provides data sources and table information on database driver and database handle level. package DBI::DBD::SqlEngine::TableSource; sub data_sources ($;$) { my ( $class, $drh, $attrs ) = @_; ... } sub avail_tables { my ( $class, $drh ) = @_; ... } The C<data_sources> method is called when the user invokes any of the following: @ary = DBI->data_sources($driver); @ary = DBI->data_sources($driver, \%attr); @ary = $dbh->data_sources(); @ary = $dbh->data_sources(\%attr); The C<avail_tables> method is called when the user invokes any of the following: @names = $dbh->tables( $catalog, $schema, $table, $type ); $sth = $dbh->table_info( $catalog, $schema, $table, $type ); $sth = $dbh->table_info( $catalog, $schema, $table, $type, \%attr ); $dbh->func( "list_tables" ); Every time where an C<\%attr> argument can be specified, this C<\%attr> object's C<sql_table_source> attribute is preferred over the C<$dbh> attribute or the driver default, eg. @ary = DBI->data_sources("dbi:CSV:", { f_dir => "/your/csv/tables", # note: this class doesn't comes with DBI sql_table_source => "DBD::File::Archive::Tar::TableSource", # scan tarballs instead of directories }); When you're going to implement such a DBD::File::Archive::Tar::TableSource class, remember to add correct attributes (including C<sql_table_source> and C<sql_data_source>) to the returned DSN's. =head3 DBI::DBD::SqlEngine::DataSource Provides base functionality for dealing with tables. It is primarily designed for allowing transparent access to files on disk or already opened (file-)streams (eg. for DBD::CSV). Derived classes shall be restricted to similar functionality, too (eg. opening streams from an archive, transparently compress/uncompress log files before parsing them, package DBI::DBD::SqlEngine::DataSource; sub complete_table_name ($$;$) { my ( $self, $meta, $table, $respect_case ) = @_; ... } The method C<complete_table_name> is called when first setting up the I<meta information> for a table: "SELECT user.id, user.name, user.shell FROM user WHERE ..." results in opening the table C<user>. First step of the table open process is completing the name. Let's imagine you're having a L<DBD::CSV> handle with following settings: $dbh->{sql_identifier_case} = SQL_IC_LOWER; $dbh->{f_ext} = '.lst'; $dbh->{f_dir} = '/data/web/adrmgr'; Those settings will result in looking for files matching C<[Uu][Ss][Ee][Rr](\.lst)?$> in C</data/web/adrmgr/>. The scanning of the directory C</data/web/adrmgr/> and the pattern match check will be done in C<DBD::File::DataSource::File> by the C<complete_table_name> method. If you intend to provide other sources of data streams than files, in addition to provide an appropriate C<complete_table_name> method, a method to open the resource is required: package DBI::DBD::SqlEngine::DataSource; sub open_data ($) { my ( $self, $meta, $attrs, $flags ) = @_; ... } After the method C<open_data> has been run successfully, the table's meta information are in a state which allowes the table's data accessor methods will be able to fetch/store row information. Implementation details heavily depends on the table implementation, whereby the most famous is surely L<DBD::File::Table|DBD::File/DBD::File::Table>. =head1 SQL ENGINES DBI::DBD::SqlEngine currently supports two SQL engines: L<SQL::Statement|SQL::Statement> and L<DBI::SQL::Nano::Statement_|DBI::SQL::Nano>. DBI::SQL::Nano supports a I<very> limited subset of SQL statements, but it might be faster for some very simple tasks. SQL::Statement in contrast supports a much larger subset of ANSI SQL. To use SQL::Statement, you need at least version 1.401 of SQL::Statement and the environment variable C<DBI_SQL_NANO> must not be set to a true value. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc DBI::DBD::SqlEngine You can also look for information at: =over 4 =item * RT: CPAN's request tracker L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=DBI> L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=SQL-Statement> =item * AnnoCPAN: Annotated CPAN documentation L<http://annocpan.org/dist/DBI> L<http://annocpan.org/dist/SQL-Statement> =item * CPAN Ratings L<http://cpanratings.perl.org/d/DBI> =item * Search CPAN L<http://search.cpan.org/dist/DBI/> =back =head2 Where can I go for more help? For questions about installation or usage, please ask on the dbi-dev@perl.org mailing list. If you have a bug report, patch or suggestion, please open a new report ticket on CPAN, if there is not already one for the issue you want to report. Of course, you can mail any of the module maintainers, but it is less likely to be missed if it is reported on RT. Report tickets should contain a detailed description of the bug or enhancement request you want to report and at least an easy way to verify/reproduce the issue and any supplied fix. Patches are always welcome, too. =head1 ACKNOWLEDGEMENTS Thanks to Tim Bunce, Martin Evans and H.Merijn Brand for their continued support while developing DBD::File, DBD::DBM and DBD::AnyData. Their support, hints and feedback helped to design and implement this module. =head1 AUTHOR This module is currently maintained by H.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com > The original authors are Jochen Wiedmann and Jeff Zucker. =head1 COPYRIGHT AND LICENSE Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack Copyright (C) 2004-2009 by Jeff Zucker Copyright (C) 1998-2004 by Jochen Wiedmann All rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =head1 SEE ALSO L<DBI>, L<DBD::File>, L<DBD::AnyData> and L<DBD::Sys>. =cut DBI/DBD/Metadata.pm 0000644 00000035305 15037233316 0007622 0 ustar 00 package DBI::DBD::Metadata; # $Id: Metadata.pm 14213 2010-06-30 19:29:18Z Martin $ # # Copyright (c) 1997-2003 Jonathan Leffler, Jochen Wiedmann, # Steffen Goeldner and Tim Bunce # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use Exporter (); use Carp; use DBI; use DBI::Const::GetInfoType qw(%GetInfoType); our @ISA = qw(Exporter); our @EXPORT = qw(write_getinfo_pm write_typeinfo_pm); our $VERSION = "2.014214"; =head1 NAME DBI::DBD::Metadata - Generate the code and data for some DBI metadata methods =head1 SYNOPSIS The idea is to extract metadata information from a good quality ODBC driver and use it to generate code and data to use in your own DBI driver for the same database. To generate code to support the get_info method: perl -MDBI::DBD::Metadata -e "write_getinfo_pm('dbi:ODBC:dsn-name','user','pass','Driver')" perl -MDBI::DBD::Metadata -e write_getinfo_pm dbi:ODBC:foo_db username password Driver To generate code to support the type_info method: perl -MDBI::DBD::Metadata -e "write_typeinfo_pm('dbi:ODBC:dsn-name','user','pass','Driver')" perl -MDBI::DBD::Metadata -e write_typeinfo_pm dbi:ODBC:dsn-name user pass Driver Where C<dbi:ODBC:dsn-name> is the connection to use to extract the data, and C<Driver> is the name of the driver you want the code generated for (the driver name gets embedded into the output in numerous places). =head1 Generating a GetInfo package for a driver The C<write_getinfo_pm> in the DBI::DBD::Metadata module generates a DBD::Driver::GetInfo package on standard output. This method generates a DBD::Driver::GetInfo package from the data source you specified in the parameter list or in the environment variable DBI_DSN. DBD::Driver::GetInfo should help a DBD author implement the DBI get_info() method. Because you are just creating this package, it is very unlikely that DBD::Driver already provides a good implementation for get_info(). Thus you will probably connect via DBD::ODBC. Once you are sure that it is producing reasonably sane data, you should typically redirect the standard output to lib/DBD/Driver/GetInfo.pm, and then hand edit the result. Do not forget to update your Makefile.PL and MANIFEST to include this as an extra PM file that should be installed. If you connect via DBD::ODBC, you should use version 0.38 or greater; Please take a critical look at the data returned! ODBC drivers vary dramatically in their quality. The generator assumes that most values are static and places these values directly in the %info hash. A few examples show the use of CODE references and the implementation via subroutines. It is very likely that you will have to write additional subroutines for values depending on the session state or server version, e.g. SQL_DBMS_VER. A possible implementation of DBD::Driver::db::get_info() may look like: sub get_info { my($dbh, $info_type) = @_; require DBD::Driver::GetInfo; my $v = $DBD::Driver::GetInfo::info{int($info_type)}; $v = $v->($dbh) if ref $v eq 'CODE'; return $v; } Please replace Driver (or "<foo>") with the name of your driver. Note that this stub function is generated for you by write_getinfo_pm function, but you must manually transfer the code to Driver.pm. =cut sub write_getinfo_pm { my ($dsn, $user, $pass, $driver) = @_ ? @_ : @ARGV; my $dbh = DBI->connect($dsn, $user, $pass, {RaiseError=>1}); $driver = "<foo>" unless defined $driver; print <<PERL; # Transfer this to ${driver}.pm # The get_info function was automatically generated by # DBI::DBD::Metadata::write_getinfo_pm v$DBI::DBD::Metadata::VERSION. package DBD::${driver}::db; # This line can be removed once transferred. sub get_info { my(\$dbh, \$info_type) = \@_; require DBD::${driver}::GetInfo; my \$v = \$DBD::${driver}::GetInfo::info{int(\$info_type)}; \$v = \$v->(\$dbh) if ref \$v eq 'CODE'; return \$v; } # Transfer this to lib/DBD/${driver}/GetInfo.pm # The \%info hash was automatically generated by # DBI::DBD::Metadata::write_getinfo_pm v$DBI::DBD::Metadata::VERSION. package DBD::${driver}::GetInfo; use strict; use DBD::${driver}; # Beware: not officially documented interfaces... # use DBI::Const::GetInfoType qw(\%GetInfoType); # use DBI::Const::GetInfoReturn qw(\%GetInfoReturnTypes \%GetInfoReturnValues); my \$sql_driver = '${driver}'; my \$sql_ver_fmt = '%02d.%02d.%04d'; # ODBC version string: ##.##.##### my \$sql_driver_ver = sprintf \$sql_ver_fmt, split (/\\./, \$DBD::${driver}::VERSION); PERL my $kw_map = 0; { # Informix CLI (ODBC) v3.81.0000 does not return a list of keywords. local $\ = "\n"; local $, = "\n"; my ($kw) = $dbh->get_info($GetInfoType{SQL_KEYWORDS}); if ($kw) { print "\nmy \@Keywords = qw(\n"; print sort split /,/, $kw; print ");\n\n"; print "sub sql_keywords {\n"; print q% return join ',', @Keywords;%; print "\n}\n\n"; $kw_map = 1; } } print <<'PERL'; sub sql_data_source_name { my $dbh = shift; return "dbi:$sql_driver:" . $dbh->{Name}; } sub sql_user_name { my $dbh = shift; # CURRENT_USER is a non-standard attribute, probably undef # Username is a standard DBI attribute return $dbh->{CURRENT_USER} || $dbh->{Username}; } PERL print "\nour \%info = (\n"; foreach my $key (sort keys %GetInfoType) { my $num = $GetInfoType{$key}; my $val = eval { $dbh->get_info($num); }; if ($key eq 'SQL_DATA_SOURCE_NAME') { $val = '\&sql_data_source_name'; } elsif ($key eq 'SQL_KEYWORDS') { $val = ($kw_map) ? '\&sql_keywords' : 'undef'; } elsif ($key eq 'SQL_DRIVER_NAME') { $val = "\$INC{'DBD/$driver.pm'}"; } elsif ($key eq 'SQL_DRIVER_VER') { $val = '$sql_driver_ver'; } elsif ($key eq 'SQL_USER_NAME') { $val = '\&sql_user_name'; } elsif (not defined $val) { $val = 'undef'; } elsif ($val eq '') { $val = "''"; } elsif ($val =~ /\D/) { $val =~ s/\\/\\\\/g; $val =~ s/'/\\'/g; $val = "'$val'"; } printf "%s %5d => %-30s # %s\n", (($val eq 'undef') ? '#' : ' '), $num, "$val,", $key; } print ");\n\n1;\n\n__END__\n"; } =head1 Generating a TypeInfo package for a driver The C<write_typeinfo_pm> function in the DBI::DBD::Metadata module generates on standard output the data needed for a driver's type_info_all method. It also provides default implementations of the type_info_all method for inclusion in the driver's main implementation file. The driver parameter is the name of the driver for which the methods will be generated; for the sake of examples, this will be "Driver". Typically, the dsn parameter will be of the form "dbi:ODBC:odbc_dsn", where the odbc_dsn is a DSN for one of the driver's databases. The user and pass parameters are the other optional connection parameters that will be provided to the DBI connect method. Once you are sure that it is producing reasonably sane data, you should typically redirect the standard output to lib/DBD/Driver/TypeInfo.pm, and then hand edit the result if necessary. Do not forget to update your Makefile.PL and MANIFEST to include this as an extra PM file that should be installed. Please take a critical look at the data returned! ODBC drivers vary dramatically in their quality. The generator assumes that all the values are static and places these values directly in the %info hash. A possible implementation of DBD::Driver::type_info_all() may look like: sub type_info_all { my ($dbh) = @_; require DBD::Driver::TypeInfo; return [ @$DBD::Driver::TypeInfo::type_info_all ]; } Please replace Driver (or "<foo>") with the name of your driver. Note that this stub function is generated for you by the write_typeinfo_pm function, but you must manually transfer the code to Driver.pm. =cut # These two are used by fmt_value... my %dbi_inv; my %sql_type_inv; #-DEBUGGING-# #sub print_hash #{ # my ($name, %hash) = @_; # print "Hash: $name\n"; # foreach my $key (keys %hash) # { # print "$key => $hash{$key}\n"; # } #} #-DEBUGGING-# sub inverse_hash { my (%hash) = @_; my (%inv); foreach my $key (keys %hash) { my $val = $hash{$key}; die "Double mapping for key value $val ($inv{$val}, $key)!" if (defined $inv{$val}); $inv{$val} = $key; } return %inv; } sub fmt_value { my ($num, $val) = @_; if (!defined $val) { $val = "undef"; } elsif ($val !~ m/^[-+]?\d+$/) { # All the numbers in type_info_all are integers! # Anything that isn't an integer is a string. # Ensure that no double quotes screw things up. $val =~ s/"/\\"/g if ($val =~ m/"/o); $val = qq{"$val"}; } elsif ($dbi_inv{$num} =~ m/^(SQL_)?DATA_TYPE$/) { # All numeric... $val = $sql_type_inv{$val} if (defined $sql_type_inv{$val}); } return $val; } sub write_typeinfo_pm { my ($dsn, $user, $pass, $driver) = @_ ? @_ : @ARGV; my $dbh = DBI->connect($dsn, $user, $pass, {AutoCommit=>1, RaiseError=>1}); $driver = "<foo>" unless defined $driver; print <<PERL; # Transfer this to ${driver}.pm # The type_info_all function was automatically generated by # DBI::DBD::Metadata::write_typeinfo_pm v$DBI::DBD::Metadata::VERSION. package DBD::${driver}::db; # This line can be removed once transferred. sub type_info_all { my (\$dbh) = \@_; require DBD::${driver}::TypeInfo; return [ \@\$DBD::${driver}::TypeInfo::type_info_all ]; } # Transfer this to lib/DBD/${driver}/TypeInfo.pm. # Don't forget to add version and intellectual property control information. # The \%type_info_all hash was automatically generated by # DBI::DBD::Metadata::write_typeinfo_pm v$DBI::DBD::Metadata::VERSION. package DBD::${driver}::TypeInfo; { require Exporter; require DynaLoader; \@ISA = qw(Exporter DynaLoader); \@EXPORT = qw(type_info_all); use DBI qw(:sql_types); PERL # Generate SQL type name mapping hashes. # See code fragment in DBI specification. my %sql_type_map; foreach (@{$DBI::EXPORT_TAGS{sql_types}}) { no strict 'refs'; $sql_type_map{$_} = &{"DBI::$_"}(); $sql_type_inv{$sql_type_map{$_}} = $_; } #-DEBUG-# print_hash("sql_type_map", %sql_type_map); #-DEBUG-# print_hash("sql_type_inv", %sql_type_inv); my %dbi_map = ( TYPE_NAME => 0, DATA_TYPE => 1, COLUMN_SIZE => 2, LITERAL_PREFIX => 3, LITERAL_SUFFIX => 4, CREATE_PARAMS => 5, NULLABLE => 6, CASE_SENSITIVE => 7, SEARCHABLE => 8, UNSIGNED_ATTRIBUTE => 9, FIXED_PREC_SCALE => 10, AUTO_UNIQUE_VALUE => 11, LOCAL_TYPE_NAME => 12, MINIMUM_SCALE => 13, MAXIMUM_SCALE => 14, SQL_DATA_TYPE => 15, SQL_DATETIME_SUB => 16, NUM_PREC_RADIX => 17, INTERVAL_PRECISION => 18, ); #-DEBUG-# print_hash("dbi_map", %dbi_map); %dbi_inv = inverse_hash(%dbi_map); #-DEBUG-# print_hash("dbi_inv", %dbi_inv); my $maxlen = 0; foreach my $key (keys %dbi_map) { $maxlen = length($key) if length($key) > $maxlen; } # Print the name/value mapping entry in the type_info_all array; my $fmt = " \%-${maxlen}s => \%2d,\n"; my $numkey = 0; my $maxkey = 0; print " \$type_info_all = [\n {\n"; foreach my $i (sort { $a <=> $b } keys %dbi_inv) { printf($fmt, $dbi_inv{$i}, $i); $numkey++; $maxkey = $i; } print " },\n"; print STDERR "### WARNING - Non-dense set of keys ($numkey keys, $maxkey max key)\n" unless $numkey = $maxkey + 1; my $h = $dbh->type_info_all; my @tia = @$h; my %odbc_map = map { uc $_ => $tia[0]->{$_} } keys %{$tia[0]}; shift @tia; # Remove the mapping reference. my $numtyp = $#tia; #-DEBUG-# print_hash("odbc_map", %odbc_map); # In theory, the key/number mapping sequence for %dbi_map # should be the same as the one from the ODBC driver. However, to # prevent the possibility of mismatches, and to deal with older # missing attributes or unexpected new ones, we chase back through # the %dbi_inv and %odbc_map hashes, generating @dbi_to_odbc # to map our new key number to the old one. # Report if @dbi_to_odbc is not an identity mapping. my @dbi_to_odbc; foreach my $num (sort { $a <=> $b } keys %dbi_inv) { # Find the name in %dbi_inv that matches this index number. my $dbi_key = $dbi_inv{$num}; #-DEBUG-# print "dbi_key = $dbi_key\n"; #-DEBUG-# print "odbc_key = $odbc_map{$dbi_key}\n"; # Find the index in %odbc_map that has this key. $dbi_to_odbc[$num] = (defined $odbc_map{$dbi_key}) ? $odbc_map{$dbi_key} : undef; } # Determine the length of the longest formatted value in each field my @len; for (my $i = 0; $i <= $numtyp; $i++) { my @odbc_val = @{$tia[$i]}; for (my $num = 0; $num <= $maxkey; $num++) { # Find the value of the entry in the @odbc_val array. my $val = (defined $dbi_to_odbc[$num]) ? $odbc_val[$dbi_to_odbc[$num]] : undef; $val = fmt_value($num, $val); #-DEBUG-# print "val = $val\n"; $val = "$val,"; $len[$num] = length($val) if !defined $len[$num] || length($val) > $len[$num]; } } # Generate format strings to left justify each string in maximum field width. my @fmt; for (my $i = 0; $i <= $maxkey; $i++) { $fmt[$i] = "%-$len[$i]s"; #-DEBUG-# print "fmt[$i] = $fmt[$i]\n"; } # Format the data from type_info_all for (my $i = 0; $i <= $numtyp; $i++) { my @odbc_val = @{$tia[$i]}; print " [ "; for (my $num = 0; $num <= $maxkey; $num++) { # Find the value of the entry in the @odbc_val array. my $val = (defined $dbi_to_odbc[$num]) ? $odbc_val[$dbi_to_odbc[$num]] : undef; $val = fmt_value($num, $val); printf $fmt[$num], "$val,"; } print " ],\n"; } print " ];\n\n 1;\n}\n\n__END__\n"; } 1; __END__ =head1 AUTHORS Jonathan Leffler <jleffler@us.ibm.com> (previously <jleffler@informix.com>), Jochen Wiedmann <joe@ispsoft.de>, Steffen Goeldner <sgoeldner@cpan.org>, and Tim Bunce <dbi-users@perl.org>. =cut DBI/DBD/SqlEngine/HowTo.pod 0000644 00000025113 15037233316 0011171 0 ustar 00 =head1 NAME DBI::DBD::SqlEngine::HowTo - Guide to create DBI::DBD::SqlEngine based driver =head1 SYNOPSIS perldoc DBI::DBD::SqlEngine::HowTo perldoc DBI perldoc DBI::DBD perldoc DBI::DBD::SqlEngine::Developers perldoc SQL::Eval perldoc DBI::DBD::SqlEngine perldoc DBI::DBD::SqlEngine::HowTo perldoc SQL::Statement::Embed =head1 DESCRIPTION This document provides a step-by-step guide, how to create a new C<DBI::DBD::SqlEngine> based DBD. It expects that you carefully read the L<DBI> documentation and that you're familiar with L<DBI::DBD> and had read and understood L<DBD::ExampleP>. This document addresses experienced developers who are really sure that they need to invest time when writing a new DBI Driver. Writing a DBI Driver is neither a weekend project nor an easy job for hobby coders after work. Expect one or two man-month of time for the first start. Those who are still reading, should be able to sing the rules of L<DBI::DBD/CREATING A NEW DRIVER>. =head1 CREATING DRIVER CLASSES Do you have an entry in DBI's DBD registry? DBI::DBD::SqlEngine expect having a unique prefix for every driver class in inheritance chain. It's easy to get a prefix - just drop the DBI team a note (L<DBI/GETTING_HELP>). If you want for some reason hide your work, take a look at L<Class::Method::Modifiers> how to wrap a private prefix method around existing C<driver_prefix>. For this guide, a prefix of C<foo_> is assumed. =head2 Sample Skeleton package DBD::Foo; use strict; use warnings; use vars qw($VERSION); use base qw(DBI::DBD::SqlEngine); use DBI (); $VERSION = "0.001"; package DBD::Foo::dr; use vars qw(@ISA $imp_data_size); @ISA = qw(DBI::DBD::SqlEngine::dr); $imp_data_size = 0; package DBD::Foo::db; use vars qw(@ISA $imp_data_size); @ISA = qw(DBI::DBD::SqlEngine::db); $imp_data_size = 0; package DBD::Foo::st; use vars qw(@ISA $imp_data_size); @ISA = qw(DBI::DBD::SqlEngine::st); $imp_data_size = 0; package DBD::Foo::Statement; use vars qw(@ISA); @ISA = qw(DBI::DBD::SqlEngine::Statement); package DBD::Foo::Table; use vars qw(@ISA); @ISA = qw(DBI::DBD::SqlEngine::Table); 1; Tiny, eh? And all you have now is a DBD named foo which will is able to deal with temporary tables, as long as you use L<SQL::Statement>. In L<DBI::SQL::Nano> environments, this DBD can do nothing. =head2 Deal with own attributes Before we start doing usable stuff with our DBI driver, we need to think about what we want to do and how we want to do it. Do we need tunable knobs accessible by users? Do we need status information? All this is handled in attributes of the database handles (be careful when your DBD is running "behind" a L<DBD::Gofer> proxy). How come the attributes into the DBD and how are they fetchable by the user? Good question, but you should know because you've read the L<DBI> documentation. C<DBI::DBD::SqlEngine::db::FETCH> and C<DBI::DBD::SqlEngine::db::STORE> taking care for you - all they need to know is which attribute names are valid and mutable or immutable. Tell them by adding C<init_valid_attributes> to your db class: sub init_valid_attributes { my $dbh = $_[0]; $dbh->SUPER::init_valid_attributes (); $dbh->{foo_valid_attrs} = { foo_version => 1, # contains version of this driver foo_valid_attrs => 1, # contains the valid attributes of foo drivers foo_readonly_attrs => 1, # contains immutable attributes of foo drivers foo_bar => 1, # contains the bar attribute foo_baz => 1, # contains the baz attribute foo_manager => 1, # contains the manager of the driver instance foo_manager_type => 1, # contains the manager class of the driver instance }; $dbh->{foo_readonly_attrs} = { foo_version => 1, # ensure no-one modifies the driver version foo_valid_attrs => 1, # do not permit one to add more valid attributes ... foo_readonly_attrs => 1, # ... or make the immutable mutable foo_manager => 1, # manager is set internally only }; return $dbh; } Woooho - but now the user cannot assign new managers? This is intended, overwrite C<STORE> to handle it! sub STORE ($$$) { my ( $dbh, $attrib, $value ) = @_; $dbh->SUPER::STORE( $attrib, $value ); # we're still alive, so no exception is thrown ... # by DBI::DBD::SqlEngine::db::STORE if ( $attrib eq "foo_manager_type" ) { $dbh->{foo_manager} = $dbh->{foo_manager_type}->new(); # ... probably correct some states based on the new # foo_manager_type - see DBD::Sys for an example } } But ... my driver runs without a manager until someone first assignes a C<foo_manager_type>. Well, no - there're two places where you can initialize defaults: sub init_default_attributes { my ($dbh, $phase) = @_; $dbh->SUPER::init_default_attributes($phase); if( 0 == $phase ) { # init all attributes which have no knowledge about # user settings from DSN or the attribute hash $dbh->{foo_manager_type} = "DBD::Foo::Manager"; } elsif( 1 == $phase ) { # init phase with more knowledge from DSN or attribute # hash $dbh->{foo_manager} = $dbh->{foo_manager_type}->new(); } return $dbh; } So far we can prevent the users to use our database driver as data storage for anything and everything. We care only about the real important stuff for peace on earth and alike attributes. But in fact, the driver still can't do anything. It can do less than nothing - meanwhile it's not a stupid storage area anymore. =head2 User comfort C<DBI::DBD::SqlEngine> since C<0.05> consolidates all persistent meta data of a table into a single structure stored in C<< $dbh->{sql_meta} >>. While DBI::DBD::SqlEngine provides only readonly access to this structure, modifications are still allowed. Primarily DBI::DBD::SqlEngine provides access via the setters C<new_sql_engine_meta>, C<get_sql_engine_meta>, C<get_single_table_meta>, C<set_single_table_meta>, C<set_sql_engine_meta> and C<clear_sql_engine_meta>. Those methods are easily accessible by the users via the C<< $dbh->func () >> interface provided by DBI. Well, many users don't feel comfortize when calling # don't require extension for tables cars $dbh->func ("cars", "f_ext", ".csv", "set_sql_engine_meta"); DBI::DBD::SqlEngine will inject a method into your driver to increase the user comfort to allow: # don't require extension for tables cars $dbh->foo_set_meta ("cars", "f_ext", ".csv"); Better, but here and there users likes to do: # don't require extension for tables cars $dbh->{foo_tables}->{cars}->{f_ext} = ".csv"; This interface is provided when derived DBD's define following in C<init_valid_attributes> (re-capture L</Deal with own attributes>): sub init_valid_attributes { my $dbh = $_[0]; $dbh->SUPER::init_valid_attributes (); $dbh->{foo_valid_attrs} = { foo_version => 1, # contains version of this driver foo_valid_attrs => 1, # contains the valid attributes of foo drivers foo_readonly_attrs => 1, # contains immutable attributes of foo drivers foo_bar => 1, # contains the bar attribute foo_baz => 1, # contains the baz attribute foo_manager => 1, # contains the manager of the driver instance foo_manager_type => 1, # contains the manager class of the driver instance foo_meta => 1, # contains the public interface to modify table meta attributes }; $dbh->{foo_readonly_attrs} = { foo_version => 1, # ensure no-one modifies the driver version foo_valid_attrs => 1, # do not permit one to add more valid attributes ... foo_readonly_attrs => 1, # ... or make the immutable mutable foo_manager => 1, # manager is set internally only foo_meta => 1, # ensure public interface to modify table meta attributes are immutable }; $dbh->{foo_meta} = "foo_tables"; return $dbh; } This provides a tied hash in C<< $dbh->{foo_tables} >> and a tied hash for each table's meta data in C<< $dbh->{foo_tables}->{$table_name} >>. Modifications on the table meta attributes are done using the table methods: sub get_table_meta_attr { ... } sub set_table_meta_attr { ... } Both methods can adjust the attribute name for compatibility reasons, e.g. when former versions of the DBD allowed different names to be used for the same flag: my %compat_map = ( abc => 'foo_abc', xyz => 'foo_xyz', ); __PACKAGE__->register_compat_map( \%compat_map ); If any user modification on a meta attribute needs reinitialization of the meta structure (in case of C<DBI::DBD::SqlEngine> these are the attributes C<f_file>, C<f_dir>, C<f_ext> and C<f_lockfile>), inform DBI::DBD::SqlEngine by doing my %reset_on_modify = ( foo_xyz => "foo_bar", foo_abc => "foo_bar", ); __PACKAGE__->register_reset_on_modify( \%reset_on_modify ); The next access to the table meta data will force DBI::DBD::SqlEngine to re-do the entire meta initialization process. Any further action which needs to be taken can handled in C<table_meta_attr_changed>: sub table_meta_attr_changed { my ($class, $meta, $attrib, $value) = @_; ... $class->SUPER::table_meta_attr_changed ($meta, $attrib, $value); } This is done before the new value is set in C<$meta>, so the attribute changed handler can act depending on the old value. =head2 Dealing with Tables Let's put some life into it - it's going to be time for it. This is a good point where a quick side step to L<SQL::Statement::Embed> will help to shorten the next paragraph. The documentation in SQL::Statement::Embed regarding embedding in own DBD's works pretty fine with SQL::Statement and DBI::SQL::Nano. Second look should go to L<DBI::DBD::SqlEngine::Developers> to get a picture over the driver part of the table API. Usually there isn't much to do for an easy driver. =head2 Testing Now you should have your first own DBD. Was easy, wasn't it? But does it work well? Prove it by writing tests and remember to use dbd_edit_mm_attribs from L<DBI::DBD> to ensure testing even rare cases. =head1 AUTHOR This guide is written by Jens Rehsack. DBI::DBD::SqlEngine is written by Jens Rehsack using code from DBD::File originally written by Jochen Wiedmann and Jeff Zucker. The module DBI::DBD::SqlEngine is currently maintained by H.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com > =head1 COPYRIGHT AND LICENSE Copyright (C) 2010 by H.Merijn Brand & Jens Rehsack All rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =cut DBI/DBD/SqlEngine/Developers.pod 0000644 00000065312 15037233316 0012246 0 ustar 00 =head1 NAME DBI::DBD::SqlEngine::Developers - Developers documentation for DBI::DBD::SqlEngine =head1 SYNOPSIS package DBD::myDriver; use base qw(DBI::DBD::SqlEngine); sub driver { ... my $drh = $proto->SUPER::driver($attr); ... return $drh->{class}; } sub CLONE { ... } package DBD::myDriver::dr; @ISA = qw(DBI::DBD::SqlEngine::dr); sub data_sources { ... } ... package DBD::myDriver::db; @ISA = qw(DBI::DBD::SqlEngine::db); sub init_valid_attributes { ... } sub init_default_attributes { ... } sub set_versions { ... } sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; ... } sub validate_FETCH_attr { my ($dbh, $attrib) = @_; ... } sub get_myd_versions { ... } sub get_avail_tables { ... } package DBD::myDriver::st; @ISA = qw(DBI::DBD::SqlEngine::st); sub FETCH { ... } sub STORE { ... } package DBD::myDriver::Statement; @ISA = qw(DBI::DBD::SqlEngine::Statement); sub open_table { ... } package DBD::myDriver::Table; @ISA = qw(DBI::DBD::SqlEngine::Table); my %reset_on_modify = ( myd_abc => "myd_foo", myd_mno => "myd_bar", ); __PACKAGE__->register_reset_on_modify( \%reset_on_modify ); my %compat_map = ( abc => 'foo_abc', xyz => 'foo_xyz', ); __PACKAGE__->register_compat_map( \%compat_map ); sub bootstrap_table_meta { ... } sub init_table_meta { ... } sub table_meta_attr_changed { ... } sub open_data { ... } sub new { ... } sub fetch_row { ... } sub push_row { ... } sub push_names { ... } sub seek { ... } sub truncate { ... } sub drop { ... } # optimize the SQL engine by add one or more of sub update_current_row { ... } # or sub update_specific_row { ... } # or sub update_one_row { ... } # or sub insert_new_row { ... } # or sub delete_current_row { ... } # or sub delete_one_row { ... } =head1 DESCRIPTION This document describes the interface of DBI::DBD::SqlEngine for DBD developers who write DBI::DBD::SqlEngine based DBI drivers. It supplements L<DBI::DBD> and L<DBI::DBD::SqlEngine::HowTo>, which you should read first. =head1 CLASSES Each DBI driver must provide a package global C<< driver >> method and three DBI related classes: =over 4 =item DBI::DBD::SqlEngine::dr Driver package, contains the methods DBI calls indirectly via DBI interface: DBI->connect ('DBI:DBM:', undef, undef, {}) # invokes package DBD::DBM::dr; @DBD::DBM::dr::ISA = qw(DBI::DBD::SqlEngine::dr); sub connect ($$;$$$) { ... } Similar for C<data_sources ()> and C<disconnect_all()>. Pure Perl DBI drivers derived from DBI::DBD::SqlEngine usually don't need to override any of the methods provided through the DBD::XXX::dr package. However if you need additional initialization not fitting in C<init_valid_attributes()> and C<init_default_attributes()> of you're ::db class, the connect method might be the final place to be modified. =item DBI::DBD::SqlEngine::db Contains the methods which are called through DBI database handles (C<< $dbh >>). e.g., $sth = $dbh->prepare ("select * from foo"); # returns the f_encoding setting for table foo $dbh->csv_get_meta ("foo", "f_encoding"); DBI::DBD::SqlEngine provides the typical methods required here. Developers who write DBI drivers based on DBI::DBD::SqlEngine need to override the methods C<< set_versions >> and C<< init_valid_attributes >>. =item DBI::DBD::SqlEngine::TieMeta; Provides the tie-magic for C<< $dbh->{$drv_pfx . "_meta"} >>. Routes C<STORE> through C<< $drv->set_sql_engine_meta() >> and C<FETCH> through C<< $drv->get_sql_engine_meta() >>. C<DELETE> is not supported, you have to execute a C<DROP TABLE> statement, where applicable. =item DBI::DBD::SqlEngine::TieTables; Provides the tie-magic for tables in C<< $dbh->{$drv_pfx . "_meta"} >>. Routes C<STORE> though C<< $tblClass->set_table_meta_attr() >> and C<FETCH> though C<< $tblClass->get_table_meta_attr() >>. C<DELETE> removes an attribute from the I<meta object> retrieved by C<< $tblClass->get_table_meta() >>. =item DBI::DBD::SqlEngine::st Contains the methods to deal with prepared statement handles. e.g., $sth->execute () or die $sth->errstr; =item DBI::DBD::SqlEngine::TableSource; Base class for 3rd party table sources: $dbh->{sql_table_source} = "DBD::Foo::TableSource"; =item DBI::DBD::SqlEngine::DataSource; Base class for 3rd party data sources: $dbh->{sql_data_source} = "DBD::Foo::DataSource"; =item DBI::DBD::SqlEngine::Statement; Base class for derived drivers statement engine. Implements C<open_table>. =item DBI::DBD::SqlEngine::Table; Contains tailoring between SQL engine's requirements and C<DBI::DBD::SqlEngine> magic for finding the right tables and storage. Builds bridges between C<sql_meta> handling of C<DBI::DBD::SqlEngine::db>, table initialization for SQL engines and I<meta object>'s attribute management for derived drivers. =back =head2 DBI::DBD::SqlEngine This is the main package containing the routines to initialize DBI::DBD::SqlEngine based DBI drivers. Primarily the C<< DBI::DBD::SqlEngine::driver >> method is invoked, either directly from DBI when the driver is initialized or from the derived class. package DBD::DBM; use base qw( DBI::DBD::SqlEngine ); sub driver { my ( $class, $attr ) = @_; ... my $drh = $class->SUPER::driver( $attr ); ... return $drh; } It is not necessary to implement your own driver method as long as additional initialization (e.g. installing more private driver methods) is not required. You do not need to call C<< setup_driver >> as DBI::DBD::SqlEngine takes care of it. =head2 DBI::DBD::SqlEngine::dr The driver package contains the methods DBI calls indirectly via the DBI interface (see L<DBI/DBI Class Methods>). DBI::DBD::SqlEngine based DBI drivers usually do not need to implement anything here, it is enough to do the basic initialization: package DBD:XXX::dr; @DBD::XXX::dr::ISA = qw (DBI::DBD::SqlEngine::dr); $DBD::XXX::dr::imp_data_size = 0; $DBD::XXX::dr::data_sources_attr = undef; $DBD::XXX::ATTRIBUTION = "DBD::XXX $DBD::XXX::VERSION by Hans Mustermann"; =head3 Methods provided by C<< DBI::DBD::SqlEngine::dr >>: =over 4 =item connect Supervises the driver bootstrap when calling DBI->connect( "dbi:Foo", , , { ... } ); First it instantiates a new driver using C<DBI::_new_dbh>. After that, initial bootstrap of the newly instantiated driver is done by $dbh->func( 0, "init_default_attributes" ); The first argument (C<0>) signals that this is the very first call to C<init_default_attributes>. Modern drivers understand that and do early stage setup here after calling package DBD::Foo::db; our @DBD::Foo::db::ISA = qw(DBI::DBD::SqlEngine::db); sub init_default_attributes { my ($dbh, $phase) = @_; $dbh->SUPER::init_default_attributes($phase); ...; # own setup code, maybe separated by phases } When the C<$phase> argument is passed down until C<DBI::DBD::SqlEngine::db::init_default_attributes>, C<connect()> recognizes a I<modern> driver and initializes the attributes from I<DSN> and I<$attr> arguments passed via C<< DBI->connect( $dsn, $user, $pass, \%attr ) >>. At the end of the attribute initialization after I<phase 0>, C<connect()> invoked C<init_default_attributes> again for I<phase 1>: $dbh->func( 1, "init_default_attributes" ); =item data_sources Returns a list of I<DSN>'s using the C<data_sources> method of the class specified in C<< $dbh->{sql_table_source} >> or via C<\%attr>: @ary = DBI->data_sources($driver); @ary = DBI->data_sources($driver, \%attr); =item disconnect_all C<DBI::DBD::SqlEngine> doesn't have an overall driver cache, so nothing happens here at all. =back =head2 DBI::DBD::SqlEngine::db This package defines the database methods, which are called via the DBI database handle C<< $dbh >>. =head3 Methods provided by C<< DBI::DBD::SqlEngine::db >>: =over 4 =item ping Simply returns the content of the C<< Active >> attribute. Override when your driver needs more complicated actions here. =item prepare Prepares a new SQL statement to execute. Returns a statement handle, C<< $sth >> - instance of the DBD:XXX::st. It is neither required nor recommended to override this method. =item validate_FETCH_attr Called by C<FETCH> to allow inherited drivers do their own attribute name validation. Calling convention is similar to C<FETCH> and the return value is the approved attribute name. return $validated_attribute_name; In case of validation fails (e.g. accessing private attribute or similar), C<validate_FETCH_attr> is permitted to throw an exception. =item FETCH Fetches an attribute of a DBI database object. Private handle attributes must have a prefix (this is mandatory). If a requested attribute is detected as a private attribute without a valid prefix, the driver prefix (written as C<$drv_prefix>) is added. The driver prefix is extracted from the attribute name and verified against C<< $dbh->{ $drv_prefix . "valid_attrs" } >> (when it exists). If the requested attribute value is not listed as a valid attribute, this method croaks. If the attribute is valid and readonly (listed in C<< $dbh->{ $drv_prefix . "readonly_attrs" } >> when it exists), a real copy of the attribute value is returned. So it's not possible to modify C<f_valid_attrs> from outside of DBI::DBD::SqlEngine::db or a derived class. =item validate_STORE_attr Called by C<STORE> to allow inherited drivers do their own attribute name validation. Calling convention is similar to C<STORE> and the return value is the approved attribute name followed by the approved new value. return ($validated_attribute_name, $validated_attribute_value); In case of validation fails (e.g. accessing private attribute or similar), C<validate_STORE_attr> is permitted to throw an exception (C<DBI::DBD::SqlEngine::db::validate_STORE_attr> throws an exception when someone tries to assign value other than C<SQL_IC_UPPER .. SQL_IC_MIXED> to C<< $dbh->{sql_identifier_case} >> or C<< $dbh->{sql_quoted_identifier_case} >>). =item STORE Stores a database private attribute. Private handle attributes must have a prefix (this is mandatory). If a requested attribute is detected as a private attribute without a valid prefix, the driver prefix (written as C<$drv_prefix>) is added. If the database handle has an attribute C<${drv_prefix}_valid_attrs> - for attribute names which are not listed in that hash, this method croaks. If the database handle has an attribute C<${drv_prefix}_readonly_attrs>, only attributes which are not listed there can be stored (once they are initialized). Trying to overwrite such an immutable attribute forces this method to croak. An example of a valid attributes list can be found in C<< DBI::DBD::SqlEngine::db::init_valid_attributes >>. =item set_versions This method sets the attributes C<< f_version >>, C<< sql_nano_version >>, C<< sql_statement_version >> and (if not prohibited by a restrictive C<< ${prefix}_valid_attrs >>) C<< ${prefix}_version >>. This method is called at the end of the C<< connect () >> phase. When overriding this method, do not forget to invoke the superior one. =item init_valid_attributes This method is called after the database handle is instantiated as the first attribute initialization. C<< DBI::DBD::SqlEngine::db::init_valid_attributes >> initializes the attributes C<sql_valid_attrs> and C<sql_readonly_attrs>. When overriding this method, do not forget to invoke the superior one, preferably before doing anything else. =item init_default_attributes This method is called after the database handle is instantiated to initialize the default attributes. It expects one argument: C<$phase>. If C<$phase> is not given, C<connect> of C<DBI::DBD::SqlEngine::dr> expects this is an old-fashioned driver which isn't capable of multi-phased initialization. C<< DBI::DBD::SqlEngine::db::init_default_attributes >> initializes the attributes C<sql_identifier_case>, C<sql_quoted_identifier_case>, C<sql_handler>, C<sql_init_order>, C<sql_meta>, C<sql_engine_version>, C<sql_nano_version> and C<sql_statement_version> when L<SQL::Statement> is available. It sets C<sql_init_order> to the given C<$phase>. When the derived implementor class provides the attribute to validate attributes (e.g. C<< $dbh->{dbm_valid_attrs} = {...}; >>) or the attribute containing the immutable attributes (e.g. C<< $dbh->{dbm_readonly_attrs} = {...}; >>), the attributes C<drv_valid_attrs>, C<drv_readonly_attrs> and C<drv_version> are added (when available) to the list of valid and immutable attributes (where C<drv_> is interpreted as the driver prefix). =item get_versions This method is called by the code injected into the instantiated driver to provide the user callable driver method C<< ${prefix}versions >> (e.g. C<< dbm_versions >>, C<< csv_versions >>, ...). The DBI::DBD::SqlEngine implementation returns all version information known by DBI::DBD::SqlEngine (e.g. DBI version, Perl version, DBI::DBD::SqlEngine version and the SQL handler version). C<get_versions> takes the C<$dbh> as the first argument and optionally a second argument containing a table name. The second argument is not evaluated in C<< DBI::DBD::SqlEngine::db::get_versions >> itself - but might be in the future. If the derived implementor class provides a method named C<get_${drv_prefix}versions>, this is invoked and the return value of it is associated to the derived driver name: if (my $dgv = $dbh->{ImplementorClass}->can ("get_" . $drv_prefix . "versions") { (my $derived_driver = $dbh->{ImplementorClass}) =~ s/::db$//; $versions{$derived_driver} = &$dgv ($dbh, $table); } Override it to add more version information about your module, (e.g. some kind of parser version in case of DBD::CSV, ...), if one line is not enough room to provide all relevant information. =item sql_parser_object Returns a L<SQL::Parser> instance, when C<< sql_handler >> is set to "SQL::Statement". The parser instance is stored in C<< sql_parser_object >>. It is not recommended to override this method. =item disconnect Disconnects from a database. All local table information is discarded and the C<< Active >> attribute is set to 0. =item type_info_all Returns information about all the types supported by DBI::DBD::SqlEngine. =item table_info Returns a statement handle which is prepared to deliver information about all known tables. =item list_tables Returns a list of all known table names. =item quote Quotes a string for use in SQL statements. =item commit Warns about a useless call (if warnings enabled) and returns. DBI::DBD::SqlEngine is typically a driver which commits every action instantly when executed. =item rollback Warns about a useless call (if warnings enabled) and returns. DBI::DBD::SqlEngine is typically a driver which commits every action instantly when executed. =back =head3 Attributes used by C<< DBI::DBD::SqlEngine::db >>: This section describes attributes which are important to developers of DBI Database Drivers derived from C<DBI::DBD::SqlEngine>. =over 4 =item sql_init_order This attribute contains a hash with priorities as key and an array containing the C<$dbh> attributes to be initialized during before/after other attributes. C<DBI::DBD::SqlEngine> initializes following attributes: $dbh->{sql_init_order} = { 0 => [qw( Profile RaiseError PrintError AutoCommit )], 90 => [ "sql_meta", $dbh->{$drv_pfx_meta} ? $dbh->{$drv_pfx_meta} : () ] } The default priority of not listed attribute keys is C<50>. It is well known that a lot of attributes needed to be set before some table settings are initialized. For example, for L<DBD::DBM>, when using my $dbh = DBI->connect( "dbi:DBM:", undef, undef, { f_dir => "/path/to/dbm/databases", dbm_type => "BerkeleyDB", dbm_mldbm => "JSON", # use MLDBM::Serializer::JSON dbm_tables => { quick => { dbm_type => "GDBM_File", dbm_MLDBM => "FreezeThaw" } } }); This defines a known table C<quick> which uses the L<GDBM_File> backend and L<FreezeThaw> as serializer instead of the overall default L<BerkeleyDB> and L<JSON>. B<But> all files containing the table data have to be searched in C<< $dbh->{f_dir} >>, which requires C<< $dbh->{f_dir} >> must be initialized before C<< $dbh->{sql_meta}->{quick} >> is initialized by C<bootstrap_table_meta> method of L</DBI::DBD::SqlEngine::Table> to get C<< $dbh->{sql_meta}->{quick}->{f_dir} >> being initialized properly. =item sql_init_phase This attribute is only set during the initialization steps of the DBI Database Driver. It contains the value of the currently run initialization phase. Currently supported phases are I<phase 0> and I<phase 1>. This attribute is set in C<init_default_attributes> and removed in C<init_done>. =item sql_engine_in_gofer This value has a true value in case of this driver is operated via L<DBD::Gofer>. The impact of being operated via Gofer is a read-only driver (not read-only databases!), so you cannot modify any attributes later - neither any table settings. B<But> you won't get an error in cases you modify table attributes, so please carefully watch C<sql_engine_in_gofer>. =item sql_table_source Names a class which is responsible for delivering I<data sources> and I<available tables> (Database Driver related). I<data sources> here refers to L<DBI/data_sources>, not C<sql_data_source>. See L</DBI::DBD::SqlEngine::TableSource> for details. =item sql_data_source Name a class which is responsible for handling table resources open and completing table names requested via SQL statements. See L</DBI::DBD::SqlEngine::DataSource> for details. =item sql_dialect Controls the dialect understood by SQL::Parser. Possible values (delivery state of SQL::Statement): * ANSI * CSV * AnyData Defaults to "CSV". Because an SQL::Parser is instantiated only once and SQL::Parser doesn't allow one to modify the dialect once instantiated, it's strongly recommended to set this flag before any statement is executed (best place is connect attribute hash). =back =head2 DBI::DBD::SqlEngine::st Contains the methods to deal with prepared statement handles: =over 4 =item bind_param Common routine to bind placeholders to a statement for execution. It is dangerous to override this method without detailed knowledge about the DBI::DBD::SqlEngine internal storage structure. =item execute Executes a previously prepared statement (with placeholders, if any). =item finish Finishes a statement handle, discards all buffered results. The prepared statement is not discarded so the statement can be executed again. =item fetch Fetches the next row from the result-set. This method may be rewritten in a later version and if it's overridden in a derived class, the derived implementation should not rely on the storage details. =item fetchrow_arrayref Alias for C<< fetch >>. =item FETCH Fetches statement handle attributes. Supported attributes (for full overview see L<DBI/Statement Handle Attributes>) are C<NAME>, C<TYPE>, C<PRECISION> and C<NULLABLE>. Each column is returned as C<NULLABLE> which might be wrong depending on the derived backend storage. If the statement handle has private attributes, they can be fetched using this method, too. B<Note> that statement attributes are not associated with any table used in this statement. This method usually requires extending in a derived implementation. See L<DBD::CSV> or L<DBD::DBM> for some example. =item STORE Allows storing of statement private attributes. No special handling is currently implemented here. =item rows Returns the number of rows affected by the last execute. This method might return C<undef>. =back =head2 DBI::DBD::SqlEngine::TableSource Provides data sources and table information on database driver and database handle level. package DBI::DBD::SqlEngine::TableSource; sub data_sources ($;$) { my ( $class, $drh, $attrs ) = @_; ... } sub avail_tables { my ( $class, $drh ) = @_; ... } The C<data_sources> method is called when the user invokes any of the following: @ary = DBI->data_sources($driver); @ary = DBI->data_sources($driver, \%attr); @ary = $dbh->data_sources(); @ary = $dbh->data_sources(\%attr); The C<avail_tables> method is called when the user invokes any of the following: @names = $dbh->tables( $catalog, $schema, $table, $type ); $sth = $dbh->table_info( $catalog, $schema, $table, $type ); $sth = $dbh->table_info( $catalog, $schema, $table, $type, \%attr ); $dbh->func( "list_tables" ); Every time where an C<\%attr> argument can be specified, this C<\%attr> object's C<sql_table_source> attribute is preferred over the C<$dbh> attribute or the driver default. =head2 DBI::DBD::SqlEngine::DataSource Provides base functionality for dealing with tables. It is primarily designed for allowing transparent access to files on disk or already opened (file-)streams (e.g. for DBD::CSV). Derived classes shall be restricted to similar functionality, too (e.g. opening streams from an archive, transparently compress/uncompress log files before parsing them, package DBI::DBD::SqlEngine::DataSource; sub complete_table_name ($$;$) { my ( $self, $meta, $table, $respect_case ) = @_; ... } The method C<complete_table_name> is called when first setting up the I<meta information> for a table: "SELECT user.id, user.name, user.shell FROM user WHERE ..." results in opening the table C<user>. First step of the table open process is completing the name. Let's imagine you're having a L<DBD::CSV> handle with following settings: $dbh->{sql_identifier_case} = SQL_IC_LOWER; $dbh->{f_ext} = '.lst'; $dbh->{f_dir} = '/data/web/adrmgr'; Those settings will result in looking for files matching C<[Uu][Ss][Ee][Rr](\.lst)?$> in C</data/web/adrmgr/>. The scanning of the directory C</data/web/adrmgr/> and the pattern match check will be done in C<DBD::File::DataSource::File> by the C<complete_table_name> method. If you intend to provide other sources of data streams than files, in addition to provide an appropriate C<complete_table_name> method, a method to open the resource is required: package DBI::DBD::SqlEngine::DataSource; sub open_data ($) { my ( $self, $meta, $attrs, $flags ) = @_; ... } After the method C<open_data> has been run successfully, the table's meta information are in a state which allows the table's data accessor methods will be able to fetch/store row information. Implementation details heavily depends on the table implementation, whereby the most famous is surely L<DBD::File::Table|DBD::File/DBD::File::Table>. =head2 DBI::DBD::SqlEngine::Statement Derives from DBI::SQL::Nano::Statement for unified naming when deriving new drivers. No additional feature is provided from here. =head2 DBI::DBD::SqlEngine::Table Derives from DBI::SQL::Nano::Table for unified naming when deriving new drivers. You should consult the documentation of C<< SQL::Eval::Table >> (see L<SQL::Eval>) to get more information about the abstract methods of the table's base class you have to override and a description of the table meta information expected by the SQL engines. =over 4 =item bootstrap_table_meta Initializes a table meta structure. Can be safely overridden in a derived class, as long as the C<< SUPER >> method is called at the end of the overridden method. It copies the following attributes from the database into the table meta data C<< $dbh->{ReadOnly} >> into C<< $meta->{readonly} >>, C<sql_identifier_case> and C<sql_data_source> and makes them sticky to the table. This method should be called before you attempt to map between file name and table name to ensure the correct directory, extension etc. are used. =item init_table_meta Initializes more attributes of the table meta data - usually more expensive ones (e.g. those which require class instantiations) - when the file name and the table name could mapped. =item get_table_meta Returns the table meta data. If there are none for the required table, a new one is initialized. When after bootstrapping a new I<table_meta> and L<completing the table name|/DBI::DBD::SqlEngine::DataSource> a mapping can be established between an existing I<table_meta> and the new bootstrapped one, the already existing is used and a mapping shortcut between the recent used table name and the already known table name is hold in C<< $dbh->{sql_meta_map} >>. When it fails, nothing is returned. On success, the name of the table and the meta data structure is returned. =item get_table_meta_attr Returns a single attribute from the table meta data. If the attribute name appears in C<%compat_map>, the attribute name is updated from there. =item set_table_meta_attr Sets a single attribute in the table meta data. If the attribute name appears in C<%compat_map>, the attribute name is updated from there. =item table_meta_attr_changed Called when an attribute of the meta data is modified. If the modified attribute requires to reset a calculated attribute, the calculated attribute is reset (deleted from meta data structure) and the I<initialized> flag is removed, too. The decision is made based on C<%register_reset_on_modify>. =item register_reset_on_modify Allows C<set_table_meta_attr> to reset meta attributes when special attributes are modified. For DBD::File, modifying one of C<f_file>, C<f_dir>, C<f_ext> or C<f_lockfile> will reset C<f_fqfn>. DBD::DBM extends the list for C<dbm_type> and C<dbm_mldbm> to reset the value of C<dbm_tietype>. If your DBD has calculated values in the meta data area, then call C<register_reset_on_modify>: my %reset_on_modify = ( "xxx_foo" => "xxx_bar" ); __PACKAGE__->register_reset_on_modify( \%reset_on_modify ); =item register_compat_map Allows C<get_table_meta_attr> and C<set_table_meta_attr> to update the attribute name to the current favored one: # from DBD::DBM my %compat_map = ( "dbm_ext" => "f_ext" ); __PACKAGE__->register_compat_map( \%compat_map ); =item open_data Called to open the table's data storage. This is silently forwarded to C<< $meta->{sql_data_source}->open_data() >>. After this is done, a derived class might add more steps in an overridden C<< open_file >> method. =item new Instantiates the table. This is done in 3 steps: 1. get the table meta data 2. open the data file 3. bless the table data structure using inherited constructor new It is not recommended to override the constructor of the table class. Find a reasonable place to add you extensions in one of the above four methods. =back =head1 AUTHOR The module DBI::DBD::SqlEngine is currently maintained by H.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com > =head1 COPYRIGHT AND LICENSE Copyright (C) 2010 by H.Merijn Brand & Jens Rehsack All rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =cut DBI/ProfileData.pm 0000644 00000047034 15037233316 0007705 0 ustar 00 package DBI::ProfileData; use strict; =head1 NAME DBI::ProfileData - manipulate DBI::ProfileDumper data dumps =head1 SYNOPSIS The easiest way to use this module is through the dbiprof frontend (see L<dbiprof> for details): dbiprof --number 15 --sort count This module can also be used to roll your own profile analysis: # load data from dbi.prof $prof = DBI::ProfileData->new(File => "dbi.prof"); # get a count of the records (unique paths) in the data set $count = $prof->count(); # sort by longest overall time $prof->sort(field => "longest"); # sort by longest overall time, least to greatest $prof->sort(field => "longest", reverse => 1); # exclude records with key2 eq 'disconnect' $prof->exclude(key2 => 'disconnect'); # exclude records with key1 matching /^UPDATE/i $prof->exclude(key1 => qr/^UPDATE/i); # remove all records except those where key1 matches /^SELECT/i $prof->match(key1 => qr/^SELECT/i); # produce a formatted report with the given number of items $report = $prof->report(number => 10); # clone the profile data set $clone = $prof->clone(); # get access to hash of header values $header = $prof->header(); # get access to sorted array of nodes $nodes = $prof->nodes(); # format a single node in the same style as report() $text = $prof->format($nodes->[0]); # get access to Data hash in DBI::Profile format $Data = $prof->Data(); =head1 DESCRIPTION This module offers the ability to read, manipulate and format L<DBI::ProfileDumper> profile data. Conceptually, a profile consists of a series of records, or nodes, each of each has a set of statistics and set of keys. Each record must have a unique set of keys, but there is no requirement that every record have the same number of keys. =head1 METHODS The following methods are supported by DBI::ProfileData objects. =cut our $VERSION = "2.010008"; use Carp qw(croak); use Symbol; use Fcntl qw(:flock); use DBI::Profile qw(dbi_profile_merge); # some constants for use with node data arrays sub COUNT () { 0 }; sub TOTAL () { 1 }; sub FIRST () { 2 }; sub SHORTEST () { 3 }; sub LONGEST () { 4 }; sub FIRST_AT () { 5 }; sub LAST_AT () { 6 }; sub PATH () { 7 }; my $HAS_FLOCK = (defined $ENV{DBI_PROFILE_FLOCK}) ? $ENV{DBI_PROFILE_FLOCK} : do { local $@; eval { flock STDOUT, 0; 1 } }; =head2 $prof = DBI::ProfileData->new(File => "dbi.prof") =head2 $prof = DBI::ProfileData->new(File => "dbi.prof", Filter => sub { ... }) =head2 $prof = DBI::ProfileData->new(Files => [ "dbi.prof.1", "dbi.prof.2" ]) Creates a new DBI::ProfileData object. Takes either a single file through the File option or a list of Files in an array ref. If multiple files are specified then the header data from the first file is used. =head3 Files Reference to an array of file names to read. =head3 File Name of file to read. Takes precedence over C<Files>. =head3 DeleteFiles If true, the files are deleted after being read. Actually the files are renamed with a C<deleteme> suffix before being read, and then, after reading all the files, they're all deleted together. The files are locked while being read which, combined with the rename, makes it safe to 'consume' files that are still being generated by L<DBI::ProfileDumper>. =head3 Filter The C<Filter> parameter can be used to supply a code reference that can manipulate the profile data as it is being read. This is most useful for editing SQL statements so that slightly different statements in the raw data will be merged and aggregated in the loaded data. For example: Filter => sub { my ($path_ref, $data_ref) = @_; s/foo = '.*?'/foo = '...'/ for @$path_ref; } Here's an example that performs some normalization on the SQL. It converts all numbers to C<N> and all quoted strings to C<S>. It can also convert digits to N within names. Finally, it summarizes long "IN (...)" clauses. It's aggressive and simplistic, but it's often sufficient, and serves as an example that you can tailor to suit your own needs: Filter => sub { my ($path_ref, $data_ref) = @_; local $_ = $path_ref->[0]; # whichever element contains the SQL Statement s/\b\d+\b/N/g; # 42 -> N s/\b0x[0-9A-Fa-f]+\b/N/g; # 0xFE -> N s/'.*?'/'S'/g; # single quoted strings (doesn't handle escapes) s/".*?"/"S"/g; # double quoted strings (doesn't handle escapes) # convert names like log_20001231 into log_NNNNNNNN, controlled by $opt{n} s/([a-z_]+)(\d{$opt{n},})/$1.('N' x length($2))/ieg if $opt{n}; # abbreviate massive "in (...)" statements and similar s!(([NS],){100,})!sprintf("$2,{repeated %d times}",length($1)/2)!eg; } It's often better to perform this kinds of normalization in the DBI while the data is being collected, to avoid too much memory being used by storing profile data for many different SQL statement. See L<DBI::Profile>. =cut sub new { my $pkg = shift; my $self = { Files => [ "dbi.prof" ], Filter => undef, DeleteFiles => 0, LockFile => $HAS_FLOCK, _header => {}, _nodes => [], _node_lookup => {}, _sort => 'none', @_ }; bless $self, $pkg; # File (singular) overrides Files (plural) $self->{Files} = [ $self->{File} ] if exists $self->{File}; $self->_read_files(); return $self; } # read files into _header and _nodes sub _read_files { my $self = shift; my $files = $self->{Files}; my $read_header = 0; my @files_to_delete; my $fh = gensym; foreach (@$files) { my $filename = $_; if ($self->{DeleteFiles}) { my $newfilename = $filename . ".deleteme"; if ($^O eq 'VMS') { # VMS default filesystem can only have one period $newfilename = $filename . 'deleteme'; } # will clobber an existing $newfilename rename($filename, $newfilename) or croak "Can't rename($filename, $newfilename): $!"; # On a versioned filesystem we want old versions to be removed 1 while (unlink $filename); $filename = $newfilename; } open($fh, "<", $filename) or croak("Unable to read profile file '$filename': $!"); # lock the file in case it's still being written to # (we'll be forced to wait till the write is complete) flock($fh, LOCK_SH) if $self->{LockFile}; if (-s $fh) { # not empty $self->_read_header($fh, $filename, $read_header ? 0 : 1); $read_header = 1; $self->_read_body($fh, $filename); } close($fh); # and release lock push @files_to_delete, $filename if $self->{DeleteFiles}; } for (@files_to_delete){ # for versioned file systems 1 while (unlink $_); if(-e $_){ warn "Can't delete '$_': $!"; } } # discard node_lookup now that all files are read delete $self->{_node_lookup}; } # read the header from the given $fh named $filename. Discards the # data unless $keep. sub _read_header { my ($self, $fh, $filename, $keep) = @_; # get profiler module id my $first = <$fh>; chomp $first; $self->{_profiler} = $first if $keep; # collect variables from the header local $_; while (<$fh>) { chomp; last unless length $_; /^(\S+)\s*=\s*(.*)/ or croak("Syntax error in header in $filename line $.: $_"); # XXX should compare new with existing (from previous file) # and warn if they differ (different program or path) $self->{_header}{$1} = unescape_key($2) if $keep; } } sub unescape_key { # inverse of escape_key() in DBI::ProfileDumper local $_ = shift; s/(?<!\\)\\n/\n/g; # expand \n, unless it's a \\n s/(?<!\\)\\r/\r/g; # expand \r, unless it's a \\r s/\\\\/\\/g; # \\ to \ return $_; } # reads the body of the profile data sub _read_body { my ($self, $fh, $filename) = @_; my $nodes = $self->{_nodes}; my $lookup = $self->{_node_lookup}; my $filter = $self->{Filter}; # build up node array my @path = (""); my (@data, $path_key); local $_; while (<$fh>) { chomp; if (/^\+\s+(\d+)\s?(.*)/) { # it's a key my ($key, $index) = ($2, $1 - 1); $#path = $index; # truncate path to new length $path[$index] = unescape_key($key); # place new key at end } elsif (s/^=\s+//) { # it's data - file in the node array with the path in index 0 # (the optional minus is to make it more robust against systems # with unstable high-res clocks - typically due to poor NTP config # of kernel SMP behaviour, i.e. min time may be -0.000008)) @data = split / /, $_; # corrupt data? croak("Invalid number of fields in $filename line $.: $_") unless @data == 7; croak("Invalid leaf node characters $filename line $.: $_") unless m/^[-+ 0-9eE\.]+$/; # hook to enable pre-processing of the data - such as mangling SQL # so that slightly different statements get treated as the same # and so merged in the results $filter->(\@path, \@data) if $filter; # elements of @path can't have NULLs in them, so this # forms a unique string per @path. If there's some way I # can get this without arbitrarily stripping out a # character I'd be happy to hear it! $path_key = join("\0",@path); # look for previous entry if (exists $lookup->{$path_key}) { # merge in the new data dbi_profile_merge($nodes->[$lookup->{$path_key}], \@data); } else { # insert a new node - nodes are arrays with data in 0-6 # and path data after that push(@$nodes, [ @data, @path ]); # record node in %seen $lookup->{$path_key} = $#$nodes; } } else { croak("Invalid line type syntax error in $filename line $.: $_"); } } } =head2 $copy = $prof->clone(); Clone a profile data set creating a new object. =cut sub clone { my $self = shift; # start with a simple copy my $clone = bless { %$self }, ref($self); # deep copy nodes $clone->{_nodes} = [ map { [ @$_ ] } @{$self->{_nodes}} ]; # deep copy header $clone->{_header} = { %{$self->{_header}} }; return $clone; } =head2 $header = $prof->header(); Returns a reference to a hash of header values. These are the key value pairs included in the header section of the L<DBI::ProfileDumper> data format. For example: $header = { Path => [ '!Statement', '!MethodName' ], Program => 't/42profile_data.t', }; Note that modifying this hash will modify the header data stored inside the profile object. =cut sub header { shift->{_header} } =head2 $nodes = $prof->nodes() Returns a reference the sorted nodes array. Each element in the array is a single record in the data set. The first seven elements are the same as the elements provided by L<DBI::Profile>. After that each key is in a separate element. For example: $nodes = [ [ 2, # 0, count 0.0312958955764771, # 1, total duration 0.000490069389343262, # 2, first duration 0.000176072120666504, # 3, shortest duration 0.00140702724456787, # 4, longest duration 1023115819.83019, # 5, time of first event 1023115819.86576, # 6, time of last event 'SELECT foo FROM bar' # 7, key1 'execute' # 8, key2 # 6+N, keyN ], # ... ]; Note that modifying this array will modify the node data stored inside the profile object. =cut sub nodes { shift->{_nodes} } =head2 $count = $prof->count() Returns the number of items in the profile data set. =cut sub count { scalar @{shift->{_nodes}} } =head2 $prof->sort(field => "field") =head2 $prof->sort(field => "field", reverse => 1) Sorts data by the given field. Available fields are: longest total count shortest The default sort is greatest to smallest, which is the opposite of the normal Perl meaning. This, however, matches the expected behavior of the dbiprof frontend. =cut # sorts data by one of the available fields { my %FIELDS = ( longest => LONGEST, total => TOTAL, count => COUNT, shortest => SHORTEST, key1 => PATH+0, key2 => PATH+1, key3 => PATH+2, ); sub sort { my $self = shift; my $nodes = $self->{_nodes}; my %opt = @_; croak("Missing required field option.") unless $opt{field}; my $index = $FIELDS{$opt{field}}; croak("Unrecognized sort field '$opt{field}'.") unless defined $index; # sort over index if ($opt{reverse}) { @$nodes = sort { $a->[$index] <=> $b->[$index] } @$nodes; } else { @$nodes = sort { $b->[$index] <=> $a->[$index] } @$nodes; } # remember how we're sorted $self->{_sort} = $opt{field}; return $self; } } =head2 $count = $prof->exclude(key2 => "disconnect") =head2 $count = $prof->exclude(key2 => "disconnect", case_sensitive => 1) =head2 $count = $prof->exclude(key1 => qr/^SELECT/i) Removes records from the data set that match the given string or regular expression. This method modifies the data in a permanent fashion - use clone() first to maintain the original data after exclude(). Returns the number of nodes left in the profile data set. =cut sub exclude { my $self = shift; my $nodes = $self->{_nodes}; my %opt = @_; # find key index number my ($index, $val); foreach (keys %opt) { if (/^key(\d+)$/) { $index = PATH + $1 - 1; $val = $opt{$_}; last; } } croak("Missing required keyN option.") unless $index; if (UNIVERSAL::isa($val,"Regexp")) { # regex match @$nodes = grep { $#$_ < $index or $_->[$index] !~ /$val/ } @$nodes; } else { if ($opt{case_sensitive}) { @$nodes = grep { $#$_ < $index or $_->[$index] ne $val; } @$nodes; } else { $val = lc $val; @$nodes = grep { $#$_ < $index or lc($_->[$index]) ne $val; } @$nodes; } } return scalar @$nodes; } =head2 $count = $prof->match(key2 => "disconnect") =head2 $count = $prof->match(key2 => "disconnect", case_sensitive => 1) =head2 $count = $prof->match(key1 => qr/^SELECT/i) Removes records from the data set that do not match the given string or regular expression. This method modifies the data in a permanent fashion - use clone() first to maintain the original data after match(). Returns the number of nodes left in the profile data set. =cut sub match { my $self = shift; my $nodes = $self->{_nodes}; my %opt = @_; # find key index number my ($index, $val); foreach (keys %opt) { if (/^key(\d+)$/) { $index = PATH + $1 - 1; $val = $opt{$_}; last; } } croak("Missing required keyN option.") unless $index; if (UNIVERSAL::isa($val,"Regexp")) { # regex match @$nodes = grep { $#$_ >= $index and $_->[$index] =~ /$val/ } @$nodes; } else { if ($opt{case_sensitive}) { @$nodes = grep { $#$_ >= $index and $_->[$index] eq $val; } @$nodes; } else { $val = lc $val; @$nodes = grep { $#$_ >= $index and lc($_->[$index]) eq $val; } @$nodes; } } return scalar @$nodes; } =head2 $Data = $prof->Data() Returns the same Data hash structure as seen in L<DBI::Profile>. This structure is not sorted. The nodes() structure probably makes more sense for most analysis. =cut sub Data { my $self = shift; my (%Data, @data, $ptr); foreach my $node (@{$self->{_nodes}}) { # traverse to key location $ptr = \%Data; foreach my $key (@{$node}[PATH .. $#$node - 1]) { $ptr->{$key} = {} unless exists $ptr->{$key}; $ptr = $ptr->{$key}; } # slice out node data $ptr->{$node->[-1]} = [ @{$node}[0 .. 6] ]; } return \%Data; } =head2 $text = $prof->format($nodes->[0]) Formats a single node into a human-readable block of text. =cut sub format { my ($self, $node) = @_; my $format; # setup keys my $keys = ""; for (my $i = PATH; $i <= $#$node; $i++) { my $key = $node->[$i]; # remove leading and trailing space $key =~ s/^\s+//; $key =~ s/\s+$//; # if key has newlines or is long take special precautions if (length($key) > 72 or $key =~ /\n/) { $keys .= " Key " . ($i - PATH + 1) . " :\n\n$key\n\n"; } else { $keys .= " Key " . ($i - PATH + 1) . " : $key\n"; } } # nodes with multiple runs get the long entry format, nodes with # just one run get a single count. if ($node->[COUNT] > 1) { $format = <<END; Count : %d Total Time : %3.6f seconds Longest Time : %3.6f seconds Shortest Time : %3.6f seconds Average Time : %3.6f seconds END return sprintf($format, @{$node}[COUNT,TOTAL,LONGEST,SHORTEST], $node->[TOTAL] / $node->[COUNT]) . $keys; } else { $format = <<END; Count : %d Time : %3.6f seconds END return sprintf($format, @{$node}[COUNT,TOTAL]) . $keys; } } =head2 $text = $prof->report(number => 10) Produces a report with the given number of items. =cut sub report { my $self = shift; my $nodes = $self->{_nodes}; my %opt = @_; croak("Missing required number option") unless exists $opt{number}; $opt{number} = @$nodes if @$nodes < $opt{number}; my $report = $self->_report_header($opt{number}); for (0 .. $opt{number} - 1) { $report .= sprintf("#" x 5 . "[ %d ]". "#" x 59 . "\n", $_ + 1); $report .= $self->format($nodes->[$_]); $report .= "\n"; } return $report; } # format the header for report() sub _report_header { my ($self, $number) = @_; my $nodes = $self->{_nodes}; my $node_count = @$nodes; # find total runtime and method count my ($time, $count) = (0,0); foreach my $node (@$nodes) { $time += $node->[TOTAL]; $count += $node->[COUNT]; } my $header = <<END; DBI Profile Data ($self->{_profiler}) END # output header fields while (my ($key, $value) = each %{$self->{_header}}) { $header .= sprintf(" %-13s : %s\n", $key, $value); } # output summary data fields $header .= sprintf(<<END, $node_count, $number, $self->{_sort}, $count, $time); Total Records : %d (showing %d, sorted by %s) Total Count : %d Total Runtime : %3.6f seconds END return $header; } 1; __END__ =head1 AUTHOR Sam Tregar <sam@tregar.com> =head1 COPYRIGHT AND LICENSE Copyright (C) 2002 Sam Tregar This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself. =cut DBI/DBD.pm 0000644 00000367113 15037233316 0006107 0 ustar 00 package DBI::DBD; # vim:ts=8:sw=4 use strict; use vars qw($VERSION); # set $VERSION early so we don't confuse PAUSE/CPAN etc # don't use Revision here because that's not in svn:keywords so that the # examples that use it below won't be messed up $VERSION = "12.015129"; # $Id: DBD.pm 15128 2012-02-04 20:51:39Z Tim $ # # Copyright (c) 1997-2006 Jonathan Leffler, Jochen Wiedmann, Steffen # Goeldner and Tim Bunce # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. =head1 NAME DBI::DBD - Perl DBI Database Driver Writer's Guide =head1 SYNOPSIS perldoc DBI::DBD =head2 Version and volatility This document is I<still> a minimal draft which is in need of further work. Please read the B<DBI> documentation first and fully. Then look at the implementation of some high-profile and regularly maintained drivers like DBD::Oracle, DBD::ODBC, DBD::Pg etc. (Those are no no particular order.) Then reread the B<DBI> specification and the code of those drivers again as you're reading this. It'll help. Where this document and the driver code differ it's likely that the driver code is more correct, especially if multiple drivers do the same thing. This document is a patchwork of contributions from various authors. More contributions (preferably as patches) are very welcome. =head1 DESCRIPTION This document is primarily intended to help people writing new database drivers for the Perl Database Interface (Perl DBI). It may also help others interested in discovering why the internals of a B<DBD> driver are written the way they are. This is a guide. Few (if any) of the statements in it are completely authoritative under all possible circumstances. This means you will need to use judgement in applying the guidelines in this document. If in I<any> doubt at all, please do contact the I<dbi-dev> mailing list (details given below) where Tim Bunce and other driver authors can help. =head1 CREATING A NEW DRIVER The first rule for creating a new database driver for the Perl DBI is very simple: B<DON'T!> There is usually a driver already available for the database you want to use, almost regardless of which database you choose. Very often, the database will provide an ODBC driver interface, so you can often use B<DBD::ODBC> to access the database. This is typically less convenient on a Unix box than on a Microsoft Windows box, but there are numerous options for ODBC driver managers on Unix too, and very often the ODBC driver is provided by the database supplier. Before deciding that you need to write a driver, do your homework to ensure that you are not wasting your energies. [As of December 2002, the consensus is that if you need an ODBC driver manager on Unix, then the unixODBC driver (available from L<http://www.unixodbc.org/>) is the way to go.] The second rule for creating a new database driver for the Perl DBI is also very simple: B<Don't -- get someone else to do it for you!> Nevertheless, there are occasions when it is necessary to write a new driver, often to use a proprietary language or API to access the database more swiftly, or more comprehensively, than an ODBC driver can. Then you should read this document very carefully, but with a suitably sceptical eye. If there is something in here that does not make any sense, question it. You might be right that the information is bogus, but don't come to that conclusion too quickly. =head2 URLs and mailing lists The primary web-site for locating B<DBI> software and information is http://dbi.perl.org/ There are two main and one auxiliary mailing lists for people working with B<DBI>. The primary lists are I<dbi-users@perl.org> for general users of B<DBI> and B<DBD> drivers, and I<dbi-dev@perl.org> mainly for B<DBD> driver writers (don't join the I<dbi-dev> list unless you have a good reason). The auxiliary list is I<dbi-announce@perl.org> for announcing new releases of B<DBI> or B<DBD> drivers. You can join these lists by accessing the web-site L<http://dbi.perl.org/>. The lists are closed so you cannot send email to any of the lists unless you join the list first. You should also consider monitoring the I<comp.lang.perl.*> newsgroups, especially I<comp.lang.perl.modules>. =head2 The Cheetah book The definitive book on Perl DBI is the Cheetah book, so called because of the picture on the cover. Its proper title is 'I<Programming the Perl DBI: Database programming with Perl>' by Alligator Descartes and Tim Bunce, published by O'Reilly Associates, February 2000, ISBN 1-56592-699-4. Buy it now if you have not already done so, and read it. =head2 Locating drivers Before writing a new driver, it is in your interests to find out whether there already is a driver for your database. If there is such a driver, it would be much easier to make use of it than to write your own! The primary web-site for locating Perl software is L<http://search.cpan.org/>. You should look under the various modules listings for the software you are after. For example: http://search.cpan.org/modlist/Database_Interfaces Follow the B<DBD::> and B<DBIx::> links at the top to see those subsets. See the B<DBI> docs for information on B<DBI> web sites and mailing lists. =head2 Registering a new driver Before going through any official registration process, you will need to establish that there is no driver already in the works. You'll do that by asking the B<DBI> mailing lists whether there is such a driver available, or whether anybody is working on one. When you get the go ahead, you will need to establish the name of the driver and a prefix for the driver. Typically, the name is based on the name of the database software it uses, and the prefix is a contraction of that. Hence, B<DBD::Oracle> has the name I<Oracle> and the prefix 'I<ora_>'. The prefix must be lowercase and contain no underscores other than the one at the end. This information will be recorded in the B<DBI> module. Apart from documentation purposes, registration is a prerequisite for L<installing private methods|DBI/install_method>. If you are writing a driver which will not be distributed on CPAN, then you should choose a prefix beginning with 'I<x_>', to avoid potential prefix collisions with drivers registered in the future. Thus, if you wrote a non-CPAN distributed driver called B<DBD::CustomDB>, the prefix might be 'I<x_cdb_>'. This document assumes you are writing a driver called B<DBD::Driver>, and that the prefix 'I<drv_>' is assigned to the driver. =head2 Two styles of database driver There are two distinct styles of database driver that can be written to work with the Perl DBI. Your driver can be written in pure Perl, requiring no C compiler. When feasible, this is the best solution, but most databases are not written in such a way that this can be done. Some examples of pure Perl drivers are B<DBD::File> and B<DBD::CSV>. Alternatively, and most commonly, your driver will need to use some C code to gain access to the database. This will be classified as a C/XS driver. =head2 What code will you write? There are a number of files that need to be written for either a pure Perl driver or a C/XS driver. There are no extra files needed only by a pure Perl driver, but there are several extra files needed only by a C/XS driver. =head3 Files common to pure Perl and C/XS drivers Assuming that your driver is called B<DBD::Driver>, these files are: =over 4 =item * F<Makefile.PL> =item * F<META.yml> =item * F<README> =item * F<MANIFEST> =item * F<Driver.pm> =item * F<lib/Bundle/DBD/Driver.pm> =item * F<lib/DBD/Driver/Summary.pm> =item * F<t/*.t> =back The first four files are mandatory. F<Makefile.PL> is used to control how the driver is built and installed. The F<README> file tells people who download the file about how to build the module and any prerequisite software that must be installed. The F<MANIFEST> file is used by the standard Perl module distribution mechanism. It lists all the source files that need to be distributed with your module. F<Driver.pm> is what is loaded by the B<DBI> code; it contains the methods peculiar to your driver. Although the F<META.yml> file is not B<required> you are advised to create one. Of particular importance are the I<build_requires> and I<configure_requires> attributes which newer CPAN modules understand. You use these to tell the CPAN module (and CPANPLUS) that your build and configure mechanisms require DBI. The best reference for META.yml (at the time of writing) is L<http://module-build.sourceforge.net/META-spec-v1.4.html>. You can find a reasonable example of a F<META.yml> in DBD::ODBC. The F<lib/Bundle/DBD/Driver.pm> file allows you to specify other Perl modules on which yours depends in a format that allows someone to type a simple command and ensure that all the pre-requisites are in place as well as building your driver. The F<lib/DBD/Driver/Summary.pm> file contains (an updated version of) the information that was included - or that would have been included - in the appendices of the Cheetah book as a summary of the abilities of your driver and the associated database. The files in the F<t> subdirectory are unit tests for your driver. You should write your tests as stringently as possible, while taking into account the diversity of installations that you can encounter: =over 4 =item * Your tests should not casually modify operational databases. =item * You should never damage existing tables in a database. =item * You should code your tests to use a constrained name space within the database. For example, the tables (and all other named objects) that are created could all begin with 'I<dbd_drv_>'. =item * At the end of a test run, there should be no testing objects left behind in the database. =item * If you create any databases, you should remove them. =item * If your database supports temporary tables that are automatically removed at the end of a session, then exploit them as often as possible. =item * Try to make your tests independent of each other. If you have a test F<t/t11dowhat.t> that depends upon the successful running of F<t/t10thingamy.t>, people cannot run the single test case F<t/t11dowhat.t>. Further, running F<t/t11dowhat.t> twice in a row is likely to fail (at least, if F<t/t11dowhat.t> modifies the database at all) because the database at the start of the second run is not what you saw at the start of the first run. =item * Document in your F<README> file what you do, and what privileges people need to do it. =item * You can, and probably should, sequence your tests by including a test number before an abbreviated version of the test name; the tests are run in the order in which the names are expanded by shell-style globbing. =item * It is in your interests to ensure that your tests work as widely as possible. =back Many drivers also install sub-modules B<DBD::Driver::SubModule> for any of a variety of different reasons, such as to support the metadata methods (see the discussion of L</METADATA METHODS> below). Such sub-modules are conventionally stored in the directory F<lib/DBD/Driver>. The module itself would usually be in a file F<SubModule.pm>. All such sub-modules should themselves be version stamped (see the discussions far below). =head3 Extra files needed by C/XS drivers The software for a C/XS driver will typically contain at least four extra files that are not relevant to a pure Perl driver. =over 4 =item * F<Driver.xs> =item * F<Driver.h> =item * F<dbdimp.h> =item * F<dbdimp.c> =back The F<Driver.xs> file is used to generate C code that Perl can call to gain access to the C functions you write that will, in turn, call down onto your database software. The F<Driver.h> header is a stylized header that ensures you can access the necessary Perl and B<DBI> macros, types, and function declarations. The F<dbdimp.h> is used to specify which functions have been implemented by your driver. The F<dbdimp.c> file is where you write the C code that does the real work of translating between Perl-ish data types and what the database expects to use and return. There are some (mainly small, but very important) differences between the contents of F<Makefile.PL> and F<Driver.pm> for pure Perl and C/XS drivers, so those files are described both in the section on creating a pure Perl driver and in the section on creating a C/XS driver. Obviously, you can add extra source code files to the list. =head2 Requirements on a driver and driver writer To be remotely useful, your driver must be implemented in a format that allows it to be distributed via CPAN, the Comprehensive Perl Archive Network (L<http://www.cpan.org/> and L<http://search.cpan.org>). Of course, it is easier if you do not have to meet this criterion, but you will not be able to ask for much help if you do not do so, and no-one is likely to want to install your module if they have to learn a new installation mechanism. =head1 CREATING A PURE PERL DRIVER Writing a pure Perl driver is surprisingly simple. However, there are some problems you should be aware of. The best option is of course picking up an existing driver and carefully modifying one method after the other. Also look carefully at B<DBD::AnyData> and B<DBD::Template>. As an example we take a look at the B<DBD::File> driver, a driver for accessing plain files as tables, which is part of the B<DBD::CSV> package. The minimal set of files we have to implement are F<Makefile.PL>, F<README>, F<MANIFEST> and F<Driver.pm>. =head2 Pure Perl version of Makefile.PL You typically start with writing F<Makefile.PL>, a Makefile generator. The contents of this file are described in detail in the L<ExtUtils::MakeMaker> man pages. It is definitely a good idea if you start reading them. At least you should know about the variables I<CONFIGURE>, I<DEFINED>, I<PM>, I<DIR>, I<EXE_FILES>, I<INC>, I<LIBS>, I<LINKTYPE>, I<NAME>, I<OPTIMIZE>, I<PL_FILES>, I<VERSION>, I<VERSION_FROM>, I<clean>, I<depend>, I<realclean> from the L<ExtUtils::MakeMaker> man page: these are used in almost any F<Makefile.PL>. Additionally read the section on I<Overriding MakeMaker Methods> and the descriptions of the I<distcheck>, I<disttest> and I<dist> targets: They will definitely be useful for you. Of special importance for B<DBI> drivers is the I<postamble> method from the L<ExtUtils::MM_Unix> man page. For Emacs users, I recommend the I<libscan> method, which removes Emacs backup files (file names which end with a tilde '~') from lists of files. Now an example, I use the word C<Driver> wherever you should insert your driver's name: # -*- perl -*- use ExtUtils::MakeMaker; WriteMakefile( dbd_edit_mm_attribs( { 'NAME' => 'DBD::Driver', 'VERSION_FROM' => 'Driver.pm', 'INC' => '', 'dist' => { 'SUFFIX' => '.gz', 'COMPRESS' => 'gzip -9f' }, 'realclean' => { FILES => '*.xsi' }, 'PREREQ_PM' => '1.03', 'CONFIGURE' => sub { eval {require DBI::DBD;}; if ($@) { warn $@; exit 0; } my $dbi_arch_dir = dbd_dbi_arch_dir(); if (exists($opts{INC})) { return {INC => "$opts{INC} -I$dbi_arch_dir"}; } else { return {INC => "-I$dbi_arch_dir"}; } } }, { create_pp_tests => 1}) ); package MY; sub postamble { return main::dbd_postamble(@_); } sub libscan { my ($self, $path) = @_; ($path =~ m/\~$/) ? undef : $path; } Note the calls to C<dbd_edit_mm_attribs()> and C<dbd_postamble()>. The second hash reference in the call to C<dbd_edit_mm_attribs()> (containing C<create_pp_tests()>) is optional; you should not use it unless your driver is a pure Perl driver (that is, it does not use C and XS code). Therefore, the call to C<dbd_edit_mm_attribs()> is not relevant for C/XS drivers and may be omitted; simply use the (single) hash reference containing NAME etc as the only argument to C<WriteMakefile()>. Note that the C<dbd_edit_mm_attribs()> code will fail if you do not have a F<t> sub-directory containing at least one test case. I<PREREQ_PM> tells MakeMaker that DBI (version 1.03 in this case) is required for this module. This will issue a warning that DBI 1.03 is missing if someone attempts to install your DBD without DBI 1.03. See I<CONFIGURE> below for why this does not work reliably in stopping cpan testers failing your module if DBI is not installed. I<CONFIGURE> is a subroutine called by MakeMaker during C<WriteMakefile>. By putting the C<require DBI::DBD> in this section we can attempt to load DBI::DBD but if it is missing we exit with success. As we exit successfully without creating a Makefile when DBI::DBD is missing cpan testers will not report a failure. This may seem at odds with I<PREREQ_PM> but I<PREREQ_PM> does not cause C<WriteMakefile> to fail (unless you also specify PREREQ_FATAL which is strongly discouraged by MakeMaker) so C<WriteMakefile> would continue to call C<dbd_dbi_arch_dir> and fail. All drivers must use C<dbd_postamble()> or risk running into problems. Note the specification of I<VERSION_FROM>; the named file (F<Driver.pm>) will be scanned for the first line that looks like an assignment to I<$VERSION>, and the subsequent text will be used to determine the version number. Note the commentary in L<ExtUtils::MakeMaker> on the subject of correctly formatted version numbers. If your driver depends upon external software (it usually will), you will need to add code to ensure that your environment is workable before the call to C<WriteMakefile()>. If you need to check for the existence of an external library and perhaps modify I<INC> to include the paths to where the external library header files are located and you cannot find the library or header files make sure you output a message saying they cannot be found but C<exit 0> (success) B<before> calling C<WriteMakefile> or CPAN testers will fail your module if the external library is not found. A full-fledged I<Makefile.PL> can be quite large (for example, the files for B<DBD::Oracle> and B<DBD::Informix> are both over 1000 lines long, and the Informix one uses - and creates - auxiliary modules too). See also L<ExtUtils::MakeMaker> and L<ExtUtils::MM_Unix>. Consider using L<CPAN::MakeMaker> in place of I<ExtUtils::MakeMaker>. =head2 README The L<README> file should describe what the driver is for, the pre-requisites for the build process, the actual build process, how to report errors, and who to report them to. Users will find ways of breaking the driver build and test process which you would never even have dreamed to be possible in your worst nightmares. Therefore, you need to write this document defensively, precisely and concisely. As always, use the F<README> from one of the established drivers as a basis for your own; the version in B<DBD::Informix> is worth a look as it has been quite successful in heading off problems. =over 4 =item * Note that users will have versions of Perl and B<DBI> that are both older and newer than you expected, but this will seldom cause much trouble. When it does, it will be because you are using features of B<DBI> that are not supported in the version they are using. =item * Note that users will have versions of the database software that are both older and newer than you expected. You will save yourself time in the long run if you can identify the range of versions which have been tested and warn about versions which are not known to be OK. =item * Note that many people trying to install your driver will not be experts in the database software. =item * Note that many people trying to install your driver will not be experts in C or Perl. =back =head2 MANIFEST The F<MANIFEST> will be used by the Makefile's dist target to build the distribution tar file that is uploaded to CPAN. It should list every file that you want to include in your distribution, one per line. =head2 lib/Bundle/DBD/Driver.pm The CPAN module provides an extremely powerful bundle mechanism that allows you to specify pre-requisites for your driver. The primary pre-requisite is B<Bundle::DBI>; you may want or need to add some more. With the bundle set up correctly, the user can type: perl -MCPAN -e 'install Bundle::DBD::Driver' and Perl will download, compile, test and install all the Perl modules needed to build your driver. The prerequisite modules are listed in the C<CONTENTS> section, with the official name of the module followed by a dash and an informal name or description. =over 4 =item * Listing B<Bundle::DBI> as the main pre-requisite simplifies life. =item * Don't forget to list your driver. =item * Note that unless the DBMS is itself a Perl module, you cannot list it as a pre-requisite in this file. =item * You should keep the version of the bundle the same as the version of your driver. =item * You should add configuration management, copyright, and licencing information at the top. =back A suitable skeleton for this file is shown below. package Bundle::DBD::Driver; $VERSION = '0.01'; 1; __END__ =head1 NAME Bundle::DBD::Driver - A bundle to install all DBD::Driver related modules =head1 SYNOPSIS C<perl -MCPAN -e 'install Bundle::DBD::Driver'> =head1 CONTENTS Bundle::DBI - Bundle for DBI by TIMB (Tim Bunce) DBD::Driver - DBD::Driver by YOU (Your Name) =head1 DESCRIPTION This bundle includes all the modules used by the Perl Database Interface (DBI) driver for Driver (DBD::Driver), assuming the use of DBI version 1.13 or later, created by Tim Bunce. If you've not previously used the CPAN module to install any bundles, you will be interrogated during its setup phase. But when you've done it once, it remembers what you told it. You could start by running: C<perl -MCPAN -e 'install Bundle::CPAN'> =head1 SEE ALSO Bundle::DBI =head1 AUTHOR Your Name E<lt>F<you@yourdomain.com>E<gt> =head1 THANKS This bundle was created by ripping off Bundle::libnet created by Graham Barr E<lt>F<gbarr@ti.com>E<gt>, and radically simplified with some information from Jochen Wiedmann E<lt>F<joe@ispsoft.de>E<gt>. The template was then included in the DBI::DBD documentation by Jonathan Leffler E<lt>F<jleffler@informix.com>E<gt>. =cut =head2 lib/DBD/Driver/Summary.pm There is no substitute for taking the summary file from a driver that was documented in the Perl book (such as B<DBD::Oracle> or B<DBD::Informix> or B<DBD::ODBC>, to name but three), and adapting it to describe the facilities available via B<DBD::Driver> when accessing the Driver database. =head2 Pure Perl version of Driver.pm The F<Driver.pm> file defines the Perl module B<DBD::Driver> for your driver. It will define a package B<DBD::Driver> along with some version information, some variable definitions, and a function C<driver()> which will have a more or less standard structure. It will also define three sub-packages of B<DBD::Driver>: =over 4 =item DBD::Driver::dr with methods C<connect()>, C<data_sources()> and C<disconnect_all()>; =item DBD::Driver::db with methods such as C<prepare()>; =item DBD::Driver::st with methods such as C<execute()> and C<fetch()>. =back The F<Driver.pm> file will also contain the documentation specific to B<DBD::Driver> in the format used by perldoc. In a pure Perl driver, the F<Driver.pm> file is the core of the implementation. You will need to provide all the key methods needed by B<DBI>. Now let's take a closer look at an excerpt of F<File.pm> as an example. We ignore things that are common to any module (even non-DBI modules) or really specific to the B<DBD::File> package. =head3 The DBD::Driver package =head4 The header package DBD::File; use strict; use vars qw($VERSION $drh); $VERSION = "1.23.00" # Version number of DBD::File This is where the version number of your driver is specified, and is where F<Makefile.PL> looks for this information. Please ensure that any other modules added with your driver are also version stamped so that CPAN does not get confused. It is recommended that you use a two-part (1.23) or three-part (1.23.45) version number. Also consider the CPAN system, which gets confused and considers version 1.10 to precede version 1.9, so that using a raw CVS, RCS or SCCS version number is probably not appropriate (despite being very common). For Subversion you could use: $VERSION = "12.012346"; (use lots of leading zeros on the second portion so if you move the code to a shared repository like svn.perl.org the much larger revision numbers won't cause a problem, at least not for a few years). For RCS or CVS you can use: $VERSION = "11.22"; which pads out the fractional part with leading zeros so all is well (so long as you don't go past x.99) $drh = undef; # holds driver handle once initialized This is where the driver handle will be stored, once created. Note that you may assume there is only one handle for your driver. =head4 The driver constructor The C<driver()> method is the driver handle constructor. Note that the C<driver()> method is in the B<DBD::Driver> package, not in one of the sub-packages B<DBD::Driver::dr>, B<DBD::Driver::db>, or B<DBD::Driver::db>. sub driver { return $drh if $drh; # already created - return same one my ($class, $attr) = @_; $class .= "::dr"; DBD::Driver::db->install_method('drv_example_dbh_method'); DBD::Driver::st->install_method('drv_example_sth_method'); # not a 'my' since we use it above to prevent multiple drivers $drh = DBI::_new_drh($class, { 'Name' => 'File', 'Version' => $VERSION, 'Attribution' => 'DBD::File by Jochen Wiedmann', }) or return undef; return $drh; } This is a reasonable example of how B<DBI> implements its handles. There are three kinds: B<driver handles> (typically stored in I<$drh>; from now on called I<drh> or I<$drh>), B<database handles> (from now on called I<dbh> or I<$dbh>) and B<statement handles> (from now on called I<sth> or I<$sth>). The prototype of C<DBI::_new_drh()> is $drh = DBI::_new_drh($class, $public_attrs, $private_attrs); with the following arguments: =over 4 =item I<$class> is typically the class for your driver, (for example, "DBD::File::dr"), passed as the first argument to the C<driver()> method. =item I<$public_attrs> is a hash ref to attributes like I<Name>, I<Version>, and I<Attribution>. These are processed and used by B<DBI>. You had better not make any assumptions about them nor should you add private attributes here. =item I<$private_attrs> This is another (optional) hash ref with your private attributes. B<DBI> will store them and otherwise leave them alone. =back The C<DBI::_new_drh()> method and the C<driver()> method both return C<undef> for failure (in which case you must look at I<$DBI::err> and I<$DBI::errstr> for the failure information, because you have no driver handle to use). =head4 Using install_method() to expose driver-private methods DBD::Foo::db->install_method($method_name, \%attr); Installs the driver-private method named by $method_name into the DBI method dispatcher so it can be called directly, avoiding the need to use the func() method. It is called as a static method on the driver class to which the method belongs. The method name must begin with the corresponding registered driver-private prefix. For example, for DBD::Oracle $method_name must being with 'C<ora_>', and for DBD::AnyData it must begin with 'C<ad_>'. The C<\%attr> attributes can be used to provide fine control over how the DBI dispatcher handles the dispatching of the method. However it's undocumented at the moment. See the IMA_* #define's in DBI.xs and the O=>0x000x values in the initialization of %DBI::DBI_methods in DBI.pm. (Volunteers to polish up and document the interface are very welcome to get in touch via dbi-dev@perl.org). Methods installed using install_method default to the standard error handling behaviour for DBI methods: clearing err and errstr before calling the method, and checking for errors to trigger RaiseError etc. on return. This differs from the default behaviour of func(). Note for driver authors: The DBD::Foo::xx->install_method call won't work until the class-hierarchy has been setup. Normally the DBI looks after that just after the driver is loaded. This means install_method() can't be called at the time the driver is loaded unless the class-hierarchy is set up first. The way to do that is to call the setup_driver() method: DBI->setup_driver('DBD::Foo'); before using install_method(). =head4 The CLONE special subroutine Also needed here, in the B<DBD::Driver> package, is a C<CLONE()> method that will be called by perl when an interpreter is cloned. All your C<CLONE()> method needs to do, currently, is clear the cached I<$drh> so the new interpreter won't start using the cached I<$drh> from the old interpreter: sub CLONE { undef $drh; } See L<http://search.cpan.org/dist/perl/pod/perlmod.pod#Making_your_module_threadsafe> for details. =head3 The DBD::Driver::dr package The next lines of code look as follows: package DBD::Driver::dr; # ====== DRIVER ====== $DBD::Driver::dr::imp_data_size = 0; Note that no I<@ISA> is needed here, or for the other B<DBD::Driver::*> classes, because the B<DBI> takes care of that for you when the driver is loaded. *FIX ME* Explain what the imp_data_size is, so that implementors aren't practicing cargo-cult programming. =head4 The database handle constructor The database handle constructor is the driver's (hence the changed namespace) C<connect()> method: sub connect { my ($drh, $dr_dsn, $user, $auth, $attr) = @_; # Some database specific verifications, default settings # and the like can go here. This should only include # syntax checks or similar stuff where it's legal to # 'die' in case of errors. # For example, many database packages requires specific # environment variables to be set; this could be where you # validate that they are set, or default them if they are not set. my $driver_prefix = "drv_"; # the assigned prefix for this driver # Process attributes from the DSN; we assume ODBC syntax # here, that is, the DSN looks like var1=val1;...;varN=valN foreach my $var ( split /;/, $dr_dsn ) { my ($attr_name, $attr_value) = split '=', $var, 2; return $drh->set_err($DBI::stderr, "Can't parse DSN part '$var'") unless defined $attr_value; # add driver prefix to attribute name if it doesn't have it already $attr_name = $driver_prefix.$attr_name unless $attr_name =~ /^$driver_prefix/o; # Store attribute into %$attr, replacing any existing value. # The DBI will STORE() these into $dbh after we've connected $attr->{$attr_name} = $attr_value; } # Get the attributes we'll use to connect. # We use delete here because these no need to STORE them my $db = delete $attr->{drv_database} || delete $attr->{drv_db} or return $drh->set_err($DBI::stderr, "No database name given in DSN '$dr_dsn'"); my $host = delete $attr->{drv_host} || 'localhost'; my $port = delete $attr->{drv_port} || 123456; # Assume you can attach to your database via drv_connect: my $connection = drv_connect($db, $host, $port, $user, $auth) or return $drh->set_err($DBI::stderr, "Can't connect to $dr_dsn: ..."); # create a 'blank' dbh (call superclass constructor) my ($outer, $dbh) = DBI::_new_dbh($drh, { Name => $dr_dsn }); $dbh->STORE('Active', 1 ); $dbh->{drv_connection} = $connection; return $outer; } This is mostly the same as in the I<driver handle constructor> above. The arguments are described in L<DBI>. The constructor C<DBI::_new_dbh()> is called, returning a database handle. The constructor's prototype is: ($outer, $inner) = DBI::_new_dbh($drh, $public_attr, $private_attr); with similar arguments to those in the I<driver handle constructor>, except that the I<$class> is replaced by I<$drh>. The I<Name> attribute is a standard B<DBI> attribute (see L<DBI/Database Handle Attributes>). In scalar context, only the outer handle is returned. Note the use of the C<STORE()> method for setting the I<dbh> attributes. That's because within the driver code, the handle object you have is the 'inner' handle of a tied hash, not the outer handle that the users of your driver have. Because you have the inner handle, tie magic doesn't get invoked when you get or set values in the hash. This is often very handy for speed when you want to get or set simple non-special driver-specific attributes. However, some attribute values, such as those handled by the B<DBI> like I<PrintError>, don't actually exist in the hash and must be read via C<$h-E<gt>FETCH($attrib)> and set via C<$h-E<gt>STORE($attrib, $value)>. If in any doubt, use these methods. =head4 The data_sources() method The C<data_sources()> method must populate and return a list of valid data sources, prefixed with the "I<dbi:Driver>" incantation that allows them to be used in the first argument of the C<DBI-E<gt>connect()> method. An example of this might be scanning the F<$HOME/.odbcini> file on Unix for ODBC data sources (DSNs). As a trivial example, consider a fixed list of data sources: sub data_sources { my($drh, $attr) = @_; my(@list) = (); # You need more sophisticated code than this to set @list... push @list, "dbi:Driver:abc"; push @list, "dbi:Driver:def"; push @list, "dbi:Driver:ghi"; # End of code to set @list return @list; } =head4 The disconnect_all() method If you need to release any resources when the driver is unloaded, you can provide a disconnect_all method. =head4 Other driver handle methods If you need any other driver handle methods, they can follow here. =head4 Error handling It is quite likely that something fails in the connect method. With B<DBD::File> for example, you might catch an error when setting the current directory to something not existent by using the (driver-specific) I<f_dir> attribute. To report an error, you use the C<set_err()> method: $h->set_err($err, $errmsg, $state); This will ensure that the error is recorded correctly and that I<RaiseError> and I<PrintError> etc are handled correctly. Typically you'll always use the method instance, aka your method's first argument. As C<set_err()> always returns C<undef> your error handling code can usually be simplified to something like this: return $h->set_err($err, $errmsg, $state) if ...; =head3 The DBD::Driver::db package package DBD::Driver::db; # ====== DATABASE ====== $DBD::Driver::db::imp_data_size = 0; =head4 The statement handle constructor There's nothing much new in the statement handle constructor, which is the C<prepare()> method: sub prepare { my ($dbh, $statement, @attribs) = @_; # create a 'blank' sth my ($outer, $sth) = DBI::_new_sth($dbh, { Statement => $statement }); $sth->STORE('NUM_OF_PARAMS', ($statement =~ tr/?//)); $sth->{drv_params} = []; return $outer; } This is still the same -- check the arguments and call the super class constructor C<DBI::_new_sth()>. Again, in scalar context, only the outer handle is returned. The I<Statement> attribute should be cached as shown. Note the prefix I<drv_> in the attribute names: it is required that all your private attributes use a lowercase prefix unique to your driver. As mentioned earlier in this document, the B<DBI> contains a registry of known driver prefixes and may one day warn about unknown attributes that don't have a registered prefix. Note that we parse the statement here in order to set the attribute I<NUM_OF_PARAMS>. The technique illustrated is not very reliable; it can be confused by question marks appearing in quoted strings, delimited identifiers or in SQL comments that are part of the SQL statement. We could set I<NUM_OF_PARAMS> in the C<execute()> method instead because the B<DBI> specification explicitly allows a driver to defer this, but then the user could not call C<bind_param()>. =head4 Transaction handling Pure Perl drivers will rarely support transactions. Thus your C<commit()> and C<rollback()> methods will typically be quite simple: sub commit { my ($dbh) = @_; if ($dbh->FETCH('Warn')) { warn("Commit ineffective while AutoCommit is on"); } 0; } sub rollback { my ($dbh) = @_; if ($dbh->FETCH('Warn')) { warn("Rollback ineffective while AutoCommit is on"); } 0; } Or even simpler, just use the default methods provided by the B<DBI> that do nothing except return C<undef>. The B<DBI>'s default C<begin_work()> method can be used by inheritance. =head4 The STORE() and FETCH() methods These methods (that we have already used, see above) are called for you, whenever the user does a: $dbh->{$attr} = $val; or, respectively, $val = $dbh->{$attr}; See L<perltie> for details on tied hash refs to understand why these methods are required. The B<DBI> will handle most attributes for you, in particular attributes like I<RaiseError> or I<PrintError>. All you have to do is handle your driver's private attributes and any attributes, like I<AutoCommit> and I<ChopBlanks>, that the B<DBI> can't handle for you. A good example might look like this: sub STORE { my ($dbh, $attr, $val) = @_; if ($attr eq 'AutoCommit') { # AutoCommit is currently the only standard attribute we have # to consider. if (!$val) { die "Can't disable AutoCommit"; } return 1; } if ($attr =~ m/^drv_/) { # Handle only our private attributes here # Note that we could trigger arbitrary actions. # Ideally we should warn about unknown attributes. $dbh->{$attr} = $val; # Yes, we are allowed to do this, return 1; # but only for our private attributes } # Else pass up to DBI to handle for us $dbh->SUPER::STORE($attr, $val); } sub FETCH { my ($dbh, $attr) = @_; if ($attr eq 'AutoCommit') { return 1; } if ($attr =~ m/^drv_/) { # Handle only our private attributes here # Note that we could trigger arbitrary actions. return $dbh->{$attr}; # Yes, we are allowed to do this, # but only for our private attributes } # Else pass up to DBI to handle $dbh->SUPER::FETCH($attr); } The B<DBI> will actually store and fetch driver-specific attributes (with all lowercase names) without warning or error, so there's actually no need to implement driver-specific any code in your C<FETCH()> and C<STORE()> methods unless you need extra logic/checks, beyond getting or setting the value. Unless your driver documentation indicates otherwise, the return value of the C<STORE()> method is unspecified and the caller shouldn't use that value. =head4 Other database handle methods As with the driver package, other database handle methods may follow here. In particular you should consider a (possibly empty) C<disconnect()> method and possibly a C<quote()> method if B<DBI>'s default isn't correct for you. You may also need the C<type_info_all()> and C<get_info()> methods, as described elsewhere in this document. Where reasonable use C<$h-E<gt>SUPER::foo()> to call the B<DBI>'s method in some or all cases and just wrap your custom behavior around that. If you want to use private trace flags you'll probably want to be able to set them by name. To do that you'll need to define a C<parse_trace_flag()> method (note that's "parse_trace_flag", singular, not "parse_trace_flags", plural). sub parse_trace_flag { my ($h, $name) = @_; return 0x01000000 if $name eq 'foo'; return 0x02000000 if $name eq 'bar'; return 0x04000000 if $name eq 'baz'; return 0x08000000 if $name eq 'boo'; return 0x10000000 if $name eq 'bop'; return $h->SUPER::parse_trace_flag($name); } All private flag names must be lowercase, and all private flags must be in the top 8 of the 32 bits. =head3 The DBD::Driver::st package This package follows the same pattern the others do: package DBD::Driver::st; $DBD::Driver::st::imp_data_size = 0; =head4 The execute() and bind_param() methods This is perhaps the most difficult method because we have to consider parameter bindings here. In addition to that, there are a number of statement attributes which must be set for inherited B<DBI> methods to function correctly (see L</Statement attributes> below). We present a simplified implementation by using the I<drv_params> attribute from above: sub bind_param { my ($sth, $pNum, $val, $attr) = @_; my $type = (ref $attr) ? $attr->{TYPE} : $attr; if ($type) { my $dbh = $sth->{Database}; $val = $dbh->quote($sth, $type); } my $params = $sth->{drv_params}; $params->[$pNum-1] = $val; 1; } sub execute { my ($sth, @bind_values) = @_; # start of by finishing any previous execution if still active $sth->finish if $sth->FETCH('Active'); my $params = (@bind_values) ? \@bind_values : $sth->{drv_params}; my $numParam = $sth->FETCH('NUM_OF_PARAMS'); return $sth->set_err($DBI::stderr, "Wrong number of parameters") if @$params != $numParam; my $statement = $sth->{'Statement'}; for (my $i = 0; $i < $numParam; $i++) { $statement =~ s/?/$params->[$i]/; # XXX doesn't deal with quoting etc! } # Do anything ... we assume that an array ref of rows is # created and store it: $sth->{'drv_data'} = $data; $sth->{'drv_rows'} = @$data; # number of rows $sth->STORE('NUM_OF_FIELDS') = $numFields; $sth->{Active} = 1; @$data || '0E0'; } There are a number of things you should note here. We initialize the I<NUM_OF_FIELDS> and I<Active> attributes here, because they are essential for C<bind_columns()> to work. We use attribute C<$sth-E<gt>{Statement}> which we created within C<prepare()>. The attribute C<$sth-E<gt>{Database}>, which is nothing else than the I<dbh>, was automatically created by B<DBI>. Finally, note that (as specified in the B<DBI> specification) we return the string C<'0E0'> instead of the number 0, so that the result tests true but equal to zero. $sth->execute() or die $sth->errstr; =head4 The execute_array(), execute_for_fetch() and bind_param_array() methods In general, DBD's only need to implement C<execute_for_fetch()> and C<bind_param_array>. DBI's default C<execute_array()> will invoke the DBD's C<execute_for_fetch()> as needed. The following sequence describes the interaction between DBI C<execute_array> and a DBD's C<execute_for_fetch>: =over =item 1 App calls C<$sth-E<gt>execute_array(\%attrs, @array_of_arrays)> =item 2 If C<@array_of_arrays> was specified, DBI processes C<@array_of_arrays> by calling DBD's C<bind_param_array()>. Alternately, App may have directly called C<bind_param_array()> =item 3 DBD validates and binds each array =item 4 DBI retrieves the validated param arrays from DBD's ParamArray attribute =item 5 DBI calls DBD's C<execute_for_fetch($fetch_tuple_sub, \@tuple_status)>, where C<&$fetch_tuple_sub> is a closure to iterate over the returned ParamArray values, and C<\@tuple_status> is an array to receive the disposition status of each tuple. =item 6 DBD iteratively calls C<&$fetch_tuple_sub> to retrieve parameter tuples to be added to its bulk database operation/request. =item 7 when DBD reaches the limit of tuples it can handle in a single database operation/request, or the C<&$fetch_tuple_sub> indicates no more tuples by returning undef, the DBD executes the bulk operation, and reports the disposition of each tuple in \@tuple_status. =item 8 DBD repeats steps 6 and 7 until all tuples are processed. =back E.g., here's the essence of L<DBD::Oracle>'s execute_for_fetch: while (1) { my @tuple_batch; for (my $i = 0; $i < $batch_size; $i++) { push @tuple_batch, [ @{$fetch_tuple_sub->() || last} ]; } last unless @tuple_batch; my $res = ora_execute_array($sth, \@tuple_batch, scalar(@tuple_batch), $tuple_batch_status); push @$tuple_status, @$tuple_batch_status; } Note that DBI's default execute_array()/execute_for_fetch() implementation requires the use of positional (i.e., '?') placeholders. Drivers which B<require> named placeholders must either emulate positional placeholders (e.g., see L<DBD::Oracle>), or must implement their own execute_array()/execute_for_fetch() methods to properly sequence bound parameter arrays. =head4 Fetching data Only one method needs to be written for fetching data, C<fetchrow_arrayref()>. The other methods, C<fetchrow_array()>, C<fetchall_arrayref()>, etc, as well as the database handle's C<select*> methods are part of B<DBI>, and call C<fetchrow_arrayref()> as necessary. sub fetchrow_arrayref { my ($sth) = @_; my $data = $sth->{drv_data}; my $row = shift @$data; if (!$row) { $sth->STORE(Active => 0); # mark as no longer active return undef; } if ($sth->FETCH('ChopBlanks')) { map { $_ =~ s/\s+$//; } @$row; } return $sth->_set_fbav($row); } *fetch = \&fetchrow_arrayref; # required alias for fetchrow_arrayref Note the use of the method C<_set_fbav()> -- this is required so that C<bind_col()> and C<bind_columns()> work. If an error occurs which leaves the I<$sth> in a state where remaining rows can't be fetched then I<Active> should be turned off before the method returns. The C<rows()> method for this driver can be implemented like this: sub rows { shift->{drv_rows} } because it knows in advance how many rows it has fetched. Alternatively you could delete that method and so fallback to the B<DBI>'s own method which does the right thing based on the number of calls to C<_set_fbav()>. =head4 The more_results method If your driver doesn't support multiple result sets, then don't even implement this method. Otherwise, this method needs to get the statement handle ready to fetch results from the next result set, if there is one. Typically you'd start with: $sth->finish; then you should delete all the attributes from the attribute cache that may no longer be relevant for the new result set: delete $sth->{$_} for qw(NAME TYPE PRECISION SCALE ...); for drivers written in C use: hv_delete((HV*)SvRV(sth), "NAME", 4, G_DISCARD); hv_delete((HV*)SvRV(sth), "NULLABLE", 8, G_DISCARD); hv_delete((HV*)SvRV(sth), "NUM_OF_FIELDS", 13, G_DISCARD); hv_delete((HV*)SvRV(sth), "PRECISION", 9, G_DISCARD); hv_delete((HV*)SvRV(sth), "SCALE", 5, G_DISCARD); hv_delete((HV*)SvRV(sth), "TYPE", 4, G_DISCARD); Don't forget to also delete, or update, any driver-private attributes that may not be correct for the next resultset. The NUM_OF_FIELDS attribute is a special case. It should be set using STORE: $sth->STORE(NUM_OF_FIELDS => 0); /* for DBI <= 1.53 */ $sth->STORE(NUM_OF_FIELDS => $new_value); for drivers written in C use this incantation: /* Adjust NUM_OF_FIELDS - which also adjusts the row buffer size */ DBIc_NUM_FIELDS(imp_sth) = 0; /* for DBI <= 1.53 */ DBIc_STATE(imp_xxh)->set_attr_k(sth, sv_2mortal(newSVpvn("NUM_OF_FIELDS",13)), 0, sv_2mortal(newSViv(mysql_num_fields(imp_sth->result))) ); For DBI versions prior to 1.54 you'll also need to explicitly adjust the number of elements in the row buffer array (C<DBIc_FIELDS_AV(imp_sth)>) to match the new result set. Fill any new values with newSV(0) not &sv_undef. Alternatively you could free DBIc_FIELDS_AV(imp_sth) and set it to null, but that would mean bind_columns() wouldn't work across result sets. =head4 Statement attributes The main difference between I<dbh> and I<sth> attributes is, that you should implement a lot of attributes here that are required by the B<DBI>, such as I<NAME>, I<NULLABLE>, I<TYPE>, etc. See L<DBI/Statement Handle Attributes> for a complete list. Pay attention to attributes which are marked as read only, such as I<NUM_OF_PARAMS>. These attributes can only be set the first time a statement is executed. If a statement is prepared, then executed multiple times, warnings may be generated. You can protect against these warnings, and prevent the recalculation of attributes which might be expensive to calculate (such as the I<NAME> and I<NAME_*> attributes): my $storedNumParams = $sth->FETCH('NUM_OF_PARAMS'); if (!defined $storedNumParams or $storedNumFields < 0) { $sth->STORE('NUM_OF_PARAMS') = $numParams; # Set other useful attributes that only need to be set once # for a statement, like $sth->{NAME} and $sth->{TYPE} } One particularly important attribute to set correctly (mentioned in L<DBI/ATTRIBUTES COMMON TO ALL HANDLES> is I<Active>. Many B<DBI> methods, including C<bind_columns()>, depend on this attribute. Besides that the C<STORE()> and C<FETCH()> methods are mainly the same as above for I<dbh>'s. =head4 Other statement methods A trivial C<finish()> method to discard stored data, reset any attributes (such as I<Active>) and do C<$sth-E<gt>SUPER::finish()>. If you've defined a C<parse_trace_flag()> method in B<::db> you'll also want it in B<::st>, so just alias it in: *parse_trace_flag = \&DBD::foo:db::parse_trace_flag; And perhaps some other methods that are not part of the B<DBI> specification, in particular to make metadata available. Remember that they must have names that begin with your drivers registered prefix so they can be installed using C<install_method()>. If C<DESTROY()> is called on a statement handle that's still active (C<$sth-E<gt>{Active}> is true) then it should effectively call C<finish()>. sub DESTROY { my $sth = shift; $sth->finish if $sth->FETCH('Active'); } =head2 Tests The test process should conform as closely as possibly to the Perl standard test harness. In particular, most (all) of the tests should be run in the F<t> sub-directory, and should simply produce an C<ok> when run under C<make test>. For details on how this is done, see the Camel book and the section in Chapter 7, "The Standard Perl Library" on L<Test::Harness>. The tests may need to adapt to the type of database which is being used for testing, and to the privileges of the user testing the driver. For example, the B<DBD::Informix> test code has to adapt in a number of places to the type of database to which it is connected as different Informix databases have different capabilities: some of the tests are for databases without transaction logs; others are for databases with a transaction log; some versions of the server have support for blobs, or stored procedures, or user-defined data types, and others do not. When a complete file of tests must be skipped, you can provide a reason in a pseudo-comment: if ($no_transactions_available) { print "1..0 # Skip: No transactions available\n"; exit 0; } Consider downloading the B<DBD::Informix> code and look at the code in F<DBD/Informix/TestHarness.pm> which is used throughout the B<DBD::Informix> tests in the F<t> sub-directory. =head1 CREATING A C/XS DRIVER Please also see the section under L<CREATING A PURE PERL DRIVER> regarding the creation of the F<Makefile.PL>. Creating a new C/XS driver from scratch will always be a daunting task. You can and should greatly simplify your task by taking a good reference driver implementation and modifying that to match the database product for which you are writing a driver. The de facto reference driver has been the one for B<DBD::Oracle> written by Tim Bunce, who is also the author of the B<DBI> package. The B<DBD::Oracle> module is a good example of a driver implemented around a C-level API. Nowadays it it seems better to base on B<DBD::ODBC>, another driver maintained by Tim and Jeff Urlwin, because it offers a lot of metadata and seems to become the guideline for the future development. (Also as B<DBD::Oracle> digs deeper into the Oracle 8 OCI interface it'll get even more hairy than it is now.) The B<DBD::Informix> driver is one driver implemented using embedded SQL instead of a function-based API. B<DBD::Ingres> may also be worth a look. =head2 C/XS version of Driver.pm A lot of the code in the F<Driver.pm> file is very similar to the code for pure Perl modules - see above. However, there are also some subtle (and not so subtle) differences, including: =over 8 =item * The variables I<$DBD::Driver::{dr|db|st}::imp_data_size> are not defined here, but in the XS code, because they declare the size of certain C structures. =item * Some methods are typically moved to the XS code, in particular C<prepare()>, C<execute()>, C<disconnect()>, C<disconnect_all()> and the C<STORE()> and C<FETCH()> methods. =item * Other methods are still part of F<Driver.pm>, but have callbacks to the XS code. =item * If the driver-specific parts of the I<imp_drh_t> structure need to be formally initialized (which does not seem to be a common requirement), then you need to add a call to an appropriate XS function in the driver method of C<DBD::Driver::driver()>, and you define the corresponding function in F<Driver.xs>, and you define the C code in F<dbdimp.c> and the prototype in F<dbdimp.h>. For example, B<DBD::Informix> has such a requirement, and adds the following call after the call to C<_new_drh()> in F<Informix.pm>: DBD::Informix::dr::driver_init($drh); and the following code in F<Informix.xs>: # Initialize the DBD::Informix driver data structure void driver_init(drh) SV *drh CODE: ST(0) = dbd_ix_dr_driver_init(drh) ? &sv_yes : &sv_no; and the code in F<dbdimp.h> declares: extern int dbd_ix_dr_driver_init(SV *drh); and the code in F<dbdimp.ec> (equivalent to F<dbdimp.c>) defines: /* Formally initialize the DBD::Informix driver structure */ int dbd_ix_dr_driver(SV *drh) { D_imp_drh(drh); imp_drh->n_connections = 0; /* No active connections */ imp_drh->current_connection = 0; /* No current connection */ imp_drh->multipleconnections = (ESQLC_VERSION >= 600) ? True : False; dbd_ix_link_newhead(&imp_drh->head); /* Empty linked list of connections */ return 1; } B<DBD::Oracle> has a similar requirement but gets around it by checking whether the private data part of the driver handle is all zeroed out, rather than add extra functions. =back Now let's take a closer look at an excerpt from F<Oracle.pm> (revised heavily to remove idiosyncrasies) as an example, ignoring things that were already discussed for pure Perl drivers. =head3 The connect method The connect method is the database handle constructor. You could write either of two versions of this method: either one which takes connection attributes (new code) and one which ignores them (old code only). If you ignore the connection attributes, then you omit all mention of the I<$auth> variable (which is a reference to a hash of attributes), and the XS system manages the differences for you. sub connect { my ($drh, $dbname, $user, $auth, $attr) = @_; # Some database specific verifications, default settings # and the like following here. This should only include # syntax checks or similar stuff where it's legal to # 'die' in case of errors. my $dbh = DBI::_new_dbh($drh, { 'Name' => $dbname, }) or return undef; # Call the driver-specific function _login in Driver.xs file which # calls the DBMS-specific function(s) to connect to the database, # and populate internal handle data. DBD::Driver::db::_login($dbh, $dbname, $user, $auth, $attr) or return undef; $dbh; } This is mostly the same as in the pure Perl case, the exception being the use of the private C<_login()> callback, which is the function that will really connect to the database. It is implemented in F<Driver.xst> (you should not implement it) and calls C<dbd_db_login6()> or C<dbd_db_login6_sv> from F<dbdimp.c>. See below for details. If your driver has driver-specific attributes which may be passed in the connect method and hence end up in C<$attr> in C<dbd_db_login6> then it is best to delete any you process so DBI does not send them again via STORE after connect. You can do this in C like this: DBD_ATTRIB_DELETE(attr, "my_attribute_name", strlen("my_attribute_name")); However, prior to DBI subversion version 11605 (and fixed post 1.607) DBD_ATTRIB_DELETE segfaulted so if you cannot guarantee the DBI version will be post 1.607 you need to use: hv_delete((HV*)SvRV(attr), "my_attribute_name", strlen("my_attribute_name"), G_DISCARD); *FIX ME* Discuss removing attributes in Perl code. =head3 The disconnect_all method *FIX ME* T.B.S =head3 The data_sources method If your C<data_sources()> method can be implemented in pure Perl, then do so because it is easier than doing it in XS code (see the section above for pure Perl drivers). If your C<data_sources()> method must call onto compiled functions, then you will need to define I<dbd_dr_data_sources> in your F<dbdimp.h> file, which will trigger F<Driver.xst> (in B<DBI> v1.33 or greater) to generate the XS code that calls your actual C function (see the discussion below for details) and you do not code anything in F<Driver.pm> to handle it. =head3 The prepare method The prepare method is the statement handle constructor, and most of it is not new. Like the C<connect()> method, it now has a C callback: package DBD::Driver::db; # ====== DATABASE ====== use strict; sub prepare { my ($dbh, $statement, $attribs) = @_; # create a 'blank' sth my $sth = DBI::_new_sth($dbh, { 'Statement' => $statement, }) or return undef; # Call the driver-specific function _prepare in Driver.xs file # which calls the DBMS-specific function(s) to prepare a statement # and populate internal handle data. DBD::Driver::st::_prepare($sth, $statement, $attribs) or return undef; $sth; } =head3 The execute method *FIX ME* T.B.S =head3 The fetchrow_arrayref method *FIX ME* T.B.S =head3 Other methods? *FIX ME* T.B.S =head2 Driver.xs F<Driver.xs> should look something like this: #include "Driver.h" DBISTATE_DECLARE; INCLUDE: Driver.xsi MODULE = DBD::Driver PACKAGE = DBD::Driver::dr /* Non-standard drh XS methods following here, if any. */ /* If none (the usual case), omit the MODULE line above too. */ MODULE = DBD::Driver PACKAGE = DBD::Driver::db /* Non-standard dbh XS methods following here, if any. */ /* Currently this includes things like _list_tables from */ /* DBD::mSQL and DBD::mysql. */ MODULE = DBD::Driver PACKAGE = DBD::Driver::st /* Non-standard sth XS methods following here, if any. */ /* In particular this includes things like _list_fields from */ /* DBD::mSQL and DBD::mysql for accessing metadata. */ Note especially the include of F<Driver.xsi> here: B<DBI> inserts stub functions for almost all private methods here which will typically do much work for you. Wherever you really have to implement something, it will call a private function in F<dbdimp.c>, and this is what you have to implement. You need to set up an extra routine if your driver needs to export constants of its own, analogous to the SQL types available when you say: use DBI qw(:sql_types); *FIX ME* T.B.S =head2 Driver.h F<Driver.h> is very simple and the operational contents should look like this: #ifndef DRIVER_H_INCLUDED #define DRIVER_H_INCLUDED #define NEED_DBIXS_VERSION 93 /* 93 for DBI versions 1.00 to 1.51+ */ #define PERL_NO_GET_CONTEXT /* if used require DBI 1.51+ */ #include <DBIXS.h> /* installed by the DBI module */ #include "dbdimp.h" #include "dbivport.h" /* see below */ #include <dbd_xsh.h> /* installed by the DBI module */ #endif /* DRIVER_H_INCLUDED */ The F<DBIXS.h> header defines most of the interesting information that the writer of a driver needs. The file F<dbd_xsh.h> header provides prototype declarations for the C functions that you might decide to implement. Note that you should normally only define one of C<dbd_db_login()>, C<dbd_db_login6()> or C<dbd_db_login6_sv> unless you are intent on supporting really old versions of B<DBI> (prior to B<DBI> 1.06) as well as modern versions. The only standard, B<DBI>-mandated functions that you need write are those specified in the F<dbd_xsh.h> header. You might also add extra driver-specific functions in F<Driver.xs>. The F<dbivport.h> file should be I<copied> from the latest B<DBI> release into your distribution each time you modify your driver. Its job is to allow you to enhance your code to work with the latest B<DBI> API while still allowing your driver to be compiled and used with older versions of the B<DBI> (for example, when the C<DBIh_SET_ERR_CHAR()> macro was added to B<DBI> 1.41, an emulation of it was added to F<dbivport.h>). This makes users happy and your life easier. Always read the notes in F<dbivport.h> to check for any limitations in the emulation that you should be aware of. With B<DBI> v1.51 or better I recommend that the driver defines I<PERL_NO_GET_CONTEXT> before F<DBIXS.h> is included. This can significantly improve efficiency when running under a thread enabled perl. (Remember that the standard perl in most Linux distributions is built with threads enabled. So is ActiveState perl for Windows, and perl built for Apache mod_perl2.) If you do this there are some things to keep in mind: =over 4 =item * If I<PERL_NO_GET_CONTEXT> is defined, then every function that calls the Perl API will need to start out with a C<dTHX;> declaration. =item * You'll know which functions need this, because the C compiler will complain that the undeclared identifier C<my_perl> is used if I<and only if> the perl you are using to develop and test your driver has threads enabled. =item * If you don't remember to test with a thread-enabled perl before making a release it's likely that you'll get failure reports from users who are. =item * For driver private functions it is possible to gain even more efficiency by replacing C<dTHX;> with C<pTHX_> prepended to the parameter list and then C<aTHX_> prepended to the argument list where the function is called. =back See L<perlguts/How multiple interpreters and concurrency are supported> for additional information about I<PERL_NO_GET_CONTEXT>. =head2 Implementation header dbdimp.h This header file has two jobs: First it defines data structures for your private part of the handles. Note that the DBI provides many common fields for you. For example the statement handle (imp_sth) already has a row_count field with an IV type that accessed via the DBIc_ROW_COUNT(imp_sth) macro. Using this is strongly recommended as it's built in to some DBI internals so the DBI can 'just work' in more cases and you'll have less driver-specific code to write. Study DBIXS.h to see what's included with each type of handle. Second it defines macros that rename the generic names like C<dbd_db_login()> to database specific names like C<ora_db_login()>. This avoids name clashes and enables use of different drivers when you work with a statically linked perl. It also will have the important task of disabling XS methods that you don't want to implement. Finally, the macros will also be used to select alternate implementations of some functions. For example, the C<dbd_db_login()> function is not passed the attribute hash. Since B<DBI> v1.06, if a C<dbd_db_login6()> macro is defined (for a function with 6 arguments), it will be used instead with the attribute hash passed as the sixth argument. Since B<DBI> post v1.607, if a C<dbd_db_login6_sv()> macro is defined (for a function like dbd_db_login6 but with scalar pointers for the dbname, username and password), it will be used instead. This will allow your login6 function to see if there are any Unicode characters in the dbname. Similarly defining dbd_db_do4_iv is preferred over dbd_db_do4, dbd_st_rows_iv over dbd_st_rows, and dbd_st_execute_iv over dbd_st_execute. The *_iv forms are declared to return the IV type instead of an int. People used to just pick Oracle's F<dbdimp.c> and use the same names, structures and types. I strongly recommend against that. At first glance this saves time, but your implementation will be less readable. It was just hell when I had to separate B<DBI> specific parts, Oracle specific parts, mSQL specific parts and mysql specific parts in B<DBD::mysql>'s I<dbdimp.h> and I<dbdimp.c>. (B<DBD::mysql> was a port of B<DBD::mSQL> which was based on B<DBD::Oracle>.) [Seconded, based on the experience taking B<DBD::Informix> apart, even though the version inherited in 1996 was only based on B<DBD::Oracle>.] This part of the driver is I<your exclusive part>. Rewrite it from scratch, so it will be clean and short: in other words, a better piece of code. (Of course keep an eye on other people's work.) struct imp_drh_st { dbih_drc_t com; /* MUST be first element in structure */ /* Insert your driver handle attributes here */ }; struct imp_dbh_st { dbih_dbc_t com; /* MUST be first element in structure */ /* Insert your database handle attributes here */ }; struct imp_sth_st { dbih_stc_t com; /* MUST be first element in structure */ /* Insert your statement handle attributes here */ }; /* Rename functions for avoiding name clashes; prototypes are */ /* in dbd_xsh.h */ #define dbd_init drv_dr_init #define dbd_db_login6_sv drv_db_login_sv #define dbd_db_do drv_db_do ... many more here ... These structures implement your private part of the handles. You I<have> to use the name C<imp_dbh_{dr|db|st}> and the first field I<must> be of type I<dbih_drc_t|_dbc_t|_stc_t> and I<must> be called C<com>. You should never access these fields directly, except by using the I<DBIc_xxx()> macros below. =head2 Implementation source dbdimp.c Conventionally, F<dbdimp.c> is the main implementation file (but B<DBD::Informix> calls the file F<dbdimp.ec>). This section includes a short note on each function that is used in the F<Driver.xsi> template and thus I<has> to be implemented. Of course, you will probably also need to implement other support functions, which should usually be file static if they are placed in F<dbdimp.c>. If they are placed in other files, you need to list those files in F<Makefile.PL> (and F<MANIFEST>) to handle them correctly. It is wise to adhere to a namespace convention for your functions to avoid conflicts. For example, for a driver with prefix I<drv_>, you might call externally visible functions I<dbd_drv_xxxx>. You should also avoid non-constant global variables as much as possible to improve the support for threading. Since Perl requires support for function prototypes (ANSI or ISO or Standard C), you should write your code using function prototypes too. It is possible to use either the unmapped names such as C<dbd_init()> or the mapped names such as C<dbd_ix_dr_init()> in the F<dbdimp.c> file. B<DBD::Informix> uses the mapped names which makes it easier to identify where to look for linkage problems at runtime (which will report errors using the mapped names). Most other drivers, and in particular B<DBD::Oracle>, use the unmapped names in the source code which makes it a little easier to compare code between drivers and eases discussions on the I<dbi-dev> mailing list. The majority of the code fragments here will use the unmapped names. Ultimately, you should provide implementations for most of the functions listed in the F<dbd_xsh.h> header. The exceptions are optional functions (such as C<dbd_st_rows()>) and those functions with alternative signatures, such as C<dbd_db_login6_sv>, C<dbd_db_login6()> and I<dbd_db_login()>. Then you should only implement one of the alternatives, and generally the newer one of the alternatives. =head3 The dbd_init method #include "Driver.h" DBISTATE_DECLARE; void dbd_init(dbistate_t* dbistate) { DBISTATE_INIT; /* Initialize the DBI macros */ } The C<dbd_init()> function will be called when your driver is first loaded; the bootstrap command in C<DBD::Driver::dr::driver()> triggers this, and the call is generated in the I<BOOT> section of F<Driver.xst>. These statements are needed to allow your driver to use the B<DBI> macros. They will include your private header file F<dbdimp.h> in turn. Note that I<DBISTATE_INIT> requires the name of the argument to C<dbd_init()> to be called C<dbistate()>. =head3 The dbd_drv_error method You need a function to record errors so B<DBI> can access them properly. You can call it whatever you like, but we'll call it C<dbd_drv_error()> here. The argument list depends on your database software; different systems provide different ways to get at error information. static void dbd_drv_error(SV *h, int rc, const char *what) { Note that I<h> is a generic handle, may it be a driver handle, a database or a statement handle. D_imp_xxh(h); This macro will declare and initialize a variable I<imp_xxh> with a pointer to your private handle pointer. You may cast this to to I<imp_drh_t>, I<imp_dbh_t> or I<imp_sth_t>. To record the error correctly, equivalent to the C<set_err()> method, use one of the C<DBIh_SET_ERR_CHAR(...)> or C<DBIh_SET_ERR_SV(...)> macros, which were added in B<DBI> 1.41: DBIh_SET_ERR_SV(h, imp_xxh, err, errstr, state, method); DBIh_SET_ERR_CHAR(h, imp_xxh, err_c, err_i, errstr, state, method); For C<DBIh_SET_ERR_SV> the I<err>, I<errstr>, I<state>, and I<method> parameters are C<SV*> (use &sv_undef instead of NULL). For C<DBIh_SET_ERR_CHAR> the I<err_c>, I<errstr>, I<state>, I<method> parameters are C<char*>. The I<err_i> parameter is an C<IV> that's used instead of I<err_c> if I<err_c> is C<Null>. The I<method> parameter can be ignored. The C<DBIh_SET_ERR_CHAR> macro is usually the simplest to use when you just have an integer error code and an error message string: DBIh_SET_ERR_CHAR(h, imp_xxh, Nullch, rc, what, Nullch, Nullch); As you can see, any parameters that aren't relevant to you can be C<Null>. To make drivers compatible with B<DBI> < 1.41 you should be using F<dbivport.h> as described in L</Driver.h> above. The (obsolete) macros such as C<DBIh_EVENT2> should be removed from drivers. The names C<dbis> and C<DBIS>, which were used in previous versions of this document, should be replaced with the C<DBIc_DBISTATE(imp_xxh)> macro. The name C<DBILOGFP>, which was also used in previous versions of this document, should be replaced by C<DBIc_LOGPIO(imp_xxh)>. Your code should not call the C C<E<lt>stdio.hE<gt>> I/O functions; you should use C<PerlIO_printf()> as shown: if (DBIc_TRACE_LEVEL(imp_xxh) >= 2) PerlIO_printf(DBIc_LOGPIO(imp_xxh), "foobar %s: %s\n", foo, neatsvpv(errstr,0)); That's the first time we see how tracing works within a B<DBI> driver. Make use of this as often as you can, but don't output anything at a trace level less than 3. Levels 1 and 2 are reserved for the B<DBI>. You can define up to 8 private trace flags using the top 8 bits of C<DBIc_TRACE_FLAGS(imp)>, that is: C<0xFF000000>. See the C<parse_trace_flag()> method elsewhere in this document. =head3 The dbd_dr_data_sources method This method is optional; the support for it was added in B<DBI> v1.33. As noted in the discussion of F<Driver.pm>, if the data sources can be determined by pure Perl code, do it that way. If, as in B<DBD::Informix>, the information is obtained by a C function call, then you need to define a function that matches the prototype: extern AV *dbd_dr_data_sources(SV *drh, imp_drh_t *imp_drh, SV *attrs); An outline implementation for B<DBD::Informix> follows, assuming that the C<sqgetdbs()> function call shown will return up to 100 databases names, with the pointers to each name in the array dbsname and the name strings themselves being stores in dbsarea. AV *dbd_dr_data_sources(SV *drh, imp_drh_t *imp_drh, SV *attr) { int ndbs; int i; char *dbsname[100]; char dbsarea[10000]; AV *av = Nullav; if (sqgetdbs(&ndbs, dbsname, 100, dbsarea, sizeof(dbsarea)) == 0) { av = NewAV(); av_extend(av, (I32)ndbs); sv_2mortal((SV *)av); for (i = 0; i < ndbs; i++) av_store(av, i, newSVpvf("dbi:Informix:%s", dbsname[i])); } return(av); } The actual B<DBD::Informix> implementation has a number of extra lines of code, logs function entry and exit, reports the error from C<sqgetdbs()>, and uses C<#define>'d constants for the array sizes. =head3 The dbd_db_login6 method int dbd_db_login6_sv(SV* dbh, imp_dbh_t* imp_dbh, SV* dbname, SV* user, SV* auth, SV *attr); or int dbd_db_login6(SV* dbh, imp_dbh_t* imp_dbh, char* dbname, char* user, char* auth, SV *attr); This function will really connect to the database. The argument I<dbh> is the database handle. I<imp_dbh> is the pointer to the handles private data, as is I<imp_xxx> in C<dbd_drv_error()> above. The arguments I<dbname>, I<user>, I<auth> and I<attr> correspond to the arguments of the driver handle's C<connect()> method. You will quite often use database specific attributes here, that are specified in the DSN. I recommend you parse the DSN (using Perl) within the C<connect()> method and pass the segments of the DSN via the attributes parameter through C<_login()> to C<dbd_db_login6()>. Here's how you fetch them; as an example we use I<hostname> attribute, which can be up to 12 characters long excluding null terminator: SV** svp; STRLEN len; char* hostname; if ( (svp = DBD_ATTRIB_GET_SVP(attr, "drv_hostname", 12)) && SvTRUE(*svp)) { hostname = SvPV(*svp, len); DBD_ATTRIB_DELETE(attr, "drv_hostname", 12); /* avoid later STORE */ } else { hostname = "localhost"; } If you handle any driver specific attributes in the dbd_db_login6 method you probably want to delete them from C<attr> (as above with DBD_ATTRIB_DELETE). If you don't delete your handled attributes DBI will call C<STORE> for each attribute after the connect/login and this is at best redundant for attributes you have already processed. B<Note: Until revision 11605 (post DBI 1.607), there was a problem with DBD_ATTRIBUTE_DELETE so unless you require a DBI version after 1.607 you need to replace each DBD_ATTRIBUTE_DELETE call with:> hv_delete((HV*)SvRV(attr), key, key_len, G_DISCARD) Note that you can also obtain standard attributes such as I<AutoCommit> and I<ChopBlanks> from the attributes parameter, using C<DBD_ATTRIB_GET_IV> for integer attributes. If, for example, your database does not support transactions but I<AutoCommit> is set off (requesting transaction support), then you can emulate a 'failure to connect'. Now you should really connect to the database. In general, if the connection fails, it is best to ensure that all allocated resources are released so that the handle does not need to be destroyed separately. If you are successful (and possibly even if you fail but you have allocated some resources), you should use the following macros: DBIc_IMPSET_on(imp_dbh); This indicates that the driver (implementor) has allocated resources in the I<imp_dbh> structure and that the implementors private C<dbd_db_destroy()> function should be called when the handle is destroyed. DBIc_ACTIVE_on(imp_dbh); This indicates that the handle has an active connection to the server and that the C<dbd_db_disconnect()> function should be called before the handle is destroyed. Note that if you do need to fail, you should report errors via the I<drh> or I<imp_drh> rather than via I<dbh> or I<imp_dbh> because I<imp_dbh> will be destroyed by the failure, so errors recorded in that handle will not be visible to B<DBI>, and hence not the user either. Note too, that the function is passed I<dbh> and I<imp_dbh>, and there is a macro C<D_imp_drh_from_dbh> which can recover the I<imp_drh> from the I<imp_dbh>. However, there is no B<DBI> macro to provide you with the I<drh> given either the I<imp_dbh> or the I<dbh> or the I<imp_drh> (and there's no way to recover the I<dbh> given just the I<imp_dbh>). This suggests that, despite the above notes about C<dbd_drv_error()> taking an C<SV *>, it may be better to have two error routines, one taking I<imp_dbh> and one taking I<imp_drh> instead. With care, you can factor most of the formatting code out so that these are small routines calling a common error formatter. See the code in B<DBD::Informix> 1.05.00 for more information. The C<dbd_db_login6()> function should return I<TRUE> for success, I<FALSE> otherwise. Drivers implemented long ago may define the five-argument function C<dbd_db_login()> instead of C<dbd_db_login6()>. The missing argument is the attributes. There are ways to work around the missing attributes, but they are ungainly; it is much better to use the 6-argument form. Even later drivers will use C<dbd_db_login6_sv()> which provides the dbname, username and password as SVs. =head3 The dbd_db_commit and dbd_db_rollback methods int dbd_db_commit(SV *dbh, imp_dbh_t *imp_dbh); int dbd_db_rollback(SV* dbh, imp_dbh_t* imp_dbh); These are used for commit and rollback. They should return I<TRUE> for success, I<FALSE> for error. The arguments I<dbh> and I<imp_dbh> are the same as for C<dbd_db_login6()> above; I will omit describing them in what follows, as they appear always. These functions should return I<TRUE> for success, I<FALSE> otherwise. =head3 The dbd_db_disconnect method This is your private part of the C<disconnect()> method. Any I<dbh> with the I<ACTIVE> flag on must be disconnected. (Note that you have to set it in C<dbd_db_connect()> above.) int dbd_db_disconnect(SV* dbh, imp_dbh_t* imp_dbh); The database handle will return I<TRUE> for success, I<FALSE> otherwise. In any case it should do a: DBIc_ACTIVE_off(imp_dbh); before returning so B<DBI> knows that C<dbd_db_disconnect()> was executed. Note that there's nothing to stop a I<dbh> being I<disconnected> while it still have active children. If your database API reacts badly to trying to use an I<sth> in this situation then you'll need to add code like this to all I<sth> methods: if (!DBIc_ACTIVE(DBIc_PARENT_COM(imp_sth))) return 0; Alternatively, you can add code to your driver to keep explicit track of the statement handles that exist for each database handle and arrange to destroy those handles before disconnecting from the database. There is code to do this in B<DBD::Informix>. Similar comments apply to the driver handle keeping track of all the database handles. Note that the code which destroys the subordinate handles should only release the associated database resources and mark the handles inactive; it does not attempt to free the actual handle structures. This function should return I<TRUE> for success, I<FALSE> otherwise, but it is not clear what anything can do about a failure. =head3 The dbd_db_discon_all method int dbd_discon_all (SV *drh, imp_drh_t *imp_drh); This function may be called at shutdown time. It should make best-efforts to disconnect all database handles - if possible. Some databases don't support that, in which case you can do nothing but return 'success'. This function should return I<TRUE> for success, I<FALSE> otherwise, but it is not clear what anything can do about a failure. =head3 The dbd_db_destroy method This is your private part of the database handle destructor. Any I<dbh> with the I<IMPSET> flag on must be destroyed, so that you can safely free resources. (Note that you have to set it in C<dbd_db_connect()> above.) void dbd_db_destroy(SV* dbh, imp_dbh_t* imp_dbh) { DBIc_IMPSET_off(imp_dbh); } The B<DBI> F<Driver.xst> code will have called C<dbd_db_disconnect()> for you, if the handle is still 'active', before calling C<dbd_db_destroy()>. Before returning the function must switch I<IMPSET> to off, so B<DBI> knows that the destructor was called. A B<DBI> handle doesn't keep references to its children. But children do keep references to their parents. So a database handle won't be C<DESTROY>'d until all its children have been C<DESTROY>'d. =head3 The dbd_db_STORE_attrib method This function handles $dbh->{$key} = $value; Its prototype is: int dbd_db_STORE_attrib(SV* dbh, imp_dbh_t* imp_dbh, SV* keysv, SV* valuesv); You do not handle all attributes; on the contrary, you should not handle B<DBI> attributes here: leave this to B<DBI>. (There are two exceptions, I<AutoCommit> and I<ChopBlanks>, which you should care about.) The return value is I<TRUE> if you have handled the attribute or I<FALSE> otherwise. If you are handling an attribute and something fails, you should call C<dbd_drv_error()>, so B<DBI> can raise exceptions, if desired. If C<dbd_drv_error()> returns, however, you have a problem: the user will never know about the error, because he typically will not check C<$dbh-E<gt>errstr()>. I cannot recommend a general way of going on, if C<dbd_drv_error()> returns, but there are examples where even the B<DBI> specification expects that you C<croak()>. (See the I<AutoCommit> method in L<DBI>.) If you have to store attributes, you should either use your private data structure I<imp_xxx>, the handle hash (via C<(HV*)SvRV(dbh)>), or use the private I<imp_data>. The first is best for internal C values like integers or pointers and where speed is important within the driver. The handle hash is best for values the user may want to get/set via driver-specific attributes. The private I<imp_data> is an additional C<SV> attached to the handle. You could think of it as an unnamed handle attribute. It's not normally used. =head3 The dbd_db_FETCH_attrib method This is the counterpart of C<dbd_db_STORE_attrib()>, needed for: $value = $dbh->{$key}; Its prototype is: SV* dbd_db_FETCH_attrib(SV* dbh, imp_dbh_t* imp_dbh, SV* keysv); Unlike all previous methods this returns an C<SV> with the value. Note that you should normally execute C<sv_2mortal()>, if you return a nonconstant value. (Constant values are C<&sv_undef>, C<&sv_no> and C<&sv_yes>.) Note, that B<DBI> implements a caching algorithm for attribute values. If you think, that an attribute may be fetched, you store it in the I<dbh> itself: if (cacheit) /* cache value for later DBI 'quick' fetch? */ hv_store((HV*)SvRV(dbh), key, kl, cachesv, 0); =head3 The dbd_st_prepare method This is the private part of the C<prepare()> method. Note that you B<must not> really execute the statement here. You may, however, preparse and validate the statement, or do similar things. int dbd_st_prepare(SV* sth, imp_sth_t* imp_sth, char* statement, SV* attribs); A typical, simple, possibility is to do nothing and rely on the perl C<prepare()> code that set the I<Statement> attribute on the handle. This attribute can then be used by C<dbd_st_execute()>. If the driver supports placeholders then the I<NUM_OF_PARAMS> attribute must be set correctly by C<dbd_st_prepare()>: DBIc_NUM_PARAMS(imp_sth) = ... If you can, you should also setup attributes like I<NUM_OF_FIELDS>, I<NAME>, etc. here, but B<DBI> doesn't require that - they can be deferred until execute() is called. However, if you do, document it. In any case you should set the I<IMPSET> flag, as you did in C<dbd_db_connect()> above: DBIc_IMPSET_on(imp_sth); =head3 The dbd_st_execute method This is where a statement will really be executed. int dbd_st_execute(SV* sth, imp_sth_t* imp_sth); C<dbd_st_execute> should return -2 for any error, -1 if the number of rows affected is unknown else it should be the number of affected (updated, inserted) rows. Note that you must be aware a statement may be executed repeatedly. Also, you should not expect that C<finish()> will be called between two executions, so you might need code, like the following, near the start of the function: if (DBIc_ACTIVE(imp_sth)) dbd_st_finish(h, imp_sth); If your driver supports the binding of parameters (it should!), but the database doesn't, you must do it here. This can be done as follows: SV *svp; char* statement = DBD_ATTRIB_GET_PV(h, "Statement", 9, svp, ""); int numParam = DBIc_NUM_PARAMS(imp_sth); int i; for (i = 0; i < numParam; i++) { char* value = dbd_db_get_param(sth, imp_sth, i); /* It is your drivers task to implement dbd_db_get_param, */ /* it must be setup as a counterpart of dbd_bind_ph. */ /* Look for '?' and replace it with 'value'. Difficult */ /* task, note that you may have question marks inside */ /* quotes and comments the like ... :-( */ /* See DBD::mysql for an example. (Don't look too deep into */ /* the example, you will notice where I was lazy ...) */ } The next thing is to really execute the statement. Note that you must set the attributes I<NUM_OF_FIELDS>, I<NAME>, etc when the statement is successfully executed if the driver has not already done so: they may be used even before a potential C<fetchrow()>. In particular you have to tell B<DBI> the number of fields that the statement has, because it will be used by B<DBI> internally. Thus the function will typically ends with: if (isSelectStatement) { DBIc_NUM_FIELDS(imp_sth) = numFields; DBIc_ACTIVE_on(imp_sth); } It is important that the I<ACTIVE> flag only be set for C<SELECT> statements (or any other statements that can return many values from the database using a cursor-like mechanism). See C<dbd_db_connect()> above for more explanations. There plans for a preparse function to be provided by B<DBI>, but this has not reached fruition yet. Meantime, if you want to know how ugly it can get, try looking at the C<dbd_ix_preparse()> in B<DBD::Informix> F<dbdimp.ec> and the related functions in F<iustoken.c> and F<sqltoken.c>. =head3 The dbd_st_fetch method This function fetches a row of data. The row is stored in in an array, of C<SV>'s that B<DBI> prepares for you. This has two advantages: it is fast (you even reuse the C<SV>'s, so they don't have to be created after the first C<fetchrow()>), and it guarantees that B<DBI> handles C<bind_cols()> for you. What you do is the following: AV* av; int numFields = DBIc_NUM_FIELDS(imp_sth); /* Correct, if NUM_FIELDS is constant for this statement. There are drivers where this is not the case! */ int chopBlanks = DBIc_is(imp_sth, DBIcf_ChopBlanks); int i; if (!fetch_new_row_of_data(...)) { ... /* check for error or end-of-data */ DBIc_ACTIVE_off(imp_sth); /* turn off Active flag automatically */ return Nullav; } /* get the fbav (field buffer array value) for this row */ /* it is very important to only call this after you know */ /* that you have a row of data to return. */ av = DBIc_DBISTATE(imp_sth)->get_fbav(imp_sth); for (i = 0; i < numFields; i++) { SV* sv = fetch_a_field(..., i); if (chopBlanks && SvOK(sv) && type_is_blank_padded(field_type[i])) { /* Remove white space from end (only) of sv */ } sv_setsv(AvARRAY(av)[i], sv); /* Note: (re)use! */ } return av; There's no need to use a C<fetch_a_field()> function returning an C<SV*>. It's more common to use your database API functions to fetch the data as character strings and use code like this: sv_setpvn(AvARRAY(av)[i], char_ptr, char_count); C<NULL> values must be returned as C<undef>. You can use code like this: SvOK_off(AvARRAY(av)[i]); The function returns the C<AV> prepared by B<DBI> for success or C<Nullav> otherwise. *FIX ME* Discuss what happens when there's no more data to fetch. Are errors permitted if another fetch occurs after the first fetch that reports no more data. (Permitted, not required.) If an error occurs which leaves the I<$sth> in a state where remaining rows can't be fetched then I<Active> should be turned off before the method returns. =head3 The dbd_st_finish3 method The C<$sth-E<gt>finish()> method can be called if the user wishes to indicate that no more rows will be fetched even if the database has more rows to offer, and the B<DBI> code can call the function when handles are being destroyed. See the B<DBI> specification for more background details. In both circumstances, the B<DBI> code ends up calling the C<dbd_st_finish3()> method (if you provide a mapping for C<dbd_st_finish3()> in F<dbdimp.h>), or C<dbd_st_finish()> otherwise. The difference is that C<dbd_st_finish3()> takes a third argument which is an C<int> with the value 1 if it is being called from a C<destroy()> method and 0 otherwise. Note that B<DBI> v1.32 and earlier test on C<dbd_db_finish3()> to call C<dbd_st_finish3()>; if you provide C<dbd_st_finish3()>, either define C<dbd_db_finish3()> too, or insist on B<DBI> v1.33 or later. All it I<needs> to do is turn off the I<Active> flag for the I<sth>. It will only be called by F<Driver.xst> code, if the driver has set I<ACTIVE> to on for the I<sth>. Outline example: int dbd_st_finish3(SV* sth, imp_sth_t* imp_sth, int from_destroy) { if (DBIc_ACTIVE(imp_sth)) { /* close cursor or equivalent action */ DBIc_ACTIVE_off(imp_sth); } return 1; } The from_destroy parameter is true if C<dbd_st_finish3()> is being called from C<DESTROY()> - and so the statement is about to be destroyed. For many drivers there is no point in doing anything more than turning off the I<Active> flag in this case. The function returns I<TRUE> for success, I<FALSE> otherwise, but there isn't a lot anyone can do to recover if there is an error. =head3 The dbd_st_destroy method This function is the private part of the statement handle destructor. void dbd_st_destroy(SV* sth, imp_sth_t* imp_sth) { ... /* any clean-up that's needed */ DBIc_IMPSET_off(imp_sth); /* let DBI know we've done it */ } The B<DBI> F<Driver.xst> code will call C<dbd_st_finish()> for you, if the I<sth> has the I<ACTIVE> flag set, before calling C<dbd_st_destroy()>. =head3 The dbd_st_STORE_attrib and dbd_st_FETCH_attrib methods These functions correspond to C<dbd_db_STORE()> and C<dbd_db_FETCH()> attrib above, except that they are for statement handles. See above. int dbd_st_STORE_attrib(SV* sth, imp_sth_t* imp_sth, SV* keysv, SV* valuesv); SV* dbd_st_FETCH_attrib(SV* sth, imp_sth_t* imp_sth, SV* keysv); =head3 The dbd_bind_ph method This function is internally used by the C<bind_param()> method, the C<bind_param_inout()> method and by the B<DBI> F<Driver.xst> code if C<execute()> is called with any bind parameters. int dbd_bind_ph (SV *sth, imp_sth_t *imp_sth, SV *param, SV *value, IV sql_type, SV *attribs, int is_inout, IV maxlen); The I<param> argument holds an C<IV> with the parameter number (1, 2, ...). The I<value> argument is the parameter value and I<sql_type> is its type. If your driver does not support C<bind_param_inout()> then you should ignore I<maxlen> and croak if I<is_inout> is I<TRUE>. If your driver I<does> support C<bind_param_inout()> then you should note that I<value> is the C<SV> I<after> dereferencing the reference passed to C<bind_param_inout()>. In drivers of simple databases the function will, for example, store the value in a parameter array and use it later in C<dbd_st_execute()>. See the B<DBD::mysql> driver for an example. =head3 Implementing bind_param_inout support To provide support for parameters bound by reference rather than by value, the driver must do a number of things. First, and most importantly, it must note the references and stash them in its own driver structure. Secondly, when a value is bound to a column, the driver must discard any previous reference bound to the column. On each execute, the driver must evaluate the references and internally bind the values resulting from the references. This is only applicable if the user writes: $sth->execute; If the user writes: $sth->execute(@values); then B<DBI> automatically calls the binding code for each element of I<@values>. These calls are indistinguishable from explicit user calls to C<bind_param()>. =head2 C/XS version of Makefile.PL The F<Makefile.PL> file for a C/XS driver is similar to the code needed for a pure Perl driver, but there are a number of extra bits of information needed by the build system. For example, the attributes list passed to C<WriteMakefile()> needs to specify the object files that need to be compiled and built into the shared object (DLL). This is often, but not necessarily, just F<dbdimp.o> (unless that should be F<dbdimp.obj> because you're building on MS Windows). Note that you can reliably determine the extension of the object files from the I<$Config{obj_ext}> values, and there are many other useful pieces of configuration information lurking in that hash. You get access to it with: use Config; =head2 Methods which do not need to be written The B<DBI> code implements the majority of the methods which are accessed using the notation C<DBI-E<gt>function()>, the only exceptions being C<DBI-E<gt>connect()> and C<DBI-E<gt>data_sources()> which require support from the driver. The B<DBI> code implements the following documented driver, database and statement functions which do not need to be written by the B<DBD> driver writer. =over 4 =item $dbh->do() The default implementation of this function prepares, executes and destroys the statement. This can be replaced if there is a better way to implement this, such as C<EXECUTE IMMEDIATE> which can sometimes be used if there are no parameters. =item $h->errstr() =item $h->err() =item $h->state() =item $h->trace() The B<DBD> driver does not need to worry about these routines at all. =item $h->{ChopBlanks} This attribute needs to be honored during C<fetch()> operations, but does not need to be handled by the attribute handling code. =item $h->{RaiseError} The B<DBD> driver does not need to worry about this attribute at all. =item $h->{PrintError} The B<DBD> driver does not need to worry about this attribute at all. =item $sth->bind_col() Assuming the driver uses the C<DBIc_DBISTATE(imp_xxh)-E<gt>get_fbav()> function (C drivers, see below), or the C<$sth-E<gt>_set_fbav($data)> method (Perl drivers) the driver does not need to do anything about this routine. =item $sth->bind_columns() Regardless of whether the driver uses C<DBIc_DBISTATE(imp_xxh)-E<gt>get_fbav()>, the driver does not need to do anything about this routine as it simply iteratively calls C<$sth-E<gt>bind_col()>. =back The B<DBI> code implements a default implementation of the following functions which do not need to be written by the B<DBD> driver writer unless the default implementation is incorrect for the Driver. =over 4 =item $dbh->quote() This should only be written if the database does not accept the ANSI SQL standard for quoting strings, with the string enclosed in single quotes and any embedded single quotes replaced by two consecutive single quotes. For the two argument form of quote, you need to implement the C<type_info()> method to provide the information that quote needs. =item $dbh->ping() This should be implemented as a simple efficient way to determine whether the connection to the database is still alive. Typically code like this: sub ping { my $dbh = shift; $sth = $dbh->prepare_cached(q{ select * from A_TABLE_NAME where 1=0 }) or return 0; $sth->execute or return 0; $sth->finish; return 1; } where I<A_TABLE_NAME> is the name of a table that always exists (such as a database system catalogue). =item $drh->default_user The default implementation of default_user will get the database username and password fields from C<$ENV{DBI_USER}> and C<$ENV{DBI_PASS}>. You can override this method. It is called as follows: ($user, $pass) = $drh->default_user($user, $pass, $attr) =back =head1 METADATA METHODS The exposition above ignores the B<DBI> MetaData methods. The metadata methods are all associated with a database handle. =head2 Using DBI::DBD::Metadata The B<DBI::DBD::Metadata> module is a good semi-automatic way for the developer of a B<DBD> module to write the C<get_info()> and C<type_info()> functions quickly and accurately. =head3 Generating the get_info method Prior to B<DBI> v1.33, this existed as the method C<write_getinfo_pm()> in the B<DBI::DBD> module. From B<DBI> v1.33, it exists as the method C<write_getinfo_pm()> in the B<DBI::DBD::Metadata> module. This discussion assumes you have B<DBI> v1.33 or later. You examine the documentation for C<write_getinfo_pm()> using: perldoc DBI::DBD::Metadata To use it, you need a Perl B<DBI> driver for your database which implements the C<get_info()> method. In practice, this means you need to install B<DBD::ODBC>, an ODBC driver manager, and an ODBC driver for your database. With the pre-requisites in place, you might type: perl -MDBI::DBD::Metadata -we \ "write_getinfo_pm (qw{ dbi:ODBC:foo_db username password Driver })" The procedure writes to standard output the code that should be added to your F<Driver.pm> file and the code that should be written to F<lib/DBD/Driver/GetInfo.pm>. You should review the output to ensure that it is sensible. =head3 Generating the type_info method Given the idea of the C<write_getinfo_pm()> method, it was not hard to devise a parallel method, C<write_typeinfo_pm()>, which does the analogous job for the B<DBI> C<type_info_all()> metadata method. The C<write_typeinfo_pm()> method was added to B<DBI> v1.33. You examine the documentation for C<write_typeinfo_pm()> using: perldoc DBI::DBD::Metadata The setup is exactly analogous to the mechanism described in L</Generating the get_info method>. With the pre-requisites in place, you might type: perl -MDBI::DBD::Metadata -we \ "write_typeinfo_pm (qw{ dbi:ODBC:foo_db username password Driver })" The procedure writes to standard output the code that should be added to your F<Driver.pm> file and the code that should be written to F<lib/DBD/Driver/TypeInfo.pm>. You should review the output to ensure that it is sensible. =head2 Writing DBD::Driver::db::get_info If you use the B<DBI::DBD::Metadata> module, then the code you need is generated for you. If you decide not to use the B<DBI::DBD::Metadata> module, you should probably borrow the code from a driver that has done so (eg B<DBD::Informix> from version 1.05 onwards) and crib the code from there, or look at the code that generates that module and follow that. The method in F<Driver.pm> will be very simple; the method in F<lib/DBD/Driver/GetInfo.pm> is not very much more complex unless your DBMS itself is much more complex. Note that some of the B<DBI> utility methods rely on information from the C<get_info()> method to perform their operations correctly. See, for example, the C<quote_identifier()> and quote methods, discussed below. =head2 Writing DBD::Driver::db::type_info_all If you use the C<DBI::DBD::Metadata> module, then the code you need is generated for you. If you decide not to use the C<DBI::DBD::Metadata> module, you should probably borrow the code from a driver that has done so (eg C<DBD::Informix> from version 1.05 onwards) and crib the code from there, or look at the code that generates that module and follow that. The method in F<Driver.pm> will be very simple; the method in F<lib/DBD/Driver/TypeInfo.pm> is not very much more complex unless your DBMS itself is much more complex. =head2 Writing DBD::Driver::db::type_info The guidelines on writing this method are still not really clear. No sample implementation is available. =head2 Writing DBD::Driver::db::table_info *FIX ME* The guidelines on writing this method have not been written yet. No sample implementation is available. =head2 Writing DBD::Driver::db::column_info *FIX ME* The guidelines on writing this method have not been written yet. No sample implementation is available. =head2 Writing DBD::Driver::db::primary_key_info *FIX ME* The guidelines on writing this method have not been written yet. No sample implementation is available. =head2 Writing DBD::Driver::db::primary_key *FIX ME* The guidelines on writing this method have not been written yet. No sample implementation is available. =head2 Writing DBD::Driver::db::foreign_key_info *FIX ME* The guidelines on writing this method have not been written yet. No sample implementation is available. =head2 Writing DBD::Driver::db::tables This method generates an array of names in a format suitable for being embedded in SQL statements in places where a table name is expected. If your database hews close enough to the SQL standard or if you have implemented an appropriate C<table_info()> function and and the appropriate C<quote_identifier()> function, then the B<DBI> default version of this method will work for your driver too. Otherwise, you have to write a function yourself, such as: sub tables { my($dbh, $cat, $sch, $tab, $typ) = @_; my(@res); my($sth) = $dbh->table_info($cat, $sch, $tab, $typ); my(@arr); while (@arr = $sth->fetchrow_array) { push @res, $dbh->quote_identifier($arr[0], $arr[1], $arr[2]); } return @res; } See also the default implementation in F<DBI.pm>. =head2 Writing DBD::Driver::db::quote This method takes a value and converts it into a string suitable for embedding in an SQL statement as a string literal. If your DBMS accepts the SQL standard notation for strings (single quotes around the string as a whole with any embedded single quotes doubled up), then you do not need to write this method as B<DBI> provides a default method that does it for you. If your DBMS uses an alternative notation or escape mechanism, then you need to provide an equivalent function. For example, suppose your DBMS used C notation with double quotes around the string and backslashes escaping both double quotes and backslashes themselves. Then you might write the function as: sub quote { my($dbh, $str) = @_; $str =~ s/["\\]/\\$&/gmo; return qq{"$str"}; } Handling newlines and other control characters is left as an exercise for the reader. This sample method ignores the I<$data_type> indicator which is the optional second argument to the method. =head2 Writing DBD::Driver::db::quote_identifier This method is called to ensure that the name of the given table (or other database object) can be embedded into an SQL statement without danger of misinterpretation. The result string should be usable in the text of an SQL statement as the identifier for a table. If your DBMS accepts the SQL standard notation for quoted identifiers (which uses double quotes around the identifier as a whole, with any embedded double quotes doubled up) and accepts I<"schema"."identifier"> (and I<"catalog"."schema"."identifier"> when a catalog is specified), then you do not need to write this method as B<DBI> provides a default method that does it for you. In fact, even if your DBMS does not handle exactly that notation but you have implemented the C<get_info()> method and it gives the correct responses, then it will work for you. If your database is fussier, then you need to implement your own version of the function. For example, B<DBD::Informix> has to deal with an environment variable I<DELIMIDENT>. If it is not set, then the DBMS treats names enclosed in double quotes as strings rather than names, which is usually a syntax error. Additionally, the catalog portion of the name is separated from the schema and table by a different delimiter (colon instead of dot), and the catalog portion is never enclosed in quotes. (Fortunately, valid strings for the catalog will never contain weird characters that might need to be escaped, unless you count dots, dashes, slashes and at-signs as weird.) Finally, an Informix database can contain objects that cannot be accessed because they were created by a user with the I<DELIMIDENT> environment variable set, but the current user does not have it set. By design choice, the C<quote_identifier()> method encloses those identifiers in double quotes anyway, which generally triggers a syntax error, and the metadata methods which generate lists of tables etc omit those identifiers from the result sets. sub quote_identifier { my($dbh, $cat, $sch, $obj) = @_; my($rv) = ""; my($qq) = (defined $ENV{DELIMIDENT}) ? '"' : ''; $rv .= qq{$cat:} if (defined $cat); if (defined $sch) { if ($sch !~ m/^\w+$/o) { $qq = '"'; $sch =~ s/$qq/$qq$qq/gm; } $rv .= qq{$qq$sch$qq.}; } if (defined $obj) { if ($obj !~ m/^\w+$/o) { $qq = '"'; $obj =~ s/$qq/$qq$qq/gm; } $rv .= qq{$qq$obj$qq}; } return $rv; } Handling newlines and other control characters is left as an exercise for the reader. Note that there is an optional fourth parameter to this function which is a reference to a hash of attributes; this sample implementation ignores that. This sample implementation also ignores the single-argument variant of the method. =head1 TRACING Tracing in DBI is controlled with a combination of a trace level and a set of flags which together are known as the trace settings. The trace settings are stored in a single integer and divided into levels and flags by a set of masks (C<DBIc_TRACE_LEVEL_MASK> and C<DBIc_TRACE_FLAGS_MASK>). Each handle has it's own trace settings and so does the DBI. When you call a method the DBI merges the handles settings into its own for the duration of the call: the trace flags of the handle are OR'd into the trace flags of the DBI, and if the handle has a higher trace level then the DBI trace level is raised to match it. The previous DBI trace settings are restored when the called method returns. =head2 Trace Level The trace level is the first 4 bits of the trace settings (masked by C<DBIc_TRACE_FLAGS_MASK>) and represents trace levels of 1 to 15. Do not output anything at trace levels less than 3 as they are reserved for DBI. For advice on what to output at each level see "Trace Levels" in L<DBI>. To test for a trace level you can use the C<DBIc_TRACE_LEVEL> macro like this: if (DBIc_TRACE_LEVEL(imp_xxh) >= 2) { PerlIO_printf(DBIc_LOGPIO(imp_xxh), "foobar"); } Also B<note> the use of PerlIO_printf which you should always use for tracing and never the C C<stdio.h> I/O functions. =head2 Trace Flags Trace flags are used to enable tracing of specific activities within the DBI and drivers. The DBI defines some trace flags and drivers can define others. DBI trace flag names begin with a capital letter and driver specific names begin with a lowercase letter. For a list of DBI defined trace flags see "Trace Flags" in L<DBI>. If you want to use private trace flags you'll probably want to be able to set them by name. Drivers are expected to override the parse_trace_flag (note the singular) and check if $trace_flag_name is a driver specific trace flags and, if not, then call the DBIs default parse_trace_flag(). To do that you'll need to define a parse_trace_flag() method like this: sub parse_trace_flag { my ($h, $name) = @_; return 0x01000000 if $name eq 'foo'; return 0x02000000 if $name eq 'bar'; return 0x04000000 if $name eq 'baz'; return 0x08000000 if $name eq 'boo'; return 0x10000000 if $name eq 'bop'; return $h->SUPER::parse_trace_flag($name); } All private flag names must be lowercase, and all private flags must be in the top 8 of the 32 bits of C<DBIc_TRACE_FLAGS(imp)> i.e., 0xFF000000. If you've defined a parse_trace_flag() method in ::db you'll also want it in ::st, so just alias it in: *parse_trace_flag = \&DBD::foo:db::parse_trace_flag; You may want to act on the current 'SQL' trace flag that DBI defines to output SQL prepared/executed as DBI currently does not do SQL tracing. =head2 Trace Macros Access to the trace level and trace flags is via a set of macros. DBIc_TRACE_SETTINGS(imp) returns the trace settings DBIc_TRACE_LEVEL(imp) returns the trace level DBIc_TRACE_FLAGS(imp) returns the trace flags DBIc_TRACE(imp, flags, flaglevel, level) e.g., DBIc_TRACE(imp, 0, 0, 4) if level >= 4 DBIc_TRACE(imp, DBDtf_FOO, 2, 4) if tracing DBDtf_FOO & level>=2 or level>=4 DBIc_TRACE(imp, DBDtf_FOO, 2, 0) as above but never trace just due to level =head1 WRITING AN EMULATION LAYER FOR AN OLD PERL INTERFACE Study F<Oraperl.pm> (supplied with B<DBD::Oracle>) and F<Ingperl.pm> (supplied with B<DBD::Ingres>) and the corresponding I<dbdimp.c> files for ideas. Note that the emulation code sets C<$dbh-E<gt>{CompatMode} = 1;> for each connection so that the internals of the driver can implement behaviour compatible with the old interface when dealing with those handles. =head2 Setting emulation perl variables For example, ingperl has a I<$sql_rowcount> variable. Rather than try to manually update this in F<Ingperl.pm> it can be done faster in C code. In C<dbd_init()>: sql_rowcount = perl_get_sv("Ingperl::sql_rowcount", GV_ADDMULTI); In the relevant places do: if (DBIc_COMPAT(imp_sth)) /* only do this for compatibility mode handles */ sv_setiv(sql_rowcount, the_row_count); =head1 OTHER MISCELLANEOUS INFORMATION =head2 The imp_xyz_t types Any handle has a corresponding C structure filled with private data. Some of this data is reserved for use by B<DBI> (except for using the DBIc macros below), some is for you. See the description of the F<dbdimp.h> file above for examples. Most functions in F<dbdimp.c> are passed both the handle C<xyz> and a pointer to C<imp_xyz>. In rare cases, however, you may use the following macros: =over 4 =item D_imp_dbh(dbh) Given a function argument I<dbh>, declare a variable I<imp_dbh> and initialize it with a pointer to the handles private data. Note: This must be a part of the function header, because it declares a variable. =item D_imp_sth(sth) Likewise for statement handles. =item D_imp_xxx(h) Given any handle, declare a variable I<imp_xxx> and initialize it with a pointer to the handles private data. It is safe, for example, to cast I<imp_xxx> to C<imp_dbh_t*>, if C<DBIc_TYPE(imp_xxx) == DBIt_DB>. (You can also call C<sv_derived_from(h, "DBI::db")>, but that's much slower.) =item D_imp_dbh_from_sth Given a I<imp_sth>, declare a variable I<imp_dbh> and initialize it with a pointer to the parent database handle's implementors structure. =back =head2 Using DBIc_IMPSET_on The driver code which initializes a handle should use C<DBIc_IMPSET_on()> as soon as its state is such that the cleanup code must be called. When this happens is determined by your driver code. B<Failure to call this can lead to corruption of data structures.> For example, B<DBD::Informix> maintains a linked list of database handles in the driver, and within each handle, a linked list of statements. Once a statement is added to the linked list, it is crucial that it is cleaned up (removed from the list). When I<DBIc_IMPSET_on()> was being called too late, it was able to cause all sorts of problems. =head2 Using DBIc_is(), DBIc_has(), DBIc_on() and DBIc_off() Once upon a long time ago, the only way of handling the internal B<DBI> boolean flags/attributes was through macros such as: DBIc_WARN DBIc_WARN_on DBIc_WARN_off DBIc_COMPAT DBIc_COMPAT_on DBIc_COMPAT_off Each of these took an I<imp_xxh> pointer as an argument. Since then, new attributes have been added such as I<ChopBlanks>, I<RaiseError> and I<PrintError>, and these do not have the full set of macros. The approved method for handling these is now the four macros: DBIc_is(imp, flag) DBIc_has(imp, flag) an alias for DBIc_is DBIc_on(imp, flag) DBIc_off(imp, flag) DBIc_set(imp, flag, on) set if on is true, else clear Consequently, the C<DBIc_XXXXX> family of macros is now mostly deprecated and new drivers should avoid using them, even though the older drivers will probably continue to do so for quite a while yet. However... There is an I<important exception> to that. The I<ACTIVE> and I<IMPSET> flags should be set via the C<DBIc_ACTIVE_on()> and C<DBIc_IMPSET_on()> macros, and unset via the C<DBIc_ACTIVE_off()> and C<DBIc_IMPSET_off()> macros. =head2 Using the get_fbav() method B<THIS IS CRITICAL for C/XS drivers>. The C<$sth-E<gt>bind_col()> and C<$sth-E<gt>bind_columns()> documented in the B<DBI> specification do not have to be implemented by the driver writer because B<DBI> takes care of the details for you. However, the key to ensuring that bound columns work is to call the function C<DBIc_DBISTATE(imp_xxh)-E<gt>get_fbav()> in the code which fetches a row of data. This returns an C<AV>, and each element of the C<AV> contains the C<SV> which should be set to contain the returned data. The pure Perl equivalent is the C<$sth-E<gt>_set_fbav($data)> method, as described in the part on pure Perl drivers. =head2 Casting strings to Perl types based on a SQL type DBI from 1.611 (and DBIXS_REVISION 13606) defines the sql_type_cast_svpv method which may be used to cast a string representation of a value to a more specific Perl type based on a SQL type. You should consider using this method when processing bound column data as it provides some support for the TYPE bind_col attribute which is rarely used in drivers. int sql_type_cast_svpv(pTHX_ SV *sv, int sql_type, U32 flags, void *v) C<sv> is what you would like cast, C<sql_type> is one of the DBI defined SQL types (e.g., C<SQL_INTEGER>) and C<flags> is a bitmask as follows: =over =item DBIstcf_STRICT If set this indicates you want an error state returned if the cast cannot be performed. =item DBIstcf_DISCARD_STRING If set and the pv portion of the C<sv> is cast then this will cause sv's pv to be freed up. =back sql_type_cast_svpv returns the following states: -2 sql_type is not handled - sv not changed -1 sv is undef, sv not changed 0 sv could not be cast cleanly and DBIstcf_STRICT was specified 1 sv could not be case cleanly and DBIstcf_STRICT was not specified 2 sv was cast ok The current implementation of sql_type_cast_svpv supports C<SQL_INTEGER>, C<SQL_DOUBLE> and C<SQL_NUMERIC>. C<SQL_INTEGER> uses sv_2iv and hence may set IV, UV or NV depending on the number. C<SQL_DOUBLE> uses sv_2nv so may set NV and C<SQL_NUMERIC> will set IV or UV or NV. DBIstcf_STRICT should be implemented as the StrictlyTyped attribute and DBIstcf_DISCARD_STRING implemented as the DiscardString attribute to the bind_col method and both default to off. See DBD::Oracle for an example of how this is used. =head1 SUBCLASSING DBI DRIVERS This is definitely an open subject. It can be done, as demonstrated by the B<DBD::File> driver, but it is not as simple as one might think. (Note that this topic is different from subclassing the B<DBI>. For an example of that, see the F<t/subclass.t> file supplied with the B<DBI>.) The main problem is that the I<dbh>'s and I<sth>'s that your C<connect()> and C<prepare()> methods return are not instances of your B<DBD::Driver::db> or B<DBD::Driver::st> packages, they are not even derived from it. Instead they are instances of the B<DBI::db> or B<DBI::st> classes or a derived subclass. Thus, if you write a method C<mymethod()> and do a $dbh->mymethod() then the autoloader will search for that method in the package B<DBI::db>. Of course you can instead to a $dbh->func('mymethod') and that will indeed work, even if C<mymethod()> is inherited, but not without additional work. Setting I<@ISA> is not sufficient. =head2 Overwriting methods The first problem is, that the C<connect()> method has no idea of subclasses. For example, you cannot implement base class and subclass in the same file: The C<install_driver()> method wants to do a require DBD::Driver; In particular, your subclass B<has> to be a separate driver, from the view of B<DBI>, and you cannot share driver handles. Of course that's not much of a problem. You should even be able to inherit the base classes C<connect()> method. But you cannot simply overwrite the method, unless you do something like this, quoted from B<DBD::CSV>: sub connect ($$;$$$) { my ($drh, $dbname, $user, $auth, $attr) = @_; my $this = $drh->DBD::File::dr::connect($dbname, $user, $auth, $attr); if (!exists($this->{csv_tables})) { $this->{csv_tables} = {}; } $this; } Note that we cannot do a $drh->SUPER::connect($dbname, $user, $auth, $attr); as we would usually do in a an OO environment, because I<$drh> is an instance of B<DBI::dr>. And note, that the C<connect()> method of B<DBD::File> is able to handle subclass attributes. See the description of Pure Perl drivers above. It is essential that you always call superclass method in the above manner. However, that should do. =head2 Attribute handling Fortunately the B<DBI> specifications allow a simple, but still performant way of handling attributes. The idea is based on the convention that any driver uses a prefix I<driver_> for its private methods. Thus it's always clear whether to pass attributes to the super class or not. For example, consider this C<STORE()> method from the B<DBD::CSV> class: sub STORE { my ($dbh, $attr, $val) = @_; if ($attr !~ /^driver_/) { return $dbh->DBD::File::db::STORE($attr, $val); } if ($attr eq 'driver_foo') { ... } =cut use Exporter (); use Config qw(%Config); use Carp; use Cwd; use File::Spec; use strict; use vars qw( @ISA @EXPORT $is_dbi ); BEGIN { if ($^O eq 'VMS') { require vmsish; import vmsish; require VMS::Filespec; import VMS::Filespec; } else { *vmsify = sub { return $_[0] }; *unixify = sub { return $_[0] }; } } @ISA = qw(Exporter); @EXPORT = qw( dbd_dbi_dir dbd_dbi_arch_dir dbd_edit_mm_attribs dbd_postamble ); BEGIN { $is_dbi = (-r 'DBI.pm' && -r 'DBI.xs' && -r 'DBIXS.h'); require DBI unless $is_dbi; } my $done_inst_checks; sub _inst_checks { return if $done_inst_checks++; my $cwd = cwd(); if ($cwd =~ /\Q$Config{path_sep}/) { warn "*** Warning: Path separator characters (`$Config{path_sep}') ", "in the current directory path ($cwd) may cause problems\a\n\n"; sleep 2; } if ($cwd =~ /\s/) { warn "*** Warning: whitespace characters ", "in the current directory path ($cwd) may cause problems\a\n\n"; sleep 2; } if ( $^O eq 'MSWin32' && $Config{cc} eq 'cl' && !(exists $ENV{'LIB'} && exists $ENV{'INCLUDE'})) { die <<EOT; *** You're using Microsoft Visual C++ compiler or similar but the LIB and INCLUDE environment variables are not both set. You need to run the VCVARS32.BAT batch file that was supplied with the compiler before you can use it. A copy of vcvars32.bat can typically be found in the following directories under your Visual Studio install directory: Visual C++ 6.0: vc98\\bin Visual Studio .NET: vc7\\bin Find it, run it, then retry this. If you think this error is not correct then just set the LIB and INCLUDE environment variables to some value to disable the check. EOT } } sub dbd_edit_mm_attribs { # this both edits the attribs in-place and returns the flattened attribs my $mm_attr = shift; my $dbd_attr = shift || {}; croak "dbd_edit_mm_attribs( \%makemaker [, \%other ]): too many parameters" if @_; _inst_checks(); # what can be done my %test_variants = ( p => { name => "DBI::PurePerl", match => qr/^\d/, add => [ '$ENV{DBI_PUREPERL} = 2', 'END { delete $ENV{DBI_PUREPERL}; }' ], }, g => { name => "DBD::Gofer", match => qr/^\d/, add => [ q{$ENV{DBI_AUTOPROXY} = 'dbi:Gofer:transport=null;policy=pedantic'}, q|END { delete $ENV{DBI_AUTOPROXY}; }| ], }, n => { name => "DBI::SQL::Nano", match => qr/^(?:48dbi_dbd_sqlengine|49dbd_file|5\ddbm_\w+|85gofer)\.t$/, add => [ q{$ENV{DBI_SQL_NANO} = 1}, q|END { delete $ENV{DBI_SQL_NANO}; }| ], }, # mx => { name => "DBD::Multiplex", # add => [ q{local $ENV{DBI_AUTOPROXY} = 'dbi:Multiplex:';} ], # } # px => { name => "DBD::Proxy", # need mechanism for starting/stopping the proxy server # add => [ q{local $ENV{DBI_AUTOPROXY} = 'dbi:Proxy:XXX';} ], # } ); # decide what needs doing $dbd_attr->{create_pp_tests} or delete $test_variants{p}; $dbd_attr->{create_nano_tests} or delete $test_variants{n}; $dbd_attr->{create_gap_tests} or delete $test_variants{g}; # expand for all combinations my @all_keys = my @tv_keys = sort keys %test_variants; while( @tv_keys ) { my $cur_key = shift @tv_keys; last if( 1 < length $cur_key ); my @new_keys; foreach my $remain (@tv_keys) { push @new_keys, $cur_key . $remain unless $remain =~ /$cur_key/; } push @tv_keys, @new_keys; push @all_keys, @new_keys; } my %uniq_keys; foreach my $key (@all_keys) { @tv_keys = sort split //, $key; my $ordered = join( '', @tv_keys ); $uniq_keys{$ordered} = 1; } @all_keys = sort { length $a <=> length $b or $a cmp $b } keys %uniq_keys; # do whatever needs doing if( keys %test_variants ) { # XXX need to convert this to work within the generated Makefile # so 'make' creates them and 'make clean' deletes them opendir DIR, 't' or die "Can't read 't' directory: $!"; my @tests = grep { /\.t$/ } readdir DIR; closedir DIR; foreach my $test_combo (@all_keys) { @tv_keys = split //, $test_combo; my @test_names = map { $test_variants{$_}->{name} } @tv_keys; printf "Creating test wrappers for " . join( " + ", @test_names ) . ":\n"; my @test_matches = map { $test_variants{$_}->{match} } @tv_keys; my @test_adds; foreach my $test_add ( map { $test_variants{$_}->{add} } @tv_keys) { push @test_adds, @$test_add; } my $v_type = $test_combo; $v_type = 'x' . $v_type if length( $v_type ) > 1; TEST: foreach my $test (sort @tests) { foreach my $match (@test_matches) { next TEST if $test !~ $match; } my $usethr = ($test =~ /(\d+|\b)thr/ && $] >= 5.008 && $Config{useithreads}); my $v_test = "t/zv${v_type}_$test"; my $v_perl = ($test =~ /taint/) ? "perl -wT" : "perl -w"; printf "%s %s\n", $v_test, ($usethr) ? "(use threads)" : ""; open PPT, ">$v_test" or warn "Can't create $v_test: $!"; print PPT "#!$v_perl\n"; print PPT "use threads;\n" if $usethr; print PPT "$_;\n" foreach @test_adds; print PPT "require './t/$test'; # or warn \$!;\n"; close PPT or warn "Error writing $v_test: $!"; } } } return %$mm_attr; } sub dbd_dbi_dir { _inst_checks(); return '.' if $is_dbi; my $dbidir = $INC{'DBI.pm'} || die "DBI.pm not in %INC!"; $dbidir =~ s:/DBI\.pm$::; return $dbidir; } sub dbd_dbi_arch_dir { _inst_checks(); return '$(INST_ARCHAUTODIR)' if $is_dbi; my $dbidir = dbd_dbi_dir(); my %seen; my @try = grep { not $seen{$_}++ } map { vmsify( unixify($_) . "/auto/DBI/" ) } @INC; my @xst = grep { -f vmsify( unixify($_) . "/Driver.xst" ) } @try; Carp::croak("Unable to locate Driver.xst in @try") unless @xst; Carp::carp( "Multiple copies of Driver.xst found in: @xst") if @xst > 1; print "Using DBI $DBI::VERSION (for perl $] on $Config{archname}) installed in $xst[0]\n"; return File::Spec->canonpath($xst[0]); } sub dbd_postamble { my $self = shift; _inst_checks(); my $dbi_instarch_dir = ($is_dbi) ? "." : dbd_dbi_arch_dir(); my $dbi_driver_xst= File::Spec->catfile($dbi_instarch_dir, 'Driver.xst'); my $xstf_h = File::Spec->catfile($dbi_instarch_dir, 'Driver_xst.h'); # we must be careful of quotes, especially for Win32 here. return ' # --- This section was generated by DBI::DBD::dbd_postamble() DBI_INSTARCH_DIR='.$dbi_instarch_dir.' DBI_DRIVER_XST='.$dbi_driver_xst.' # The main dependency (technically correct but probably not used) $(BASEEXT).c: $(BASEEXT).xsi # This dependency is needed since MakeMaker uses the .xs.o rule $(BASEEXT)$(OBJ_EXT): $(BASEEXT).xsi $(BASEEXT).xsi: $(DBI_DRIVER_XST) '.$xstf_h.' $(PERL) -p -e "s/~DRIVER~/$(BASEEXT)/g" $(DBI_DRIVER_XST) > $(BASEEXT).xsi # --- '; } package DBDI; # just to reserve it via PAUSE for the future 1; __END__ =head1 AUTHORS Jonathan Leffler <jleffler@us.ibm.com> (previously <jleffler@informix.com>), Jochen Wiedmann <joe@ispsoft.de>, Steffen Goeldner <sgoeldner@cpan.org>, and Tim Bunce <dbi-users@perl.org>. =cut DBI/Util/CacheMemory.pm 0000644 00000004425 15037233316 0010621 0 ustar 00 package DBI::Util::CacheMemory; # $Id: CacheMemory.pm 10314 2007-11-26 22:25:33Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; =head1 NAME DBI::Util::CacheMemory - a very fast but very minimal subset of Cache::Memory =head1 DESCRIPTION Like Cache::Memory (part of the Cache distribution) but doesn't support any fancy features. This module aims to be a very fast compatible strict sub-set for simple cases, such as basic client-side caching for DBD::Gofer. Like Cache::Memory, and other caches in the Cache and Cache::Cache distributions, the data will remain in the cache until cleared, it expires, or the process dies. The cache object simply going out of scope will I<not> destroy the data. =head1 METHODS WITH CHANGES =head2 new All options except C<namespace> are ignored. =head2 set Doesn't support expiry. =head2 purge Same as clear() - deletes everything in the namespace. =head1 METHODS WITHOUT CHANGES =over =item clear =item count =item exists =item remove =back =head1 UNSUPPORTED METHODS If it's not listed above, it's not supported. =cut our $VERSION = "0.010315"; my %cache; sub new { my ($class, %options ) = @_; my $namespace = $options{namespace} ||= 'Default'; #$options{_cache} = \%cache; # can be handy for debugging/dumping my $self = bless \%options => $class; $cache{ $namespace } ||= {}; # init - ensure it exists return $self; } sub set { my ($self, $key, $value) = @_; $cache{ $self->{namespace} }->{$key} = $value; } sub get { my ($self, $key) = @_; return $cache{ $self->{namespace} }->{$key}; } sub exists { my ($self, $key) = @_; return exists $cache{ $self->{namespace} }->{$key}; } sub remove { my ($self, $key) = @_; return delete $cache{ $self->{namespace} }->{$key}; } sub purge { return shift->clear; } sub clear { $cache{ shift->{namespace} } = {}; } sub count { return scalar keys %{ $cache{ shift->{namespace} } }; } sub size { my $c = $cache{ shift->{namespace} }; my $size = 0; while ( my ($k,$v) = each %$c ) { $size += length($k) + length($v); } return $size; } 1; DBI/Util/_accessor.pm 0000644 00000003202 15037233317 0010357 0 ustar 00 package DBI::Util::_accessor; use strict; use Carp; our $VERSION = "0.009479"; # inspired by Class::Accessor::Fast sub new { my($proto, $fields) = @_; my($class) = ref $proto || $proto; $fields ||= {}; my @dubious = grep { !m/^_/ && !$proto->can($_) } keys %$fields; carp "$class doesn't have accessors for fields: @dubious" if @dubious; # make a (shallow) copy of $fields. bless {%$fields}, $class; } sub mk_accessors { my($self, @fields) = @_; $self->mk_accessors_using('make_accessor', @fields); } sub mk_accessors_using { my($self, $maker, @fields) = @_; my $class = ref $self || $self; # So we don't have to do lots of lookups inside the loop. $maker = $self->can($maker) unless ref $maker; no strict 'refs'; foreach my $field (@fields) { my $accessor = $self->$maker($field); *{$class."\:\:$field"} = $accessor unless defined &{$class."\:\:$field"}; } #my $hash_ref = \%{$class."\:\:_accessors_hash}; #$hash_ref->{$_}++ for @fields; # XXX also copy down _accessors_hash of base class(es) # so one in this class is complete return; } sub make_accessor { my($class, $field) = @_; return sub { my $self = shift; return $self->{$field} unless @_; croak "Too many arguments to $field" if @_ > 1; return $self->{$field} = shift; }; } sub make_accessor_autoviv_hashref { my($class, $field) = @_; return sub { my $self = shift; return $self->{$field} ||= {} unless @_; croak "Too many arguments to $field" if @_ > 1; return $self->{$field} = shift; }; } 1; DBI/Profile.pm 0000644 00000077617 15037233317 0007126 0 ustar 00 package DBI::Profile; =head1 NAME DBI::Profile - Performance profiling and benchmarking for the DBI =head1 SYNOPSIS The easiest way to enable DBI profiling is to set the DBI_PROFILE environment variable to 2 and then run your code as usual: DBI_PROFILE=2 prog.pl This will profile your program and then output a textual summary grouped by query when the program exits. You can also enable profiling by setting the Profile attribute of any DBI handle: $dbh->{Profile} = 2; Then the summary will be printed when the handle is destroyed. Many other values apart from are possible - see L<"ENABLING A PROFILE"> below. =head1 DESCRIPTION The DBI::Profile module provides a simple interface to collect and report performance and benchmarking data from the DBI. For a more elaborate interface, suitable for larger programs, see L<DBI::ProfileDumper|DBI::ProfileDumper> and L<dbiprof|dbiprof>. For Apache/mod_perl applications see L<DBI::ProfileDumper::Apache|DBI::ProfileDumper::Apache>. =head1 OVERVIEW Performance data collection for the DBI is built around several concepts which are important to understand clearly. =over 4 =item Method Dispatch Every method call on a DBI handle passes through a single 'dispatch' function which manages all the common aspects of DBI method calls, such as handling the RaiseError attribute. =item Data Collection If profiling is enabled for a handle then the dispatch code takes a high-resolution timestamp soon after it is entered. Then, after calling the appropriate method and just before returning, it takes another high-resolution timestamp and calls a function to record the information. That function is passed the two timestamps plus the DBI handle and the name of the method that was called. That data about a single DBI method call is called a I<profile sample>. =item Data Filtering If the method call was invoked by the DBI or by a driver then the call is ignored for profiling because the time spent will be accounted for by the original 'outermost' call for your code. For example, the calls that the selectrow_arrayref() method makes to prepare() and execute() etc. are not counted individually because the time spent in those methods is going to be allocated to the selectrow_arrayref() method when it returns. If this was not done then it would be very easy to double count time spent inside the DBI. =item Data Storage Tree The profile data is accumulated as 'leaves on a tree'. The 'path' through the branches of the tree to a particular leaf is determined dynamically for each sample. This is a key feature of DBI profiling. For each profiled method call the DBI walks along the Path and uses each value in the Path to step into and grow the Data tree. For example, if the Path is [ 'foo', 'bar', 'baz' ] then the new profile sample data will be I<merged> into the tree at $h->{Profile}->{Data}->{foo}->{bar}->{baz} But it's not very useful to merge all the call data into one leaf node (except to get an overall 'time spent inside the DBI' total). It's more common to want the Path to include dynamic values such as the current statement text and/or the name of the method called to show what the time spent inside the DBI was for. The Path can contain some 'magic cookie' values that are automatically replaced by corresponding dynamic values when they're used. These magic cookies always start with a punctuation character. For example a value of 'C<!MethodName>' in the Path causes the corresponding entry in the Data to be the name of the method that was called. For example, if the Path was: [ 'foo', '!MethodName', 'bar' ] and the selectall_arrayref() method was called, then the profile sample data for that call will be merged into the tree at: $h->{Profile}->{Data}->{foo}->{selectall_arrayref}->{bar} =item Profile Data Profile data is stored at the 'leaves' of the tree as references to an array of numeric values. For example: [ 106, # 0: count of samples at this node 0.0312958955764771, # 1: total duration 0.000490069389343262, # 2: first duration 0.000176072120666504, # 3: shortest duration 0.00140702724456787, # 4: longest duration 1023115819.83019, # 5: time of first sample 1023115819.86576, # 6: time of last sample ] After the first sample, later samples always update elements 0, 1, and 6, and may update 3 or 4 depending on the duration of the sampled call. =back =head1 ENABLING A PROFILE Profiling is enabled for a handle by assigning to the Profile attribute. For example: $h->{Profile} = DBI::Profile->new(); The Profile attribute holds a blessed reference to a hash object that contains the profile data and attributes relating to it. The class the Profile object is blessed into is expected to provide at least a DESTROY method which will dump the profile data to the DBI trace file handle (STDERR by default). All these examples have the same effect as each other: $h->{Profile} = 0; $h->{Profile} = "/DBI::Profile"; $h->{Profile} = DBI::Profile->new(); $h->{Profile} = {}; $h->{Profile} = { Path => [] }; Similarly, these examples have the same effect as each other: $h->{Profile} = 6; $h->{Profile} = "6/DBI::Profile"; $h->{Profile} = "!Statement:!MethodName/DBI::Profile"; $h->{Profile} = { Path => [ '!Statement', '!MethodName' ] }; If a non-blessed hash reference is given then the DBI::Profile module is automatically C<require>'d and the reference is blessed into that class. If a string is given then it is processed like this: ($path, $module, $args) = split /\//, $string, 3 @path = split /:/, $path @args = split /:/, $args eval "require $module" if $module $module ||= "DBI::Profile" $module->new( Path => \@Path, @args ) So the first value is used to select the Path to be used (see below). The second value, if present, is used as the name of a module which will be loaded and it's C<new> method called. If not present it defaults to DBI::Profile. Any other values are passed as arguments to the C<new> method. For example: "C<2/DBIx::OtherProfile/Foo:42>". Numbers can be used as a shorthand way to enable common Path values. The simplest way to explain how the values are interpreted is to show the code: push @Path, "DBI" if $path_elem & 0x01; push @Path, "!Statement" if $path_elem & 0x02; push @Path, "!MethodName" if $path_elem & 0x04; push @Path, "!MethodClass" if $path_elem & 0x08; push @Path, "!Caller2" if $path_elem & 0x10; So "2" is the same as "!Statement" and "6" (2+4) is the same as "!Statement:!Method". Those are the two most commonly used values. Using a negative number will reverse the path. Thus "-6" will group by method name then statement. The splitting and parsing of string values assigned to the Profile attribute may seem a little odd, but there's a good reason for it. Remember that attributes can be embedded in the Data Source Name string which can be passed in to a script as a parameter. For example: dbi:DriverName(Profile=>2):dbname dbi:DriverName(Profile=>{Username}:!Statement/MyProfiler/Foo:42):dbname And also, if the C<DBI_PROFILE> environment variable is set then The DBI arranges for every driver handle to share the same profile object. When perl exits a single profile summary will be generated that reflects (as nearly as practical) the total use of the DBI by the application. =head1 THE PROFILE OBJECT The DBI core expects the Profile attribute value to be a hash reference and if the following values don't exist it will create them as needed: =head2 Data A reference to a hash containing the collected profile data. =head2 Path The Path value is a reference to an array. Each element controls the value to use at the corresponding level of the profile Data tree. If the value of Path is anything other than an array reference, it is treated as if it was: [ '!Statement' ] The elements of Path array can be one of the following types: =head3 Special Constant B<!Statement> Use the current Statement text. Typically that's the value of the Statement attribute for the handle the method was called with. Some methods, like commit() and rollback(), are unrelated to a particular statement. For those methods !Statement records an empty string. For statement handles this is always simply the string that was given to prepare() when the handle was created. For database handles this is the statement that was last prepared or executed on that database handle. That can lead to a little 'fuzzyness' because, for example, calls to the quote() method to build a new statement will typically be associated with the previous statement. In practice this isn't a significant issue and the dynamic Path mechanism can be used to setup your own rules. B<!MethodName> Use the name of the DBI method that the profile sample relates to. B<!MethodClass> Use the fully qualified name of the DBI method, including the package, that the profile sample relates to. This shows you where the method was implemented. For example: 'DBD::_::db::selectrow_arrayref' => 0.022902s 'DBD::mysql::db::selectrow_arrayref' => 2.244521s / 99 = 0.022445s avg (first 0.022813s, min 0.022051s, max 0.028932s) The "DBD::_::db::selectrow_arrayref" shows that the driver has inherited the selectrow_arrayref method provided by the DBI. But you'll note that there is only one call to DBD::_::db::selectrow_arrayref but another 99 to DBD::mysql::db::selectrow_arrayref. Currently the first call doesn't record the true location. That may change. B<!Caller> Use a string showing the filename and line number of the code calling the method. B<!Caller2> Use a string showing the filename and line number of the code calling the method, as for !Caller, but also include filename and line number of the code that called that. Calls from DBI:: and DBD:: packages are skipped. B<!File> Same as !Caller above except that only the filename is included, not the line number. B<!File2> Same as !Caller2 above except that only the filenames are included, not the line number. B<!Time> Use the current value of time(). Rarely used. See the more useful C<!Time~N> below. B<!Time~N> Where C<N> is an integer. Use the current value of time() but with reduced precision. The value used is determined in this way: int( time() / N ) * N This is a useful way to segregate a profile into time slots. For example: [ '!Time~60', '!Statement' ] =head3 Code Reference The subroutine is passed the handle it was called on and the DBI method name. The current Statement is in $_. The statement string should not be modified, so most subs start with C<local $_ = $_;>. The list of values it returns is used at that point in the Profile Path. Any undefined values are treated as the string "C<undef>". The sub can 'veto' (reject) a profile sample by including a reference to undef (C<\undef>) in the returned list. That can be useful when you want to only profile statements that match a certain pattern, or only profile certain methods. =head3 Subroutine Specifier A Path element that begins with 'C<&>' is treated as the name of a subroutine in the DBI::ProfileSubs namespace and replaced with the corresponding code reference. Currently this only works when the Path is specified by the C<DBI_PROFILE> environment variable. Also, currently, the only subroutine in the DBI::ProfileSubs namespace is C<'&norm_std_n3'>. That's a very handy subroutine when profiling code that doesn't use placeholders. See L<DBI::ProfileSubs> for more information. =head3 Attribute Specifier A string enclosed in braces, such as 'C<{Username}>', specifies that the current value of the corresponding database handle attribute should be used at that point in the Path. =head3 Reference to a Scalar Specifies that the current value of the referenced scalar be used at that point in the Path. This provides an efficient way to get 'contextual' values into your profile. =head3 Other Values Any other values are stringified and used literally. (References, and values that begin with punctuation characters are reserved.) =head1 REPORTING =head2 Report Format The current accumulated profile data can be formatted and output using print $h->{Profile}->format; To discard the profile data and start collecting fresh data you can do: $h->{Profile}->{Data} = undef; The default results format looks like this: DBI::Profile: 0.001015s 42.7% (5 calls) programname @ YYYY-MM-DD HH:MM:SS '' => 0.000024s / 2 = 0.000012s avg (first 0.000015s, min 0.000009s, max 0.000015s) 'SELECT mode,size,name FROM table' => 0.000991s / 3 = 0.000330s avg (first 0.000678s, min 0.000009s, max 0.000678s) Which shows the total time spent inside the DBI, with a count of the total number of method calls and the name of the script being run, then a formatted version of the profile data tree. If the results are being formatted when the perl process is exiting (which is usually the case when the DBI_PROFILE environment variable is used) then the percentage of time the process spent inside the DBI is also shown. If the process is not exiting then the percentage is calculated using the time between the first and last call to the DBI. In the example above the paths in the tree are only one level deep and use the Statement text as the value (that's the default behaviour). The merged profile data at the 'leaves' of the tree are presented as total time spent, count, average time spent (which is simply total time divided by the count), then the time spent on the first call, the time spent on the fastest call, and finally the time spent on the slowest call. The 'avg', 'first', 'min' and 'max' times are not particularly useful when the profile data path only contains the statement text. Here's an extract of a more detailed example using both statement text and method name in the path: 'SELECT mode,size,name FROM table' => 'FETCH' => 0.000076s 'fetchrow_hashref' => 0.036203s / 108 = 0.000335s avg (first 0.000490s, min 0.000152s, max 0.002786s) Here you can see the 'avg', 'first', 'min' and 'max' for the 108 calls to fetchrow_hashref() become rather more interesting. Also the data for FETCH just shows a time value because it was only called once. Currently the profile data is output sorted by branch names. That may change in a later version so the leaf nodes are sorted by total time per leaf node. =head2 Report Destination The default method of reporting is for the DESTROY method of the Profile object to format the results and write them using: DBI->trace_msg($results, 0); # see $ON_DESTROY_DUMP below to write them to the DBI trace() filehandle (which defaults to STDERR). To direct the DBI trace filehandle to write to a file without enabling tracing the trace() method can be called with a trace level of 0. For example: DBI->trace(0, $filename); The same effect can be achieved without changing the code by setting the C<DBI_TRACE> environment variable to C<0=filename>. The $DBI::Profile::ON_DESTROY_DUMP variable holds a code ref that's called to perform the output of the formatted results. The default value is: $ON_DESTROY_DUMP = sub { DBI->trace_msg($results, 0) }; Apart from making it easy to send the dump elsewhere, it can also be useful as a simple way to disable dumping results. =head1 CHILD HANDLES Child handles inherit a reference to the Profile attribute value of their parent. So if profiling is enabled for a database handle then by default the statement handles created from it all contribute to the same merged profile data tree. =head1 PROFILE OBJECT METHODS =head2 format See L</REPORTING>. =head2 as_node_path_list @ary = $dbh->{Profile}->as_node_path_list(); @ary = $dbh->{Profile}->as_node_path_list($node, $path); Returns the collected data ($dbh->{Profile}{Data}) restructured into a list of array refs, one for each leaf node in the Data tree. This 'flat' structure is often much simpler for applications to work with. The first element of each array ref is a reference to the leaf node. The remaining elements are the 'path' through the data tree to that node. For example, given a data tree like this: {key1a}{key2a}[node1] {key1a}{key2b}[node2] {key1b}{key2a}{key3a}[node3] The as_node_path_list() method will return this list: [ [node1], 'key1a', 'key2a' ] [ [node2], 'key1a', 'key2b' ] [ [node3], 'key1b', 'key2a', 'key3a' ] The nodes are ordered by key, depth-first. The $node argument can be used to focus on a sub-tree. If not specified it defaults to $dbh->{Profile}{Data}. The $path argument can be used to specify a list of path elements that will be added to each element of the returned list. If not specified it defaults to a ref to an empty array. =head2 as_text @txt = $dbh->{Profile}->as_text(); $txt = $dbh->{Profile}->as_text({ node => undef, path => [], separator => " > ", format => '%1$s: %11$fs / %10$d = %2$fs avg (first %12$fs, min %13$fs, max %14$fs)'."\n"; sortsub => sub { ... }, ); Returns the collected data ($dbh->{Profile}{Data}) reformatted into a list of formatted strings. In scalar context the list is returned as a single concatenated string. A hashref can be used to pass in arguments, the default values are shown in the example above. The C<node> and <path> arguments are passed to as_node_path_list(). The C<separator> argument is used to join the elements of the path for each leaf node. The C<sortsub> argument is used to pass in a ref to a sub that will order the list. The subroutine will be passed a reference to the array returned by as_node_path_list() and should sort the contents of the array in place. The return value from the sub is ignored. For example, to sort the nodes by the second level key you could use: sortsub => sub { my $ary=shift; @$ary = sort { $a->[2] cmp $b->[2] } @$ary } The C<format> argument is a C<sprintf> format string that specifies the format to use for each leaf node. It uses the explicit format parameter index mechanism to specify which of the arguments should appear where in the string. The arguments to sprintf are: 1: path to node, joined with the separator 2: average duration (total duration/count) (3 thru 9 are currently unused) 10: count 11: total duration 12: first duration 13: smallest duration 14: largest duration 15: time of first call 16: time of first call =head1 CUSTOM DATA MANIPULATION Recall that C<< $h->{Profile}->{Data} >> is a reference to the collected data. Either to a 'leaf' array (when the Path is empty, i.e., DBI_PROFILE env var is 1), or a reference to hash containing values that are either further hash references or leaf array references. Sometimes it's useful to be able to summarise some or all of the collected data. The dbi_profile_merge_nodes() function can be used to merge leaf node values. =head2 dbi_profile_merge_nodes use DBI qw(dbi_profile_merge_nodes); $time_in_dbi = dbi_profile_merge_nodes(my $totals=[], @$leaves); Merges profile data node. Given a reference to a destination array, and zero or more references to profile data, merges the profile data into the destination array. For example: $time_in_dbi = dbi_profile_merge_nodes( my $totals=[], [ 10, 0.51, 0.11, 0.01, 0.22, 1023110000, 1023110010 ], [ 15, 0.42, 0.12, 0.02, 0.23, 1023110005, 1023110009 ], ); $totals will then contain [ 25, 0.93, 0.11, 0.01, 0.23, 1023110000, 1023110010 ] and $time_in_dbi will be 0.93; The second argument need not be just leaf nodes. If given a reference to a hash then the hash is recursively searched for leaf nodes and all those found are merged. For example, to get the time spent 'inside' the DBI during an http request, your logging code run at the end of the request (i.e. mod_perl LogHandler) could use: my $time_in_dbi = 0; if (my $Profile = $dbh->{Profile}) { # if DBI profiling is enabled $time_in_dbi = dbi_profile_merge_nodes(my $total=[], $Profile->{Data}); $Profile->{Data} = {}; # reset the profile data } If profiling has been enabled then $time_in_dbi will hold the time spent inside the DBI for that handle (and any other handles that share the same profile data) since the last request. Prior to DBI 1.56 the dbi_profile_merge_nodes() function was called dbi_profile_merge(). That name still exists as an alias. =head1 CUSTOM DATA COLLECTION =head2 Using The Path Attribute XXX example to be added later using a selectall_arrayref call XXX nested inside a fetch loop where the first column of the XXX outer loop is bound to the profile Path using XXX bind_column(1, \${ $dbh->{Profile}->{Path}->[0] }) XXX so you end up with separate profiles for each loop XXX (patches welcome to add this to the docs :) =head2 Adding Your Own Samples The dbi_profile() function can be used to add extra sample data into the profile data tree. For example: use DBI; use DBI::Profile (dbi_profile dbi_time); my $t1 = dbi_time(); # floating point high-resolution time ... execute code you want to profile here ... my $t2 = dbi_time(); dbi_profile($h, $statement, $method, $t1, $t2); The $h parameter is the handle the extra profile sample should be associated with. The $statement parameter is the string to use where the Path specifies !Statement. If $statement is undef then $h->{Statement} will be used. Similarly $method is the string to use if the Path specifies !MethodName. There is no default value for $method. The $h->{Profile}{Path} attribute is processed by dbi_profile() in the usual way. The $h parameter is usually a DBI handle but it can also be a reference to a hash, in which case the dbi_profile() acts on each defined value in the hash. This is an efficient way to update multiple profiles with a single sample, and is used by the L<DashProfiler> module. =head1 SUBCLASSING Alternate profile modules must subclass DBI::Profile to help ensure they work with future versions of the DBI. =head1 CAVEATS Applications which generate many different statement strings (typically because they don't use placeholders) and profile with !Statement in the Path (the default) will consume memory in the Profile Data structure for each statement. Use a code ref in the Path to return an edited (simplified) form of the statement. If a method throws an exception itself (not via RaiseError) then it won't be counted in the profile. If a HandleError subroutine throws an exception (rather than returning 0 and letting RaiseError do it) then the method call won't be counted in the profile. Time spent in DESTROY is added to the profile of the parent handle. Time spent in DBI->*() methods is not counted. The time spent in the driver connect method, $drh->connect(), when it's called by DBI->connect is counted if the DBI_PROFILE environment variable is set. Time spent fetching tied variables, $DBI::errstr, is counted. Time spent in FETCH for $h->{Profile} is not counted, so getting the profile data doesn't alter it. DBI::PurePerl does not support profiling (though it could in theory). For asynchronous queries, time spent while the query is running on the backend is not counted. A few platforms don't support the gettimeofday() high resolution time function used by the DBI (and available via the dbi_time() function). In which case you'll get integer resolution time which is mostly useless. On Windows platforms the dbi_time() function is limited to millisecond resolution. Which isn't sufficiently fine for our needs, but still much better than integer resolution. This limited resolution means that fast method calls will often register as taking 0 time. And timings in general will have much more 'jitter' depending on where within the 'current millisecond' the start and end timing was taken. This documentation could be more clear. Probably needs to be reordered to start with several examples and build from there. Trying to explain the concepts first seems painful and to lead to just as many forward references. (Patches welcome!) =cut use strict; use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); use Exporter (); use UNIVERSAL (); use Carp; use DBI qw(dbi_time dbi_profile dbi_profile_merge_nodes dbi_profile_merge); $VERSION = "2.015065"; @ISA = qw(Exporter); @EXPORT = qw( DBIprofile_Statement DBIprofile_MethodName DBIprofile_MethodClass dbi_profile dbi_profile_merge_nodes dbi_profile_merge dbi_time ); @EXPORT_OK = qw( format_profile_thingy ); use constant DBIprofile_Statement => '!Statement'; use constant DBIprofile_MethodName => '!MethodName'; use constant DBIprofile_MethodClass => '!MethodClass'; our $ON_DESTROY_DUMP = sub { DBI->trace_msg(shift, 0) }; our $ON_FLUSH_DUMP = sub { DBI->trace_msg(shift, 0) }; sub new { my $class = shift; my $profile = { @_ }; return bless $profile => $class; } sub _auto_new { my $class = shift; my ($arg) = @_; # This sub is called by DBI internals when a non-hash-ref is # assigned to the Profile attribute. For example # dbi:mysql(RaiseError=>1,Profile=>!Statement:!MethodName/DBIx::MyProfile/arg1:arg2):dbname # This sub works out what to do and returns a suitable hash ref. $arg =~ s/^DBI::/2\/DBI::/ and carp "Automatically changed old-style DBI::Profile specification to $arg"; # it's a path/module/k1:v1:k2:v2:... list my ($path, $package, $args) = split /\//, $arg, 3; my @args = (defined $args) ? split(/:/, $args, -1) : (); my @Path; for my $element (split /:/, $path) { if (DBI::looks_like_number($element)) { my $reverse = ($element < 0) ? ($element=-$element, 1) : 0; my @p; # a single "DBI" is special-cased in format() push @p, "DBI" if $element & 0x01; push @p, DBIprofile_Statement if $element & 0x02; push @p, DBIprofile_MethodName if $element & 0x04; push @p, DBIprofile_MethodClass if $element & 0x08; push @p, '!Caller2' if $element & 0x10; push @Path, ($reverse ? reverse @p : @p); } elsif ($element =~ m/^&(\w.*)/) { my $name = "DBI::ProfileSubs::$1"; # capture $1 early require DBI::ProfileSubs; my $code = do { no strict; *{$name}{CODE} }; if (defined $code) { push @Path, $code; } else { warn "$name: subroutine not found\n"; push @Path, $element; } } else { push @Path, $element; } } eval "require $package" if $package; # silently ignores errors $package ||= $class; return $package->new(Path => \@Path, @args); } sub empty { # empty out profile data my $self = shift; DBI->trace_msg("profile data discarded\n",0) if $self->{Trace}; $self->{Data} = undef; } sub filename { # baseclass method, see DBI::ProfileDumper return undef; } sub flush_to_disk { # baseclass method, see DBI::ProfileDumper & DashProfiler::Core my $self = shift; return unless $ON_FLUSH_DUMP; return unless $self->{Data}; my $detail = $self->format(); $ON_FLUSH_DUMP->($detail) if $detail; } sub as_node_path_list { my ($self, $node, $path) = @_; # convert the tree into an array of arrays # from # {key1a}{key2a}[node1] # {key1a}{key2b}[node2] # {key1b}{key2a}{key3a}[node3] # to # [ [node1], 'key1a', 'key2a' ] # [ [node2], 'key1a', 'key2b' ] # [ [node3], 'key1b', 'key2a', 'key3a' ] $node ||= $self->{Data} or return; $path ||= []; if (ref $node eq 'HASH') { # recurse $path = [ @$path, undef ]; return map { $path->[-1] = $_; ($node->{$_}) ? $self->as_node_path_list($node->{$_}, $path) : () } sort keys %$node; } return [ $node, @$path ]; } sub as_text { my ($self, $args_ref) = @_; my $separator = $args_ref->{separator} || " > "; my $format_path_element = $args_ref->{format_path_element} || "%s"; # or e.g., " key%2$d='%s'" my $format = $args_ref->{format} || '%1$s: %11$fs / %10$d = %2$fs avg (first %12$fs, min %13$fs, max %14$fs)'."\n"; my @node_path_list = $self->as_node_path_list(undef, $args_ref->{path}); $args_ref->{sortsub}->(\@node_path_list) if $args_ref->{sortsub}; my $eval = "qr/".quotemeta($separator)."/"; my $separator_re = eval($eval) || quotemeta($separator); #warn "[$eval] = [$separator_re]"; my @text; my @spare_slots = (undef) x 7; for my $node_path (@node_path_list) { my ($node, @path) = @$node_path; my $idx = 0; for (@path) { s/[\r\n]+/ /g; s/$separator_re/ /g; ++$idx; if ($format_path_element eq "%s") { $_ = sprintf $format_path_element, $_; } else { $_ = sprintf $format_path_element, $_, $idx; } } push @text, sprintf $format, join($separator, @path), # 1=path ($node->[0] ? $node->[1]/$node->[0] : 0), # 2=avg @spare_slots, @$node; # 10=count, 11=dur, 12=first_dur, 13=min, 14=max, 15=first_called, 16=last_called } return @text if wantarray; return join "", @text; } sub format { my $self = shift; my $class = ref($self) || $self; my $prologue = "$class: "; my $detail = $self->format_profile_thingy( $self->{Data}, 0, " ", my $path = [], my $leaves = [], )."\n"; if (@$leaves) { dbi_profile_merge_nodes(my $totals=[], @$leaves); my ($count, $time_in_dbi, undef, undef, undef, $t1, $t2) = @$totals; (my $progname = $0) =~ s:.*/::; if ($count) { $prologue .= sprintf "%fs ", $time_in_dbi; my $perl_time = ($DBI::PERL_ENDING) ? time() - $^T : $t2-$t1; $prologue .= sprintf "%.2f%% ", $time_in_dbi/$perl_time*100 if $perl_time; my @lt = localtime(time); my $ts = sprintf "%d-%02d-%02d %02d:%02d:%02d", 1900+$lt[5], $lt[4]+1, @lt[3,2,1,0]; $prologue .= sprintf "(%d calls) $progname \@ $ts\n", $count; } if (@$leaves == 1 && ref($self->{Data}) eq 'HASH' && $self->{Data}->{DBI}) { $detail = ""; # hide the "DBI" from DBI_PROFILE=1 } } return ($prologue, $detail) if wantarray; return $prologue.$detail; } sub format_profile_leaf { my ($self, $thingy, $depth, $pad, $path, $leaves) = @_; croak "format_profile_leaf called on non-leaf ($thingy)" unless UNIVERSAL::isa($thingy,'ARRAY'); push @$leaves, $thingy if $leaves; my ($count, $total_time, $first_time, $min, $max, $first_called, $last_called) = @$thingy; return sprintf "%s%fs\n", ($pad x $depth), $total_time if $count <= 1; return sprintf "%s%fs / %d = %fs avg (first %fs, min %fs, max %fs)\n", ($pad x $depth), $total_time, $count, $count ? $total_time/$count : 0, $first_time, $min, $max; } sub format_profile_branch { my ($self, $thingy, $depth, $pad, $path, $leaves) = @_; croak "format_profile_branch called on non-branch ($thingy)" unless UNIVERSAL::isa($thingy,'HASH'); my @chunk; my @keys = sort keys %$thingy; while ( @keys ) { my $k = shift @keys; my $v = $thingy->{$k}; push @$path, $k; push @chunk, sprintf "%s'%s' =>\n%s", ($pad x $depth), $k, $self->format_profile_thingy($v, $depth+1, $pad, $path, $leaves); pop @$path; } return join "", @chunk; } sub format_profile_thingy { my ($self, $thingy, $depth, $pad, $path, $leaves) = @_; return "undef" if not defined $thingy; return $self->format_profile_leaf( $thingy, $depth, $pad, $path, $leaves) if UNIVERSAL::isa($thingy,'ARRAY'); return $self->format_profile_branch($thingy, $depth, $pad, $path, $leaves) if UNIVERSAL::isa($thingy,'HASH'); return "$thingy\n"; } sub on_destroy { my $self = shift; return unless $ON_DESTROY_DUMP; return unless $self->{Data}; my $detail = $self->format(); $ON_DESTROY_DUMP->($detail) if $detail; $self->{Data} = undef; } sub DESTROY { my $self = shift; local $@; DBI->trace_msg("profile data DESTROY\n",0) if (($self->{Trace}||0) >= 2); eval { $self->on_destroy }; if ($@) { chomp $@; my $class = ref($self) || $self; DBI->trace_msg("$class on_destroy failed: $@", 0); } } 1; DBI/ProfileDumper.pm 0000644 00000024222 15037233317 0010263 0 ustar 00 package DBI::ProfileDumper; use strict; =head1 NAME DBI::ProfileDumper - profile DBI usage and output data to a file =head1 SYNOPSIS To profile an existing program using DBI::ProfileDumper, set the DBI_PROFILE environment variable and run your program as usual. For example, using bash: DBI_PROFILE=2/DBI::ProfileDumper program.pl Then analyze the generated file (F<dbi.prof>) with L<dbiprof|dbiprof>: dbiprof You can also activate DBI::ProfileDumper from within your code: use DBI; # profile with default path (2) and output file (dbi.prof) $dbh->{Profile} = "!Statement/DBI::ProfileDumper"; # same thing, spelled out $dbh->{Profile} = "!Statement/DBI::ProfileDumper/File:dbi.prof"; # another way to say it use DBI::ProfileDumper; $dbh->{Profile} = DBI::ProfileDumper->new( Path => [ '!Statement' ], File => 'dbi.prof' ); # using a custom path $dbh->{Profile} = DBI::ProfileDumper->new( Path => [ "foo", "bar" ], File => 'dbi.prof', ); =head1 DESCRIPTION DBI::ProfileDumper is a subclass of L<DBI::Profile|DBI::Profile> which dumps profile data to disk instead of printing a summary to your screen. You can then use L<dbiprof|dbiprof> to analyze the data in a number of interesting ways, or you can roll your own analysis using L<DBI::ProfileData|DBI::ProfileData>. B<NOTE:> For Apache/mod_perl applications, use L<DBI::ProfileDumper::Apache|DBI::ProfileDumper::Apache>. =head1 USAGE One way to use this module is just to enable it in your C<$dbh>: $dbh->{Profile} = "1/DBI::ProfileDumper"; This will write out profile data by statement into a file called F<dbi.prof>. If you want to modify either of these properties, you can construct the DBI::ProfileDumper object yourself: use DBI::ProfileDumper; $dbh->{Profile} = DBI::ProfileDumper->new( Path => [ '!Statement' ], File => 'dbi.prof' ); The C<Path> option takes the same values as in L<DBI::Profile>. The C<File> option gives the name of the file where results will be collected. If it already exists it will be overwritten. You can also activate this module by setting the DBI_PROFILE environment variable: $ENV{DBI_PROFILE} = "!Statement/DBI::ProfileDumper"; This will cause all DBI handles to share the same profiling object. =head1 METHODS The following methods are available to be called using the profile object. You can get access to the profile object from the Profile key in any DBI handle: my $profile = $dbh->{Profile}; =head2 flush_to_disk $profile->flush_to_disk() Flushes all collected profile data to disk and empties the Data hash. Returns the filename written to. If no profile data has been collected then the file is not written and flush_to_disk() returns undef. The file is locked while it's being written. A process 'consuming' the files while they're being written to, should rename the file first, then lock it, then read it, then close and delete it. The C<DeleteFiles> option to L<DBI::ProfileData> does the right thing. This method may be called multiple times during a program run. =head2 empty $profile->empty() Clears the Data hash without writing to disk. =head2 filename $filename = $profile->filename(); Get or set the filename. The filename can be specified as a CODE reference, in which case the referenced code should return the filename to be used. The code will be called with the profile object as its first argument. =head1 DATA FORMAT The data format written by DBI::ProfileDumper starts with a header containing the version number of the module used to generate it. Then a block of variable declarations describes the profile. After two newlines, the profile data forms the body of the file. For example: DBI::ProfileDumper 2.003762 Path = [ '!Statement', '!MethodName' ] Program = t/42profile_data.t + 1 SELECT name FROM users WHERE id = ? + 2 prepare = 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576 + 2 execute 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576 + 2 fetchrow_hashref = 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576 + 1 UPDATE users SET name = ? WHERE id = ? + 2 prepare = 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576 + 2 execute = 1 0.0312958955764771 0.000490069389343262 0.000176072120666504 0.00140702724456787 1023115819.83019 1023115819.86576 The lines beginning with C<+> signs signify keys. The number after the C<+> sign shows the nesting level of the key. Lines beginning with C<=> are the actual profile data, in the same order as in DBI::Profile. Note that the same path may be present multiple times in the data file since C<format()> may be called more than once. When read by DBI::ProfileData the data points will be merged to produce a single data set for each distinct path. The key strings are transformed in three ways. First, all backslashes are doubled. Then all newlines and carriage-returns are transformed into C<\n> and C<\r> respectively. Finally, any NULL bytes (C<\0>) are entirely removed. When DBI::ProfileData reads the file the first two transformations will be reversed, but NULL bytes will not be restored. =head1 AUTHOR Sam Tregar <sam@tregar.com> =head1 COPYRIGHT AND LICENSE Copyright (C) 2002 Sam Tregar This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself. =cut # inherit from DBI::Profile use DBI::Profile; our @ISA = ("DBI::Profile"); our $VERSION = "2.015325"; use Carp qw(croak); use Fcntl qw(:flock); use Symbol; my $HAS_FLOCK = (defined $ENV{DBI_PROFILE_FLOCK}) ? $ENV{DBI_PROFILE_FLOCK} : do { local $@; eval { flock STDOUT, 0; 1 } }; my $program_header; # validate params and setup default sub new { my $pkg = shift; my $self = $pkg->SUPER::new( LockFile => $HAS_FLOCK, @_, ); # provide a default filename $self->filename("dbi.prof") unless $self->filename; DBI->trace_msg("$self: @{[ %$self ]}\n",0) if $self->{Trace} && $self->{Trace} >= 2; return $self; } # get/set filename to use sub filename { my $self = shift; $self->{File} = shift if @_; my $filename = $self->{File}; $filename = $filename->($self) if ref($filename) eq 'CODE'; return $filename; } # flush available data to disk sub flush_to_disk { my $self = shift; my $class = ref $self; my $filename = $self->filename; my $data = $self->{Data}; if (1) { # make an option if (not $data or ref $data eq 'HASH' && !%$data) { DBI->trace_msg("flush_to_disk skipped for empty profile\n",0) if $self->{Trace}; return undef; } } my $fh = gensym; if (($self->{_wrote_header}||'') eq $filename) { # append more data to the file # XXX assumes that Path hasn't changed open($fh, ">>", $filename) or croak("Unable to open '$filename' for $class output: $!"); } else { # create new file (or overwrite existing) if (-f $filename) { my $bak = $filename.'.prev'; unlink($bak); rename($filename, $bak) or warn "Error renaming $filename to $bak: $!\n"; } open($fh, ">", $filename) or croak("Unable to open '$filename' for $class output: $!"); } # lock the file (before checking size and writing the header) flock($fh, LOCK_EX) if $self->{LockFile}; # write header if file is empty - typically because we just opened it # in '>' mode, or perhaps we used '>>' but the file had been truncated externally. if (-s $fh == 0) { DBI->trace_msg("flush_to_disk wrote header to $filename\n",0) if $self->{Trace}; $self->write_header($fh); $self->{_wrote_header} = $filename; } my $lines = $self->write_data($fh, $self->{Data}, 1); DBI->trace_msg("flush_to_disk wrote $lines lines to $filename\n",0) if $self->{Trace}; close($fh) # unlocks the file or croak("Error closing '$filename': $!"); $self->empty(); return $filename; } # write header to a filehandle sub write_header { my ($self, $fh) = @_; # isolate us against globals which effect print local($\, $,); # $self->VERSION can return undef during global destruction my $version = $self->VERSION || $VERSION; # module name and version number print $fh ref($self)." $version\n"; # print out Path (may contain CODE refs etc) my @path_words = map { escape_key($_) } @{ $self->{Path} || [] }; print $fh "Path = [ ", join(', ', @path_words), " ]\n"; # print out $0 and @ARGV if (!$program_header) { # XXX should really quote as well as escape $program_header = "Program = " . join(" ", map { escape_key($_) } $0, @ARGV) . "\n"; } print $fh $program_header; # all done print $fh "\n"; } # write data in the proscribed format sub write_data { my ($self, $fh, $data, $level) = @_; # XXX it's valid for $data to be an ARRAY ref, i.e., Path is empty. # produce an empty profile for invalid $data return 0 unless $data and UNIVERSAL::isa($data,'HASH'); # isolate us against globals which affect print local ($\, $,); my $lines = 0; while (my ($key, $value) = each(%$data)) { # output a key print $fh "+ $level ". escape_key($key). "\n"; if (UNIVERSAL::isa($value,'ARRAY')) { # output a data set for a leaf node print $fh "= ".join(' ', @$value)."\n"; $lines += 1; } else { # recurse through keys - this could be rewritten to use a # stack for some small performance gain $lines += $self->write_data($fh, $value, $level + 1); } } return $lines; } # escape a key for output sub escape_key { my $key = shift; $key =~ s!\\!\\\\!g; $key =~ s!\n!\\n!g; $key =~ s!\r!\\r!g; $key =~ s!\0!!g; return $key; } # flush data to disk when profile object goes out of scope sub on_destroy { shift->flush_to_disk(); } 1; DBI/ProfileDumper/Apache.pm 0000644 00000014631 15037233317 0011447 0 ustar 00 package DBI::ProfileDumper::Apache; use strict; =head1 NAME DBI::ProfileDumper::Apache - capture DBI profiling data from Apache/mod_perl =head1 SYNOPSIS Add this line to your F<httpd.conf>: PerlSetEnv DBI_PROFILE 2/DBI::ProfileDumper::Apache (If you're using mod_perl2, see L</When using mod_perl2> for some additional notes.) Then restart your server. Access the code you wish to test using a web browser, then shutdown your server. This will create a set of F<dbi.prof.*> files in your Apache log directory. Get a profiling report with L<dbiprof|dbiprof>: dbiprof /path/to/your/apache/logs/dbi.prof.* When you're ready to perform another profiling run, delete the old files and start again. =head1 DESCRIPTION This module interfaces DBI::ProfileDumper to Apache/mod_perl. Using this module you can collect profiling data from mod_perl applications. It works by creating a DBI::ProfileDumper data file for each Apache process. These files are created in your Apache log directory. You can then use the dbiprof utility to analyze the profile files. =head1 USAGE =head2 LOADING THE MODULE The easiest way to use this module is just to set the DBI_PROFILE environment variable in your F<httpd.conf>: PerlSetEnv DBI_PROFILE 2/DBI::ProfileDumper::Apache The DBI will look after loading and using the module when the first DBI handle is created. It's also possible to use this module by setting the Profile attribute of any DBI handle: $dbh->{Profile} = "2/DBI::ProfileDumper::Apache"; See L<DBI::ProfileDumper> for more possibilities, and L<DBI::Profile> for full details of the DBI's profiling mechanism. =head2 WRITING PROFILE DATA The profile data files will be written to your Apache log directory by default. The user that the httpd processes run as will need write access to the directory. So, for example, if you're running the child httpds as user 'nobody' and using chronolog to write to the logs directory, then you'll need to change the default. You can change the destination directory either by specifying a C<Dir> value when creating the profile (like C<File> in the L<DBI::ProfileDumper> docs), or you can use the C<DBI_PROFILE_APACHE_LOG_DIR> env var to change that. For example: PerlSetEnv DBI_PROFILE_APACHE_LOG_DIR /server_root/logs =head3 When using mod_perl2 Under mod_perl2 you'll need to either set the C<DBI_PROFILE_APACHE_LOG_DIR> env var, or enable the mod_perl2 C<GlobalRequest> option, like this: PerlOptions +GlobalRequest to the global config section you're about test with DBI::ProfileDumper::Apache. If you don't do one of those then you'll see messages in your error_log similar to: DBI::ProfileDumper::Apache on_destroy failed: Global $r object is not available. Set: PerlOptions +GlobalRequest in httpd.conf at ..../DBI/ProfileDumper/Apache.pm line 144 =head3 Naming the files The default file name is inherited from L<DBI::ProfileDumper> via the filename() method, but DBI::ProfileDumper::Apache appends the parent pid and the current pid, separated by dots, to that name. =head3 Silencing the log By default a message is written to STDERR (i.e., the apache error_log file) when flush_to_disk() is called (either explicitly, or implicitly via DESTROY). That's usually very useful. If you don't want the log message you can silence it by setting the C<Quiet> attribute true. PerlSetEnv DBI_PROFILE 2/DBI::ProfileDumper::Apache/Quiet:1 $dbh->{Profile} = "!Statement/DBI::ProfileDumper/Quiet:1"; $dbh->{Profile} = DBI::ProfileDumper->new( Path => [ '!Statement' ] Quiet => 1 ); =head2 GATHERING PROFILE DATA Once you have the module loaded, use your application as you normally would. Stop the webserver when your tests are complete. Profile data files will be produced when Apache exits and you'll see something like this in your error_log: DBI::ProfileDumper::Apache writing to /usr/local/apache/logs/dbi.prof.2604.2619 Now you can use dbiprof to examine the data: dbiprof /usr/local/apache/logs/dbi.prof.2604.* By passing dbiprof a list of all generated files, dbiprof will automatically merge them into one result set. You can also pass dbiprof sorting and querying options, see L<dbiprof> for details. =head2 CLEANING UP Once you've made some code changes, you're ready to start again. First, delete the old profile data files: rm /usr/local/apache/logs/dbi.prof.* Then restart your server and get back to work. =head1 OTHER ISSUES =head2 Memory usage DBI::Profile can use a lot of memory for very active applications because it collects profiling data in memory for each distinct query run. Calling C<flush_to_disk()> will write the current data to disk and free the memory it's using. For example: $dbh->{Profile}->flush_to_disk() if $dbh->{Profile}; or, rather than flush every time, you could flush less often: $dbh->{Profile}->flush_to_disk() if $dbh->{Profile} and ++$i % 100; =head1 AUTHOR Sam Tregar <sam@tregar.com> =head1 COPYRIGHT AND LICENSE Copyright (C) 2002 Sam Tregar This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself. =cut our $VERSION = "2.014121"; our @ISA = qw(DBI::ProfileDumper); use DBI::ProfileDumper; use File::Spec; my $initial_pid = $$; use constant MP2 => ($ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} == 2) ? 1 : 0; my $server_root_dir; if (MP2) { require Apache2::ServerUtil; $server_root_dir = Apache2::ServerUtil::server_root(); } else { require Apache; $server_root_dir = eval { Apache->server_root_relative('') } || "/tmp"; } sub _dirname { my $self = shift; return $self->{Dir} ||= $ENV{DBI_PROFILE_APACHE_LOG_DIR} || File::Spec->catdir($server_root_dir, "logs"); } sub filename { my $self = shift; my $filename = $self->SUPER::filename(@_); return $filename if not $filename; # not set yet # to be able to identify groups of profile files from the same set of # apache processes, we include the parent pid in the file name # as well as the pid. my $group_pid = ($$ eq $initial_pid) ? $$ : getppid(); $filename .= ".$group_pid.$$"; return $filename if File::Spec->file_name_is_absolute($filename); return File::Spec->catfile($self->_dirname, $filename); } sub flush_to_disk { my $self = shift; my $filename = $self->SUPER::flush_to_disk(@_); print STDERR ref($self)." pid$$ written to $filename\n" if $filename && not $self->{Quiet}; return $filename; } 1; DBI/PurePerl.pm 0000644 00000113306 15037233317 0007246 0 ustar 00 ######################################################################## package # hide from PAUSE DBI; # vim: ts=8:sw=4 ######################################################################## # # Copyright (c) 2002,2003 Tim Bunce Ireland. # # See COPYRIGHT section in DBI.pm for usage and distribution rights. # ######################################################################## # # Please send patches and bug reports to # # Jeff Zucker <jeff@vpservices.com> with cc to <dbi-dev@perl.org> # ######################################################################## use strict; use Carp; require Symbol; require utf8; *utf8::is_utf8 = sub { # hack for perl 5.6 require bytes; return unless defined $_[0]; return !(length($_[0]) == bytes::length($_[0])) } unless defined &utf8::is_utf8; $DBI::PurePerl = $ENV{DBI_PUREPERL} || 1; $DBI::PurePerl::VERSION = "2.014286"; $DBI::neat_maxlen ||= 400; $DBI::tfh = Symbol::gensym(); open $DBI::tfh, ">&STDERR" or warn "Can't dup STDERR: $!"; select( (select($DBI::tfh), $| = 1)[0] ); # autoflush # check for weaken support, used by ChildHandles my $HAS_WEAKEN = eval { require Scalar::Util; # this will croak() if this Scalar::Util doesn't have a working weaken(). Scalar::Util::weaken( my $test = [] ); 1; }; %DBI::last_method_except = map { $_=>1 } qw(DESTROY _set_fbav set_err); use constant SQL_ALL_TYPES => 0; use constant SQL_ARRAY => 50; use constant SQL_ARRAY_LOCATOR => 51; use constant SQL_BIGINT => (-5); use constant SQL_BINARY => (-2); use constant SQL_BIT => (-7); use constant SQL_BLOB => 30; use constant SQL_BLOB_LOCATOR => 31; use constant SQL_BOOLEAN => 16; use constant SQL_CHAR => 1; use constant SQL_CLOB => 40; use constant SQL_CLOB_LOCATOR => 41; use constant SQL_DATE => 9; use constant SQL_DATETIME => 9; use constant SQL_DECIMAL => 3; use constant SQL_DOUBLE => 8; use constant SQL_FLOAT => 6; use constant SQL_GUID => (-11); use constant SQL_INTEGER => 4; use constant SQL_INTERVAL => 10; use constant SQL_INTERVAL_DAY => 103; use constant SQL_INTERVAL_DAY_TO_HOUR => 108; use constant SQL_INTERVAL_DAY_TO_MINUTE => 109; use constant SQL_INTERVAL_DAY_TO_SECOND => 110; use constant SQL_INTERVAL_HOUR => 104; use constant SQL_INTERVAL_HOUR_TO_MINUTE => 111; use constant SQL_INTERVAL_HOUR_TO_SECOND => 112; use constant SQL_INTERVAL_MINUTE => 105; use constant SQL_INTERVAL_MINUTE_TO_SECOND => 113; use constant SQL_INTERVAL_MONTH => 102; use constant SQL_INTERVAL_SECOND => 106; use constant SQL_INTERVAL_YEAR => 101; use constant SQL_INTERVAL_YEAR_TO_MONTH => 107; use constant SQL_LONGVARBINARY => (-4); use constant SQL_LONGVARCHAR => (-1); use constant SQL_MULTISET => 55; use constant SQL_MULTISET_LOCATOR => 56; use constant SQL_NUMERIC => 2; use constant SQL_REAL => 7; use constant SQL_REF => 20; use constant SQL_ROW => 19; use constant SQL_SMALLINT => 5; use constant SQL_TIME => 10; use constant SQL_TIMESTAMP => 11; use constant SQL_TINYINT => (-6); use constant SQL_TYPE_DATE => 91; use constant SQL_TYPE_TIME => 92; use constant SQL_TYPE_TIMESTAMP => 93; use constant SQL_TYPE_TIMESTAMP_WITH_TIMEZONE => 95; use constant SQL_TYPE_TIME_WITH_TIMEZONE => 94; use constant SQL_UDT => 17; use constant SQL_UDT_LOCATOR => 18; use constant SQL_UNKNOWN_TYPE => 0; use constant SQL_VARBINARY => (-3); use constant SQL_VARCHAR => 12; use constant SQL_WCHAR => (-8); use constant SQL_WLONGVARCHAR => (-10); use constant SQL_WVARCHAR => (-9); # for Cursor types use constant SQL_CURSOR_FORWARD_ONLY => 0; use constant SQL_CURSOR_KEYSET_DRIVEN => 1; use constant SQL_CURSOR_DYNAMIC => 2; use constant SQL_CURSOR_STATIC => 3; use constant SQL_CURSOR_TYPE_DEFAULT => SQL_CURSOR_FORWARD_ONLY; use constant IMA_HAS_USAGE => 0x0001; #/* check parameter usage */ use constant IMA_FUNC_REDIRECT => 0x0002; #/* is $h->func(..., "method")*/ use constant IMA_KEEP_ERR => 0x0004; #/* don't reset err & errstr */ use constant IMA_KEEP_ERR_SUB => 0x0008; #/* '' if in nested call */ use constant IMA_NO_TAINT_IN => 0x0010; #/* don't check for tainted args*/ use constant IMA_NO_TAINT_OUT => 0x0020; #/* don't taint results */ use constant IMA_COPY_UP_STMT => 0x0040; #/* copy sth Statement to dbh */ use constant IMA_END_WORK => 0x0080; #/* set on commit & rollback */ use constant IMA_STUB => 0x0100; #/* do nothing eg $dbh->connected */ use constant IMA_CLEAR_STMT => 0x0200; #/* clear Statement before call */ use constant IMA_UNRELATED_TO_STMT=> 0x0400; #/* profile as empty Statement */ use constant IMA_NOT_FOUND_OKAY => 0x0800; #/* not error if not found */ use constant IMA_EXECUTE => 0x1000; #/* do/execute: DBIcf_Executed */ use constant IMA_SHOW_ERR_STMT => 0x2000; #/* dbh meth relates to Statement*/ use constant IMA_HIDE_ERR_PARAMVALUES => 0x4000; #/* ParamValues are not relevant */ use constant IMA_IS_FACTORY => 0x8000; #/* new h ie connect & prepare */ use constant IMA_CLEAR_CACHED_KIDS => 0x10000; #/* clear CachedKids before call */ use constant DBIstcf_STRICT => 0x0001; use constant DBIstcf_DISCARD_STRING => 0x0002; my %is_flag_attribute = map {$_ =>1 } qw( Active AutoCommit ChopBlanks CompatMode Executed Taint TaintIn TaintOut InactiveDestroy AutoInactiveDestroy LongTruncOk MultiThread PrintError PrintWarn RaiseError ShowErrorStatement Warn ); my %is_valid_attribute = map {$_ =>1 } (keys %is_flag_attribute, qw( ActiveKids Attribution BegunWork CachedKids Callbacks ChildHandles CursorName Database DebugDispatch Driver Err Errstr ErrCount FetchHashKeyName HandleError HandleSetErr ImplementorClass Kids LongReadLen NAME NAME_uc NAME_lc NAME_uc_hash NAME_lc_hash NULLABLE NUM_OF_FIELDS NUM_OF_PARAMS Name PRECISION ParamValues Profile Provider ReadOnly RootClass RowCacheSize RowsInCache SCALE State Statement TYPE Type TraceLevel Username Version )); sub valid_attribute { my $attr = shift; return 1 if $is_valid_attribute{$attr}; return 1 if $attr =~ m/^[a-z]/; # starts with lowercase letter return 0 } my $initial_setup; sub initial_setup { $initial_setup = 1; print $DBI::tfh __FILE__ . " version " . $DBI::PurePerl::VERSION . "\n" if $DBI::dbi_debug & 0xF; untie $DBI::err; untie $DBI::errstr; untie $DBI::state; untie $DBI::rows; #tie $DBI::lasth, 'DBI::var', '!lasth'; # special case: return boolean } sub _install_method { my ( $caller, $method, $from, $param_hash ) = @_; initial_setup() unless $initial_setup; my ($class, $method_name) = $method =~ /^[^:]+::(.+)::(.+)$/; my $bitmask = $param_hash->{'O'} || 0; my @pre_call_frag; return if $method_name eq 'can'; push @pre_call_frag, q{ delete $h->{CachedKids}; # ignore DESTROY for outer handle (DESTROY for inner likely to follow soon) return if $h_inner; # handle AutoInactiveDestroy and InactiveDestroy $h->{InactiveDestroy} = 1 if $h->{AutoInactiveDestroy} and $$ != $h->{dbi_pp_pid}; $h->{Active} = 0 if $h->{InactiveDestroy}; # copy err/errstr/state up to driver so $DBI::err etc still work if ($h->{err} and my $drh = $h->{Driver}) { $drh->{$_} = $h->{$_} for ('err','errstr','state'); } } if $method_name eq 'DESTROY'; push @pre_call_frag, q{ return $h->{$_[0]} if exists $h->{$_[0]}; } if $method_name eq 'FETCH' && !exists $ENV{DBI_TRACE}; # XXX ? push @pre_call_frag, "return;" if IMA_STUB & $bitmask; push @pre_call_frag, q{ $method_name = pop @_; } if IMA_FUNC_REDIRECT & $bitmask; push @pre_call_frag, q{ my $parent_dbh = $h->{Database}; } if (IMA_COPY_UP_STMT|IMA_EXECUTE) & $bitmask; push @pre_call_frag, q{ warn "No Database set for $h on $method_name!" unless $parent_dbh; # eg proxy problems $parent_dbh->{Statement} = $h->{Statement} if $parent_dbh; } if IMA_COPY_UP_STMT & $bitmask; push @pre_call_frag, q{ $h->{Executed} = 1; $parent_dbh->{Executed} = 1 if $parent_dbh; } if IMA_EXECUTE & $bitmask; push @pre_call_frag, q{ %{ $h->{CachedKids} } = () if $h->{CachedKids}; } if IMA_CLEAR_CACHED_KIDS & $bitmask; if (IMA_KEEP_ERR & $bitmask) { push @pre_call_frag, q{ my $keep_error = DBI::_err_hash($h); }; } else { my $ke_init = (IMA_KEEP_ERR_SUB & $bitmask) ? q{= ($h->{dbi_pp_parent}->{dbi_pp_call_depth} && DBI::_err_hash($h)) } : ""; push @pre_call_frag, qq{ my \$keep_error $ke_init; }; my $clear_error_code = q{ #warn "$method_name cleared err"; $h->{err} = $DBI::err = undef; $h->{errstr} = $DBI::errstr = undef; $h->{state} = $DBI::state = ''; }; $clear_error_code = q{ printf $DBI::tfh " !! %s: %s CLEARED by call to }.$method_name.q{ method\n". $h->{err}, $h->{err} if defined $h->{err} && $DBI::dbi_debug & 0xF; }. $clear_error_code if exists $ENV{DBI_TRACE}; push @pre_call_frag, ($ke_init) ? qq{ unless (\$keep_error) { $clear_error_code }} : $clear_error_code unless $method_name eq 'set_err'; } push @pre_call_frag, q{ my $ErrCount = $h->{ErrCount}; }; push @pre_call_frag, q{ if (($DBI::dbi_debug & 0xF) >= 2) { local $^W; my $args = join " ", map { DBI::neat($_) } ($h, @_); printf $DBI::tfh " > $method_name in $imp ($args) [$@]\n"; } } if exists $ENV{DBI_TRACE}; # note use of 'exists' push @pre_call_frag, q{ $h->{'dbi_pp_last_method'} = $method_name; } unless exists $DBI::last_method_except{$method_name}; # --- post method call code fragments --- my @post_call_frag; push @post_call_frag, q{ if (my $trace_level = ($DBI::dbi_debug & 0xF)) { if ($h->{err}) { printf $DBI::tfh " !! ERROR: %s %s\n", $h->{err}, $h->{errstr}; } my $ret = join " ", map { DBI::neat($_) } @ret; my $msg = " < $method_name= $ret"; $msg = ($trace_level >= 2) ? Carp::shortmess($msg) : "$msg\n"; print $DBI::tfh $msg; } } if exists $ENV{DBI_TRACE}; # note use of exists push @post_call_frag, q{ $h->{Executed} = 0; if ($h->{BegunWork}) { $h->{BegunWork} = 0; $h->{AutoCommit} = 1; } } if IMA_END_WORK & $bitmask; push @post_call_frag, q{ if ( ref $ret[0] and UNIVERSAL::isa($ret[0], 'DBI::_::common') and defined( (my $h_new = tied(%{$ret[0]})||$ret[0])->{err} ) ) { # copy up info/warn to drh so PrintWarn on connect is triggered $h->set_err($h_new->{err}, $h_new->{errstr}, $h_new->{state}) } } if IMA_IS_FACTORY & $bitmask; push @post_call_frag, q{ if ($keep_error) { $keep_error = 0 if $h->{ErrCount} > $ErrCount or DBI::_err_hash($h) ne $keep_error; } $DBI::err = $h->{err}; $DBI::errstr = $h->{errstr}; $DBI::state = $h->{state}; if ( !$keep_error && defined(my $err = $h->{err}) && ($call_depth <= 1 && !$h->{dbi_pp_parent}{dbi_pp_call_depth}) ) { my($pe,$pw,$re,$he) = @{$h}{qw(PrintError PrintWarn RaiseError HandleError)}; my $msg; if ($err && ($pe || $re || $he) # error or (!$err && length($err) && $pw) # warning ) { my $last = ($DBI::last_method_except{$method_name}) ? ($h->{'dbi_pp_last_method'}||$method_name) : $method_name; my $errstr = $h->{errstr} || $DBI::errstr || $err || ''; my $msg = sprintf "%s %s %s: %s", $imp, $last, ($err eq "0") ? "warning" : "failed", $errstr; if ($h->{'ShowErrorStatement'} and my $Statement = $h->{Statement}) { $msg .= ' [for Statement "' . $Statement; if (my $ParamValues = $h->FETCH('ParamValues')) { $msg .= '" with ParamValues: '; $msg .= DBI::_concat_hash_sorted($ParamValues, "=", ", ", 1, undef); $msg .= "]"; } else { $msg .= '"]'; } } if ($err eq "0") { # is 'warning' (not info) carp $msg if $pw; } else { my $do_croak = 1; if (my $subsub = $h->{'HandleError'}) { $do_croak = 0 if &$subsub($msg,$h,$ret[0]); } if ($do_croak) { printf $DBI::tfh " $method_name has failed ($h->{PrintError},$h->{RaiseError})\n" if ($DBI::dbi_debug & 0xF) >= 4; carp $msg if $pe; die $msg if $h->{RaiseError}; } } } } }; my $method_code = q[ sub { my $h = shift; my $h_inner = tied(%$h); $h = $h_inner if $h_inner; my $imp; if ($method_name eq 'DESTROY') { # during global destruction, $h->{...} can trigger "Can't call FETCH on an undef value" # implying that tied() above lied to us, so we need to use eval local $@; # protect $@ $imp = eval { $h->{"ImplementorClass"} } or return; # probably global destruction } else { $imp = $h->{"ImplementorClass"} or do { warn "Can't call $method_name method on handle $h after take_imp_data()\n" if not exists $h->{Active}; return; # or, more likely, global destruction }; } ] . join("\n", '', @pre_call_frag, '') . q[ my $call_depth = $h->{'dbi_pp_call_depth'} + 1; local ($h->{'dbi_pp_call_depth'}) = $call_depth; my @ret; my $sub = $imp->can($method_name); if (!$sub and IMA_FUNC_REDIRECT & $bitmask and $sub = $imp->can('func')) { push @_, $method_name; } if ($sub) { (wantarray) ? (@ret = &$sub($h,@_)) : (@ret = scalar &$sub($h,@_)); } else { # XXX could try explicit fallback to $imp->can('AUTOLOAD') etc # which would then let Multiplex pass PurePerl tests, but some # hook into install_method may be better. croak "Can't locate DBI object method \"$method_name\" via package \"$imp\"" if ] . ((IMA_NOT_FOUND_OKAY & $bitmask) ? 0 : 1) . q[; } ] . join("\n", '', @post_call_frag, '') . q[ return (wantarray) ? @ret : $ret[0]; } ]; no strict qw(refs); my $code_ref = eval qq{#line 1 "DBI::PurePerl $method"\n$method_code}; warn "$@\n$method_code\n" if $@; die "$@\n$method_code\n" if $@; *$method = $code_ref; if (0 && $method =~ /\b(connect|FETCH)\b/) { # debuging tool my $l=0; # show line-numbered code for method warn "*$method code:\n".join("\n", map { ++$l.": $_" } split/\n/,$method_code); } } sub _new_handle { my ($class, $parent, $attr, $imp_data, $imp_class) = @_; DBI->trace_msg(" New $class (for $imp_class, parent=$parent, id=".($imp_data||'').")\n") if $DBI::dbi_debug >= 3; $attr->{ImplementorClass} = $imp_class or Carp::croak("_new_handle($class): 'ImplementorClass' attribute not given"); # This is how we create a DBI style Object: # %outer gets tied to %$attr (which becomes the 'inner' handle) my (%outer, $i, $h); $i = tie %outer, $class, $attr; # ref to inner hash (for driver) $h = bless \%outer, $class; # ref to outer hash (for application) # The above tie and bless may migrate down into _setup_handle()... # Now add magic so DBI method dispatch works DBI::_setup_handle($h, $imp_class, $parent, $imp_data); return $h unless wantarray; return ($h, $i); } sub _setup_handle { my($h, $imp_class, $parent, $imp_data) = @_; my $h_inner = tied(%$h) || $h; if (($DBI::dbi_debug & 0xF) >= 4) { local $^W; print $DBI::tfh " _setup_handle(@_)\n"; } $h_inner->{"imp_data"} = $imp_data; $h_inner->{"ImplementorClass"} = $imp_class; $h_inner->{"Kids"} = $h_inner->{"ActiveKids"} = 0; # XXX not maintained if ($parent) { foreach (qw( RaiseError PrintError PrintWarn HandleError HandleSetErr Warn LongTruncOk ChopBlanks AutoCommit ReadOnly ShowErrorStatement FetchHashKeyName LongReadLen CompatMode )) { $h_inner->{$_} = $parent->{$_} if exists $parent->{$_} && !exists $h_inner->{$_}; } if (ref($parent) =~ /::db$/) { # is sth $h_inner->{Database} = $parent; $parent->{Statement} = $h_inner->{Statement}; $h_inner->{NUM_OF_PARAMS} = 0; $h_inner->{Active} = 0; # driver sets true when there's data to fetch } elsif (ref($parent) =~ /::dr$/){ # is dbh $h_inner->{Driver} = $parent; $h_inner->{Active} = 0; } else { warn "panic: ".ref($parent); # should never happen } $h_inner->{dbi_pp_parent} = $parent; # add to the parent's ChildHandles if ($HAS_WEAKEN) { my $handles = $parent->{ChildHandles} ||= []; push @$handles, $h; Scalar::Util::weaken($handles->[-1]); # purge destroyed handles occasionally if (@$handles % 120 == 0) { @$handles = grep { defined } @$handles; Scalar::Util::weaken($_) for @$handles; # re-weaken after grep } } } else { # setting up a driver handle $h_inner->{Warn} = 1; $h_inner->{PrintWarn} = 1; $h_inner->{AutoCommit} = 1; $h_inner->{TraceLevel} = 0; $h_inner->{CompatMode} = (1==0); $h_inner->{FetchHashKeyName} ||= 'NAME'; $h_inner->{LongReadLen} ||= 80; $h_inner->{ChildHandles} ||= [] if $HAS_WEAKEN; $h_inner->{Type} ||= 'dr'; $h_inner->{Active} = 1; } $h_inner->{"dbi_pp_call_depth"} = 0; $h_inner->{"dbi_pp_pid"} = $$; $h_inner->{ErrCount} = 0; } sub constant { warn "constant(@_) called unexpectedly"; return undef; } sub trace { my ($h, $level, $file) = @_; $level = $h->parse_trace_flags($level) if defined $level and !DBI::looks_like_number($level); my $old_level = $DBI::dbi_debug; _set_trace_file($file) if $level; if (defined $level) { $DBI::dbi_debug = $level; print $DBI::tfh " DBI $DBI::VERSION (PurePerl) " . "dispatch trace level set to $DBI::dbi_debug\n" if $DBI::dbi_debug & 0xF; } _set_trace_file($file) if !$level; return $old_level; } sub _set_trace_file { my ($file) = @_; # # DAA add support for filehandle inputs # # DAA required to avoid closing a prior fh trace() $DBI::tfh = undef unless $DBI::tfh_needs_close; if (ref $file eq 'GLOB') { $DBI::tfh = $file; select((select($DBI::tfh), $| = 1)[0]); $DBI::tfh_needs_close = 0; return 1; } if ($file && ref \$file eq 'GLOB') { $DBI::tfh = *{$file}{IO}; select((select($DBI::tfh), $| = 1)[0]); $DBI::tfh_needs_close = 0; return 1; } $DBI::tfh_needs_close = 1; if (!$file || $file eq 'STDERR') { open $DBI::tfh, ">&STDERR" or carp "Can't dup STDERR: $!"; } elsif ($file eq 'STDOUT') { open $DBI::tfh, ">&STDOUT" or carp "Can't dup STDOUT: $!"; } else { open $DBI::tfh, ">>$file" or carp "Can't open $file: $!"; } select((select($DBI::tfh), $| = 1)[0]); return 1; } sub _get_imp_data { shift->{"imp_data"}; } sub _svdump { } sub dump_handle { my ($h,$msg,$level) = @_; $msg||="dump_handle $h"; print $DBI::tfh "$msg:\n"; for my $attrib (sort keys %$h) { print $DBI::tfh "\t$attrib => ".DBI::neat($h->{$attrib})."\n"; } } sub _handles { my $h = shift; my $h_inner = tied %$h; if ($h_inner) { # this is okay return $h unless wantarray; return ($h, $h_inner); } # XXX this isn't okay... we have an inner handle but # currently have no way to get at its outer handle, # so we just warn and return the inner one for both... Carp::carp("Can't return outer handle from inner handle using DBI::PurePerl"); return $h unless wantarray; return ($h,$h); } sub hash { my ($key, $type) = @_; my ($hash); if (!$type) { $hash = 0; # XXX The C version uses the "char" type, which could be either # signed or unsigned. I use signed because so do the two # compilers on my system. for my $char (unpack ("c*", $key)) { $hash = $hash * 33 + $char; } $hash &= 0x7FFFFFFF; # limit to 31 bits $hash |= 0x40000000; # set bit 31 return -$hash; # return negative int } elsif ($type == 1) { # Fowler/Noll/Vo hash # see http://www.isthe.com/chongo/tech/comp/fnv/ require Math::BigInt; # feel free to reimplement w/o BigInt! (my $version = $Math::BigInt::VERSION || 0) =~ s/_.*//; # eg "1.70_01" if ($version >= 1.56) { $hash = Math::BigInt->new(0x811c9dc5); for my $uchar (unpack ("C*", $key)) { # multiply by the 32 bit FNV magic prime mod 2^64 $hash = ($hash * 0x01000193) & 0xffffffff; # xor the bottom with the current octet $hash ^= $uchar; } # cast to int return unpack "i", pack "i", $hash; } croak("DBI::PurePerl doesn't support hash type 1 without Math::BigInt >= 1.56 (available on CPAN)"); } else { croak("bad hash type $type"); } } sub looks_like_number { my @new = (); for my $thing(@_) { if (!defined $thing or $thing eq '') { push @new, undef; } else { push @new, ($thing =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/) ? 1 : 0; } } return (@_ >1) ? @new : $new[0]; } sub neat { my $v = shift; return "undef" unless defined $v; my $quote = q{"}; if (not utf8::is_utf8($v)) { return $v if (($v & ~ $v) eq "0"); # is SvNIOK $quote = q{'}; } my $maxlen = shift || $DBI::neat_maxlen; if ($maxlen && $maxlen < length($v) + 2) { $v = substr($v,0,$maxlen-5); $v .= '...'; } $v =~ s/[^[:print:]]/./g; return "$quote$v$quote"; } sub sql_type_cast { my (undef, $sql_type, $flags) = @_; return -1 unless defined $_[0]; my $cast_ok = 1; my $evalret = eval { use warnings FATAL => qw(numeric); if ($sql_type == SQL_INTEGER) { my $dummy = $_[0] + 0; return 1; } elsif ($sql_type == SQL_DOUBLE) { my $dummy = $_[0] + 0.0; return 1; } elsif ($sql_type == SQL_NUMERIC) { my $dummy = $_[0] + 0.0; return 1; } else { return -2; } } or $^W && warn $@; # XXX warnings::warnif("numeric", $@) ? return $evalret if defined($evalret) && ($evalret == -2); $cast_ok = 0 unless $evalret; # DBIstcf_DISCARD_STRING not supported for PurePerl currently return 2 if $cast_ok; return 0 if $flags & DBIstcf_STRICT; return 1; } sub dbi_time { return time(); } sub DBI::st::TIEHASH { bless $_[1] => $_[0] }; sub _concat_hash_sorted { my ( $hash_ref, $kv_separator, $pair_separator, $use_neat, $num_sort ) = @_; # $num_sort: 0=lexical, 1=numeric, undef=try to guess return undef unless defined $hash_ref; die "hash is not a hash reference" unless ref $hash_ref eq 'HASH'; my $keys = _get_sorted_hash_keys($hash_ref, $num_sort); my $string = ''; for my $key (@$keys) { $string .= $pair_separator if length $string > 0; my $value = $hash_ref->{$key}; if ($use_neat) { $value = DBI::neat($value, 0); } else { $value = (defined $value) ? "'$value'" : 'undef'; } $string .= $key . $kv_separator . $value; } return $string; } sub _get_sorted_hash_keys { my ($hash_ref, $num_sort) = @_; if (not defined $num_sort) { my $sort_guess = 1; $sort_guess = (not looks_like_number($_)) ? 0 : $sort_guess for keys %$hash_ref; $num_sort = $sort_guess; } my @keys = keys %$hash_ref; no warnings 'numeric'; my @sorted = ($num_sort) ? sort { $a <=> $b or $a cmp $b } @keys : sort @keys; return \@sorted; } sub _err_hash { return 1 unless defined $_[0]->{err}; return "$_[0]->{err} $_[0]->{errstr}" } package DBI::var; sub FETCH { my($key)=shift; return $DBI::err if $$key eq '*err'; return $DBI::errstr if $$key eq '&errstr'; Carp::confess("FETCH $key not supported when using DBI::PurePerl"); } package DBD::_::common; sub swap_inner_handle { my ($h1, $h2) = @_; # can't make this work till we can get the outer handle from the inner one # probably via a WeakRef return $h1->set_err($DBI::stderr, "swap_inner_handle not currently supported by DBI::PurePerl"); } sub trace { # XXX should set per-handle level, not global my ($h, $level, $file) = @_; $level = $h->parse_trace_flags($level) if defined $level and !DBI::looks_like_number($level); my $old_level = $DBI::dbi_debug; DBI::_set_trace_file($file) if defined $file; if (defined $level) { $DBI::dbi_debug = $level; if ($DBI::dbi_debug) { printf $DBI::tfh " %s trace level set to %d in DBI $DBI::VERSION (PurePerl)\n", $h, $DBI::dbi_debug; print $DBI::tfh " Full trace not available because DBI_TRACE is not in environment\n" unless exists $ENV{DBI_TRACE}; } } return $old_level; } *debug = \&trace; *debug = \&trace; # twice to avoid typo warning sub FETCH { my($h,$key)= @_; my $v = $h->{$key}; #warn ((exists $h->{$key}) ? "$key=$v\n" : "$key NONEXISTANT\n"); return $v if defined $v; if ($key =~ /^NAME_.c$/) { my $cols = $h->FETCH('NAME'); return undef unless $cols; my @lcols = map { lc $_ } @$cols; $h->{NAME_lc} = \@lcols; my @ucols = map { uc $_ } @$cols; $h->{NAME_uc} = \@ucols; return $h->FETCH($key); } if ($key =~ /^NAME.*_hash$/) { my $i=0; for my $c(@{$h->FETCH('NAME')||[]}) { $h->{'NAME_hash'}->{$c} = $i; $h->{'NAME_lc_hash'}->{"\L$c"} = $i; $h->{'NAME_uc_hash'}->{"\U$c"} = $i; $i++; } return $h->{$key}; } if (!defined $v && !exists $h->{$key}) { return ($h->FETCH('TaintIn') && $h->FETCH('TaintOut')) if $key eq'Taint'; return (1==0) if $is_flag_attribute{$key}; # return perl-style sv_no, not undef return $DBI::dbi_debug if $key eq 'TraceLevel'; return [] if $key eq 'ChildHandles' && $HAS_WEAKEN; if ($key eq 'Type') { return "dr" if $h->isa('DBI::dr'); return "db" if $h->isa('DBI::db'); return "st" if $h->isa('DBI::st'); Carp::carp( sprintf "Can't determine Type for %s",$h ); } if (!$is_valid_attribute{$key} and $key =~ m/^[A-Z]/) { local $^W; # hide undef warnings Carp::carp( sprintf "Can't get %s->{%s}: unrecognised attribute (@{[ %$h ]})",$h,$key ) } } return $v; } sub STORE { my ($h,$key,$value) = @_; if ($key eq 'AutoCommit') { Carp::croak("DBD driver has not implemented the AutoCommit attribute") unless $value == -900 || $value == -901; $value = ($value == -901); } elsif ($key =~ /^Taint/ ) { Carp::croak(sprintf "Can't set %s->{%s}: Taint mode not supported by DBI::PurePerl",$h,$key) if $value; } elsif ($key eq 'TraceLevel') { $h->trace($value); return 1; } elsif ($key eq 'NUM_OF_FIELDS') { $h->{$key} = $value; if ($value) { my $fbav = DBD::_::st::dbih_setup_fbav($h); @$fbav = (undef) x $value if @$fbav != $value; } return 1; } elsif (!$is_valid_attribute{$key} && $key =~ /^[A-Z]/ && !exists $h->{$key}) { Carp::carp(sprintf "Can't set %s->{%s}: unrecognised attribute or invalid value %s", $h,$key,$value); } $h->{$key} = $is_flag_attribute{$key} ? !!$value : $value; Scalar::Util::weaken($h->{$key}) if $key eq 'CachedKids'; return 1; } sub DELETE { my ($h, $key) = @_; return $h->FETCH($key) unless $key =~ /^private_/; return delete $h->{$key}; } sub err { return shift->{err} } sub errstr { return shift->{errstr} } sub state { return shift->{state} } sub set_err { my ($h, $errnum,$msg,$state, $method, $rv) = @_; $h = tied(%$h) || $h; if (my $hss = $h->{HandleSetErr}) { return if $hss->($h, $errnum, $msg, $state, $method); } if (!defined $errnum) { $h->{err} = $DBI::err = undef; $h->{errstr} = $DBI::errstr = undef; $h->{state} = $DBI::state = ''; return; } if ($h->{errstr}) { $h->{errstr} .= sprintf " [err was %s now %s]", $h->{err}, $errnum if $h->{err} && $errnum && $h->{err} ne $errnum; $h->{errstr} .= sprintf " [state was %s now %s]", $h->{state}, $state if $h->{state} and $h->{state} ne "S1000" && $state && $h->{state} ne $state; $h->{errstr} .= "\n$msg" if $h->{errstr} ne $msg; $DBI::errstr = $h->{errstr}; } else { $h->{errstr} = $DBI::errstr = $msg; } # assign if higher priority: err > "0" > "" > undef my $err_changed; if ($errnum # new error: so assign or !defined $h->{err} # no existing warn/info: so assign # new warn ("0" len 1) > info ("" len 0): so assign or defined $errnum && length($errnum) > length($h->{err}) ) { $h->{err} = $DBI::err = $errnum; ++$h->{ErrCount} if $errnum; ++$err_changed; } if ($err_changed) { $state ||= "S1000" if $DBI::err; $h->{state} = $DBI::state = ($state eq "00000") ? "" : $state if $state; } if (my $p = $h->{Database}) { # just sth->dbh, not dbh->drh (see ::db::DESTROY) $p->{err} = $DBI::err; $p->{errstr} = $DBI::errstr; $p->{state} = $DBI::state; } $h->{'dbi_pp_last_method'} = $method; return $rv; # usually undef } sub trace_msg { my ($h, $msg, $minlevel)=@_; $minlevel = 1 unless defined $minlevel; return unless $minlevel <= ($DBI::dbi_debug & 0xF); print $DBI::tfh $msg; return 1; } sub private_data { warn "private_data @_"; } sub take_imp_data { my $dbh = shift; # A reasonable default implementation based on the one in DBI.xs. # Typically a pure-perl driver would have their own take_imp_data method # that would delete all but the essential items in the hash before ending with: # return $dbh->SUPER::take_imp_data(); # Of course it's useless if the driver doesn't also implement support for # the dbi_imp_data attribute to the connect() method. require Storable; croak("Can't take_imp_data from handle that's not Active") unless $dbh->{Active}; for my $sth (@{ $dbh->{ChildHandles} || [] }) { next unless $sth; $sth->finish if $sth->{Active}; bless $sth, 'DBI::zombie'; } delete $dbh->{$_} for (keys %is_valid_attribute); delete $dbh->{$_} for grep { m/^dbi_/ } keys %$dbh; # warn "@{[ %$dbh ]}"; local $Storable::forgive_me = 1; # in case there are some CODE refs my $imp_data = Storable::freeze($dbh); # XXX um, should probably untie here - need to check dispatch behaviour return $imp_data; } sub rows { return -1; # always returns -1 here, see DBD::_::st::rows below } sub DESTROY { } package DBD::_::dr; sub dbixs_revision { return 0; } package DBD::_::db; sub connected { } package DBD::_::st; sub fetchrow_arrayref { my $h = shift; # if we're here then driver hasn't implemented fetch/fetchrow_arrayref # so we assume they've implemented fetchrow_array and call that instead my @row = $h->fetchrow_array or return; return $h->_set_fbav(\@row); } # twice to avoid typo warning *fetch = \&fetchrow_arrayref; *fetch = \&fetchrow_arrayref; sub fetchrow_array { my $h = shift; # if we're here then driver hasn't implemented fetchrow_array # so we assume they've implemented fetch/fetchrow_arrayref my $row = $h->fetch or return; return @$row; } *fetchrow = \&fetchrow_array; *fetchrow = \&fetchrow_array; sub fetchrow_hashref { my $h = shift; my $row = $h->fetch or return; my $FetchCase = shift; my $FetchHashKeyName = $FetchCase || $h->{'FetchHashKeyName'} || 'NAME'; my $FetchHashKeys = $h->FETCH($FetchHashKeyName); my %rowhash; @rowhash{ @$FetchHashKeys } = @$row; return \%rowhash; } sub dbih_setup_fbav { my $h = shift; return $h->{'_fbav'} || do { $DBI::rows = $h->{'_rows'} = 0; my $fields = $h->{'NUM_OF_FIELDS'} or DBI::croak("NUM_OF_FIELDS not set"); my @row = (undef) x $fields; \@row; }; } sub _get_fbav { my $h = shift; my $av = $h->{'_fbav'} ||= dbih_setup_fbav($h); $DBI::rows = ++$h->{'_rows'}; return $av; } sub _set_fbav { my $h = shift; my $fbav = $h->{'_fbav'}; if ($fbav) { $DBI::rows = ++$h->{'_rows'}; } else { $fbav = $h->_get_fbav; } my $row = shift; if (my $bc = $h->{'_bound_cols'}) { for my $i (0..@$row-1) { my $bound = $bc->[$i]; $fbav->[$i] = ($bound) ? ($$bound = $row->[$i]) : $row->[$i]; } } else { @$fbav = @$row; } return $fbav; } sub bind_col { my ($h, $col, $value_ref,$from_bind_columns) = @_; my $fbav = $h->{'_fbav'} ||= dbih_setup_fbav($h); # from _get_fbav() my $num_of_fields = @$fbav; DBI::croak("bind_col: column $col is not a valid column (1..$num_of_fields)") if $col < 1 or $col > $num_of_fields; return 1 if not defined $value_ref; # ie caller is just trying to set TYPE DBI::croak("bind_col($col,$value_ref) needs a reference to a scalar") unless ref $value_ref eq 'SCALAR'; $h->{'_bound_cols'}->[$col-1] = $value_ref; return 1; } sub finish { my $h = shift; $h->{'_fbav'} = undef; $h->{'Active'} = 0; return 1; } sub rows { my $h = shift; my $rows = $h->{'_rows'}; return -1 unless defined $rows; return $rows; } 1; __END__ =pod =head1 NAME DBI::PurePerl -- a DBI emulation using pure perl (no C/XS compilation required) =head1 SYNOPSIS BEGIN { $ENV{DBI_PUREPERL} = 2 } use DBI; =head1 DESCRIPTION This is a pure perl emulation of the DBI internals. In almost all cases you will be better off using standard DBI since the portions of the standard version written in C make it *much* faster. However, if you are in a situation where it isn't possible to install a compiled version of standard DBI, and you're using pure-perl DBD drivers, then this module allows you to use most common features of DBI without needing any changes in your scripts. =head1 EXPERIMENTAL STATUS DBI::PurePerl is new so please treat it as experimental pending more extensive testing. So far it has passed all tests with DBD::CSV, DBD::AnyData, DBD::XBase, DBD::Sprite, DBD::mysqlPP. Please send bug reports to Jeff Zucker at <jeff@vpservices.com> with a cc to <dbi-dev@perl.org>. =head1 USAGE The usage is the same as for standard DBI with the exception that you need to set the environment variable DBI_PUREPERL if you want to use the PurePerl version. DBI_PUREPERL == 0 (the default) Always use compiled DBI, die if it isn't properly compiled & installed DBI_PUREPERL == 1 Use compiled DBI if it is properly compiled & installed, otherwise use PurePerl DBI_PUREPERL == 2 Always use PurePerl You may set the environment variable in your shell (e.g. with set or setenv or export, etc) or else set it in your script like this: BEGIN { $ENV{DBI_PUREPERL}=2 } before you C<use DBI;>. =head1 INSTALLATION In most situations simply install DBI (see the DBI pod for details). In the situation in which you can not install DBI itself, you may manually copy DBI.pm and PurePerl.pm into the appropriate directories. For example: cp DBI.pm /usr/jdoe/mylibs/. cp PurePerl.pm /usr/jdoe/mylibs/DBI/. Then add this to the top of scripts: BEGIN { $ENV{DBI_PUREPERL} = 1; # or =2 unshift @INC, '/usr/jdoe/mylibs'; } (Or should we perhaps patch Makefile.PL so that if DBI_PUREPERL is set to 2 prior to make, the normal compile process is skipped and the files are installed automatically?) =head1 DIFFERENCES BETWEEN DBI AND DBI::PurePerl =head2 Attributes Boolean attributes still return boolean values but the actual values used may be different, i.e., 0 or undef instead of an empty string. Some handle attributes are either not supported or have very limited functionality: ActiveKids InactiveDestroy AutoInactiveDestroy Kids Taint TaintIn TaintOut (and probably others) =head2 Tracing Trace functionality is more limited and the code to handle tracing is only embedded into DBI:PurePerl if the DBI_TRACE environment variable is defined. To enable total tracing you can set the DBI_TRACE environment variable as usual. But to enable individual handle tracing using the trace() method you also need to set the DBI_TRACE environment variable, but set it to 0. =head2 Parameter Usage Checking The DBI does some basic parameter count checking on method calls. DBI::PurePerl doesn't. =head2 Speed DBI::PurePerl is slower. Although, with some drivers in some contexts this may not be very significant for you. By way of example... the test.pl script in the DBI source distribution has a simple benchmark that just does: my $null_dbh = DBI->connect('dbi:NullP:','',''); my $i = 10_000; $null_dbh->prepare('') while $i--; In other words just prepares a statement, creating and destroying a statement handle, over and over again. Using the real DBI this runs at ~4550 handles per second whereas DBI::PurePerl manages ~2800 per second on the same machine (not too bad really). =head2 May not fully support hash() If you want to use type 1 hash, i.e., C<hash($string,1)> with DBI::PurePerl, you'll need version 1.56 or higher of Math::BigInt (available on CPAN). =head2 Doesn't support preparse() The DBI->preparse() method isn't supported in DBI::PurePerl. =head2 Doesn't support DBD::Proxy There's a subtle problem somewhere I've not been able to identify. DBI::ProxyServer seem to work fine with DBI::PurePerl but DBD::Proxy does not work 100% (which is sad because that would be far more useful :) Try re-enabling t/80proxy.t for DBI::PurePerl to see if the problem that remains will affect you're usage. =head2 Others can() - doesn't have any special behaviour Please let us know if you find any other differences between DBI and DBI::PurePerl. =head1 AUTHORS Tim Bunce and Jeff Zucker. Tim provided the direction and basis for the code. The original idea for the module and most of the brute force porting from C to Perl was by Jeff. Tim then reworked some core parts to boost the performance and accuracy of the emulation. Thanks also to Randal Schwartz and John Tobey for patches. =head1 COPYRIGHT Copyright (c) 2002 Tim Bunce Ireland. See COPYRIGHT section in DBI.pm for usage and distribution rights. =cut Unicode/Collate.pm 0000644 00000177264 15037233317 0010100 0 ustar 00 package Unicode::Collate; BEGIN { unless ("A" eq pack('U', 0x41)) { die "Unicode::Collate cannot stringify a Unicode code point\n"; } unless (0x41 == unpack('U', 'A')) { die "Unicode::Collate cannot get a Unicode code point\n"; } } use 5.006; use strict; use warnings; use Carp; use File::Spec; no warnings 'utf8'; our $VERSION = '1.25'; our $PACKAGE = __PACKAGE__; ### begin XS only ### use XSLoader (); XSLoader::load('Unicode::Collate', $VERSION); ### end XS only ### my @Path = qw(Unicode Collate); my $KeyFile = 'allkeys.txt'; # Perl's boolean use constant TRUE => 1; use constant FALSE => ""; use constant NOMATCHPOS => -1; # A coderef to get combining class imported from Unicode::Normalize # (i.e. \&Unicode::Normalize::getCombinClass). # This is also used as a HAS_UNICODE_NORMALIZE flag. my $CVgetCombinClass; # Supported Levels use constant MinLevel => 1; use constant MaxLevel => 4; # Minimum weights at level 2 and 3, respectively use constant Min2Wt => 0x20; use constant Min3Wt => 0x02; # Shifted weight at 4th level use constant Shift4Wt => 0xFFFF; # A boolean for Variable and 16-bit weights at 4 levels of Collation Element use constant VCE_TEMPLATE => 'Cn4'; # A sort key: 16-bit weights use constant KEY_TEMPLATE => 'n*'; # The tie-breaking: 32-bit weights use constant TIE_TEMPLATE => 'N*'; # Level separator in a sort key: # i.e. pack(KEY_TEMPLATE, 0) use constant LEVEL_SEP => "\0\0"; # As Unicode code point separator for hash keys. # A joined code point string (denoted by JCPS below) # like "65;768" is used for internal processing # instead of Perl's Unicode string like "\x41\x{300}", # as the native code point is different from the Unicode code point # on EBCDIC platform. # This character must not be included in any stringified # representation of an integer. use constant CODE_SEP => ';'; # NOTE: in regex /;/ is used for $jcps! # boolean values of variable weights use constant NON_VAR => 0; # Non-Variable character use constant VAR => 1; # Variable character # specific code points use constant Hangul_SIni => 0xAC00; use constant Hangul_SFin => 0xD7A3; # Logical_Order_Exception in PropList.txt my $DefaultRearrange = [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ]; # for highestFFFF and minimalFFFE my $HighestVCE = pack(VCE_TEMPLATE, 0, 0xFFFE, 0x20, 0x5, 0xFFFF); my $minimalVCE = pack(VCE_TEMPLATE, 0, 1, 0x20, 0x5, 0xFFFE); sub UCA_Version { '34' } sub Base_Unicode_Version { '9.0.0' } ###### sub pack_U { return pack('U*', @_); } sub unpack_U { return unpack('U*', shift(@_).pack('U*')); } ###### my (%VariableOK); @VariableOK{ qw/ blanked non-ignorable shifted shift-trimmed / } = (); # keys lowercased our @ChangeOK = qw/ alternate backwards level normalization rearrange katakana_before_hiragana upper_before_lower ignore_level2 overrideCJK overrideHangul overrideOut preprocess UCA_Version hangul_terminator variable identical highestFFFF minimalFFFE long_contraction /; our @ChangeNG = qw/ entry mapping table maxlength contraction ignoreChar ignoreName undefChar undefName rewrite versionTable alternateTable backwardsTable forwardsTable rearrangeTable variableTable derivCode normCode rearrangeHash backwardsFlag suppress suppressHash __useXS /; ### XS only # The hash key 'ignored' was deleted at v 0.21. # The hash key 'isShift' was deleted at v 0.23. # The hash key 'combining' was deleted at v 0.24. # The hash key 'entries' was deleted at v 0.30. # The hash key 'L3_ignorable' was deleted at v 0.40. sub version { my $self = shift; return $self->{versionTable} || 'unknown'; } my (%ChangeOK, %ChangeNG); @ChangeOK{ @ChangeOK } = (); @ChangeNG{ @ChangeNG } = (); sub change { my $self = shift; my %hash = @_; my %old; if (exists $hash{alternate}) { if (exists $hash{variable}) { delete $hash{alternate}; } else { $hash{variable} = $hash{alternate}; } } foreach my $k (keys %hash) { if (exists $ChangeOK{$k}) { $old{$k} = $self->{$k}; $self->{$k} = $hash{$k}; } elsif (exists $ChangeNG{$k}) { croak "change of $k via change() is not allowed!"; } # else => ignored } $self->checkCollator(); return wantarray ? %old : $self; } sub _checkLevel { my $level = shift; my $key = shift; # 'level' or 'backwards' MinLevel <= $level or croak sprintf "Illegal level %d (in value for key '%s') lower than %d.", $level, $key, MinLevel; $level <= MaxLevel or croak sprintf "Unsupported level %d (in value for key '%s') higher than %d.", $level, $key, MaxLevel; } my %DerivCode = ( 8 => \&_derivCE_8, 9 => \&_derivCE_9, 11 => \&_derivCE_9, # 11 == 9 14 => \&_derivCE_14, 16 => \&_derivCE_14, # 16 == 14 18 => \&_derivCE_18, 20 => \&_derivCE_20, 22 => \&_derivCE_22, 24 => \&_derivCE_24, 26 => \&_derivCE_24, # 26 == 24 28 => \&_derivCE_24, # 28 == 24 30 => \&_derivCE_24, # 30 == 24 32 => \&_derivCE_32, 34 => \&_derivCE_34, 36 => \&_derivCE_36, ); sub checkCollator { my $self = shift; _checkLevel($self->{level}, 'level'); $self->{derivCode} = $DerivCode{ $self->{UCA_Version} } or croak "Illegal UCA version (passed $self->{UCA_Version})."; $self->{variable} ||= $self->{alternate} || $self->{variableTable} || $self->{alternateTable} || 'shifted'; $self->{variable} = $self->{alternate} = lc($self->{variable}); exists $VariableOK{ $self->{variable} } or croak "$PACKAGE unknown variable parameter name: $self->{variable}"; if (! defined $self->{backwards}) { $self->{backwardsFlag} = 0; } elsif (! ref $self->{backwards}) { _checkLevel($self->{backwards}, 'backwards'); $self->{backwardsFlag} = 1 << $self->{backwards}; } else { my %level; $self->{backwardsFlag} = 0; for my $b (@{ $self->{backwards} }) { _checkLevel($b, 'backwards'); $level{$b} = 1; } for my $v (sort keys %level) { $self->{backwardsFlag} += 1 << $v; } } defined $self->{rearrange} or $self->{rearrange} = []; ref $self->{rearrange} or croak "$PACKAGE: list for rearrangement must be store in ARRAYREF"; # keys of $self->{rearrangeHash} are $self->{rearrange}. $self->{rearrangeHash} = undef; if (@{ $self->{rearrange} }) { @{ $self->{rearrangeHash} }{ @{ $self->{rearrange} } } = (); } $self->{normCode} = undef; if (defined $self->{normalization}) { eval { require Unicode::Normalize }; $@ and croak "Unicode::Normalize is required to normalize strings"; $CVgetCombinClass ||= \&Unicode::Normalize::getCombinClass; if ($self->{normalization} =~ /^(?:NF)D\z/) { # tweak for default $self->{normCode} = \&Unicode::Normalize::NFD; } elsif ($self->{normalization} ne 'prenormalized') { my $norm = $self->{normalization}; $self->{normCode} = sub { Unicode::Normalize::normalize($norm, shift); }; eval { $self->{normCode}->("") }; # try $@ and croak "$PACKAGE unknown normalization form name: $norm"; } } return; } sub new { my $class = shift; my $self = bless { @_ }, $class; ### begin XS only ### if (! exists $self->{table} && !defined $self->{rewrite} && !defined $self->{undefName} && !defined $self->{ignoreName} && !defined $self->{undefChar} && !defined $self->{ignoreChar}) { $self->{__useXS} = \&_fetch_simple; } else { $self->{__useXS} = undef; } ### end XS only ### # keys of $self->{suppressHash} are $self->{suppress}. if ($self->{suppress} && @{ $self->{suppress} }) { @{ $self->{suppressHash} }{ @{ $self->{suppress} } } = (); } # before read_table() # If undef is passed explicitly, no file is read. $self->{table} = $KeyFile if ! exists $self->{table}; $self->read_table() if defined $self->{table}; if ($self->{entry}) { while ($self->{entry} =~ /([^\n]+)/g) { $self->parseEntry($1, TRUE); } } # only in new(), not in change() $self->{level} ||= MaxLevel; $self->{UCA_Version} ||= UCA_Version(); $self->{overrideHangul} = FALSE if ! exists $self->{overrideHangul}; $self->{overrideCJK} = FALSE if ! exists $self->{overrideCJK}; $self->{normalization} = 'NFD' if ! exists $self->{normalization}; $self->{rearrange} = $self->{rearrangeTable} || ($self->{UCA_Version} <= 11 ? $DefaultRearrange : []) if ! exists $self->{rearrange}; $self->{backwards} = $self->{backwardsTable} if ! exists $self->{backwards}; exists $self->{long_contraction} or $self->{long_contraction} = 22 <= $self->{UCA_Version} && $self->{UCA_Version} <= 24; # checkCollator() will be called in change() $self->checkCollator(); return $self; } sub parseAtmark { my $self = shift; my $line = shift; # after s/^\s*\@// if ($line =~ /^version\s*(\S*)/) { $self->{versionTable} ||= $1; } elsif ($line =~ /^variable\s+(\S*)/) { # since UTS #10-9 $self->{variableTable} ||= $1; } elsif ($line =~ /^alternate\s+(\S*)/) { # till UTS #10-8 $self->{alternateTable} ||= $1; } elsif ($line =~ /^backwards\s+(\S*)/) { push @{ $self->{backwardsTable} }, $1; } elsif ($line =~ /^forwards\s+(\S*)/) { # perhaps no use push @{ $self->{forwardsTable} }, $1; } elsif ($line =~ /^rearrange\s+(.*)/) { # (\S*) is NG push @{ $self->{rearrangeTable} }, _getHexArray($1); } } sub read_table { my $self = shift; ### begin XS only ### if ($self->{__useXS}) { my @rest = _fetch_rest(); # complex matter need to parse for my $line (@rest) { next if $line =~ /^\s*#/; if ($line =~ s/^\s*\@//) { $self->parseAtmark($line); } else { $self->parseEntry($line); } } return; } ### end XS only ### my($f, $fh); foreach my $d (@INC) { $f = File::Spec->catfile($d, @Path, $self->{table}); last if open($fh, $f); $f = undef; } if (!defined $f) { $f = File::Spec->catfile(@Path, $self->{table}); croak("$PACKAGE: Can't locate $f in \@INC (\@INC contains: @INC)"); } while (my $line = <$fh>) { next if $line =~ /^\s*#/; if ($line =~ s/^\s*\@//) { $self->parseAtmark($line); } else { $self->parseEntry($line); } } close $fh; } ## ## get $line, parse it, and write an entry in $self ## sub parseEntry { my $self = shift; my $line = shift; my $tailoring = shift; my($name, $entry, @uv, @key); if (defined $self->{rewrite}) { $line = $self->{rewrite}->($line); } return if $line !~ /^\s*[0-9A-Fa-f]/; # removes comment and gets name $name = $1 if $line =~ s/[#%]\s*(.*)//; return if defined $self->{undefName} && $name =~ /$self->{undefName}/; # gets element my($e, $k) = split /;/, $line; croak "Wrong Entry: <charList> must be separated by ';' from <collElement>" if ! $k; @uv = _getHexArray($e); return if !@uv; return if @uv > 1 && $self->{suppressHash} && !$tailoring && exists $self->{suppressHash}{$uv[0]}; $entry = join(CODE_SEP, @uv); # in JCPS if (defined $self->{undefChar} || defined $self->{ignoreChar}) { my $ele = pack_U(@uv); # regarded as if it were not stored in the table return if defined $self->{undefChar} && $ele =~ /$self->{undefChar}/; # replaced as completely ignorable $k = '[.0000.0000.0000.0000]' if defined $self->{ignoreChar} && $ele =~ /$self->{ignoreChar}/; } # replaced as completely ignorable $k = '[.0000.0000.0000.0000]' if defined $self->{ignoreName} && $name =~ /$self->{ignoreName}/; my $is_L3_ignorable = TRUE; foreach my $arr ($k =~ /\[([^\[\]]+)\]/g) { # SPACEs allowed my $var = $arr =~ /\*/; # exactly /^\*/ but be lenient. my @wt = _getHexArray($arr); push @key, pack(VCE_TEMPLATE, $var, @wt); $is_L3_ignorable = FALSE if $wt[0] || $wt[1] || $wt[2]; # Conformance Test for 3.1.1 and 4.0.0 shows Level 3 ignorable # is completely ignorable. # For expansion, an entry $is_L3_ignorable # if and only if "all" CEs are [.0000.0000.0000]. } # mapping: be an array ref or not exists (any false value is disallowed) $self->{mapping}{$entry} = $is_L3_ignorable ? [] : \@key; # maxlength: be more than 1 or not exists (any false value is disallowed) if (@uv > 1) { if (!$self->{maxlength}{$uv[0]} || $self->{maxlength}{$uv[0]} < @uv) { $self->{maxlength}{$uv[0]} = @uv; } } # contraction: be 1 or not exists (any false value is disallowed) while (@uv > 2) { pop @uv; my $fake_entry = join(CODE_SEP, @uv); # in JCPS $self->{contraction}{$fake_entry} = 1; } } sub viewSortKey { my $self = shift; my $str = shift; $self->visualizeSortKey($self->getSortKey($str)); } sub process { my $self = shift; my $str = shift; my $prep = $self->{preprocess}; my $norm = $self->{normCode}; $str = &$prep($str) if ref $prep; $str = &$norm($str) if ref $norm; return $str; } ## ## arrayref of JCPS = splitEnt(string to be collated) ## arrayref of arrayref[JCPS, ini_pos, fin_pos] = splitEnt(string, TRUE) ## sub splitEnt { my $self = shift; my $str = shift; my $wLen = shift; # with Length my $map = $self->{mapping}; my $max = $self->{maxlength}; my $reH = $self->{rearrangeHash}; my $vers = $self->{UCA_Version}; my $ver9 = $vers >= 9 && $vers <= 11; my $long = $self->{long_contraction}; my $uXS = $self->{__useXS}; ### XS only my @buf; # get array of Unicode code point of string. my @src = unpack_U($str); # rearrangement: # Character positions are not kept if rearranged, # then neglected if $wLen is true. if ($reH && ! $wLen) { for (my $i = 0; $i < @src; $i++) { if (exists $reH->{ $src[$i] } && $i + 1 < @src) { ($src[$i], $src[$i+1]) = ($src[$i+1], $src[$i]); $i++; } } } # remove a code point marked as a completely ignorable. for (my $i = 0; $i < @src; $i++) { if ($vers <= 20 && _isIllegal($src[$i])) { $src[$i] = undef; } elsif ($ver9) { $src[$i] = undef if exists $map->{ $src[$i] } ? @{ $map->{ $src[$i] } } == 0 : $uXS && _ignorable_simple($src[$i]); ### XS only } } for (my $i = 0; $i < @src; $i++) { my $jcps = $src[$i]; # skip removed code point if (! defined $jcps) { if ($wLen && @buf) { $buf[-1][2] = $i + 1; } next; } my $i_orig = $i; # find contraction if (exists $max->{$jcps}) { my $temp_jcps = $jcps; my $jcpsLen = 1; my $maxLen = $max->{$jcps}; for (my $p = $i + 1; $jcpsLen < $maxLen && $p < @src; $p++) { next if ! defined $src[$p]; $temp_jcps .= CODE_SEP . $src[$p]; $jcpsLen++; if (exists $map->{$temp_jcps}) { $jcps = $temp_jcps; $i = $p; } } # discontiguous contraction with Combining Char (cf. UTS#10, S2.1). # This process requires Unicode::Normalize. # If "normalization" is undef, here should be skipped *always* # (in spite of bool value of $CVgetCombinClass), # since canonical ordering cannot be expected. # Blocked combining character should not be contracted. # $self->{normCode} is false in the case of "prenormalized". if ($self->{normalization}) { my $cont = $self->{contraction}; my $preCC = 0; my $preCC_uc = 0; my $jcps_uc = $jcps; my(@out, @out_uc); for (my $p = $i + 1; $p < @src; $p++) { next if ! defined $src[$p]; my $curCC = $CVgetCombinClass->($src[$p]); last unless $curCC; my $tail = CODE_SEP . $src[$p]; if ($preCC != $curCC && exists $map->{$jcps.$tail}) { $jcps .= $tail; push @out, $p; } else { $preCC = $curCC; } next if !$long; if ($preCC_uc != $curCC && (exists $map->{$jcps_uc.$tail} || exists $cont->{$jcps_uc.$tail})) { $jcps_uc .= $tail; push @out_uc, $p; } else { $preCC_uc = $curCC; } } if (@out_uc && exists $map->{$jcps_uc}) { $jcps = $jcps_uc; $src[$_] = undef for @out_uc; } else { $src[$_] = undef for @out; } } } # skip completely ignorable if (exists $map->{$jcps} ? @{ $map->{$jcps} } == 0 : $uXS && $jcps !~ /;/ && _ignorable_simple($jcps)) { ### XS only if ($wLen && @buf) { $buf[-1][2] = $i + 1; } next; } push @buf, $wLen ? [$jcps, $i_orig, $i + 1] : $jcps; } return \@buf; } ## ## VCE = _pack_override(input, codepoint, derivCode) ## sub _pack_override ($$$) { my $r = shift; my $u = shift; my $der = shift; if (ref $r) { return pack(VCE_TEMPLATE, NON_VAR, @$r); } elsif (defined $r) { return pack(VCE_TEMPLATE, NON_VAR, $r, Min2Wt, Min3Wt, $u); } else { $u = 0xFFFD if 0x10FFFF < $u; return $der->($u); } } ## ## list of VCE = getWt(JCPS) ## sub getWt { my $self = shift; my $u = shift; my $map = $self->{mapping}; my $der = $self->{derivCode}; my $out = $self->{overrideOut}; my $uXS = $self->{__useXS}; ### XS only return if !defined $u; return $self->varCE($HighestVCE) if $u eq 0xFFFF && $self->{highestFFFF}; return $self->varCE($minimalVCE) if $u eq 0xFFFE && $self->{minimalFFFE}; $u = 0xFFFD if $u !~ /;/ && 0x10FFFF < $u && !$out; my @ce; if (exists $map->{$u}) { @ce = @{ $map->{$u} }; # $u may be a contraction ### begin XS only ### } elsif ($uXS && _exists_simple($u)) { @ce = _fetch_simple($u); ### end XS only ### } elsif (Hangul_SIni <= $u && $u <= Hangul_SFin) { my $hang = $self->{overrideHangul}; if ($hang) { @ce = map _pack_override($_, $u, $der), $hang->($u); } elsif (!defined $hang) { @ce = $der->($u); } else { my $max = $self->{maxlength}; my @decH = _decompHangul($u); if (@decH == 2) { my $contract = join(CODE_SEP, @decH); @decH = ($contract) if exists $map->{$contract}; } else { # must be <@decH == 3> if (exists $max->{$decH[0]}) { my $contract = join(CODE_SEP, @decH); if (exists $map->{$contract}) { @decH = ($contract); } else { $contract = join(CODE_SEP, @decH[0,1]); exists $map->{$contract} and @decH = ($contract, $decH[2]); } # even if V's ignorable, LT contraction is not supported. # If such a situation were required, NFD should be used. } if (@decH == 3 && exists $max->{$decH[1]}) { my $contract = join(CODE_SEP, @decH[1,2]); exists $map->{$contract} and @decH = ($decH[0], $contract); } } @ce = map({ exists $map->{$_} ? @{ $map->{$_} } : $uXS && _exists_simple($_) ? _fetch_simple($_) : ### XS only $der->($_); } @decH); } } elsif ($out && 0x10FFFF < $u) { @ce = map _pack_override($_, $u, $der), $out->($u); } else { my $cjk = $self->{overrideCJK}; my $vers = $self->{UCA_Version}; if ($cjk && _isUIdeo($u, $vers)) { @ce = map _pack_override($_, $u, $der), $cjk->($u); } elsif ($vers == 8 && defined $cjk && _isUIdeo($u, 0)) { @ce = _uideoCE_8($u); } else { @ce = $der->($u); } } return map $self->varCE($_), @ce; } ## ## string sortkey = getSortKey(string arg) ## sub getSortKey { my $self = shift; my $orig = shift; my $str = $self->process($orig); my $rEnt = $self->splitEnt($str); # get an arrayref of JCPS my $vers = $self->{UCA_Version}; my $term = $self->{hangul_terminator}; my $lev = $self->{level}; my $iden = $self->{identical}; my @buf; # weight arrays if ($term) { my $preHST = ''; my $termCE = $self->varCE(pack(VCE_TEMPLATE, NON_VAR, $term, 0,0,0)); foreach my $jcps (@$rEnt) { # weird things like VL, TL-contraction are not considered! my $curHST = join '', map getHST($_, $vers), split /;/, $jcps; if ($preHST && !$curHST || # hangul before non-hangul $preHST =~ /L\z/ && $curHST =~ /^T/ || $preHST =~ /V\z/ && $curHST =~ /^L/ || $preHST =~ /T\z/ && $curHST =~ /^[LV]/) { push @buf, $termCE; } $preHST = $curHST; push @buf, $self->getWt($jcps); } push @buf, $termCE if $preHST; # end at hangul } else { foreach my $jcps (@$rEnt) { push @buf, $self->getWt($jcps); } } my $rkey = $self->mk_SortKey(\@buf); ### XS only if ($iden || $vers >= 26 && $lev == MaxLevel) { $rkey .= LEVEL_SEP; $rkey .= pack(TIE_TEMPLATE, unpack_U($str)) if $iden; } return $rkey; } ## ## int compare = cmp(string a, string b) ## sub cmp { $_[0]->getSortKey($_[1]) cmp $_[0]->getSortKey($_[2]) } sub eq { $_[0]->getSortKey($_[1]) eq $_[0]->getSortKey($_[2]) } sub ne { $_[0]->getSortKey($_[1]) ne $_[0]->getSortKey($_[2]) } sub lt { $_[0]->getSortKey($_[1]) lt $_[0]->getSortKey($_[2]) } sub le { $_[0]->getSortKey($_[1]) le $_[0]->getSortKey($_[2]) } sub gt { $_[0]->getSortKey($_[1]) gt $_[0]->getSortKey($_[2]) } sub ge { $_[0]->getSortKey($_[1]) ge $_[0]->getSortKey($_[2]) } ## ## list[strings] sorted = sort(list[strings] arg) ## sub sort { my $obj = shift; return map { $_->[1] } sort{ $a->[0] cmp $b->[0] } map [ $obj->getSortKey($_), $_ ], @_; } ## ## bool _nonIgnorAtLevel(arrayref weights, int level) ## sub _nonIgnorAtLevel($$) { my $wt = shift; return if ! defined $wt; my $lv = shift; return grep($wt->[$_-1] != 0, MinLevel..$lv) ? TRUE : FALSE; } ## ## bool _eqArray( ## arrayref of arrayref[weights] source, ## arrayref of arrayref[weights] substr, ## int level) ## * comparison of graphemes vs graphemes. ## @$source >= @$substr must be true (check it before call this); ## sub _eqArray($$$) { my $source = shift; my $substr = shift; my $lev = shift; for my $g (0..@$substr-1){ # Do the $g'th graphemes have the same number of AV weights? return if @{ $source->[$g] } != @{ $substr->[$g] }; for my $w (0..@{ $substr->[$g] }-1) { for my $v (0..$lev-1) { return if $source->[$g][$w][$v] != $substr->[$g][$w][$v]; } } } return 1; } ## ## (int position, int length) ## int position = index(string, substring, position, [undoc'ed global]) ## ## With "global" (only for the list context), ## returns list of arrayref[position, length]. ## sub index { my $self = shift; $self->{preprocess} and croak "Don't use Preprocess with index(), match(), etc."; $self->{normCode} and croak "Don't use Normalization with index(), match(), etc."; my $str = shift; my $len = length($str); my $sub = shift; my $subE = $self->splitEnt($sub); my $pos = @_ ? shift : 0; $pos = 0 if $pos < 0; my $glob = shift; my $lev = $self->{level}; my $v2i = $self->{UCA_Version} >= 9 && $self->{variable} ne 'non-ignorable'; if (! @$subE) { my $temp = $pos <= 0 ? 0 : $len <= $pos ? $len : $pos; return $glob ? map([$_, 0], $temp..$len) : wantarray ? ($temp,0) : $temp; } $len < $pos and return wantarray ? () : NOMATCHPOS; my $strE = $self->splitEnt($pos ? substr($str, $pos) : $str, TRUE); @$strE or return wantarray ? () : NOMATCHPOS; my(@strWt, @iniPos, @finPos, @subWt, @g_ret); my $last_is_variable; for my $vwt (map $self->getWt($_), @$subE) { my($var, @wt) = unpack(VCE_TEMPLATE, $vwt); my $to_be_pushed = _nonIgnorAtLevel(\@wt,$lev); # "Ignorable (L1, L2) after Variable" since track. v. 9 if ($v2i) { if ($var) { $last_is_variable = TRUE; } elsif (!$wt[0]) { # ignorable $to_be_pushed = FALSE if $last_is_variable; } else { $last_is_variable = FALSE; } } if (@subWt && !$var && !$wt[0]) { push @{ $subWt[-1] }, \@wt if $to_be_pushed; } elsif ($to_be_pushed) { push @subWt, [ \@wt ]; } # else ===> skipped } my $count = 0; my $end = @$strE - 1; $last_is_variable = FALSE; # reuse for (my $i = 0; $i <= $end; ) { # no $i++ my $found_base = 0; # fetch a grapheme while ($i <= $end && $found_base == 0) { for my $vwt ($self->getWt($strE->[$i][0])) { my($var, @wt) = unpack(VCE_TEMPLATE, $vwt); my $to_be_pushed = _nonIgnorAtLevel(\@wt,$lev); # "Ignorable (L1, L2) after Variable" since track. v. 9 if ($v2i) { if ($var) { $last_is_variable = TRUE; } elsif (!$wt[0]) { # ignorable $to_be_pushed = FALSE if $last_is_variable; } else { $last_is_variable = FALSE; } } if (@strWt && !$var && !$wt[0]) { push @{ $strWt[-1] }, \@wt if $to_be_pushed; $finPos[-1] = $strE->[$i][2]; } elsif ($to_be_pushed) { push @strWt, [ \@wt ]; push @iniPos, $found_base ? NOMATCHPOS : $strE->[$i][1]; $finPos[-1] = NOMATCHPOS if $found_base; push @finPos, $strE->[$i][2]; $found_base++; } # else ===> no-op } $i++; } # try to match while ( @strWt > @subWt || (@strWt == @subWt && $i > $end) ) { if ($iniPos[0] != NOMATCHPOS && $finPos[$#subWt] != NOMATCHPOS && _eqArray(\@strWt, \@subWt, $lev)) { my $temp = $iniPos[0] + $pos; if ($glob) { push @g_ret, [$temp, $finPos[$#subWt] - $iniPos[0]]; splice @strWt, 0, $#subWt; splice @iniPos, 0, $#subWt; splice @finPos, 0, $#subWt; } else { return wantarray ? ($temp, $finPos[$#subWt] - $iniPos[0]) : $temp; } } shift @strWt; shift @iniPos; shift @finPos; } } return $glob ? @g_ret : wantarray ? () : NOMATCHPOS; } ## ## scalarref to matching part = match(string, substring) ## sub match { my $self = shift; if (my($pos,$len) = $self->index($_[0], $_[1])) { my $temp = substr($_[0], $pos, $len); return wantarray ? $temp : \$temp; # An lvalue ref \substr should be avoided, # since its value is affected by modification of its referent. } else { return; } } ## ## arrayref matching parts = gmatch(string, substring) ## sub gmatch { my $self = shift; my $str = shift; my $sub = shift; return map substr($str, $_->[0], $_->[1]), $self->index($str, $sub, 0, 'g'); } ## ## bool subst'ed = subst(string, substring, replace) ## sub subst { my $self = shift; my $code = ref $_[2] eq 'CODE' ? $_[2] : FALSE; if (my($pos,$len) = $self->index($_[0], $_[1])) { if ($code) { my $mat = substr($_[0], $pos, $len); substr($_[0], $pos, $len, $code->($mat)); } else { substr($_[0], $pos, $len, $_[2]); } return TRUE; } else { return FALSE; } } ## ## int count = gsubst(string, substring, replace) ## sub gsubst { my $self = shift; my $code = ref $_[2] eq 'CODE' ? $_[2] : FALSE; my $cnt = 0; # Replacement is carried out from the end, then use reverse. for my $pos_len (reverse $self->index($_[0], $_[1], 0, 'g')) { if ($code) { my $mat = substr($_[0], $pos_len->[0], $pos_len->[1]); substr($_[0], $pos_len->[0], $pos_len->[1], $code->($mat)); } else { substr($_[0], $pos_len->[0], $pos_len->[1], $_[2]); } $cnt++; } return $cnt; } 1; __END__ =head1 NAME Unicode::Collate - Unicode Collation Algorithm =head1 SYNOPSIS use Unicode::Collate; #construct $Collator = Unicode::Collate->new(%tailoring); #sort @sorted = $Collator->sort(@not_sorted); #compare $result = $Collator->cmp($a, $b); # returns 1, 0, or -1. B<Note:> Strings in C<@not_sorted>, C<$a> and C<$b> are interpreted according to Perl's Unicode support. See L<perlunicode>, L<perluniintro>, L<perlunitut>, L<perlunifaq>, L<utf8>. Otherwise you can use C<preprocess> or should decode them before. =head1 DESCRIPTION This module is an implementation of Unicode Technical Standard #10 (a.k.a. UTS #10) - Unicode Collation Algorithm (a.k.a. UCA). =head2 Constructor and Tailoring The C<new> method returns a collator object. If new() is called with no parameters, the collator should do the default collation. $Collator = Unicode::Collate->new( UCA_Version => $UCA_Version, alternate => $alternate, # alias for 'variable' backwards => $levelNumber, # or \@levelNumbers entry => $element, hangul_terminator => $term_primary_weight, highestFFFF => $bool, identical => $bool, ignoreName => qr/$ignoreName/, ignoreChar => qr/$ignoreChar/, ignore_level2 => $bool, katakana_before_hiragana => $bool, level => $collationLevel, long_contraction => $bool, minimalFFFE => $bool, normalization => $normalization_form, overrideCJK => \&overrideCJK, overrideHangul => \&overrideHangul, preprocess => \&preprocess, rearrange => \@charList, rewrite => \&rewrite, suppress => \@charList, table => $filename, undefName => qr/$undefName/, undefChar => qr/$undefChar/, upper_before_lower => $bool, variable => $variable, ); =over 4 =item UCA_Version If the revision (previously "tracking version") number of UCA is given, behavior of that revision is emulated on collating. If omitted, the return value of C<UCA_Version()> is used. The following revisions are supported. The default is 34. UCA Unicode Standard DUCET (@version) ------------------------------------------------------- 8 3.1 3.0.1 (3.0.1d9) 9 3.1 with Corrigendum 3 3.1.1 (3.1.1) 11 4.0 4.0.0 (4.0.0) 14 4.1.0 4.1.0 (4.1.0) 16 5.0 5.0.0 (5.0.0) 18 5.1.0 5.1.0 (5.1.0) 20 5.2.0 5.2.0 (5.2.0) 22 6.0.0 6.0.0 (6.0.0) 24 6.1.0 6.1.0 (6.1.0) 26 6.2.0 6.2.0 (6.2.0) 28 6.3.0 6.3.0 (6.3.0) 30 7.0.0 7.0.0 (7.0.0) 32 8.0.0 8.0.0 (8.0.0) 34 9.0.0 9.0.0 (9.0.0) 36 10.0.0 10.0.0(10.0.0) * See below for C<long_contraction> with C<UCA_Version> 22 and 24. * Noncharacters (e.g. U+FFFF) are not ignored, and can be overridden since C<UCA_Version> 22. * Out-of-range codepoints (greater than U+10FFFF) are not ignored, and can be overridden since C<UCA_Version> 22. * Fully ignorable characters were ignored, and would not interrupt contractions with C<UCA_Version> 9 and 11. * Treatment of ignorables after variables and some behaviors were changed at C<UCA_Version> 9. * Characters regarded as CJK unified ideographs (cf. C<overrideCJK>) depend on C<UCA_Version>. * Many hangul jamo are assigned at C<UCA_Version> 20, that will affect C<hangul_terminator>. =item alternate -- see 3.2.2 Alternate Weighting, version 8 of UTS #10 For backward compatibility, C<alternate> (old name) can be used as an alias for C<variable>. =item backwards -- see 3.4 Backward Accents, UTS #10. backwards => $levelNumber or \@levelNumbers Weights in reverse order; ex. level 2 (diacritic ordering) in French. If omitted (or C<$levelNumber> is C<undef> or C<\@levelNumbers> is C<[]>), forwards at all the levels. =item entry -- see 5 Tailoring; 9.1 Allkeys File Format, UTS #10. If the same character (or a sequence of characters) exists in the collation element table through C<table>, mapping to collation elements is overridden. If it does not exist, the mapping is defined additionally. entry => <<'ENTRY', # for DUCET v4.0.0 (allkeys-4.0.0.txt) 0063 0068 ; [.0E6A.0020.0002.0063] # ch 0043 0068 ; [.0E6A.0020.0007.0043] # Ch 0043 0048 ; [.0E6A.0020.0008.0043] # CH 006C 006C ; [.0F4C.0020.0002.006C] # ll 004C 006C ; [.0F4C.0020.0007.004C] # Ll 004C 004C ; [.0F4C.0020.0008.004C] # LL 00F1 ; [.0F7B.0020.0002.00F1] # n-tilde 006E 0303 ; [.0F7B.0020.0002.00F1] # n-tilde 00D1 ; [.0F7B.0020.0008.00D1] # N-tilde 004E 0303 ; [.0F7B.0020.0008.00D1] # N-tilde ENTRY entry => <<'ENTRY', # for DUCET v4.0.0 (allkeys-4.0.0.txt) 00E6 ; [.0E33.0020.0002.00E6][.0E8B.0020.0002.00E6] # ae ligature as <a><e> 00C6 ; [.0E33.0020.0008.00C6][.0E8B.0020.0008.00C6] # AE ligature as <A><E> ENTRY B<NOTE:> The code point in the UCA file format (before C<';'>) B<must> be a Unicode code point (defined as hexadecimal), but not a native code point. So C<0063> must always denote C<U+0063>, but not a character of C<"\x63">. Weighting may vary depending on collation element table. So ensure the weights defined in C<entry> will be consistent with those in the collation element table loaded via C<table>. In DUCET v4.0.0, primary weight of C<C> is C<0E60> and that of C<D> is C<0E6D>. So setting primary weight of C<CH> to C<0E6A> (as a value between C<0E60> and C<0E6D>) makes ordering as C<C E<lt> CH E<lt> D>. Exactly speaking DUCET already has some characters between C<C> and C<D>: C<small capital C> (C<U+1D04>) with primary weight C<0E64>, C<c-hook/C-hook> (C<U+0188/U+0187>) with C<0E65>, and C<c-curl> (C<U+0255>) with C<0E69>. Then primary weight C<0E6A> for C<CH> makes C<CH> ordered between C<c-curl> and C<D>. =item hangul_terminator -- see 7.1.4 Trailing Weights, UTS #10. If a true value is given (non-zero but should be positive), it will be added as a terminator primary weight to the end of every standard Hangul syllable. Secondary and any higher weights for terminator are set to zero. If the value is false or C<hangul_terminator> key does not exist, insertion of terminator weights will not be performed. Boundaries of Hangul syllables are determined according to conjoining Jamo behavior in F<the Unicode Standard> and F<HangulSyllableType.txt>. B<Implementation Note:> (1) For expansion mapping (Unicode character mapped to a sequence of collation elements), a terminator will not be added between collation elements, even if Hangul syllable boundary exists there. Addition of terminator is restricted to the next position to the last collation element. (2) Non-conjoining Hangul letters (Compatibility Jamo, halfwidth Jamo, and enclosed letters) are not automatically terminated with a terminator primary weight. These characters may need terminator included in a collation element table beforehand. =item highestFFFF -- see 2.4 Tailored noncharacter weights, UTS #35 (LDML) Part 5: Collation. If the parameter is made true, C<U+FFFF> has a highest primary weight. When a boolean of C<$coll-E<gt>ge($str, "abc")> and C<$coll-E<gt>le($str, "abc\x{FFFF}")> is true, it is expected that C<$str> begins with C<"abc">, or another primary equivalent. C<$str> may be C<"abcd">, C<"abc012">, but should not include C<U+FFFF> such as C<"abc\x{FFFF}xyz">. C<$coll-E<gt>le($str, "abc\x{FFFF}")> works like C<$coll-E<gt>lt($str, "abd")> almost, but the latter has a problem that you should know which letter is next to C<c>. For a certain language where C<ch> as the next letter, C<"abch"> is greater than C<"abc\x{FFFF}">, but less than C<"abd">. Note: This is equivalent to C<(entry =E<gt> 'FFFF ; [.FFFE.0020.0005.FFFF]')>. Any other character than C<U+FFFF> can be tailored by C<entry>. =item identical -- see A.3 Deterministic Comparison, UTS #10. By default, strings whose weights are equal should be equal, even though their code points are not equal. Completely ignorable characters are ignored. If the parameter is made true, a final, tie-breaking level is used. If no difference of weights is found after the comparison through all the level specified by C<level>, the comparison with code points will be performed. For the tie-breaking comparison, the sort key has code points of the original string appended. Completely ignorable characters are not ignored. If C<preprocess> and/or C<normalization> is applied, the code points of the string after them (in NFD by default) are used. =item ignoreChar =item ignoreName -- see 3.6 Variable Weighting, UTS #10. Makes the entry in the table completely ignorable; i.e. as if the weights were zero at all level. Through C<ignoreChar>, any character matching C<qr/$ignoreChar/> will be ignored. Through C<ignoreName>, any character whose name (given in the C<table> file as a comment) matches C<qr/$ignoreName/> will be ignored. E.g. when 'a' and 'e' are ignorable, 'element' is equal to 'lament' (or 'lmnt'). =item ignore_level2 -- see 5.1 Parametric Tailoring, UTS #10. By default, case-sensitive comparison (that is level 3 difference) won't ignore accents (that is level 2 difference). If the parameter is made true, accents (and other primary ignorable characters) are ignored, even though cases are taken into account. B<NOTE>: C<level> should be 3 or greater. =item katakana_before_hiragana -- see 7.2 Tertiary Weight Table, UTS #10. By default, hiragana is before katakana. If the parameter is made true, this is reversed. B<NOTE>: This parameter simplemindedly assumes that any hiragana/katakana distinctions must occur in level 3, and their weights at level 3 must be same as those mentioned in 7.3.1, UTS #10. If you define your collation elements which violate this requirement, this parameter does not work validly. =item level -- see 4.3 Form Sort Key, UTS #10. Set the maximum level. Any higher levels than the specified one are ignored. Level 1: alphabetic ordering Level 2: diacritic ordering Level 3: case ordering Level 4: tie-breaking (e.g. in the case when variable is 'shifted') ex.level => 2, If omitted, the maximum is the 4th. B<NOTE:> The DUCET includes weights over 0xFFFF at the 4th level. But this module only uses weights within 0xFFFF. When C<variable> is 'blanked' or 'non-ignorable' (other than 'shifted' and 'shift-trimmed'), the level 4 may be unreliable. See also C<identical>. =item long_contraction -- see 3.8.2 Well-Formedness of the DUCET, 4.2 Produce Array, UTS #10. If the parameter is made true, for a contraction with three or more characters (here nicknamed "long contraction"), initial substrings will be handled. For example, a contraction ABC, where A is a starter, and B and C are non-starters (character with non-zero combining character class), will be detected even if there is not AB as a contraction. B<Default:> Usually false. If C<UCA_Version> is 22 or 24, and the value of C<long_contraction> is not specified in C<new()>, a true value is set implicitly. This is a workaround to pass Conformance Tests for Unicode 6.0.0 and 6.1.0. C<change()> handles C<long_contraction> explicitly only. If C<long_contraction> is not specified in C<change()>, even though C<UCA_Version> is changed, C<long_contraction> will not be changed. B<Limitation:> Scanning non-starters is one-way (no back tracking). If AB is found but not ABC is not found, other long contraction where the first character is A and the second is not B may not be found. Under C<(normalization =E<gt> undef)>, detection step of discontiguous contractions will be skipped. B<Note:> The following contractions in DUCET are not considered in steps S2.1.1 to S2.1.3, where they are discontiguous. 0FB2 0F71 0F80 (TIBETAN VOWEL SIGN VOCALIC RR) 0FB3 0F71 0F80 (TIBETAN VOWEL SIGN VOCALIC LL) For example C<TIBETAN VOWEL SIGN VOCALIC RR> with C<COMBINING TILDE OVERLAY> (C<U+0344>) is C<0FB2 0344 0F71 0F80> in NFD. In this case C<0FB2 0F80> (C<TIBETAN VOWEL SIGN VOCALIC R>) is detected, instead of C<0FB2 0F71 0F80>. Inserted C<0344> makes C<0FB2 0F71 0F80> discontiguous and lack of contraction C<0FB2 0F71> prohibits C<0FB2 0F71 0F80> from being detected. =item minimalFFFE -- see 1.1.1 U+FFFE, UTS #35 (LDML) Part 5: Collation. If the parameter is made true, C<U+FFFE> has a minimal primary weight. The comparison between C<"$a1\x{FFFE}$a2"> and C<"$b1\x{FFFE}$b2"> first compares C<$a1> and C<$b1> at level 1, and then C<$a2> and C<$b2> at level 1, as followed. "ab\x{FFFE}a" "Ab\x{FFFE}a" "ab\x{FFFE}c" "Ab\x{FFFE}c" "ab\x{FFFE}xyz" "abc\x{FFFE}def" "abc\x{FFFE}xYz" "aBc\x{FFFE}xyz" "abcX\x{FFFE}def" "abcx\x{FFFE}xyz" "b\x{FFFE}aaa" "bbb\x{FFFE}a" Note: This is equivalent to C<(entry =E<gt> 'FFFE ; [.0001.0020.0005.FFFE]')>. Any other character than C<U+FFFE> can be tailored by C<entry>. =item normalization -- see 4.1 Normalize, UTS #10. If specified, strings are normalized before preparation of sort keys (the normalization is executed after preprocess). A form name C<Unicode::Normalize::normalize()> accepts will be applied as C<$normalization_form>. Acceptable names include C<'NFD'>, C<'NFC'>, C<'NFKD'>, and C<'NFKC'>. See C<Unicode::Normalize::normalize()> for detail. If omitted, C<'NFD'> is used. C<normalization> is performed after C<preprocess> (if defined). Furthermore, special values, C<undef> and C<"prenormalized">, can be used, though they are not concerned with C<Unicode::Normalize::normalize()>. If C<undef> (not a string C<"undef">) is passed explicitly as the value for this key, any normalization is not carried out (this may make tailoring easier if any normalization is not desired). Under C<(normalization =E<gt> undef)>, only contiguous contractions are resolved; e.g. even if C<A-ring> (and C<A-ring-cedilla>) is ordered after C<Z>, C<A-cedilla-ring> would be primary equal to C<A>. In this point, C<(normalization =E<gt> undef, preprocess =E<gt> sub { NFD(shift) })> B<is not> equivalent to C<(normalization =E<gt> 'NFD')>. In the case of C<(normalization =E<gt> "prenormalized")>, any normalization is not performed, but discontiguous contractions with combining characters are performed. Therefore C<(normalization =E<gt> 'prenormalized', preprocess =E<gt> sub { NFD(shift) })> B<is> equivalent to C<(normalization =E<gt> 'NFD')>. If source strings are finely prenormalized, C<(normalization =E<gt> 'prenormalized')> may save time for normalization. Except C<(normalization =E<gt> undef)>, B<Unicode::Normalize> is required (see also B<CAVEAT>). =item overrideCJK -- see 7.1 Derived Collation Elements, UTS #10. By default, CJK unified ideographs are ordered in Unicode codepoint order, but those in the CJK Unified Ideographs block are less than those in the CJK Unified Ideographs Extension A etc. In the CJK Unified Ideographs block: U+4E00..U+9FA5 if UCA_Version is 8, 9 or 11. U+4E00..U+9FBB if UCA_Version is 14 or 16. U+4E00..U+9FC3 if UCA_Version is 18. U+4E00..U+9FCB if UCA_Version is 20 or 22. U+4E00..U+9FCC if UCA_Version is 24 to 30. U+4E00..U+9FD5 if UCA_Version is 32 or 34. U+4E00..U+9FEA if UCA_Version is 36. In the CJK Unified Ideographs Extension blocks: Ext.A (U+3400..U+4DB5) and Ext.B (U+20000..U+2A6D6) in any UCA_Version. Ext.C (U+2A700..U+2B734) if UCA_Version is 20 or later. Ext.D (U+2B740..U+2B81D) if UCA_Version is 22 or later. Ext.E (U+2B820..U+2CEA1) if UCA_Version is 32 or later. Ext.F (U+2CEB0..U+2EBE0) if UCA_Version is 36. Through C<overrideCJK>, ordering of CJK unified ideographs (including extensions) can be overridden. ex. CJK unified ideographs in the JIS code point order. overrideCJK => sub { my $u = shift; # get a Unicode codepoint my $b = pack('n', $u); # to UTF-16BE my $s = your_unicode_to_sjis_converter($b); # convert my $n = unpack('n', $s); # convert sjis to short [ $n, 0x20, 0x2, $u ]; # return the collation element }, The return value may be an arrayref of 1st to 4th weights as shown above. The return value may be an integer as the primary weight as shown below. If C<undef> is returned, the default derived collation element will be used. overrideCJK => sub { my $u = shift; # get a Unicode codepoint my $b = pack('n', $u); # to UTF-16BE my $s = your_unicode_to_sjis_converter($b); # convert my $n = unpack('n', $s); # convert sjis to short return $n; # return the primary weight }, The return value may be a list containing zero or more of an arrayref, an integer, or C<undef>. ex. ignores all CJK unified ideographs. overrideCJK => sub {()}, # CODEREF returning empty list # where ->eq("Pe\x{4E00}rl", "Perl") is true # as U+4E00 is a CJK unified ideograph and to be ignorable. If a false value (including C<undef>) is passed, C<overrideCJK> has no effect. C<$Collator-E<gt>change(overrideCJK =E<gt> 0)> resets the old one. But assignment of weight for CJK unified ideographs in C<table> or C<entry> is still valid. If C<undef> is passed explicitly as the value for this key, weights for CJK unified ideographs are treated as undefined. However when C<UCA_Version> E<gt> 8, C<(overrideCJK =E<gt> undef)> has no special meaning. B<Note:> In addition to them, 12 CJK compatibility ideographs (C<U+FA0E>, C<U+FA0F>, C<U+FA11>, C<U+FA13>, C<U+FA14>, C<U+FA1F>, C<U+FA21>, C<U+FA23>, C<U+FA24>, C<U+FA27>, C<U+FA28>, C<U+FA29>) are also treated as CJK unified ideographs. But they can't be overridden via C<overrideCJK> when you use DUCET, as the table includes weights for them. C<table> or C<entry> has priority over C<overrideCJK>. =item overrideHangul -- see 7.1 Derived Collation Elements, UTS #10. By default, Hangul syllables are decomposed into Hangul Jamo, even if C<(normalization =E<gt> undef)>. But the mapping of Hangul syllables may be overridden. This parameter works like C<overrideCJK>, so see there for examples. If you want to override the mapping of Hangul syllables, NFD and NFKD are not appropriate, since NFD and NFKD will decompose Hangul syllables before overriding. FCD may decompose Hangul syllables as the case may be. If a false value (but not C<undef>) is passed, C<overrideHangul> has no effect. C<$Collator-E<gt>change(overrideHangul =E<gt> 0)> resets the old one. If C<undef> is passed explicitly as the value for this key, weight for Hangul syllables is treated as undefined without decomposition into Hangul Jamo. But definition of weight for Hangul syllables in C<table> or C<entry> is still valid. =item overrideOut -- see 7.1.1 Handling Ill-Formed Code Unit Sequences, UTS #10. Perl seems to allow out-of-range values (greater than 0x10FFFF). By default, out-of-range values are replaced with C<U+FFFD> (REPLACEMENT CHARACTER) when C<UCA_Version> E<gt>= 22, or ignored when C<UCA_Version> E<lt>= 20. When C<UCA_Version> E<gt>= 22, the weights of out-of-range values can be overridden. Though C<table> or C<entry> are available for them, out-of-range values are too many. C<overrideOut> can perform it algorithmically. This parameter works like C<overrideCJK>, so see there for examples. ex. ignores all out-of-range values. overrideOut => sub {()}, # CODEREF returning empty list If a false value (including C<undef>) is passed, C<overrideOut> has no effect. C<$Collator-E<gt>change(overrideOut =E<gt> 0)> resets the old one. B<NOTE ABOUT U+FFFD:> UCA recommends that out-of-range values should not be ignored for security reasons. Say, C<"pe\x{110000}rl"> should not be equal to C<"perl">. However, C<U+FFFD> is wrongly mapped to a variable collation element in DUCET for Unicode 6.0.0 to 6.2.0, that means out-of-range values will be ignored when C<variable> isn't C<Non-ignorable>. The mapping of C<U+FFFD> is corrected in Unicode 6.3.0. see L<http://www.unicode.org/reports/tr10/tr10-28.html#Trailing_Weights> (7.1.4 Trailing Weights). Such a correction is reproduced by this. overrideOut => sub { 0xFFFD }, # CODEREF returning a very large integer This workaround is unnecessary since Unicode 6.3.0. =item preprocess -- see 5.4 Preprocessing, UTS #10. If specified, the coderef is used to preprocess each string before the formation of sort keys. ex. dropping English articles, such as "a" or "the". Then, "the pen" is before "a pencil". preprocess => sub { my $str = shift; $str =~ s/\b(?:an?|the)\s+//gi; return $str; }, C<preprocess> is performed before C<normalization> (if defined). ex. decoding strings in a legacy encoding such as shift-jis: $sjis_collator = Unicode::Collate->new( preprocess => \&your_shiftjis_to_unicode_decoder, ); @result = $sjis_collator->sort(@shiftjis_strings); B<Note:> Strings returned from the coderef will be interpreted according to Perl's Unicode support. See L<perlunicode>, L<perluniintro>, L<perlunitut>, L<perlunifaq>, L<utf8>. =item rearrange -- see 3.5 Rearrangement, UTS #10. Characters that are not coded in logical order and to be rearranged. If C<UCA_Version> is equal to or less than 11, default is: rearrange => [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ], If you want to disallow any rearrangement, pass C<undef> or C<[]> (a reference to empty list) as the value for this key. If C<UCA_Version> is equal to or greater than 14, default is C<[]> (i.e. no rearrangement). B<According to the version 9 of UCA, this parameter shall not be used; but it is not warned at present.> =item rewrite If specified, the coderef is used to rewrite lines in C<table> or C<entry>. The coderef will get each line, and then should return a rewritten line according to the UCA file format. If the coderef returns an empty line, the line will be skipped. e.g. any primary ignorable characters into tertiary ignorable: rewrite => sub { my $line = shift; $line =~ s/\[\.0000\..{4}\..{4}\./[.0000.0000.0000./g; return $line; }, This example shows rewriting weights. C<rewrite> is allowed to affect code points, weights, and the name. B<NOTE>: C<table> is available to use another table file; preparing a modified table once would be more efficient than rewriting lines on reading an unmodified table every time. =item suppress -- see 3.12 Special-Purpose Commands, UTS #35 (LDML) Part 5: Collation. Contractions beginning with the specified characters are suppressed, even if those contractions are defined in C<table>. An example for Russian and some languages using the Cyrillic script: suppress => [0x0400..0x0417, 0x041A..0x0437, 0x043A..0x045F], where 0x0400 stands for C<U+0400>, CYRILLIC CAPITAL LETTER IE WITH GRAVE. B<NOTE>: Contractions via C<entry> will not be suppressed. =item table -- see 3.8 Default Unicode Collation Element Table, UTS #10. You can use another collation element table if desired. The table file should locate in the F<Unicode/Collate> directory on C<@INC>. Say, if the filename is F<Foo.txt>, the table file is searched as F<Unicode/Collate/Foo.txt> in C<@INC>. By default, F<allkeys.txt> (as the filename of DUCET) is used. If you will prepare your own table file, any name other than F<allkeys.txt> may be better to avoid namespace conflict. B<NOTE>: When XSUB is used, the DUCET is compiled on building this module, and it may save time at the run time. Explicit saying C<(table =E<gt> 'allkeys.txt')>, or using another table, or using C<ignoreChar>, C<ignoreName>, C<undefChar>, C<undefName> or C<rewrite> will prevent this module from using the compiled DUCET. If C<undef> is passed explicitly as the value for this key, no file is read (but you can define collation elements via C<entry>). A typical way to define a collation element table without any file of table: $onlyABC = Unicode::Collate->new( table => undef, entry => << 'ENTRIES', 0061 ; [.0101.0020.0002.0061] # LATIN SMALL LETTER A 0041 ; [.0101.0020.0008.0041] # LATIN CAPITAL LETTER A 0062 ; [.0102.0020.0002.0062] # LATIN SMALL LETTER B 0042 ; [.0102.0020.0008.0042] # LATIN CAPITAL LETTER B 0063 ; [.0103.0020.0002.0063] # LATIN SMALL LETTER C 0043 ; [.0103.0020.0008.0043] # LATIN CAPITAL LETTER C ENTRIES ); If C<ignoreName> or C<undefName> is used, character names should be specified as a comment (following C<#>) on each line. =item undefChar =item undefName -- see 6.3.3 Reducing the Repertoire, UTS #10. Undefines the collation element as if it were unassigned in the C<table>. This reduces the size of the table. If an unassigned character appears in the string to be collated, the sort key is made from its codepoint as a single-character collation element, as it is greater than any other assigned collation elements (in the codepoint order among the unassigned characters). But, it'd be better to ignore characters unfamiliar to you and maybe never used. Through C<undefChar>, any character matching C<qr/$undefChar/> will be undefined. Through C<undefName>, any character whose name (given in the C<table> file as a comment) matches C<qr/$undefName/> will be undefined. ex. Collation weights for beyond-BMP characters are not stored in object: undefChar => qr/[^\0-\x{fffd}]/, =item upper_before_lower -- see 6.6 Case Comparisons, UTS #10. By default, lowercase is before uppercase. If the parameter is made true, this is reversed. B<NOTE>: This parameter simplemindedly assumes that any lowercase/uppercase distinctions must occur in level 3, and their weights at level 3 must be same as those mentioned in 7.3.1, UTS #10. If you define your collation elements which differs from this requirement, this parameter doesn't work validly. =item variable -- see 3.6 Variable Weighting, UTS #10. This key allows for variable weighting of variable collation elements, which are marked with an ASTERISK in the table (NOTE: Many punctuation marks and symbols are variable in F<allkeys.txt>). variable => 'blanked', 'non-ignorable', 'shifted', or 'shift-trimmed'. These names are case-insensitive. By default (if specification is omitted), 'shifted' is adopted. 'Blanked' Variable elements are made ignorable at levels 1 through 3; considered at the 4th level. 'Non-Ignorable' Variable elements are not reset to ignorable. 'Shifted' Variable elements are made ignorable at levels 1 through 3 their level 4 weight is replaced by the old level 1 weight. Level 4 weight for Non-Variable elements is 0xFFFF. 'Shift-Trimmed' Same as 'shifted', but all FFFF's at the 4th level are trimmed. =back =head2 Methods for Collation =over 4 =item C<@sorted = $Collator-E<gt>sort(@not_sorted)> Sorts a list of strings. =item C<$result = $Collator-E<gt>cmp($a, $b)> Returns 1 (when C<$a> is greater than C<$b>) or 0 (when C<$a> is equal to C<$b>) or -1 (when C<$a> is less than C<$b>). =item C<$result = $Collator-E<gt>eq($a, $b)> =item C<$result = $Collator-E<gt>ne($a, $b)> =item C<$result = $Collator-E<gt>lt($a, $b)> =item C<$result = $Collator-E<gt>le($a, $b)> =item C<$result = $Collator-E<gt>gt($a, $b)> =item C<$result = $Collator-E<gt>ge($a, $b)> They works like the same name operators as theirs. eq : whether $a is equal to $b. ne : whether $a is not equal to $b. lt : whether $a is less than $b. le : whether $a is less than $b or equal to $b. gt : whether $a is greater than $b. ge : whether $a is greater than $b or equal to $b. =item C<$sortKey = $Collator-E<gt>getSortKey($string)> -- see 4.3 Form Sort Key, UTS #10. Returns a sort key. You compare the sort keys using a binary comparison and get the result of the comparison of the strings using UCA. $Collator->getSortKey($a) cmp $Collator->getSortKey($b) is equivalent to $Collator->cmp($a, $b) =item C<$sortKeyForm = $Collator-E<gt>viewSortKey($string)> Converts a sorting key into its representation form. If C<UCA_Version> is 8, the output is slightly different. use Unicode::Collate; my $c = Unicode::Collate->new(); print $c->viewSortKey("Perl"),"\n"; # output: # [0B67 0A65 0B7F 0B03 | 0020 0020 0020 0020 | 0008 0002 0002 0002 | FFFF FFFF FFFF FFFF] # Level 1 Level 2 Level 3 Level 4 =back =head2 Methods for Searching The C<match>, C<gmatch>, C<subst>, C<gsubst> methods work like C<m//>, C<m//g>, C<s///>, C<s///g>, respectively, but they are not aware of any pattern, but only a literal substring. B<DISCLAIMER:> If C<preprocess> or C<normalization> parameter is true for C<$Collator>, calling these methods (C<index>, C<match>, C<gmatch>, C<subst>, C<gsubst>) is croaked, as the position and the length might differ from those on the specified string. C<rearrange> and C<hangul_terminator> parameters are neglected. C<katakana_before_hiragana> and C<upper_before_lower> don't affect matching and searching, as it doesn't matter whether greater or less. =over 4 =item C<$position = $Collator-E<gt>index($string, $substring[, $position])> =item C<($position, $length) = $Collator-E<gt>index($string, $substring[, $position])> If C<$substring> matches a part of C<$string>, returns the position of the first occurrence of the matching part in scalar context; in list context, returns a two-element list of the position and the length of the matching part. If C<$substring> does not match any part of C<$string>, returns C<-1> in scalar context and an empty list in list context. e.g. when the content of C<$str> is C<"Ich mu>E<szlig>C< studieren Perl.">, you say the following where C<$sub> is C<"M>E<uuml>C<SS">, my $Collator = Unicode::Collate->new( normalization => undef, level => 1 ); # (normalization => undef) is REQUIRED. my $match; if (my($pos,$len) = $Collator->index($str, $sub)) { $match = substr($str, $pos, $len); } and get C<"mu>E<szlig>C<"> in C<$match>, since C<"mu>E<szlig>C<"> is primary equal to C<"M>E<uuml>C<SS">. =item C<$match_ref = $Collator-E<gt>match($string, $substring)> =item C<($match) = $Collator-E<gt>match($string, $substring)> If C<$substring> matches a part of C<$string>, in scalar context, returns B<a reference to> the first occurrence of the matching part (C<$match_ref> is always true if matches, since every reference is B<true>); in list context, returns the first occurrence of the matching part. If C<$substring> does not match any part of C<$string>, returns C<undef> in scalar context and an empty list in list context. e.g. if ($match_ref = $Collator->match($str, $sub)) { # scalar context print "matches [$$match_ref].\n"; } else { print "doesn't match.\n"; } or if (($match) = $Collator->match($str, $sub)) { # list context print "matches [$match].\n"; } else { print "doesn't match.\n"; } =item C<@match = $Collator-E<gt>gmatch($string, $substring)> If C<$substring> matches a part of C<$string>, returns all the matching parts (or matching count in scalar context). If C<$substring> does not match any part of C<$string>, returns an empty list. =item C<$count = $Collator-E<gt>subst($string, $substring, $replacement)> If C<$substring> matches a part of C<$string>, the first occurrence of the matching part is replaced by C<$replacement> (C<$string> is modified) and C<$count> (always equals to C<1>) is returned. C<$replacement> can be a C<CODEREF>, taking the matching part as an argument, and returning a string to replace the matching part (a bit similar to C<s/(..)/$coderef-E<gt>($1)/e>). =item C<$count = $Collator-E<gt>gsubst($string, $substring, $replacement)> If C<$substring> matches a part of C<$string>, all the occurrences of the matching part are replaced by C<$replacement> (C<$string> is modified) and C<$count> is returned. C<$replacement> can be a C<CODEREF>, taking the matching part as an argument, and returning a string to replace the matching part (a bit similar to C<s/(..)/$coderef-E<gt>($1)/eg>). e.g. my $Collator = Unicode::Collate->new( normalization => undef, level => 1 ); # (normalization => undef) is REQUIRED. my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l..."; $Collator->gsubst($str, "camel", sub { "<b>$_[0]</b>" }); # now $str is "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>..."; # i.e., all the camels are made bold-faced. Examples: levels and ignore_level2 - what does camel match? --------------------------------------------------------------------------- level ignore_level2 | camel Camel came\x{301}l c-a-m-e-l cam\0e\0l -----------------------|--------------------------------------------------- 1 false | yes yes yes yes yes 2 false | yes yes no yes yes 3 false | yes no no yes yes 4 false | yes no no no yes -----------------------|--------------------------------------------------- 1 true | yes yes yes yes yes 2 true | yes yes yes yes yes 3 true | yes no yes yes yes 4 true | yes no yes no yes --------------------------------------------------------------------------- note: if variable => non-ignorable, camel doesn't match c-a-m-e-l at any level. =back =head2 Other Methods =over 4 =item C<%old_tailoring = $Collator-E<gt>change(%new_tailoring)> =item C<$modified_collator = $Collator-E<gt>change(%new_tailoring)> Changes the value of specified keys and returns the changed part. $Collator = Unicode::Collate->new(level => 4); $Collator->eq("perl", "PERL"); # false %old = $Collator->change(level => 2); # returns (level => 4). $Collator->eq("perl", "PERL"); # true $Collator->change(%old); # returns (level => 2). $Collator->eq("perl", "PERL"); # false Not all C<(key,value)>s are allowed to be changed. See also C<@Unicode::Collate::ChangeOK> and C<@Unicode::Collate::ChangeNG>. In the scalar context, returns the modified collator (but it is B<not> a clone from the original). $Collator->change(level => 2)->eq("perl", "PERL"); # true $Collator->eq("perl", "PERL"); # true; now max level is 2nd. $Collator->change(level => 4)->eq("perl", "PERL"); # false =item C<$version = $Collator-E<gt>version()> Returns the version number (a string) of the Unicode Standard which the C<table> file used by the collator object is based on. If the table does not include a version line (starting with C<@version>), returns C<"unknown">. =item C<UCA_Version()> Returns the revision number of UTS #10 this module consults, that should correspond with the DUCET incorporated. =item C<Base_Unicode_Version()> Returns the version number of UTS #10 this module consults, that should correspond with the DUCET incorporated. =back =head1 EXPORT No method will be exported. =head1 INSTALL Though this module can be used without any C<table> file, to use this module easily, it is recommended to install a table file in the UCA format, by copying it under the directory <a place in @INC>/Unicode/Collate. The most preferable one is "The Default Unicode Collation Element Table" (aka DUCET), available from the Unicode Consortium's website: http://www.unicode.org/Public/UCA/ http://www.unicode.org/Public/UCA/latest/allkeys.txt (latest version) If DUCET is not installed, it is recommended to copy the file from http://www.unicode.org/Public/UCA/latest/allkeys.txt to <a place in @INC>/Unicode/Collate/allkeys.txt manually. =head1 CAVEATS =over 4 =item Normalization Use of the C<normalization> parameter requires the B<Unicode::Normalize> module (see L<Unicode::Normalize>). If you need not it (say, in the case when you need not handle any combining characters), assign C<(normalization =E<gt> undef)> explicitly. -- see 6.5 Avoiding Normalization, UTS #10. =item Conformance Test The Conformance Test for the UCA is available under L<http://www.unicode.org/Public/UCA/>. For F<CollationTest_SHIFTED.txt>, a collator via C<Unicode::Collate-E<gt>new( )> should be used; for F<CollationTest_NON_IGNORABLE.txt>, a collator via C<Unicode::Collate-E<gt>new(variable =E<gt> "non-ignorable", level =E<gt> 3)>. If C<UCA_Version> is 26 or later, the C<identical> level is preferred; C<Unicode::Collate-E<gt>new(identical =E<gt> 1)> and C<Unicode::Collate-E<gt>new(identical =E<gt> 1,> C<variable =E<gt> "non-ignorable", level =E<gt> 3)> should be used. B<Unicode::Normalize is required to try The Conformance Test.> =back =head1 AUTHOR, COPYRIGHT AND LICENSE The Unicode::Collate module for perl was written by SADAHIRO Tomoyuki, <SADAHIRO@cpan.org>. This module is Copyright(C) 2001-2017, SADAHIRO Tomoyuki. Japan. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The file Unicode/Collate/allkeys.txt was copied verbatim from L<http://www.unicode.org/Public/UCA/9.0.0/allkeys.txt>. For this file, Copyright (c) 2016 Unicode, Inc.; distributed under the Terms of Use in L<http://www.unicode.org/terms_of_use.html> =head1 SEE ALSO =over 4 =item Unicode Collation Algorithm - UTS #10 L<http://www.unicode.org/reports/tr10/> =item The Default Unicode Collation Element Table (DUCET) L<http://www.unicode.org/Public/UCA/latest/allkeys.txt> =item The conformance test for the UCA L<http://www.unicode.org/Public/UCA/latest/CollationTest.html> L<http://www.unicode.org/Public/UCA/latest/CollationTest.zip> =item Hangul Syllable Type L<http://www.unicode.org/Public/UNIDATA/HangulSyllableType.txt> =item Unicode Normalization Forms - UAX #15 L<http://www.unicode.org/reports/tr15/> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =back =cut Unicode/Collate/Locale.pm 0000644 00000044712 15037233317 0011266 0 ustar 00 package Unicode::Collate::Locale; use strict; use warnings; use Carp; use base qw(Unicode::Collate); our $VERSION = '1.25'; my $PL_EXT = '.pl'; my %LocaleFile = map { ($_, $_) } qw( af ar as az be bn ca cs cy da dsb ee eo es et fa fi fil fo gu ha haw he hi hr hu hy ig is ja kk kl kn ko kok lkt ln lt lv mk ml mr mt nb nn nso om or pa pl ro sa se si sk sl sq sr sv ta te th tn to tr uk ur vi vo wae wo yo zh ); $LocaleFile{'default'} = ''; # aliases $LocaleFile{'bs'} = 'hr'; $LocaleFile{'bs_Cyrl'} = 'sr'; $LocaleFile{'sr_Latn'} = 'hr'; # short file names $LocaleFile{'de__phonebook'} = 'de_phone'; $LocaleFile{'de_AT_phonebook'} = 'de_at_ph'; $LocaleFile{'es__traditional'} = 'es_trad'; $LocaleFile{'fr_CA'} = 'fr_ca'; $LocaleFile{'fi__phonebook'} = 'fi_phone'; $LocaleFile{'si__dictionary'} = 'si_dict'; $LocaleFile{'sv__reformed'} = 'sv_refo'; $LocaleFile{'ug_Cyrl'} = 'ug_cyrl'; $LocaleFile{'zh__big5han'} = 'zh_big5'; $LocaleFile{'zh__gb2312han'} = 'zh_gb'; $LocaleFile{'zh__pinyin'} = 'zh_pin'; $LocaleFile{'zh__stroke'} = 'zh_strk'; $LocaleFile{'zh__zhuyin'} = 'zh_zhu'; my %TypeAlias = qw( phone phonebook phonebk phonebook dict dictionary reform reformed trad traditional big5 big5han gb2312 gb2312han ); sub _locale { my $locale = shift; if ($locale) { $locale = lc $locale; $locale =~ tr/\-\ \./_/; $locale =~ s/_([0-9a-z]+)\z/$TypeAlias{$1} ? "_$TypeAlias{$1}" : "_$1"/e; $LocaleFile{$locale} and return $locale; my @code = split /_/, $locale; my $lan = shift @code; my $scr = @code && length $code[0] == 4 ? ucfirst shift @code : ''; my $reg = @code && length $code[0] < 4 ? uc shift @code : ''; my $var = @code ? shift @code : ''; my @list; push @list, ( "${lan}_${scr}_${reg}_$var", "${lan}_${scr}__$var", # empty $scr should not be ${lan}__$var. "${lan}_${reg}_$var", # empty $reg may be ${lan}__$var. "${lan}__$var", ) if $var ne ''; push @list, ( "${lan}_${scr}_${reg}", "${lan}_${scr}", "${lan}_${reg}", ${lan}, ); for my $loc (@list) { $LocaleFile{$loc} and return $loc; } } return 'default'; } sub getlocale { return shift->{accepted_locale}; } sub locale_version { return shift->{locale_version}; } sub _fetchpl { my $accepted = shift; my $f = $LocaleFile{$accepted}; return if !$f; $f .= $PL_EXT; # allow to search @INC # use File::Spec; # my $path = File::Spec->catfile('Unicode', 'Collate', 'Locale', $f); my $path = "Unicode/Collate/Locale/$f"; my $h = do $path; croak "Unicode/Collate/Locale/$f can't be found" if !$h; return $h; } sub new { my $class = shift; my %hash = @_; $hash{accepted_locale} = _locale($hash{locale}); if (exists $hash{table}) { croak "your table can't be used with Unicode::Collate::Locale"; } my $href = _fetchpl($hash{accepted_locale}); while (my($k,$v) = each %$href) { if (!exists $hash{$k}) { $hash{$k} = $v; } elsif ($k eq 'entry') { $hash{$k} = $v.$hash{$k}; } else { croak "$k is reserved by $hash{locale}, can't be overwritten"; } } return $class->SUPER::new(%hash); } 1; __END__ =head1 NAME Unicode::Collate::Locale - Linguistic tailoring for DUCET via Unicode::Collate =head1 SYNOPSIS use Unicode::Collate::Locale; #construct $Collator = Unicode::Collate::Locale-> new(locale => $locale_name, %tailoring); #sort @sorted = $Collator->sort(@not_sorted); #compare $result = $Collator->cmp($a, $b); # returns 1, 0, or -1. B<Note:> Strings in C<@not_sorted>, C<$a> and C<$b> are interpreted according to Perl's Unicode support. See L<perlunicode>, L<perluniintro>, L<perlunitut>, L<perlunifaq>, L<utf8>. Otherwise you can use C<preprocess> (cf. C<Unicode::Collate>) or should decode them before. =head1 DESCRIPTION This module provides linguistic tailoring for it taking advantage of C<Unicode::Collate>. =head2 Constructor The C<new> method returns a collator object. A parameter list for the constructor is a hash, which can include a special key C<locale> and its value (case-insensitive) standing for a Unicode base language code (two or three-letter). For example, C<Unicode::Collate::Locale-E<gt>new(locale =E<gt> 'ES')> returns a collator tailored for Spanish. C<$locale_name> may be suffixed with a Unicode script code (four-letter), a Unicode region (territory) code, a Unicode language variant code. These codes are case-insensitive, and separated with C<'_'> or C<'-'>. E.g. C<en_US> for English in USA, C<az_Cyrl> for Azerbaijani in the Cyrillic script, C<es_ES_traditional> for Spanish in Spain (Traditional). If C<$locale_name> is not available, fallback is selected in the following order: 1. language with a variant code 2. language with a script code 3. language with a region code 4. language 5. default Tailoring tags provided by C<Unicode::Collate> are allowed as long as they are not used for C<locale> support. Esp. the C<table> tag is always untailorable, since it is reserved for DUCET. However C<entry> is allowed, even if it is used for C<locale> support, to add or override mappings. E.g. a collator for Spanish, which ignores diacritics and case difference (i.e. level 1), with reversed case ordering and no normalization. Unicode::Collate::Locale->new( level => 1, locale => 'es', upper_before_lower => 1, normalization => undef ) Overriding a behavior already tailored by C<locale> is disallowed if such a tailoring is passed to C<new()>. Unicode::Collate::Locale->new( locale => 'da', upper_before_lower => 0, # causes error as reserved by 'da' ) However C<change()> inherited from C<Unicode::Collate> allows such a tailoring that is reserved by C<locale>. Examples: new(locale => 'fr_ca')->change(backwards => undef) new(locale => 'da')->change(upper_before_lower => 0) new(locale => 'ja')->change(overrideCJK => undef) =head2 Methods C<Unicode::Collate::Locale> is a subclass of C<Unicode::Collate> and methods other than C<new> are inherited from C<Unicode::Collate>. Here is a list of additional methods: =over 4 =item C<$Collator-E<gt>getlocale> Returns a language code accepted and used actually on collation. If linguistic tailoring is not provided for a language code you passed (intensionally for some languages, or due to the incomplete implementation), this method returns a string C<'default'> meaning no special tailoring. =item C<$Collator-E<gt>locale_version> (Since Unicode::Collate::Locale 0.87) Returns the version number (perhaps C</\d\.\d\d/>) of the locale, as that of F<Locale/*.pl>. B<Note:> F<Locale/*.pl> that a collator uses should be identified by a combination of return values from C<getlocale> and C<locale_version>. =back =head2 A list of tailorable locales locale name description -------------------------------------------------------------- af Afrikaans ar Arabic as Assamese az Azerbaijani (Azeri) be Belarusian bn Bengali bs Bosnian (tailored as Croatian) bs_Cyrl Bosnian in Cyrillic (tailored as Serbian) ca Catalan cs Czech cy Welsh da Danish de__phonebook German (umlaut as 'ae', 'oe', 'ue') de_AT_phonebook Austrian German (umlaut primary greater) dsb Lower Sorbian ee Ewe eo Esperanto es Spanish es__traditional Spanish ('ch' and 'll' as a grapheme) et Estonian fa Persian fi Finnish (v and w are primary equal) fi__phonebook Finnish (v and w as separate characters) fil Filipino fo Faroese fr_CA Canadian French gu Gujarati ha Hausa haw Hawaiian he Hebrew hi Hindi hr Croatian hu Hungarian hy Armenian ig Igbo is Icelandic ja Japanese [1] kk Kazakh kl Kalaallisut kn Kannada ko Korean [2] kok Konkani lkt Lakota ln Lingala lt Lithuanian lv Latvian mk Macedonian ml Malayalam mr Marathi mt Maltese nb Norwegian Bokmal nn Norwegian Nynorsk nso Northern Sotho om Oromo or Oriya pa Punjabi pl Polish ro Romanian sa Sanskrit se Northern Sami si Sinhala si__dictionary Sinhala (U+0DA5 = U+0DA2,0DCA,0DA4) sk Slovak sl Slovenian sq Albanian sr Serbian sr_Latn Serbian in Latin (tailored as Croatian) sv Swedish (v and w are primary equal) sv__reformed Swedish (v and w as separate characters) ta Tamil te Telugu th Thai tn Tswana to Tonga tr Turkish ug_Cyrl Uyghur in Cyrillic uk Ukrainian ur Urdu vi Vietnamese vo Volapu"k wae Walser wo Wolof yo Yoruba zh Chinese zh__big5han Chinese (ideographs: big5 order) zh__gb2312han Chinese (ideographs: GB-2312 order) zh__pinyin Chinese (ideographs: pinyin order) [3] zh__stroke Chinese (ideographs: stroke order) [3] zh__zhuyin Chinese (ideographs: zhuyin order) [3] -------------------------------------------------------------- Locales according to the default UCA rules include am (Amharic) without C<[reorder Ethi]>, bg (Bulgarian) without C<[reorder Cyrl]>, chr (Cherokee) without C<[reorder Cher]>, de (German), en (English), fr (French), ga (Irish), id (Indonesian), it (Italian), ka (Georgian) without C<[reorder Geor]>, mn (Mongolian) without C<[reorder Cyrl Mong]>, ms (Malay), nl (Dutch), pt (Portuguese), ru (Russian) without C<[reorder Cyrl]>, sw (Swahili), zu (Zulu). B<Note> [1] ja: Ideographs are sorted in JIS X 0208 order. Fullwidth and halfwidth forms are identical to their regular form. The difference between hiragana and katakana is at the 4th level, the comparison also requires C<(variable =E<gt> 'Non-ignorable')>, and then C<katakana_before_hiragana> has no effect. [2] ko: Plenty of ideographs are sorted by their reading. Such an ideograph is primary (level 1) equal to, and secondary (level 2) greater than, the corresponding hangul syllable. [3] zh__pinyin, zh__stroke and zh__zhuyin: implemented alt='short', where a smaller number of ideographs are tailored. =head2 A list of variant codes and their aliases variant code alias ------------------------------------------ dictionary dict phonebook phone phonebk reformed reform traditional trad ------------------------------------------ big5han big5 gb2312han gb2312 pinyin stroke zhuyin ------------------------------------------ Note: 'pinyin' is Han in Latin, 'zhuyin' is Han in Bopomofo. =head1 INSTALL Installation of C<Unicode::Collate::Locale> requires F<Collate/Locale.pm>, F<Collate/Locale/*.pm>, F<Collate/CJK/*.pm> and F<Collate/allkeys.txt>. On building, C<Unicode::Collate::Locale> doesn't require any of F<data/*.txt>, F<gendata/*>, and F<mklocale>. Tests for C<Unicode::Collate::Locale> are named F<t/loc_*.t>. =head1 CAVEAT =over 4 =item Tailoring is not maximum Even if a certain letter is tailored, its equivalent would not always tailored as well as it. For example, even though W is tailored, fullwidth W (C<U+FF37>), W with acute (C<U+1E82>), etc. are not tailored. The result may depend on whether source strings are normalized or not, and whether decomposed or composed. Thus C<(normalization =E<gt> undef)> is less preferred. =item Collation reordering is not supported The order of any groups including scripts is not changed. =back =head2 Reference locale based CLDR or other reference -------------------------------------------------------------------- af 30 = 1.8.1 ar 30 = 28 ("compat" wo [reorder Arab]) = 1.9.0 as 30 = 28 (without [reorder Beng..]) = 23 az 30 = 24 ("standard" wo [reorder Latn Cyrl]) be 30 = 28 (without [reorder Cyrl]) bn 30 = 28 ("standard" wo [reorder Beng..]) = 2.0.1 bs 30 = 28 (type="standard": [import hr]) bs_Cyrl 30 = 28 (type="standard": [import sr]) ca 30 = 23 (alt="proposed" type="standard") cs 30 = 1.8.1 (type="standard") cy 30 = 1.8.1 da 22.1 = 1.8.1 (type="standard") de__phonebook 30 = 2.0 (type="phonebook") de_AT_phonebook 30 = 27 (type="phonebook") dsb 30 = 26 ee 30 = 21 eo 30 = 1.8.1 es 30 = 1.9.0 (type="standard") es__traditional 30 = 1.8.1 (type="traditional") et 30 = 26 fa 22.1 = 1.8.1 fi 22.1 = 1.8.1 (type="standard" alt="proposed") fi__phonebook 22.1 = 1.8.1 (type="phonebook") fil 30 = 1.9.0 (type="standard") = 1.8.1 fo 22.1 = 1.8.1 (alt="proposed" type="standard") fr_CA 30 = 1.9.0 gu 30 = 28 ("standard" wo [reorder Gujr..]) = 1.9.0 ha 30 = 1.9.0 haw 30 = 24 he 30 = 28 (without [reorder Hebr]) = 23 hi 30 = 28 (without [reorder Deva..]) = 1.9.0 hr 30 = 28 ("standard" wo [reorder Latn Cyrl]) = 1.9.0 hu 22.1 = 1.8.1 (alt="proposed" type="standard") hy 30 = 28 (without [reorder Armn]) = 1.8.1 ig 30 = 1.8.1 is 22.1 = 1.8.1 (type="standard") ja 22.1 = 1.8.1 (type="standard") kk 30 = 28 (without [reorder Cyrl]) kl 22.1 = 1.8.1 (type="standard") kn 30 = 28 ("standard" wo [reorder Knda..]) = 1.9.0 ko 22.1 = 1.8.1 (type="standard") kok 30 = 28 (without [reorder Deva..]) = 1.8.1 lkt 30 = 25 ln 30 = 2.0 (type="standard") = 1.8.1 lt 22.1 = 1.9.0 lv 22.1 = 1.9.0 (type="standard") = 1.8.1 mk 30 = 28 (without [reorder Cyrl]) ml 22.1 = 1.9.0 mr 30 = 28 (without [reorder Deva..]) = 1.8.1 mt 22.1 = 1.9.0 nb 22.1 = 2.0 (type="standard") nn 22.1 = 2.0 (type="standard") nso [*] 26 = 1.8.1 om 22.1 = 1.8.1 or 30 = 28 (without [reorder Orya..]) = 1.9.0 pa 22.1 = 1.8.1 pl 30 = 1.8.1 ro 30 = 1.9.0 (type="standard") sa [*] 1.9.1 = 1.8.1 (type="standard" alt="proposed") se 22.1 = 1.8.1 (type="standard") si 30 = 28 ("standard" wo [reorder Sinh..]) = 1.9.0 si__dictionary 30 = 28 ("dictionary" wo [reorder Sinh..]) = 1.9.0 sk 22.1 = 1.9.0 (type="standard") sl 22.1 = 1.8.1 (type="standard" alt="proposed") sq 22.1 = 1.8.1 (alt="proposed" type="standard") sr 30 = 28 (without [reorder Cyrl]) sr_Latn 30 = 28 (type="standard": [import hr]) sv 22.1 = 1.9.0 (type="standard") sv__reformed 22.1 = 1.8.1 (type="reformed") ta 22.1 = 1.9.0 te 30 = 28 (without [reorder Telu..]) = 1.9.0 th 22.1 = 22 tn [*] 26 = 1.8.1 to 22.1 = 22 tr 22.1 = 1.8.1 (type="standard") uk 30 = 28 (without [reorder Cyrl]) ug_Cyrl https://en.wikipedia.org/wiki/Uyghur_Cyrillic_alphabet ur 22.1 = 1.9.0 vi 22.1 = 1.8.1 vo 30 = 25 wae 30 = 2.0 wo [*] 1.9.1 = 1.8.1 yo 30 = 1.8.1 zh 22.1 = 1.8.1 (type="standard") zh__big5han 22.1 = 1.8.1 (type="big5han") zh__gb2312han 22.1 = 1.8.1 (type="gb2312han") zh__pinyin 22.1 = 2.0 (type='pinyin' alt='short') zh__stroke 22.1 = 1.9.1 (type='stroke' alt='short') zh__zhuyin 22.1 = 22 (type='zhuyin' alt='short') -------------------------------------------------------------------- [*] http://www.unicode.org/repos/cldr/tags/latest/seed/collation/ =head1 AUTHOR The Unicode::Collate::Locale module for perl was written by SADAHIRO Tomoyuki, <SADAHIRO@cpan.org>. This module is Copyright(C) 2004-2017, SADAHIRO Tomoyuki. Japan. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO =over 4 =item Unicode Collation Algorithm - UTS #10 L<http://www.unicode.org/reports/tr10/> =item The Default Unicode Collation Element Table (DUCET) L<http://www.unicode.org/Public/UCA/latest/allkeys.txt> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =item CLDR - Unicode Common Locale Data Repository L<http://cldr.unicode.org/> =item L<Unicode::Collate> =item L<Unicode::Normalize> =back =cut Unicode/Collate/allkeys.txt 0000644 00006713474 15037233317 0011754 0 ustar 00 # allkeys-9.0.0.txt # Date: 2016-05-16, 18:21:19 GMT [KW] # Copyright 2016 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # This file defines the Default Unicode Collation Element Table # (DUCET) for the Unicode Collation Algorithm # # See UTS #10, Unicode Collation Algorithm, for more information. # # Diagnostic weight ranges # Primary weight range: 0200..54A3 (21156) # Secondary weight range: 0020..0114 (245) # Variant secondaries: 0110..0114 (5) # Tertiary weight range: 0002..001F (30) # @version 9.0.0 @implicitweights 17000..18AFF; FB00 # Tangut and Tangut Components 0000 ; [.0000.0000.0000] # NULL (in ISO 6429) 0001 ; [.0000.0000.0000] # START OF HEADING (in ISO 6429) 0002 ; [.0000.0000.0000] # START OF TEXT (in ISO 6429) 0003 ; [.0000.0000.0000] # END OF TEXT (in ISO 6429) 0004 ; [.0000.0000.0000] # END OF TRANSMISSION (in ISO 6429) 0005 ; [.0000.0000.0000] # ENQUIRY (in ISO 6429) 0006 ; [.0000.0000.0000] # ACKNOWLEDGE (in ISO 6429) 0007 ; [.0000.0000.0000] # BELL (in ISO 6429) 0008 ; [.0000.0000.0000] # BACKSPACE (in ISO 6429) 000E ; [.0000.0000.0000] # SHIFT OUT (in ISO 6429) 000F ; [.0000.0000.0000] # SHIFT IN (in ISO 6429) 0010 ; [.0000.0000.0000] # DATA LINK ESCAPE (in ISO 6429) 0011 ; [.0000.0000.0000] # DEVICE CONTROL ONE (in ISO 6429) 0012 ; [.0000.0000.0000] # DEVICE CONTROL TWO (in ISO 6429) 0013 ; [.0000.0000.0000] # DEVICE CONTROL THREE (in ISO 6429) 0014 ; [.0000.0000.0000] # DEVICE CONTROL FOUR (in ISO 6429) 0015 ; [.0000.0000.0000] # NEGATIVE ACKNOWLEDGE (in ISO 6429) 0016 ; [.0000.0000.0000] # SYNCHRONOUS IDLE (in ISO 6429) 0017 ; [.0000.0000.0000] # END OF TRANSMISSION BLOCK (in ISO 6429) 0018 ; [.0000.0000.0000] # CANCEL (in ISO 6429) 0019 ; [.0000.0000.0000] # END OF MEDIUM (in ISO 6429) 001A ; [.0000.0000.0000] # SUBSTITUTE (in ISO 6429) 001B ; [.0000.0000.0000] # ESCAPE (in ISO 6429) 001C ; [.0000.0000.0000] # FILE SEPARATOR (in ISO 6429) 001D ; [.0000.0000.0000] # GROUP SEPARATOR (in ISO 6429) 001E ; [.0000.0000.0000] # RECORD SEPARATOR (in ISO 6429) 001F ; [.0000.0000.0000] # UNIT SEPARATOR (in ISO 6429) 007F ; [.0000.0000.0000] # DELETE (in ISO 6429) 0080 ; [.0000.0000.0000] # <control> 0081 ; [.0000.0000.0000] # <control> 0082 ; [.0000.0000.0000] # BREAK PERMITTED HERE (in ISO 6429) 0083 ; [.0000.0000.0000] # NO BREAK HERE (in ISO 6429) 0084 ; [.0000.0000.0000] # <control> 0086 ; [.0000.0000.0000] # START OF SELECTED AREA (in ISO 6429) 0087 ; [.0000.0000.0000] # END OF SELECTED AREA (in ISO 6429) 0088 ; [.0000.0000.0000] # CHARACTER TABULATION SET (in ISO 6429) 0089 ; [.0000.0000.0000] # CHARACTER TABULATION WITH JUSTIFICATION (in ISO 6429) 008A ; [.0000.0000.0000] # LINE TABULATION SET (in ISO 6429) 008B ; [.0000.0000.0000] # PARTIAL LINE FORWARD (in ISO 6429) 008C ; [.0000.0000.0000] # PARTIAL LINE BACKWARD (in ISO 6429) 008D ; [.0000.0000.0000] # PARTIAL LINE FEED (in ISO 6429) 008E ; [.0000.0000.0000] # SINGLE SHIFT TWO (in ISO 6429) 008F ; [.0000.0000.0000] # SINGLE SHIFT THREE (in ISO 6429) 0090 ; [.0000.0000.0000] # DEVICE CONTROL STRING (in ISO 6429) 0091 ; [.0000.0000.0000] # PRIVATE USE ONE (in ISO 6429) 0092 ; [.0000.0000.0000] # PRIVATE USE TWO (in ISO 6429) 0093 ; [.0000.0000.0000] # SET TRANSMIT STATE (in ISO 6429) 0094 ; [.0000.0000.0000] # CANCEL CHARACTER (in ISO 6429) 0095 ; [.0000.0000.0000] # MESSAGE WAITING (in ISO 6429) 0096 ; [.0000.0000.0000] # START OF GUARDED AREA (in ISO 6429) 0097 ; [.0000.0000.0000] # END OF GUARDED AREA (in ISO 6429) 0098 ; [.0000.0000.0000] # START OF STRING (in ISO 6429) 0099 ; [.0000.0000.0000] # <control> 009A ; [.0000.0000.0000] # SINGLE CHARACTER INTRODUCER (in ISO 6429) 009B ; [.0000.0000.0000] # CONTROL SEQUENCE INTRODUCER (in ISO 6429) 009C ; [.0000.0000.0000] # STRING TERMINATOR (in ISO 6429) 009D ; [.0000.0000.0000] # OPERATING SYSTEM COMMAND (in ISO 6429) 009E ; [.0000.0000.0000] # PRIVACY MESSAGE (in ISO 6429) 009F ; [.0000.0000.0000] # APPLICATION PROGRAM COMMAND (in ISO 6429) 00AD ; [.0000.0000.0000] # SOFT HYPHEN 061C ; [.0000.0000.0000] # ARABIC LETTER MARK 070F ; [.0000.0000.0000] # SYRIAC ABBREVIATION MARK 08E2 ; [.0000.0000.0000] # ARABIC DISPUTED END OF AYAH 180B ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR ONE 180C ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR TWO 180D ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR THREE 180E ; [.0000.0000.0000] # MONGOLIAN VOWEL SEPARATOR 200B ; [.0000.0000.0000] # ZERO WIDTH SPACE 200C ; [.0000.0000.0000] # ZERO WIDTH NON-JOINER 200D ; [.0000.0000.0000] # ZERO WIDTH JOINER 200E ; [.0000.0000.0000] # LEFT-TO-RIGHT MARK 200F ; [.0000.0000.0000] # RIGHT-TO-LEFT MARK 202A ; [.0000.0000.0000] # LEFT-TO-RIGHT EMBEDDING 202B ; [.0000.0000.0000] # RIGHT-TO-LEFT EMBEDDING 202C ; [.0000.0000.0000] # POP DIRECTIONAL FORMATTING 202D ; [.0000.0000.0000] # LEFT-TO-RIGHT OVERRIDE 202E ; [.0000.0000.0000] # RIGHT-TO-LEFT OVERRIDE 2060 ; [.0000.0000.0000] # WORD JOINER 2066 ; [.0000.0000.0000] # LEFT-TO-RIGHT ISOLATE 2067 ; [.0000.0000.0000] # RIGHT-TO-LEFT ISOLATE 2068 ; [.0000.0000.0000] # FIRST STRONG ISOLATE 2069 ; [.0000.0000.0000] # POP DIRECTIONAL ISOLATE 206A ; [.0000.0000.0000] # INHIBIT SYMMETRIC SWAPPING 206B ; [.0000.0000.0000] # ACTIVATE SYMMETRIC SWAPPING 206C ; [.0000.0000.0000] # INHIBIT ARABIC FORM SHAPING 206D ; [.0000.0000.0000] # ACTIVATE ARABIC FORM SHAPING 206E ; [.0000.0000.0000] # NATIONAL DIGIT SHAPES 206F ; [.0000.0000.0000] # NOMINAL DIGIT SHAPES FE00 ; [.0000.0000.0000] # VARIATION SELECTOR-1 FE01 ; [.0000.0000.0000] # VARIATION SELECTOR-2 FE02 ; [.0000.0000.0000] # VARIATION SELECTOR-3 FE03 ; [.0000.0000.0000] # VARIATION SELECTOR-4 FE04 ; [.0000.0000.0000] # VARIATION SELECTOR-5 FE05 ; [.0000.0000.0000] # VARIATION SELECTOR-6 FE06 ; [.0000.0000.0000] # VARIATION SELECTOR-7 FE07 ; [.0000.0000.0000] # VARIATION SELECTOR-8 FE08 ; [.0000.0000.0000] # VARIATION SELECTOR-9 FE09 ; [.0000.0000.0000] # VARIATION SELECTOR-10 FE0A ; [.0000.0000.0000] # VARIATION SELECTOR-11 FE0B ; [.0000.0000.0000] # VARIATION SELECTOR-12 FE0C ; [.0000.0000.0000] # VARIATION SELECTOR-13 FE0D ; [.0000.0000.0000] # VARIATION SELECTOR-14 FE0E ; [.0000.0000.0000] # VARIATION SELECTOR-15 FE0F ; [.0000.0000.0000] # VARIATION SELECTOR-16 FEFF ; [.0000.0000.0000] # ZERO WIDTH NO-BREAK SPACE FFF9 ; [.0000.0000.0000] # INTERLINEAR ANNOTATION ANCHOR FFFA ; [.0000.0000.0000] # INTERLINEAR ANNOTATION SEPARATOR FFFB ; [.0000.0000.0000] # INTERLINEAR ANNOTATION TERMINATOR 1BCA0 ; [.0000.0000.0000] # SHORTHAND FORMAT LETTER OVERLAP 1BCA1 ; [.0000.0000.0000] # SHORTHAND FORMAT CONTINUING OVERLAP 1BCA2 ; [.0000.0000.0000] # SHORTHAND FORMAT DOWN STEP 1BCA3 ; [.0000.0000.0000] # SHORTHAND FORMAT UP STEP 1D173 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN BEAM 1D174 ; [.0000.0000.0000] # MUSICAL SYMBOL END BEAM 1D175 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN TIE 1D176 ; [.0000.0000.0000] # MUSICAL SYMBOL END TIE 1D177 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN SLUR 1D178 ; [.0000.0000.0000] # MUSICAL SYMBOL END SLUR 1D179 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN PHRASE 1D17A ; [.0000.0000.0000] # MUSICAL SYMBOL END PHRASE E0001 ; [.0000.0000.0000] # LANGUAGE TAG E0020 ; [.0000.0000.0000] # TAG SPACE E0021 ; [.0000.0000.0000] # TAG EXCLAMATION MARK E0022 ; [.0000.0000.0000] # TAG QUOTATION MARK E0023 ; [.0000.0000.0000] # TAG NUMBER SIGN E0024 ; [.0000.0000.0000] # TAG DOLLAR SIGN E0025 ; [.0000.0000.0000] # TAG PERCENT SIGN E0026 ; [.0000.0000.0000] # TAG AMPERSAND E0027 ; [.0000.0000.0000] # TAG APOSTROPHE E0028 ; [.0000.0000.0000] # TAG LEFT PARENTHESIS E0029 ; [.0000.0000.0000] # TAG RIGHT PARENTHESIS E002A ; [.0000.0000.0000] # TAG ASTERISK E002B ; [.0000.0000.0000] # TAG PLUS SIGN E002C ; [.0000.0000.0000] # TAG COMMA E002D ; [.0000.0000.0000] # TAG HYPHEN-MINUS E002E ; [.0000.0000.0000] # TAG FULL STOP E002F ; [.0000.0000.0000] # TAG SOLIDUS E0030 ; [.0000.0000.0000] # TAG DIGIT ZERO E0031 ; [.0000.0000.0000] # TAG DIGIT ONE E0032 ; [.0000.0000.0000] # TAG DIGIT TWO E0033 ; [.0000.0000.0000] # TAG DIGIT THREE E0034 ; [.0000.0000.0000] # TAG DIGIT FOUR E0035 ; [.0000.0000.0000] # TAG DIGIT FIVE E0036 ; [.0000.0000.0000] # TAG DIGIT SIX E0037 ; [.0000.0000.0000] # TAG DIGIT SEVEN E0038 ; [.0000.0000.0000] # TAG DIGIT EIGHT E0039 ; [.0000.0000.0000] # TAG DIGIT NINE E003A ; [.0000.0000.0000] # TAG COLON E003B ; [.0000.0000.0000] # TAG SEMICOLON E003C ; [.0000.0000.0000] # TAG LESS-THAN SIGN E003D ; [.0000.0000.0000] # TAG EQUALS SIGN E003E ; [.0000.0000.0000] # TAG GREATER-THAN SIGN E003F ; [.0000.0000.0000] # TAG QUESTION MARK E0040 ; [.0000.0000.0000] # TAG COMMERCIAL AT E0041 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER A E0042 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER B E0043 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER C E0044 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER D E0045 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER E E0046 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER F E0047 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER G E0048 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER H E0049 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER I E004A ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER J E004B ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER K E004C ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER L E004D ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER M E004E ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER N E004F ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER O E0050 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER P E0051 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Q E0052 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER R E0053 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER S E0054 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER T E0055 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER U E0056 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER V E0057 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER W E0058 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER X E0059 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Y E005A ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Z E005B ; [.0000.0000.0000] # TAG LEFT SQUARE BRACKET E005C ; [.0000.0000.0000] # TAG REVERSE SOLIDUS E005D ; [.0000.0000.0000] # TAG RIGHT SQUARE BRACKET E005E ; [.0000.0000.0000] # TAG CIRCUMFLEX ACCENT E005F ; [.0000.0000.0000] # TAG LOW LINE E0060 ; [.0000.0000.0000] # TAG GRAVE ACCENT E0061 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER A E0062 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER B E0063 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER C E0064 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER D E0065 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER E E0066 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER F E0067 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER G E0068 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER H E0069 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER I E006A ; [.0000.0000.0000] # TAG LATIN SMALL LETTER J E006B ; [.0000.0000.0000] # TAG LATIN SMALL LETTER K E006C ; [.0000.0000.0000] # TAG LATIN SMALL LETTER L E006D ; [.0000.0000.0000] # TAG LATIN SMALL LETTER M E006E ; [.0000.0000.0000] # TAG LATIN SMALL LETTER N E006F ; [.0000.0000.0000] # TAG LATIN SMALL LETTER O E0070 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER P E0071 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Q E0072 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER R E0073 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER S E0074 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER T E0075 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER U E0076 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER V E0077 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER W E0078 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER X E0079 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Y E007A ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Z E007B ; [.0000.0000.0000] # TAG LEFT CURLY BRACKET E007C ; [.0000.0000.0000] # TAG VERTICAL LINE E007D ; [.0000.0000.0000] # TAG RIGHT CURLY BRACKET E007E ; [.0000.0000.0000] # TAG TILDE E007F ; [.0000.0000.0000] # CANCEL TAG E0100 ; [.0000.0000.0000] # VARIATION SELECTOR-17 E0101 ; [.0000.0000.0000] # VARIATION SELECTOR-18 E0102 ; [.0000.0000.0000] # VARIATION SELECTOR-19 E0103 ; [.0000.0000.0000] # VARIATION SELECTOR-20 E0104 ; [.0000.0000.0000] # VARIATION SELECTOR-21 E0105 ; [.0000.0000.0000] # VARIATION SELECTOR-22 E0106 ; [.0000.0000.0000] # VARIATION SELECTOR-23 E0107 ; [.0000.0000.0000] # VARIATION SELECTOR-24 E0108 ; [.0000.0000.0000] # VARIATION SELECTOR-25 E0109 ; [.0000.0000.0000] # VARIATION SELECTOR-26 E010A ; [.0000.0000.0000] # VARIATION SELECTOR-27 E010B ; [.0000.0000.0000] # VARIATION SELECTOR-28 E010C ; [.0000.0000.0000] # VARIATION SELECTOR-29 E010D ; [.0000.0000.0000] # VARIATION SELECTOR-30 E010E ; [.0000.0000.0000] # VARIATION SELECTOR-31 E010F ; [.0000.0000.0000] # VARIATION SELECTOR-32 E0110 ; [.0000.0000.0000] # VARIATION SELECTOR-33 E0111 ; [.0000.0000.0000] # VARIATION SELECTOR-34 E0112 ; [.0000.0000.0000] # VARIATION SELECTOR-35 E0113 ; [.0000.0000.0000] # VARIATION SELECTOR-36 E0114 ; [.0000.0000.0000] # VARIATION SELECTOR-37 E0115 ; [.0000.0000.0000] # VARIATION SELECTOR-38 E0116 ; [.0000.0000.0000] # VARIATION SELECTOR-39 E0117 ; [.0000.0000.0000] # VARIATION SELECTOR-40 E0118 ; [.0000.0000.0000] # VARIATION SELECTOR-41 E0119 ; [.0000.0000.0000] # VARIATION SELECTOR-42 E011A ; [.0000.0000.0000] # VARIATION SELECTOR-43 E011B ; [.0000.0000.0000] # VARIATION SELECTOR-44 E011C ; [.0000.0000.0000] # VARIATION SELECTOR-45 E011D ; [.0000.0000.0000] # VARIATION SELECTOR-46 E011E ; [.0000.0000.0000] # VARIATION SELECTOR-47 E011F ; [.0000.0000.0000] # VARIATION SELECTOR-48 E0120 ; [.0000.0000.0000] # VARIATION SELECTOR-49 E0121 ; [.0000.0000.0000] # VARIATION SELECTOR-50 E0122 ; [.0000.0000.0000] # VARIATION SELECTOR-51 E0123 ; [.0000.0000.0000] # VARIATION SELECTOR-52 E0124 ; [.0000.0000.0000] # VARIATION SELECTOR-53 E0125 ; [.0000.0000.0000] # VARIATION SELECTOR-54 E0126 ; [.0000.0000.0000] # VARIATION SELECTOR-55 E0127 ; [.0000.0000.0000] # VARIATION SELECTOR-56 E0128 ; [.0000.0000.0000] # VARIATION SELECTOR-57 E0129 ; [.0000.0000.0000] # VARIATION SELECTOR-58 E012A ; [.0000.0000.0000] # VARIATION SELECTOR-59 E012B ; [.0000.0000.0000] # VARIATION SELECTOR-60 E012C ; [.0000.0000.0000] # VARIATION SELECTOR-61 E012D ; [.0000.0000.0000] # VARIATION SELECTOR-62 E012E ; [.0000.0000.0000] # VARIATION SELECTOR-63 E012F ; [.0000.0000.0000] # VARIATION SELECTOR-64 E0130 ; [.0000.0000.0000] # VARIATION SELECTOR-65 E0131 ; [.0000.0000.0000] # VARIATION SELECTOR-66 E0132 ; [.0000.0000.0000] # VARIATION SELECTOR-67 E0133 ; [.0000.0000.0000] # VARIATION SELECTOR-68 E0134 ; [.0000.0000.0000] # VARIATION SELECTOR-69 E0135 ; [.0000.0000.0000] # VARIATION SELECTOR-70 E0136 ; [.0000.0000.0000] # VARIATION SELECTOR-71 E0137 ; [.0000.0000.0000] # VARIATION SELECTOR-72 E0138 ; [.0000.0000.0000] # VARIATION SELECTOR-73 E0139 ; [.0000.0000.0000] # VARIATION SELECTOR-74 E013A ; [.0000.0000.0000] # VARIATION SELECTOR-75 E013B ; [.0000.0000.0000] # VARIATION SELECTOR-76 E013C ; [.0000.0000.0000] # VARIATION SELECTOR-77 E013D ; [.0000.0000.0000] # VARIATION SELECTOR-78 E013E ; [.0000.0000.0000] # VARIATION SELECTOR-79 E013F ; [.0000.0000.0000] # VARIATION SELECTOR-80 E0140 ; [.0000.0000.0000] # VARIATION SELECTOR-81 E0141 ; [.0000.0000.0000] # VARIATION SELECTOR-82 E0142 ; [.0000.0000.0000] # VARIATION SELECTOR-83 E0143 ; [.0000.0000.0000] # VARIATION SELECTOR-84 E0144 ; [.0000.0000.0000] # VARIATION SELECTOR-85 E0145 ; [.0000.0000.0000] # VARIATION SELECTOR-86 E0146 ; [.0000.0000.0000] # VARIATION SELECTOR-87 E0147 ; [.0000.0000.0000] # VARIATION SELECTOR-88 E0148 ; [.0000.0000.0000] # VARIATION SELECTOR-89 E0149 ; [.0000.0000.0000] # VARIATION SELECTOR-90 E014A ; [.0000.0000.0000] # VARIATION SELECTOR-91 E014B ; [.0000.0000.0000] # VARIATION SELECTOR-92 E014C ; [.0000.0000.0000] # VARIATION SELECTOR-93 E014D ; [.0000.0000.0000] # VARIATION SELECTOR-94 E014E ; [.0000.0000.0000] # VARIATION SELECTOR-95 E014F ; [.0000.0000.0000] # VARIATION SELECTOR-96 E0150 ; [.0000.0000.0000] # VARIATION SELECTOR-97 E0151 ; [.0000.0000.0000] # VARIATION SELECTOR-98 E0152 ; [.0000.0000.0000] # VARIATION SELECTOR-99 E0153 ; [.0000.0000.0000] # VARIATION SELECTOR-100 E0154 ; [.0000.0000.0000] # VARIATION SELECTOR-101 E0155 ; [.0000.0000.0000] # VARIATION SELECTOR-102 E0156 ; [.0000.0000.0000] # VARIATION SELECTOR-103 E0157 ; [.0000.0000.0000] # VARIATION SELECTOR-104 E0158 ; [.0000.0000.0000] # VARIATION SELECTOR-105 E0159 ; [.0000.0000.0000] # VARIATION SELECTOR-106 E015A ; [.0000.0000.0000] # VARIATION SELECTOR-107 E015B ; [.0000.0000.0000] # VARIATION SELECTOR-108 E015C ; [.0000.0000.0000] # VARIATION SELECTOR-109 E015D ; [.0000.0000.0000] # VARIATION SELECTOR-110 E015E ; [.0000.0000.0000] # VARIATION SELECTOR-111 E015F ; [.0000.0000.0000] # VARIATION SELECTOR-112 E0160 ; [.0000.0000.0000] # VARIATION SELECTOR-113 E0161 ; [.0000.0000.0000] # VARIATION SELECTOR-114 E0162 ; [.0000.0000.0000] # VARIATION SELECTOR-115 E0163 ; [.0000.0000.0000] # VARIATION SELECTOR-116 E0164 ; [.0000.0000.0000] # VARIATION SELECTOR-117 E0165 ; [.0000.0000.0000] # VARIATION SELECTOR-118 E0166 ; [.0000.0000.0000] # VARIATION SELECTOR-119 E0167 ; [.0000.0000.0000] # VARIATION SELECTOR-120 E0168 ; [.0000.0000.0000] # VARIATION SELECTOR-121 E0169 ; [.0000.0000.0000] # VARIATION SELECTOR-122 E016A ; [.0000.0000.0000] # VARIATION SELECTOR-123 E016B ; [.0000.0000.0000] # VARIATION SELECTOR-124 E016C ; [.0000.0000.0000] # VARIATION SELECTOR-125 E016D ; [.0000.0000.0000] # VARIATION SELECTOR-126 E016E ; [.0000.0000.0000] # VARIATION SELECTOR-127 E016F ; [.0000.0000.0000] # VARIATION SELECTOR-128 E0170 ; [.0000.0000.0000] # VARIATION SELECTOR-129 E0171 ; [.0000.0000.0000] # VARIATION SELECTOR-130 E0172 ; [.0000.0000.0000] # VARIATION SELECTOR-131 E0173 ; [.0000.0000.0000] # VARIATION SELECTOR-132 E0174 ; [.0000.0000.0000] # VARIATION SELECTOR-133 E0175 ; [.0000.0000.0000] # VARIATION SELECTOR-134 E0176 ; [.0000.0000.0000] # VARIATION SELECTOR-135 E0177 ; [.0000.0000.0000] # VARIATION SELECTOR-136 E0178 ; [.0000.0000.0000] # VARIATION SELECTOR-137 E0179 ; [.0000.0000.0000] # VARIATION SELECTOR-138 E017A ; [.0000.0000.0000] # VARIATION SELECTOR-139 E017B ; [.0000.0000.0000] # VARIATION SELECTOR-140 E017C ; [.0000.0000.0000] # VARIATION SELECTOR-141 E017D ; [.0000.0000.0000] # VARIATION SELECTOR-142 E017E ; [.0000.0000.0000] # VARIATION SELECTOR-143 E017F ; [.0000.0000.0000] # VARIATION SELECTOR-144 E0180 ; [.0000.0000.0000] # VARIATION SELECTOR-145 E0181 ; [.0000.0000.0000] # VARIATION SELECTOR-146 E0182 ; [.0000.0000.0000] # VARIATION SELECTOR-147 E0183 ; [.0000.0000.0000] # VARIATION SELECTOR-148 E0184 ; [.0000.0000.0000] # VARIATION SELECTOR-149 E0185 ; [.0000.0000.0000] # VARIATION SELECTOR-150 E0186 ; [.0000.0000.0000] # VARIATION SELECTOR-151 E0187 ; [.0000.0000.0000] # VARIATION SELECTOR-152 E0188 ; [.0000.0000.0000] # VARIATION SELECTOR-153 E0189 ; [.0000.0000.0000] # VARIATION SELECTOR-154 E018A ; [.0000.0000.0000] # VARIATION SELECTOR-155 E018B ; [.0000.0000.0000] # VARIATION SELECTOR-156 E018C ; [.0000.0000.0000] # VARIATION SELECTOR-157 E018D ; [.0000.0000.0000] # VARIATION SELECTOR-158 E018E ; [.0000.0000.0000] # VARIATION SELECTOR-159 E018F ; [.0000.0000.0000] # VARIATION SELECTOR-160 E0190 ; [.0000.0000.0000] # VARIATION SELECTOR-161 E0191 ; [.0000.0000.0000] # VARIATION SELECTOR-162 E0192 ; [.0000.0000.0000] # VARIATION SELECTOR-163 E0193 ; [.0000.0000.0000] # VARIATION SELECTOR-164 E0194 ; [.0000.0000.0000] # VARIATION SELECTOR-165 E0195 ; [.0000.0000.0000] # VARIATION SELECTOR-166 E0196 ; [.0000.0000.0000] # VARIATION SELECTOR-167 E0197 ; [.0000.0000.0000] # VARIATION SELECTOR-168 E0198 ; [.0000.0000.0000] # VARIATION SELECTOR-169 E0199 ; [.0000.0000.0000] # VARIATION SELECTOR-170 E019A ; [.0000.0000.0000] # VARIATION SELECTOR-171 E019B ; [.0000.0000.0000] # VARIATION SELECTOR-172 E019C ; [.0000.0000.0000] # VARIATION SELECTOR-173 E019D ; [.0000.0000.0000] # VARIATION SELECTOR-174 E019E ; [.0000.0000.0000] # VARIATION SELECTOR-175 E019F ; [.0000.0000.0000] # VARIATION SELECTOR-176 E01A0 ; [.0000.0000.0000] # VARIATION SELECTOR-177 E01A1 ; [.0000.0000.0000] # VARIATION SELECTOR-178 E01A2 ; [.0000.0000.0000] # VARIATION SELECTOR-179 E01A3 ; [.0000.0000.0000] # VARIATION SELECTOR-180 E01A4 ; [.0000.0000.0000] # VARIATION SELECTOR-181 E01A5 ; [.0000.0000.0000] # VARIATION SELECTOR-182 E01A6 ; [.0000.0000.0000] # VARIATION SELECTOR-183 E01A7 ; [.0000.0000.0000] # VARIATION SELECTOR-184 E01A8 ; [.0000.0000.0000] # VARIATION SELECTOR-185 E01A9 ; [.0000.0000.0000] # VARIATION SELECTOR-186 E01AA ; [.0000.0000.0000] # VARIATION SELECTOR-187 E01AB ; [.0000.0000.0000] # VARIATION SELECTOR-188 E01AC ; [.0000.0000.0000] # VARIATION SELECTOR-189 E01AD ; [.0000.0000.0000] # VARIATION SELECTOR-190 E01AE ; [.0000.0000.0000] # VARIATION SELECTOR-191 E01AF ; [.0000.0000.0000] # VARIATION SELECTOR-192 E01B0 ; [.0000.0000.0000] # VARIATION SELECTOR-193 E01B1 ; [.0000.0000.0000] # VARIATION SELECTOR-194 E01B2 ; [.0000.0000.0000] # VARIATION SELECTOR-195 E01B3 ; [.0000.0000.0000] # VARIATION SELECTOR-196 E01B4 ; [.0000.0000.0000] # VARIATION SELECTOR-197 E01B5 ; [.0000.0000.0000] # VARIATION SELECTOR-198 E01B6 ; [.0000.0000.0000] # VARIATION SELECTOR-199 E01B7 ; [.0000.0000.0000] # VARIATION SELECTOR-200 E01B8 ; [.0000.0000.0000] # VARIATION SELECTOR-201 E01B9 ; [.0000.0000.0000] # VARIATION SELECTOR-202 E01BA ; [.0000.0000.0000] # VARIATION SELECTOR-203 E01BB ; [.0000.0000.0000] # VARIATION SELECTOR-204 E01BC ; [.0000.0000.0000] # VARIATION SELECTOR-205 E01BD ; [.0000.0000.0000] # VARIATION SELECTOR-206 E01BE ; [.0000.0000.0000] # VARIATION SELECTOR-207 E01BF ; [.0000.0000.0000] # VARIATION SELECTOR-208 E01C0 ; [.0000.0000.0000] # VARIATION SELECTOR-209 E01C1 ; [.0000.0000.0000] # VARIATION SELECTOR-210 E01C2 ; [.0000.0000.0000] # VARIATION SELECTOR-211 E01C3 ; [.0000.0000.0000] # VARIATION SELECTOR-212 E01C4 ; [.0000.0000.0000] # VARIATION SELECTOR-213 E01C5 ; [.0000.0000.0000] # VARIATION SELECTOR-214 E01C6 ; [.0000.0000.0000] # VARIATION SELECTOR-215 E01C7 ; [.0000.0000.0000] # VARIATION SELECTOR-216 E01C8 ; [.0000.0000.0000] # VARIATION SELECTOR-217 E01C9 ; [.0000.0000.0000] # VARIATION SELECTOR-218 E01CA ; [.0000.0000.0000] # VARIATION SELECTOR-219 E01CB ; [.0000.0000.0000] # VARIATION SELECTOR-220 E01CC ; [.0000.0000.0000] # VARIATION SELECTOR-221 E01CD ; [.0000.0000.0000] # VARIATION SELECTOR-222 E01CE ; [.0000.0000.0000] # VARIATION SELECTOR-223 E01CF ; [.0000.0000.0000] # VARIATION SELECTOR-224 E01D0 ; [.0000.0000.0000] # VARIATION SELECTOR-225 E01D1 ; [.0000.0000.0000] # VARIATION SELECTOR-226 E01D2 ; [.0000.0000.0000] # VARIATION SELECTOR-227 E01D3 ; [.0000.0000.0000] # VARIATION SELECTOR-228 E01D4 ; [.0000.0000.0000] # VARIATION SELECTOR-229 E01D5 ; [.0000.0000.0000] # VARIATION SELECTOR-230 E01D6 ; [.0000.0000.0000] # VARIATION SELECTOR-231 E01D7 ; [.0000.0000.0000] # VARIATION SELECTOR-232 E01D8 ; [.0000.0000.0000] # VARIATION SELECTOR-233 E01D9 ; [.0000.0000.0000] # VARIATION SELECTOR-234 E01DA ; [.0000.0000.0000] # VARIATION SELECTOR-235 E01DB ; [.0000.0000.0000] # VARIATION SELECTOR-236 E01DC ; [.0000.0000.0000] # VARIATION SELECTOR-237 E01DD ; [.0000.0000.0000] # VARIATION SELECTOR-238 E01DE ; [.0000.0000.0000] # VARIATION SELECTOR-239 E01DF ; [.0000.0000.0000] # VARIATION SELECTOR-240 E01E0 ; [.0000.0000.0000] # VARIATION SELECTOR-241 E01E1 ; [.0000.0000.0000] # VARIATION SELECTOR-242 E01E2 ; [.0000.0000.0000] # VARIATION SELECTOR-243 E01E3 ; [.0000.0000.0000] # VARIATION SELECTOR-244 E01E4 ; [.0000.0000.0000] # VARIATION SELECTOR-245 E01E5 ; [.0000.0000.0000] # VARIATION SELECTOR-246 E01E6 ; [.0000.0000.0000] # VARIATION SELECTOR-247 E01E7 ; [.0000.0000.0000] # VARIATION SELECTOR-248 E01E8 ; [.0000.0000.0000] # VARIATION SELECTOR-249 E01E9 ; [.0000.0000.0000] # VARIATION SELECTOR-250 E01EA ; [.0000.0000.0000] # VARIATION SELECTOR-251 E01EB ; [.0000.0000.0000] # VARIATION SELECTOR-252 E01EC ; [.0000.0000.0000] # VARIATION SELECTOR-253 E01ED ; [.0000.0000.0000] # VARIATION SELECTOR-254 E01EE ; [.0000.0000.0000] # VARIATION SELECTOR-255 E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 0009 ; [*0201.0020.0002] # HORIZONTAL TABULATION (in ISO 6429) 000A ; [*0202.0020.0002] # LINE FEED (in ISO 6429) 000B ; [*0203.0020.0002] # VERTICAL TABULATION (in ISO 6429) 000C ; [*0204.0020.0002] # FORM FEED (in ISO 6429) 000D ; [*0205.0020.0002] # CARRIAGE RETURN (in ISO 6429) 0020 ; [*0209.0020.0002] # SPACE 0021 ; [*0260.0020.0002] # EXCLAMATION MARK 0022 ; [*030C.0020.0002] # QUOTATION MARK 0023 ; [*0398.0020.0002] # NUMBER SIGN 0025 ; [*0399.0020.0002] # PERCENT SIGN 0026 ; [*0396.0020.0002] # AMPERSAND 0027 ; [*0305.0020.0002] # APOSTROPHE 0028 ; [*0317.0020.0002] # LEFT PARENTHESIS 0029 ; [*0318.0020.0002] # RIGHT PARENTHESIS 002A ; [*038F.0020.0002] # ASTERISK 002B ; [*0616.0020.0002] # PLUS SIGN 002C ; [*0222.0020.0002] # COMMA 002D ; [*020D.0020.0002] # HYPHEN-MINUS 002E ; [*0277.0020.0002] # FULL STOP 002F ; [*0394.0020.0002] # SOLIDUS 003A ; [*0239.0020.0002] # COLON 003B ; [*0234.0020.0002] # SEMICOLON 003C ; [*061A.0020.0002] # LESS-THAN SIGN 003D ; [*061B.0020.0002] # EQUALS SIGN 003E ; [*061C.0020.0002] # GREATER-THAN SIGN 003F ; [*0266.0020.0002] # QUESTION MARK 0040 ; [*038E.0020.0002] # COMMERCIAL AT 005B ; [*0319.0020.0002] # LEFT SQUARE BRACKET 005C ; [*0395.0020.0002] # REVERSE SOLIDUS 005D ; [*031A.0020.0002] # RIGHT SQUARE BRACKET 005E ; [*0485.0020.0002] # CIRCUMFLEX ACCENT 005F ; [*020B.0020.0002] # LOW LINE 0060 ; [*0482.0020.0002] # GRAVE ACCENT 007B ; [*031B.0020.0002] # LEFT CURLY BRACKET 007C ; [*061E.0020.0002] # VERTICAL LINE 007D ; [*031C.0020.0002] # RIGHT CURLY BRACKET 007E ; [*0620.0020.0002] # TILDE 0085 ; [*0206.0020.0002] # NEXT LINE (in ISO 6429) 00A0 ; [*0209.0020.001B] # NO-BREAK SPACE 00A1 ; [*0261.0020.0002] # INVERTED EXCLAMATION MARK 00A6 ; [*061F.0020.0002] # BROKEN BAR 00A7 ; [*0389.0020.0002] # SECTION SIGN 00A8 ; [*0489.0020.0002] # DIAERESIS 00A9 ; [*0584.0020.0002] # COPYRIGHT SIGN 00AB ; [*0315.0020.0002] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 00AC ; [*061D.0020.0002] # NOT SIGN 00AE ; [*0585.0020.0002] # REGISTERED SIGN 00AF ; [*0486.0020.0002] # MACRON 00B0 ; [*04F6.0020.0002] # DEGREE SIGN 00B1 ; [*0617.0020.0002] # PLUS-MINUS SIGN 00B4 ; [*0483.0020.0002] # ACUTE ACCENT 00B6 ; [*038B.0020.0002] # PILCROW SIGN 00B7 ; [*028B.0020.0002] # MIDDLE DOT 00B8 ; [*048C.0020.0002] # CEDILLA 00BB ; [*0316.0020.0002] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 00BF ; [*0267.0020.0002] # INVERTED QUESTION MARK 00D7 ; [*0619.0020.0002] # MULTIPLICATION SIGN 00F7 ; [*0618.0020.0002] # DIVISION SIGN 02B9 ; [*0493.0020.0002] # MODIFIER LETTER PRIME 02BA ; [*0495.0020.0002] # MODIFIER LETTER DOUBLE PRIME 02C2 ; [*0496.0020.0002] # MODIFIER LETTER LEFT ARROWHEAD 02C3 ; [*0497.0020.0002] # MODIFIER LETTER RIGHT ARROWHEAD 02C4 ; [*0498.0020.0002] # MODIFIER LETTER UP ARROWHEAD 02C5 ; [*0499.0020.0002] # MODIFIER LETTER DOWN ARROWHEAD 02C6 ; [*049A.0020.0002] # MODIFIER LETTER CIRCUMFLEX ACCENT 02C7 ; [*049B.0020.0002] # CARON 02C8 ; [*049C.0020.0002] # MODIFIER LETTER VERTICAL LINE 02C9 ; [*049D.0020.0002] # MODIFIER LETTER MACRON 02CA ; [*049E.0020.0002] # MODIFIER LETTER ACUTE ACCENT 02CB ; [*049F.0020.0002] # MODIFIER LETTER GRAVE ACCENT 02CC ; [*04A0.0020.0002] # MODIFIER LETTER LOW VERTICAL LINE 02CD ; [*04A1.0020.0002] # MODIFIER LETTER LOW MACRON 02CE ; [*04A2.0020.0002] # MODIFIER LETTER LOW GRAVE ACCENT 02CF ; [*04A3.0020.0002] # MODIFIER LETTER LOW ACUTE ACCENT 02D2 ; [*04A4.0020.0002] # MODIFIER LETTER CENTRED RIGHT HALF RING 02D3 ; [*04A5.0020.0002] # MODIFIER LETTER CENTRED LEFT HALF RING 02D4 ; [*04A6.0020.0002] # MODIFIER LETTER UP TACK 02D5 ; [*04A7.0020.0002] # MODIFIER LETTER DOWN TACK 02D6 ; [*04A8.0020.0002] # MODIFIER LETTER PLUS SIGN 02D7 ; [*04A9.0020.0002] # MODIFIER LETTER MINUS SIGN 02D8 ; [*0487.0020.0002] # BREVE 02D9 ; [*0488.0020.0002] # DOT ABOVE 02DA ; [*048A.0020.0002] # RING ABOVE 02DB ; [*048D.0020.0002] # OGONEK 02DC ; [*0484.0020.0002] # SMALL TILDE 02DD ; [*048B.0020.0002] # DOUBLE ACUTE ACCENT 02DE ; [*04AA.0020.0002] # MODIFIER LETTER RHOTIC HOOK 02DF ; [*04AB.0020.0002] # MODIFIER LETTER CROSS ACCENT 02E5 ; [*04AC.0020.0002] # MODIFIER LETTER EXTRA-HIGH TONE BAR 02E6 ; [*04AD.0020.0002] # MODIFIER LETTER HIGH TONE BAR 02E7 ; [*04AE.0020.0002] # MODIFIER LETTER MID TONE BAR 02E8 ; [*04AF.0020.0002] # MODIFIER LETTER LOW TONE BAR 02E9 ; [*04B0.0020.0002] # MODIFIER LETTER EXTRA-LOW TONE BAR 02EA ; [*04B1.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK 02EB ; [*04B2.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK 02EC ; [*04B3.0020.0002] # MODIFIER LETTER VOICING 02ED ; [*04B4.0020.0002] # MODIFIER LETTER UNASPIRATED 02EF ; [*04B5.0020.0002] # MODIFIER LETTER LOW DOWN ARROWHEAD 02F0 ; [*04B6.0020.0002] # MODIFIER LETTER LOW UP ARROWHEAD 02F1 ; [*04B7.0020.0002] # MODIFIER LETTER LOW LEFT ARROWHEAD 02F2 ; [*04B8.0020.0002] # MODIFIER LETTER LOW RIGHT ARROWHEAD 02F3 ; [*04B9.0020.0002] # MODIFIER LETTER LOW RING 02F4 ; [*04BA.0020.0002] # MODIFIER LETTER MIDDLE GRAVE ACCENT 02F5 ; [*04BB.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT 02F6 ; [*04BC.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT 02F7 ; [*04BD.0020.0002] # MODIFIER LETTER LOW TILDE 02F8 ; [*04BE.0020.0002] # MODIFIER LETTER RAISED COLON 02F9 ; [*04BF.0020.0002] # MODIFIER LETTER BEGIN HIGH TONE 02FA ; [*04C0.0020.0002] # MODIFIER LETTER END HIGH TONE 02FB ; [*04C1.0020.0002] # MODIFIER LETTER BEGIN LOW TONE 02FC ; [*04C2.0020.0002] # MODIFIER LETTER END LOW TONE 02FD ; [*04C3.0020.0002] # MODIFIER LETTER SHELF 02FE ; [*04C4.0020.0002] # MODIFIER LETTER OPEN SHELF 02FF ; [*04C5.0020.0002] # MODIFIER LETTER LOW LEFT ARROW 034F ; [.0000.0000.0000] # COMBINING GRAPHEME JOINER 0374 ; [*0493.0020.0002] # GREEK NUMERAL SIGN 0375 ; [*0494.0020.0002] # GREEK LOWER NUMERAL SIGN 037E ; [*0234.0020.0002] # GREEK QUESTION MARK 0384 ; [*0483.0020.0002] # GREEK TONOS 0385 ; [*0489.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA TONOS 0387 ; [*028B.0020.0002] # GREEK ANO TELEIA 03F6 ; [*0611.0020.0002] # GREEK REVERSED LUNATE EPSILON SYMBOL 0482 ; [*04F7.0020.0002] # CYRILLIC THOUSANDS SIGN 0488 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED THOUSANDS SIGN 0489 ; [.0000.0000.0000] # COMBINING CYRILLIC MILLIONS SIGN 055A ; [*03CB.0020.0002] # ARMENIAN APOSTROPHE 055B ; [*03CC.0020.0002] # ARMENIAN EMPHASIS MARK 055C ; [*0262.0020.0002] # ARMENIAN EXCLAMATION MARK 055D ; [*0226.0020.0002] # ARMENIAN COMMA 055E ; [*0269.0020.0002] # ARMENIAN QUESTION MARK 055F ; [*03CD.0020.0002] # ARMENIAN ABBREVIATION MARK 0589 ; [*023A.0020.0002] # ARMENIAN FULL STOP 058A ; [*020E.0020.0002] # ARMENIAN HYPHEN 058D ; [*04F8.0020.0002] # RIGHT-FACING ARMENIAN ETERNITY SIGN 058E ; [*04F9.0020.0002] # LEFT-FACING ARMENIAN ETERNITY SIGN 0591 ; [.0000.0000.0000] # HEBREW ACCENT ETNAHTA 0592 ; [.0000.0000.0000] # HEBREW ACCENT SEGOL 0593 ; [.0000.0000.0000] # HEBREW ACCENT SHALSHELET 0594 ; [.0000.0000.0000] # HEBREW ACCENT ZAQEF QATAN 0595 ; [.0000.0000.0000] # HEBREW ACCENT ZAQEF GADOL 0596 ; [.0000.0000.0000] # HEBREW ACCENT TIPEHA 0597 ; [.0000.0000.0000] # HEBREW ACCENT REVIA 0598 ; [.0000.0000.0000] # HEBREW ACCENT ZARQA 0599 ; [.0000.0000.0000] # HEBREW ACCENT PASHTA 059A ; [.0000.0000.0000] # HEBREW ACCENT YETIV 059B ; [.0000.0000.0000] # HEBREW ACCENT TEVIR 059C ; [.0000.0000.0000] # HEBREW ACCENT GERESH 059D ; [.0000.0000.0000] # HEBREW ACCENT GERESH MUQDAM 059E ; [.0000.0000.0000] # HEBREW ACCENT GERSHAYIM 059F ; [.0000.0000.0000] # HEBREW ACCENT QARNEY PARA 05A0 ; [.0000.0000.0000] # HEBREW ACCENT TELISHA GEDOLA 05A1 ; [.0000.0000.0000] # HEBREW ACCENT PAZER 05A2 ; [.0000.0000.0000] # HEBREW ACCENT ATNAH HAFUKH 05A3 ; [.0000.0000.0000] # HEBREW ACCENT MUNAH 05A4 ; [.0000.0000.0000] # HEBREW ACCENT MAHAPAKH 05A5 ; [.0000.0000.0000] # HEBREW ACCENT MERKHA 05A6 ; [.0000.0000.0000] # HEBREW ACCENT MERKHA KEFULA 05A7 ; [.0000.0000.0000] # HEBREW ACCENT DARGA 05A8 ; [.0000.0000.0000] # HEBREW ACCENT QADMA 05A9 ; [.0000.0000.0000] # HEBREW ACCENT TELISHA QETANA 05AA ; [.0000.0000.0000] # HEBREW ACCENT YERAH BEN YOMO 05AB ; [.0000.0000.0000] # HEBREW ACCENT OLE 05AC ; [.0000.0000.0000] # HEBREW ACCENT ILUY 05AD ; [.0000.0000.0000] # HEBREW ACCENT DEHI 05AE ; [.0000.0000.0000] # HEBREW ACCENT ZINOR 05AF ; [.0000.0000.0000] # HEBREW MARK MASORA CIRCLE 05BD ; [.0000.0000.0000] # HEBREW POINT METEG 05BE ; [*03CE.0020.0002] # HEBREW PUNCTUATION MAQAF 05C0 ; [*03CF.0020.0002] # HEBREW PUNCTUATION PASEQ 05C3 ; [*03D0.0020.0002] # HEBREW PUNCTUATION SOF PASUQ 05C4 ; [.0000.0000.0000] # HEBREW MARK UPPER DOT 05C5 ; [.0000.0000.0000] # HEBREW MARK LOWER DOT 05C6 ; [*03D1.0020.0002] # HEBREW PUNCTUATION NUN HAFUKHA 05F3 ; [*03D2.0020.0002] # HEBREW PUNCTUATION GERESH 05F4 ; [*03D3.0020.0002] # HEBREW PUNCTUATION GERSHAYIM 0600 ; [.0000.0000.0000] # ARABIC NUMBER SIGN 0601 ; [.0000.0000.0000] # ARABIC SIGN SANAH 0602 ; [.0000.0000.0000] # ARABIC FOOTNOTE MARKER 0603 ; [.0000.0000.0000] # ARABIC SIGN SAFHA 0604 ; [.0000.0000.0000] # ARABIC SIGN SAMVAT 0605 ; [.0000.0000.0000] # ARABIC NUMBER MARK ABOVE 0606 ; [*062D.0020.0002] # ARABIC-INDIC CUBE ROOT 0607 ; [*062F.0020.0002] # ARABIC-INDIC FOURTH ROOT 0608 ; [*04FA.0020.0002] # ARABIC RAY 0609 ; [*039C.0020.0002] # ARABIC-INDIC PER MILLE SIGN 060A ; [*039E.0020.0002] # ARABIC-INDIC PER TEN THOUSAND SIGN 060C ; [*0227.0020.0002] # ARABIC COMMA 060D ; [*0228.0020.0002] # ARABIC DATE SEPARATOR 060E ; [*04FD.0020.0002] # ARABIC POETIC VERSE SIGN 060F ; [*04FE.0020.0002] # ARABIC SIGN MISRA 0610 ; [.0000.0000.0000] # ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM 0611 ; [.0000.0000.0000] # ARABIC SIGN ALAYHE ASSALLAM 0612 ; [.0000.0000.0000] # ARABIC SIGN RAHMATULLAH ALAYHE 0613 ; [.0000.0000.0000] # ARABIC SIGN RADI ALLAHOU ANHU 0614 ; [.0000.0000.0000] # ARABIC SIGN TAKHALLUS 0615 ; [.0000.0000.0000] # ARABIC SMALL HIGH TAH 0616 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH 0617 ; [.0000.0000.0000] # ARABIC SMALL HIGH ZAIN 0618 ; [.0000.0000.0000] # ARABIC SMALL FATHA 0619 ; [.0000.0000.0000] # ARABIC SMALL DAMMA 061A ; [.0000.0000.0000] # ARABIC SMALL KASRA 061B ; [*0235.0020.0002] # ARABIC SEMICOLON 061E ; [*023B.0020.0002] # ARABIC TRIPLE DOT PUNCTUATION MARK 061F ; [*026A.0020.0002] # ARABIC QUESTION MARK 0640 ; [.0000.0000.0000] # ARABIC TATWEEL 066A ; [*039A.0020.0002] # ARABIC PERCENT SIGN 066B ; [*0229.0020.0002] # ARABIC DECIMAL SEPARATOR 066C ; [*022A.0020.0002] # ARABIC THOUSANDS SEPARATOR 066D ; [*0392.0020.0002] # ARABIC FIVE POINTED STAR 06D4 ; [*0279.0020.0002] # ARABIC FULL STOP 06D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA 06D7 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA 06D8 ; [.0000.0000.0000] # ARABIC SMALL HIGH MEEM INITIAL FORM 06D9 ; [.0000.0000.0000] # ARABIC SMALL HIGH LAM ALEF 06DA ; [.0000.0000.0000] # ARABIC SMALL HIGH JEEM 06DB ; [.0000.0000.0000] # ARABIC SMALL HIGH THREE DOTS 06DC ; [.0000.0000.0000] # ARABIC SMALL HIGH SEEN 06DD ; [.0000.0000.0000] # ARABIC END OF AYAH 06DE ; [*04FF.0020.0002] # ARABIC START OF RUB EL HIZB 06DF ; [.0000.0000.0000] # ARABIC SMALL HIGH ROUNDED ZERO 06E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO 06E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH DOTLESS HEAD OF KHAH 06E2 ; [.0000.0000.0000] # ARABIC SMALL HIGH MEEM ISOLATED FORM 06E3 ; [.0000.0000.0000] # ARABIC SMALL LOW SEEN 06E4 ; [.0000.0000.0000] # ARABIC SMALL HIGH MADDA 06E7 ; [.0000.0000.0000] # ARABIC SMALL HIGH YEH 06E8 ; [.0000.0000.0000] # ARABIC SMALL HIGH NOON 06E9 ; [*0500.0020.0002] # ARABIC PLACE OF SAJDAH 06EA ; [.0000.0000.0000] # ARABIC EMPTY CENTRE LOW STOP 06EB ; [.0000.0000.0000] # ARABIC EMPTY CENTRE HIGH STOP 06EC ; [.0000.0000.0000] # ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE 06ED ; [.0000.0000.0000] # ARABIC SMALL LOW MEEM 0700 ; [*02C4.0020.0002] # SYRIAC END OF PARAGRAPH 0701 ; [*027A.0020.0002] # SYRIAC SUPRALINEAR FULL STOP 0702 ; [*027B.0020.0002] # SYRIAC SUBLINEAR FULL STOP 0703 ; [*023C.0020.0002] # SYRIAC SUPRALINEAR COLON 0704 ; [*023D.0020.0002] # SYRIAC SUBLINEAR COLON 0705 ; [*023E.0020.0002] # SYRIAC HORIZONTAL COLON 0706 ; [*023F.0020.0002] # SYRIAC COLON SKEWED LEFT 0707 ; [*0240.0020.0002] # SYRIAC COLON SKEWED RIGHT 0708 ; [*0241.0020.0002] # SYRIAC SUPRALINEAR COLON SKEWED LEFT 0709 ; [*026B.0020.0002] # SYRIAC SUBLINEAR COLON SKEWED RIGHT 070A ; [*03D4.0020.0002] # SYRIAC CONTRACTION 070B ; [*03D5.0020.0002] # SYRIAC HARKLEAN OBELUS 070C ; [*03D6.0020.0002] # SYRIAC HARKLEAN METOBELUS 070D ; [*03D7.0020.0002] # SYRIAC HARKLEAN ASTERISCUS 0740 ; [.0000.0000.0000] # SYRIAC FEMININE DOT 0743 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS ABOVE 0744 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS BELOW 0747 ; [.0000.0000.0000] # SYRIAC OBLIQUE LINE ABOVE 0748 ; [.0000.0000.0000] # SYRIAC OBLIQUE LINE BELOW 0749 ; [.0000.0000.0000] # SYRIAC MUSIC 074A ; [.0000.0000.0000] # SYRIAC BARREKH 07F6 ; [*0512.0020.0002] # NKO SYMBOL OO DENNEN 07F7 ; [*02C5.0020.0002] # NKO SYMBOL GBAKURUNEN 07F8 ; [*022B.0020.0002] # NKO COMMA 07F9 ; [*0263.0020.0002] # NKO EXCLAMATION MARK 07FA ; [.0000.0000.0000] # NKO LAJANYALAN 0830 ; [*0242.0020.0002] # SAMARITAN PUNCTUATION NEQUDAA 0831 ; [*0243.0020.0002] # SAMARITAN PUNCTUATION AFSAAQ 0832 ; [*0244.0020.0002] # SAMARITAN PUNCTUATION ANGED 0833 ; [*0245.0020.0002] # SAMARITAN PUNCTUATION BAU 0834 ; [*0246.0020.0002] # SAMARITAN PUNCTUATION ATMAAU 0835 ; [*0247.0020.0002] # SAMARITAN PUNCTUATION SHIYYAALAA 0836 ; [*0248.0020.0002] # SAMARITAN ABBREVIATION MARK 0837 ; [*0249.0020.0002] # SAMARITAN PUNCTUATION MELODIC QITSA 0838 ; [*024A.0020.0002] # SAMARITAN PUNCTUATION ZIQAA 0839 ; [*024B.0020.0002] # SAMARITAN PUNCTUATION QITSA 083A ; [*024C.0020.0002] # SAMARITAN PUNCTUATION ZAEF 083B ; [*024D.0020.0002] # SAMARITAN PUNCTUATION TURU 083C ; [*024E.0020.0002] # SAMARITAN PUNCTUATION ARKAANU 083D ; [*024F.0020.0002] # SAMARITAN PUNCTUATION SOF MASHFAAT 083E ; [*0250.0020.0002] # SAMARITAN PUNCTUATION ANNAAU 085E ; [*03D8.0020.0002] # MANDAIC PUNCTUATION 08D4 ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AR-RUB 08D5 ; [.0000.0000.0000] # ARABIC SMALL HIGH SAD 08D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH AIN 08D7 ; [.0000.0000.0000] # ARABIC SMALL HIGH QAF 08D8 ; [.0000.0000.0000] # ARABIC SMALL HIGH NOON WITH KASRA 08D9 ; [.0000.0000.0000] # ARABIC SMALL LOW NOON WITH KASRA 08DA ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD ATH-THALATHA 08DB ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AS-SAJDA 08DC ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AN-NISF 08DD ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD SAKTA 08DE ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD QIF 08DF ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD WAQFA 08E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH FOOTNOTE MARKER 08E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH SIGN SAFHA 08EA ; [.0000.0000.0000] # ARABIC TONE ONE DOT ABOVE 08EB ; [.0000.0000.0000] # ARABIC TONE TWO DOTS ABOVE 08EC ; [.0000.0000.0000] # ARABIC TONE LOOP ABOVE 08ED ; [.0000.0000.0000] # ARABIC TONE ONE DOT BELOW 08EE ; [.0000.0000.0000] # ARABIC TONE TWO DOTS BELOW 08EF ; [.0000.0000.0000] # ARABIC TONE LOOP BELOW 08F3 ; [.0000.0000.0000] # ARABIC SMALL HIGH WAW 0951 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN UDATTA 0952 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN ANUDATTA 0964 ; [*028E.0020.0002] # DEVANAGARI DANDA 0965 ; [*028F.0020.0002] # DEVANAGARI DOUBLE DANDA 0970 ; [*03E7.0020.0002] # DEVANAGARI ABBREVIATION SIGN 09F4 ; [*1A96.0020.0002] # BENGALI CURRENCY NUMERATOR ONE 09F5 ; [*1A97.0020.0002] # BENGALI CURRENCY NUMERATOR TWO 09F6 ; [*1A98.0020.0002] # BENGALI CURRENCY NUMERATOR THREE 09F7 ; [*1A99.0020.0002] # BENGALI CURRENCY NUMERATOR FOUR 09F8 ; [*1A9A.0020.0002] # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR 09F9 ; [*1A9B.0020.0002] # BENGALI CURRENCY DENOMINATOR SIXTEEN 09FA ; [*0513.0020.0002] # BENGALI ISSHAR 0AF0 ; [*03EC.0020.0002] # GUJARATI ABBREVIATION SIGN 0B70 ; [*0514.0020.0002] # ORIYA ISSHAR 0B72 ; [*1A9C.0020.0002] # ORIYA FRACTION ONE QUARTER 0B73 ; [*1A9D.0020.0002] # ORIYA FRACTION ONE HALF 0B74 ; [*1A9E.0020.0002] # ORIYA FRACTION THREE QUARTERS 0B75 ; [*1A9F.0020.0002] # ORIYA FRACTION ONE SIXTEENTH 0B76 ; [*1AA0.0020.0002] # ORIYA FRACTION ONE EIGHTH 0B77 ; [*1AA1.0020.0002] # ORIYA FRACTION THREE SIXTEENTHS 0BF0 ; [*1AA8.0020.0002] # TAMIL NUMBER TEN 0BF1 ; [*1AA9.0020.0002] # TAMIL NUMBER ONE HUNDRED 0BF2 ; [*1AAA.0020.0002] # TAMIL NUMBER ONE THOUSAND 0BF3 ; [*0515.0020.0002] # TAMIL DAY SIGN 0BF4 ; [*0516.0020.0002] # TAMIL MONTH SIGN 0BF5 ; [*0517.0020.0002] # TAMIL YEAR SIGN 0BF6 ; [*0518.0020.0002] # TAMIL DEBIT SIGN 0BF7 ; [*0519.0020.0002] # TAMIL CREDIT SIGN 0BF8 ; [*051A.0020.0002] # TAMIL AS ABOVE SIGN 0BFA ; [*051B.0020.0002] # TAMIL NUMBER SIGN 0C7F ; [*051C.0020.0002] # TELUGU SIGN TUUMU 0D4F ; [*051D.0020.0002] # MALAYALAM SIGN PARA 0D58 ; [*1AAB.0020.0002] # MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH 0D59 ; [*1AAC.0020.0002] # MALAYALAM FRACTION ONE FORTIETH 0D5A ; [*1AAD.0020.0002] # MALAYALAM FRACTION THREE EIGHTIETHS 0D5B ; [*1AAE.0020.0002] # MALAYALAM FRACTION ONE TWENTIETH 0D5C ; [*1AAF.0020.0002] # MALAYALAM FRACTION ONE TENTH 0D5D ; [*1AB0.0020.0002] # MALAYALAM FRACTION THREE TWENTIETHS 0D5E ; [*1AB1.0020.0002] # MALAYALAM FRACTION ONE FIFTH 0D70 ; [*1AB2.0020.0002] # MALAYALAM NUMBER TEN 0D71 ; [*1AB3.0020.0002] # MALAYALAM NUMBER ONE HUNDRED 0D72 ; [*1AB4.0020.0002] # MALAYALAM NUMBER ONE THOUSAND 0D73 ; [*1AB5.0020.0002] # MALAYALAM FRACTION ONE QUARTER 0D74 ; [*1AB6.0020.0002] # MALAYALAM FRACTION ONE HALF 0D75 ; [*1AB7.0020.0002] # MALAYALAM FRACTION THREE QUARTERS 0D76 ; [*1AB8.0020.0002] # MALAYALAM FRACTION ONE SIXTEENTH 0D77 ; [*1AB9.0020.0002] # MALAYALAM FRACTION ONE EIGHTH 0D78 ; [*1ABA.0020.0002] # MALAYALAM FRACTION THREE SIXTEENTHS 0D79 ; [*051E.0020.0002] # MALAYALAM DATE MARK 0DF4 ; [*03ED.0020.0002] # SINHALA PUNCTUATION KUNDDALIYA 0E4F ; [*03EE.0020.0002] # THAI CHARACTER FONGMAN 0E5A ; [*03EF.0020.0002] # THAI CHARACTER ANGKHANKHU 0E5B ; [*03F0.0020.0002] # THAI CHARACTER KHOMUT 0F01 ; [*0526.0020.0002] # TIBETAN MARK GTER YIG MGO TRUNCATED A 0F02 ; [*0527.0020.0002] # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA 0F03 ; [*0528.0020.0002] # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA 0F04 ; [*03F3.0020.0002] # TIBETAN MARK INITIAL YIG MGO MDUN MA 0F05 ; [*03F4.0020.0002] # TIBETAN MARK CLOSING YIG MGO SGAB MA 0F06 ; [*03F5.0020.0002] # TIBETAN MARK CARET YIG MGO PHUR SHAD MA 0F07 ; [*03F6.0020.0002] # TIBETAN MARK YIG MGO TSHEG SHAD MA 0F08 ; [*03F7.0020.0002] # TIBETAN MARK SBRUL SHAD 0F09 ; [*03F8.0020.0002] # TIBETAN MARK BSKUR YIG MGO 0F0A ; [*03F9.0020.0002] # TIBETAN MARK BKA- SHOG YIG MGO 0F0B ; [*03FC.0020.0002] # TIBETAN MARK INTERSYLLABIC TSHEG 0F0C ; [*03FC.0020.001B] # TIBETAN MARK DELIMITER TSHEG BSTAR 0F0D ; [*03FD.0020.0002] # TIBETAN MARK SHAD 0F0E ; [*03FE.0020.0002] # TIBETAN MARK NYIS SHAD 0F0F ; [*03FF.0020.0002] # TIBETAN MARK TSHEG SHAD 0F10 ; [*0400.0020.0002] # TIBETAN MARK NYIS TSHEG SHAD 0F11 ; [*0401.0020.0002] # TIBETAN MARK RIN CHEN SPUNGS SHAD 0F12 ; [*0402.0020.0002] # TIBETAN MARK RGYA GRAM SHAD 0F13 ; [*0529.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN 0F14 ; [*0258.0020.0002] # TIBETAN MARK GTER TSHEG 0F15 ; [*052A.0020.0002] # TIBETAN LOGOTYPE SIGN CHAD RTAGS 0F16 ; [*052B.0020.0002] # TIBETAN LOGOTYPE SIGN LHAG RTAGS 0F17 ; [*052C.0020.0002] # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS 0F18 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN -KHYUD PA 0F19 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS 0F1A ; [*052D.0020.0002] # TIBETAN SIGN RDEL DKAR GCIG 0F1B ; [*052E.0020.0002] # TIBETAN SIGN RDEL DKAR GNYIS 0F1C ; [*052F.0020.0002] # TIBETAN SIGN RDEL DKAR GSUM 0F1D ; [*0530.0020.0002] # TIBETAN SIGN RDEL NAG GCIG 0F1E ; [*0531.0020.0002] # TIBETAN SIGN RDEL NAG GNYIS 0F1F ; [*0532.0020.0002] # TIBETAN SIGN RDEL DKAR RDEL NAG 0F34 ; [*0533.0020.0002] # TIBETAN MARK BSDUS RTAGS 0F35 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG NYI ZLA 0F36 ; [*0534.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN 0F37 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG SGOR RTAGS 0F38 ; [*0535.0020.0002] # TIBETAN MARK CHE MGO 0F3A ; [*031D.0020.0002] # TIBETAN MARK GUG RTAGS GYON 0F3B ; [*031E.0020.0002] # TIBETAN MARK GUG RTAGS GYAS 0F3C ; [*031F.0020.0002] # TIBETAN MARK ANG KHANG GYON 0F3D ; [*0320.0020.0002] # TIBETAN MARK ANG KHANG GYAS 0F3E ; [.0000.0000.0000] # TIBETAN SIGN YAR TSHES 0F3F ; [.0000.0000.0000] # TIBETAN SIGN MAR TSHES 0F82 ; [.0000.0000.0000] # TIBETAN SIGN NYI ZLA NAA DA 0F83 ; [.0000.0000.0000] # TIBETAN SIGN SNA LDAN 0F85 ; [*0403.0020.0002] # TIBETAN MARK PALUTA 0F86 ; [.0000.0000.0000] # TIBETAN SIGN LCI RTAGS 0F87 ; [.0000.0000.0000] # TIBETAN SIGN YANG RTAGS 0FBE ; [*0536.0020.0002] # TIBETAN KU RU KHA 0FBF ; [*0537.0020.0002] # TIBETAN KU RU KHA BZHI MIG CAN 0FC0 ; [*0538.0020.0002] # TIBETAN CANTILLATION SIGN HEAVY BEAT 0FC1 ; [*0539.0020.0002] # TIBETAN CANTILLATION SIGN LIGHT BEAT 0FC2 ; [*053A.0020.0002] # TIBETAN CANTILLATION SIGN CANG TE-U 0FC3 ; [*053B.0020.0002] # TIBETAN CANTILLATION SIGN SBUB -CHAL 0FC4 ; [*053C.0020.0002] # TIBETAN SYMBOL DRIL BU 0FC5 ; [*053D.0020.0002] # TIBETAN SYMBOL RDO RJE 0FC6 ; [.0000.0000.0000] # TIBETAN SYMBOL PADMA GDAN 0FC7 ; [*053E.0020.0002] # TIBETAN SYMBOL RDO RJE RGYA GRAM 0FC8 ; [*053F.0020.0002] # TIBETAN SYMBOL PHUR PA 0FC9 ; [*0540.0020.0002] # TIBETAN SYMBOL NOR BU 0FCA ; [*0541.0020.0002] # TIBETAN SYMBOL NOR BU NYIS -KHYIL 0FCB ; [*0542.0020.0002] # TIBETAN SYMBOL NOR BU GSUM -KHYIL 0FCC ; [*0543.0020.0002] # TIBETAN SYMBOL NOR BU BZHI -KHYIL 0FCE ; [*0544.0020.0002] # TIBETAN SIGN RDEL NAG RDEL DKAR 0FCF ; [*0545.0020.0002] # TIBETAN SIGN RDEL NAG GSUM 0FD0 ; [*03FA.0020.0002] # TIBETAN MARK BSKA- SHOG GI MGO RGYAN 0FD1 ; [*03FB.0020.0002] # TIBETAN MARK MNYAM YIG GI MGO RGYAN 0FD2 ; [*0404.0020.0002] # TIBETAN MARK NYIS TSHEG 0FD3 ; [*0405.0020.0002] # TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA 0FD4 ; [*0406.0020.0002] # TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA 0FD5 ; [*0546.0020.0002] # RIGHT-FACING SVASTI SIGN 0FD6 ; [*0547.0020.0002] # LEFT-FACING SVASTI SIGN 0FD7 ; [*0548.0020.0002] # RIGHT-FACING SVASTI SIGN WITH DOTS 0FD8 ; [*0549.0020.0002] # LEFT-FACING SVASTI SIGN WITH DOTS 0FD9 ; [*0407.0020.0002] # TIBETAN MARK LEADING MCHAN RTAGS 0FDA ; [*0408.0020.0002] # TIBETAN MARK TRAILING MCHAN RTAGS 104A ; [*0299.0020.0002] # MYANMAR SIGN LITTLE SECTION 104B ; [*029A.0020.0002] # MYANMAR SIGN SECTION 104C ; [*040E.0020.0002] # MYANMAR SYMBOL LOCATIVE 104D ; [*040F.0020.0002] # MYANMAR SYMBOL COMPLETED 104E ; [*0410.0020.0002] # MYANMAR SYMBOL AFOREMENTIONED 104F ; [*0411.0020.0002] # MYANMAR SYMBOL GENITIVE 109E ; [*054B.0020.0002] # MYANMAR SYMBOL SHAN ONE 109F ; [*054C.0020.0002] # MYANMAR SYMBOL SHAN EXCLAMATION 10FB ; [*02C6.0020.0002] # GEORGIAN PARAGRAPH SEPARATOR 1360 ; [*02C7.0020.0002] # ETHIOPIC SECTION MARK 1361 ; [*0251.0020.0002] # ETHIOPIC WORDSPACE 1362 ; [*027C.0020.0002] # ETHIOPIC FULL STOP 1363 ; [*0252.0020.0002] # ETHIOPIC COMMA 1364 ; [*0253.0020.0002] # ETHIOPIC SEMICOLON 1365 ; [*0254.0020.0002] # ETHIOPIC COLON 1366 ; [*0255.0020.0002] # ETHIOPIC PREFACE COLON 1367 ; [*026C.0020.0002] # ETHIOPIC QUESTION MARK 1368 ; [*02C8.0020.0002] # ETHIOPIC PARAGRAPH SEPARATOR 1372 ; [*1ABB.0020.0002] # ETHIOPIC NUMBER TEN 1373 ; [*1ABC.0020.0002] # ETHIOPIC NUMBER TWENTY 1374 ; [*1ABD.0020.0002] # ETHIOPIC NUMBER THIRTY 1375 ; [*1ABE.0020.0002] # ETHIOPIC NUMBER FORTY 1376 ; [*1ABF.0020.0002] # ETHIOPIC NUMBER FIFTY 1377 ; [*1AC0.0020.0002] # ETHIOPIC NUMBER SIXTY 1378 ; [*1AC1.0020.0002] # ETHIOPIC NUMBER SEVENTY 1379 ; [*1AC2.0020.0002] # ETHIOPIC NUMBER EIGHTY 137A ; [*1AC3.0020.0002] # ETHIOPIC NUMBER NINETY 137B ; [*1AC4.0020.0002] # ETHIOPIC NUMBER HUNDRED 137C ; [*1AC5.0020.0002] # ETHIOPIC NUMBER TEN THOUSAND 1390 ; [*04C6.0020.0002] # ETHIOPIC TONAL MARK YIZET 1391 ; [*04C7.0020.0002] # ETHIOPIC TONAL MARK DERET 1392 ; [*04C8.0020.0002] # ETHIOPIC TONAL MARK RIKRIK 1393 ; [*04C9.0020.0002] # ETHIOPIC TONAL MARK SHORT RIKRIK 1394 ; [*04CA.0020.0002] # ETHIOPIC TONAL MARK DIFAT 1395 ; [*04CB.0020.0002] # ETHIOPIC TONAL MARK KENAT 1396 ; [*04CC.0020.0002] # ETHIOPIC TONAL MARK CHIRET 1397 ; [*04CD.0020.0002] # ETHIOPIC TONAL MARK HIDET 1398 ; [*04CE.0020.0002] # ETHIOPIC TONAL MARK DERET-HIDET 1399 ; [*04CF.0020.0002] # ETHIOPIC TONAL MARK KURT 1400 ; [*020F.0020.0002] # CANADIAN SYLLABICS HYPHEN 166D ; [*041E.0020.0002] # CANADIAN SYLLABICS CHI SIGN 166E ; [*027F.0020.0002] # CANADIAN SYLLABICS FULL STOP 1680 ; [*0209.0020.0004] # OGHAM SPACE MARK 169B ; [*0321.0020.0002] # OGHAM FEATHER MARK 169C ; [*0322.0020.0002] # OGHAM REVERSED FEATHER MARK 16EB ; [*025C.0020.0002] # RUNIC SINGLE PUNCTUATION 16EC ; [*025D.0020.0002] # RUNIC MULTIPLE PUNCTUATION 16ED ; [*025E.0020.0002] # RUNIC CROSS PUNCTUATION 1735 ; [*0296.0020.0002] # PHILIPPINE SINGLE PUNCTUATION 1736 ; [*0297.0020.0002] # PHILIPPINE DOUBLE PUNCTUATION 17B4 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AQ 17B5 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AA 17D3 ; [.0000.0000.0000] # KHMER SIGN BATHAMASAT 17D4 ; [*029B.0020.0002] # KHMER SIGN KHAN 17D5 ; [*029C.0020.0002] # KHMER SIGN BARIYOOSAN 17D6 ; [*0259.0020.0002] # KHMER SIGN CAMNUC PII KUUH 17D8 ; [*0412.0020.0002] # KHMER SIGN BEYYAL 17D9 ; [*0413.0020.0002] # KHMER SIGN PHNAEK MUAN 17DA ; [*0414.0020.0002] # KHMER SIGN KOOMUUT 1800 ; [*03D9.0020.0002] # MONGOLIAN BIRGA 1801 ; [*0278.0020.0002] # MONGOLIAN ELLIPSIS 1802 ; [*022C.0020.0002] # MONGOLIAN COMMA 1803 ; [*027D.0020.0002] # MONGOLIAN FULL STOP 1804 ; [*0256.0020.0002] # MONGOLIAN COLON 1805 ; [*0257.0020.0002] # MONGOLIAN FOUR DOTS 1806 ; [*0211.0020.0002] # MONGOLIAN TODO SOFT HYPHEN 1807 ; [*0212.0020.0002] # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER 1808 ; [*022D.0020.0002] # MONGOLIAN MANCHU COMMA 1809 ; [*027E.0020.0002] # MONGOLIAN MANCHU FULL STOP 180A ; [.0000.0000.0000] # MONGOLIAN NIRUGU 1940 ; [*054A.0020.0002] # LIMBU SIGN LOO 1944 ; [*0264.0020.0002] # LIMBU EXCLAMATION MARK 1945 ; [*026D.0020.0002] # LIMBU QUESTION MARK 19E0 ; [*0551.0020.0002] # KHMER SYMBOL PATHAMASAT 19E1 ; [*0552.0020.0002] # KHMER SYMBOL MUOY KOET 19E2 ; [*0553.0020.0002] # KHMER SYMBOL PII KOET 19E3 ; [*0554.0020.0002] # KHMER SYMBOL BEI KOET 19E4 ; [*0555.0020.0002] # KHMER SYMBOL BUON KOET 19E5 ; [*0556.0020.0002] # KHMER SYMBOL PRAM KOET 19E6 ; [*0557.0020.0002] # KHMER SYMBOL PRAM-MUOY KOET 19E7 ; [*0558.0020.0002] # KHMER SYMBOL PRAM-PII KOET 19E8 ; [*0559.0020.0002] # KHMER SYMBOL PRAM-BEI KOET 19E9 ; [*055A.0020.0002] # KHMER SYMBOL PRAM-BUON KOET 19EA ; [*055B.0020.0002] # KHMER SYMBOL DAP KOET 19EB ; [*055C.0020.0002] # KHMER SYMBOL DAP-MUOY KOET 19EC ; [*055D.0020.0002] # KHMER SYMBOL DAP-PII KOET 19ED ; [*055E.0020.0002] # KHMER SYMBOL DAP-BEI KOET 19EE ; [*055F.0020.0002] # KHMER SYMBOL DAP-BUON KOET 19EF ; [*0560.0020.0002] # KHMER SYMBOL DAP-PRAM KOET 19F0 ; [*0561.0020.0002] # KHMER SYMBOL TUTEYASAT 19F1 ; [*0562.0020.0002] # KHMER SYMBOL MUOY ROC 19F2 ; [*0563.0020.0002] # KHMER SYMBOL PII ROC 19F3 ; [*0564.0020.0002] # KHMER SYMBOL BEI ROC 19F4 ; [*0565.0020.0002] # KHMER SYMBOL BUON ROC 19F5 ; [*0566.0020.0002] # KHMER SYMBOL PRAM ROC 19F6 ; [*0567.0020.0002] # KHMER SYMBOL PRAM-MUOY ROC 19F7 ; [*0568.0020.0002] # KHMER SYMBOL PRAM-PII ROC 19F8 ; [*0569.0020.0002] # KHMER SYMBOL PRAM-BEI ROC 19F9 ; [*056A.0020.0002] # KHMER SYMBOL PRAM-BUON ROC 19FA ; [*056B.0020.0002] # KHMER SYMBOL DAP ROC 19FB ; [*056C.0020.0002] # KHMER SYMBOL DAP-MUOY ROC 19FC ; [*056D.0020.0002] # KHMER SYMBOL DAP-PII ROC 19FD ; [*056E.0020.0002] # KHMER SYMBOL DAP-BEI ROC 19FE ; [*056F.0020.0002] # KHMER SYMBOL DAP-BUON ROC 19FF ; [*0570.0020.0002] # KHMER SYMBOL DAP-PRAM ROC 1A1E ; [*02C9.0020.0002] # BUGINESE PALLAWA 1A1F ; [*02CA.0020.0002] # BUGINESE END OF SECTION 1A7F ; [.0000.0000.0000] # TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AA0 ; [*0415.0020.0002] # TAI THAM SIGN WIANG 1AA1 ; [*0416.0020.0002] # TAI THAM SIGN WIANGWAAK 1AA2 ; [*0417.0020.0002] # TAI THAM SIGN SAWAN 1AA3 ; [*0418.0020.0002] # TAI THAM SIGN KEOW 1AA4 ; [*0419.0020.0002] # TAI THAM SIGN HOY 1AA5 ; [*041A.0020.0002] # TAI THAM SIGN DOKMAI 1AA6 ; [*041B.0020.0002] # TAI THAM SIGN REVERSED ROTATED RANA 1AA8 ; [*029D.0020.0002] # TAI THAM SIGN KAAN 1AA9 ; [*029E.0020.0002] # TAI THAM SIGN KAANKUU 1AAA ; [*029F.0020.0002] # TAI THAM SIGN SATKAAN 1AAB ; [*02A0.0020.0002] # TAI THAM SIGN SATKAANKUU 1AAC ; [*041C.0020.0002] # TAI THAM SIGN HANG 1AAD ; [*041D.0020.0002] # TAI THAM SIGN CAANG 1B5A ; [*02CB.0020.0002] # BALINESE PANTI 1B5B ; [*02CC.0020.0002] # BALINESE PAMADA 1B5C ; [*0280.0020.0002] # BALINESE WINDU 1B5D ; [*025A.0020.0002] # BALINESE CARIK PAMUNGKAH 1B5E ; [*02A1.0020.0002] # BALINESE CARIK SIKI 1B5F ; [*02A2.0020.0002] # BALINESE CARIK PAREREN 1B60 ; [*0210.0020.0002] # BALINESE PAMENENG 1B61 ; [*0571.0020.0002] # BALINESE MUSICAL SYMBOL DONG 1B62 ; [*0572.0020.0002] # BALINESE MUSICAL SYMBOL DENG 1B63 ; [*0573.0020.0002] # BALINESE MUSICAL SYMBOL DUNG 1B64 ; [*0574.0020.0002] # BALINESE MUSICAL SYMBOL DANG 1B65 ; [*0575.0020.0002] # BALINESE MUSICAL SYMBOL DANG SURANG 1B66 ; [*0576.0020.0002] # BALINESE MUSICAL SYMBOL DING 1B67 ; [*0577.0020.0002] # BALINESE MUSICAL SYMBOL DAENG 1B68 ; [*0578.0020.0002] # BALINESE MUSICAL SYMBOL DEUNG 1B69 ; [*0579.0020.0002] # BALINESE MUSICAL SYMBOL DAING 1B6A ; [*057A.0020.0002] # BALINESE MUSICAL SYMBOL DANG GEDE 1B6B ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING TEGEH 1B6C ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING ENDEP 1B6D ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPUL 1B6E ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPLI 1B6F ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING JEGOGAN 1B70 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN 1B71 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN 1B72 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING BENDE 1B73 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING GONG 1B74 ; [*057B.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG 1B75 ; [*057C.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG 1B76 ; [*057D.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK 1B77 ; [*057E.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK 1B78 ; [*057F.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG 1B79 ; [*0580.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG 1B7A ; [*0581.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK 1B7B ; [*0582.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK 1B7C ; [*0583.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING 1BFC ; [*042A.0020.0002] # BATAK SYMBOL BINDU NA METEK 1BFD ; [*042B.0020.0002] # BATAK SYMBOL BINDU PINARBORAS 1BFE ; [*042C.0020.0002] # BATAK SYMBOL BINDU JUDUL 1BFF ; [*042D.0020.0002] # BATAK SYMBOL BINDU PANGOLAT 1C3B ; [*0292.0020.0002] # LEPCHA PUNCTUATION TA-ROL 1C3C ; [*0293.0020.0002] # LEPCHA PUNCTUATION NYET THYOOM TA-ROL 1C3D ; [*040B.0020.0002] # LEPCHA PUNCTUATION CER-WA 1C3E ; [*040C.0020.0002] # LEPCHA PUNCTUATION TSHOOK CER-WA 1C3F ; [*040D.0020.0002] # LEPCHA PUNCTUATION TSHOOK 1C7E ; [*02C2.0020.0002] # OL CHIKI PUNCTUATION MUCAAD 1C7F ; [*02C3.0020.0002] # OL CHIKI PUNCTUATION DOUBLE MUCAAD 1CC0 ; [*041F.0020.0002] # SUNDANESE PUNCTUATION BINDU SURYA 1CC1 ; [*0420.0020.0002] # SUNDANESE PUNCTUATION BINDU PANGLONG 1CC2 ; [*0421.0020.0002] # SUNDANESE PUNCTUATION BINDU PURNAMA 1CC3 ; [*0422.0020.0002] # SUNDANESE PUNCTUATION BINDU CAKRA 1CC4 ; [*0423.0020.0002] # SUNDANESE PUNCTUATION BINDU LEU SATANGA 1CC5 ; [*0424.0020.0002] # SUNDANESE PUNCTUATION BINDU KA SATANGA 1CC6 ; [*0425.0020.0002] # SUNDANESE PUNCTUATION BINDU DA SATANGA 1CC7 ; [*0426.0020.0002] # SUNDANESE PUNCTUATION BINDU BA SATANGA 1CD0 ; [.0000.0000.0000] # VEDIC TONE KARSHANA 1CD1 ; [.0000.0000.0000] # VEDIC TONE SHARA 1CD2 ; [.0000.0000.0000] # VEDIC TONE PRENKHA 1CD3 ; [.0000.0000.0000] # VEDIC SIGN NIHSHVASA 1CD4 ; [.0000.0000.0000] # VEDIC SIGN YAJURVEDIC MIDLINE SVARITA 1CD5 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA 1CD6 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA 1CD7 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA 1CD8 ; [.0000.0000.0000] # VEDIC TONE CANDRA BELOW 1CD9 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER 1CDA ; [.0000.0000.0000] # VEDIC TONE DOUBLE SVARITA 1CDB ; [.0000.0000.0000] # VEDIC TONE TRIPLE SVARITA 1CDC ; [.0000.0000.0000] # VEDIC TONE KATHAKA ANUDATTA 1CDD ; [.0000.0000.0000] # VEDIC TONE DOT BELOW 1CDE ; [.0000.0000.0000] # VEDIC TONE TWO DOTS BELOW 1CDF ; [.0000.0000.0000] # VEDIC TONE THREE DOTS BELOW 1CE0 ; [.0000.0000.0000] # VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA 1CE1 ; [.0000.0000.0000] # VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA 1CE2 ; [.0000.0000.0000] # VEDIC SIGN VISARGA SVARITA 1CE3 ; [.0000.0000.0000] # VEDIC SIGN VISARGA UDATTA 1CE4 ; [.0000.0000.0000] # VEDIC SIGN REVERSED VISARGA UDATTA 1CE5 ; [.0000.0000.0000] # VEDIC SIGN VISARGA ANUDATTA 1CE6 ; [.0000.0000.0000] # VEDIC SIGN REVERSED VISARGA ANUDATTA 1CE7 ; [.0000.0000.0000] # VEDIC SIGN VISARGA UDATTA WITH TAIL 1CE8 ; [.0000.0000.0000] # VEDIC SIGN VISARGA ANUDATTA WITH TAIL 1CF4 ; [.0000.0000.0000] # VEDIC TONE CANDRA ABOVE 1CF8 ; [.0000.0000.0000] # VEDIC TONE RING ABOVE 1CF9 ; [.0000.0000.0000] # VEDIC TONE DOUBLE RING ABOVE 1FBD ; [*048E.0020.0002] # GREEK KORONIS 1FBF ; [*048E.0020.0002] # GREEK PSILI 1FC0 ; [*0490.0020.0002] # GREEK PERISPOMENI 1FC1 ; [*0489.0020.0002][.0000.002A.0002] # GREEK DIALYTIKA AND PERISPOMENI 1FCD ; [*048E.0020.0002][.0000.0025.0002] # GREEK PSILI AND VARIA 1FCE ; [*048E.0020.0002][.0000.0024.0002] # GREEK PSILI AND OXIA 1FCF ; [*048E.0020.0002][.0000.002A.0002] # GREEK PSILI AND PERISPOMENI 1FDD ; [*048F.0020.0002][.0000.0025.0002] # GREEK DASIA AND VARIA 1FDE ; [*048F.0020.0002][.0000.0024.0002] # GREEK DASIA AND OXIA 1FDF ; [*048F.0020.0002][.0000.002A.0002] # GREEK DASIA AND PERISPOMENI 1FED ; [*0489.0020.0002][.0000.0025.0002] # GREEK DIALYTIKA AND VARIA 1FEE ; [*0489.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA AND OXIA 1FEF ; [*0482.0020.0002] # GREEK VARIA 1FFD ; [*0483.0020.0002] # GREEK OXIA 1FFE ; [*048F.0020.0002] # GREEK DASIA 2000 ; [*0209.0020.0004] # EN QUAD 2001 ; [*0209.0020.0004] # EM QUAD 2002 ; [*0209.0020.0004] # EN SPACE 2003 ; [*0209.0020.0004] # EM SPACE 2004 ; [*0209.0020.0004] # THREE-PER-EM SPACE 2005 ; [*0209.0020.0004] # FOUR-PER-EM SPACE 2006 ; [*0209.0020.0004] # SIX-PER-EM SPACE 2007 ; [*0209.0020.001B] # FIGURE SPACE 2008 ; [*0209.0020.0004] # PUNCTUATION SPACE 2009 ; [*0209.0020.0004] # THIN SPACE 200A ; [*0209.0020.0004] # HAIR SPACE 2010 ; [*0213.0020.0002] # HYPHEN 2011 ; [*0213.0020.001B] # NON-BREAKING HYPHEN 2012 ; [*0214.0020.0002] # FIGURE DASH 2013 ; [*0215.0020.0002] # EN DASH 2014 ; [*0216.0020.0002] # EM DASH 2015 ; [*0217.0020.0002] # HORIZONTAL BAR 2016 ; [*0383.0020.0002] # DOUBLE VERTICAL LINE 2017 ; [*020C.0020.0002] # DOUBLE LOW LINE 2018 ; [*0306.0020.0002] # LEFT SINGLE QUOTATION MARK 2019 ; [*0307.0020.0002] # RIGHT SINGLE QUOTATION MARK 201A ; [*0308.0020.0002] # SINGLE LOW-9 QUOTATION MARK 201B ; [*0309.0020.0002] # SINGLE HIGH-REVERSED-9 QUOTATION MARK 201C ; [*030D.0020.0002] # LEFT DOUBLE QUOTATION MARK 201D ; [*030E.0020.0002] # RIGHT DOUBLE QUOTATION MARK 201E ; [*030F.0020.0002] # DOUBLE LOW-9 QUOTATION MARK 201F ; [*0310.0020.0002] # DOUBLE HIGH-REVERSED-9 QUOTATION MARK 2020 ; [*039F.0020.0002] # DAGGER 2021 ; [*03A0.0020.0002] # DOUBLE DAGGER 2022 ; [*03A4.0020.0002] # BULLET 2023 ; [*03A5.0020.0002] # TRIANGULAR BULLET 2024 ; [*0277.0020.0004] # ONE DOT LEADER 2025 ; [*0277.0020.0004][*0277.0020.0004] # TWO DOT LEADER 2026 ; [*0277.0020.0004][*0277.0020.0004][*0277.0020.0004] # HORIZONTAL ELLIPSIS 2027 ; [*03A6.0020.0002] # HYPHENATION POINT 2028 ; [*0207.0020.0002] # LINE SEPARATOR 2029 ; [*0208.0020.0002] # PARAGRAPH SEPARATOR 202F ; [*0209.0020.001B] # NARROW NO-BREAK SPACE 2030 ; [*039B.0020.0002] # PER MILLE SIGN 2031 ; [*039D.0020.0002] # PER TEN THOUSAND SIGN 2032 ; [*03AA.0020.0002] # PRIME 2033 ; [*03AA.0020.0004][*03AA.0020.0004] # DOUBLE PRIME 2034 ; [*03AA.0020.0004][*03AA.0020.0004][*03AA.0020.0004] # TRIPLE PRIME 2035 ; [*03AB.0020.0002] # REVERSED PRIME 2036 ; [*03AB.0020.0004][*03AB.0020.0004] # REVERSED DOUBLE PRIME 2037 ; [*03AB.0020.0004][*03AB.0020.0004][*03AB.0020.0004] # REVERSED TRIPLE PRIME 2038 ; [*03AE.0020.0002] # CARET 2039 ; [*030A.0020.0002] # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 203A ; [*030B.0020.0002] # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 203B ; [*03AF.0020.0002] # REFERENCE MARK 203C ; [*0260.0020.0004][*0260.0020.0004] # DOUBLE EXCLAMATION MARK 203D ; [*0275.0020.0002] # INTERROBANG 203E ; [*020A.0020.0002] # OVERLINE 203F ; [*03B0.0020.0002] # UNDERTIE 2040 ; [*03B2.0020.0002] # CHARACTER TIE 2041 ; [*03B4.0020.0002] # CARET INSERTION POINT 2042 ; [*03B5.0020.0002] # ASTERISM 2043 ; [*03A7.0020.0002] # HYPHEN BULLET 2044 ; [*0626.0020.0002] # FRACTION SLASH 2045 ; [*0323.0020.0002] # LEFT SQUARE BRACKET WITH QUILL 2046 ; [*0324.0020.0002] # RIGHT SQUARE BRACKET WITH QUILL 2047 ; [*0266.0020.0004][*0266.0020.0004] # DOUBLE QUESTION MARK 2048 ; [*0266.0020.0004][*0260.0020.0004] # QUESTION EXCLAMATION MARK 2049 ; [*0260.0020.0004][*0266.0020.0004] # EXCLAMATION QUESTION MARK 204A ; [*0397.0020.0002] # TIRONIAN SIGN ET 204B ; [*038C.0020.0002] # REVERSED PILCROW SIGN 204C ; [*03A8.0020.0002] # BLACK LEFTWARDS BULLET 204D ; [*03A9.0020.0002] # BLACK RIGHTWARDS BULLET 204E ; [*0390.0020.0002] # LOW ASTERISK 204F ; [*0236.0020.0002] # REVERSED SEMICOLON 2050 ; [*03B3.0020.0002] # CLOSE UP 2051 ; [*0391.0020.0002] # TWO ASTERISKS ALIGNED VERTICALLY 2052 ; [*0622.0020.0002] # COMMERCIAL MINUS SIGN 2053 ; [*021A.0020.0002] # SWUNG DASH 2054 ; [*03B1.0020.0002] # INVERTED UNDERTIE 2055 ; [*02E8.0020.0002] # FLOWER PUNCTUATION MARK 2056 ; [*02E9.0020.0002] # THREE DOT PUNCTUATION 2057 ; [*03AA.0020.0004][*03AA.0020.0004][*03AA.0020.0004][*03AA.0020.0004] # QUADRUPLE PRIME 2058 ; [*02EA.0020.0002] # FOUR DOT PUNCTUATION 2059 ; [*02EB.0020.0002] # FIVE DOT PUNCTUATION 205A ; [*02EC.0020.0002] # TWO DOT PUNCTUATION 205B ; [*02ED.0020.0002] # FOUR DOT MARK 205C ; [*02EE.0020.0002] # DOTTED CROSS 205D ; [*02EF.0020.0002] # TRICOLON 205E ; [*02F0.0020.0002] # VERTICAL FOUR DOTS 205F ; [*0209.0020.0004] # MEDIUM MATHEMATICAL SPACE 2061 ; [.0000.0000.0000] # FUNCTION APPLICATION 2062 ; [.0000.0000.0000] # INVISIBLE TIMES 2063 ; [.0000.0000.0000] # INVISIBLE SEPARATOR 2064 ; [.0000.0000.0000] # INVISIBLE PLUS 207A ; [*0616.0020.0014] # SUPERSCRIPT PLUS SIGN 207B ; [*0621.0020.0014] # SUPERSCRIPT MINUS 207C ; [*061B.0020.0014] # SUPERSCRIPT EQUALS SIGN 207D ; [*0317.0020.0014] # SUPERSCRIPT LEFT PARENTHESIS 207E ; [*0318.0020.0014] # SUPERSCRIPT RIGHT PARENTHESIS 208A ; [*0616.0020.0015] # SUBSCRIPT PLUS SIGN 208B ; [*0621.0020.0015] # SUBSCRIPT MINUS 208C ; [*061B.0020.0015] # SUBSCRIPT EQUALS SIGN 208D ; [*0317.0020.0015] # SUBSCRIPT LEFT PARENTHESIS 208E ; [*0318.0020.0015] # SUBSCRIPT RIGHT PARENTHESIS 2104 ; [*0586.0020.0002] # CENTRE LINE SYMBOL 2108 ; [*0587.0020.0002] # SCRUPLE 2114 ; [*0588.0020.0002] # L B BAR SYMBOL 2117 ; [*0589.0020.0002] # SOUND RECORDING COPYRIGHT 2118 ; [*058A.0020.0002] # SCRIPT CAPITAL P 211E ; [*058B.0020.0002] # PRESCRIPTION TAKE 211F ; [*058C.0020.0002] # RESPONSE 2123 ; [*058D.0020.0002] # VERSICLE 2125 ; [*058E.0020.0002] # OUNCE SIGN 2127 ; [*058F.0020.0002] # INVERTED OHM SIGN 2129 ; [*0590.0020.0002] # TURNED GREEK SMALL LETTER IOTA 212E ; [*0591.0020.0002] # ESTIMATED SYMBOL 213A ; [*0592.0020.0002] # ROTATED CAPITAL Q 2140 ; [*0615.0020.0005] # DOUBLE-STRUCK N-ARY SUMMATION 2141 ; [*0593.0020.0002] # TURNED SANS-SERIF CAPITAL G 2142 ; [*0594.0020.0002] # TURNED SANS-SERIF CAPITAL L 2143 ; [*0595.0020.0002] # REVERSED SANS-SERIF CAPITAL L 2144 ; [*0596.0020.0002] # TURNED SANS-SERIF CAPITAL Y 214A ; [*0597.0020.0002] # PROPERTY LINE 214B ; [*06B1.0020.0002] # TURNED AMPERSAND 214C ; [*0598.0020.0002] # PER SIGN 214F ; [*0599.0020.0002] # SYMBOL FOR SAMARITAN SOURCE 2180 ; [*1AC6.0020.0002] # ROMAN NUMERAL ONE THOUSAND C D 2181 ; [*1AC7.0020.0002] # ROMAN NUMERAL FIVE THOUSAND 2182 ; [*1AC8.0020.0002] # ROMAN NUMERAL TEN THOUSAND 2186 ; [*1AC9.0020.0002] # ROMAN NUMERAL FIFTY EARLY FORM 2187 ; [*1ACA.0020.0002] # ROMAN NUMERAL FIFTY THOUSAND 2188 ; [*1ACB.0020.0002] # ROMAN NUMERAL ONE HUNDRED THOUSAND 218A ; [*059A.0020.0002] # TURNED DIGIT TWO 218B ; [*059B.0020.0002] # TURNED DIGIT THREE 2190 ; [*059C.0020.0002] # LEFTWARDS ARROW 2191 ; [*059E.0020.0002] # UPWARDS ARROW 2192 ; [*059D.0020.0002] # RIGHTWARDS ARROW 2193 ; [*059F.0020.0002] # DOWNWARDS ARROW 2194 ; [*05A0.0020.0002] # LEFT RIGHT ARROW 2195 ; [*05A1.0020.0002] # UP DOWN ARROW 2196 ; [*05A2.0020.0002] # NORTH WEST ARROW 2197 ; [*05A3.0020.0002] # NORTH EAST ARROW 2198 ; [*05A4.0020.0002] # SOUTH EAST ARROW 2199 ; [*05A5.0020.0002] # SOUTH WEST ARROW 219A ; [*059C.0020.0002][.0000.002F.0002] # LEFTWARDS ARROW WITH STROKE 219B ; [*059D.0020.0002][.0000.002F.0002] # RIGHTWARDS ARROW WITH STROKE 219C ; [*05A6.0020.0002] # LEFTWARDS WAVE ARROW 219D ; [*05A7.0020.0002] # RIGHTWARDS WAVE ARROW 219E ; [*05A8.0020.0002] # LEFTWARDS TWO HEADED ARROW 219F ; [*05A9.0020.0002] # UPWARDS TWO HEADED ARROW 21A0 ; [*05AA.0020.0002] # RIGHTWARDS TWO HEADED ARROW 21A1 ; [*05AB.0020.0002] # DOWNWARDS TWO HEADED ARROW 21A2 ; [*05AC.0020.0002] # LEFTWARDS ARROW WITH TAIL 21A3 ; [*05AD.0020.0002] # RIGHTWARDS ARROW WITH TAIL 21A4 ; [*05AE.0020.0002] # LEFTWARDS ARROW FROM BAR 21A5 ; [*05AF.0020.0002] # UPWARDS ARROW FROM BAR 21A6 ; [*05B0.0020.0002] # RIGHTWARDS ARROW FROM BAR 21A7 ; [*05B1.0020.0002] # DOWNWARDS ARROW FROM BAR 21A8 ; [*05B2.0020.0002] # UP DOWN ARROW WITH BASE 21A9 ; [*05B3.0020.0002] # LEFTWARDS ARROW WITH HOOK 21AA ; [*05B4.0020.0002] # RIGHTWARDS ARROW WITH HOOK 21AB ; [*05B5.0020.0002] # LEFTWARDS ARROW WITH LOOP 21AC ; [*05B6.0020.0002] # RIGHTWARDS ARROW WITH LOOP 21AD ; [*05B7.0020.0002] # LEFT RIGHT WAVE ARROW 21AE ; [*05A0.0020.0002][.0000.002F.0002] # LEFT RIGHT ARROW WITH STROKE 21AF ; [*05B8.0020.0002] # DOWNWARDS ZIGZAG ARROW 21B0 ; [*05B9.0020.0002] # UPWARDS ARROW WITH TIP LEFTWARDS 21B1 ; [*05BA.0020.0002] # UPWARDS ARROW WITH TIP RIGHTWARDS 21B2 ; [*05BB.0020.0002] # DOWNWARDS ARROW WITH TIP LEFTWARDS 21B3 ; [*05BC.0020.0002] # DOWNWARDS ARROW WITH TIP RIGHTWARDS 21B4 ; [*05BD.0020.0002] # RIGHTWARDS ARROW WITH CORNER DOWNWARDS 21B5 ; [*05BE.0020.0002] # DOWNWARDS ARROW WITH CORNER LEFTWARDS 21B6 ; [*05BF.0020.0002] # ANTICLOCKWISE TOP SEMICIRCLE ARROW 21B7 ; [*05C0.0020.0002] # CLOCKWISE TOP SEMICIRCLE ARROW 21B8 ; [*05C1.0020.0002] # NORTH WEST ARROW TO LONG BAR 21B9 ; [*05C2.0020.0002] # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR 21BA ; [*05C3.0020.0002] # ANTICLOCKWISE OPEN CIRCLE ARROW 21BB ; [*05C4.0020.0002] # CLOCKWISE OPEN CIRCLE ARROW 21BC ; [*05C5.0020.0002] # LEFTWARDS HARPOON WITH BARB UPWARDS 21BD ; [*05C6.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWNWARDS 21BE ; [*05C7.0020.0002] # UPWARDS HARPOON WITH BARB RIGHTWARDS 21BF ; [*05C8.0020.0002] # UPWARDS HARPOON WITH BARB LEFTWARDS 21C0 ; [*05C9.0020.0002] # RIGHTWARDS HARPOON WITH BARB UPWARDS 21C1 ; [*05CA.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWNWARDS 21C2 ; [*05CB.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHTWARDS 21C3 ; [*05CC.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFTWARDS 21C4 ; [*05CD.0020.0002] # RIGHTWARDS ARROW OVER LEFTWARDS ARROW 21C5 ; [*05CE.0020.0002] # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW 21C6 ; [*05CF.0020.0002] # LEFTWARDS ARROW OVER RIGHTWARDS ARROW 21C7 ; [*05D0.0020.0002] # LEFTWARDS PAIRED ARROWS 21C8 ; [*05D1.0020.0002] # UPWARDS PAIRED ARROWS 21C9 ; [*05D2.0020.0002] # RIGHTWARDS PAIRED ARROWS 21CA ; [*05D3.0020.0002] # DOWNWARDS PAIRED ARROWS 21CB ; [*05D4.0020.0002] # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON 21CC ; [*05D5.0020.0002] # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON 21CD ; [*05D6.0020.0002][.0000.002F.0002] # LEFTWARDS DOUBLE ARROW WITH STROKE 21CE ; [*05DA.0020.0002][.0000.002F.0002] # LEFT RIGHT DOUBLE ARROW WITH STROKE 21CF ; [*05D8.0020.0002][.0000.002F.0002] # RIGHTWARDS DOUBLE ARROW WITH STROKE 21D0 ; [*05D6.0020.0002] # LEFTWARDS DOUBLE ARROW 21D1 ; [*05D7.0020.0002] # UPWARDS DOUBLE ARROW 21D2 ; [*05D8.0020.0002] # RIGHTWARDS DOUBLE ARROW 21D3 ; [*05D9.0020.0002] # DOWNWARDS DOUBLE ARROW 21D4 ; [*05DA.0020.0002] # LEFT RIGHT DOUBLE ARROW 21D5 ; [*05DB.0020.0002] # UP DOWN DOUBLE ARROW 21D6 ; [*05DC.0020.0002] # NORTH WEST DOUBLE ARROW 21D7 ; [*05DD.0020.0002] # NORTH EAST DOUBLE ARROW 21D8 ; [*05DE.0020.0002] # SOUTH EAST DOUBLE ARROW 21D9 ; [*05DF.0020.0002] # SOUTH WEST DOUBLE ARROW 21DA ; [*05E0.0020.0002] # LEFTWARDS TRIPLE ARROW 21DB ; [*05E1.0020.0002] # RIGHTWARDS TRIPLE ARROW 21DC ; [*05E2.0020.0002] # LEFTWARDS SQUIGGLE ARROW 21DD ; [*05E3.0020.0002] # RIGHTWARDS SQUIGGLE ARROW 21DE ; [*05E4.0020.0002] # UPWARDS ARROW WITH DOUBLE STROKE 21DF ; [*05E5.0020.0002] # DOWNWARDS ARROW WITH DOUBLE STROKE 21E0 ; [*05E6.0020.0002] # LEFTWARDS DASHED ARROW 21E1 ; [*05E7.0020.0002] # UPWARDS DASHED ARROW 21E2 ; [*05E8.0020.0002] # RIGHTWARDS DASHED ARROW 21E3 ; [*05E9.0020.0002] # DOWNWARDS DASHED ARROW 21E4 ; [*05EA.0020.0002] # LEFTWARDS ARROW TO BAR 21E5 ; [*05EB.0020.0002] # RIGHTWARDS ARROW TO BAR 21E6 ; [*05EC.0020.0002] # LEFTWARDS WHITE ARROW 21E7 ; [*05ED.0020.0002] # UPWARDS WHITE ARROW 21E8 ; [*05EE.0020.0002] # RIGHTWARDS WHITE ARROW 21E9 ; [*05EF.0020.0002] # DOWNWARDS WHITE ARROW 21EA ; [*05F0.0020.0002] # UPWARDS WHITE ARROW FROM BAR 21EB ; [*05F1.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL 21EC ; [*05F2.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR 21ED ; [*05F3.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR 21EE ; [*05F4.0020.0002] # UPWARDS WHITE DOUBLE ARROW 21EF ; [*05F5.0020.0002] # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL 21F0 ; [*05F6.0020.0002] # RIGHTWARDS WHITE ARROW FROM WALL 21F1 ; [*05F7.0020.0002] # NORTH WEST ARROW TO CORNER 21F2 ; [*05F8.0020.0002] # SOUTH EAST ARROW TO CORNER 21F3 ; [*05F9.0020.0002] # UP DOWN WHITE ARROW 21F4 ; [*05FA.0020.0002] # RIGHT ARROW WITH SMALL CIRCLE 21F5 ; [*05FB.0020.0002] # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW 21F6 ; [*05FC.0020.0002] # THREE RIGHTWARDS ARROWS 21F7 ; [*05FD.0020.0002] # LEFTWARDS ARROW WITH VERTICAL STROKE 21F8 ; [*05FE.0020.0002] # RIGHTWARDS ARROW WITH VERTICAL STROKE 21F9 ; [*05FF.0020.0002] # LEFT RIGHT ARROW WITH VERTICAL STROKE 21FA ; [*0600.0020.0002] # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE 21FB ; [*0601.0020.0002] # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE 21FC ; [*0602.0020.0002] # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE 21FD ; [*0603.0020.0002] # LEFTWARDS OPEN-HEADED ARROW 21FE ; [*0604.0020.0002] # RIGHTWARDS OPEN-HEADED ARROW 21FF ; [*0605.0020.0002] # LEFT RIGHT OPEN-HEADED ARROW 2200 ; [*0606.0020.0002] # FOR ALL 2201 ; [*0607.0020.0002] # COMPLEMENT 2202 ; [*0608.0020.0002] # PARTIAL DIFFERENTIAL 2203 ; [*0609.0020.0002] # THERE EXISTS 2204 ; [*0609.0020.0002][.0000.002F.0002] # THERE DOES NOT EXIST 2205 ; [*060A.0020.0002] # EMPTY SET 2206 ; [*060B.0020.0002] # INCREMENT 2207 ; [*060C.0020.0002] # NABLA 2208 ; [*060D.0020.0002] # ELEMENT OF 2209 ; [*060D.0020.0002][.0000.002F.0002] # NOT AN ELEMENT OF 220A ; [*060E.0020.0002] # SMALL ELEMENT OF 220B ; [*060F.0020.0002] # CONTAINS AS MEMBER 220C ; [*060F.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS MEMBER 220D ; [*0610.0020.0002] # SMALL CONTAINS AS MEMBER 220E ; [*0612.0020.0002] # END OF PROOF 220F ; [*0613.0020.0002] # N-ARY PRODUCT 2210 ; [*0614.0020.0002] # N-ARY COPRODUCT 2211 ; [*0615.0020.0002] # N-ARY SUMMATION 2212 ; [*0621.0020.0002] # MINUS SIGN 2213 ; [*0623.0020.0002] # MINUS-OR-PLUS SIGN 2214 ; [*0624.0020.0002] # DOT PLUS 2215 ; [*0625.0020.0002] # DIVISION SLASH 2216 ; [*0627.0020.0002] # SET MINUS 2217 ; [*0628.0020.0002] # ASTERISK OPERATOR 2218 ; [*0629.0020.0002] # RING OPERATOR 2219 ; [*062A.0020.0002] # BULLET OPERATOR 221A ; [*062B.0020.0002] # SQUARE ROOT 221B ; [*062C.0020.0002] # CUBE ROOT 221C ; [*062E.0020.0002] # FOURTH ROOT 221D ; [*0630.0020.0002] # PROPORTIONAL TO 221E ; [*0631.0020.0002] # INFINITY 221F ; [*0632.0020.0002] # RIGHT ANGLE 2220 ; [*0633.0020.0002] # ANGLE 2221 ; [*0634.0020.0002] # MEASURED ANGLE 2222 ; [*0635.0020.0002] # SPHERICAL ANGLE 2223 ; [*0636.0020.0002] # DIVIDES 2224 ; [*0636.0020.0002][.0000.002F.0002] # DOES NOT DIVIDE 2225 ; [*0637.0020.0002] # PARALLEL TO 2226 ; [*0637.0020.0002][.0000.002F.0002] # NOT PARALLEL TO 2227 ; [*0638.0020.0002] # LOGICAL AND 2228 ; [*0639.0020.0002] # LOGICAL OR 2229 ; [*063A.0020.0002] # INTERSECTION 222A ; [*063B.0020.0002] # UNION 222B ; [*063C.0020.0002] # INTEGRAL 222C ; [*063C.0020.0004][*063C.0020.0004] # DOUBLE INTEGRAL 222D ; [*063C.0020.0004][*063C.0020.0004][*063C.0020.0004] # TRIPLE INTEGRAL 222E ; [*063D.0020.0002] # CONTOUR INTEGRAL 222F ; [*063D.0020.0004][*063D.0020.0004] # SURFACE INTEGRAL 2230 ; [*063D.0020.0004][*063D.0020.0004][*063D.0020.0004] # VOLUME INTEGRAL 2231 ; [*063E.0020.0002] # CLOCKWISE INTEGRAL 2232 ; [*063F.0020.0002] # CLOCKWISE CONTOUR INTEGRAL 2233 ; [*0640.0020.0002] # ANTICLOCKWISE CONTOUR INTEGRAL 2234 ; [*0641.0020.0002] # THEREFORE 2235 ; [*0642.0020.0002] # BECAUSE 2236 ; [*0643.0020.0002] # RATIO 2237 ; [*0644.0020.0002] # PROPORTION 2238 ; [*0645.0020.0002] # DOT MINUS 2239 ; [*0646.0020.0002] # EXCESS 223A ; [*0647.0020.0002] # GEOMETRIC PROPORTION 223B ; [*0648.0020.0002] # HOMOTHETIC 223C ; [*0649.0020.0002] # TILDE OPERATOR 223D ; [*064A.0020.0002] # REVERSED TILDE 223E ; [*064B.0020.0002] # INVERTED LAZY S 223F ; [*064C.0020.0002] # SINE WAVE 2240 ; [*064D.0020.0002] # WREATH PRODUCT 2241 ; [*0649.0020.0002][.0000.002F.0002] # NOT TILDE 2242 ; [*064E.0020.0002] # MINUS TILDE 2243 ; [*064F.0020.0002] # ASYMPTOTICALLY EQUAL TO 2244 ; [*064F.0020.0002][.0000.002F.0002] # NOT ASYMPTOTICALLY EQUAL TO 2245 ; [*0650.0020.0002] # APPROXIMATELY EQUAL TO 2246 ; [*0651.0020.0002] # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO 2247 ; [*0650.0020.0002][.0000.002F.0002] # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO 2248 ; [*0652.0020.0002] # ALMOST EQUAL TO 2249 ; [*0652.0020.0002][.0000.002F.0002] # NOT ALMOST EQUAL TO 224A ; [*0653.0020.0002] # ALMOST EQUAL OR EQUAL TO 224B ; [*0654.0020.0002] # TRIPLE TILDE 224C ; [*0655.0020.0002] # ALL EQUAL TO 224D ; [*0656.0020.0002] # EQUIVALENT TO 224E ; [*0657.0020.0002] # GEOMETRICALLY EQUIVALENT TO 224F ; [*0658.0020.0002] # DIFFERENCE BETWEEN 2250 ; [*0659.0020.0002] # APPROACHES THE LIMIT 2251 ; [*065A.0020.0002] # GEOMETRICALLY EQUAL TO 2252 ; [*065B.0020.0002] # APPROXIMATELY EQUAL TO OR THE IMAGE OF 2253 ; [*065C.0020.0002] # IMAGE OF OR APPROXIMATELY EQUAL TO 2254 ; [*065D.0020.0002] # COLON EQUALS 2255 ; [*065E.0020.0002] # EQUALS COLON 2256 ; [*065F.0020.0002] # RING IN EQUAL TO 2257 ; [*0660.0020.0002] # RING EQUAL TO 2258 ; [*0661.0020.0002] # CORRESPONDS TO 2259 ; [*0662.0020.0002] # ESTIMATES 225A ; [*0663.0020.0002] # EQUIANGULAR TO 225B ; [*0664.0020.0002] # STAR EQUALS 225C ; [*0665.0020.0002] # DELTA EQUAL TO 225D ; [*0666.0020.0002] # EQUAL TO BY DEFINITION 225E ; [*0667.0020.0002] # MEASURED BY 225F ; [*0668.0020.0002] # QUESTIONED EQUAL TO 2260 ; [*061B.0020.0002][.0000.002F.0002] # NOT EQUAL TO 2261 ; [*0669.0020.0002] # IDENTICAL TO 2262 ; [*0669.0020.0002][.0000.002F.0002] # NOT IDENTICAL TO 2263 ; [*066A.0020.0002] # STRICTLY EQUIVALENT TO 2264 ; [*066B.0020.0002] # LESS-THAN OR EQUAL TO 2265 ; [*066C.0020.0002] # GREATER-THAN OR EQUAL TO 2266 ; [*066D.0020.0002] # LESS-THAN OVER EQUAL TO 2267 ; [*066E.0020.0002] # GREATER-THAN OVER EQUAL TO 2268 ; [*066F.0020.0002] # LESS-THAN BUT NOT EQUAL TO 2269 ; [*0670.0020.0002] # GREATER-THAN BUT NOT EQUAL TO 226A ; [*0671.0020.0002] # MUCH LESS-THAN 226B ; [*0672.0020.0002] # MUCH GREATER-THAN 226C ; [*0673.0020.0002] # BETWEEN 226D ; [*0656.0020.0002][.0000.002F.0002] # NOT EQUIVALENT TO 226E ; [*061A.0020.0002][.0000.002F.0002] # NOT LESS-THAN 226F ; [*061C.0020.0002][.0000.002F.0002] # NOT GREATER-THAN 2270 ; [*066B.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUAL TO 2271 ; [*066C.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUAL TO 2272 ; [*0674.0020.0002] # LESS-THAN OR EQUIVALENT TO 2273 ; [*0675.0020.0002] # GREATER-THAN OR EQUIVALENT TO 2274 ; [*0674.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUIVALENT TO 2275 ; [*0675.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUIVALENT TO 2276 ; [*0676.0020.0002] # LESS-THAN OR GREATER-THAN 2277 ; [*0677.0020.0002] # GREATER-THAN OR LESS-THAN 2278 ; [*0676.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR GREATER-THAN 2279 ; [*0677.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR LESS-THAN 227A ; [*0678.0020.0002] # PRECEDES 227B ; [*0679.0020.0002] # SUCCEEDS 227C ; [*067A.0020.0002] # PRECEDES OR EQUAL TO 227D ; [*067B.0020.0002] # SUCCEEDS OR EQUAL TO 227E ; [*067C.0020.0002] # PRECEDES OR EQUIVALENT TO 227F ; [*067D.0020.0002] # SUCCEEDS OR EQUIVALENT TO 2280 ; [*0678.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE 2281 ; [*0679.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED 2282 ; [*067E.0020.0002] # SUBSET OF 2283 ; [*067F.0020.0002] # SUPERSET OF 2284 ; [*067E.0020.0002][.0000.002F.0002] # NOT A SUBSET OF 2285 ; [*067F.0020.0002][.0000.002F.0002] # NOT A SUPERSET OF 2286 ; [*0680.0020.0002] # SUBSET OF OR EQUAL TO 2287 ; [*0681.0020.0002] # SUPERSET OF OR EQUAL TO 2288 ; [*0680.0020.0002][.0000.002F.0002] # NEITHER A SUBSET OF NOR EQUAL TO 2289 ; [*0681.0020.0002][.0000.002F.0002] # NEITHER A SUPERSET OF NOR EQUAL TO 228A ; [*0682.0020.0002] # SUBSET OF WITH NOT EQUAL TO 228B ; [*0683.0020.0002] # SUPERSET OF WITH NOT EQUAL TO 228C ; [*0684.0020.0002] # MULTISET 228D ; [*0685.0020.0002] # MULTISET MULTIPLICATION 228E ; [*0686.0020.0002] # MULTISET UNION 228F ; [*0687.0020.0002] # SQUARE IMAGE OF 2290 ; [*0688.0020.0002] # SQUARE ORIGINAL OF 2291 ; [*0689.0020.0002] # SQUARE IMAGE OF OR EQUAL TO 2292 ; [*068A.0020.0002] # SQUARE ORIGINAL OF OR EQUAL TO 2293 ; [*068B.0020.0002] # SQUARE CAP 2294 ; [*068C.0020.0002] # SQUARE CUP 2295 ; [*068D.0020.0002] # CIRCLED PLUS 2296 ; [*068E.0020.0002] # CIRCLED MINUS 2297 ; [*068F.0020.0002] # CIRCLED TIMES 2298 ; [*0690.0020.0002] # CIRCLED DIVISION SLASH 2299 ; [*0691.0020.0002] # CIRCLED DOT OPERATOR 229A ; [*0692.0020.0002] # CIRCLED RING OPERATOR 229B ; [*0693.0020.0002] # CIRCLED ASTERISK OPERATOR 229C ; [*0694.0020.0002] # CIRCLED EQUALS 229D ; [*0695.0020.0002] # CIRCLED DASH 229E ; [*0696.0020.0002] # SQUARED PLUS 229F ; [*0697.0020.0002] # SQUARED MINUS 22A0 ; [*0698.0020.0002] # SQUARED TIMES 22A1 ; [*0699.0020.0002] # SQUARED DOT OPERATOR 22A2 ; [*069A.0020.0002] # RIGHT TACK 22A3 ; [*069B.0020.0002] # LEFT TACK 22A4 ; [*069C.0020.0002] # DOWN TACK 22A5 ; [*069D.0020.0002] # UP TACK 22A6 ; [*069E.0020.0002] # ASSERTION 22A7 ; [*069F.0020.0002] # MODELS 22A8 ; [*06A0.0020.0002] # TRUE 22A9 ; [*06A1.0020.0002] # FORCES 22AA ; [*06A2.0020.0002] # TRIPLE VERTICAL BAR RIGHT TURNSTILE 22AB ; [*06A3.0020.0002] # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE 22AC ; [*069A.0020.0002][.0000.002F.0002] # DOES NOT PROVE 22AD ; [*06A0.0020.0002][.0000.002F.0002] # NOT TRUE 22AE ; [*06A1.0020.0002][.0000.002F.0002] # DOES NOT FORCE 22AF ; [*06A3.0020.0002][.0000.002F.0002] # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE 22B0 ; [*06A4.0020.0002] # PRECEDES UNDER RELATION 22B1 ; [*06A5.0020.0002] # SUCCEEDS UNDER RELATION 22B2 ; [*06A6.0020.0002] # NORMAL SUBGROUP OF 22B3 ; [*06A7.0020.0002] # CONTAINS AS NORMAL SUBGROUP 22B4 ; [*06A8.0020.0002] # NORMAL SUBGROUP OF OR EQUAL TO 22B5 ; [*06A9.0020.0002] # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO 22B6 ; [*06AA.0020.0002] # ORIGINAL OF 22B7 ; [*06AB.0020.0002] # IMAGE OF 22B8 ; [*06AC.0020.0002] # MULTIMAP 22B9 ; [*06AD.0020.0002] # HERMITIAN CONJUGATE MATRIX 22BA ; [*06AE.0020.0002] # INTERCALATE 22BB ; [*06AF.0020.0002] # XOR 22BC ; [*06B0.0020.0002] # NAND 22BD ; [*06B2.0020.0002] # NOR 22BE ; [*06B3.0020.0002] # RIGHT ANGLE WITH ARC 22BF ; [*06B4.0020.0002] # RIGHT TRIANGLE 22C0 ; [*06B5.0020.0002] # N-ARY LOGICAL AND 22C1 ; [*06B6.0020.0002] # N-ARY LOGICAL OR 22C2 ; [*06B7.0020.0002] # N-ARY INTERSECTION 22C3 ; [*06B8.0020.0002] # N-ARY UNION 22C4 ; [*06B9.0020.0002] # DIAMOND OPERATOR 22C5 ; [*06BA.0020.0002] # DOT OPERATOR 22C6 ; [*06BB.0020.0002] # STAR OPERATOR 22C7 ; [*06BC.0020.0002] # DIVISION TIMES 22C8 ; [*06BD.0020.0002] # BOWTIE 22C9 ; [*06BE.0020.0002] # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT 22CA ; [*06BF.0020.0002] # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT 22CB ; [*06C0.0020.0002] # LEFT SEMIDIRECT PRODUCT 22CC ; [*06C1.0020.0002] # RIGHT SEMIDIRECT PRODUCT 22CD ; [*06C2.0020.0002] # REVERSED TILDE EQUALS 22CE ; [*06C3.0020.0002] # CURLY LOGICAL OR 22CF ; [*06C4.0020.0002] # CURLY LOGICAL AND 22D0 ; [*06C5.0020.0002] # DOUBLE SUBSET 22D1 ; [*06C6.0020.0002] # DOUBLE SUPERSET 22D2 ; [*06C7.0020.0002] # DOUBLE INTERSECTION 22D3 ; [*06C8.0020.0002] # DOUBLE UNION 22D4 ; [*06C9.0020.0002] # PITCHFORK 22D5 ; [*06CA.0020.0002] # EQUAL AND PARALLEL TO 22D6 ; [*06CB.0020.0002] # LESS-THAN WITH DOT 22D7 ; [*06CC.0020.0002] # GREATER-THAN WITH DOT 22D8 ; [*06CD.0020.0002] # VERY MUCH LESS-THAN 22D9 ; [*06CE.0020.0002] # VERY MUCH GREATER-THAN 22DA ; [*06CF.0020.0002] # LESS-THAN EQUAL TO OR GREATER-THAN 22DB ; [*06D0.0020.0002] # GREATER-THAN EQUAL TO OR LESS-THAN 22DC ; [*06D1.0020.0002] # EQUAL TO OR LESS-THAN 22DD ; [*06D2.0020.0002] # EQUAL TO OR GREATER-THAN 22DE ; [*06D3.0020.0002] # EQUAL TO OR PRECEDES 22DF ; [*06D4.0020.0002] # EQUAL TO OR SUCCEEDS 22E0 ; [*067A.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE OR EQUAL 22E1 ; [*067B.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED OR EQUAL 22E2 ; [*0689.0020.0002][.0000.002F.0002] # NOT SQUARE IMAGE OF OR EQUAL TO 22E3 ; [*068A.0020.0002][.0000.002F.0002] # NOT SQUARE ORIGINAL OF OR EQUAL TO 22E4 ; [*06D5.0020.0002] # SQUARE IMAGE OF OR NOT EQUAL TO 22E5 ; [*06D6.0020.0002] # SQUARE ORIGINAL OF OR NOT EQUAL TO 22E6 ; [*06D7.0020.0002] # LESS-THAN BUT NOT EQUIVALENT TO 22E7 ; [*06D8.0020.0002] # GREATER-THAN BUT NOT EQUIVALENT TO 22E8 ; [*06D9.0020.0002] # PRECEDES BUT NOT EQUIVALENT TO 22E9 ; [*06DA.0020.0002] # SUCCEEDS BUT NOT EQUIVALENT TO 22EA ; [*06A6.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF 22EB ; [*06A7.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP 22EC ; [*06A8.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF OR EQUAL TO 22ED ; [*06A9.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL 22EE ; [*06DB.0020.0002] # VERTICAL ELLIPSIS 22EF ; [*06DC.0020.0002] # MIDLINE HORIZONTAL ELLIPSIS 22F0 ; [*06DD.0020.0002] # UP RIGHT DIAGONAL ELLIPSIS 22F1 ; [*06DE.0020.0002] # DOWN RIGHT DIAGONAL ELLIPSIS 22F2 ; [*06DF.0020.0002] # ELEMENT OF WITH LONG HORIZONTAL STROKE 22F3 ; [*06E0.0020.0002] # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22F4 ; [*06E1.0020.0002] # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22F5 ; [*06E2.0020.0002] # ELEMENT OF WITH DOT ABOVE 22F6 ; [*06E3.0020.0002] # ELEMENT OF WITH OVERBAR 22F7 ; [*06E4.0020.0002] # SMALL ELEMENT OF WITH OVERBAR 22F8 ; [*06E5.0020.0002] # ELEMENT OF WITH UNDERBAR 22F9 ; [*06E6.0020.0002] # ELEMENT OF WITH TWO HORIZONTAL STROKES 22FA ; [*06E7.0020.0002] # CONTAINS WITH LONG HORIZONTAL STROKE 22FB ; [*06E8.0020.0002] # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22FC ; [*06E9.0020.0002] # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22FD ; [*06EA.0020.0002] # CONTAINS WITH OVERBAR 22FE ; [*06EB.0020.0002] # SMALL CONTAINS WITH OVERBAR 22FF ; [*06EC.0020.0002] # Z NOTATION BAG MEMBERSHIP 2300 ; [*06ED.0020.0002] # DIAMETER SIGN 2301 ; [*06EE.0020.0002] # ELECTRIC ARROW 2302 ; [*06EF.0020.0002] # HOUSE 2303 ; [*06F0.0020.0002] # UP ARROWHEAD 2304 ; [*06F1.0020.0002] # DOWN ARROWHEAD 2305 ; [*06F2.0020.0002] # PROJECTIVE 2306 ; [*06F3.0020.0002] # PERSPECTIVE 2307 ; [*06F4.0020.0002] # WAVY LINE 2308 ; [*0325.0020.0002] # LEFT CEILING 2309 ; [*0326.0020.0002] # RIGHT CEILING 230A ; [*0327.0020.0002] # LEFT FLOOR 230B ; [*0328.0020.0002] # RIGHT FLOOR 230C ; [*06F5.0020.0002] # BOTTOM RIGHT CROP 230D ; [*06F6.0020.0002] # BOTTOM LEFT CROP 230E ; [*06F7.0020.0002] # TOP RIGHT CROP 230F ; [*06F8.0020.0002] # TOP LEFT CROP 2310 ; [*06F9.0020.0002] # REVERSED NOT SIGN 2311 ; [*06FA.0020.0002] # SQUARE LOZENGE 2312 ; [*06FB.0020.0002] # ARC 2313 ; [*06FC.0020.0002] # SEGMENT 2314 ; [*06FD.0020.0002] # SECTOR 2315 ; [*06FE.0020.0002] # TELEPHONE RECORDER 2316 ; [*06FF.0020.0002] # POSITION INDICATOR 2317 ; [*0700.0020.0002] # VIEWDATA SQUARE 2318 ; [*0701.0020.0002] # PLACE OF INTEREST SIGN 2319 ; [*0702.0020.0002] # TURNED NOT SIGN 231A ; [*0703.0020.0002] # WATCH 231B ; [*0704.0020.0002] # HOURGLASS 231C ; [*0705.0020.0002] # TOP LEFT CORNER 231D ; [*0706.0020.0002] # TOP RIGHT CORNER 231E ; [*0707.0020.0002] # BOTTOM LEFT CORNER 231F ; [*0708.0020.0002] # BOTTOM RIGHT CORNER 2320 ; [*0709.0020.0002] # TOP HALF INTEGRAL 2321 ; [*070A.0020.0002] # BOTTOM HALF INTEGRAL 2322 ; [*070B.0020.0002] # FROWN 2323 ; [*070C.0020.0002] # SMILE 2324 ; [*070D.0020.0002] # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS 2325 ; [*070E.0020.0002] # OPTION KEY 2326 ; [*070F.0020.0002] # ERASE TO THE RIGHT 2327 ; [*0710.0020.0002] # X IN A RECTANGLE BOX 2328 ; [*0711.0020.0002] # KEYBOARD 2329 ; [*036F.0020.0002] # LEFT-POINTING ANGLE BRACKET 232A ; [*0370.0020.0002] # RIGHT-POINTING ANGLE BRACKET 232B ; [*0712.0020.0002] # ERASE TO THE LEFT 232C ; [*0713.0020.0002] # BENZENE RING 232D ; [*0714.0020.0002] # CYLINDRICITY 232E ; [*0715.0020.0002] # ALL AROUND-PROFILE 232F ; [*0716.0020.0002] # SYMMETRY 2330 ; [*0717.0020.0002] # TOTAL RUNOUT 2331 ; [*0718.0020.0002] # DIMENSION ORIGIN 2332 ; [*0719.0020.0002] # CONICAL TAPER 2333 ; [*071A.0020.0002] # SLOPE 2334 ; [*071B.0020.0002] # COUNTERBORE 2335 ; [*071C.0020.0002] # COUNTERSINK 2336 ; [*071D.0020.0002] # APL FUNCTIONAL SYMBOL I-BEAM 2337 ; [*071E.0020.0002] # APL FUNCTIONAL SYMBOL SQUISH QUAD 2338 ; [*071F.0020.0002] # APL FUNCTIONAL SYMBOL QUAD EQUAL 2339 ; [*0720.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIVIDE 233A ; [*0721.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIAMOND 233B ; [*0722.0020.0002] # APL FUNCTIONAL SYMBOL QUAD JOT 233C ; [*0723.0020.0002] # APL FUNCTIONAL SYMBOL QUAD CIRCLE 233D ; [*0724.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STILE 233E ; [*0725.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE JOT 233F ; [*0726.0020.0002] # APL FUNCTIONAL SYMBOL SLASH BAR 2340 ; [*0727.0020.0002] # APL FUNCTIONAL SYMBOL BACKSLASH BAR 2341 ; [*0728.0020.0002] # APL FUNCTIONAL SYMBOL QUAD SLASH 2342 ; [*0729.0020.0002] # APL FUNCTIONAL SYMBOL QUAD BACKSLASH 2343 ; [*072A.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LESS-THAN 2344 ; [*072B.0020.0002] # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN 2345 ; [*072C.0020.0002] # APL FUNCTIONAL SYMBOL LEFTWARDS VANE 2346 ; [*072D.0020.0002] # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE 2347 ; [*072E.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW 2348 ; [*072F.0020.0002] # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW 2349 ; [*0730.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH 234A ; [*0731.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR 234B ; [*0732.0020.0002] # APL FUNCTIONAL SYMBOL DELTA STILE 234C ; [*0733.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWN CARET 234D ; [*0734.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DELTA 234E ; [*0735.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK JOT 234F ; [*0736.0020.0002] # APL FUNCTIONAL SYMBOL UPWARDS VANE 2350 ; [*0737.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW 2351 ; [*0738.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK OVERBAR 2352 ; [*0739.0020.0002] # APL FUNCTIONAL SYMBOL DEL STILE 2353 ; [*073A.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UP CARET 2354 ; [*073B.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DEL 2355 ; [*073C.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK JOT 2356 ; [*073D.0020.0002] # APL FUNCTIONAL SYMBOL DOWNWARDS VANE 2357 ; [*073E.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW 2358 ; [*073F.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR 2359 ; [*0740.0020.0002] # APL FUNCTIONAL SYMBOL DELTA UNDERBAR 235A ; [*0741.0020.0002] # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR 235B ; [*0742.0020.0002] # APL FUNCTIONAL SYMBOL JOT UNDERBAR 235C ; [*0743.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR 235D ; [*0744.0020.0002] # APL FUNCTIONAL SYMBOL UP SHOE JOT 235E ; [*0745.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE QUAD 235F ; [*0746.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STAR 2360 ; [*0747.0020.0002] # APL FUNCTIONAL SYMBOL QUAD COLON 2361 ; [*0748.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS 2362 ; [*0749.0020.0002] # APL FUNCTIONAL SYMBOL DEL DIAERESIS 2363 ; [*074A.0020.0002] # APL FUNCTIONAL SYMBOL STAR DIAERESIS 2364 ; [*074B.0020.0002] # APL FUNCTIONAL SYMBOL JOT DIAERESIS 2365 ; [*074C.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS 2366 ; [*074D.0020.0002] # APL FUNCTIONAL SYMBOL DOWN SHOE STILE 2367 ; [*074E.0020.0002] # APL FUNCTIONAL SYMBOL LEFT SHOE STILE 2368 ; [*074F.0020.0002] # APL FUNCTIONAL SYMBOL TILDE DIAERESIS 2369 ; [*0750.0020.0002] # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS 236A ; [*0751.0020.0002] # APL FUNCTIONAL SYMBOL COMMA BAR 236B ; [*0752.0020.0002] # APL FUNCTIONAL SYMBOL DEL TILDE 236C ; [*0753.0020.0002] # APL FUNCTIONAL SYMBOL ZILDE 236D ; [*0754.0020.0002] # APL FUNCTIONAL SYMBOL STILE TILDE 236E ; [*0755.0020.0002] # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR 236F ; [*0756.0020.0002] # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL 2370 ; [*0757.0020.0002] # APL FUNCTIONAL SYMBOL QUAD QUESTION 2371 ; [*0758.0020.0002] # APL FUNCTIONAL SYMBOL DOWN CARET TILDE 2372 ; [*0759.0020.0002] # APL FUNCTIONAL SYMBOL UP CARET TILDE 2373 ; [*075A.0020.0002] # APL FUNCTIONAL SYMBOL IOTA 2374 ; [*075B.0020.0002] # APL FUNCTIONAL SYMBOL RHO 2375 ; [*075C.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA 2376 ; [*075D.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR 2377 ; [*075E.0020.0002] # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR 2378 ; [*075F.0020.0002] # APL FUNCTIONAL SYMBOL IOTA UNDERBAR 2379 ; [*0760.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR 237A ; [*0761.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA 237B ; [*0762.0020.0002] # NOT CHECK MARK 237C ; [*0763.0020.0002] # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW 237D ; [*0764.0020.0002] # SHOULDERED OPEN BOX 237E ; [*0765.0020.0002] # BELL SYMBOL 237F ; [*0766.0020.0002] # VERTICAL LINE WITH MIDDLE DOT 2380 ; [*0767.0020.0002] # INSERTION SYMBOL 2381 ; [*0768.0020.0002] # CONTINUOUS UNDERLINE SYMBOL 2382 ; [*0769.0020.0002] # DISCONTINUOUS UNDERLINE SYMBOL 2383 ; [*076A.0020.0002] # EMPHASIS SYMBOL 2384 ; [*076B.0020.0002] # COMPOSITION SYMBOL 2385 ; [*076C.0020.0002] # WHITE SQUARE WITH CENTRE VERTICAL LINE 2386 ; [*076D.0020.0002] # ENTER SYMBOL 2387 ; [*076E.0020.0002] # ALTERNATIVE KEY SYMBOL 2388 ; [*076F.0020.0002] # HELM SYMBOL 2389 ; [*0770.0020.0002] # CIRCLED HORIZONTAL BAR WITH NOTCH 238A ; [*0771.0020.0002] # CIRCLED TRIANGLE DOWN 238B ; [*0772.0020.0002] # BROKEN CIRCLE WITH NORTHWEST ARROW 238C ; [*0773.0020.0002] # UNDO SYMBOL 238D ; [*0774.0020.0002] # MONOSTABLE SYMBOL 238E ; [*0775.0020.0002] # HYSTERESIS SYMBOL 238F ; [*0776.0020.0002] # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL 2390 ; [*0777.0020.0002] # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL 2391 ; [*0778.0020.0002] # PASSIVE-PULL-DOWN-OUTPUT SYMBOL 2392 ; [*0779.0020.0002] # PASSIVE-PULL-UP-OUTPUT SYMBOL 2393 ; [*077A.0020.0002] # DIRECT CURRENT SYMBOL FORM TWO 2394 ; [*077B.0020.0002] # SOFTWARE-FUNCTION SYMBOL 2395 ; [*077C.0020.0002] # APL FUNCTIONAL SYMBOL QUAD 2396 ; [*077D.0020.0002] # DECIMAL SEPARATOR KEY SYMBOL 2397 ; [*077E.0020.0002] # PREVIOUS PAGE 2398 ; [*077F.0020.0002] # NEXT PAGE 2399 ; [*0780.0020.0002] # PRINT SCREEN SYMBOL 239A ; [*0781.0020.0002] # CLEAR SCREEN SYMBOL 239B ; [*0782.0020.0002] # LEFT PARENTHESIS UPPER HOOK 239C ; [*0783.0020.0002] # LEFT PARENTHESIS EXTENSION 239D ; [*0784.0020.0002] # LEFT PARENTHESIS LOWER HOOK 239E ; [*0785.0020.0002] # RIGHT PARENTHESIS UPPER HOOK 239F ; [*0786.0020.0002] # RIGHT PARENTHESIS EXTENSION 23A0 ; [*0787.0020.0002] # RIGHT PARENTHESIS LOWER HOOK 23A1 ; [*0788.0020.0002] # LEFT SQUARE BRACKET UPPER CORNER 23A2 ; [*0789.0020.0002] # LEFT SQUARE BRACKET EXTENSION 23A3 ; [*078A.0020.0002] # LEFT SQUARE BRACKET LOWER CORNER 23A4 ; [*078B.0020.0002] # RIGHT SQUARE BRACKET UPPER CORNER 23A5 ; [*078C.0020.0002] # RIGHT SQUARE BRACKET EXTENSION 23A6 ; [*078D.0020.0002] # RIGHT SQUARE BRACKET LOWER CORNER 23A7 ; [*078E.0020.0002] # LEFT CURLY BRACKET UPPER HOOK 23A8 ; [*078F.0020.0002] # LEFT CURLY BRACKET MIDDLE PIECE 23A9 ; [*0790.0020.0002] # LEFT CURLY BRACKET LOWER HOOK 23AA ; [*0791.0020.0002] # CURLY BRACKET EXTENSION 23AB ; [*0792.0020.0002] # RIGHT CURLY BRACKET UPPER HOOK 23AC ; [*0793.0020.0002] # RIGHT CURLY BRACKET MIDDLE PIECE 23AD ; [*0794.0020.0002] # RIGHT CURLY BRACKET LOWER HOOK 23AE ; [*0795.0020.0002] # INTEGRAL EXTENSION 23AF ; [*0796.0020.0002] # HORIZONTAL LINE EXTENSION 23B0 ; [*0797.0020.0002] # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION 23B1 ; [*0798.0020.0002] # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION 23B2 ; [*0799.0020.0002] # SUMMATION TOP 23B3 ; [*079A.0020.0002] # SUMMATION BOTTOM 23B4 ; [*079B.0020.0002] # TOP SQUARE BRACKET 23B5 ; [*079C.0020.0002] # BOTTOM SQUARE BRACKET 23B6 ; [*079D.0020.0002] # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET 23B7 ; [*079E.0020.0002] # RADICAL SYMBOL BOTTOM 23B8 ; [*079F.0020.0002] # LEFT VERTICAL BOX LINE 23B9 ; [*07A0.0020.0002] # RIGHT VERTICAL BOX LINE 23BA ; [*07A1.0020.0002] # HORIZONTAL SCAN LINE-1 23BB ; [*07A2.0020.0002] # HORIZONTAL SCAN LINE-3 23BC ; [*07A3.0020.0002] # HORIZONTAL SCAN LINE-7 23BD ; [*07A4.0020.0002] # HORIZONTAL SCAN LINE-9 23BE ; [*07A5.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT 23BF ; [*07A6.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT 23C0 ; [*07A7.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE 23C1 ; [*07A8.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE 23C2 ; [*07A9.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE 23C3 ; [*07AA.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE 23C4 ; [*07AB.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE 23C5 ; [*07AC.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE 23C6 ; [*07AD.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE 23C7 ; [*07AE.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE 23C8 ; [*07AF.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE 23C9 ; [*07B0.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL 23CA ; [*07B1.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL 23CB ; [*07B2.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT 23CC ; [*07B3.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT 23CD ; [*07B4.0020.0002] # SQUARE FOOT 23CE ; [*07B5.0020.0002] # RETURN SYMBOL 23CF ; [*07B6.0020.0002] # EJECT SYMBOL 23D0 ; [*07B7.0020.0002] # VERTICAL LINE EXTENSION 23D1 ; [*07B8.0020.0002] # METRICAL BREVE 23D2 ; [*07B9.0020.0002] # METRICAL LONG OVER SHORT 23D3 ; [*07BA.0020.0002] # METRICAL SHORT OVER LONG 23D4 ; [*07BB.0020.0002] # METRICAL LONG OVER TWO SHORTS 23D5 ; [*07BC.0020.0002] # METRICAL TWO SHORTS OVER LONG 23D6 ; [*07BD.0020.0002] # METRICAL TWO SHORTS JOINED 23D7 ; [*07BE.0020.0002] # METRICAL TRISEME 23D8 ; [*07BF.0020.0002] # METRICAL TETRASEME 23D9 ; [*07C0.0020.0002] # METRICAL PENTASEME 23DA ; [*07C1.0020.0002] # EARTH GROUND 23DB ; [*07C2.0020.0002] # FUSE 23DC ; [*07C3.0020.0002] # TOP PARENTHESIS 23DD ; [*07C4.0020.0002] # BOTTOM PARENTHESIS 23DE ; [*07C5.0020.0002] # TOP CURLY BRACKET 23DF ; [*07C6.0020.0002] # BOTTOM CURLY BRACKET 23E0 ; [*07C7.0020.0002] # TOP TORTOISE SHELL BRACKET 23E1 ; [*07C8.0020.0002] # BOTTOM TORTOISE SHELL BRACKET 23E2 ; [*07C9.0020.0002] # WHITE TRAPEZIUM 23E3 ; [*07CA.0020.0002] # BENZENE RING WITH CIRCLE 23E4 ; [*07CB.0020.0002] # STRAIGHTNESS 23E5 ; [*07CC.0020.0002] # FLATNESS 23E6 ; [*07CD.0020.0002] # AC CURRENT 23E7 ; [*07CE.0020.0002] # ELECTRICAL INTERSECTION 23E8 ; [*07CF.0020.0002] # DECIMAL EXPONENT SYMBOL 23E9 ; [*07D0.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE 23EA ; [*07D1.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE 23EB ; [*07D2.0020.0002] # BLACK UP-POINTING DOUBLE TRIANGLE 23EC ; [*07D3.0020.0002] # BLACK DOWN-POINTING DOUBLE TRIANGLE 23ED ; [*07D4.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR 23EE ; [*07D5.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR 23EF ; [*07D6.0020.0002] # BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR 23F0 ; [*07D7.0020.0002] # ALARM CLOCK 23F1 ; [*07D8.0020.0002] # STOPWATCH 23F2 ; [*07D9.0020.0002] # TIMER CLOCK 23F3 ; [*07DA.0020.0002] # HOURGLASS WITH FLOWING SAND 23F4 ; [*07DB.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE 23F5 ; [*07DC.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE 23F6 ; [*07DD.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE 23F7 ; [*07DE.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE 23F8 ; [*07DF.0020.0002] # DOUBLE VERTICAL BAR 23F9 ; [*07E0.0020.0002] # BLACK SQUARE FOR STOP 23FA ; [*07E1.0020.0002] # BLACK CIRCLE FOR RECORD 23FB ; [*07E2.0020.0002] # POWER SYMBOL 23FC ; [*07E3.0020.0002] # POWER ON-OFF SYMBOL 23FD ; [*07E4.0020.0002] # POWER ON SYMBOL 23FE ; [*07E5.0020.0002] # POWER SLEEP SYMBOL 2400 ; [*07E6.0020.0002] # SYMBOL FOR NULL 2401 ; [*07E7.0020.0002] # SYMBOL FOR START OF HEADING 2402 ; [*07E8.0020.0002] # SYMBOL FOR START OF TEXT 2403 ; [*07E9.0020.0002] # SYMBOL FOR END OF TEXT 2404 ; [*07EA.0020.0002] # SYMBOL FOR END OF TRANSMISSION 2405 ; [*07EB.0020.0002] # SYMBOL FOR ENQUIRY 2406 ; [*07EC.0020.0002] # SYMBOL FOR ACKNOWLEDGE 2407 ; [*07ED.0020.0002] # SYMBOL FOR BELL 2408 ; [*07EE.0020.0002] # SYMBOL FOR BACKSPACE 2409 ; [*07EF.0020.0002] # SYMBOL FOR HORIZONTAL TABULATION 240A ; [*07F0.0020.0002] # SYMBOL FOR LINE FEED 240B ; [*07F1.0020.0002] # SYMBOL FOR VERTICAL TABULATION 240C ; [*07F2.0020.0002] # SYMBOL FOR FORM FEED 240D ; [*07F3.0020.0002] # SYMBOL FOR CARRIAGE RETURN 240E ; [*07F4.0020.0002] # SYMBOL FOR SHIFT OUT 240F ; [*07F5.0020.0002] # SYMBOL FOR SHIFT IN 2410 ; [*07F6.0020.0002] # SYMBOL FOR DATA LINK ESCAPE 2411 ; [*07F7.0020.0002] # SYMBOL FOR DEVICE CONTROL ONE 2412 ; [*07F8.0020.0002] # SYMBOL FOR DEVICE CONTROL TWO 2413 ; [*07F9.0020.0002] # SYMBOL FOR DEVICE CONTROL THREE 2414 ; [*07FA.0020.0002] # SYMBOL FOR DEVICE CONTROL FOUR 2415 ; [*07FB.0020.0002] # SYMBOL FOR NEGATIVE ACKNOWLEDGE 2416 ; [*07FC.0020.0002] # SYMBOL FOR SYNCHRONOUS IDLE 2417 ; [*07FD.0020.0002] # SYMBOL FOR END OF TRANSMISSION BLOCK 2418 ; [*07FE.0020.0002] # SYMBOL FOR CANCEL 2419 ; [*07FF.0020.0002] # SYMBOL FOR END OF MEDIUM 241A ; [*0800.0020.0002] # SYMBOL FOR SUBSTITUTE 241B ; [*0801.0020.0002] # SYMBOL FOR ESCAPE 241C ; [*0802.0020.0002] # SYMBOL FOR FILE SEPARATOR 241D ; [*0803.0020.0002] # SYMBOL FOR GROUP SEPARATOR 241E ; [*0804.0020.0002] # SYMBOL FOR RECORD SEPARATOR 241F ; [*0805.0020.0002] # SYMBOL FOR UNIT SEPARATOR 2420 ; [*0806.0020.0002] # SYMBOL FOR SPACE 2421 ; [*0807.0020.0002] # SYMBOL FOR DELETE 2422 ; [*0808.0020.0002] # BLANK SYMBOL 2423 ; [*0809.0020.0002] # OPEN BOX 2424 ; [*080A.0020.0002] # SYMBOL FOR NEWLINE 2425 ; [*080B.0020.0002] # SYMBOL FOR DELETE FORM TWO 2426 ; [*080C.0020.0002] # SYMBOL FOR SUBSTITUTE FORM TWO 2440 ; [*080D.0020.0002] # OCR HOOK 2441 ; [*080E.0020.0002] # OCR CHAIR 2442 ; [*080F.0020.0002] # OCR FORK 2443 ; [*0810.0020.0002] # OCR INVERTED FORK 2444 ; [*0811.0020.0002] # OCR BELT BUCKLE 2445 ; [*0812.0020.0002] # OCR BOW TIE 2446 ; [*0813.0020.0002] # OCR BRANCH BANK IDENTIFICATION 2447 ; [*0814.0020.0002] # OCR AMOUNT OF CHECK 2448 ; [*0815.0020.0002] # OCR DASH 2449 ; [*0816.0020.0002] # OCR CUSTOMER ACCOUNT NUMBER 244A ; [*0817.0020.0002] # OCR DOUBLE BACKSLASH 2500 ; [*0818.0020.0002] # BOX DRAWINGS LIGHT HORIZONTAL 2501 ; [*0819.0020.0002] # BOX DRAWINGS HEAVY HORIZONTAL 2502 ; [*081A.0020.0002] # BOX DRAWINGS LIGHT VERTICAL 2503 ; [*081B.0020.0002] # BOX DRAWINGS HEAVY VERTICAL 2504 ; [*081C.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL 2505 ; [*081D.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL 2506 ; [*081E.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL 2507 ; [*081F.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL 2508 ; [*0820.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL 2509 ; [*0821.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL 250A ; [*0822.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL 250B ; [*0823.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL 250C ; [*0824.0020.0002] # BOX DRAWINGS LIGHT DOWN AND RIGHT 250D ; [*0825.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY 250E ; [*0826.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT 250F ; [*0827.0020.0002] # BOX DRAWINGS HEAVY DOWN AND RIGHT 2510 ; [*0828.0020.0002] # BOX DRAWINGS LIGHT DOWN AND LEFT 2511 ; [*0829.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY 2512 ; [*082A.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT 2513 ; [*082B.0020.0002] # BOX DRAWINGS HEAVY DOWN AND LEFT 2514 ; [*082C.0020.0002] # BOX DRAWINGS LIGHT UP AND RIGHT 2515 ; [*082D.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY 2516 ; [*082E.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT 2517 ; [*082F.0020.0002] # BOX DRAWINGS HEAVY UP AND RIGHT 2518 ; [*0830.0020.0002] # BOX DRAWINGS LIGHT UP AND LEFT 2519 ; [*0831.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT HEAVY 251A ; [*0832.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT LIGHT 251B ; [*0833.0020.0002] # BOX DRAWINGS HEAVY UP AND LEFT 251C ; [*0834.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND RIGHT 251D ; [*0835.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY 251E ; [*0836.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT 251F ; [*0837.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT 2520 ; [*0838.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT 2521 ; [*0839.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY 2522 ; [*083A.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY 2523 ; [*083B.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND RIGHT 2524 ; [*083C.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND LEFT 2525 ; [*083D.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY 2526 ; [*083E.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT 2527 ; [*083F.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT 2528 ; [*0840.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT 2529 ; [*0841.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY 252A ; [*0842.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY 252B ; [*0843.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND LEFT 252C ; [*0844.0020.0002] # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 252D ; [*0845.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT 252E ; [*0846.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT 252F ; [*0847.0020.0002] # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY 2530 ; [*0848.0020.0002] # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT 2531 ; [*0849.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY 2532 ; [*084A.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY 2533 ; [*084B.0020.0002] # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL 2534 ; [*084C.0020.0002] # BOX DRAWINGS LIGHT UP AND HORIZONTAL 2535 ; [*084D.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT 2536 ; [*084E.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT 2537 ; [*084F.0020.0002] # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY 2538 ; [*0850.0020.0002] # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT 2539 ; [*0851.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY 253A ; [*0852.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY 253B ; [*0853.0020.0002] # BOX DRAWINGS HEAVY UP AND HORIZONTAL 253C ; [*0854.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 253D ; [*0855.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT 253E ; [*0856.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT 253F ; [*0857.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY 2540 ; [*0858.0020.0002] # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT 2541 ; [*0859.0020.0002] # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT 2542 ; [*085A.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT 2543 ; [*085B.0020.0002] # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT 2544 ; [*085C.0020.0002] # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT 2545 ; [*085D.0020.0002] # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT 2546 ; [*085E.0020.0002] # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT 2547 ; [*085F.0020.0002] # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY 2548 ; [*0860.0020.0002] # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY 2549 ; [*0861.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY 254A ; [*0862.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY 254B ; [*0863.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL 254C ; [*0864.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL 254D ; [*0865.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL 254E ; [*0866.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL 254F ; [*0867.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL 2550 ; [*0868.0020.0002] # BOX DRAWINGS DOUBLE HORIZONTAL 2551 ; [*0869.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL 2552 ; [*086A.0020.0002] # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 2553 ; [*086B.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 2554 ; [*086C.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND RIGHT 2555 ; [*086D.0020.0002] # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 2556 ; [*086E.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 2557 ; [*086F.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND LEFT 2558 ; [*0870.0020.0002] # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 2559 ; [*0871.0020.0002] # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 255A ; [*0872.0020.0002] # BOX DRAWINGS DOUBLE UP AND RIGHT 255B ; [*0873.0020.0002] # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 255C ; [*0874.0020.0002] # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 255D ; [*0875.0020.0002] # BOX DRAWINGS DOUBLE UP AND LEFT 255E ; [*0876.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 255F ; [*0877.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 2560 ; [*0878.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 2561 ; [*0879.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 2562 ; [*087A.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 2563 ; [*087B.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND LEFT 2564 ; [*087C.0020.0002] # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 2565 ; [*087D.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 2566 ; [*087E.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 2567 ; [*087F.0020.0002] # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 2568 ; [*0880.0020.0002] # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 2569 ; [*0881.0020.0002] # BOX DRAWINGS DOUBLE UP AND HORIZONTAL 256A ; [*0882.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 256B ; [*0883.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 256C ; [*0884.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 256D ; [*0885.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT 256E ; [*0886.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND LEFT 256F ; [*0887.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND LEFT 2570 ; [*0888.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND RIGHT 2571 ; [*0889.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT 2572 ; [*088A.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT 2573 ; [*088B.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL CROSS 2574 ; [*088C.0020.0002] # BOX DRAWINGS LIGHT LEFT 2575 ; [*088D.0020.0002] # BOX DRAWINGS LIGHT UP 2576 ; [*088E.0020.0002] # BOX DRAWINGS LIGHT RIGHT 2577 ; [*088F.0020.0002] # BOX DRAWINGS LIGHT DOWN 2578 ; [*0890.0020.0002] # BOX DRAWINGS HEAVY LEFT 2579 ; [*0891.0020.0002] # BOX DRAWINGS HEAVY UP 257A ; [*0892.0020.0002] # BOX DRAWINGS HEAVY RIGHT 257B ; [*0893.0020.0002] # BOX DRAWINGS HEAVY DOWN 257C ; [*0894.0020.0002] # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT 257D ; [*0895.0020.0002] # BOX DRAWINGS LIGHT UP AND HEAVY DOWN 257E ; [*0896.0020.0002] # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT 257F ; [*0897.0020.0002] # BOX DRAWINGS HEAVY UP AND LIGHT DOWN 2580 ; [*0898.0020.0002] # UPPER HALF BLOCK 2581 ; [*0899.0020.0002] # LOWER ONE EIGHTH BLOCK 2582 ; [*089A.0020.0002] # LOWER ONE QUARTER BLOCK 2583 ; [*089B.0020.0002] # LOWER THREE EIGHTHS BLOCK 2584 ; [*089C.0020.0002] # LOWER HALF BLOCK 2585 ; [*089D.0020.0002] # LOWER FIVE EIGHTHS BLOCK 2586 ; [*089E.0020.0002] # LOWER THREE QUARTERS BLOCK 2587 ; [*089F.0020.0002] # LOWER SEVEN EIGHTHS BLOCK 2588 ; [*08A0.0020.0002] # FULL BLOCK 2589 ; [*08A1.0020.0002] # LEFT SEVEN EIGHTHS BLOCK 258A ; [*08A2.0020.0002] # LEFT THREE QUARTERS BLOCK 258B ; [*08A3.0020.0002] # LEFT FIVE EIGHTHS BLOCK 258C ; [*08A4.0020.0002] # LEFT HALF BLOCK 258D ; [*08A5.0020.0002] # LEFT THREE EIGHTHS BLOCK 258E ; [*08A6.0020.0002] # LEFT ONE QUARTER BLOCK 258F ; [*08A7.0020.0002] # LEFT ONE EIGHTH BLOCK 2590 ; [*08A8.0020.0002] # RIGHT HALF BLOCK 2591 ; [*08A9.0020.0002] # LIGHT SHADE 2592 ; [*08AA.0020.0002] # MEDIUM SHADE 2593 ; [*08AB.0020.0002] # DARK SHADE 2594 ; [*08AC.0020.0002] # UPPER ONE EIGHTH BLOCK 2595 ; [*08AD.0020.0002] # RIGHT ONE EIGHTH BLOCK 2596 ; [*08AE.0020.0002] # QUADRANT LOWER LEFT 2597 ; [*08AF.0020.0002] # QUADRANT LOWER RIGHT 2598 ; [*08B0.0020.0002] # QUADRANT UPPER LEFT 2599 ; [*08B1.0020.0002] # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT 259A ; [*08B2.0020.0002] # QUADRANT UPPER LEFT AND LOWER RIGHT 259B ; [*08B3.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT 259C ; [*08B4.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT 259D ; [*08B5.0020.0002] # QUADRANT UPPER RIGHT 259E ; [*08B6.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT 259F ; [*08B7.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT 25A0 ; [*08B8.0020.0002] # BLACK SQUARE 25A1 ; [*08B9.0020.0002] # WHITE SQUARE 25A2 ; [*08BA.0020.0002] # WHITE SQUARE WITH ROUNDED CORNERS 25A3 ; [*08BB.0020.0002] # WHITE SQUARE CONTAINING BLACK SMALL SQUARE 25A4 ; [*08BC.0020.0002] # SQUARE WITH HORIZONTAL FILL 25A5 ; [*08BD.0020.0002] # SQUARE WITH VERTICAL FILL 25A6 ; [*08BE.0020.0002] # SQUARE WITH ORTHOGONAL CROSSHATCH FILL 25A7 ; [*08BF.0020.0002] # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL 25A8 ; [*08C0.0020.0002] # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL 25A9 ; [*08C1.0020.0002] # SQUARE WITH DIAGONAL CROSSHATCH FILL 25AA ; [*08C2.0020.0002] # BLACK SMALL SQUARE 25AB ; [*08C3.0020.0002] # WHITE SMALL SQUARE 25AC ; [*08C4.0020.0002] # BLACK RECTANGLE 25AD ; [*08C5.0020.0002] # WHITE RECTANGLE 25AE ; [*08C6.0020.0002] # BLACK VERTICAL RECTANGLE 25AF ; [*08C7.0020.0002] # WHITE VERTICAL RECTANGLE 25B0 ; [*08C8.0020.0002] # BLACK PARALLELOGRAM 25B1 ; [*08C9.0020.0002] # WHITE PARALLELOGRAM 25B2 ; [*08CA.0020.0002] # BLACK UP-POINTING TRIANGLE 25B3 ; [*08CB.0020.0002] # WHITE UP-POINTING TRIANGLE 25B4 ; [*08CC.0020.0002] # BLACK UP-POINTING SMALL TRIANGLE 25B5 ; [*08CD.0020.0002] # WHITE UP-POINTING SMALL TRIANGLE 25B6 ; [*08CE.0020.0002] # BLACK RIGHT-POINTING TRIANGLE 25B7 ; [*08CF.0020.0002] # WHITE RIGHT-POINTING TRIANGLE 25B8 ; [*08D0.0020.0002] # BLACK RIGHT-POINTING SMALL TRIANGLE 25B9 ; [*08D1.0020.0002] # WHITE RIGHT-POINTING SMALL TRIANGLE 25BA ; [*08D2.0020.0002] # BLACK RIGHT-POINTING POINTER 25BB ; [*08D3.0020.0002] # WHITE RIGHT-POINTING POINTER 25BC ; [*08D4.0020.0002] # BLACK DOWN-POINTING TRIANGLE 25BD ; [*08D5.0020.0002] # WHITE DOWN-POINTING TRIANGLE 25BE ; [*08D6.0020.0002] # BLACK DOWN-POINTING SMALL TRIANGLE 25BF ; [*08D7.0020.0002] # WHITE DOWN-POINTING SMALL TRIANGLE 25C0 ; [*08D8.0020.0002] # BLACK LEFT-POINTING TRIANGLE 25C1 ; [*08D9.0020.0002] # WHITE LEFT-POINTING TRIANGLE 25C2 ; [*08DA.0020.0002] # BLACK LEFT-POINTING SMALL TRIANGLE 25C3 ; [*08DB.0020.0002] # WHITE LEFT-POINTING SMALL TRIANGLE 25C4 ; [*08DC.0020.0002] # BLACK LEFT-POINTING POINTER 25C5 ; [*08DD.0020.0002] # WHITE LEFT-POINTING POINTER 25C6 ; [*08DE.0020.0002] # BLACK DIAMOND 25C7 ; [*08DF.0020.0002] # WHITE DIAMOND 25C8 ; [*08E0.0020.0002] # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND 25C9 ; [*08E1.0020.0002] # FISHEYE 25CA ; [*08E2.0020.0002] # LOZENGE 25CB ; [*08E3.0020.0002] # WHITE CIRCLE 25CC ; [*08E4.0020.0002] # DOTTED CIRCLE 25CD ; [*08E5.0020.0002] # CIRCLE WITH VERTICAL FILL 25CE ; [*08E6.0020.0002] # BULLSEYE 25CF ; [*08E7.0020.0002] # BLACK CIRCLE 25D0 ; [*08E8.0020.0002] # CIRCLE WITH LEFT HALF BLACK 25D1 ; [*08E9.0020.0002] # CIRCLE WITH RIGHT HALF BLACK 25D2 ; [*08EA.0020.0002] # CIRCLE WITH LOWER HALF BLACK 25D3 ; [*08EB.0020.0002] # CIRCLE WITH UPPER HALF BLACK 25D4 ; [*08EC.0020.0002] # CIRCLE WITH UPPER RIGHT QUADRANT BLACK 25D5 ; [*08ED.0020.0002] # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK 25D6 ; [*08EE.0020.0002] # LEFT HALF BLACK CIRCLE 25D7 ; [*08EF.0020.0002] # RIGHT HALF BLACK CIRCLE 25D8 ; [*08F0.0020.0002] # INVERSE BULLET 25D9 ; [*08F1.0020.0002] # INVERSE WHITE CIRCLE 25DA ; [*08F2.0020.0002] # UPPER HALF INVERSE WHITE CIRCLE 25DB ; [*08F3.0020.0002] # LOWER HALF INVERSE WHITE CIRCLE 25DC ; [*08F4.0020.0002] # UPPER LEFT QUADRANT CIRCULAR ARC 25DD ; [*08F5.0020.0002] # UPPER RIGHT QUADRANT CIRCULAR ARC 25DE ; [*08F6.0020.0002] # LOWER RIGHT QUADRANT CIRCULAR ARC 25DF ; [*08F7.0020.0002] # LOWER LEFT QUADRANT CIRCULAR ARC 25E0 ; [*08F8.0020.0002] # UPPER HALF CIRCLE 25E1 ; [*08F9.0020.0002] # LOWER HALF CIRCLE 25E2 ; [*08FA.0020.0002] # BLACK LOWER RIGHT TRIANGLE 25E3 ; [*08FB.0020.0002] # BLACK LOWER LEFT TRIANGLE 25E4 ; [*08FC.0020.0002] # BLACK UPPER LEFT TRIANGLE 25E5 ; [*08FD.0020.0002] # BLACK UPPER RIGHT TRIANGLE 25E6 ; [*08FE.0020.0002] # WHITE BULLET 25E7 ; [*08FF.0020.0002] # SQUARE WITH LEFT HALF BLACK 25E8 ; [*0900.0020.0002] # SQUARE WITH RIGHT HALF BLACK 25E9 ; [*0901.0020.0002] # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK 25EA ; [*0902.0020.0002] # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK 25EB ; [*0903.0020.0002] # WHITE SQUARE WITH VERTICAL BISECTING LINE 25EC ; [*0904.0020.0002] # WHITE UP-POINTING TRIANGLE WITH DOT 25ED ; [*0905.0020.0002] # UP-POINTING TRIANGLE WITH LEFT HALF BLACK 25EE ; [*0906.0020.0002] # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK 25EF ; [*0907.0020.0002] # LARGE CIRCLE 25F0 ; [*0908.0020.0002] # WHITE SQUARE WITH UPPER LEFT QUADRANT 25F1 ; [*0909.0020.0002] # WHITE SQUARE WITH LOWER LEFT QUADRANT 25F2 ; [*090A.0020.0002] # WHITE SQUARE WITH LOWER RIGHT QUADRANT 25F3 ; [*090B.0020.0002] # WHITE SQUARE WITH UPPER RIGHT QUADRANT 25F4 ; [*090C.0020.0002] # WHITE CIRCLE WITH UPPER LEFT QUADRANT 25F5 ; [*090D.0020.0002] # WHITE CIRCLE WITH LOWER LEFT QUADRANT 25F6 ; [*090E.0020.0002] # WHITE CIRCLE WITH LOWER RIGHT QUADRANT 25F7 ; [*090F.0020.0002] # WHITE CIRCLE WITH UPPER RIGHT QUADRANT 25F8 ; [*0910.0020.0002] # UPPER LEFT TRIANGLE 25F9 ; [*0911.0020.0002] # UPPER RIGHT TRIANGLE 25FA ; [*0912.0020.0002] # LOWER LEFT TRIANGLE 25FB ; [*0913.0020.0002] # WHITE MEDIUM SQUARE 25FC ; [*0914.0020.0002] # BLACK MEDIUM SQUARE 25FD ; [*0915.0020.0002] # WHITE MEDIUM SMALL SQUARE 25FE ; [*0916.0020.0002] # BLACK MEDIUM SMALL SQUARE 25FF ; [*0917.0020.0002] # LOWER RIGHT TRIANGLE 2600 ; [*0918.0020.0002] # BLACK SUN WITH RAYS 2601 ; [*0919.0020.0002] # CLOUD 2602 ; [*091A.0020.0002] # UMBRELLA 2603 ; [*091B.0020.0002] # SNOWMAN 2604 ; [*091C.0020.0002] # COMET 2605 ; [*091D.0020.0002] # BLACK STAR 2606 ; [*091E.0020.0002] # WHITE STAR 2607 ; [*091F.0020.0002] # LIGHTNING 2608 ; [*0920.0020.0002] # THUNDERSTORM 2609 ; [*0921.0020.0002] # SUN 260A ; [*0922.0020.0002] # ASCENDING NODE 260B ; [*0923.0020.0002] # DESCENDING NODE 260C ; [*0924.0020.0002] # CONJUNCTION 260D ; [*0925.0020.0002] # OPPOSITION 260E ; [*0926.0020.0002] # BLACK TELEPHONE 260F ; [*0927.0020.0002] # WHITE TELEPHONE 2610 ; [*0928.0020.0002] # BALLOT BOX 2611 ; [*0929.0020.0002] # BALLOT BOX WITH CHECK 2612 ; [*092A.0020.0002] # BALLOT BOX WITH X 2613 ; [*092B.0020.0002] # SALTIRE 2614 ; [*092C.0020.0002] # UMBRELLA WITH RAIN DROPS 2615 ; [*092D.0020.0002] # HOT BEVERAGE 2616 ; [*092E.0020.0002] # WHITE SHOGI PIECE 2617 ; [*092F.0020.0002] # BLACK SHOGI PIECE 2618 ; [*0930.0020.0002] # SHAMROCK 2619 ; [*0931.0020.0002] # REVERSED ROTATED FLORAL HEART BULLET 261A ; [*0932.0020.0002] # BLACK LEFT POINTING INDEX 261B ; [*0933.0020.0002] # BLACK RIGHT POINTING INDEX 261C ; [*0934.0020.0002] # WHITE LEFT POINTING INDEX 261D ; [*0935.0020.0002] # WHITE UP POINTING INDEX 261E ; [*0936.0020.0002] # WHITE RIGHT POINTING INDEX 261F ; [*0937.0020.0002] # WHITE DOWN POINTING INDEX 2620 ; [*0938.0020.0002] # SKULL AND CROSSBONES 2621 ; [*0939.0020.0002] # CAUTION SIGN 2622 ; [*093A.0020.0002] # RADIOACTIVE SIGN 2623 ; [*093B.0020.0002] # BIOHAZARD SIGN 2624 ; [*093C.0020.0002] # CADUCEUS 2625 ; [*093D.0020.0002] # ANKH 2626 ; [*093E.0020.0002] # ORTHODOX CROSS 2627 ; [*093F.0020.0002] # CHI RHO 2628 ; [*0940.0020.0002] # CROSS OF LORRAINE 2629 ; [*0941.0020.0002] # CROSS OF JERUSALEM 262A ; [*0942.0020.0002] # STAR AND CRESCENT 262B ; [*0943.0020.0002] # FARSI SYMBOL 262C ; [*0944.0020.0002] # ADI SHAKTI 262D ; [*0945.0020.0002] # HAMMER AND SICKLE 262E ; [*0946.0020.0002] # PEACE SYMBOL 262F ; [*0947.0020.0002] # YIN YANG 2630 ; [*0EA2.0020.0002] # TRIGRAM FOR HEAVEN 2631 ; [*0EA3.0020.0002] # TRIGRAM FOR LAKE 2632 ; [*0EA4.0020.0002] # TRIGRAM FOR FIRE 2633 ; [*0EA5.0020.0002] # TRIGRAM FOR THUNDER 2634 ; [*0EA6.0020.0002] # TRIGRAM FOR WIND 2635 ; [*0EA7.0020.0002] # TRIGRAM FOR WATER 2636 ; [*0EA8.0020.0002] # TRIGRAM FOR MOUNTAIN 2637 ; [*0EA9.0020.0002] # TRIGRAM FOR EARTH 2638 ; [*0948.0020.0002] # WHEEL OF DHARMA 2639 ; [*0949.0020.0002] # WHITE FROWNING FACE 263A ; [*094A.0020.0002] # WHITE SMILING FACE 263B ; [*094B.0020.0002] # BLACK SMILING FACE 263C ; [*094C.0020.0002] # WHITE SUN WITH RAYS 263D ; [*094D.0020.0002] # FIRST QUARTER MOON 263E ; [*094E.0020.0002] # LAST QUARTER MOON 263F ; [*094F.0020.0002] # MERCURY 2640 ; [*0950.0020.0002] # FEMALE SIGN 2641 ; [*0951.0020.0002] # EARTH 2642 ; [*0952.0020.0002] # MALE SIGN 2643 ; [*0953.0020.0002] # JUPITER 2644 ; [*0954.0020.0002] # SATURN 2645 ; [*0955.0020.0002] # URANUS 2646 ; [*0956.0020.0002] # NEPTUNE 2647 ; [*0957.0020.0002] # PLUTO 2648 ; [*0958.0020.0002] # ARIES 2649 ; [*0959.0020.0002] # TAURUS 264A ; [*095A.0020.0002] # GEMINI 264B ; [*095B.0020.0002] # CANCER 264C ; [*095C.0020.0002] # LEO 264D ; [*095D.0020.0002] # VIRGO 264E ; [*095E.0020.0002] # LIBRA 264F ; [*095F.0020.0002] # SCORPIUS 2650 ; [*0960.0020.0002] # SAGITTARIUS 2651 ; [*0961.0020.0002] # CAPRICORN 2652 ; [*0962.0020.0002] # AQUARIUS 2653 ; [*0963.0020.0002] # PISCES 2654 ; [*0964.0020.0002] # WHITE CHESS KING 2655 ; [*0965.0020.0002] # WHITE CHESS QUEEN 2656 ; [*0966.0020.0002] # WHITE CHESS ROOK 2657 ; [*0967.0020.0002] # WHITE CHESS BISHOP 2658 ; [*0968.0020.0002] # WHITE CHESS KNIGHT 2659 ; [*0969.0020.0002] # WHITE CHESS PAWN 265A ; [*096A.0020.0002] # BLACK CHESS KING 265B ; [*096B.0020.0002] # BLACK CHESS QUEEN 265C ; [*096C.0020.0002] # BLACK CHESS ROOK 265D ; [*096D.0020.0002] # BLACK CHESS BISHOP 265E ; [*096E.0020.0002] # BLACK CHESS KNIGHT 265F ; [*096F.0020.0002] # BLACK CHESS PAWN 2660 ; [*0970.0020.0002] # BLACK SPADE SUIT 2661 ; [*0971.0020.0002] # WHITE HEART SUIT 2662 ; [*0972.0020.0002] # WHITE DIAMOND SUIT 2663 ; [*0973.0020.0002] # BLACK CLUB SUIT 2664 ; [*0974.0020.0002] # WHITE SPADE SUIT 2665 ; [*0975.0020.0002] # BLACK HEART SUIT 2666 ; [*0976.0020.0002] # BLACK DIAMOND SUIT 2667 ; [*0977.0020.0002] # WHITE CLUB SUIT 2668 ; [*0978.0020.0002] # HOT SPRINGS 2669 ; [*0979.0020.0002] # QUARTER NOTE 266A ; [*097A.0020.0002] # EIGHTH NOTE 266B ; [*097B.0020.0002] # BEAMED EIGHTH NOTES 266C ; [*097C.0020.0002] # BEAMED SIXTEENTH NOTES 266D ; [*10F3.0020.0002] # MUSIC FLAT SIGN 266E ; [*10F4.0020.0002] # MUSIC NATURAL SIGN 266F ; [*10F5.0020.0002] # MUSIC SHARP SIGN 2670 ; [*097D.0020.0002] # WEST SYRIAC CROSS 2671 ; [*097E.0020.0002] # EAST SYRIAC CROSS 2672 ; [*097F.0020.0002] # UNIVERSAL RECYCLING SYMBOL 2673 ; [*0980.0020.0002] # RECYCLING SYMBOL FOR TYPE-1 PLASTICS 2674 ; [*0981.0020.0002] # RECYCLING SYMBOL FOR TYPE-2 PLASTICS 2675 ; [*0982.0020.0002] # RECYCLING SYMBOL FOR TYPE-3 PLASTICS 2676 ; [*0983.0020.0002] # RECYCLING SYMBOL FOR TYPE-4 PLASTICS 2677 ; [*0984.0020.0002] # RECYCLING SYMBOL FOR TYPE-5 PLASTICS 2678 ; [*0985.0020.0002] # RECYCLING SYMBOL FOR TYPE-6 PLASTICS 2679 ; [*0986.0020.0002] # RECYCLING SYMBOL FOR TYPE-7 PLASTICS 267A ; [*0987.0020.0002] # RECYCLING SYMBOL FOR GENERIC MATERIALS 267B ; [*0988.0020.0002] # BLACK UNIVERSAL RECYCLING SYMBOL 267C ; [*0989.0020.0002] # RECYCLED PAPER SYMBOL 267D ; [*098A.0020.0002] # PARTIALLY-RECYCLED PAPER SYMBOL 267E ; [*098B.0020.0002] # PERMANENT PAPER SIGN 267F ; [*098C.0020.0002] # WHEELCHAIR SYMBOL 2680 ; [*098D.0020.0002] # DIE FACE-1 2681 ; [*098E.0020.0002] # DIE FACE-2 2682 ; [*098F.0020.0002] # DIE FACE-3 2683 ; [*0990.0020.0002] # DIE FACE-4 2684 ; [*0991.0020.0002] # DIE FACE-5 2685 ; [*0992.0020.0002] # DIE FACE-6 2686 ; [*0993.0020.0002] # WHITE CIRCLE WITH DOT RIGHT 2687 ; [*0994.0020.0002] # WHITE CIRCLE WITH TWO DOTS 2688 ; [*0995.0020.0002] # BLACK CIRCLE WITH WHITE DOT RIGHT 2689 ; [*0996.0020.0002] # BLACK CIRCLE WITH TWO WHITE DOTS 268A ; [*0E9C.0020.0002] # MONOGRAM FOR YANG 268B ; [*0E9D.0020.0002] # MONOGRAM FOR YIN 268C ; [*0E9E.0020.0002] # DIGRAM FOR GREATER YANG 268D ; [*0E9F.0020.0002] # DIGRAM FOR LESSER YIN 268E ; [*0EA0.0020.0002] # DIGRAM FOR LESSER YANG 268F ; [*0EA1.0020.0002] # DIGRAM FOR GREATER YIN 2690 ; [*0997.0020.0002] # WHITE FLAG 2691 ; [*0998.0020.0002] # BLACK FLAG 2692 ; [*0999.0020.0002] # HAMMER AND PICK 2693 ; [*099A.0020.0002] # ANCHOR 2694 ; [*099B.0020.0002] # CROSSED SWORDS 2695 ; [*099C.0020.0002] # STAFF OF AESCULAPIUS 2696 ; [*099D.0020.0002] # SCALES 2697 ; [*099E.0020.0002] # ALEMBIC 2698 ; [*099F.0020.0002] # FLOWER 2699 ; [*09A0.0020.0002] # GEAR 269A ; [*09A1.0020.0002] # STAFF OF HERMES 269B ; [*09A2.0020.0002] # ATOM SYMBOL 269C ; [*09A3.0020.0002] # FLEUR-DE-LIS 269D ; [*09A4.0020.0002] # OUTLINED WHITE STAR 269E ; [*09A5.0020.0002] # THREE LINES CONVERGING RIGHT 269F ; [*09A6.0020.0002] # THREE LINES CONVERGING LEFT 26A0 ; [*09A7.0020.0002] # WARNING SIGN 26A1 ; [*09A8.0020.0002] # HIGH VOLTAGE SIGN 26A2 ; [*09A9.0020.0002] # DOUBLED FEMALE SIGN 26A3 ; [*09AA.0020.0002] # DOUBLED MALE SIGN 26A4 ; [*09AB.0020.0002] # INTERLOCKED FEMALE AND MALE SIGN 26A5 ; [*09AC.0020.0002] # MALE AND FEMALE SIGN 26A6 ; [*09AD.0020.0002] # MALE WITH STROKE SIGN 26A7 ; [*09AE.0020.0002] # MALE WITH STROKE AND MALE AND FEMALE SIGN 26A8 ; [*09AF.0020.0002] # VERTICAL MALE WITH STROKE SIGN 26A9 ; [*09B0.0020.0002] # HORIZONTAL MALE WITH STROKE SIGN 26AA ; [*09B1.0020.0002] # MEDIUM WHITE CIRCLE 26AB ; [*09B2.0020.0002] # MEDIUM BLACK CIRCLE 26AC ; [*09B3.0020.0002] # MEDIUM SMALL WHITE CIRCLE 26AD ; [*09B4.0020.0002] # MARRIAGE SYMBOL 26AE ; [*09B5.0020.0002] # DIVORCE SYMBOL 26AF ; [*09B6.0020.0002] # UNMARRIED PARTNERSHIP SYMBOL 26B0 ; [*09B7.0020.0002] # COFFIN 26B1 ; [*09B8.0020.0002] # FUNERAL URN 26B2 ; [*09B9.0020.0002] # NEUTER 26B3 ; [*09BA.0020.0002] # CERES 26B4 ; [*09BB.0020.0002] # PALLAS 26B5 ; [*09BC.0020.0002] # JUNO 26B6 ; [*09BD.0020.0002] # VESTA 26B7 ; [*09BE.0020.0002] # CHIRON 26B8 ; [*09BF.0020.0002] # BLACK MOON LILITH 26B9 ; [*09C0.0020.0002] # SEXTILE 26BA ; [*09C1.0020.0002] # SEMISEXTILE 26BB ; [*09C2.0020.0002] # QUINCUNX 26BC ; [*09C3.0020.0002] # SESQUIQUADRATE 26BD ; [*09C4.0020.0002] # SOCCER BALL 26BE ; [*09C5.0020.0002] # BASEBALL 26BF ; [*09C6.0020.0002] # SQUARED KEY 26C0 ; [*09C7.0020.0002] # WHITE DRAUGHTS MAN 26C1 ; [*09C8.0020.0002] # WHITE DRAUGHTS KING 26C2 ; [*09C9.0020.0002] # BLACK DRAUGHTS MAN 26C3 ; [*09CA.0020.0002] # BLACK DRAUGHTS KING 26C4 ; [*09CB.0020.0002] # SNOWMAN WITHOUT SNOW 26C5 ; [*09CC.0020.0002] # SUN BEHIND CLOUD 26C6 ; [*09CD.0020.0002] # RAIN 26C7 ; [*09CE.0020.0002] # BLACK SNOWMAN 26C8 ; [*09CF.0020.0002] # THUNDER CLOUD AND RAIN 26C9 ; [*09D0.0020.0002] # TURNED WHITE SHOGI PIECE 26CA ; [*09D1.0020.0002] # TURNED BLACK SHOGI PIECE 26CB ; [*09D2.0020.0002] # WHITE DIAMOND IN SQUARE 26CC ; [*09D3.0020.0002] # CROSSING LANES 26CD ; [*09D4.0020.0002] # DISABLED CAR 26CE ; [*09D5.0020.0002] # OPHIUCHUS 26CF ; [*09D6.0020.0002] # PICK 26D0 ; [*09D7.0020.0002] # CAR SLIDING 26D1 ; [*09D8.0020.0002] # HELMET WITH WHITE CROSS 26D2 ; [*09D9.0020.0002] # CIRCLED CROSSING LANES 26D3 ; [*09DA.0020.0002] # CHAINS 26D4 ; [*09DB.0020.0002] # NO ENTRY 26D5 ; [*09DC.0020.0002] # ALTERNATE ONE-WAY LEFT WAY TRAFFIC 26D6 ; [*09DD.0020.0002] # BLACK TWO-WAY LEFT WAY TRAFFIC 26D7 ; [*09DE.0020.0002] # WHITE TWO-WAY LEFT WAY TRAFFIC 26D8 ; [*09DF.0020.0002] # BLACK LEFT LANE MERGE 26D9 ; [*09E0.0020.0002] # WHITE LEFT LANE MERGE 26DA ; [*09E1.0020.0002] # DRIVE SLOW SIGN 26DB ; [*09E2.0020.0002] # HEAVY WHITE DOWN-POINTING TRIANGLE 26DC ; [*09E3.0020.0002] # LEFT CLOSED ENTRY 26DD ; [*09E4.0020.0002] # SQUARED SALTIRE 26DE ; [*09E5.0020.0002] # FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE 26DF ; [*09E6.0020.0002] # BLACK TRUCK 26E0 ; [*09E7.0020.0002] # RESTRICTED LEFT ENTRY-1 26E1 ; [*09E8.0020.0002] # RESTRICTED LEFT ENTRY-2 26E2 ; [*09E9.0020.0002] # ASTRONOMICAL SYMBOL FOR URANUS 26E3 ; [*09EA.0020.0002] # HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE 26E4 ; [*09EB.0020.0002] # PENTAGRAM 26E5 ; [*09EC.0020.0002] # RIGHT-HANDED INTERLACED PENTAGRAM 26E6 ; [*09ED.0020.0002] # LEFT-HANDED INTERLACED PENTAGRAM 26E7 ; [*09EE.0020.0002] # INVERTED PENTAGRAM 26E8 ; [*09EF.0020.0002] # BLACK CROSS ON SHIELD 26E9 ; [*09F0.0020.0002] # SHINTO SHRINE 26EA ; [*09F1.0020.0002] # CHURCH 26EB ; [*09F2.0020.0002] # CASTLE 26EC ; [*09F3.0020.0002] # HISTORIC SITE 26ED ; [*09F4.0020.0002] # GEAR WITHOUT HUB 26EE ; [*09F5.0020.0002] # GEAR WITH HANDLES 26EF ; [*09F6.0020.0002] # MAP SYMBOL FOR LIGHTHOUSE 26F0 ; [*09F7.0020.0002] # MOUNTAIN 26F1 ; [*09F8.0020.0002] # UMBRELLA ON GROUND 26F2 ; [*09F9.0020.0002] # FOUNTAIN 26F3 ; [*09FA.0020.0002] # FLAG IN HOLE 26F4 ; [*09FB.0020.0002] # FERRY 26F5 ; [*09FC.0020.0002] # SAILBOAT 26F6 ; [*09FD.0020.0002] # SQUARE FOUR CORNERS 26F7 ; [*09FE.0020.0002] # SKIER 26F8 ; [*09FF.0020.0002] # ICE SKATE 26F9 ; [*0A00.0020.0002] # PERSON WITH BALL 26FA ; [*0A01.0020.0002] # TENT 26FB ; [*0A02.0020.0002] # JAPANESE BANK SYMBOL 26FC ; [*0A03.0020.0002] # HEADSTONE GRAVEYARD SYMBOL 26FD ; [*0A04.0020.0002] # FUEL PUMP 26FE ; [*0A05.0020.0002] # CUP ON BLACK SQUARE 26FF ; [*0A06.0020.0002] # WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE 2700 ; [*0A21.0020.0002] # BLACK SAFETY SCISSORS 2701 ; [*0A22.0020.0002] # UPPER BLADE SCISSORS 2702 ; [*0A23.0020.0002] # BLACK SCISSORS 2703 ; [*0A24.0020.0002] # LOWER BLADE SCISSORS 2704 ; [*0A25.0020.0002] # WHITE SCISSORS 2705 ; [*0A26.0020.0002] # WHITE HEAVY CHECK MARK 2706 ; [*0A27.0020.0002] # TELEPHONE LOCATION SIGN 2707 ; [*0A28.0020.0002] # TAPE DRIVE 2708 ; [*0A29.0020.0002] # AIRPLANE 2709 ; [*0A2A.0020.0002] # ENVELOPE 270A ; [*0A2B.0020.0002] # RAISED FIST 270B ; [*0A2C.0020.0002] # RAISED HAND 270C ; [*0A2D.0020.0002] # VICTORY HAND 270D ; [*0A2E.0020.0002] # WRITING HAND 270E ; [*0A2F.0020.0002] # LOWER RIGHT PENCIL 270F ; [*0A30.0020.0002] # PENCIL 2710 ; [*0A31.0020.0002] # UPPER RIGHT PENCIL 2711 ; [*0A32.0020.0002] # WHITE NIB 2712 ; [*0A33.0020.0002] # BLACK NIB 2713 ; [*0A34.0020.0002] # CHECK MARK 2714 ; [*0A35.0020.0002] # HEAVY CHECK MARK 2715 ; [*0A36.0020.0002] # MULTIPLICATION X 2716 ; [*0A37.0020.0002] # HEAVY MULTIPLICATION X 2717 ; [*0A38.0020.0002] # BALLOT X 2718 ; [*0A39.0020.0002] # HEAVY BALLOT X 2719 ; [*0A3A.0020.0002] # OUTLINED GREEK CROSS 271A ; [*0A3B.0020.0002] # HEAVY GREEK CROSS 271B ; [*0A3C.0020.0002] # OPEN CENTRE CROSS 271C ; [*0A3D.0020.0002] # HEAVY OPEN CENTRE CROSS 271D ; [*0A3E.0020.0002] # LATIN CROSS 271E ; [*0A3F.0020.0002] # SHADOWED WHITE LATIN CROSS 271F ; [*0A40.0020.0002] # OUTLINED LATIN CROSS 2720 ; [*0A41.0020.0002] # MALTESE CROSS 2721 ; [*0A42.0020.0002] # STAR OF DAVID 2722 ; [*0A43.0020.0002] # FOUR TEARDROP-SPOKED ASTERISK 2723 ; [*0A44.0020.0002] # FOUR BALLOON-SPOKED ASTERISK 2724 ; [*0A45.0020.0002] # HEAVY FOUR BALLOON-SPOKED ASTERISK 2725 ; [*0A46.0020.0002] # FOUR CLUB-SPOKED ASTERISK 2726 ; [*0A47.0020.0002] # BLACK FOUR POINTED STAR 2727 ; [*0A48.0020.0002] # WHITE FOUR POINTED STAR 2728 ; [*0A49.0020.0002] # SPARKLES 2729 ; [*0A4A.0020.0002] # STRESS OUTLINED WHITE STAR 272A ; [*0A4B.0020.0002] # CIRCLED WHITE STAR 272B ; [*0A4C.0020.0002] # OPEN CENTRE BLACK STAR 272C ; [*0A4D.0020.0002] # BLACK CENTRE WHITE STAR 272D ; [*0A4E.0020.0002] # OUTLINED BLACK STAR 272E ; [*0A4F.0020.0002] # HEAVY OUTLINED BLACK STAR 272F ; [*0A50.0020.0002] # PINWHEEL STAR 2730 ; [*0A51.0020.0002] # SHADOWED WHITE STAR 2731 ; [*0A52.0020.0002] # HEAVY ASTERISK 2732 ; [*0A53.0020.0002] # OPEN CENTRE ASTERISK 2733 ; [*0A54.0020.0002] # EIGHT SPOKED ASTERISK 2734 ; [*0A55.0020.0002] # EIGHT POINTED BLACK STAR 2735 ; [*0A56.0020.0002] # EIGHT POINTED PINWHEEL STAR 2736 ; [*0A57.0020.0002] # SIX POINTED BLACK STAR 2737 ; [*0A58.0020.0002] # EIGHT POINTED RECTILINEAR BLACK STAR 2738 ; [*0A59.0020.0002] # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR 2739 ; [*0A5A.0020.0002] # TWELVE POINTED BLACK STAR 273A ; [*0A5B.0020.0002] # SIXTEEN POINTED ASTERISK 273B ; [*0A5C.0020.0002] # TEARDROP-SPOKED ASTERISK 273C ; [*0A5D.0020.0002] # OPEN CENTRE TEARDROP-SPOKED ASTERISK 273D ; [*0A5E.0020.0002] # HEAVY TEARDROP-SPOKED ASTERISK 273E ; [*0A5F.0020.0002] # SIX PETALLED BLACK AND WHITE FLORETTE 273F ; [*0A60.0020.0002] # BLACK FLORETTE 2740 ; [*0A61.0020.0002] # WHITE FLORETTE 2741 ; [*0A62.0020.0002] # EIGHT PETALLED OUTLINED BLACK FLORETTE 2742 ; [*0A63.0020.0002] # CIRCLED OPEN CENTRE EIGHT POINTED STAR 2743 ; [*0A64.0020.0002] # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK 2744 ; [*0A65.0020.0002] # SNOWFLAKE 2745 ; [*0A66.0020.0002] # TIGHT TRIFOLIATE SNOWFLAKE 2746 ; [*0A67.0020.0002] # HEAVY CHEVRON SNOWFLAKE 2747 ; [*0A68.0020.0002] # SPARKLE 2748 ; [*0A69.0020.0002] # HEAVY SPARKLE 2749 ; [*0A6A.0020.0002] # BALLOON-SPOKED ASTERISK 274A ; [*0A6B.0020.0002] # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK 274B ; [*0A6C.0020.0002] # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK 274C ; [*0A6D.0020.0002] # CROSS MARK 274D ; [*0A6E.0020.0002] # SHADOWED WHITE CIRCLE 274E ; [*0A6F.0020.0002] # NEGATIVE SQUARED CROSS MARK 274F ; [*0A70.0020.0002] # LOWER RIGHT DROP-SHADOWED WHITE SQUARE 2750 ; [*0A71.0020.0002] # UPPER RIGHT DROP-SHADOWED WHITE SQUARE 2751 ; [*0A72.0020.0002] # LOWER RIGHT SHADOWED WHITE SQUARE 2752 ; [*0A73.0020.0002] # UPPER RIGHT SHADOWED WHITE SQUARE 2753 ; [*0A74.0020.0002] # BLACK QUESTION MARK ORNAMENT 2754 ; [*0A75.0020.0002] # WHITE QUESTION MARK ORNAMENT 2755 ; [*0A76.0020.0002] # WHITE EXCLAMATION MARK ORNAMENT 2756 ; [*0A77.0020.0002] # BLACK DIAMOND MINUS WHITE X 2757 ; [*0A78.0020.0002] # HEAVY EXCLAMATION MARK SYMBOL 2758 ; [*0A79.0020.0002] # LIGHT VERTICAL BAR 2759 ; [*0A7A.0020.0002] # MEDIUM VERTICAL BAR 275A ; [*0A7B.0020.0002] # HEAVY VERTICAL BAR 275B ; [*0A7C.0020.0002] # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT 275C ; [*0A7D.0020.0002] # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT 275D ; [*0A7E.0020.0002] # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT 275E ; [*0A7F.0020.0002] # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT 275F ; [*0A80.0020.0002] # HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT 2760 ; [*0A81.0020.0002] # HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT 2761 ; [*0A82.0020.0002] # CURVED STEM PARAGRAPH SIGN ORNAMENT 2762 ; [*0A83.0020.0002] # HEAVY EXCLAMATION MARK ORNAMENT 2763 ; [*0A84.0020.0002] # HEAVY HEART EXCLAMATION MARK ORNAMENT 2764 ; [*0A85.0020.0002] # HEAVY BLACK HEART 2765 ; [*0A86.0020.0002] # ROTATED HEAVY BLACK HEART BULLET 2766 ; [*0A87.0020.0002] # FLORAL HEART 2767 ; [*0A88.0020.0002] # ROTATED FLORAL HEART BULLET 2768 ; [*034D.0020.0002] # MEDIUM LEFT PARENTHESIS ORNAMENT 2769 ; [*034E.0020.0002] # MEDIUM RIGHT PARENTHESIS ORNAMENT 276A ; [*034F.0020.0002] # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT 276B ; [*0350.0020.0002] # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT 276C ; [*0351.0020.0002] # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT 276D ; [*0352.0020.0002] # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT 276E ; [*0353.0020.0002] # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT 276F ; [*0354.0020.0002] # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT 2770 ; [*0355.0020.0002] # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT 2771 ; [*0356.0020.0002] # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT 2772 ; [*0357.0020.0002] # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT 2773 ; [*0358.0020.0002] # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT 2774 ; [*0359.0020.0002] # MEDIUM LEFT CURLY BRACKET ORNAMENT 2775 ; [*035A.0020.0002] # MEDIUM RIGHT CURLY BRACKET ORNAMENT 2794 ; [*0A89.0020.0002] # HEAVY WIDE-HEADED RIGHTWARDS ARROW 2795 ; [*0A8A.0020.0002] # HEAVY PLUS SIGN 2796 ; [*0A8B.0020.0002] # HEAVY MINUS SIGN 2797 ; [*0A8C.0020.0002] # HEAVY DIVISION SIGN 2798 ; [*0A8D.0020.0002] # HEAVY SOUTH EAST ARROW 2799 ; [*0A8E.0020.0002] # HEAVY RIGHTWARDS ARROW 279A ; [*0A8F.0020.0002] # HEAVY NORTH EAST ARROW 279B ; [*0A90.0020.0002] # DRAFTING POINT RIGHTWARDS ARROW 279C ; [*0A91.0020.0002] # HEAVY ROUND-TIPPED RIGHTWARDS ARROW 279D ; [*0A92.0020.0002] # TRIANGLE-HEADED RIGHTWARDS ARROW 279E ; [*0A93.0020.0002] # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW 279F ; [*0A94.0020.0002] # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW 27A0 ; [*0A95.0020.0002] # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW 27A1 ; [*0A96.0020.0002] # BLACK RIGHTWARDS ARROW 27A2 ; [*0A97.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD 27A3 ; [*0A98.0020.0002] # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD 27A4 ; [*0A99.0020.0002] # BLACK RIGHTWARDS ARROWHEAD 27A5 ; [*0A9A.0020.0002] # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW 27A6 ; [*0A9B.0020.0002] # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW 27A7 ; [*0A9C.0020.0002] # SQUAT BLACK RIGHTWARDS ARROW 27A8 ; [*0A9D.0020.0002] # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW 27A9 ; [*0A9E.0020.0002] # RIGHT-SHADED WHITE RIGHTWARDS ARROW 27AA ; [*0A9F.0020.0002] # LEFT-SHADED WHITE RIGHTWARDS ARROW 27AB ; [*0AA0.0020.0002] # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW 27AC ; [*0AA1.0020.0002] # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW 27AD ; [*0AA2.0020.0002] # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 27AE ; [*0AA3.0020.0002] # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 27AF ; [*0AA4.0020.0002] # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 27B0 ; [*0AA5.0020.0002] # CURLY LOOP 27B1 ; [*0AA6.0020.0002] # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 27B2 ; [*0AA7.0020.0002] # CIRCLED HEAVY WHITE RIGHTWARDS ARROW 27B3 ; [*0AA8.0020.0002] # WHITE-FEATHERED RIGHTWARDS ARROW 27B4 ; [*0AA9.0020.0002] # BLACK-FEATHERED SOUTH EAST ARROW 27B5 ; [*0AAA.0020.0002] # BLACK-FEATHERED RIGHTWARDS ARROW 27B6 ; [*0AAB.0020.0002] # BLACK-FEATHERED NORTH EAST ARROW 27B7 ; [*0AAC.0020.0002] # HEAVY BLACK-FEATHERED SOUTH EAST ARROW 27B8 ; [*0AAD.0020.0002] # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW 27B9 ; [*0AAE.0020.0002] # HEAVY BLACK-FEATHERED NORTH EAST ARROW 27BA ; [*0AAF.0020.0002] # TEARDROP-BARBED RIGHTWARDS ARROW 27BB ; [*0AB0.0020.0002] # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW 27BC ; [*0AB1.0020.0002] # WEDGE-TAILED RIGHTWARDS ARROW 27BD ; [*0AB2.0020.0002] # HEAVY WEDGE-TAILED RIGHTWARDS ARROW 27BE ; [*0AB3.0020.0002] # OPEN-OUTLINED RIGHTWARDS ARROW 27BF ; [*0AB4.0020.0002] # DOUBLE CURLY LOOP 27C0 ; [*0AB5.0020.0002] # THREE DIMENSIONAL ANGLE 27C1 ; [*0AB6.0020.0002] # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE 27C2 ; [*0AB7.0020.0002] # PERPENDICULAR 27C3 ; [*0AB8.0020.0002] # OPEN SUBSET 27C4 ; [*0AB9.0020.0002] # OPEN SUPERSET 27C5 ; [*0341.0020.0002] # LEFT S-SHAPED BAG DELIMITER 27C6 ; [*0342.0020.0002] # RIGHT S-SHAPED BAG DELIMITER 27C7 ; [*0ABA.0020.0002] # OR WITH DOT INSIDE 27C8 ; [*0ABB.0020.0002] # REVERSE SOLIDUS PRECEDING SUBSET 27C9 ; [*0ABC.0020.0002] # SUPERSET PRECEDING SOLIDUS 27CA ; [*0ABD.0020.0002] # VERTICAL BAR WITH HORIZONTAL STROKE 27CB ; [*0ABE.0020.0002] # MATHEMATICAL RISING DIAGONAL 27CC ; [*0ABF.0020.0002] # LONG DIVISION 27CD ; [*0AC0.0020.0002] # MATHEMATICAL FALLING DIAGONAL 27CE ; [*0AC1.0020.0002] # SQUARED LOGICAL AND 27CF ; [*0AC2.0020.0002] # SQUARED LOGICAL OR 27D0 ; [*0AC3.0020.0002] # WHITE DIAMOND WITH CENTRED DOT 27D1 ; [*0AC4.0020.0002] # AND WITH DOT 27D2 ; [*0AC5.0020.0002] # ELEMENT OF OPENING UPWARDS 27D3 ; [*0AC6.0020.0002] # LOWER RIGHT CORNER WITH DOT 27D4 ; [*0AC7.0020.0002] # UPPER LEFT CORNER WITH DOT 27D5 ; [*0AC8.0020.0002] # LEFT OUTER JOIN 27D6 ; [*0AC9.0020.0002] # RIGHT OUTER JOIN 27D7 ; [*0ACA.0020.0002] # FULL OUTER JOIN 27D8 ; [*0ACB.0020.0002] # LARGE UP TACK 27D9 ; [*0ACC.0020.0002] # LARGE DOWN TACK 27DA ; [*0ACD.0020.0002] # LEFT AND RIGHT DOUBLE TURNSTILE 27DB ; [*0ACE.0020.0002] # LEFT AND RIGHT TACK 27DC ; [*0ACF.0020.0002] # LEFT MULTIMAP 27DD ; [*0AD0.0020.0002] # LONG RIGHT TACK 27DE ; [*0AD1.0020.0002] # LONG LEFT TACK 27DF ; [*0AD2.0020.0002] # UP TACK WITH CIRCLE ABOVE 27E0 ; [*0AD3.0020.0002] # LOZENGE DIVIDED BY HORIZONTAL RULE 27E1 ; [*0AD4.0020.0002] # WHITE CONCAVE-SIDED DIAMOND 27E2 ; [*0AD5.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK 27E3 ; [*0AD6.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK 27E4 ; [*0AD7.0020.0002] # WHITE SQUARE WITH LEFTWARDS TICK 27E5 ; [*0AD8.0020.0002] # WHITE SQUARE WITH RIGHTWARDS TICK 27E6 ; [*0343.0020.0002] # MATHEMATICAL LEFT WHITE SQUARE BRACKET 27E7 ; [*0344.0020.0002] # MATHEMATICAL RIGHT WHITE SQUARE BRACKET 27E8 ; [*0345.0020.0002] # MATHEMATICAL LEFT ANGLE BRACKET 27E9 ; [*0346.0020.0002] # MATHEMATICAL RIGHT ANGLE BRACKET 27EA ; [*0347.0020.0002] # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET 27EB ; [*0348.0020.0002] # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET 27EC ; [*0349.0020.0002] # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET 27ED ; [*034A.0020.0002] # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET 27EE ; [*034B.0020.0002] # MATHEMATICAL LEFT FLATTENED PARENTHESIS 27EF ; [*034C.0020.0002] # MATHEMATICAL RIGHT FLATTENED PARENTHESIS 27F0 ; [*0AD9.0020.0002] # UPWARDS QUADRUPLE ARROW 27F1 ; [*0ADA.0020.0002] # DOWNWARDS QUADRUPLE ARROW 27F2 ; [*0ADB.0020.0002] # ANTICLOCKWISE GAPPED CIRCLE ARROW 27F3 ; [*0ADC.0020.0002] # CLOCKWISE GAPPED CIRCLE ARROW 27F4 ; [*0ADD.0020.0002] # RIGHT ARROW WITH CIRCLED PLUS 27F5 ; [*0ADE.0020.0002] # LONG LEFTWARDS ARROW 27F6 ; [*0ADF.0020.0002] # LONG RIGHTWARDS ARROW 27F7 ; [*0AE0.0020.0002] # LONG LEFT RIGHT ARROW 27F8 ; [*0AE1.0020.0002] # LONG LEFTWARDS DOUBLE ARROW 27F9 ; [*0AE2.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW 27FA ; [*0AE3.0020.0002] # LONG LEFT RIGHT DOUBLE ARROW 27FB ; [*0AE4.0020.0002] # LONG LEFTWARDS ARROW FROM BAR 27FC ; [*0AE5.0020.0002] # LONG RIGHTWARDS ARROW FROM BAR 27FD ; [*0AE6.0020.0002] # LONG LEFTWARDS DOUBLE ARROW FROM BAR 27FE ; [*0AE7.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW FROM BAR 27FF ; [*0AE8.0020.0002] # LONG RIGHTWARDS SQUIGGLE ARROW 2800 ; [*0D9C.0020.0002] # BRAILLE PATTERN BLANK 2801 ; [*0D9D.0020.0002] # BRAILLE PATTERN DOTS-1 2802 ; [*0D9E.0020.0002] # BRAILLE PATTERN DOTS-2 2803 ; [*0D9F.0020.0002] # BRAILLE PATTERN DOTS-12 2804 ; [*0DA0.0020.0002] # BRAILLE PATTERN DOTS-3 2805 ; [*0DA1.0020.0002] # BRAILLE PATTERN DOTS-13 2806 ; [*0DA2.0020.0002] # BRAILLE PATTERN DOTS-23 2807 ; [*0DA3.0020.0002] # BRAILLE PATTERN DOTS-123 2808 ; [*0DA4.0020.0002] # BRAILLE PATTERN DOTS-4 2809 ; [*0DA5.0020.0002] # BRAILLE PATTERN DOTS-14 280A ; [*0DA6.0020.0002] # BRAILLE PATTERN DOTS-24 280B ; [*0DA7.0020.0002] # BRAILLE PATTERN DOTS-124 280C ; [*0DA8.0020.0002] # BRAILLE PATTERN DOTS-34 280D ; [*0DA9.0020.0002] # BRAILLE PATTERN DOTS-134 280E ; [*0DAA.0020.0002] # BRAILLE PATTERN DOTS-234 280F ; [*0DAB.0020.0002] # BRAILLE PATTERN DOTS-1234 2810 ; [*0DAC.0020.0002] # BRAILLE PATTERN DOTS-5 2811 ; [*0DAD.0020.0002] # BRAILLE PATTERN DOTS-15 2812 ; [*0DAE.0020.0002] # BRAILLE PATTERN DOTS-25 2813 ; [*0DAF.0020.0002] # BRAILLE PATTERN DOTS-125 2814 ; [*0DB0.0020.0002] # BRAILLE PATTERN DOTS-35 2815 ; [*0DB1.0020.0002] # BRAILLE PATTERN DOTS-135 2816 ; [*0DB2.0020.0002] # BRAILLE PATTERN DOTS-235 2817 ; [*0DB3.0020.0002] # BRAILLE PATTERN DOTS-1235 2818 ; [*0DB4.0020.0002] # BRAILLE PATTERN DOTS-45 2819 ; [*0DB5.0020.0002] # BRAILLE PATTERN DOTS-145 281A ; [*0DB6.0020.0002] # BRAILLE PATTERN DOTS-245 281B ; [*0DB7.0020.0002] # BRAILLE PATTERN DOTS-1245 281C ; [*0DB8.0020.0002] # BRAILLE PATTERN DOTS-345 281D ; [*0DB9.0020.0002] # BRAILLE PATTERN DOTS-1345 281E ; [*0DBA.0020.0002] # BRAILLE PATTERN DOTS-2345 281F ; [*0DBB.0020.0002] # BRAILLE PATTERN DOTS-12345 2820 ; [*0DBC.0020.0002] # BRAILLE PATTERN DOTS-6 2821 ; [*0DBD.0020.0002] # BRAILLE PATTERN DOTS-16 2822 ; [*0DBE.0020.0002] # BRAILLE PATTERN DOTS-26 2823 ; [*0DBF.0020.0002] # BRAILLE PATTERN DOTS-126 2824 ; [*0DC0.0020.0002] # BRAILLE PATTERN DOTS-36 2825 ; [*0DC1.0020.0002] # BRAILLE PATTERN DOTS-136 2826 ; [*0DC2.0020.0002] # BRAILLE PATTERN DOTS-236 2827 ; [*0DC3.0020.0002] # BRAILLE PATTERN DOTS-1236 2828 ; [*0DC4.0020.0002] # BRAILLE PATTERN DOTS-46 2829 ; [*0DC5.0020.0002] # BRAILLE PATTERN DOTS-146 282A ; [*0DC6.0020.0002] # BRAILLE PATTERN DOTS-246 282B ; [*0DC7.0020.0002] # BRAILLE PATTERN DOTS-1246 282C ; [*0DC8.0020.0002] # BRAILLE PATTERN DOTS-346 282D ; [*0DC9.0020.0002] # BRAILLE PATTERN DOTS-1346 282E ; [*0DCA.0020.0002] # BRAILLE PATTERN DOTS-2346 282F ; [*0DCB.0020.0002] # BRAILLE PATTERN DOTS-12346 2830 ; [*0DCC.0020.0002] # BRAILLE PATTERN DOTS-56 2831 ; [*0DCD.0020.0002] # BRAILLE PATTERN DOTS-156 2832 ; [*0DCE.0020.0002] # BRAILLE PATTERN DOTS-256 2833 ; [*0DCF.0020.0002] # BRAILLE PATTERN DOTS-1256 2834 ; [*0DD0.0020.0002] # BRAILLE PATTERN DOTS-356 2835 ; [*0DD1.0020.0002] # BRAILLE PATTERN DOTS-1356 2836 ; [*0DD2.0020.0002] # BRAILLE PATTERN DOTS-2356 2837 ; [*0DD3.0020.0002] # BRAILLE PATTERN DOTS-12356 2838 ; [*0DD4.0020.0002] # BRAILLE PATTERN DOTS-456 2839 ; [*0DD5.0020.0002] # BRAILLE PATTERN DOTS-1456 283A ; [*0DD6.0020.0002] # BRAILLE PATTERN DOTS-2456 283B ; [*0DD7.0020.0002] # BRAILLE PATTERN DOTS-12456 283C ; [*0DD8.0020.0002] # BRAILLE PATTERN DOTS-3456 283D ; [*0DD9.0020.0002] # BRAILLE PATTERN DOTS-13456 283E ; [*0DDA.0020.0002] # BRAILLE PATTERN DOTS-23456 283F ; [*0DDB.0020.0002] # BRAILLE PATTERN DOTS-123456 2840 ; [*0DDC.0020.0002] # BRAILLE PATTERN DOTS-7 2841 ; [*0DDD.0020.0002] # BRAILLE PATTERN DOTS-17 2842 ; [*0DDE.0020.0002] # BRAILLE PATTERN DOTS-27 2843 ; [*0DDF.0020.0002] # BRAILLE PATTERN DOTS-127 2844 ; [*0DE0.0020.0002] # BRAILLE PATTERN DOTS-37 2845 ; [*0DE1.0020.0002] # BRAILLE PATTERN DOTS-137 2846 ; [*0DE2.0020.0002] # BRAILLE PATTERN DOTS-237 2847 ; [*0DE3.0020.0002] # BRAILLE PATTERN DOTS-1237 2848 ; [*0DE4.0020.0002] # BRAILLE PATTERN DOTS-47 2849 ; [*0DE5.0020.0002] # BRAILLE PATTERN DOTS-147 284A ; [*0DE6.0020.0002] # BRAILLE PATTERN DOTS-247 284B ; [*0DE7.0020.0002] # BRAILLE PATTERN DOTS-1247 284C ; [*0DE8.0020.0002] # BRAILLE PATTERN DOTS-347 284D ; [*0DE9.0020.0002] # BRAILLE PATTERN DOTS-1347 284E ; [*0DEA.0020.0002] # BRAILLE PATTERN DOTS-2347 284F ; [*0DEB.0020.0002] # BRAILLE PATTERN DOTS-12347 2850 ; [*0DEC.0020.0002] # BRAILLE PATTERN DOTS-57 2851 ; [*0DED.0020.0002] # BRAILLE PATTERN DOTS-157 2852 ; [*0DEE.0020.0002] # BRAILLE PATTERN DOTS-257 2853 ; [*0DEF.0020.0002] # BRAILLE PATTERN DOTS-1257 2854 ; [*0DF0.0020.0002] # BRAILLE PATTERN DOTS-357 2855 ; [*0DF1.0020.0002] # BRAILLE PATTERN DOTS-1357 2856 ; [*0DF2.0020.0002] # BRAILLE PATTERN DOTS-2357 2857 ; [*0DF3.0020.0002] # BRAILLE PATTERN DOTS-12357 2858 ; [*0DF4.0020.0002] # BRAILLE PATTERN DOTS-457 2859 ; [*0DF5.0020.0002] # BRAILLE PATTERN DOTS-1457 285A ; [*0DF6.0020.0002] # BRAILLE PATTERN DOTS-2457 285B ; [*0DF7.0020.0002] # BRAILLE PATTERN DOTS-12457 285C ; [*0DF8.0020.0002] # BRAILLE PATTERN DOTS-3457 285D ; [*0DF9.0020.0002] # BRAILLE PATTERN DOTS-13457 285E ; [*0DFA.0020.0002] # BRAILLE PATTERN DOTS-23457 285F ; [*0DFB.0020.0002] # BRAILLE PATTERN DOTS-123457 2860 ; [*0DFC.0020.0002] # BRAILLE PATTERN DOTS-67 2861 ; [*0DFD.0020.0002] # BRAILLE PATTERN DOTS-167 2862 ; [*0DFE.0020.0002] # BRAILLE PATTERN DOTS-267 2863 ; [*0DFF.0020.0002] # BRAILLE PATTERN DOTS-1267 2864 ; [*0E00.0020.0002] # BRAILLE PATTERN DOTS-367 2865 ; [*0E01.0020.0002] # BRAILLE PATTERN DOTS-1367 2866 ; [*0E02.0020.0002] # BRAILLE PATTERN DOTS-2367 2867 ; [*0E03.0020.0002] # BRAILLE PATTERN DOTS-12367 2868 ; [*0E04.0020.0002] # BRAILLE PATTERN DOTS-467 2869 ; [*0E05.0020.0002] # BRAILLE PATTERN DOTS-1467 286A ; [*0E06.0020.0002] # BRAILLE PATTERN DOTS-2467 286B ; [*0E07.0020.0002] # BRAILLE PATTERN DOTS-12467 286C ; [*0E08.0020.0002] # BRAILLE PATTERN DOTS-3467 286D ; [*0E09.0020.0002] # BRAILLE PATTERN DOTS-13467 286E ; [*0E0A.0020.0002] # BRAILLE PATTERN DOTS-23467 286F ; [*0E0B.0020.0002] # BRAILLE PATTERN DOTS-123467 2870 ; [*0E0C.0020.0002] # BRAILLE PATTERN DOTS-567 2871 ; [*0E0D.0020.0002] # BRAILLE PATTERN DOTS-1567 2872 ; [*0E0E.0020.0002] # BRAILLE PATTERN DOTS-2567 2873 ; [*0E0F.0020.0002] # BRAILLE PATTERN DOTS-12567 2874 ; [*0E10.0020.0002] # BRAILLE PATTERN DOTS-3567 2875 ; [*0E11.0020.0002] # BRAILLE PATTERN DOTS-13567 2876 ; [*0E12.0020.0002] # BRAILLE PATTERN DOTS-23567 2877 ; [*0E13.0020.0002] # BRAILLE PATTERN DOTS-123567 2878 ; [*0E14.0020.0002] # BRAILLE PATTERN DOTS-4567 2879 ; [*0E15.0020.0002] # BRAILLE PATTERN DOTS-14567 287A ; [*0E16.0020.0002] # BRAILLE PATTERN DOTS-24567 287B ; [*0E17.0020.0002] # BRAILLE PATTERN DOTS-124567 287C ; [*0E18.0020.0002] # BRAILLE PATTERN DOTS-34567 287D ; [*0E19.0020.0002] # BRAILLE PATTERN DOTS-134567 287E ; [*0E1A.0020.0002] # BRAILLE PATTERN DOTS-234567 287F ; [*0E1B.0020.0002] # BRAILLE PATTERN DOTS-1234567 2880 ; [*0E1C.0020.0002] # BRAILLE PATTERN DOTS-8 2881 ; [*0E1D.0020.0002] # BRAILLE PATTERN DOTS-18 2882 ; [*0E1E.0020.0002] # BRAILLE PATTERN DOTS-28 2883 ; [*0E1F.0020.0002] # BRAILLE PATTERN DOTS-128 2884 ; [*0E20.0020.0002] # BRAILLE PATTERN DOTS-38 2885 ; [*0E21.0020.0002] # BRAILLE PATTERN DOTS-138 2886 ; [*0E22.0020.0002] # BRAILLE PATTERN DOTS-238 2887 ; [*0E23.0020.0002] # BRAILLE PATTERN DOTS-1238 2888 ; [*0E24.0020.0002] # BRAILLE PATTERN DOTS-48 2889 ; [*0E25.0020.0002] # BRAILLE PATTERN DOTS-148 288A ; [*0E26.0020.0002] # BRAILLE PATTERN DOTS-248 288B ; [*0E27.0020.0002] # BRAILLE PATTERN DOTS-1248 288C ; [*0E28.0020.0002] # BRAILLE PATTERN DOTS-348 288D ; [*0E29.0020.0002] # BRAILLE PATTERN DOTS-1348 288E ; [*0E2A.0020.0002] # BRAILLE PATTERN DOTS-2348 288F ; [*0E2B.0020.0002] # BRAILLE PATTERN DOTS-12348 2890 ; [*0E2C.0020.0002] # BRAILLE PATTERN DOTS-58 2891 ; [*0E2D.0020.0002] # BRAILLE PATTERN DOTS-158 2892 ; [*0E2E.0020.0002] # BRAILLE PATTERN DOTS-258 2893 ; [*0E2F.0020.0002] # BRAILLE PATTERN DOTS-1258 2894 ; [*0E30.0020.0002] # BRAILLE PATTERN DOTS-358 2895 ; [*0E31.0020.0002] # BRAILLE PATTERN DOTS-1358 2896 ; [*0E32.0020.0002] # BRAILLE PATTERN DOTS-2358 2897 ; [*0E33.0020.0002] # BRAILLE PATTERN DOTS-12358 2898 ; [*0E34.0020.0002] # BRAILLE PATTERN DOTS-458 2899 ; [*0E35.0020.0002] # BRAILLE PATTERN DOTS-1458 289A ; [*0E36.0020.0002] # BRAILLE PATTERN DOTS-2458 289B ; [*0E37.0020.0002] # BRAILLE PATTERN DOTS-12458 289C ; [*0E38.0020.0002] # BRAILLE PATTERN DOTS-3458 289D ; [*0E39.0020.0002] # BRAILLE PATTERN DOTS-13458 289E ; [*0E3A.0020.0002] # BRAILLE PATTERN DOTS-23458 289F ; [*0E3B.0020.0002] # BRAILLE PATTERN DOTS-123458 28A0 ; [*0E3C.0020.0002] # BRAILLE PATTERN DOTS-68 28A1 ; [*0E3D.0020.0002] # BRAILLE PATTERN DOTS-168 28A2 ; [*0E3E.0020.0002] # BRAILLE PATTERN DOTS-268 28A3 ; [*0E3F.0020.0002] # BRAILLE PATTERN DOTS-1268 28A4 ; [*0E40.0020.0002] # BRAILLE PATTERN DOTS-368 28A5 ; [*0E41.0020.0002] # BRAILLE PATTERN DOTS-1368 28A6 ; [*0E42.0020.0002] # BRAILLE PATTERN DOTS-2368 28A7 ; [*0E43.0020.0002] # BRAILLE PATTERN DOTS-12368 28A8 ; [*0E44.0020.0002] # BRAILLE PATTERN DOTS-468 28A9 ; [*0E45.0020.0002] # BRAILLE PATTERN DOTS-1468 28AA ; [*0E46.0020.0002] # BRAILLE PATTERN DOTS-2468 28AB ; [*0E47.0020.0002] # BRAILLE PATTERN DOTS-12468 28AC ; [*0E48.0020.0002] # BRAILLE PATTERN DOTS-3468 28AD ; [*0E49.0020.0002] # BRAILLE PATTERN DOTS-13468 28AE ; [*0E4A.0020.0002] # BRAILLE PATTERN DOTS-23468 28AF ; [*0E4B.0020.0002] # BRAILLE PATTERN DOTS-123468 28B0 ; [*0E4C.0020.0002] # BRAILLE PATTERN DOTS-568 28B1 ; [*0E4D.0020.0002] # BRAILLE PATTERN DOTS-1568 28B2 ; [*0E4E.0020.0002] # BRAILLE PATTERN DOTS-2568 28B3 ; [*0E4F.0020.0002] # BRAILLE PATTERN DOTS-12568 28B4 ; [*0E50.0020.0002] # BRAILLE PATTERN DOTS-3568 28B5 ; [*0E51.0020.0002] # BRAILLE PATTERN DOTS-13568 28B6 ; [*0E52.0020.0002] # BRAILLE PATTERN DOTS-23568 28B7 ; [*0E53.0020.0002] # BRAILLE PATTERN DOTS-123568 28B8 ; [*0E54.0020.0002] # BRAILLE PATTERN DOTS-4568 28B9 ; [*0E55.0020.0002] # BRAILLE PATTERN DOTS-14568 28BA ; [*0E56.0020.0002] # BRAILLE PATTERN DOTS-24568 28BB ; [*0E57.0020.0002] # BRAILLE PATTERN DOTS-124568 28BC ; [*0E58.0020.0002] # BRAILLE PATTERN DOTS-34568 28BD ; [*0E59.0020.0002] # BRAILLE PATTERN DOTS-134568 28BE ; [*0E5A.0020.0002] # BRAILLE PATTERN DOTS-234568 28BF ; [*0E5B.0020.0002] # BRAILLE PATTERN DOTS-1234568 28C0 ; [*0E5C.0020.0002] # BRAILLE PATTERN DOTS-78 28C1 ; [*0E5D.0020.0002] # BRAILLE PATTERN DOTS-178 28C2 ; [*0E5E.0020.0002] # BRAILLE PATTERN DOTS-278 28C3 ; [*0E5F.0020.0002] # BRAILLE PATTERN DOTS-1278 28C4 ; [*0E60.0020.0002] # BRAILLE PATTERN DOTS-378 28C5 ; [*0E61.0020.0002] # BRAILLE PATTERN DOTS-1378 28C6 ; [*0E62.0020.0002] # BRAILLE PATTERN DOTS-2378 28C7 ; [*0E63.0020.0002] # BRAILLE PATTERN DOTS-12378 28C8 ; [*0E64.0020.0002] # BRAILLE PATTERN DOTS-478 28C9 ; [*0E65.0020.0002] # BRAILLE PATTERN DOTS-1478 28CA ; [*0E66.0020.0002] # BRAILLE PATTERN DOTS-2478 28CB ; [*0E67.0020.0002] # BRAILLE PATTERN DOTS-12478 28CC ; [*0E68.0020.0002] # BRAILLE PATTERN DOTS-3478 28CD ; [*0E69.0020.0002] # BRAILLE PATTERN DOTS-13478 28CE ; [*0E6A.0020.0002] # BRAILLE PATTERN DOTS-23478 28CF ; [*0E6B.0020.0002] # BRAILLE PATTERN DOTS-123478 28D0 ; [*0E6C.0020.0002] # BRAILLE PATTERN DOTS-578 28D1 ; [*0E6D.0020.0002] # BRAILLE PATTERN DOTS-1578 28D2 ; [*0E6E.0020.0002] # BRAILLE PATTERN DOTS-2578 28D3 ; [*0E6F.0020.0002] # BRAILLE PATTERN DOTS-12578 28D4 ; [*0E70.0020.0002] # BRAILLE PATTERN DOTS-3578 28D5 ; [*0E71.0020.0002] # BRAILLE PATTERN DOTS-13578 28D6 ; [*0E72.0020.0002] # BRAILLE PATTERN DOTS-23578 28D7 ; [*0E73.0020.0002] # BRAILLE PATTERN DOTS-123578 28D8 ; [*0E74.0020.0002] # BRAILLE PATTERN DOTS-4578 28D9 ; [*0E75.0020.0002] # BRAILLE PATTERN DOTS-14578 28DA ; [*0E76.0020.0002] # BRAILLE PATTERN DOTS-24578 28DB ; [*0E77.0020.0002] # BRAILLE PATTERN DOTS-124578 28DC ; [*0E78.0020.0002] # BRAILLE PATTERN DOTS-34578 28DD ; [*0E79.0020.0002] # BRAILLE PATTERN DOTS-134578 28DE ; [*0E7A.0020.0002] # BRAILLE PATTERN DOTS-234578 28DF ; [*0E7B.0020.0002] # BRAILLE PATTERN DOTS-1234578 28E0 ; [*0E7C.0020.0002] # BRAILLE PATTERN DOTS-678 28E1 ; [*0E7D.0020.0002] # BRAILLE PATTERN DOTS-1678 28E2 ; [*0E7E.0020.0002] # BRAILLE PATTERN DOTS-2678 28E3 ; [*0E7F.0020.0002] # BRAILLE PATTERN DOTS-12678 28E4 ; [*0E80.0020.0002] # BRAILLE PATTERN DOTS-3678 28E5 ; [*0E81.0020.0002] # BRAILLE PATTERN DOTS-13678 28E6 ; [*0E82.0020.0002] # BRAILLE PATTERN DOTS-23678 28E7 ; [*0E83.0020.0002] # BRAILLE PATTERN DOTS-123678 28E8 ; [*0E84.0020.0002] # BRAILLE PATTERN DOTS-4678 28E9 ; [*0E85.0020.0002] # BRAILLE PATTERN DOTS-14678 28EA ; [*0E86.0020.0002] # BRAILLE PATTERN DOTS-24678 28EB ; [*0E87.0020.0002] # BRAILLE PATTERN DOTS-124678 28EC ; [*0E88.0020.0002] # BRAILLE PATTERN DOTS-34678 28ED ; [*0E89.0020.0002] # BRAILLE PATTERN DOTS-134678 28EE ; [*0E8A.0020.0002] # BRAILLE PATTERN DOTS-234678 28EF ; [*0E8B.0020.0002] # BRAILLE PATTERN DOTS-1234678 28F0 ; [*0E8C.0020.0002] # BRAILLE PATTERN DOTS-5678 28F1 ; [*0E8D.0020.0002] # BRAILLE PATTERN DOTS-15678 28F2 ; [*0E8E.0020.0002] # BRAILLE PATTERN DOTS-25678 28F3 ; [*0E8F.0020.0002] # BRAILLE PATTERN DOTS-125678 28F4 ; [*0E90.0020.0002] # BRAILLE PATTERN DOTS-35678 28F5 ; [*0E91.0020.0002] # BRAILLE PATTERN DOTS-135678 28F6 ; [*0E92.0020.0002] # BRAILLE PATTERN DOTS-235678 28F7 ; [*0E93.0020.0002] # BRAILLE PATTERN DOTS-1235678 28F8 ; [*0E94.0020.0002] # BRAILLE PATTERN DOTS-45678 28F9 ; [*0E95.0020.0002] # BRAILLE PATTERN DOTS-145678 28FA ; [*0E96.0020.0002] # BRAILLE PATTERN DOTS-245678 28FB ; [*0E97.0020.0002] # BRAILLE PATTERN DOTS-1245678 28FC ; [*0E98.0020.0002] # BRAILLE PATTERN DOTS-345678 28FD ; [*0E99.0020.0002] # BRAILLE PATTERN DOTS-1345678 28FE ; [*0E9A.0020.0002] # BRAILLE PATTERN DOTS-2345678 28FF ; [*0E9B.0020.0002] # BRAILLE PATTERN DOTS-12345678 2900 ; [*0AE9.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE 2901 ; [*0AEA.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE 2902 ; [*0AEB.0020.0002] # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE 2903 ; [*0AEC.0020.0002] # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE 2904 ; [*0AED.0020.0002] # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE 2905 ; [*0AEE.0020.0002] # RIGHTWARDS TWO-HEADED ARROW FROM BAR 2906 ; [*0AEF.0020.0002] # LEFTWARDS DOUBLE ARROW FROM BAR 2907 ; [*0AF0.0020.0002] # RIGHTWARDS DOUBLE ARROW FROM BAR 2908 ; [*0AF1.0020.0002] # DOWNWARDS ARROW WITH HORIZONTAL STROKE 2909 ; [*0AF2.0020.0002] # UPWARDS ARROW WITH HORIZONTAL STROKE 290A ; [*0AF3.0020.0002] # UPWARDS TRIPLE ARROW 290B ; [*0AF4.0020.0002] # DOWNWARDS TRIPLE ARROW 290C ; [*0AF5.0020.0002] # LEFTWARDS DOUBLE DASH ARROW 290D ; [*0AF6.0020.0002] # RIGHTWARDS DOUBLE DASH ARROW 290E ; [*0AF7.0020.0002] # LEFTWARDS TRIPLE DASH ARROW 290F ; [*0AF8.0020.0002] # RIGHTWARDS TRIPLE DASH ARROW 2910 ; [*0AF9.0020.0002] # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW 2911 ; [*0AFA.0020.0002] # RIGHTWARDS ARROW WITH DOTTED STEM 2912 ; [*0AFB.0020.0002] # UPWARDS ARROW TO BAR 2913 ; [*0AFC.0020.0002] # DOWNWARDS ARROW TO BAR 2914 ; [*0AFD.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE 2915 ; [*0AFE.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE 2916 ; [*0AFF.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL 2917 ; [*0B00.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE 2918 ; [*0B01.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE 2919 ; [*0B02.0020.0002] # LEFTWARDS ARROW-TAIL 291A ; [*0B03.0020.0002] # RIGHTWARDS ARROW-TAIL 291B ; [*0B04.0020.0002] # LEFTWARDS DOUBLE ARROW-TAIL 291C ; [*0B05.0020.0002] # RIGHTWARDS DOUBLE ARROW-TAIL 291D ; [*0B06.0020.0002] # LEFTWARDS ARROW TO BLACK DIAMOND 291E ; [*0B07.0020.0002] # RIGHTWARDS ARROW TO BLACK DIAMOND 291F ; [*0B08.0020.0002] # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND 2920 ; [*0B09.0020.0002] # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND 2921 ; [*0B0A.0020.0002] # NORTH WEST AND SOUTH EAST ARROW 2922 ; [*0B0B.0020.0002] # NORTH EAST AND SOUTH WEST ARROW 2923 ; [*0B0C.0020.0002] # NORTH WEST ARROW WITH HOOK 2924 ; [*0B0D.0020.0002] # NORTH EAST ARROW WITH HOOK 2925 ; [*0B0E.0020.0002] # SOUTH EAST ARROW WITH HOOK 2926 ; [*0B0F.0020.0002] # SOUTH WEST ARROW WITH HOOK 2927 ; [*0B10.0020.0002] # NORTH WEST ARROW AND NORTH EAST ARROW 2928 ; [*0B11.0020.0002] # NORTH EAST ARROW AND SOUTH EAST ARROW 2929 ; [*0B12.0020.0002] # SOUTH EAST ARROW AND SOUTH WEST ARROW 292A ; [*0B13.0020.0002] # SOUTH WEST ARROW AND NORTH WEST ARROW 292B ; [*0B14.0020.0002] # RISING DIAGONAL CROSSING FALLING DIAGONAL 292C ; [*0B15.0020.0002] # FALLING DIAGONAL CROSSING RISING DIAGONAL 292D ; [*0B16.0020.0002] # SOUTH EAST ARROW CROSSING NORTH EAST ARROW 292E ; [*0B17.0020.0002] # NORTH EAST ARROW CROSSING SOUTH EAST ARROW 292F ; [*0B18.0020.0002] # FALLING DIAGONAL CROSSING NORTH EAST ARROW 2930 ; [*0B19.0020.0002] # RISING DIAGONAL CROSSING SOUTH EAST ARROW 2931 ; [*0B1A.0020.0002] # NORTH EAST ARROW CROSSING NORTH WEST ARROW 2932 ; [*0B1B.0020.0002] # NORTH WEST ARROW CROSSING NORTH EAST ARROW 2933 ; [*0B1C.0020.0002] # WAVE ARROW POINTING DIRECTLY RIGHT 2934 ; [*0B1D.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS 2935 ; [*0B1E.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS 2936 ; [*0B1F.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS 2937 ; [*0B20.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS 2938 ; [*0B21.0020.0002] # RIGHT-SIDE ARC CLOCKWISE ARROW 2939 ; [*0B22.0020.0002] # LEFT-SIDE ARC ANTICLOCKWISE ARROW 293A ; [*0B23.0020.0002] # TOP ARC ANTICLOCKWISE ARROW 293B ; [*0B24.0020.0002] # BOTTOM ARC ANTICLOCKWISE ARROW 293C ; [*0B25.0020.0002] # TOP ARC CLOCKWISE ARROW WITH MINUS 293D ; [*0B26.0020.0002] # TOP ARC ANTICLOCKWISE ARROW WITH PLUS 293E ; [*0B27.0020.0002] # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW 293F ; [*0B28.0020.0002] # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW 2940 ; [*0B29.0020.0002] # ANTICLOCKWISE CLOSED CIRCLE ARROW 2941 ; [*0B2A.0020.0002] # CLOCKWISE CLOSED CIRCLE ARROW 2942 ; [*0B2B.0020.0002] # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW 2943 ; [*0B2C.0020.0002] # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW 2944 ; [*0B2D.0020.0002] # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW 2945 ; [*0B2E.0020.0002] # RIGHTWARDS ARROW WITH PLUS BELOW 2946 ; [*0B2F.0020.0002] # LEFTWARDS ARROW WITH PLUS BELOW 2947 ; [*0B30.0020.0002] # RIGHTWARDS ARROW THROUGH X 2948 ; [*0B31.0020.0002] # LEFT RIGHT ARROW THROUGH SMALL CIRCLE 2949 ; [*0B32.0020.0002] # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE 294A ; [*0B33.0020.0002] # LEFT BARB UP RIGHT BARB DOWN HARPOON 294B ; [*0B34.0020.0002] # LEFT BARB DOWN RIGHT BARB UP HARPOON 294C ; [*0B35.0020.0002] # UP BARB RIGHT DOWN BARB LEFT HARPOON 294D ; [*0B36.0020.0002] # UP BARB LEFT DOWN BARB RIGHT HARPOON 294E ; [*0B37.0020.0002] # LEFT BARB UP RIGHT BARB UP HARPOON 294F ; [*0B38.0020.0002] # UP BARB RIGHT DOWN BARB RIGHT HARPOON 2950 ; [*0B39.0020.0002] # LEFT BARB DOWN RIGHT BARB DOWN HARPOON 2951 ; [*0B3A.0020.0002] # UP BARB LEFT DOWN BARB LEFT HARPOON 2952 ; [*0B3B.0020.0002] # LEFTWARDS HARPOON WITH BARB UP TO BAR 2953 ; [*0B3C.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP TO BAR 2954 ; [*0B3D.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT TO BAR 2955 ; [*0B3E.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR 2956 ; [*0B3F.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN TO BAR 2957 ; [*0B40.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR 2958 ; [*0B41.0020.0002] # UPWARDS HARPOON WITH BARB LEFT TO BAR 2959 ; [*0B42.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT TO BAR 295A ; [*0B43.0020.0002] # LEFTWARDS HARPOON WITH BARB UP FROM BAR 295B ; [*0B44.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP FROM BAR 295C ; [*0B45.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT FROM BAR 295D ; [*0B46.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR 295E ; [*0B47.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR 295F ; [*0B48.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR 2960 ; [*0B49.0020.0002] # UPWARDS HARPOON WITH BARB LEFT FROM BAR 2961 ; [*0B4A.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR 2962 ; [*0B4B.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN 2963 ; [*0B4C.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT 2964 ; [*0B4D.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN 2965 ; [*0B4E.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT 2966 ; [*0B4F.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP 2967 ; [*0B50.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN 2968 ; [*0B51.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP 2969 ; [*0B52.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN 296A ; [*0B53.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH 296B ; [*0B54.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH 296C ; [*0B55.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH 296D ; [*0B56.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH 296E ; [*0B57.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT 296F ; [*0B58.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT 2970 ; [*0B59.0020.0002] # RIGHT DOUBLE ARROW WITH ROUNDED HEAD 2971 ; [*0B5A.0020.0002] # EQUALS SIGN ABOVE RIGHTWARDS ARROW 2972 ; [*0B5B.0020.0002] # TILDE OPERATOR ABOVE RIGHTWARDS ARROW 2973 ; [*0B5C.0020.0002] # LEFTWARDS ARROW ABOVE TILDE OPERATOR 2974 ; [*0B5D.0020.0002] # RIGHTWARDS ARROW ABOVE TILDE OPERATOR 2975 ; [*0B5E.0020.0002] # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO 2976 ; [*0B5F.0020.0002] # LESS-THAN ABOVE LEFTWARDS ARROW 2977 ; [*0B60.0020.0002] # LEFTWARDS ARROW THROUGH LESS-THAN 2978 ; [*0B61.0020.0002] # GREATER-THAN ABOVE RIGHTWARDS ARROW 2979 ; [*0B62.0020.0002] # SUBSET ABOVE RIGHTWARDS ARROW 297A ; [*0B63.0020.0002] # LEFTWARDS ARROW THROUGH SUBSET 297B ; [*0B64.0020.0002] # SUPERSET ABOVE LEFTWARDS ARROW 297C ; [*0B65.0020.0002] # LEFT FISH TAIL 297D ; [*0B66.0020.0002] # RIGHT FISH TAIL 297E ; [*0B67.0020.0002] # UP FISH TAIL 297F ; [*0B68.0020.0002] # DOWN FISH TAIL 2980 ; [*0B69.0020.0002] # TRIPLE VERTICAL BAR DELIMITER 2981 ; [*0B6A.0020.0002] # Z NOTATION SPOT 2982 ; [*0B6B.0020.0002] # Z NOTATION TYPE COLON 2983 ; [*032B.0020.0002] # LEFT WHITE CURLY BRACKET 2984 ; [*032C.0020.0002] # RIGHT WHITE CURLY BRACKET 2985 ; [*032D.0020.0002] # LEFT WHITE PARENTHESIS 2986 ; [*032E.0020.0002] # RIGHT WHITE PARENTHESIS 2987 ; [*032F.0020.0002] # Z NOTATION LEFT IMAGE BRACKET 2988 ; [*0330.0020.0002] # Z NOTATION RIGHT IMAGE BRACKET 2989 ; [*0331.0020.0002] # Z NOTATION LEFT BINDING BRACKET 298A ; [*0332.0020.0002] # Z NOTATION RIGHT BINDING BRACKET 298B ; [*0333.0020.0002] # LEFT SQUARE BRACKET WITH UNDERBAR 298C ; [*0334.0020.0002] # RIGHT SQUARE BRACKET WITH UNDERBAR 298D ; [*0335.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER 298E ; [*0336.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER 298F ; [*0337.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER 2990 ; [*0338.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER 2991 ; [*0339.0020.0002] # LEFT ANGLE BRACKET WITH DOT 2992 ; [*033A.0020.0002] # RIGHT ANGLE BRACKET WITH DOT 2993 ; [*033B.0020.0002] # LEFT ARC LESS-THAN BRACKET 2994 ; [*033C.0020.0002] # RIGHT ARC GREATER-THAN BRACKET 2995 ; [*033D.0020.0002] # DOUBLE LEFT ARC GREATER-THAN BRACKET 2996 ; [*033E.0020.0002] # DOUBLE RIGHT ARC LESS-THAN BRACKET 2997 ; [*033F.0020.0002] # LEFT BLACK TORTOISE SHELL BRACKET 2998 ; [*0340.0020.0002] # RIGHT BLACK TORTOISE SHELL BRACKET 2999 ; [*0B6C.0020.0002] # DOTTED FENCE 299A ; [*0B6D.0020.0002] # VERTICAL ZIGZAG LINE 299B ; [*0B6E.0020.0002] # MEASURED ANGLE OPENING LEFT 299C ; [*0B6F.0020.0002] # RIGHT ANGLE VARIANT WITH SQUARE 299D ; [*0B70.0020.0002] # MEASURED RIGHT ANGLE WITH DOT 299E ; [*0B71.0020.0002] # ANGLE WITH S INSIDE 299F ; [*0B72.0020.0002] # ACUTE ANGLE 29A0 ; [*0B73.0020.0002] # SPHERICAL ANGLE OPENING LEFT 29A1 ; [*0B74.0020.0002] # SPHERICAL ANGLE OPENING UP 29A2 ; [*0B75.0020.0002] # TURNED ANGLE 29A3 ; [*0B76.0020.0002] # REVERSED ANGLE 29A4 ; [*0B77.0020.0002] # ANGLE WITH UNDERBAR 29A5 ; [*0B78.0020.0002] # REVERSED ANGLE WITH UNDERBAR 29A6 ; [*0B79.0020.0002] # OBLIQUE ANGLE OPENING UP 29A7 ; [*0B7A.0020.0002] # OBLIQUE ANGLE OPENING DOWN 29A8 ; [*0B7B.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT 29A9 ; [*0B7C.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT 29AA ; [*0B7D.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT 29AB ; [*0B7E.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT 29AC ; [*0B7F.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP 29AD ; [*0B80.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP 29AE ; [*0B81.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN 29AF ; [*0B82.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN 29B0 ; [*0B83.0020.0002] # REVERSED EMPTY SET 29B1 ; [*0B84.0020.0002] # EMPTY SET WITH OVERBAR 29B2 ; [*0B85.0020.0002] # EMPTY SET WITH SMALL CIRCLE ABOVE 29B3 ; [*0B86.0020.0002] # EMPTY SET WITH RIGHT ARROW ABOVE 29B4 ; [*0B87.0020.0002] # EMPTY SET WITH LEFT ARROW ABOVE 29B5 ; [*0B88.0020.0002] # CIRCLE WITH HORIZONTAL BAR 29B6 ; [*0B89.0020.0002] # CIRCLED VERTICAL BAR 29B7 ; [*0B8A.0020.0002] # CIRCLED PARALLEL 29B8 ; [*0B8B.0020.0002] # CIRCLED REVERSE SOLIDUS 29B9 ; [*0B8C.0020.0002] # CIRCLED PERPENDICULAR 29BA ; [*0B8D.0020.0002] # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR 29BB ; [*0B8E.0020.0002] # CIRCLE WITH SUPERIMPOSED X 29BC ; [*0B8F.0020.0002] # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN 29BD ; [*0B90.0020.0002] # UP ARROW THROUGH CIRCLE 29BE ; [*0B91.0020.0002] # CIRCLED WHITE BULLET 29BF ; [*0B92.0020.0002] # CIRCLED BULLET 29C0 ; [*0B93.0020.0002] # CIRCLED LESS-THAN 29C1 ; [*0B94.0020.0002] # CIRCLED GREATER-THAN 29C2 ; [*0B95.0020.0002] # CIRCLE WITH SMALL CIRCLE TO THE RIGHT 29C3 ; [*0B96.0020.0002] # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT 29C4 ; [*0B97.0020.0002] # SQUARED RISING DIAGONAL SLASH 29C5 ; [*0B98.0020.0002] # SQUARED FALLING DIAGONAL SLASH 29C6 ; [*0B99.0020.0002] # SQUARED ASTERISK 29C7 ; [*0B9A.0020.0002] # SQUARED SMALL CIRCLE 29C8 ; [*0B9B.0020.0002] # SQUARED SQUARE 29C9 ; [*0B9C.0020.0002] # TWO JOINED SQUARES 29CA ; [*0B9D.0020.0002] # TRIANGLE WITH DOT ABOVE 29CB ; [*0B9E.0020.0002] # TRIANGLE WITH UNDERBAR 29CC ; [*0B9F.0020.0002] # S IN TRIANGLE 29CD ; [*0BA0.0020.0002] # TRIANGLE WITH SERIFS AT BOTTOM 29CE ; [*0BA1.0020.0002] # RIGHT TRIANGLE ABOVE LEFT TRIANGLE 29CF ; [*0BA2.0020.0002] # LEFT TRIANGLE BESIDE VERTICAL BAR 29D0 ; [*0BA3.0020.0002] # VERTICAL BAR BESIDE RIGHT TRIANGLE 29D1 ; [*0BA4.0020.0002] # BOWTIE WITH LEFT HALF BLACK 29D2 ; [*0BA5.0020.0002] # BOWTIE WITH RIGHT HALF BLACK 29D3 ; [*0BA6.0020.0002] # BLACK BOWTIE 29D4 ; [*0BA7.0020.0002] # TIMES WITH LEFT HALF BLACK 29D5 ; [*0BA8.0020.0002] # TIMES WITH RIGHT HALF BLACK 29D6 ; [*0BA9.0020.0002] # WHITE HOURGLASS 29D7 ; [*0BAA.0020.0002] # BLACK HOURGLASS 29D8 ; [*0385.0020.0002] # LEFT WIGGLY FENCE 29D9 ; [*0386.0020.0002] # RIGHT WIGGLY FENCE 29DA ; [*0387.0020.0002] # LEFT DOUBLE WIGGLY FENCE 29DB ; [*0388.0020.0002] # RIGHT DOUBLE WIGGLY FENCE 29DC ; [*0BAB.0020.0002] # INCOMPLETE INFINITY 29DD ; [*0BAC.0020.0002] # TIE OVER INFINITY 29DE ; [*0BAD.0020.0002] # INFINITY NEGATED WITH VERTICAL BAR 29DF ; [*0BAE.0020.0002] # DOUBLE-ENDED MULTIMAP 29E0 ; [*0BAF.0020.0002] # SQUARE WITH CONTOURED OUTLINE 29E1 ; [*0BB0.0020.0002] # INCREASES AS 29E2 ; [*0BB1.0020.0002] # SHUFFLE PRODUCT 29E3 ; [*0BB2.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL 29E4 ; [*0BB3.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE 29E5 ; [*0BB4.0020.0002] # IDENTICAL TO AND SLANTED PARALLEL 29E6 ; [*0BB5.0020.0002] # GLEICH STARK 29E7 ; [*0BB6.0020.0002] # THERMODYNAMIC 29E8 ; [*0BB7.0020.0002] # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK 29E9 ; [*0BB8.0020.0002] # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK 29EA ; [*0BB9.0020.0002] # BLACK DIAMOND WITH DOWN ARROW 29EB ; [*0BBA.0020.0002] # BLACK LOZENGE 29EC ; [*0BBB.0020.0002] # WHITE CIRCLE WITH DOWN ARROW 29ED ; [*0BBC.0020.0002] # BLACK CIRCLE WITH DOWN ARROW 29EE ; [*0BBD.0020.0002] # ERROR-BARRED WHITE SQUARE 29EF ; [*0BBE.0020.0002] # ERROR-BARRED BLACK SQUARE 29F0 ; [*0BBF.0020.0002] # ERROR-BARRED WHITE DIAMOND 29F1 ; [*0BC0.0020.0002] # ERROR-BARRED BLACK DIAMOND 29F2 ; [*0BC1.0020.0002] # ERROR-BARRED WHITE CIRCLE 29F3 ; [*0BC2.0020.0002] # ERROR-BARRED BLACK CIRCLE 29F4 ; [*0BC3.0020.0002] # RULE-DELAYED 29F5 ; [*0BC4.0020.0002] # REVERSE SOLIDUS OPERATOR 29F6 ; [*0BC5.0020.0002] # SOLIDUS WITH OVERBAR 29F7 ; [*0BC6.0020.0002] # REVERSE SOLIDUS WITH HORIZONTAL STROKE 29F8 ; [*0BC7.0020.0002] # BIG SOLIDUS 29F9 ; [*0BC8.0020.0002] # BIG REVERSE SOLIDUS 29FA ; [*0BC9.0020.0002] # DOUBLE PLUS 29FB ; [*0BCA.0020.0002] # TRIPLE PLUS 29FC ; [*0329.0020.0002] # LEFT-POINTING CURVED ANGLE BRACKET 29FD ; [*032A.0020.0002] # RIGHT-POINTING CURVED ANGLE BRACKET 29FE ; [*0BCB.0020.0002] # TINY 29FF ; [*0BCC.0020.0002] # MINY 2A00 ; [*0BCD.0020.0002] # N-ARY CIRCLED DOT OPERATOR 2A01 ; [*0BCE.0020.0002] # N-ARY CIRCLED PLUS OPERATOR 2A02 ; [*0BCF.0020.0002] # N-ARY CIRCLED TIMES OPERATOR 2A03 ; [*0BD0.0020.0002] # N-ARY UNION OPERATOR WITH DOT 2A04 ; [*0BD1.0020.0002] # N-ARY UNION OPERATOR WITH PLUS 2A05 ; [*0BD2.0020.0002] # N-ARY SQUARE INTERSECTION OPERATOR 2A06 ; [*0BD3.0020.0002] # N-ARY SQUARE UNION OPERATOR 2A07 ; [*0BD4.0020.0002] # TWO LOGICAL AND OPERATOR 2A08 ; [*0BD5.0020.0002] # TWO LOGICAL OR OPERATOR 2A09 ; [*0BD6.0020.0002] # N-ARY TIMES OPERATOR 2A0A ; [*0BD7.0020.0002] # MODULO TWO SUM 2A0B ; [*0BD8.0020.0002] # SUMMATION WITH INTEGRAL 2A0C ; [*063C.0020.0004][*063C.0020.0004][*063C.0020.0004][*063C.0020.0004] # QUADRUPLE INTEGRAL OPERATOR 2A0D ; [*0BD9.0020.0002] # FINITE PART INTEGRAL 2A0E ; [*0BDA.0020.0002] # INTEGRAL WITH DOUBLE STROKE 2A0F ; [*0BDB.0020.0002] # INTEGRAL AVERAGE WITH SLASH 2A10 ; [*0BDC.0020.0002] # CIRCULATION FUNCTION 2A11 ; [*0BDD.0020.0002] # ANTICLOCKWISE INTEGRATION 2A12 ; [*0BDE.0020.0002] # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE 2A13 ; [*0BDF.0020.0002] # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE 2A14 ; [*0BE0.0020.0002] # LINE INTEGRATION NOT INCLUDING THE POLE 2A15 ; [*0BE1.0020.0002] # INTEGRAL AROUND A POINT OPERATOR 2A16 ; [*0BE2.0020.0002] # QUATERNION INTEGRAL OPERATOR 2A17 ; [*0BE3.0020.0002] # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK 2A18 ; [*0BE4.0020.0002] # INTEGRAL WITH TIMES SIGN 2A19 ; [*0BE5.0020.0002] # INTEGRAL WITH INTERSECTION 2A1A ; [*0BE6.0020.0002] # INTEGRAL WITH UNION 2A1B ; [*0BE7.0020.0002] # INTEGRAL WITH OVERBAR 2A1C ; [*0BE8.0020.0002] # INTEGRAL WITH UNDERBAR 2A1D ; [*0BE9.0020.0002] # JOIN 2A1E ; [*0BEA.0020.0002] # LARGE LEFT TRIANGLE OPERATOR 2A1F ; [*0BEB.0020.0002] # Z NOTATION SCHEMA COMPOSITION 2A20 ; [*0BEC.0020.0002] # Z NOTATION SCHEMA PIPING 2A21 ; [*0BED.0020.0002] # Z NOTATION SCHEMA PROJECTION 2A22 ; [*0BEE.0020.0002] # PLUS SIGN WITH SMALL CIRCLE ABOVE 2A23 ; [*0BEF.0020.0002] # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE 2A24 ; [*0BF0.0020.0002] # PLUS SIGN WITH TILDE ABOVE 2A25 ; [*0BF1.0020.0002] # PLUS SIGN WITH DOT BELOW 2A26 ; [*0BF2.0020.0002] # PLUS SIGN WITH TILDE BELOW 2A27 ; [*0BF3.0020.0002] # PLUS SIGN WITH SUBSCRIPT TWO 2A28 ; [*0BF4.0020.0002] # PLUS SIGN WITH BLACK TRIANGLE 2A29 ; [*0BF5.0020.0002] # MINUS SIGN WITH COMMA ABOVE 2A2A ; [*0BF6.0020.0002] # MINUS SIGN WITH DOT BELOW 2A2B ; [*0BF7.0020.0002] # MINUS SIGN WITH FALLING DOTS 2A2C ; [*0BF8.0020.0002] # MINUS SIGN WITH RISING DOTS 2A2D ; [*0BF9.0020.0002] # PLUS SIGN IN LEFT HALF CIRCLE 2A2E ; [*0BFA.0020.0002] # PLUS SIGN IN RIGHT HALF CIRCLE 2A2F ; [*0BFB.0020.0002] # VECTOR OR CROSS PRODUCT 2A30 ; [*0BFC.0020.0002] # MULTIPLICATION SIGN WITH DOT ABOVE 2A31 ; [*0BFD.0020.0002] # MULTIPLICATION SIGN WITH UNDERBAR 2A32 ; [*0BFE.0020.0002] # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED 2A33 ; [*0BFF.0020.0002] # SMASH PRODUCT 2A34 ; [*0C00.0020.0002] # MULTIPLICATION SIGN IN LEFT HALF CIRCLE 2A35 ; [*0C01.0020.0002] # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE 2A36 ; [*0C02.0020.0002] # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT 2A37 ; [*0C03.0020.0002] # MULTIPLICATION SIGN IN DOUBLE CIRCLE 2A38 ; [*0C04.0020.0002] # CIRCLED DIVISION SIGN 2A39 ; [*0C05.0020.0002] # PLUS SIGN IN TRIANGLE 2A3A ; [*0C06.0020.0002] # MINUS SIGN IN TRIANGLE 2A3B ; [*0C07.0020.0002] # MULTIPLICATION SIGN IN TRIANGLE 2A3C ; [*0C08.0020.0002] # INTERIOR PRODUCT 2A3D ; [*0C09.0020.0002] # RIGHTHAND INTERIOR PRODUCT 2A3E ; [*0C0A.0020.0002] # Z NOTATION RELATIONAL COMPOSITION 2A3F ; [*0C0B.0020.0002] # AMALGAMATION OR COPRODUCT 2A40 ; [*0C0C.0020.0002] # INTERSECTION WITH DOT 2A41 ; [*0C0D.0020.0002] # UNION WITH MINUS SIGN 2A42 ; [*0C0E.0020.0002] # UNION WITH OVERBAR 2A43 ; [*0C0F.0020.0002] # INTERSECTION WITH OVERBAR 2A44 ; [*0C10.0020.0002] # INTERSECTION WITH LOGICAL AND 2A45 ; [*0C11.0020.0002] # UNION WITH LOGICAL OR 2A46 ; [*0C12.0020.0002] # UNION ABOVE INTERSECTION 2A47 ; [*0C13.0020.0002] # INTERSECTION ABOVE UNION 2A48 ; [*0C14.0020.0002] # UNION ABOVE BAR ABOVE INTERSECTION 2A49 ; [*0C15.0020.0002] # INTERSECTION ABOVE BAR ABOVE UNION 2A4A ; [*0C16.0020.0002] # UNION BESIDE AND JOINED WITH UNION 2A4B ; [*0C17.0020.0002] # INTERSECTION BESIDE AND JOINED WITH INTERSECTION 2A4C ; [*0C18.0020.0002] # CLOSED UNION WITH SERIFS 2A4D ; [*0C19.0020.0002] # CLOSED INTERSECTION WITH SERIFS 2A4E ; [*0C1A.0020.0002] # DOUBLE SQUARE INTERSECTION 2A4F ; [*0C1B.0020.0002] # DOUBLE SQUARE UNION 2A50 ; [*0C1C.0020.0002] # CLOSED UNION WITH SERIFS AND SMASH PRODUCT 2A51 ; [*0C1D.0020.0002] # LOGICAL AND WITH DOT ABOVE 2A52 ; [*0C1E.0020.0002] # LOGICAL OR WITH DOT ABOVE 2A53 ; [*0C1F.0020.0002] # DOUBLE LOGICAL AND 2A54 ; [*0C20.0020.0002] # DOUBLE LOGICAL OR 2A55 ; [*0C21.0020.0002] # TWO INTERSECTING LOGICAL AND 2A56 ; [*0C22.0020.0002] # TWO INTERSECTING LOGICAL OR 2A57 ; [*0C23.0020.0002] # SLOPING LARGE OR 2A58 ; [*0C24.0020.0002] # SLOPING LARGE AND 2A59 ; [*0C25.0020.0002] # LOGICAL OR OVERLAPPING LOGICAL AND 2A5A ; [*0C26.0020.0002] # LOGICAL AND WITH MIDDLE STEM 2A5B ; [*0C27.0020.0002] # LOGICAL OR WITH MIDDLE STEM 2A5C ; [*0C28.0020.0002] # LOGICAL AND WITH HORIZONTAL DASH 2A5D ; [*0C29.0020.0002] # LOGICAL OR WITH HORIZONTAL DASH 2A5E ; [*0C2A.0020.0002] # LOGICAL AND WITH DOUBLE OVERBAR 2A5F ; [*0C2B.0020.0002] # LOGICAL AND WITH UNDERBAR 2A60 ; [*0C2C.0020.0002] # LOGICAL AND WITH DOUBLE UNDERBAR 2A61 ; [*0C2D.0020.0002] # SMALL VEE WITH UNDERBAR 2A62 ; [*0C2E.0020.0002] # LOGICAL OR WITH DOUBLE OVERBAR 2A63 ; [*0C2F.0020.0002] # LOGICAL OR WITH DOUBLE UNDERBAR 2A64 ; [*0C30.0020.0002] # Z NOTATION DOMAIN ANTIRESTRICTION 2A65 ; [*0C31.0020.0002] # Z NOTATION RANGE ANTIRESTRICTION 2A66 ; [*0C32.0020.0002] # EQUALS SIGN WITH DOT BELOW 2A67 ; [*0C33.0020.0002] # IDENTICAL WITH DOT ABOVE 2A68 ; [*0C34.0020.0002] # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE 2A69 ; [*0C35.0020.0002] # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE 2A6A ; [*0C36.0020.0002] # TILDE OPERATOR WITH DOT ABOVE 2A6B ; [*0C37.0020.0002] # TILDE OPERATOR WITH RISING DOTS 2A6C ; [*0C38.0020.0002] # SIMILAR MINUS SIMILAR 2A6D ; [*0C39.0020.0002] # CONGRUENT WITH DOT ABOVE 2A6E ; [*0C3A.0020.0002] # EQUALS WITH ASTERISK 2A6F ; [*0C3B.0020.0002] # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT 2A70 ; [*0C3C.0020.0002] # APPROXIMATELY EQUAL OR EQUAL TO 2A71 ; [*0C3D.0020.0002] # EQUALS SIGN ABOVE PLUS SIGN 2A72 ; [*0C3E.0020.0002] # PLUS SIGN ABOVE EQUALS SIGN 2A73 ; [*0C3F.0020.0002] # EQUALS SIGN ABOVE TILDE OPERATOR 2A74 ; [*0239.0020.0004][*0239.0020.0004][*061B.0020.0004] # DOUBLE COLON EQUAL 2A75 ; [*061B.0020.0004][*061B.0020.0004] # TWO CONSECUTIVE EQUALS SIGNS 2A76 ; [*061B.0020.0004][*061B.0020.0004][*061B.0020.0004] # THREE CONSECUTIVE EQUALS SIGNS 2A77 ; [*0C40.0020.0002] # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW 2A78 ; [*0C41.0020.0002] # EQUIVALENT WITH FOUR DOTS ABOVE 2A79 ; [*0C42.0020.0002] # LESS-THAN WITH CIRCLE INSIDE 2A7A ; [*0C43.0020.0002] # GREATER-THAN WITH CIRCLE INSIDE 2A7B ; [*0C44.0020.0002] # LESS-THAN WITH QUESTION MARK ABOVE 2A7C ; [*0C45.0020.0002] # GREATER-THAN WITH QUESTION MARK ABOVE 2A7D ; [*0C46.0020.0002] # LESS-THAN OR SLANTED EQUAL TO 2A7E ; [*0C47.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO 2A7F ; [*0C48.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE 2A80 ; [*0C49.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE 2A81 ; [*0C4A.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE 2A82 ; [*0C4B.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE 2A83 ; [*0C4C.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT 2A84 ; [*0C4D.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT 2A85 ; [*0C4E.0020.0002] # LESS-THAN OR APPROXIMATE 2A86 ; [*0C4F.0020.0002] # GREATER-THAN OR APPROXIMATE 2A87 ; [*0C50.0020.0002] # LESS-THAN AND SINGLE-LINE NOT EQUAL TO 2A88 ; [*0C51.0020.0002] # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO 2A89 ; [*0C52.0020.0002] # LESS-THAN AND NOT APPROXIMATE 2A8A ; [*0C53.0020.0002] # GREATER-THAN AND NOT APPROXIMATE 2A8B ; [*0C54.0020.0002] # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN 2A8C ; [*0C55.0020.0002] # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN 2A8D ; [*0C56.0020.0002] # LESS-THAN ABOVE SIMILAR OR EQUAL 2A8E ; [*0C57.0020.0002] # GREATER-THAN ABOVE SIMILAR OR EQUAL 2A8F ; [*0C58.0020.0002] # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN 2A90 ; [*0C59.0020.0002] # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN 2A91 ; [*0C5A.0020.0002] # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL 2A92 ; [*0C5B.0020.0002] # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL 2A93 ; [*0C5C.0020.0002] # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL 2A94 ; [*0C5D.0020.0002] # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL 2A95 ; [*0C5E.0020.0002] # SLANTED EQUAL TO OR LESS-THAN 2A96 ; [*0C5F.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN 2A97 ; [*0C60.0020.0002] # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE 2A98 ; [*0C61.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE 2A99 ; [*0C62.0020.0002] # DOUBLE-LINE EQUAL TO OR LESS-THAN 2A9A ; [*0C63.0020.0002] # DOUBLE-LINE EQUAL TO OR GREATER-THAN 2A9B ; [*0C64.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN 2A9C ; [*0C65.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN 2A9D ; [*0C66.0020.0002] # SIMILAR OR LESS-THAN 2A9E ; [*0C67.0020.0002] # SIMILAR OR GREATER-THAN 2A9F ; [*0C68.0020.0002] # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN 2AA0 ; [*0C69.0020.0002] # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN 2AA1 ; [*0C6A.0020.0002] # DOUBLE NESTED LESS-THAN 2AA2 ; [*0C6B.0020.0002] # DOUBLE NESTED GREATER-THAN 2AA3 ; [*0C6C.0020.0002] # DOUBLE NESTED LESS-THAN WITH UNDERBAR 2AA4 ; [*0C6D.0020.0002] # GREATER-THAN OVERLAPPING LESS-THAN 2AA5 ; [*0C6E.0020.0002] # GREATER-THAN BESIDE LESS-THAN 2AA6 ; [*0C6F.0020.0002] # LESS-THAN CLOSED BY CURVE 2AA7 ; [*0C70.0020.0002] # GREATER-THAN CLOSED BY CURVE 2AA8 ; [*0C71.0020.0002] # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL 2AA9 ; [*0C72.0020.0002] # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL 2AAA ; [*0C73.0020.0002] # SMALLER THAN 2AAB ; [*0C74.0020.0002] # LARGER THAN 2AAC ; [*0C75.0020.0002] # SMALLER THAN OR EQUAL TO 2AAD ; [*0C76.0020.0002] # LARGER THAN OR EQUAL TO 2AAE ; [*0C77.0020.0002] # EQUALS SIGN WITH BUMPY ABOVE 2AAF ; [*0C78.0020.0002] # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN 2AB0 ; [*0C79.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN 2AB1 ; [*0C7A.0020.0002] # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO 2AB2 ; [*0C7B.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO 2AB3 ; [*0C7C.0020.0002] # PRECEDES ABOVE EQUALS SIGN 2AB4 ; [*0C7D.0020.0002] # SUCCEEDS ABOVE EQUALS SIGN 2AB5 ; [*0C7E.0020.0002] # PRECEDES ABOVE NOT EQUAL TO 2AB6 ; [*0C7F.0020.0002] # SUCCEEDS ABOVE NOT EQUAL TO 2AB7 ; [*0C80.0020.0002] # PRECEDES ABOVE ALMOST EQUAL TO 2AB8 ; [*0C81.0020.0002] # SUCCEEDS ABOVE ALMOST EQUAL TO 2AB9 ; [*0C82.0020.0002] # PRECEDES ABOVE NOT ALMOST EQUAL TO 2ABA ; [*0C83.0020.0002] # SUCCEEDS ABOVE NOT ALMOST EQUAL TO 2ABB ; [*0C84.0020.0002] # DOUBLE PRECEDES 2ABC ; [*0C85.0020.0002] # DOUBLE SUCCEEDS 2ABD ; [*0C86.0020.0002] # SUBSET WITH DOT 2ABE ; [*0C87.0020.0002] # SUPERSET WITH DOT 2ABF ; [*0C88.0020.0002] # SUBSET WITH PLUS SIGN BELOW 2AC0 ; [*0C89.0020.0002] # SUPERSET WITH PLUS SIGN BELOW 2AC1 ; [*0C8A.0020.0002] # SUBSET WITH MULTIPLICATION SIGN BELOW 2AC2 ; [*0C8B.0020.0002] # SUPERSET WITH MULTIPLICATION SIGN BELOW 2AC3 ; [*0C8C.0020.0002] # SUBSET OF OR EQUAL TO WITH DOT ABOVE 2AC4 ; [*0C8D.0020.0002] # SUPERSET OF OR EQUAL TO WITH DOT ABOVE 2AC5 ; [*0C8E.0020.0002] # SUBSET OF ABOVE EQUALS SIGN 2AC6 ; [*0C8F.0020.0002] # SUPERSET OF ABOVE EQUALS SIGN 2AC7 ; [*0C90.0020.0002] # SUBSET OF ABOVE TILDE OPERATOR 2AC8 ; [*0C91.0020.0002] # SUPERSET OF ABOVE TILDE OPERATOR 2AC9 ; [*0C92.0020.0002] # SUBSET OF ABOVE ALMOST EQUAL TO 2ACA ; [*0C93.0020.0002] # SUPERSET OF ABOVE ALMOST EQUAL TO 2ACB ; [*0C94.0020.0002] # SUBSET OF ABOVE NOT EQUAL TO 2ACC ; [*0C95.0020.0002] # SUPERSET OF ABOVE NOT EQUAL TO 2ACD ; [*0C96.0020.0002] # SQUARE LEFT OPEN BOX OPERATOR 2ACE ; [*0C97.0020.0002] # SQUARE RIGHT OPEN BOX OPERATOR 2ACF ; [*0C98.0020.0002] # CLOSED SUBSET 2AD0 ; [*0C99.0020.0002] # CLOSED SUPERSET 2AD1 ; [*0C9A.0020.0002] # CLOSED SUBSET OR EQUAL TO 2AD2 ; [*0C9B.0020.0002] # CLOSED SUPERSET OR EQUAL TO 2AD3 ; [*0C9C.0020.0002] # SUBSET ABOVE SUPERSET 2AD4 ; [*0C9D.0020.0002] # SUPERSET ABOVE SUBSET 2AD5 ; [*0C9E.0020.0002] # SUBSET ABOVE SUBSET 2AD6 ; [*0C9F.0020.0002] # SUPERSET ABOVE SUPERSET 2AD7 ; [*0CA0.0020.0002] # SUPERSET BESIDE SUBSET 2AD8 ; [*0CA1.0020.0002] # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET 2AD9 ; [*0CA2.0020.0002] # ELEMENT OF OPENING DOWNWARDS 2ADA ; [*0CA3.0020.0002] # PITCHFORK WITH TEE TOP 2ADB ; [*0CA4.0020.0002] # TRANSVERSAL INTERSECTION 2ADC ; [*0CA5.0020.0002][.0000.002F.0002] # FORKING 2ADD ; [*0CA5.0020.0002] # NONFORKING 2ADE ; [*0CA6.0020.0002] # SHORT LEFT TACK 2ADF ; [*0CA7.0020.0002] # SHORT DOWN TACK 2AE0 ; [*0CA8.0020.0002] # SHORT UP TACK 2AE1 ; [*0CA9.0020.0002] # PERPENDICULAR WITH S 2AE2 ; [*0CAA.0020.0002] # VERTICAL BAR TRIPLE RIGHT TURNSTILE 2AE3 ; [*0CAB.0020.0002] # DOUBLE VERTICAL BAR LEFT TURNSTILE 2AE4 ; [*0CAC.0020.0002] # VERTICAL BAR DOUBLE LEFT TURNSTILE 2AE5 ; [*0CAD.0020.0002] # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE 2AE6 ; [*0CAE.0020.0002] # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL 2AE7 ; [*0CAF.0020.0002] # SHORT DOWN TACK WITH OVERBAR 2AE8 ; [*0CB0.0020.0002] # SHORT UP TACK WITH UNDERBAR 2AE9 ; [*0CB1.0020.0002] # SHORT UP TACK ABOVE SHORT DOWN TACK 2AEA ; [*0CB2.0020.0002] # DOUBLE DOWN TACK 2AEB ; [*0CB3.0020.0002] # DOUBLE UP TACK 2AEC ; [*0CB4.0020.0002] # DOUBLE STROKE NOT SIGN 2AED ; [*0CB5.0020.0002] # REVERSED DOUBLE STROKE NOT SIGN 2AEE ; [*0CB6.0020.0002] # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH 2AEF ; [*0CB7.0020.0002] # VERTICAL LINE WITH CIRCLE ABOVE 2AF0 ; [*0CB8.0020.0002] # VERTICAL LINE WITH CIRCLE BELOW 2AF1 ; [*0CB9.0020.0002] # DOWN TACK WITH CIRCLE BELOW 2AF2 ; [*0CBA.0020.0002] # PARALLEL WITH HORIZONTAL STROKE 2AF3 ; [*0CBB.0020.0002] # PARALLEL WITH TILDE OPERATOR 2AF4 ; [*0CBC.0020.0002] # TRIPLE VERTICAL BAR BINARY RELATION 2AF5 ; [*0CBD.0020.0002] # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE 2AF6 ; [*0CBE.0020.0002] # TRIPLE COLON OPERATOR 2AF7 ; [*0CBF.0020.0002] # TRIPLE NESTED LESS-THAN 2AF8 ; [*0CC0.0020.0002] # TRIPLE NESTED GREATER-THAN 2AF9 ; [*0CC1.0020.0002] # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO 2AFA ; [*0CC2.0020.0002] # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO 2AFB ; [*0CC3.0020.0002] # TRIPLE SOLIDUS BINARY RELATION 2AFC ; [*0CC4.0020.0002] # LARGE TRIPLE VERTICAL BAR OPERATOR 2AFD ; [*0CC5.0020.0002] # DOUBLE SOLIDUS OPERATOR 2AFE ; [*0CC6.0020.0002] # WHITE VERTICAL BAR 2AFF ; [*0CC7.0020.0002] # N-ARY WHITE VERTICAL BAR 2B00 ; [*0CC8.0020.0002] # NORTH EAST WHITE ARROW 2B01 ; [*0CC9.0020.0002] # NORTH WEST WHITE ARROW 2B02 ; [*0CCA.0020.0002] # SOUTH EAST WHITE ARROW 2B03 ; [*0CCB.0020.0002] # SOUTH WEST WHITE ARROW 2B04 ; [*0CCC.0020.0002] # LEFT RIGHT WHITE ARROW 2B05 ; [*0CCD.0020.0002] # LEFTWARDS BLACK ARROW 2B06 ; [*0CCE.0020.0002] # UPWARDS BLACK ARROW 2B07 ; [*0CCF.0020.0002] # DOWNWARDS BLACK ARROW 2B08 ; [*0CD0.0020.0002] # NORTH EAST BLACK ARROW 2B09 ; [*0CD1.0020.0002] # NORTH WEST BLACK ARROW 2B0A ; [*0CD2.0020.0002] # SOUTH EAST BLACK ARROW 2B0B ; [*0CD3.0020.0002] # SOUTH WEST BLACK ARROW 2B0C ; [*0CD4.0020.0002] # LEFT RIGHT BLACK ARROW 2B0D ; [*0CD5.0020.0002] # UP DOWN BLACK ARROW 2B0E ; [*0CD6.0020.0002] # RIGHTWARDS ARROW WITH TIP DOWNWARDS 2B0F ; [*0CD7.0020.0002] # RIGHTWARDS ARROW WITH TIP UPWARDS 2B10 ; [*0CD8.0020.0002] # LEFTWARDS ARROW WITH TIP DOWNWARDS 2B11 ; [*0CD9.0020.0002] # LEFTWARDS ARROW WITH TIP UPWARDS 2B12 ; [*0CDA.0020.0002] # SQUARE WITH TOP HALF BLACK 2B13 ; [*0CDB.0020.0002] # SQUARE WITH BOTTOM HALF BLACK 2B14 ; [*0CDC.0020.0002] # SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK 2B15 ; [*0CDD.0020.0002] # SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK 2B16 ; [*0CDE.0020.0002] # DIAMOND WITH LEFT HALF BLACK 2B17 ; [*0CDF.0020.0002] # DIAMOND WITH RIGHT HALF BLACK 2B18 ; [*0CE0.0020.0002] # DIAMOND WITH TOP HALF BLACK 2B19 ; [*0CE1.0020.0002] # DIAMOND WITH BOTTOM HALF BLACK 2B1A ; [*0CE2.0020.0002] # DOTTED SQUARE 2B1B ; [*0CE3.0020.0002] # BLACK LARGE SQUARE 2B1C ; [*0CE4.0020.0002] # WHITE LARGE SQUARE 2B1D ; [*0CE5.0020.0002] # BLACK VERY SMALL SQUARE 2B1E ; [*0CE6.0020.0002] # WHITE VERY SMALL SQUARE 2B1F ; [*0CE7.0020.0002] # BLACK PENTAGON 2B20 ; [*0CE8.0020.0002] # WHITE PENTAGON 2B21 ; [*0CE9.0020.0002] # WHITE HEXAGON 2B22 ; [*0CEA.0020.0002] # BLACK HEXAGON 2B23 ; [*0CEB.0020.0002] # HORIZONTAL BLACK HEXAGON 2B24 ; [*0CEC.0020.0002] # BLACK LARGE CIRCLE 2B25 ; [*0CED.0020.0002] # BLACK MEDIUM DIAMOND 2B26 ; [*0CEE.0020.0002] # WHITE MEDIUM DIAMOND 2B27 ; [*0CEF.0020.0002] # BLACK MEDIUM LOZENGE 2B28 ; [*0CF0.0020.0002] # WHITE MEDIUM LOZENGE 2B29 ; [*0CF1.0020.0002] # BLACK SMALL DIAMOND 2B2A ; [*0CF2.0020.0002] # BLACK SMALL LOZENGE 2B2B ; [*0CF3.0020.0002] # WHITE SMALL LOZENGE 2B2C ; [*0CF4.0020.0002] # BLACK HORIZONTAL ELLIPSE 2B2D ; [*0CF5.0020.0002] # WHITE HORIZONTAL ELLIPSE 2B2E ; [*0CF6.0020.0002] # BLACK VERTICAL ELLIPSE 2B2F ; [*0CF7.0020.0002] # WHITE VERTICAL ELLIPSE 2B30 ; [*0CF8.0020.0002] # LEFT ARROW WITH SMALL CIRCLE 2B31 ; [*0CF9.0020.0002] # THREE LEFTWARDS ARROWS 2B32 ; [*0CFA.0020.0002] # LEFT ARROW WITH CIRCLED PLUS 2B33 ; [*0CFB.0020.0002] # LONG LEFTWARDS SQUIGGLE ARROW 2B34 ; [*0CFC.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE 2B35 ; [*0CFD.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE 2B36 ; [*0CFE.0020.0002] # LEFTWARDS TWO-HEADED ARROW FROM BAR 2B37 ; [*0CFF.0020.0002] # LEFTWARDS TWO-HEADED TRIPLE DASH ARROW 2B38 ; [*0D00.0020.0002] # LEFTWARDS ARROW WITH DOTTED STEM 2B39 ; [*0D01.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE 2B3A ; [*0D02.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE 2B3B ; [*0D03.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL 2B3C ; [*0D04.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE 2B3D ; [*0D05.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE 2B3E ; [*0D06.0020.0002] # LEFTWARDS ARROW THROUGH X 2B3F ; [*0D07.0020.0002] # WAVE ARROW POINTING DIRECTLY LEFT 2B40 ; [*0D08.0020.0002] # EQUALS SIGN ABOVE LEFTWARDS ARROW 2B41 ; [*0D09.0020.0002] # REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW 2B42 ; [*0D0A.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO 2B43 ; [*0D0B.0020.0002] # RIGHTWARDS ARROW THROUGH GREATER-THAN 2B44 ; [*0D0C.0020.0002] # RIGHTWARDS ARROW THROUGH SUPERSET 2B45 ; [*0D0D.0020.0002] # LEFTWARDS QUADRUPLE ARROW 2B46 ; [*0D0E.0020.0002] # RIGHTWARDS QUADRUPLE ARROW 2B47 ; [*0D0F.0020.0002] # REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW 2B48 ; [*0D10.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO 2B49 ; [*0D11.0020.0002] # TILDE OPERATOR ABOVE LEFTWARDS ARROW 2B4A ; [*0D12.0020.0002] # LEFTWARDS ARROW ABOVE ALMOST EQUAL TO 2B4B ; [*0D13.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR 2B4C ; [*0D14.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR 2B4D ; [*0D15.0020.0002] # DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW 2B4E ; [*0D16.0020.0002] # SHORT SLANTED NORTH ARROW 2B4F ; [*0D17.0020.0002] # SHORT BACKSLANTED SOUTH ARROW 2B50 ; [*0D18.0020.0002] # WHITE MEDIUM STAR 2B51 ; [*0D19.0020.0002] # BLACK SMALL STAR 2B52 ; [*0D1A.0020.0002] # WHITE SMALL STAR 2B53 ; [*0D1B.0020.0002] # BLACK RIGHT-POINTING PENTAGON 2B54 ; [*0D1C.0020.0002] # WHITE RIGHT-POINTING PENTAGON 2B55 ; [*0D1D.0020.0002] # HEAVY LARGE CIRCLE 2B56 ; [*0D1E.0020.0002] # HEAVY OVAL WITH OVAL INSIDE 2B57 ; [*0D1F.0020.0002] # HEAVY CIRCLE WITH CIRCLE INSIDE 2B58 ; [*0D20.0020.0002] # HEAVY CIRCLE 2B59 ; [*0D21.0020.0002] # HEAVY CIRCLED SALTIRE 2B5A ; [*0D22.0020.0002] # SLANTED NORTH ARROW WITH HOOKED HEAD 2B5B ; [*0D23.0020.0002] # BACKSLANTED SOUTH ARROW WITH HOOKED TAIL 2B5C ; [*0D24.0020.0002] # SLANTED NORTH ARROW WITH HORIZONTAL TAIL 2B5D ; [*0D25.0020.0002] # BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL 2B5E ; [*0D26.0020.0002] # BENT ARROW POINTING DOWNWARDS THEN NORTH EAST 2B5F ; [*0D27.0020.0002] # SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST 2B60 ; [*0D28.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW 2B61 ; [*0D29.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW 2B62 ; [*0D2A.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW 2B63 ; [*0D2B.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW 2B64 ; [*0D2C.0020.0002] # LEFT RIGHT TRIANGLE-HEADED ARROW 2B65 ; [*0D2D.0020.0002] # UP DOWN TRIANGLE-HEADED ARROW 2B66 ; [*0D2E.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW 2B67 ; [*0D2F.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW 2B68 ; [*0D30.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW 2B69 ; [*0D31.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW 2B6A ; [*0D32.0020.0002] # LEFTWARDS TRIANGLE-HEADED DASHED ARROW 2B6B ; [*0D33.0020.0002] # UPWARDS TRIANGLE-HEADED DASHED ARROW 2B6C ; [*0D34.0020.0002] # RIGHTWARDS TRIANGLE-HEADED DASHED ARROW 2B6D ; [*0D35.0020.0002] # DOWNWARDS TRIANGLE-HEADED DASHED ARROW 2B6E ; [*0D36.0020.0002] # CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW 2B6F ; [*0D37.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW 2B70 ; [*0D38.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW TO BAR 2B71 ; [*0D39.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW TO BAR 2B72 ; [*0D3A.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR 2B73 ; [*0D3B.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B76 ; [*0D3C.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW TO BAR 2B77 ; [*0D3D.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW TO BAR 2B78 ; [*0D3E.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW TO BAR 2B79 ; [*0D3F.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW TO BAR 2B7A ; [*0D40.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE 2B7B ; [*0D41.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE 2B7C ; [*0D42.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE 2B7D ; [*0D43.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE 2B7E ; [*0D44.0020.0002] # HORIZONTAL TAB KEY 2B7F ; [*0D45.0020.0002] # VERTICAL TAB KEY 2B80 ; [*0D46.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW 2B81 ; [*0D47.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW 2B82 ; [*0D48.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW 2B83 ; [*0D49.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW 2B84 ; [*0D4A.0020.0002] # LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS 2B85 ; [*0D4B.0020.0002] # UPWARDS TRIANGLE-HEADED PAIRED ARROWS 2B86 ; [*0D4C.0020.0002] # RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS 2B87 ; [*0D4D.0020.0002] # DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS 2B88 ; [*0D4E.0020.0002] # LEFTWARDS BLACK CIRCLED WHITE ARROW 2B89 ; [*0D4F.0020.0002] # UPWARDS BLACK CIRCLED WHITE ARROW 2B8A ; [*0D50.0020.0002] # RIGHTWARDS BLACK CIRCLED WHITE ARROW 2B8B ; [*0D51.0020.0002] # DOWNWARDS BLACK CIRCLED WHITE ARROW 2B8C ; [*0D52.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW 2B8D ; [*0D53.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW 2B8E ; [*0D54.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW 2B8F ; [*0D55.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW 2B90 ; [*0D56.0020.0002] # RETURN LEFT 2B91 ; [*0D57.0020.0002] # RETURN RIGHT 2B92 ; [*0D58.0020.0002] # NEWLINE LEFT 2B93 ; [*0D59.0020.0002] # NEWLINE RIGHT 2B94 ; [*0D5A.0020.0002] # FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE 2B95 ; [*0D5B.0020.0002] # RIGHTWARDS BLACK ARROW 2B98 ; [*0D5C.0020.0002] # THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD 2B99 ; [*0D5D.0020.0002] # THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD 2B9A ; [*0D5E.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD 2B9B ; [*0D5F.0020.0002] # THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD 2B9C ; [*0D60.0020.0002] # BLACK LEFTWARDS EQUILATERAL ARROWHEAD 2B9D ; [*0D61.0020.0002] # BLACK UPWARDS EQUILATERAL ARROWHEAD 2B9E ; [*0D62.0020.0002] # BLACK RIGHTWARDS EQUILATERAL ARROWHEAD 2B9F ; [*0D63.0020.0002] # BLACK DOWNWARDS EQUILATERAL ARROWHEAD 2BA0 ; [*0D64.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS 2BA1 ; [*0D65.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS 2BA2 ; [*0D66.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS 2BA3 ; [*0D67.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS 2BA4 ; [*0D68.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS 2BA5 ; [*0D69.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS 2BA6 ; [*0D6A.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS 2BA7 ; [*0D6B.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS 2BA8 ; [*0D6C.0020.0002] # BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW 2BA9 ; [*0D6D.0020.0002] # BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW 2BAA ; [*0D6E.0020.0002] # BLACK CURVED UPWARDS AND LEFTWARDS ARROW 2BAB ; [*0D6F.0020.0002] # BLACK CURVED UPWARDS AND RIGHTWARDS ARROW 2BAC ; [*0D70.0020.0002] # BLACK CURVED LEFTWARDS AND UPWARDS ARROW 2BAD ; [*0D71.0020.0002] # BLACK CURVED RIGHTWARDS AND UPWARDS ARROW 2BAE ; [*0D72.0020.0002] # BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW 2BAF ; [*0D73.0020.0002] # BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW 2BB0 ; [*0D74.0020.0002] # RIBBON ARROW DOWN LEFT 2BB1 ; [*0D75.0020.0002] # RIBBON ARROW DOWN RIGHT 2BB2 ; [*0D76.0020.0002] # RIBBON ARROW UP LEFT 2BB3 ; [*0D77.0020.0002] # RIBBON ARROW UP RIGHT 2BB4 ; [*0D78.0020.0002] # RIBBON ARROW LEFT UP 2BB5 ; [*0D79.0020.0002] # RIBBON ARROW RIGHT UP 2BB6 ; [*0D7A.0020.0002] # RIBBON ARROW LEFT DOWN 2BB7 ; [*0D7B.0020.0002] # RIBBON ARROW RIGHT DOWN 2BB8 ; [*0D7C.0020.0002] # UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR 2BB9 ; [*0D7D.0020.0002] # UP ARROWHEAD IN A RECTANGLE BOX 2BBD ; [*0D7E.0020.0002] # BALLOT BOX WITH LIGHT X 2BBE ; [*0D7F.0020.0002] # CIRCLED X 2BBF ; [*0D80.0020.0002] # CIRCLED BOLD X 2BC0 ; [*0D81.0020.0002] # BLACK SQUARE CENTRED 2BC1 ; [*0D82.0020.0002] # BLACK DIAMOND CENTRED 2BC2 ; [*0D83.0020.0002] # TURNED BLACK PENTAGON 2BC3 ; [*0D84.0020.0002] # HORIZONTAL BLACK OCTAGON 2BC4 ; [*0D85.0020.0002] # BLACK OCTAGON 2BC5 ; [*0D86.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE CENTRED 2BC6 ; [*0D87.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED 2BC7 ; [*0D88.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED 2BC8 ; [*0D89.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED 2BCA ; [*0D8A.0020.0002] # TOP HALF BLACK CIRCLE 2BCB ; [*0D8B.0020.0002] # BOTTOM HALF BLACK CIRCLE 2BCC ; [*0D8C.0020.0002] # LIGHT FOUR POINTED BLACK CUSP 2BCD ; [*0D8D.0020.0002] # ROTATED LIGHT FOUR POINTED BLACK CUSP 2BCE ; [*0D8E.0020.0002] # WHITE FOUR POINTED CUSP 2BCF ; [*0D8F.0020.0002] # ROTATED WHITE FOUR POINTED CUSP 2BD0 ; [*0D90.0020.0002] # SQUARE POSITION INDICATOR 2BD1 ; [*0D91.0020.0002] # UNCERTAINTY SIGN 2BEC ; [*0D92.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS 2BED ; [*0D93.0020.0002] # UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS 2BEE ; [*0D94.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS 2BEF ; [*0D95.0020.0002] # DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS 2CE5 ; [*0D96.0020.0002] # COPTIC SYMBOL MI RO 2CE6 ; [*0D97.0020.0002] # COPTIC SYMBOL PI RO 2CE7 ; [*0D98.0020.0002] # COPTIC SYMBOL STAUROS 2CE8 ; [*0D99.0020.0002] # COPTIC SYMBOL TAU RO 2CE9 ; [*0D9A.0020.0002] # COPTIC SYMBOL KHI RO 2CEA ; [*0D9B.0020.0002] # COPTIC SYMBOL SHIMA SIMA 2CF9 ; [*0281.0020.0002] # COPTIC OLD NUBIAN FULL STOP 2CFA ; [*026E.0020.0002] # COPTIC OLD NUBIAN DIRECT QUESTION MARK 2CFB ; [*026F.0020.0002] # COPTIC OLD NUBIAN INDIRECT QUESTION MARK 2CFC ; [*02F6.0020.0002] # COPTIC OLD NUBIAN VERSE DIVIDER 2CFD ; [*1AE2.0020.0002] # COPTIC FRACTION ONE HALF 2CFE ; [*0282.0020.0002] # COPTIC FULL STOP 2CFF ; [*02F7.0020.0002] # COPTIC MORPHOLOGICAL DIVIDER 2D70 ; [*0427.0020.0002] # TIFINAGH SEPARATOR MARK 2D7F ; [.0000.0000.0000] # TIFINAGH CONSONANT JOINER 2E00 ; [*03B6.0020.0002] # RIGHT ANGLE SUBSTITUTION MARKER 2E01 ; [*03B7.0020.0002] # RIGHT ANGLE DOTTED SUBSTITUTION MARKER 2E02 ; [*035B.0020.0002] # LEFT SUBSTITUTION BRACKET 2E03 ; [*035C.0020.0002] # RIGHT SUBSTITUTION BRACKET 2E04 ; [*035D.0020.0002] # LEFT DOTTED SUBSTITUTION BRACKET 2E05 ; [*035E.0020.0002] # RIGHT DOTTED SUBSTITUTION BRACKET 2E06 ; [*03B8.0020.0002] # RAISED INTERPOLATION MARKER 2E07 ; [*03B9.0020.0002] # RAISED DOTTED INTERPOLATION MARKER 2E08 ; [*03BA.0020.0002] # DOTTED TRANSPOSITION MARKER 2E09 ; [*035F.0020.0002] # LEFT TRANSPOSITION BRACKET 2E0A ; [*0360.0020.0002] # RIGHT TRANSPOSITION BRACKET 2E0B ; [*03BB.0020.0002] # RAISED SQUARE 2E0C ; [*0361.0020.0002] # LEFT RAISED OMISSION BRACKET 2E0D ; [*0362.0020.0002] # RIGHT RAISED OMISSION BRACKET 2E0E ; [*03BC.0020.0002] # EDITORIAL CORONIS 2E0F ; [*03BD.0020.0002] # PARAGRAPHOS 2E10 ; [*03BE.0020.0002] # FORKED PARAGRAPHOS 2E11 ; [*03BF.0020.0002] # REVERSED FORKED PARAGRAPHOS 2E12 ; [*03C0.0020.0002] # HYPODIASTOLE 2E13 ; [*03C1.0020.0002] # DOTTED OBELOS 2E14 ; [*03C2.0020.0002] # DOWNWARDS ANCORA 2E15 ; [*03C3.0020.0002] # UPWARDS ANCORA 2E16 ; [*03C4.0020.0002] # DOTTED RIGHT-POINTING ANGLE 2E17 ; [*021C.0020.0002] # DOUBLE OBLIQUE HYPHEN 2E18 ; [*0276.0020.0002] # INVERTED INTERROBANG 2E19 ; [*02F8.0020.0002] # PALM BRANCH 2E1A ; [*03C5.0020.0002] # HYPHEN WITH DIAERESIS 2E1B ; [*03C6.0020.0002] # TILDE WITH RING ABOVE 2E1C ; [*0363.0020.0002] # LEFT LOW PARAPHRASE BRACKET 2E1D ; [*0364.0020.0002] # RIGHT LOW PARAPHRASE BRACKET 2E1E ; [*03C7.0020.0002] # TILDE WITH DOT ABOVE 2E1F ; [*03C8.0020.0002] # TILDE WITH DOT BELOW 2E20 ; [*0365.0020.0002] # LEFT VERTICAL BAR WITH QUILL 2E21 ; [*0366.0020.0002] # RIGHT VERTICAL BAR WITH QUILL 2E22 ; [*0367.0020.0002] # TOP LEFT HALF BRACKET 2E23 ; [*0368.0020.0002] # TOP RIGHT HALF BRACKET 2E24 ; [*0369.0020.0002] # BOTTOM LEFT HALF BRACKET 2E25 ; [*036A.0020.0002] # BOTTOM RIGHT HALF BRACKET 2E26 ; [*036B.0020.0002] # LEFT SIDEWAYS U BRACKET 2E27 ; [*036C.0020.0002] # RIGHT SIDEWAYS U BRACKET 2E28 ; [*036D.0020.0002] # LEFT DOUBLE PARENTHESIS 2E29 ; [*036E.0020.0002] # RIGHT DOUBLE PARENTHESIS 2E2A ; [*02F1.0020.0002] # TWO DOTS OVER ONE DOT PUNCTUATION 2E2B ; [*02F2.0020.0002] # ONE DOT OVER TWO DOTS PUNCTUATION 2E2C ; [*02F3.0020.0002] # SQUARED FOUR DOT PUNCTUATION 2E2D ; [*02F4.0020.0002] # FIVE DOT MARK 2E2E ; [*0268.0020.0002] # REVERSED QUESTION MARK 2E30 ; [*0283.0020.0002] # RING POINT 2E31 ; [*028C.0020.0002] # WORD SEPARATOR MIDDLE DOT 2E32 ; [*0224.0020.0002] # TURNED COMMA 2E33 ; [*028D.0020.0002] # RAISED DOT 2E34 ; [*0223.0020.0002] # RAISED COMMA 2E35 ; [*0237.0020.0002] # TURNED SEMICOLON 2E36 ; [*03A1.0020.0002] # DAGGER WITH LEFT GUARD 2E37 ; [*03A2.0020.0002] # DAGGER WITH RIGHT GUARD 2E38 ; [*03A3.0020.0002] # TURNED DAGGER 2E39 ; [*038A.0020.0002] # TOP HALF SECTION SIGN 2E3A ; [*0218.0020.0002] # TWO-EM DASH 2E3B ; [*0219.0020.0002] # THREE-EM DASH 2E3C ; [*0284.0020.0002] # STENOGRAPHIC FULL STOP 2E3D ; [*02F5.0020.0002] # VERTICAL SIX DOTS 2E3E ; [*0384.0020.0002] # WIGGLY VERTICAL LINE 2E3F ; [*038D.0020.0002] # CAPITULUM 2E40 ; [*021D.0020.0002] # DOUBLE HYPHEN 2E41 ; [*0225.0020.0002] # REVERSED COMMA 2E42 ; [*0311.0020.0002] # DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43 ; [*021B.0020.0002] # DASH WITH LEFT UPTURN 2E44 ; [*03C9.0020.0002] # DOUBLE SUSPENSION MARK 2FF0 ; [*1A5B.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT 2FF1 ; [*1A5C.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW 2FF2 ; [*1A5D.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT 2FF3 ; [*1A5E.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW 2FF4 ; [*1A5F.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND 2FF5 ; [*1A60.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE 2FF6 ; [*1A61.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW 2FF7 ; [*1A62.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT 2FF8 ; [*1A63.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT 2FF9 ; [*1A64.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT 2FFA ; [*1A65.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT 2FFB ; [*1A66.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID 3000 ; [*0209.0020.0003] # IDEOGRAPHIC SPACE 3001 ; [*0231.0020.0002] # IDEOGRAPHIC COMMA 3002 ; [*028A.0020.0002] # IDEOGRAPHIC FULL STOP 3003 ; [*03AC.0020.0002] # DITTO MARK 3004 ; [*1A8B.0020.0002] # JAPANESE INDUSTRIAL STANDARD SYMBOL 3008 ; [*036F.0020.0002] # LEFT ANGLE BRACKET 3009 ; [*0370.0020.0002] # RIGHT ANGLE BRACKET 300A ; [*0371.0020.0002] # LEFT DOUBLE ANGLE BRACKET 300B ; [*0372.0020.0002] # RIGHT DOUBLE ANGLE BRACKET 300C ; [*0373.0020.0002] # LEFT CORNER BRACKET 300D ; [*0374.0020.0002] # RIGHT CORNER BRACKET 300E ; [*0375.0020.0002] # LEFT WHITE CORNER BRACKET 300F ; [*0376.0020.0002] # RIGHT WHITE CORNER BRACKET 3010 ; [*0377.0020.0002] # LEFT BLACK LENTICULAR BRACKET 3011 ; [*0378.0020.0002] # RIGHT BLACK LENTICULAR BRACKET 3012 ; [*1A8C.0020.0002] # POSTAL MARK 3013 ; [*1A8D.0020.0002] # GETA MARK 3014 ; [*0379.0020.0002] # LEFT TORTOISE SHELL BRACKET 3015 ; [*037A.0020.0002] # RIGHT TORTOISE SHELL BRACKET 3016 ; [*037B.0020.0002] # LEFT WHITE LENTICULAR BRACKET 3017 ; [*037C.0020.0002] # RIGHT WHITE LENTICULAR BRACKET 3018 ; [*037D.0020.0002] # LEFT WHITE TORTOISE SHELL BRACKET 3019 ; [*037E.0020.0002] # RIGHT WHITE TORTOISE SHELL BRACKET 301A ; [*037F.0020.0002] # LEFT WHITE SQUARE BRACKET 301B ; [*0380.0020.0002] # RIGHT WHITE SQUARE BRACKET 301C ; [*021E.0020.0002] # WAVE DASH 301D ; [*0312.0020.0002] # REVERSED DOUBLE PRIME QUOTATION MARK 301E ; [*0313.0020.0002] # DOUBLE PRIME QUOTATION MARK 301F ; [*0314.0020.0002] # LOW DOUBLE PRIME QUOTATION MARK 3020 ; [*1A8E.0020.0002] # POSTAL MARK FACE 3030 ; [*021F.0020.0002] # WAVY DASH 3036 ; [*1A8C.0020.0004] # CIRCLED POSTAL MARK 3037 ; [*1A8F.0020.0002] # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL 303D ; [*03AD.0020.0002] # PART ALTERNATION MARK 303E ; [*1A90.0020.0002] # IDEOGRAPHIC VARIATION INDICATOR 303F ; [*1A91.0020.0002] # IDEOGRAPHIC HALF FILL SPACE 309B ; [*0491.0020.0002] # KATAKANA-HIRAGANA VOICED SOUND MARK 309C ; [*0492.0020.0002] # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 30A0 ; [*0220.0020.0002] # KATAKANA-HIRAGANA DOUBLE HYPHEN 30FB ; [*0221.0020.0002] # KATAKANA MIDDLE DOT 3190 ; [*1A92.0020.0002] # IDEOGRAPHIC ANNOTATION LINKING MARK 3191 ; [*1A93.0020.0002] # IDEOGRAPHIC ANNOTATION REVERSE MARK 31C0 ; [*1A67.0020.0002] # CJK STROKE T 31C1 ; [*1A68.0020.0002] # CJK STROKE WG 31C2 ; [*1A69.0020.0002] # CJK STROKE XG 31C3 ; [*1A6A.0020.0002] # CJK STROKE BXG 31C4 ; [*1A6B.0020.0002] # CJK STROKE SW 31C5 ; [*1A6C.0020.0002] # CJK STROKE HZZ 31C6 ; [*1A6D.0020.0002] # CJK STROKE HZG 31C7 ; [*1A6E.0020.0002] # CJK STROKE HP 31C8 ; [*1A6F.0020.0002] # CJK STROKE HZWG 31C9 ; [*1A70.0020.0002] # CJK STROKE SZWG 31CA ; [*1A71.0020.0002] # CJK STROKE HZT 31CB ; [*1A72.0020.0002] # CJK STROKE HZZP 31CC ; [*1A73.0020.0002] # CJK STROKE HPWG 31CD ; [*1A74.0020.0002] # CJK STROKE HZW 31CE ; [*1A75.0020.0002] # CJK STROKE HZZZ 31CF ; [*1A76.0020.0002] # CJK STROKE N 31D0 ; [*1A77.0020.0002] # CJK STROKE H 31D1 ; [*1A78.0020.0002] # CJK STROKE S 31D2 ; [*1A79.0020.0002] # CJK STROKE P 31D3 ; [*1A7A.0020.0002] # CJK STROKE SP 31D4 ; [*1A7B.0020.0002] # CJK STROKE D 31D5 ; [*1A7C.0020.0002] # CJK STROKE HZ 31D6 ; [*1A7D.0020.0002] # CJK STROKE HG 31D7 ; [*1A7E.0020.0002] # CJK STROKE SZ 31D8 ; [*1A7F.0020.0002] # CJK STROKE SWZ 31D9 ; [*1A80.0020.0002] # CJK STROKE ST 31DA ; [*1A81.0020.0002] # CJK STROKE SG 31DB ; [*1A82.0020.0002] # CJK STROKE PD 31DC ; [*1A83.0020.0002] # CJK STROKE PZ 31DD ; [*1A84.0020.0002] # CJK STROKE TN 31DE ; [*1A85.0020.0002] # CJK STROKE SZZ 31DF ; [*1A86.0020.0002] # CJK STROKE SWG 31E0 ; [*1A87.0020.0002] # CJK STROKE HXWG 31E1 ; [*1A88.0020.0002] # CJK STROKE HZZZG 31E2 ; [*1A89.0020.0002] # CJK STROKE PG 31E3 ; [*1A8A.0020.0002] # CJK STROKE Q 327F ; [*1A94.0020.0002] # KOREAN STANDARD SYMBOL 4DC0 ; [*0EAA.0020.0002] # HEXAGRAM FOR THE CREATIVE HEAVEN 4DC1 ; [*0EAB.0020.0002] # HEXAGRAM FOR THE RECEPTIVE EARTH 4DC2 ; [*0EAC.0020.0002] # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING 4DC3 ; [*0EAD.0020.0002] # HEXAGRAM FOR YOUTHFUL FOLLY 4DC4 ; [*0EAE.0020.0002] # HEXAGRAM FOR WAITING 4DC5 ; [*0EAF.0020.0002] # HEXAGRAM FOR CONFLICT 4DC6 ; [*0EB0.0020.0002] # HEXAGRAM FOR THE ARMY 4DC7 ; [*0EB1.0020.0002] # HEXAGRAM FOR HOLDING TOGETHER 4DC8 ; [*0EB2.0020.0002] # HEXAGRAM FOR SMALL TAMING 4DC9 ; [*0EB3.0020.0002] # HEXAGRAM FOR TREADING 4DCA ; [*0EB4.0020.0002] # HEXAGRAM FOR PEACE 4DCB ; [*0EB5.0020.0002] # HEXAGRAM FOR STANDSTILL 4DCC ; [*0EB6.0020.0002] # HEXAGRAM FOR FELLOWSHIP 4DCD ; [*0EB7.0020.0002] # HEXAGRAM FOR GREAT POSSESSION 4DCE ; [*0EB8.0020.0002] # HEXAGRAM FOR MODESTY 4DCF ; [*0EB9.0020.0002] # HEXAGRAM FOR ENTHUSIASM 4DD0 ; [*0EBA.0020.0002] # HEXAGRAM FOR FOLLOWING 4DD1 ; [*0EBB.0020.0002] # HEXAGRAM FOR WORK ON THE DECAYED 4DD2 ; [*0EBC.0020.0002] # HEXAGRAM FOR APPROACH 4DD3 ; [*0EBD.0020.0002] # HEXAGRAM FOR CONTEMPLATION 4DD4 ; [*0EBE.0020.0002] # HEXAGRAM FOR BITING THROUGH 4DD5 ; [*0EBF.0020.0002] # HEXAGRAM FOR GRACE 4DD6 ; [*0EC0.0020.0002] # HEXAGRAM FOR SPLITTING APART 4DD7 ; [*0EC1.0020.0002] # HEXAGRAM FOR RETURN 4DD8 ; [*0EC2.0020.0002] # HEXAGRAM FOR INNOCENCE 4DD9 ; [*0EC3.0020.0002] # HEXAGRAM FOR GREAT TAMING 4DDA ; [*0EC4.0020.0002] # HEXAGRAM FOR MOUTH CORNERS 4DDB ; [*0EC5.0020.0002] # HEXAGRAM FOR GREAT PREPONDERANCE 4DDC ; [*0EC6.0020.0002] # HEXAGRAM FOR THE ABYSMAL WATER 4DDD ; [*0EC7.0020.0002] # HEXAGRAM FOR THE CLINGING FIRE 4DDE ; [*0EC8.0020.0002] # HEXAGRAM FOR INFLUENCE 4DDF ; [*0EC9.0020.0002] # HEXAGRAM FOR DURATION 4DE0 ; [*0ECA.0020.0002] # HEXAGRAM FOR RETREAT 4DE1 ; [*0ECB.0020.0002] # HEXAGRAM FOR GREAT POWER 4DE2 ; [*0ECC.0020.0002] # HEXAGRAM FOR PROGRESS 4DE3 ; [*0ECD.0020.0002] # HEXAGRAM FOR DARKENING OF THE LIGHT 4DE4 ; [*0ECE.0020.0002] # HEXAGRAM FOR THE FAMILY 4DE5 ; [*0ECF.0020.0002] # HEXAGRAM FOR OPPOSITION 4DE6 ; [*0ED0.0020.0002] # HEXAGRAM FOR OBSTRUCTION 4DE7 ; [*0ED1.0020.0002] # HEXAGRAM FOR DELIVERANCE 4DE8 ; [*0ED2.0020.0002] # HEXAGRAM FOR DECREASE 4DE9 ; [*0ED3.0020.0002] # HEXAGRAM FOR INCREASE 4DEA ; [*0ED4.0020.0002] # HEXAGRAM FOR BREAKTHROUGH 4DEB ; [*0ED5.0020.0002] # HEXAGRAM FOR COMING TO MEET 4DEC ; [*0ED6.0020.0002] # HEXAGRAM FOR GATHERING TOGETHER 4DED ; [*0ED7.0020.0002] # HEXAGRAM FOR PUSHING UPWARD 4DEE ; [*0ED8.0020.0002] # HEXAGRAM FOR OPPRESSION 4DEF ; [*0ED9.0020.0002] # HEXAGRAM FOR THE WELL 4DF0 ; [*0EDA.0020.0002] # HEXAGRAM FOR REVOLUTION 4DF1 ; [*0EDB.0020.0002] # HEXAGRAM FOR THE CAULDRON 4DF2 ; [*0EDC.0020.0002] # HEXAGRAM FOR THE AROUSING THUNDER 4DF3 ; [*0EDD.0020.0002] # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN 4DF4 ; [*0EDE.0020.0002] # HEXAGRAM FOR DEVELOPMENT 4DF5 ; [*0EDF.0020.0002] # HEXAGRAM FOR THE MARRYING MAIDEN 4DF6 ; [*0EE0.0020.0002] # HEXAGRAM FOR ABUNDANCE 4DF7 ; [*0EE1.0020.0002] # HEXAGRAM FOR THE WANDERER 4DF8 ; [*0EE2.0020.0002] # HEXAGRAM FOR THE GENTLE WIND 4DF9 ; [*0EE3.0020.0002] # HEXAGRAM FOR THE JOYOUS LAKE 4DFA ; [*0EE4.0020.0002] # HEXAGRAM FOR DISPERSION 4DFB ; [*0EE5.0020.0002] # HEXAGRAM FOR LIMITATION 4DFC ; [*0EE6.0020.0002] # HEXAGRAM FOR INNER TRUTH 4DFD ; [*0EE7.0020.0002] # HEXAGRAM FOR SMALL PREPONDERANCE 4DFE ; [*0EE8.0020.0002] # HEXAGRAM FOR AFTER COMPLETION 4DFF ; [*0EE9.0020.0002] # HEXAGRAM FOR BEFORE COMPLETION A490 ; [*0F41.0020.0002] # YI RADICAL QOT A491 ; [*0F42.0020.0002] # YI RADICAL LI A492 ; [*0F43.0020.0002] # YI RADICAL KIT A493 ; [*0F44.0020.0002] # YI RADICAL NYIP A494 ; [*0F45.0020.0002] # YI RADICAL CYP A495 ; [*0F46.0020.0002] # YI RADICAL SSI A496 ; [*0F47.0020.0002] # YI RADICAL GGOP A497 ; [*0F48.0020.0002] # YI RADICAL GEP A498 ; [*0F49.0020.0002] # YI RADICAL MI A499 ; [*0F4A.0020.0002] # YI RADICAL HXIT A49A ; [*0F4B.0020.0002] # YI RADICAL LYR A49B ; [*0F4C.0020.0002] # YI RADICAL BBUT A49C ; [*0F4D.0020.0002] # YI RADICAL MOP A49D ; [*0F4E.0020.0002] # YI RADICAL YO A49E ; [*0F4F.0020.0002] # YI RADICAL PUT A49F ; [*0F50.0020.0002] # YI RADICAL HXUO A4A0 ; [*0F51.0020.0002] # YI RADICAL TAT A4A1 ; [*0F52.0020.0002] # YI RADICAL GA A4A2 ; [*0F53.0020.0002] # YI RADICAL ZUP A4A3 ; [*0F54.0020.0002] # YI RADICAL CYT A4A4 ; [*0F55.0020.0002] # YI RADICAL DDUR A4A5 ; [*0F56.0020.0002] # YI RADICAL BUR A4A6 ; [*0F57.0020.0002] # YI RADICAL GGUO A4A7 ; [*0F58.0020.0002] # YI RADICAL NYOP A4A8 ; [*0F59.0020.0002] # YI RADICAL TU A4A9 ; [*0F5A.0020.0002] # YI RADICAL OP A4AA ; [*0F5B.0020.0002] # YI RADICAL JJUT A4AB ; [*0F5C.0020.0002] # YI RADICAL ZOT A4AC ; [*0F5D.0020.0002] # YI RADICAL PYT A4AD ; [*0F5E.0020.0002] # YI RADICAL HMO A4AE ; [*0F5F.0020.0002] # YI RADICAL YIT A4AF ; [*0F60.0020.0002] # YI RADICAL VUR A4B0 ; [*0F61.0020.0002] # YI RADICAL SHY A4B1 ; [*0F62.0020.0002] # YI RADICAL VEP A4B2 ; [*0F63.0020.0002] # YI RADICAL ZA A4B3 ; [*0F64.0020.0002] # YI RADICAL JO A4B4 ; [*0F65.0020.0002] # YI RADICAL NZUP A4B5 ; [*0F66.0020.0002] # YI RADICAL JJY A4B6 ; [*0F67.0020.0002] # YI RADICAL GOT A4B7 ; [*0F68.0020.0002] # YI RADICAL JJIE A4B8 ; [*0F69.0020.0002] # YI RADICAL WO A4B9 ; [*0F6A.0020.0002] # YI RADICAL DU A4BA ; [*0F6B.0020.0002] # YI RADICAL SHUR A4BB ; [*0F6C.0020.0002] # YI RADICAL LIE A4BC ; [*0F6D.0020.0002] # YI RADICAL CY A4BD ; [*0F6E.0020.0002] # YI RADICAL CUOP A4BE ; [*0F6F.0020.0002] # YI RADICAL CIP A4BF ; [*0F70.0020.0002] # YI RADICAL HXOP A4C0 ; [*0F71.0020.0002] # YI RADICAL SHAT A4C1 ; [*0F72.0020.0002] # YI RADICAL ZUR A4C2 ; [*0F73.0020.0002] # YI RADICAL SHOP A4C3 ; [*0F74.0020.0002] # YI RADICAL CHE A4C4 ; [*0F75.0020.0002] # YI RADICAL ZZIET A4C5 ; [*0F76.0020.0002] # YI RADICAL NBIE A4C6 ; [*0F77.0020.0002] # YI RADICAL KE A4FE ; [*022E.0020.0002] # LISU PUNCTUATION COMMA A4FF ; [*0285.0020.0002] # LISU PUNCTUATION FULL STOP A60D ; [*022F.0020.0002] # VAI COMMA A60E ; [*0286.0020.0002] # VAI FULL STOP A60F ; [*0270.0020.0002] # VAI QUESTION MARK A670 ; [.0000.0000.0000] # COMBINING CYRILLIC TEN MILLIONS SIGN A671 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED MILLIONS SIGN A672 ; [.0000.0000.0000] # COMBINING CYRILLIC THOUSAND MILLIONS SIGN A673 ; [*0393.0020.0002] # SLAVONIC ASTERISK A67E ; [*03CA.0020.0002] # CYRILLIC KAVYKA A6F2 ; [*02D7.0020.0002] # BAMUM NJAEMLI A6F3 ; [*0287.0020.0002] # BAMUM FULL STOP A6F4 ; [*025F.0020.0002] # BAMUM COLON A6F5 ; [*0230.0020.0002] # BAMUM COMMA A6F6 ; [*0238.0020.0002] # BAMUM SEMICOLON A6F7 ; [*0271.0020.0002] # BAMUM QUESTION MARK A700 ; [*04D0.0020.0002] # MODIFIER LETTER CHINESE TONE YIN PING A701 ; [*04D1.0020.0002] # MODIFIER LETTER CHINESE TONE YANG PING A702 ; [*04D2.0020.0002] # MODIFIER LETTER CHINESE TONE YIN SHANG A703 ; [*04D3.0020.0002] # MODIFIER LETTER CHINESE TONE YANG SHANG A704 ; [*04D4.0020.0002] # MODIFIER LETTER CHINESE TONE YIN QU A705 ; [*04D5.0020.0002] # MODIFIER LETTER CHINESE TONE YANG QU A706 ; [*04D6.0020.0002] # MODIFIER LETTER CHINESE TONE YIN RU A707 ; [*04D7.0020.0002] # MODIFIER LETTER CHINESE TONE YANG RU A708 ; [*04D8.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR A709 ; [*04D9.0020.0002] # MODIFIER LETTER HIGH DOTTED TONE BAR A70A ; [*04DA.0020.0002] # MODIFIER LETTER MID DOTTED TONE BAR A70B ; [*04DB.0020.0002] # MODIFIER LETTER LOW DOTTED TONE BAR A70C ; [*04DC.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR A70D ; [*04DD.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR A70E ; [*04DE.0020.0002] # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR A70F ; [*04DF.0020.0002] # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR A710 ; [*04E0.0020.0002] # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR A711 ; [*04E1.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR A712 ; [*04E2.0020.0002] # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR A713 ; [*04E3.0020.0002] # MODIFIER LETTER HIGH LEFT-STEM TONE BAR A714 ; [*04E4.0020.0002] # MODIFIER LETTER MID LEFT-STEM TONE BAR A715 ; [*04E5.0020.0002] # MODIFIER LETTER LOW LEFT-STEM TONE BAR A716 ; [*04E6.0020.0002] # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR A717 ; [*04E7.0020.0002] # MODIFIER LETTER DOT VERTICAL BAR A718 ; [*04E8.0020.0002] # MODIFIER LETTER DOT SLASH A719 ; [*04E9.0020.0002] # MODIFIER LETTER DOT HORIZONTAL BAR A71A ; [*04EA.0020.0002] # MODIFIER LETTER LOWER RIGHT CORNER ANGLE A71B ; [*04EB.0020.0002] # MODIFIER LETTER RAISED UP ARROW A71C ; [*04EC.0020.0002] # MODIFIER LETTER RAISED DOWN ARROW A71D ; [*04ED.0020.0002] # MODIFIER LETTER RAISED EXCLAMATION MARK A71E ; [*04EE.0020.0002] # MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK A71F ; [*04EF.0020.0002] # MODIFIER LETTER LOW INVERTED EXCLAMATION MARK A720 ; [*04F0.0020.0002] # MODIFIER LETTER STRESS AND HIGH TONE A721 ; [*04F1.0020.0002] # MODIFIER LETTER STRESS AND LOW TONE A788 ; [*04F2.0020.0002] # MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789 ; [*04F3.0020.0002] # MODIFIER LETTER COLON A78A ; [*04F4.0020.0002] # MODIFIER LETTER SHORT EQUALS SIGN A828 ; [*051F.0020.0002] # SYLOTI NAGRI POETRY MARK-1 A829 ; [*0520.0020.0002] # SYLOTI NAGRI POETRY MARK-2 A82A ; [*0521.0020.0002] # SYLOTI NAGRI POETRY MARK-3 A82B ; [*0522.0020.0002] # SYLOTI NAGRI POETRY MARK-4 A830 ; [*1AA2.0020.0002] # NORTH INDIC FRACTION ONE QUARTER A831 ; [*1AA3.0020.0002] # NORTH INDIC FRACTION ONE HALF A832 ; [*1AA4.0020.0002] # NORTH INDIC FRACTION THREE QUARTERS A833 ; [*1AA5.0020.0002] # NORTH INDIC FRACTION ONE SIXTEENTH A834 ; [*1AA6.0020.0002] # NORTH INDIC FRACTION ONE EIGHTH A835 ; [*1AA7.0020.0002] # NORTH INDIC FRACTION THREE SIXTEENTHS A836 ; [*0523.0020.0002] # NORTH INDIC QUARTER MARK A837 ; [*0524.0020.0002] # NORTH INDIC PLACEHOLDER MARK A839 ; [*0525.0020.0002] # NORTH INDIC QUANTITY MARK A874 ; [*0428.0020.0002] # PHAGS-PA SINGLE HEAD MARK A875 ; [*0429.0020.0002] # PHAGS-PA DOUBLE HEAD MARK A876 ; [*0294.0020.0002] # PHAGS-PA MARK SHAD A877 ; [*0295.0020.0002] # PHAGS-PA MARK DOUBLE SHAD A8CE ; [*0290.0020.0002] # SAURASHTRA DANDA A8CF ; [*0291.0020.0002] # SAURASHTRA DOUBLE DANDA A8E0 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ZERO A8E1 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ONE A8E2 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT TWO A8E3 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT THREE A8E4 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT FOUR A8E5 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT FIVE A8E6 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT SIX A8E7 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT SEVEN A8E8 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT EIGHT A8E9 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT NINE A8EA ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER A A8EB ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER U A8EC ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER KA A8ED ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER NA A8EE ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER PA A8EF ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER RA A8F0 ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER VI A8F1 ; [.0000.0000.0000] # COMBINING DEVANAGARI SIGN AVAGRAHA A8F8 ; [*03E8.0020.0002] # DEVANAGARI SIGN PUSHPIKA A8F9 ; [*03E9.0020.0002] # DEVANAGARI GAP FILLER A8FA ; [*03EA.0020.0002] # DEVANAGARI CARET A8FC ; [*03EB.0020.0002] # DEVANAGARI SIGN SIDDHAM A92E ; [*042E.0020.0002] # KAYAH LI SIGN CWI A92F ; [*0298.0020.0002] # KAYAH LI SIGN SHYA A95F ; [*02D8.0020.0002] # REJANG SECTION MARK A9C1 ; [*02CD.0020.0002] # JAVANESE LEFT RERENGGAN A9C2 ; [*02CE.0020.0002] # JAVANESE RIGHT RERENGGAN A9C3 ; [*02CF.0020.0002] # JAVANESE PADA ANDAP A9C4 ; [*02D0.0020.0002] # JAVANESE PADA MADYA A9C5 ; [*02D1.0020.0002] # JAVANESE PADA LUHUR A9C6 ; [*02D2.0020.0002] # JAVANESE PADA WINDU A9C7 ; [*025B.0020.0002] # JAVANESE PADA PANGKAT A9C8 ; [*02A3.0020.0002] # JAVANESE PADA LINGSA A9C9 ; [*02A4.0020.0002] # JAVANESE PADA LUNGSI A9CA ; [*02D3.0020.0002] # JAVANESE PADA ADEG A9CB ; [*02D4.0020.0002] # JAVANESE PADA ADEG ADEG A9CC ; [*02D5.0020.0002] # JAVANESE PADA PISELEH A9CD ; [*02D6.0020.0002] # JAVANESE TURNED PADA PISELEH A9DE ; [*042F.0020.0002] # JAVANESE PADA TIRTA TUMETES A9DF ; [*0430.0020.0002] # JAVANESE PADA ISEN-ISEN AA5C ; [*0431.0020.0002] # CHAM PUNCTUATION SPIRAL AA5D ; [*02A5.0020.0002] # CHAM PUNCTUATION DANDA AA5E ; [*02A6.0020.0002] # CHAM PUNCTUATION DOUBLE DANDA AA5F ; [*02A7.0020.0002] # CHAM PUNCTUATION TRIPLE DANDA AA77 ; [*054D.0020.0002] # MYANMAR SYMBOL AITON EXCLAMATION AA78 ; [*054E.0020.0002] # MYANMAR SYMBOL AITON ONE AA79 ; [*054F.0020.0002] # MYANMAR SYMBOL AITON TWO AADE ; [*03F1.0020.0002] # TAI VIET SYMBOL HO HOI AADF ; [*03F2.0020.0002] # TAI VIET SYMBOL KOI KOI AAF0 ; [*02A8.0020.0002] # MEETEI MAYEK CHEIKHAN AAF1 ; [*0272.0020.0002] # MEETEI MAYEK AHANG KHUDAM AB5B ; [*04F5.0020.0002] # MODIFIER BREVE WITH INVERTED BREVE ABEB ; [*02A9.0020.0002] # MEETEI MAYEK CHEIKHEI FB29 ; [*0616.0020.0005] # HEBREW LETTER ALTERNATIVE PLUS SIGN FBB2 ; [*0502.0020.0002] # ARABIC SYMBOL DOT ABOVE FBB3 ; [*0503.0020.0002] # ARABIC SYMBOL DOT BELOW FBB4 ; [*0504.0020.0002] # ARABIC SYMBOL TWO DOTS ABOVE FBB5 ; [*0505.0020.0002] # ARABIC SYMBOL TWO DOTS BELOW FBB6 ; [*0506.0020.0002] # ARABIC SYMBOL THREE DOTS ABOVE FBB7 ; [*0507.0020.0002] # ARABIC SYMBOL THREE DOTS BELOW FBB8 ; [*0508.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE FBB9 ; [*0509.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW FBBA ; [*050A.0020.0002] # ARABIC SYMBOL FOUR DOTS ABOVE FBBB ; [*050B.0020.0002] # ARABIC SYMBOL FOUR DOTS BELOW FBBC ; [*050C.0020.0002] # ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW FBBD ; [*050D.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE FBBE ; [*050E.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY BELOW FBBF ; [*050F.0020.0002] # ARABIC SYMBOL RING FBC0 ; [*0510.0020.0002] # ARABIC SYMBOL SMALL TAH ABOVE FBC1 ; [*0511.0020.0002] # ARABIC SYMBOL SMALL TAH BELOW FD3E ; [*0381.0020.0002] # ORNATE LEFT PARENTHESIS FD3F ; [*0382.0020.0002] # ORNATE RIGHT PARENTHESIS FDFD ; [*0501.0020.0002] # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM FE10 ; [*0222.0020.0016] # PRESENTATION FORM FOR VERTICAL COMMA FE11 ; [*0231.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA FE12 ; [*028A.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP FE13 ; [*0239.0020.0016] # PRESENTATION FORM FOR VERTICAL COLON FE14 ; [*0234.0020.0016] # PRESENTATION FORM FOR VERTICAL SEMICOLON FE15 ; [*0260.0020.0016] # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK FE16 ; [*0266.0020.0016] # PRESENTATION FORM FOR VERTICAL QUESTION MARK FE17 ; [*037B.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET FE18 ; [*037C.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET FE19 ; [*0277.0020.0016][*0277.0020.0016][*0277.0020.0016] # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS FE21 ; [.0000.0000.0000] # COMBINING LIGATURE RIGHT HALF FE23 ; [.0000.0000.0000] # COMBINING DOUBLE TILDE RIGHT HALF FE24 ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF FE25 ; [.0000.0000.0000] # COMBINING MACRON RIGHT HALF FE26 ; [.0000.0000.0000] # COMBINING CONJOINING MACRON FE28 ; [.0000.0000.0000] # COMBINING LIGATURE RIGHT HALF BELOW FE2A ; [.0000.0000.0000] # COMBINING TILDE RIGHT HALF BELOW FE2B ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF BELOW FE2C ; [.0000.0000.0000] # COMBINING MACRON RIGHT HALF BELOW FE2D ; [.0000.0000.0000] # COMBINING CONJOINING MACRON BELOW FE2F ; [.0000.0000.0000] # COMBINING CYRILLIC TITLO RIGHT HALF FE30 ; [*0277.0020.0016][*0277.0020.0016] # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER FE31 ; [*0216.0020.0016] # PRESENTATION FORM FOR VERTICAL EM DASH FE32 ; [*0215.0020.0016] # PRESENTATION FORM FOR VERTICAL EN DASH FE33 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL LOW LINE FE34 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE FE35 ; [*0317.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS FE36 ; [*0318.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS FE37 ; [*031B.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET FE38 ; [*031C.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET FE39 ; [*0379.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET FE3A ; [*037A.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET FE3B ; [*0377.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET FE3C ; [*0378.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET FE3D ; [*0371.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET FE3E ; [*0372.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET FE3F ; [*036F.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET FE40 ; [*0370.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET FE41 ; [*0373.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET FE42 ; [*0374.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET FE43 ; [*0375.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET FE44 ; [*0376.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET FE45 ; [*0232.0020.0002] # SESAME DOT FE46 ; [*0233.0020.0002] # WHITE SESAME DOT FE47 ; [*0319.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET FE48 ; [*031A.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET FE49 ; [*020A.0020.0004] # DASHED OVERLINE FE4A ; [*020A.0020.0004] # CENTRELINE OVERLINE FE4B ; [*020A.0020.0004] # WAVY OVERLINE FE4C ; [*020A.0020.0004] # DOUBLE WAVY OVERLINE FE4D ; [*020B.0020.0004] # DASHED LOW LINE FE4E ; [*020B.0020.0004] # CENTRELINE LOW LINE FE4F ; [*020B.0020.0004] # WAVY LOW LINE FE50 ; [*0222.0020.000F] # SMALL COMMA FE51 ; [*0231.0020.000F] # SMALL IDEOGRAPHIC COMMA FE52 ; [*0277.0020.000F] # SMALL FULL STOP FE54 ; [*0234.0020.000F] # SMALL SEMICOLON FE55 ; [*0239.0020.000F] # SMALL COLON FE56 ; [*0266.0020.000F] # SMALL QUESTION MARK FE57 ; [*0260.0020.000F] # SMALL EXCLAMATION MARK FE58 ; [*0216.0020.000F] # SMALL EM DASH FE59 ; [*0317.0020.000F] # SMALL LEFT PARENTHESIS FE5A ; [*0318.0020.000F] # SMALL RIGHT PARENTHESIS FE5B ; [*031B.0020.000F] # SMALL LEFT CURLY BRACKET FE5C ; [*031C.0020.000F] # SMALL RIGHT CURLY BRACKET FE5D ; [*0379.0020.000F] # SMALL LEFT TORTOISE SHELL BRACKET FE5E ; [*037A.0020.000F] # SMALL RIGHT TORTOISE SHELL BRACKET FE5F ; [*0398.0020.000F] # SMALL NUMBER SIGN FE60 ; [*0396.0020.000F] # SMALL AMPERSAND FE61 ; [*038F.0020.000F] # SMALL ASTERISK FE62 ; [*0616.0020.000F] # SMALL PLUS SIGN FE63 ; [*020D.0020.000F] # SMALL HYPHEN-MINUS FE64 ; [*061A.0020.000F] # SMALL LESS-THAN SIGN FE65 ; [*061C.0020.000F] # SMALL GREATER-THAN SIGN FE66 ; [*061B.0020.000F] # SMALL EQUALS SIGN FE68 ; [*0395.0020.000F] # SMALL REVERSE SOLIDUS FE6A ; [*0399.0020.000F] # SMALL PERCENT SIGN FE6B ; [*038E.0020.000F] # SMALL COMMERCIAL AT FE73 ; [.0000.0000.0000] # ARABIC TAIL FRAGMENT FF01 ; [*0260.0020.0003] # FULLWIDTH EXCLAMATION MARK FF02 ; [*030C.0020.0003] # FULLWIDTH QUOTATION MARK FF03 ; [*0398.0020.0003] # FULLWIDTH NUMBER SIGN FF05 ; [*0399.0020.0003] # FULLWIDTH PERCENT SIGN FF06 ; [*0396.0020.0003] # FULLWIDTH AMPERSAND FF07 ; [*0305.0020.0003] # FULLWIDTH APOSTROPHE FF08 ; [*0317.0020.0003] # FULLWIDTH LEFT PARENTHESIS FF09 ; [*0318.0020.0003] # FULLWIDTH RIGHT PARENTHESIS FF0A ; [*038F.0020.0003] # FULLWIDTH ASTERISK FF0B ; [*0616.0020.0003] # FULLWIDTH PLUS SIGN FF0C ; [*0222.0020.0003] # FULLWIDTH COMMA FF0D ; [*020D.0020.0003] # FULLWIDTH HYPHEN-MINUS FF0E ; [*0277.0020.0003] # FULLWIDTH FULL STOP FF0F ; [*0394.0020.0003] # FULLWIDTH SOLIDUS FF1A ; [*0239.0020.0003] # FULLWIDTH COLON FF1B ; [*0234.0020.0003] # FULLWIDTH SEMICOLON FF1C ; [*061A.0020.0003] # FULLWIDTH LESS-THAN SIGN FF1D ; [*061B.0020.0003] # FULLWIDTH EQUALS SIGN FF1E ; [*061C.0020.0003] # FULLWIDTH GREATER-THAN SIGN FF1F ; [*0266.0020.0003] # FULLWIDTH QUESTION MARK FF20 ; [*038E.0020.0003] # FULLWIDTH COMMERCIAL AT FF3B ; [*0319.0020.0003] # FULLWIDTH LEFT SQUARE BRACKET FF3C ; [*0395.0020.0003] # FULLWIDTH REVERSE SOLIDUS FF3D ; [*031A.0020.0003] # FULLWIDTH RIGHT SQUARE BRACKET FF3E ; [*0485.0020.0003] # FULLWIDTH CIRCUMFLEX ACCENT FF3F ; [*020B.0020.0003] # FULLWIDTH LOW LINE FF40 ; [*0482.0020.0003] # FULLWIDTH GRAVE ACCENT FF5B ; [*031B.0020.0003] # FULLWIDTH LEFT CURLY BRACKET FF5C ; [*061E.0020.0003] # FULLWIDTH VERTICAL LINE FF5D ; [*031C.0020.0003] # FULLWIDTH RIGHT CURLY BRACKET FF5E ; [*0620.0020.0003] # FULLWIDTH TILDE FF5F ; [*032D.0020.0003] # FULLWIDTH LEFT WHITE PARENTHESIS FF60 ; [*032E.0020.0003] # FULLWIDTH RIGHT WHITE PARENTHESIS FF61 ; [*028A.0020.0012] # HALFWIDTH IDEOGRAPHIC FULL STOP FF62 ; [*0373.0020.0012] # HALFWIDTH LEFT CORNER BRACKET FF63 ; [*0374.0020.0012] # HALFWIDTH RIGHT CORNER BRACKET FF64 ; [*0231.0020.0012] # HALFWIDTH IDEOGRAPHIC COMMA FF65 ; [*0221.0020.0012] # HALFWIDTH KATAKANA MIDDLE DOT FFE2 ; [*061D.0020.0003] # FULLWIDTH NOT SIGN FFE3 ; [*0486.0020.0003] # FULLWIDTH MACRON FFE4 ; [*061F.0020.0003] # FULLWIDTH BROKEN BAR FFE8 ; [*081A.0020.0012] # HALFWIDTH FORMS LIGHT VERTICAL FFE9 ; [*059C.0020.0012] # HALFWIDTH LEFTWARDS ARROW FFEA ; [*059E.0020.0012] # HALFWIDTH UPWARDS ARROW FFEB ; [*059D.0020.0012] # HALFWIDTH RIGHTWARDS ARROW FFEC ; [*059F.0020.0012] # HALFWIDTH DOWNWARDS ARROW FFED ; [*08B8.0020.0012] # HALFWIDTH BLACK SQUARE FFEE ; [*08E3.0020.0012] # HALFWIDTH WHITE CIRCLE FFFC ; [*1A95.0020.0002] # OBJECT REPLACEMENT CHARACTER 10100 ; [*02FA.0020.0002] # AEGEAN WORD SEPARATOR LINE 10101 ; [*02FB.0020.0002] # AEGEAN WORD SEPARATOR DOT 10102 ; [*02FC.0020.0002] # AEGEAN CHECK MARK 10110 ; [*1AE9.0020.0002] # AEGEAN NUMBER TEN 10111 ; [*1AEA.0020.0002] # AEGEAN NUMBER TWENTY 10112 ; [*1AEB.0020.0002] # AEGEAN NUMBER THIRTY 10113 ; [*1AEC.0020.0002] # AEGEAN NUMBER FORTY 10114 ; [*1AED.0020.0002] # AEGEAN NUMBER FIFTY 10115 ; [*1AEE.0020.0002] # AEGEAN NUMBER SIXTY 10116 ; [*1AEF.0020.0002] # AEGEAN NUMBER SEVENTY 10117 ; [*1AF0.0020.0002] # AEGEAN NUMBER EIGHTY 10118 ; [*1AF1.0020.0002] # AEGEAN NUMBER NINETY 10119 ; [*1AF2.0020.0002] # AEGEAN NUMBER ONE HUNDRED 1011A ; [*1AF3.0020.0002] # AEGEAN NUMBER TWO HUNDRED 1011B ; [*1AF4.0020.0002] # AEGEAN NUMBER THREE HUNDRED 1011C ; [*1AF5.0020.0002] # AEGEAN NUMBER FOUR HUNDRED 1011D ; [*1AF6.0020.0002] # AEGEAN NUMBER FIVE HUNDRED 1011E ; [*1AF7.0020.0002] # AEGEAN NUMBER SIX HUNDRED 1011F ; [*1AF8.0020.0002] # AEGEAN NUMBER SEVEN HUNDRED 10120 ; [*1AF9.0020.0002] # AEGEAN NUMBER EIGHT HUNDRED 10121 ; [*1AFA.0020.0002] # AEGEAN NUMBER NINE HUNDRED 10122 ; [*1AFB.0020.0002] # AEGEAN NUMBER ONE THOUSAND 10123 ; [*1AFC.0020.0002] # AEGEAN NUMBER TWO THOUSAND 10124 ; [*1AFD.0020.0002] # AEGEAN NUMBER THREE THOUSAND 10125 ; [*1AFE.0020.0002] # AEGEAN NUMBER FOUR THOUSAND 10126 ; [*1AFF.0020.0002] # AEGEAN NUMBER FIVE THOUSAND 10127 ; [*1B00.0020.0002] # AEGEAN NUMBER SIX THOUSAND 10128 ; [*1B01.0020.0002] # AEGEAN NUMBER SEVEN THOUSAND 10129 ; [*1B02.0020.0002] # AEGEAN NUMBER EIGHT THOUSAND 1012A ; [*1B03.0020.0002] # AEGEAN NUMBER NINE THOUSAND 1012B ; [*1B04.0020.0002] # AEGEAN NUMBER TEN THOUSAND 1012C ; [*1B05.0020.0002] # AEGEAN NUMBER TWENTY THOUSAND 1012D ; [*1B06.0020.0002] # AEGEAN NUMBER THIRTY THOUSAND 1012E ; [*1B07.0020.0002] # AEGEAN NUMBER FORTY THOUSAND 1012F ; [*1B08.0020.0002] # AEGEAN NUMBER FIFTY THOUSAND 10130 ; [*1B09.0020.0002] # AEGEAN NUMBER SIXTY THOUSAND 10131 ; [*1B0A.0020.0002] # AEGEAN NUMBER SEVENTY THOUSAND 10132 ; [*1B0B.0020.0002] # AEGEAN NUMBER EIGHTY THOUSAND 10133 ; [*1B0C.0020.0002] # AEGEAN NUMBER NINETY THOUSAND 10137 ; [*0F78.0020.0002] # AEGEAN WEIGHT BASE UNIT 10138 ; [*0F79.0020.0002] # AEGEAN WEIGHT FIRST SUBUNIT 10139 ; [*0F7A.0020.0002] # AEGEAN WEIGHT SECOND SUBUNIT 1013A ; [*0F7B.0020.0002] # AEGEAN WEIGHT THIRD SUBUNIT 1013B ; [*0F7C.0020.0002] # AEGEAN WEIGHT FOURTH SUBUNIT 1013C ; [*0F7D.0020.0002] # AEGEAN DRY MEASURE FIRST SUBUNIT 1013D ; [*0F7E.0020.0002] # AEGEAN LIQUID MEASURE FIRST SUBUNIT 1013E ; [*0F7F.0020.0002] # AEGEAN MEASURE SECOND SUBUNIT 1013F ; [*0F80.0020.0002] # AEGEAN MEASURE THIRD SUBUNIT 10140 ; [*1B0D.0020.0002] # GREEK ACROPHONIC ATTIC ONE QUARTER 10141 ; [*1B0E.0020.0002] # GREEK ACROPHONIC ATTIC ONE HALF 10144 ; [*1B0F.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY 10145 ; [*1B10.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED 10146 ; [*1B11.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND 10147 ; [*1B12.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND 10149 ; [*1B13.0020.0002] # GREEK ACROPHONIC ATTIC TEN TALENTS 1014A ; [*1B14.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY TALENTS 1014B ; [*1B15.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS 1014C ; [*1B16.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS 1014D ; [*1B17.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS 1014E ; [*1B18.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS 10150 ; [*1B19.0020.0002] # GREEK ACROPHONIC ATTIC TEN STATERS 10151 ; [*1B1A.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY STATERS 10152 ; [*1B1B.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS 10153 ; [*1B1C.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS 10154 ; [*1B1D.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS 10155 ; [*1B1E.0020.0002] # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS 10156 ; [*1B1F.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS 10157 ; [*1B20.0020.0002] # GREEK ACROPHONIC ATTIC TEN MNAS 10160 ; [*1B21.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN 10161 ; [*1B22.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM 10162 ; [*1B23.0020.0002] # GREEK ACROPHONIC HERMIONIAN TEN 10163 ; [*1B24.0020.0002] # GREEK ACROPHONIC MESSENIAN TEN 10164 ; [*1B25.0020.0002] # GREEK ACROPHONIC THESPIAN TEN 10165 ; [*1B26.0020.0002] # GREEK ACROPHONIC THESPIAN THIRTY 10166 ; [*1B27.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY 10167 ; [*1B28.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM 10168 ; [*1B29.0020.0002] # GREEK ACROPHONIC HERMIONIAN FIFTY 10169 ; [*1B2A.0020.0002] # GREEK ACROPHONIC THESPIAN FIFTY 1016A ; [*1B2B.0020.0002] # GREEK ACROPHONIC THESPIAN ONE HUNDRED 1016B ; [*1B2C.0020.0002] # GREEK ACROPHONIC THESPIAN THREE HUNDRED 1016C ; [*1B2D.0020.0002] # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED 1016D ; [*1B2E.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED 1016E ; [*1B2F.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE HUNDRED 1016F ; [*1B30.0020.0002] # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED 10170 ; [*1B31.0020.0002] # GREEK ACROPHONIC NAXIAN FIVE HUNDRED 10171 ; [*1B32.0020.0002] # GREEK ACROPHONIC THESPIAN ONE THOUSAND 10172 ; [*1B33.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE THOUSAND 10174 ; [*1B34.0020.0002] # GREEK ACROPHONIC STRATIAN FIFTY MNAS 10175 ; [*1B35.0020.0002] # GREEK ONE HALF SIGN 10176 ; [*1B36.0020.0002] # GREEK ONE HALF SIGN ALTERNATE FORM 10177 ; [*1B37.0020.0002] # GREEK TWO THIRDS SIGN 10178 ; [*1B38.0020.0002] # GREEK THREE QUARTERS SIGN 10179 ; [*0F81.0020.0002] # GREEK YEAR SIGN 1017A ; [*0F82.0020.0002] # GREEK TALENT SIGN 1017B ; [*0F83.0020.0002] # GREEK DRACHMA SIGN 1017C ; [*0F84.0020.0002] # GREEK OBOL SIGN 1017D ; [*0F85.0020.0002] # GREEK TWO OBOLS SIGN 1017E ; [*0F86.0020.0002] # GREEK THREE OBOLS SIGN 1017F ; [*0F87.0020.0002] # GREEK FOUR OBOLS SIGN 10180 ; [*0F88.0020.0002] # GREEK FIVE OBOLS SIGN 10181 ; [*0F89.0020.0002] # GREEK METRETES SIGN 10182 ; [*0F8A.0020.0002] # GREEK KYATHOS BASE SIGN 10183 ; [*0F8B.0020.0002] # GREEK LITRA SIGN 10184 ; [*0F8C.0020.0002] # GREEK OUNKIA SIGN 10185 ; [*0F8D.0020.0002] # GREEK XESTES SIGN 10186 ; [*0F8E.0020.0002] # GREEK ARTABE SIGN 10187 ; [*0F8F.0020.0002] # GREEK AROURA SIGN 10188 ; [*0F90.0020.0002] # GREEK GRAMMA SIGN 10189 ; [*0F91.0020.0002] # GREEK TRYBLION BASE SIGN 1018B ; [*1B39.0020.0002] # GREEK ONE QUARTER SIGN 1018C ; [*0F92.0020.0002] # GREEK SINUSOID SIGN 1018D ; [*0F93.0020.0002] # GREEK INDICTION SIGN 1018E ; [*0F94.0020.0002] # NOMISMA SIGN 10190 ; [*0F95.0020.0002] # ROMAN SEXTANS SIGN 10191 ; [*0F96.0020.0002] # ROMAN UNCIA SIGN 10192 ; [*0F97.0020.0002] # ROMAN SEMUNCIA SIGN 10193 ; [*0F98.0020.0002] # ROMAN SEXTULA SIGN 10194 ; [*0F99.0020.0002] # ROMAN DIMIDIA SEXTULA SIGN 10195 ; [*0F9A.0020.0002] # ROMAN SILIQUA SIGN 10196 ; [*0F9B.0020.0002] # ROMAN DENARIUS SIGN 10197 ; [*0F9C.0020.0002] # ROMAN QUINARIUS SIGN 10198 ; [*0F9D.0020.0002] # ROMAN SESTERTIUS SIGN 10199 ; [*0F9E.0020.0002] # ROMAN DUPONDIUS SIGN 1019A ; [*0F9F.0020.0002] # ROMAN AS SIGN 1019B ; [*0FA0.0020.0002] # ROMAN CENTURIAL SIGN 101A0 ; [*0FA1.0020.0002] # GREEK SYMBOL TAU RHO 101D0 ; [*0FA2.0020.0002] # PHAISTOS DISC SIGN PEDESTRIAN 101D1 ; [*0FA3.0020.0002] # PHAISTOS DISC SIGN PLUMED HEAD 101D2 ; [*0FA4.0020.0002] # PHAISTOS DISC SIGN TATTOOED HEAD 101D3 ; [*0FA5.0020.0002] # PHAISTOS DISC SIGN CAPTIVE 101D4 ; [*0FA6.0020.0002] # PHAISTOS DISC SIGN CHILD 101D5 ; [*0FA7.0020.0002] # PHAISTOS DISC SIGN WOMAN 101D6 ; [*0FA8.0020.0002] # PHAISTOS DISC SIGN HELMET 101D7 ; [*0FA9.0020.0002] # PHAISTOS DISC SIGN GAUNTLET 101D8 ; [*0FAA.0020.0002] # PHAISTOS DISC SIGN TIARA 101D9 ; [*0FAB.0020.0002] # PHAISTOS DISC SIGN ARROW 101DA ; [*0FAC.0020.0002] # PHAISTOS DISC SIGN BOW 101DB ; [*0FAD.0020.0002] # PHAISTOS DISC SIGN SHIELD 101DC ; [*0FAE.0020.0002] # PHAISTOS DISC SIGN CLUB 101DD ; [*0FAF.0020.0002] # PHAISTOS DISC SIGN MANACLES 101DE ; [*0FB0.0020.0002] # PHAISTOS DISC SIGN MATTOCK 101DF ; [*0FB1.0020.0002] # PHAISTOS DISC SIGN SAW 101E0 ; [*0FB2.0020.0002] # PHAISTOS DISC SIGN LID 101E1 ; [*0FB3.0020.0002] # PHAISTOS DISC SIGN BOOMERANG 101E2 ; [*0FB4.0020.0002] # PHAISTOS DISC SIGN CARPENTRY PLANE 101E3 ; [*0FB5.0020.0002] # PHAISTOS DISC SIGN DOLIUM 101E4 ; [*0FB6.0020.0002] # PHAISTOS DISC SIGN COMB 101E5 ; [*0FB7.0020.0002] # PHAISTOS DISC SIGN SLING 101E6 ; [*0FB8.0020.0002] # PHAISTOS DISC SIGN COLUMN 101E7 ; [*0FB9.0020.0002] # PHAISTOS DISC SIGN BEEHIVE 101E8 ; [*0FBA.0020.0002] # PHAISTOS DISC SIGN SHIP 101E9 ; [*0FBB.0020.0002] # PHAISTOS DISC SIGN HORN 101EA ; [*0FBC.0020.0002] # PHAISTOS DISC SIGN HIDE 101EB ; [*0FBD.0020.0002] # PHAISTOS DISC SIGN BULLS LEG 101EC ; [*0FBE.0020.0002] # PHAISTOS DISC SIGN CAT 101ED ; [*0FBF.0020.0002] # PHAISTOS DISC SIGN RAM 101EE ; [*0FC0.0020.0002] # PHAISTOS DISC SIGN EAGLE 101EF ; [*0FC1.0020.0002] # PHAISTOS DISC SIGN DOVE 101F0 ; [*0FC2.0020.0002] # PHAISTOS DISC SIGN TUNNY 101F1 ; [*0FC3.0020.0002] # PHAISTOS DISC SIGN BEE 101F2 ; [*0FC4.0020.0002] # PHAISTOS DISC SIGN PLANE TREE 101F3 ; [*0FC5.0020.0002] # PHAISTOS DISC SIGN VINE 101F4 ; [*0FC6.0020.0002] # PHAISTOS DISC SIGN PAPYRUS 101F5 ; [*0FC7.0020.0002] # PHAISTOS DISC SIGN ROSETTE 101F6 ; [*0FC8.0020.0002] # PHAISTOS DISC SIGN LILY 101F7 ; [*0FC9.0020.0002] # PHAISTOS DISC SIGN OX BACK 101F8 ; [*0FCA.0020.0002] # PHAISTOS DISC SIGN FLUTE 101F9 ; [*0FCB.0020.0002] # PHAISTOS DISC SIGN GRATER 101FA ; [*0FCC.0020.0002] # PHAISTOS DISC SIGN STRAINER 101FB ; [*0FCD.0020.0002] # PHAISTOS DISC SIGN SMALL AXE 101FC ; [*0FCE.0020.0002] # PHAISTOS DISC SIGN WAVY BAND 102E0 ; [.0000.0000.0000] # COPTIC EPACT THOUSANDS MARK 102EA ; [*1B3A.0020.0002] # COPTIC EPACT NUMBER TEN 102EB ; [*1B3B.0020.0002] # COPTIC EPACT NUMBER TWENTY 102EC ; [*1B3C.0020.0002] # COPTIC EPACT NUMBER THIRTY 102ED ; [*1B3D.0020.0002] # COPTIC EPACT NUMBER FORTY 102EE ; [*1B3E.0020.0002] # COPTIC EPACT NUMBER FIFTY 102EF ; [*1B3F.0020.0002] # COPTIC EPACT NUMBER SIXTY 102F0 ; [*1B40.0020.0002] # COPTIC EPACT NUMBER SEVENTY 102F1 ; [*1B41.0020.0002] # COPTIC EPACT NUMBER EIGHTY 102F2 ; [*1B42.0020.0002] # COPTIC EPACT NUMBER NINETY 102F3 ; [*1B43.0020.0002] # COPTIC EPACT NUMBER ONE HUNDRED 102F4 ; [*1B44.0020.0002] # COPTIC EPACT NUMBER TWO HUNDRED 102F5 ; [*1B45.0020.0002] # COPTIC EPACT NUMBER THREE HUNDRED 102F6 ; [*1B46.0020.0002] # COPTIC EPACT NUMBER FOUR HUNDRED 102F7 ; [*1B47.0020.0002] # COPTIC EPACT NUMBER FIVE HUNDRED 102F8 ; [*1B48.0020.0002] # COPTIC EPACT NUMBER SIX HUNDRED 102F9 ; [*1B49.0020.0002] # COPTIC EPACT NUMBER SEVEN HUNDRED 102FA ; [*1B4A.0020.0002] # COPTIC EPACT NUMBER EIGHT HUNDRED 102FB ; [*1B4B.0020.0002] # COPTIC EPACT NUMBER NINE HUNDRED 10322 ; [*1AE3.0020.0002] # OLD ITALIC NUMERAL TEN 10323 ; [*1AE4.0020.0002] # OLD ITALIC NUMERAL FIFTY 1039F ; [*02FD.0020.0002] # UGARITIC WORD DIVIDER 103D0 ; [*02FE.0020.0002] # OLD PERSIAN WORD DIVIDER 103D3 ; [*1B4C.0020.0002] # OLD PERSIAN NUMBER TEN 103D4 ; [*1B4D.0020.0002] # OLD PERSIAN NUMBER TWENTY 103D5 ; [*1B4E.0020.0002] # OLD PERSIAN NUMBER HUNDRED 1056F ; [*0432.0020.0002] # CAUCASIAN ALBANIAN CITATION MARK 10857 ; [*02D9.0020.0002] # IMPERIAL ARAMAIC SECTION SIGN 1085B ; [*1B5E.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN 1085C ; [*1B5F.0020.0002] # IMPERIAL ARAMAIC NUMBER TWENTY 1085D ; [*1B60.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE HUNDRED 1085E ; [*1B61.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE THOUSAND 1085F ; [*1B62.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN THOUSAND 10877 ; [*0FCF.0020.0002] # PALMYRENE LEFT-POINTING FLEURON 10878 ; [*0FD0.0020.0002] # PALMYRENE RIGHT-POINTING FLEURON 1087E ; [*1B4F.0020.0002] # PALMYRENE NUMBER TEN 1087F ; [*1B50.0020.0002] # PALMYRENE NUMBER TWENTY 108AD ; [*1B51.0020.0002] # NABATAEAN NUMBER TEN 108AE ; [*1B52.0020.0002] # NABATAEAN NUMBER TWENTY 108AF ; [*1B53.0020.0002] # NABATAEAN NUMBER ONE HUNDRED 108FD ; [*1B54.0020.0002] # HATRAN NUMBER TEN 108FE ; [*1B55.0020.0002] # HATRAN NUMBER TWENTY 108FF ; [*1B56.0020.0002] # HATRAN NUMBER ONE HUNDRED 10917 ; [*1B5B.0020.0002] # PHOENICIAN NUMBER TEN 10918 ; [*1B5C.0020.0002] # PHOENICIAN NUMBER TWENTY 10919 ; [*1B5D.0020.0002] # PHOENICIAN NUMBER ONE HUNDRED 1091F ; [*02FF.0020.0002] # PHOENICIAN WORD SEPARATOR 1093F ; [*02F9.0020.0002] # LYDIAN TRIANGULAR MARK 109BC ; [*1BDD.0020.0002] # MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS 109BD ; [*1BD2.0020.0002] # MEROITIC CURSIVE FRACTION ONE HALF 109C9 ; [*1BA7.0020.0002] # MEROITIC CURSIVE NUMBER TEN 109CA ; [*1BA8.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY 109CB ; [*1BA9.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY 109CC ; [*1BAA.0020.0002] # MEROITIC CURSIVE NUMBER FORTY 109CD ; [*1BAB.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY 109CE ; [*1BAC.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY 109CF ; [*1BAD.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY 109D2 ; [*1BAE.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED 109D3 ; [*1BAF.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED 109D4 ; [*1BB0.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED 109D5 ; [*1BB1.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED 109D6 ; [*1BB2.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED 109D7 ; [*1BB3.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED 109D8 ; [*1BB4.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED 109D9 ; [*1BB5.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED 109DA ; [*1BB6.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED 109DB ; [*1BB7.0020.0002] # MEROITIC CURSIVE NUMBER ONE THOUSAND 109DC ; [*1BB8.0020.0002] # MEROITIC CURSIVE NUMBER TWO THOUSAND 109DD ; [*1BB9.0020.0002] # MEROITIC CURSIVE NUMBER THREE THOUSAND 109DE ; [*1BBA.0020.0002] # MEROITIC CURSIVE NUMBER FOUR THOUSAND 109DF ; [*1BBB.0020.0002] # MEROITIC CURSIVE NUMBER FIVE THOUSAND 109E0 ; [*1BBC.0020.0002] # MEROITIC CURSIVE NUMBER SIX THOUSAND 109E1 ; [*1BBD.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN THOUSAND 109E2 ; [*1BBE.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT THOUSAND 109E3 ; [*1BBF.0020.0002] # MEROITIC CURSIVE NUMBER NINE THOUSAND 109E4 ; [*1BC0.0020.0002] # MEROITIC CURSIVE NUMBER TEN THOUSAND 109E5 ; [*1BC1.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY THOUSAND 109E6 ; [*1BC2.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY THOUSAND 109E7 ; [*1BC3.0020.0002] # MEROITIC CURSIVE NUMBER FORTY THOUSAND 109E8 ; [*1BC4.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY THOUSAND 109E9 ; [*1BC5.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY THOUSAND 109EA ; [*1BC6.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY THOUSAND 109EB ; [*1BC7.0020.0002] # MEROITIC CURSIVE NUMBER EIGHTY THOUSAND 109EC ; [*1BC8.0020.0002] # MEROITIC CURSIVE NUMBER NINETY THOUSAND 109ED ; [*1BC9.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND 109EE ; [*1BCA.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND 109EF ; [*1BCB.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND 109F0 ; [*1BCC.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND 109F1 ; [*1BCD.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND 109F2 ; [*1BCE.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND 109F3 ; [*1BCF.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND 109F4 ; [*1BD0.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND 109F5 ; [*1BD1.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND 109F6 ; [*1BD3.0020.0002] # MEROITIC CURSIVE FRACTION ONE TWELFTH 109F7 ; [*1BD4.0020.0002] # MEROITIC CURSIVE FRACTION TWO TWELFTHS 109F8 ; [*1BD5.0020.0002] # MEROITIC CURSIVE FRACTION THREE TWELFTHS 109F9 ; [*1BD6.0020.0002] # MEROITIC CURSIVE FRACTION FOUR TWELFTHS 109FA ; [*1BD7.0020.0002] # MEROITIC CURSIVE FRACTION FIVE TWELFTHS 109FB ; [*1BD8.0020.0002] # MEROITIC CURSIVE FRACTION SIX TWELFTHS 109FC ; [*1BD9.0020.0002] # MEROITIC CURSIVE FRACTION SEVEN TWELFTHS 109FD ; [*1BDA.0020.0002] # MEROITIC CURSIVE FRACTION EIGHT TWELFTHS 109FE ; [*1BDB.0020.0002] # MEROITIC CURSIVE FRACTION NINE TWELFTHS 109FF ; [*1BDC.0020.0002] # MEROITIC CURSIVE FRACTION TEN TWELFTHS 10A44 ; [*1B7E.0020.0002] # KHAROSHTHI NUMBER TEN 10A45 ; [*1B7F.0020.0002] # KHAROSHTHI NUMBER TWENTY 10A46 ; [*1B80.0020.0002] # KHAROSHTHI NUMBER ONE HUNDRED 10A47 ; [*1B81.0020.0002] # KHAROSHTHI NUMBER ONE THOUSAND 10A50 ; [*0438.0020.0002] # KHAROSHTHI PUNCTUATION DOT 10A51 ; [*0439.0020.0002] # KHAROSHTHI PUNCTUATION SMALL CIRCLE 10A52 ; [*043A.0020.0002] # KHAROSHTHI PUNCTUATION CIRCLE 10A53 ; [*043B.0020.0002] # KHAROSHTHI PUNCTUATION CRESCENT BAR 10A54 ; [*043C.0020.0002] # KHAROSHTHI PUNCTUATION MANGALAM 10A55 ; [*043D.0020.0002] # KHAROSHTHI PUNCTUATION LOTUS 10A56 ; [*02AA.0020.0002] # KHAROSHTHI PUNCTUATION DANDA 10A57 ; [*02AB.0020.0002] # KHAROSHTHI PUNCTUATION DOUBLE DANDA 10A58 ; [*043E.0020.0002] # KHAROSHTHI PUNCTUATION LINES 10A7E ; [*1B57.0020.0002] # OLD SOUTH ARABIAN NUMBER FIFTY 10A7F ; [*1B58.0020.0002] # OLD SOUTH ARABIAN NUMERIC INDICATOR 10A9E ; [*1B59.0020.0002] # OLD NORTH ARABIAN NUMBER TEN 10A9F ; [*1B5A.0020.0002] # OLD NORTH ARABIAN NUMBER TWENTY 10AED ; [*1B63.0020.0002] # MANICHAEAN NUMBER TEN 10AEE ; [*1B64.0020.0002] # MANICHAEAN NUMBER TWENTY 10AEF ; [*1B65.0020.0002] # MANICHAEAN NUMBER ONE HUNDRED 10AF0 ; [*0443.0020.0002] # MANICHAEAN PUNCTUATION STAR 10AF1 ; [*0444.0020.0002] # MANICHAEAN PUNCTUATION FLEURON 10AF2 ; [*0445.0020.0002] # MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT 10AF3 ; [*0446.0020.0002] # MANICHAEAN PUNCTUATION DOT WITHIN DOT 10AF4 ; [*0447.0020.0002] # MANICHAEAN PUNCTUATION DOT 10AF5 ; [*0448.0020.0002] # MANICHAEAN PUNCTUATION TWO DOTS 10AF6 ; [*0449.0020.0002] # MANICHAEAN PUNCTUATION LINE FILLER 10B39 ; [*0442.0020.0002] # AVESTAN ABBREVIATION MARK 10B3A ; [*02DA.0020.0002] # TINY TWO DOTS OVER ONE DOT PUNCTUATION 10B3B ; [*02DB.0020.0002] # SMALL TWO DOTS OVER ONE DOT PUNCTUATION 10B3C ; [*02DC.0020.0002] # LARGE TWO DOTS OVER ONE DOT PUNCTUATION 10B3D ; [*02DD.0020.0002] # LARGE ONE DOT OVER TWO DOTS PUNCTUATION 10B3E ; [*02DE.0020.0002] # LARGE TWO RINGS OVER ONE RING PUNCTUATION 10B3F ; [*02DF.0020.0002] # LARGE ONE RING OVER TWO RINGS PUNCTUATION 10B5C ; [*1B66.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TEN 10B5D ; [*1B67.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWENTY 10B5E ; [*1B68.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED 10B5F ; [*1B69.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND 10B7C ; [*1B6A.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TEN 10B7D ; [*1B6B.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWENTY 10B7E ; [*1B6C.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED 10B7F ; [*1B6D.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND 10B99 ; [*044A.0020.0002] # PSALTER PAHLAVI SECTION MARK 10B9A ; [*044B.0020.0002] # PSALTER PAHLAVI TURNED SECTION MARK 10B9B ; [*044C.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH CROSS 10B9C ; [*044D.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH DOT 10BAD ; [*1B6E.0020.0002] # PSALTER PAHLAVI NUMBER TEN 10BAE ; [*1B6F.0020.0002] # PSALTER PAHLAVI NUMBER TWENTY 10BAF ; [*1B70.0020.0002] # PSALTER PAHLAVI NUMBER ONE HUNDRED 10CFC ; [*1AE5.0020.0002] # OLD HUNGARIAN NUMBER TEN 10CFD ; [*1AE6.0020.0002] # OLD HUNGARIAN NUMBER FIFTY 10CFE ; [*1AE7.0020.0002] # OLD HUNGARIAN NUMBER ONE HUNDRED 10CFF ; [*1AE8.0020.0002] # OLD HUNGARIAN NUMBER ONE THOUSAND 10E69 ; [*1ACC.0020.0002] # RUMI NUMBER TEN 10E6A ; [*1ACD.0020.0002] # RUMI NUMBER TWENTY 10E6B ; [*1ACE.0020.0002] # RUMI NUMBER THIRTY 10E6C ; [*1ACF.0020.0002] # RUMI NUMBER FORTY 10E6D ; [*1AD0.0020.0002] # RUMI NUMBER FIFTY 10E6E ; [*1AD1.0020.0002] # RUMI NUMBER SIXTY 10E6F ; [*1AD2.0020.0002] # RUMI NUMBER SEVENTY 10E70 ; [*1AD3.0020.0002] # RUMI NUMBER EIGHTY 10E71 ; [*1AD4.0020.0002] # RUMI NUMBER NINETY 10E72 ; [*1AD5.0020.0002] # RUMI NUMBER ONE HUNDRED 10E73 ; [*1AD6.0020.0002] # RUMI NUMBER TWO HUNDRED 10E74 ; [*1AD7.0020.0002] # RUMI NUMBER THREE HUNDRED 10E75 ; [*1AD8.0020.0002] # RUMI NUMBER FOUR HUNDRED 10E76 ; [*1AD9.0020.0002] # RUMI NUMBER FIVE HUNDRED 10E77 ; [*1ADA.0020.0002] # RUMI NUMBER SIX HUNDRED 10E78 ; [*1ADB.0020.0002] # RUMI NUMBER SEVEN HUNDRED 10E79 ; [*1ADC.0020.0002] # RUMI NUMBER EIGHT HUNDRED 10E7A ; [*1ADD.0020.0002] # RUMI NUMBER NINE HUNDRED 10E7B ; [*1ADE.0020.0002] # RUMI FRACTION ONE HALF 10E7C ; [*1ADF.0020.0002] # RUMI FRACTION ONE QUARTER 10E7D ; [*1AE0.0020.0002] # RUMI FRACTION ONE THIRD 10E7E ; [*1AE1.0020.0002] # RUMI FRACTION TWO THIRDS 11047 ; [*02AC.0020.0002] # BRAHMI DANDA 11048 ; [*02AD.0020.0002] # BRAHMI DOUBLE DANDA 11049 ; [*0433.0020.0002] # BRAHMI PUNCTUATION DOT 1104A ; [*0434.0020.0002] # BRAHMI PUNCTUATION DOUBLE DOT 1104B ; [*0435.0020.0002] # BRAHMI PUNCTUATION LINE 1104C ; [*0436.0020.0002] # BRAHMI PUNCTUATION CRESCENT BAR 1104D ; [*0437.0020.0002] # BRAHMI PUNCTUATION LOTUS 1105B ; [*1B73.0020.0002] # BRAHMI NUMBER TEN 1105C ; [*1B74.0020.0002] # BRAHMI NUMBER TWENTY 1105D ; [*1B75.0020.0002] # BRAHMI NUMBER THIRTY 1105E ; [*1B76.0020.0002] # BRAHMI NUMBER FORTY 1105F ; [*1B77.0020.0002] # BRAHMI NUMBER FIFTY 11060 ; [*1B78.0020.0002] # BRAHMI NUMBER SIXTY 11061 ; [*1B79.0020.0002] # BRAHMI NUMBER SEVENTY 11062 ; [*1B7A.0020.0002] # BRAHMI NUMBER EIGHTY 11063 ; [*1B7B.0020.0002] # BRAHMI NUMBER NINETY 11064 ; [*1B7C.0020.0002] # BRAHMI NUMBER ONE HUNDRED 11065 ; [*1B7D.0020.0002] # BRAHMI NUMBER ONE THOUSAND 110BB ; [*044E.0020.0002] # KAITHI ABBREVIATION SIGN 110BC ; [*044F.0020.0002] # KAITHI ENUMERATION SIGN 110BD ; [.0000.0000.0000] # KAITHI NUMBER SIGN 110BE ; [*02E0.0020.0002] # KAITHI SECTION MARK 110BF ; [*02E1.0020.0002] # KAITHI DOUBLE SECTION MARK 110C0 ; [*02AE.0020.0002] # KAITHI DANDA 110C1 ; [*02AF.0020.0002] # KAITHI DOUBLE DANDA 11140 ; [*02E2.0020.0002] # CHAKMA SECTION MARK 11141 ; [*02B0.0020.0002] # CHAKMA DANDA 11142 ; [*02B1.0020.0002] # CHAKMA DOUBLE DANDA 11143 ; [*0273.0020.0002] # CHAKMA QUESTION MARK 11174 ; [*0450.0020.0002] # MAHAJANI ABBREVIATION SIGN 11175 ; [*0451.0020.0002] # MAHAJANI SECTION MARK 111C5 ; [*02B2.0020.0002] # SHARADA DANDA 111C6 ; [*02B3.0020.0002] # SHARADA DOUBLE DANDA 111C7 ; [*0453.0020.0002] # SHARADA ABBREVIATION SIGN 111C8 ; [*02E3.0020.0002] # SHARADA SEPARATOR 111C9 ; [*0454.0020.0002] # SHARADA SANDHI MARK 111CD ; [*0452.0020.0002] # SHARADA SUTRA MARK 111DB ; [*0455.0020.0002] # SHARADA SIGN SIDDHAM 111DD ; [*0456.0020.0002] # SHARADA CONTINUATION SIGN 111DE ; [*02E4.0020.0002] # SHARADA SECTION MARK-1 111DF ; [*02E5.0020.0002] # SHARADA SECTION MARK-2 111EA ; [*1B8C.0020.0002] # SINHALA ARCHAIC NUMBER TEN 111EB ; [*1B8D.0020.0002] # SINHALA ARCHAIC NUMBER TWENTY 111EC ; [*1B8E.0020.0002] # SINHALA ARCHAIC NUMBER THIRTY 111ED ; [*1B8F.0020.0002] # SINHALA ARCHAIC NUMBER FORTY 111EE ; [*1B90.0020.0002] # SINHALA ARCHAIC NUMBER FIFTY 111EF ; [*1B91.0020.0002] # SINHALA ARCHAIC NUMBER SIXTY 111F0 ; [*1B92.0020.0002] # SINHALA ARCHAIC NUMBER SEVENTY 111F1 ; [*1B93.0020.0002] # SINHALA ARCHAIC NUMBER EIGHTY 111F2 ; [*1B94.0020.0002] # SINHALA ARCHAIC NUMBER NINETY 111F3 ; [*1B95.0020.0002] # SINHALA ARCHAIC NUMBER ONE HUNDRED 111F4 ; [*1B96.0020.0002] # SINHALA ARCHAIC NUMBER ONE THOUSAND 11238 ; [*02B4.0020.0002] # KHOJKI DANDA 11239 ; [*02B5.0020.0002] # KHOJKI DOUBLE DANDA 1123A ; [*0457.0020.0002] # KHOJKI WORD SEPARATOR 1123B ; [*0458.0020.0002] # KHOJKI SECTION MARK 1123C ; [*0459.0020.0002] # KHOJKI DOUBLE SECTION MARK 1123D ; [*045A.0020.0002] # KHOJKI ABBREVIATION SIGN 112A9 ; [*02E6.0020.0002] # MULTANI SECTION MARK 11366 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ZERO 11367 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ONE 11368 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT TWO 11369 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT THREE 1136A ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT FOUR 1136B ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT FIVE 1136C ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT SIX 11370 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER A 11371 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER KA 11372 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER NA 11373 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER VI 11374 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER PA 1144B ; [*02B6.0020.0002] # NEWA DANDA 1144C ; [*02B7.0020.0002] # NEWA DOUBLE DANDA 1144D ; [*045B.0020.0002] # NEWA COMMA 1144E ; [*045C.0020.0002] # NEWA GAP FILLER 1144F ; [*045D.0020.0002] # NEWA ABBREVIATION SIGN 1145B ; [*045E.0020.0002] # NEWA PLACEHOLDER MARK 1145D ; [*045F.0020.0002] # NEWA INSERTION SIGN 114C6 ; [*0460.0020.0002] # TIRHUTA ABBREVIATION SIGN 115C1 ; [*0461.0020.0002] # SIDDHAM SIGN SIDDHAM 115C2 ; [*02B8.0020.0002] # SIDDHAM DANDA 115C3 ; [*02B9.0020.0002] # SIDDHAM DOUBLE DANDA 115C4 ; [*0462.0020.0002] # SIDDHAM SEPARATOR DOT 115C5 ; [*0463.0020.0002] # SIDDHAM SEPARATOR BAR 115C6 ; [*0464.0020.0002] # SIDDHAM REPETITION MARK-1 115C7 ; [*0465.0020.0002] # SIDDHAM REPETITION MARK-2 115C8 ; [*0466.0020.0002] # SIDDHAM REPETITION MARK-3 115C9 ; [*0467.0020.0002] # SIDDHAM END OF TEXT MARK 115CA ; [*0468.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS 115CB ; [*0469.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS 115CC ; [*046A.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS 115CD ; [*046B.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS 115CE ; [*046C.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS 115CF ; [*046D.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING 115D0 ; [*046E.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING WITH RAYS 115D1 ; [*046F.0020.0002] # SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS 115D2 ; [*0470.0020.0002] # SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS 115D3 ; [*0471.0020.0002] # SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS 115D4 ; [*0472.0020.0002] # SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS 115D5 ; [*0473.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND RAYS 115D6 ; [*0474.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES 115D7 ; [*0475.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES 11641 ; [*02BA.0020.0002] # MODI DANDA 11642 ; [*02BB.0020.0002] # MODI DOUBLE DANDA 11643 ; [*0476.0020.0002] # MODI ABBREVIATION SIGN 11660 ; [*03DA.0020.0002] # MONGOLIAN BIRGA WITH ORNAMENT 11661 ; [*03DB.0020.0002] # MONGOLIAN ROTATED BIRGA 11662 ; [*03DC.0020.0002] # MONGOLIAN DOUBLE BIRGA WITH ORNAMENT 11663 ; [*03DD.0020.0002] # MONGOLIAN TRIPLE BIRGA WITH ORNAMENT 11664 ; [*03DE.0020.0002] # MONGOLIAN BIRGA WITH DOUBLE ORNAMENT 11665 ; [*03DF.0020.0002] # MONGOLIAN ROTATED BIRGA WITH ORNAMENT 11666 ; [*03E0.0020.0002] # MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT 11667 ; [*03E1.0020.0002] # MONGOLIAN INVERTED BIRGA 11668 ; [*03E2.0020.0002] # MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT 11669 ; [*03E3.0020.0002] # MONGOLIAN SWIRL BIRGA 1166A ; [*03E4.0020.0002] # MONGOLIAN SWIRL BIRGA WITH ORNAMENT 1166B ; [*03E5.0020.0002] # MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT 1166C ; [*03E6.0020.0002] # MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT 1173A ; [*1B71.0020.0002] # AHOM NUMBER TEN 1173B ; [*1B72.0020.0002] # AHOM NUMBER TWENTY 1173C ; [*02BC.0020.0002] # AHOM SIGN SMALL SECTION 1173D ; [*02BD.0020.0002] # AHOM SIGN SECTION 1173E ; [*02E7.0020.0002] # AHOM SIGN RULAI 1173F ; [*0550.0020.0002] # AHOM SYMBOL VI 118EA ; [*1B97.0020.0002] # WARANG CITI NUMBER TEN 118EB ; [*1B98.0020.0002] # WARANG CITI NUMBER TWENTY 118EC ; [*1B99.0020.0002] # WARANG CITI NUMBER THIRTY 118ED ; [*1B9A.0020.0002] # WARANG CITI NUMBER FORTY 118EE ; [*1B9B.0020.0002] # WARANG CITI NUMBER FIFTY 118EF ; [*1B9C.0020.0002] # WARANG CITI NUMBER SIXTY 118F0 ; [*1B9D.0020.0002] # WARANG CITI NUMBER SEVENTY 118F1 ; [*1B9E.0020.0002] # WARANG CITI NUMBER EIGHTY 118F2 ; [*1B9F.0020.0002] # WARANG CITI NUMBER NINETY 11C41 ; [*02BE.0020.0002] # BHAIKSUKI DANDA 11C42 ; [*02BF.0020.0002] # BHAIKSUKI DOUBLE DANDA 11C43 ; [*043F.0020.0002] # BHAIKSUKI WORD SEPARATOR 11C44 ; [*0440.0020.0002] # BHAIKSUKI GAP FILLER-1 11C45 ; [*0441.0020.0002] # BHAIKSUKI GAP FILLER-2 11C63 ; [*1B82.0020.0002] # BHAIKSUKI NUMBER TEN 11C64 ; [*1B83.0020.0002] # BHAIKSUKI NUMBER TWENTY 11C65 ; [*1B84.0020.0002] # BHAIKSUKI NUMBER THIRTY 11C66 ; [*1B85.0020.0002] # BHAIKSUKI NUMBER FORTY 11C67 ; [*1B86.0020.0002] # BHAIKSUKI NUMBER FIFTY 11C68 ; [*1B87.0020.0002] # BHAIKSUKI NUMBER SIXTY 11C69 ; [*1B88.0020.0002] # BHAIKSUKI NUMBER SEVENTY 11C6A ; [*1B89.0020.0002] # BHAIKSUKI NUMBER EIGHTY 11C6B ; [*1B8A.0020.0002] # BHAIKSUKI NUMBER NINETY 11C6C ; [*1B8B.0020.0002] # BHAIKSUKI HUNDREDS UNIT MARK 11C70 ; [*0409.0020.0002] # MARCHEN HEAD MARK 11C71 ; [*040A.0020.0002] # MARCHEN MARK SHAD 12432 ; [*1BDE.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH 12433 ; [*1BDF.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN 1245A ; [*1BE0.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD DISH 1245B ; [*1BE1.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS DISH 1245C ; [*1BE2.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH 1245D ; [*1BE3.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A 1245E ; [*1BE4.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A 1245F ; [*1BE5.0020.0002] # CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH 12460 ; [*1BE6.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER ASH 12461 ; [*1BE7.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH 12462 ; [*1BE8.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER 12463 ; [*1BE9.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER GUR 12464 ; [*1BEA.0020.0002] # CUNEIFORM NUMERIC SIGN ONE HALF GUR 12465 ; [*1BEB.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD 12466 ; [*1BEC.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS 12467 ; [*1BED.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FORTY 12468 ; [*1BEE.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FIFTY 12470 ; [*0300.0020.0002] # CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER 12471 ; [*0301.0020.0002] # CUNEIFORM PUNCTUATION SIGN VERTICAL COLON 12472 ; [*0302.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON 12473 ; [*0303.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON 12474 ; [*0304.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON 16A6E ; [*02C0.0020.0002] # MRO DANDA 16A6F ; [*02C1.0020.0002] # MRO DOUBLE DANDA 16AF5 ; [*0288.0020.0002] # BASSA VAH FULL STOP 16B37 ; [*0477.0020.0002] # PAHAWH HMONG SIGN VOS THOM 16B38 ; [*0478.0020.0002] # PAHAWH HMONG SIGN VOS TSHAB CEEB 16B39 ; [*0479.0020.0002] # PAHAWH HMONG SIGN CIM CHEEM 16B3A ; [*047A.0020.0002] # PAHAWH HMONG SIGN VOS THIAB 16B3B ; [*047B.0020.0002] # PAHAWH HMONG SIGN VOS FEEM 16B3C ; [*0FD1.0020.0002] # PAHAWH HMONG SIGN XYEEM NTXIV 16B3D ; [*0FD2.0020.0002] # PAHAWH HMONG SIGN XYEEM RHO 16B3E ; [*0FD3.0020.0002] # PAHAWH HMONG SIGN XYEEM TOV 16B3F ; [*0FD4.0020.0002] # PAHAWH HMONG SIGN XYEEM FAIB 16B44 ; [*047C.0020.0002] # PAHAWH HMONG SIGN XAUS 16B45 ; [*0FD5.0020.0002] # PAHAWH HMONG SIGN CIM TSOV ROG 16B5B ; [*1BA0.0020.0002] # PAHAWH HMONG NUMBER TENS 16B5C ; [*1BA1.0020.0002] # PAHAWH HMONG NUMBER HUNDREDS 16B5D ; [*1BA2.0020.0002] # PAHAWH HMONG NUMBER TEN THOUSANDS 16B5E ; [*1BA3.0020.0002] # PAHAWH HMONG NUMBER MILLIONS 16B5F ; [*1BA4.0020.0002] # PAHAWH HMONG NUMBER HUNDRED MILLIONS 16B60 ; [*1BA5.0020.0002] # PAHAWH HMONG NUMBER TEN BILLIONS 16B61 ; [*1BA6.0020.0002] # PAHAWH HMONG NUMBER TRILLIONS 1BC9C ; [*11C6.0020.0002] # DUPLOYAN SIGN O WITH CROSS 1BC9F ; [*0289.0020.0002] # DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1D000 ; [*0FD6.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILI 1D001 ; [*0FD7.0020.0002] # BYZANTINE MUSICAL SYMBOL DASEIA 1D002 ; [*0FD8.0020.0002] # BYZANTINE MUSICAL SYMBOL PERISPOMENI 1D003 ; [*0FD9.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON 1D004 ; [*0FDA.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI 1D005 ; [*0FDB.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON 1D006 ; [*0FDC.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI 1D007 ; [*0FDD.0020.0002] # BYZANTINE MUSICAL SYMBOL KATHISTI 1D008 ; [*0FDE.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMATIKI 1D009 ; [*0FDF.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI 1D00A ; [*0FE0.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS 1D00B ; [*0FE1.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI 1D00C ; [*0FE2.0020.0002] # BYZANTINE MUSICAL SYMBOL KREMASTI 1D00D ; [*0FE3.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON 1D00E ; [*0FE4.0020.0002] # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON 1D00F ; [*0FE5.0020.0002] # BYZANTINE MUSICAL SYMBOL TELEIA 1D010 ; [*0FE6.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA 1D011 ; [*0FE7.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS 1D012 ; [*0FE8.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI 1D013 ; [*0FE9.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNEVMA 1D014 ; [*0FEA.0020.0002] # BYZANTINE MUSICAL SYMBOL THITA 1D015 ; [*0FEB.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION 1D016 ; [*0FEC.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION 1D017 ; [*0FED.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILON 1D018 ; [*0FEE.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILON 1D019 ; [*0FEF.0020.0002] # BYZANTINE MUSICAL SYMBOL VATHY 1D01A ; [*0FF0.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON ARCHAION 1D01B ; [*0FF1.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION 1D01C ; [*0FF2.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION 1D01D ; [*0FF3.0020.0002] # BYZANTINE MUSICAL SYMBOL SAXIMATA 1D01E ; [*0FF4.0020.0002] # BYZANTINE MUSICAL SYMBOL PARICHON 1D01F ; [*0FF5.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA 1D020 ; [*0FF6.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION 1D021 ; [*0FF7.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION 1D022 ; [*0FF8.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION 1D023 ; [*0FF9.0020.0002] # BYZANTINE MUSICAL SYMBOL APOTHEMA 1D024 ; [*0FFA.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA 1D025 ; [*0FFB.0020.0002] # BYZANTINE MUSICAL SYMBOL REVMA 1D026 ; [*0FFC.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION 1D027 ; [*0FFD.0020.0002] # BYZANTINE MUSICAL SYMBOL TINAGMA 1D028 ; [*0FFE.0020.0002] # BYZANTINE MUSICAL SYMBOL ANATRICHISMA 1D029 ; [*0FFF.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA 1D02A ; [*1000.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION 1D02B ; [*1001.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU 1D02C ; [*1002.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION 1D02D ; [*1003.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA 1D02E ; [*1004.0020.0002] # BYZANTINE MUSICAL SYMBOL LEMOI 1D02F ; [*1005.0020.0002] # BYZANTINE MUSICAL SYMBOL DYO 1D030 ; [*1006.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIA 1D031 ; [*1007.0020.0002] # BYZANTINE MUSICAL SYMBOL TESSERA 1D032 ; [*1008.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMATA 1D033 ; [*1009.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EXO NEO 1D034 ; [*100A.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION 1D035 ; [*100B.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORA 1D036 ; [*100C.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION 1D037 ; [*100D.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON 1D038 ; [*100E.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON 1D039 ; [*100F.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON 1D03A ; [*1010.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA 1D03B ; [*1011.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION 1D03C ; [*1012.0020.0002] # BYZANTINE MUSICAL SYMBOL RAPISMA 1D03D ; [*1013.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION 1D03E ; [*1014.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION 1D03F ; [*1015.0020.0002] # BYZANTINE MUSICAL SYMBOL ICHADIN 1D040 ; [*1016.0020.0002] # BYZANTINE MUSICAL SYMBOL NANA 1D041 ; [*1017.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASMA 1D042 ; [*1018.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO 1D043 ; [*1019.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO 1D044 ; [*101A.0020.0002] # BYZANTINE MUSICAL SYMBOL STRAGGISMATA 1D045 ; [*101B.0020.0002] # BYZANTINE MUSICAL SYMBOL GRONTHISMATA 1D046 ; [*101C.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON NEO 1D047 ; [*101D.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON NEO 1D048 ; [*101E.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA NEO 1D049 ; [*101F.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTI 1D04A ; [*1020.0020.0002] # BYZANTINE MUSICAL SYMBOL KOUFISMA 1D04B ; [*1021.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA 1D04C ; [*1022.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA 1D04D ; [*1023.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON NEO 1D04E ; [*1024.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO 1D04F ; [*1025.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO 1D050 ; [*1026.0020.0002] # BYZANTINE MUSICAL SYMBOL YPSILI 1D051 ; [*1027.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO 1D052 ; [*1028.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO 1D053 ; [*1029.0020.0002] # BYZANTINE MUSICAL SYMBOL YPORROI 1D054 ; [*102A.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON 1D055 ; [*102B.0020.0002] # BYZANTINE MUSICAL SYMBOL ELAFRON 1D056 ; [*102C.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILI 1D057 ; [*102D.0020.0002] # BYZANTINE MUSICAL SYMBOL MIKRON ISON 1D058 ; [*102E.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA NEO 1D059 ; [*102F.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA NEO 1D05A ; [*1030.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO 1D05B ; [*1031.0020.0002] # BYZANTINE MUSICAL SYMBOL OMALON 1D05C ; [*1032.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOMA 1D05D ; [*1033.0020.0002] # BYZANTINE MUSICAL SYMBOL LYGISMA 1D05E ; [*1034.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO 1D05F ; [*1035.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO 1D060 ; [*1036.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA 1D061 ; [*1037.0020.0002] # BYZANTINE MUSICAL SYMBOL KYLISMA 1D062 ; [*1038.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA 1D063 ; [*1039.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON NEO 1D064 ; [*103A.0020.0002] # BYZANTINE MUSICAL SYMBOL EKSTREPTON 1D065 ; [*103B.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO 1D066 ; [*103C.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMA 1D067 ; [*103D.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO 1D068 ; [*103E.0020.0002] # BYZANTINE MUSICAL SYMBOL EPEGERMA 1D069 ; [*103F.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA NEO 1D06A ; [*1040.0020.0002] # BYZANTINE MUSICAL SYMBOL XIRON KLASMA 1D06B ; [*1041.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON 1D06C ; [*1042.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA 1D06D ; [*1043.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA 1D06E ; [*1044.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA 1D06F ; [*1045.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA 1D070 ; [*1046.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA 1D071 ; [*1047.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA 1D072 ; [*1048.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON 1D073 ; [*1049.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON 1D074 ; [*104A.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON 1D075 ; [*104B.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO 1D076 ; [*104C.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO 1D077 ; [*104D.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO 1D078 ; [*104E.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA APLOUN 1D079 ; [*104F.0020.0002] # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES 1D07A ; [*1050.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVASMA 1D07B ; [*1051.0020.0002] # BYZANTINE MUSICAL SYMBOL ENDOFONON 1D07C ; [*1052.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN KATO 1D07D ; [*1053.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN ANO 1D07E ; [*1054.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS 1D07F ; [*1055.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA ANO 1D080 ; [*1056.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION 1D081 ; [*1057.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION 1D082 ; [*1058.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO 1D083 ; [*1059.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA NEO 1D084 ; [*105A.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA NEO 1D085 ; [*105B.0020.0002] # BYZANTINE MUSICAL SYMBOL APLI 1D086 ; [*105C.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI 1D087 ; [*105D.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIPLI 1D088 ; [*105E.0020.0002] # BYZANTINE MUSICAL SYMBOL TETRAPLI 1D089 ; [*105F.0020.0002] # BYZANTINE MUSICAL SYMBOL KORONIS 1D08A ; [*1060.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU 1D08B ; [*1061.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON 1D08C ; [*1062.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON 1D08D ; [*1063.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON 1D08E ; [*1064.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU 1D08F ; [*1065.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO 1D090 ; [*1066.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA 1D091 ; [*1067.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA 1D092 ; [*1068.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON 1D093 ; [*1069.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO 1D094 ; [*106A.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO 1D095 ; [*106B.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA 1D096 ; [*106C.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIGORGON 1D097 ; [*106D.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGON 1D098 ; [*106E.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIDIARGON 1D099 ; [*106F.0020.0002] # BYZANTINE MUSICAL SYMBOL DIARGON 1D09A ; [*1070.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI 1D09B ; [*1071.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI 1D09C ; [*1072.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGI 1D09D ; [*1073.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI METRIA 1D09E ; [*1074.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI MESI 1D09F ; [*1075.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGI 1D0A0 ; [*1076.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI 1D0A1 ; [*1077.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI 1D0A2 ; [*1078.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS 1D0A3 ; [*1079.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS 1D0A4 ; [*107A.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS 1D0A5 ; [*107B.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS 1D0A6 ; [*107C.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS 1D0A7 ; [*107D.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS 1D0A8 ; [*107E.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS 1D0A9 ; [*107F.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS 1D0AA ; [*1080.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS 1D0AB ; [*1081.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS 1D0AC ; [*1082.0020.0002] # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS 1D0AD ; [*1083.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS 1D0AE ; [*1084.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS 1D0AF ; [*1085.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS 1D0B0 ; [*1086.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS 1D0B1 ; [*1087.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS 1D0B2 ; [*1088.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS 1D0B3 ; [*1089.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS 1D0B4 ; [*108A.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN 1D0B5 ; [*108B.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN 1D0B6 ; [*108C.0020.0002] # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU 1D0B7 ; [*108D.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFONON 1D0B8 ; [*108E.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORON 1D0B9 ; [*108F.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU 1D0BA ; [*1090.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA 1D0BB ; [*1091.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA 1D0BC ; [*1092.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS 1D0BD ; [*1093.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI 1D0BE ; [*1094.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI 1D0BF ; [*1095.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE 1D0C0 ; [*1096.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO 1D0C1 ; [*1097.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO 1D0C2 ; [*1098.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO 1D0C3 ; [*1099.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS 1D0C4 ; [*109A.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS 1D0C5 ; [*109B.0020.0002] # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS 1D0C6 ; [*109C.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI 1D0C7 ; [*109D.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NENANO 1D0C8 ; [*109E.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS 1D0C9 ; [*109F.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA KLITON 1D0CA ; [*10A0.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA SPATHI 1D0CB ; [*10A1.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION 1D0CC ; [*10A2.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA 1D0CD ; [*10A3.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION 1D0CE ; [*10A4.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION 1D0CF ; [*10A5.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION 1D0D0 ; [*10A6.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA 1D0D1 ; [*10A7.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA 1D0D2 ; [*10A8.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA 1D0D3 ; [*10A9.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA 1D0D4 ; [*10AA.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA 1D0D5 ; [*10AB.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA 1D0D6 ; [*10AC.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA 1D0D7 ; [*10AD.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA 1D0D8 ; [*10AE.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS 1D0D9 ; [*10AF.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS 1D0DA ; [*10B0.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI 1D0DB ; [*10B1.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI 1D0DC ; [*10B2.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI 1D0DD ; [*10B3.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS 1D0DE ; [*10B4.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS 1D0DF ; [*10B5.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU 1D0E0 ; [*10B6.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU 1D0E1 ; [*10B7.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU 1D0E2 ; [*10B8.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS 1D0E3 ; [*10B9.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU 1D0E4 ; [*10BA.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU 1D0E5 ; [*10BB.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU 1D0E6 ; [*10BC.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG 1D0E7 ; [*10BD.0020.0002] # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU 1D0E8 ; [*10BE.0020.0002] # BYZANTINE MUSICAL SYMBOL STIGMA 1D0E9 ; [*10BF.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO PA 1D0EA ; [*10C0.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU 1D0EB ; [*10C1.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO GA 1D0EC ; [*10C2.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO DI 1D0ED ; [*10C3.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO KE 1D0EE ; [*10C4.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO 1D0EF ; [*10C5.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO NI 1D0F0 ; [*10C6.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO 1D0F1 ; [*10C7.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO 1D0F2 ; [*10C8.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO 1D0F3 ; [*10C9.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO 1D0F4 ; [*10CA.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA KATO 1D0F5 ; [*10CB.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100 ; [*10CC.0020.0002] # MUSICAL SYMBOL SINGLE BARLINE 1D101 ; [*10CD.0020.0002] # MUSICAL SYMBOL DOUBLE BARLINE 1D102 ; [*10CE.0020.0002] # MUSICAL SYMBOL FINAL BARLINE 1D103 ; [*10CF.0020.0002] # MUSICAL SYMBOL REVERSE FINAL BARLINE 1D104 ; [*10D0.0020.0002] # MUSICAL SYMBOL DASHED BARLINE 1D105 ; [*10D1.0020.0002] # MUSICAL SYMBOL SHORT BARLINE 1D106 ; [*10D2.0020.0002] # MUSICAL SYMBOL LEFT REPEAT SIGN 1D107 ; [*10D3.0020.0002] # MUSICAL SYMBOL RIGHT REPEAT SIGN 1D108 ; [*10D4.0020.0002] # MUSICAL SYMBOL REPEAT DOTS 1D109 ; [*10D5.0020.0002] # MUSICAL SYMBOL DAL SEGNO 1D10A ; [*10D6.0020.0002] # MUSICAL SYMBOL DA CAPO 1D10B ; [*10D7.0020.0002] # MUSICAL SYMBOL SEGNO 1D10C ; [*10D8.0020.0002] # MUSICAL SYMBOL CODA 1D10D ; [*10D9.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-1 1D10E ; [*10DA.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-2 1D10F ; [*10DB.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-3 1D110 ; [*10DC.0020.0002] # MUSICAL SYMBOL FERMATA 1D111 ; [*10DD.0020.0002] # MUSICAL SYMBOL FERMATA BELOW 1D112 ; [*10DE.0020.0002] # MUSICAL SYMBOL BREATH MARK 1D113 ; [*10DF.0020.0002] # MUSICAL SYMBOL CAESURA 1D114 ; [*10E0.0020.0002] # MUSICAL SYMBOL BRACE 1D115 ; [*10E1.0020.0002] # MUSICAL SYMBOL BRACKET 1D116 ; [*10E2.0020.0002] # MUSICAL SYMBOL ONE-LINE STAFF 1D117 ; [*10E3.0020.0002] # MUSICAL SYMBOL TWO-LINE STAFF 1D118 ; [*10E4.0020.0002] # MUSICAL SYMBOL THREE-LINE STAFF 1D119 ; [*10E5.0020.0002] # MUSICAL SYMBOL FOUR-LINE STAFF 1D11A ; [*10E6.0020.0002] # MUSICAL SYMBOL FIVE-LINE STAFF 1D11B ; [*10E7.0020.0002] # MUSICAL SYMBOL SIX-LINE STAFF 1D11C ; [*10E8.0020.0002] # MUSICAL SYMBOL SIX-STRING FRETBOARD 1D11D ; [*10E9.0020.0002] # MUSICAL SYMBOL FOUR-STRING FRETBOARD 1D11E ; [*10EA.0020.0002] # MUSICAL SYMBOL G CLEF 1D11F ; [*10EB.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA ALTA 1D120 ; [*10EC.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA BASSA 1D121 ; [*10ED.0020.0002] # MUSICAL SYMBOL C CLEF 1D122 ; [*10EE.0020.0002] # MUSICAL SYMBOL F CLEF 1D123 ; [*10EF.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA ALTA 1D124 ; [*10F0.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA BASSA 1D125 ; [*10F1.0020.0002] # MUSICAL SYMBOL DRUM CLEF-1 1D126 ; [*10F2.0020.0002] # MUSICAL SYMBOL DRUM CLEF-2 1D129 ; [*1106.0020.0002] # MUSICAL SYMBOL MULTIPLE MEASURE REST 1D12A ; [*10F6.0020.0002] # MUSICAL SYMBOL DOUBLE SHARP 1D12B ; [*10F7.0020.0002] # MUSICAL SYMBOL DOUBLE FLAT 1D12C ; [*10F8.0020.0002] # MUSICAL SYMBOL FLAT UP 1D12D ; [*10F9.0020.0002] # MUSICAL SYMBOL FLAT DOWN 1D12E ; [*10FA.0020.0002] # MUSICAL SYMBOL NATURAL UP 1D12F ; [*10FB.0020.0002] # MUSICAL SYMBOL NATURAL DOWN 1D130 ; [*10FC.0020.0002] # MUSICAL SYMBOL SHARP UP 1D131 ; [*10FD.0020.0002] # MUSICAL SYMBOL SHARP DOWN 1D132 ; [*10FE.0020.0002] # MUSICAL SYMBOL QUARTER TONE SHARP 1D133 ; [*10FF.0020.0002] # MUSICAL SYMBOL QUARTER TONE FLAT 1D134 ; [*1100.0020.0002] # MUSICAL SYMBOL COMMON TIME 1D135 ; [*1101.0020.0002] # MUSICAL SYMBOL CUT TIME 1D136 ; [*1102.0020.0002] # MUSICAL SYMBOL OTTAVA ALTA 1D137 ; [*1103.0020.0002] # MUSICAL SYMBOL OTTAVA BASSA 1D138 ; [*1104.0020.0002] # MUSICAL SYMBOL QUINDICESIMA ALTA 1D139 ; [*1105.0020.0002] # MUSICAL SYMBOL QUINDICESIMA BASSA 1D13A ; [*1107.0020.0002] # MUSICAL SYMBOL MULTI REST 1D13B ; [*1108.0020.0002] # MUSICAL SYMBOL WHOLE REST 1D13C ; [*1109.0020.0002] # MUSICAL SYMBOL HALF REST 1D13D ; [*110A.0020.0002] # MUSICAL SYMBOL QUARTER REST 1D13E ; [*110B.0020.0002] # MUSICAL SYMBOL EIGHTH REST 1D13F ; [*110C.0020.0002] # MUSICAL SYMBOL SIXTEENTH REST 1D140 ; [*110D.0020.0002] # MUSICAL SYMBOL THIRTY-SECOND REST 1D141 ; [*110E.0020.0002] # MUSICAL SYMBOL SIXTY-FOURTH REST 1D142 ; [*110F.0020.0002] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST 1D143 ; [*1110.0020.0002] # MUSICAL SYMBOL X NOTEHEAD 1D144 ; [*1111.0020.0002] # MUSICAL SYMBOL PLUS NOTEHEAD 1D145 ; [*1112.0020.0002] # MUSICAL SYMBOL CIRCLE X NOTEHEAD 1D146 ; [*1113.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE 1D147 ; [*1114.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK 1D148 ; [*1115.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE 1D149 ; [*1116.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK 1D14A ; [*1117.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE 1D14B ; [*1118.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK 1D14C ; [*1119.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE 1D14D ; [*111A.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK 1D14E ; [*111B.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE 1D14F ; [*111C.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK 1D150 ; [*111D.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE 1D151 ; [*111E.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK 1D152 ; [*111F.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD WHITE 1D153 ; [*1120.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD BLACK 1D154 ; [*1121.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE 1D155 ; [*1122.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK 1D156 ; [*1123.0020.0002] # MUSICAL SYMBOL PARENTHESIS NOTEHEAD 1D157 ; [*1124.0020.0002] # MUSICAL SYMBOL VOID NOTEHEAD 1D158 ; [*1125.0020.0002] # MUSICAL SYMBOL NOTEHEAD BLACK 1D159 ; [*1126.0020.0002] # MUSICAL SYMBOL NULL NOTEHEAD 1D15A ; [*1127.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE 1D15B ; [*1128.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK 1D15C ; [*1129.0020.0002] # MUSICAL SYMBOL BREVE 1D15D ; [*112A.0020.0002] # MUSICAL SYMBOL WHOLE NOTE 1D15E ; [*1124.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL HALF NOTE 1D15F ; [*1125.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL QUARTER NOTE 1D160 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL EIGHTH NOTE 1D161 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTEENTH NOTE 1D162 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL THIRTY-SECOND NOTE 1D163 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTY-FOURTH NOTE 1D164 ; [*1125.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE 1D165 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STEM 1D166 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-1 1D168 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-2 1D169 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-3 1D16A ; [*112B.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-1 1D16B ; [*112C.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-2 1D16C ; [*112D.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-3 1D16D ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING AUGMENTATION DOT 1D16E ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-1 1D16F ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-2 1D170 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-3 1D171 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-4 1D172 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-5 1D17B ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING ACCENT 1D17C ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STACCATO 1D17D ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TENUTO 1D17E ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STACCATISSIMO 1D17F ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING MARCATO 1D180 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING MARCATO-STACCATO 1D181 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING ACCENT-STACCATO 1D182 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING LOURE 1D183 ; [*112E.0020.0002] # MUSICAL SYMBOL ARPEGGIATO UP 1D184 ; [*112F.0020.0002] # MUSICAL SYMBOL ARPEGGIATO DOWN 1D185 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOIT 1D186 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING RIP 1D187 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLIP 1D188 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SMEAR 1D189 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING BEND 1D18A ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOUBLE TONGUE 1D18B ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D18C ; [*1130.0020.0002] # MUSICAL SYMBOL RINFORZANDO 1D18D ; [*1131.0020.0002] # MUSICAL SYMBOL SUBITO 1D18E ; [*1132.0020.0002] # MUSICAL SYMBOL Z 1D18F ; [*1133.0020.0002] # MUSICAL SYMBOL PIANO 1D190 ; [*1134.0020.0002] # MUSICAL SYMBOL MEZZO 1D191 ; [*1135.0020.0002] # MUSICAL SYMBOL FORTE 1D192 ; [*1136.0020.0002] # MUSICAL SYMBOL CRESCENDO 1D193 ; [*1137.0020.0002] # MUSICAL SYMBOL DECRESCENDO 1D194 ; [*1138.0020.0002] # MUSICAL SYMBOL GRACE NOTE SLASH 1D195 ; [*1139.0020.0002] # MUSICAL SYMBOL GRACE NOTE NO SLASH 1D196 ; [*113A.0020.0002] # MUSICAL SYMBOL TR 1D197 ; [*113B.0020.0002] # MUSICAL SYMBOL TURN 1D198 ; [*113C.0020.0002] # MUSICAL SYMBOL INVERTED TURN 1D199 ; [*113D.0020.0002] # MUSICAL SYMBOL TURN SLASH 1D19A ; [*113E.0020.0002] # MUSICAL SYMBOL TURN UP 1D19B ; [*113F.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-1 1D19C ; [*1140.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-2 1D19D ; [*1141.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-3 1D19E ; [*1142.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-4 1D19F ; [*1143.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-5 1D1A0 ; [*1144.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-6 1D1A1 ; [*1145.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-7 1D1A2 ; [*1146.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-8 1D1A3 ; [*1147.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-9 1D1A4 ; [*1148.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-10 1D1A5 ; [*1149.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-11 1D1A6 ; [*114A.0020.0002] # MUSICAL SYMBOL HAUPTSTIMME 1D1A7 ; [*114B.0020.0002] # MUSICAL SYMBOL NEBENSTIMME 1D1A8 ; [*114C.0020.0002] # MUSICAL SYMBOL END OF STIMME 1D1A9 ; [*114D.0020.0002] # MUSICAL SYMBOL DEGREE SLASH 1D1AA ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOWN BOW 1D1AB ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING UP BOW 1D1AC ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING HARMONIC 1D1AD ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SNAP PIZZICATO 1D1AE ; [*114E.0020.0002] # MUSICAL SYMBOL PEDAL MARK 1D1AF ; [*114F.0020.0002] # MUSICAL SYMBOL PEDAL UP MARK 1D1B0 ; [*1150.0020.0002] # MUSICAL SYMBOL HALF PEDAL MARK 1D1B1 ; [*1151.0020.0002] # MUSICAL SYMBOL GLISSANDO UP 1D1B2 ; [*1152.0020.0002] # MUSICAL SYMBOL GLISSANDO DOWN 1D1B3 ; [*1153.0020.0002] # MUSICAL SYMBOL WITH FINGERNAILS 1D1B4 ; [*1154.0020.0002] # MUSICAL SYMBOL DAMP 1D1B5 ; [*1155.0020.0002] # MUSICAL SYMBOL DAMP ALL 1D1B6 ; [*1156.0020.0002] # MUSICAL SYMBOL MAXIMA 1D1B7 ; [*1157.0020.0002] # MUSICAL SYMBOL LONGA 1D1B8 ; [*1158.0020.0002] # MUSICAL SYMBOL BREVIS 1D1B9 ; [*1159.0020.0002] # MUSICAL SYMBOL SEMIBREVIS WHITE 1D1BA ; [*115A.0020.0002] # MUSICAL SYMBOL SEMIBREVIS BLACK 1D1BB ; [*1159.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA 1D1BC ; [*115A.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA BLACK 1D1BD ; [*1159.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA WHITE 1D1BE ; [*115A.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA BLACK 1D1BF ; [*1159.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA WHITE 1D1C0 ; [*115A.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA BLACK 1D1C1 ; [*115B.0020.0002] # MUSICAL SYMBOL LONGA PERFECTA REST 1D1C2 ; [*115C.0020.0002] # MUSICAL SYMBOL LONGA IMPERFECTA REST 1D1C3 ; [*115D.0020.0002] # MUSICAL SYMBOL BREVIS REST 1D1C4 ; [*115E.0020.0002] # MUSICAL SYMBOL SEMIBREVIS REST 1D1C5 ; [*115F.0020.0002] # MUSICAL SYMBOL MINIMA REST 1D1C6 ; [*1160.0020.0002] # MUSICAL SYMBOL SEMIMINIMA REST 1D1C7 ; [*1161.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA 1D1C8 ; [*1162.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA 1D1C9 ; [*1163.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1 1D1CA ; [*1164.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA 1D1CB ; [*1165.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA 1D1CC ; [*1166.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1 1D1CD ; [*1167.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2 1D1CE ; [*1168.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3 1D1CF ; [*1169.0020.0002] # MUSICAL SYMBOL CROIX 1D1D0 ; [*116A.0020.0002] # MUSICAL SYMBOL GREGORIAN C CLEF 1D1D1 ; [*116B.0020.0002] # MUSICAL SYMBOL GREGORIAN F CLEF 1D1D2 ; [*116C.0020.0002] # MUSICAL SYMBOL SQUARE B 1D1D3 ; [*116D.0020.0002] # MUSICAL SYMBOL VIRGA 1D1D4 ; [*116E.0020.0002] # MUSICAL SYMBOL PODATUS 1D1D5 ; [*116F.0020.0002] # MUSICAL SYMBOL CLIVIS 1D1D6 ; [*1170.0020.0002] # MUSICAL SYMBOL SCANDICUS 1D1D7 ; [*1171.0020.0002] # MUSICAL SYMBOL CLIMACUS 1D1D8 ; [*1172.0020.0002] # MUSICAL SYMBOL TORCULUS 1D1D9 ; [*1173.0020.0002] # MUSICAL SYMBOL PORRECTUS 1D1DA ; [*1174.0020.0002] # MUSICAL SYMBOL PORRECTUS FLEXUS 1D1DB ; [*1175.0020.0002] # MUSICAL SYMBOL SCANDICUS FLEXUS 1D1DC ; [*1176.0020.0002] # MUSICAL SYMBOL TORCULUS RESUPINUS 1D1DD ; [*1177.0020.0002] # MUSICAL SYMBOL PES SUBPUNCTIS 1D1DE ; [*1178.0020.0002] # MUSICAL SYMBOL KIEVAN C CLEF 1D1DF ; [*1179.0020.0002] # MUSICAL SYMBOL KIEVAN END OF PIECE 1D1E0 ; [*117A.0020.0002] # MUSICAL SYMBOL KIEVAN FINAL NOTE 1D1E1 ; [*117B.0020.0002] # MUSICAL SYMBOL KIEVAN RECITATIVE MARK 1D1E2 ; [*117C.0020.0002] # MUSICAL SYMBOL KIEVAN WHOLE NOTE 1D1E3 ; [*117D.0020.0002] # MUSICAL SYMBOL KIEVAN HALF NOTE 1D1E4 ; [*117E.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN 1D1E5 ; [*117F.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP 1D1E6 ; [*1180.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN 1D1E7 ; [*1181.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP 1D1E8 ; [*1182.0020.0002] # MUSICAL SYMBOL KIEVAN FLAT SIGN 1D200 ; [*1183.0020.0002] # GREEK VOCAL NOTATION SYMBOL-1 1D201 ; [*1184.0020.0002] # GREEK VOCAL NOTATION SYMBOL-2 1D202 ; [*1185.0020.0002] # GREEK VOCAL NOTATION SYMBOL-3 1D203 ; [*1186.0020.0002] # GREEK VOCAL NOTATION SYMBOL-4 1D204 ; [*1187.0020.0002] # GREEK VOCAL NOTATION SYMBOL-5 1D205 ; [*1188.0020.0002] # GREEK VOCAL NOTATION SYMBOL-6 1D206 ; [*1189.0020.0002] # GREEK VOCAL NOTATION SYMBOL-7 1D207 ; [*118A.0020.0002] # GREEK VOCAL NOTATION SYMBOL-8 1D208 ; [*118B.0020.0002] # GREEK VOCAL NOTATION SYMBOL-9 1D209 ; [*118C.0020.0002] # GREEK VOCAL NOTATION SYMBOL-10 1D20A ; [*118D.0020.0002] # GREEK VOCAL NOTATION SYMBOL-11 1D20B ; [*118E.0020.0002] # GREEK VOCAL NOTATION SYMBOL-12 1D20C ; [*118F.0020.0002] # GREEK VOCAL NOTATION SYMBOL-13 1D20D ; [*1190.0020.0002] # GREEK VOCAL NOTATION SYMBOL-14 1D20E ; [*1191.0020.0002] # GREEK VOCAL NOTATION SYMBOL-15 1D20F ; [*1192.0020.0002] # GREEK VOCAL NOTATION SYMBOL-16 1D210 ; [*1193.0020.0002] # GREEK VOCAL NOTATION SYMBOL-17 1D211 ; [*1194.0020.0002] # GREEK VOCAL NOTATION SYMBOL-18 1D212 ; [*1195.0020.0002] # GREEK VOCAL NOTATION SYMBOL-19 1D213 ; [*1196.0020.0002] # GREEK VOCAL NOTATION SYMBOL-20 1D214 ; [*1197.0020.0002] # GREEK VOCAL NOTATION SYMBOL-21 1D215 ; [*1198.0020.0002] # GREEK VOCAL NOTATION SYMBOL-22 1D216 ; [*1199.0020.0002] # GREEK VOCAL NOTATION SYMBOL-23 1D217 ; [*119A.0020.0002] # GREEK VOCAL NOTATION SYMBOL-24 1D218 ; [*119B.0020.0002] # GREEK VOCAL NOTATION SYMBOL-50 1D219 ; [*119C.0020.0002] # GREEK VOCAL NOTATION SYMBOL-51 1D21A ; [*119D.0020.0002] # GREEK VOCAL NOTATION SYMBOL-52 1D21B ; [*119E.0020.0002] # GREEK VOCAL NOTATION SYMBOL-53 1D21C ; [*119F.0020.0002] # GREEK VOCAL NOTATION SYMBOL-54 1D21D ; [*11A0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-1 1D21E ; [*11A1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-2 1D21F ; [*11A2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-4 1D220 ; [*11A3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-5 1D221 ; [*11A4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-7 1D222 ; [*11A5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-8 1D223 ; [*11A6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-11 1D224 ; [*11A7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-12 1D225 ; [*11A8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-13 1D226 ; [*11A9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-14 1D227 ; [*11AA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-17 1D228 ; [*11AB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-18 1D229 ; [*11AC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-19 1D22A ; [*11AD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-23 1D22B ; [*11AE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-24 1D22C ; [*11AF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-25 1D22D ; [*11B0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-26 1D22E ; [*11B1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-27 1D22F ; [*11B2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-29 1D230 ; [*11B3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-30 1D231 ; [*11B4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-32 1D232 ; [*11B5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-36 1D233 ; [*11B6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-37 1D234 ; [*11B7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-38 1D235 ; [*11B8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-39 1D236 ; [*11B9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-40 1D237 ; [*11BA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-42 1D238 ; [*11BB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-43 1D239 ; [*11BC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-45 1D23A ; [*11BD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-47 1D23B ; [*11BE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-48 1D23C ; [*11BF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-49 1D23D ; [*11C0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-50 1D23E ; [*11C1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-51 1D23F ; [*11C2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-52 1D240 ; [*11C3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-53 1D241 ; [*11C4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D242 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TRISEME 1D243 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TETRASEME 1D244 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL PENTASEME 1D245 ; [*11C5.0020.0002] # GREEK MUSICAL LEIMMA 1D300 ; [*0EEA.0020.0002] # MONOGRAM FOR EARTH 1D301 ; [*0EEB.0020.0002] # DIGRAM FOR HEAVENLY EARTH 1D302 ; [*0EEC.0020.0002] # DIGRAM FOR HUMAN EARTH 1D303 ; [*0EED.0020.0002] # DIGRAM FOR EARTHLY HEAVEN 1D304 ; [*0EEE.0020.0002] # DIGRAM FOR EARTHLY HUMAN 1D305 ; [*0EEF.0020.0002] # DIGRAM FOR EARTH 1D306 ; [*0EF0.0020.0002] # TETRAGRAM FOR CENTRE 1D307 ; [*0EF1.0020.0002] # TETRAGRAM FOR FULL CIRCLE 1D308 ; [*0EF2.0020.0002] # TETRAGRAM FOR MIRED 1D309 ; [*0EF3.0020.0002] # TETRAGRAM FOR BARRIER 1D30A ; [*0EF4.0020.0002] # TETRAGRAM FOR KEEPING SMALL 1D30B ; [*0EF5.0020.0002] # TETRAGRAM FOR CONTRARIETY 1D30C ; [*0EF6.0020.0002] # TETRAGRAM FOR ASCENT 1D30D ; [*0EF7.0020.0002] # TETRAGRAM FOR OPPOSITION 1D30E ; [*0EF8.0020.0002] # TETRAGRAM FOR BRANCHING OUT 1D30F ; [*0EF9.0020.0002] # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION 1D310 ; [*0EFA.0020.0002] # TETRAGRAM FOR DIVERGENCE 1D311 ; [*0EFB.0020.0002] # TETRAGRAM FOR YOUTHFULNESS 1D312 ; [*0EFC.0020.0002] # TETRAGRAM FOR INCREASE 1D313 ; [*0EFD.0020.0002] # TETRAGRAM FOR PENETRATION 1D314 ; [*0EFE.0020.0002] # TETRAGRAM FOR REACH 1D315 ; [*0EFF.0020.0002] # TETRAGRAM FOR CONTACT 1D316 ; [*0F00.0020.0002] # TETRAGRAM FOR HOLDING BACK 1D317 ; [*0F01.0020.0002] # TETRAGRAM FOR WAITING 1D318 ; [*0F02.0020.0002] # TETRAGRAM FOR FOLLOWING 1D319 ; [*0F03.0020.0002] # TETRAGRAM FOR ADVANCE 1D31A ; [*0F04.0020.0002] # TETRAGRAM FOR RELEASE 1D31B ; [*0F05.0020.0002] # TETRAGRAM FOR RESISTANCE 1D31C ; [*0F06.0020.0002] # TETRAGRAM FOR EASE 1D31D ; [*0F07.0020.0002] # TETRAGRAM FOR JOY 1D31E ; [*0F08.0020.0002] # TETRAGRAM FOR CONTENTION 1D31F ; [*0F09.0020.0002] # TETRAGRAM FOR ENDEAVOUR 1D320 ; [*0F0A.0020.0002] # TETRAGRAM FOR DUTIES 1D321 ; [*0F0B.0020.0002] # TETRAGRAM FOR CHANGE 1D322 ; [*0F0C.0020.0002] # TETRAGRAM FOR DECISIVENESS 1D323 ; [*0F0D.0020.0002] # TETRAGRAM FOR BOLD RESOLUTION 1D324 ; [*0F0E.0020.0002] # TETRAGRAM FOR PACKING 1D325 ; [*0F0F.0020.0002] # TETRAGRAM FOR LEGION 1D326 ; [*0F10.0020.0002] # TETRAGRAM FOR CLOSENESS 1D327 ; [*0F11.0020.0002] # TETRAGRAM FOR KINSHIP 1D328 ; [*0F12.0020.0002] # TETRAGRAM FOR GATHERING 1D329 ; [*0F13.0020.0002] # TETRAGRAM FOR STRENGTH 1D32A ; [*0F14.0020.0002] # TETRAGRAM FOR PURITY 1D32B ; [*0F15.0020.0002] # TETRAGRAM FOR FULLNESS 1D32C ; [*0F16.0020.0002] # TETRAGRAM FOR RESIDENCE 1D32D ; [*0F17.0020.0002] # TETRAGRAM FOR LAW OR MODEL 1D32E ; [*0F18.0020.0002] # TETRAGRAM FOR RESPONSE 1D32F ; [*0F19.0020.0002] # TETRAGRAM FOR GOING TO MEET 1D330 ; [*0F1A.0020.0002] # TETRAGRAM FOR ENCOUNTERS 1D331 ; [*0F1B.0020.0002] # TETRAGRAM FOR STOVE 1D332 ; [*0F1C.0020.0002] # TETRAGRAM FOR GREATNESS 1D333 ; [*0F1D.0020.0002] # TETRAGRAM FOR ENLARGEMENT 1D334 ; [*0F1E.0020.0002] # TETRAGRAM FOR PATTERN 1D335 ; [*0F1F.0020.0002] # TETRAGRAM FOR RITUAL 1D336 ; [*0F20.0020.0002] # TETRAGRAM FOR FLIGHT 1D337 ; [*0F21.0020.0002] # TETRAGRAM FOR VASTNESS OR WASTING 1D338 ; [*0F22.0020.0002] # TETRAGRAM FOR CONSTANCY 1D339 ; [*0F23.0020.0002] # TETRAGRAM FOR MEASURE 1D33A ; [*0F24.0020.0002] # TETRAGRAM FOR ETERNITY 1D33B ; [*0F25.0020.0002] # TETRAGRAM FOR UNITY 1D33C ; [*0F26.0020.0002] # TETRAGRAM FOR DIMINISHMENT 1D33D ; [*0F27.0020.0002] # TETRAGRAM FOR CLOSED MOUTH 1D33E ; [*0F28.0020.0002] # TETRAGRAM FOR GUARDEDNESS 1D33F ; [*0F29.0020.0002] # TETRAGRAM FOR GATHERING IN 1D340 ; [*0F2A.0020.0002] # TETRAGRAM FOR MASSING 1D341 ; [*0F2B.0020.0002] # TETRAGRAM FOR ACCUMULATION 1D342 ; [*0F2C.0020.0002] # TETRAGRAM FOR EMBELLISHMENT 1D343 ; [*0F2D.0020.0002] # TETRAGRAM FOR DOUBT 1D344 ; [*0F2E.0020.0002] # TETRAGRAM FOR WATCH 1D345 ; [*0F2F.0020.0002] # TETRAGRAM FOR SINKING 1D346 ; [*0F30.0020.0002] # TETRAGRAM FOR INNER 1D347 ; [*0F31.0020.0002] # TETRAGRAM FOR DEPARTURE 1D348 ; [*0F32.0020.0002] # TETRAGRAM FOR DARKENING 1D349 ; [*0F33.0020.0002] # TETRAGRAM FOR DIMMING 1D34A ; [*0F34.0020.0002] # TETRAGRAM FOR EXHAUSTION 1D34B ; [*0F35.0020.0002] # TETRAGRAM FOR SEVERANCE 1D34C ; [*0F36.0020.0002] # TETRAGRAM FOR STOPPAGE 1D34D ; [*0F37.0020.0002] # TETRAGRAM FOR HARDNESS 1D34E ; [*0F38.0020.0002] # TETRAGRAM FOR COMPLETION 1D34F ; [*0F39.0020.0002] # TETRAGRAM FOR CLOSURE 1D350 ; [*0F3A.0020.0002] # TETRAGRAM FOR FAILURE 1D351 ; [*0F3B.0020.0002] # TETRAGRAM FOR AGGRAVATION 1D352 ; [*0F3C.0020.0002] # TETRAGRAM FOR COMPLIANCE 1D353 ; [*0F3D.0020.0002] # TETRAGRAM FOR ON THE VERGE 1D354 ; [*0F3E.0020.0002] # TETRAGRAM FOR DIFFICULTIES 1D355 ; [*0F3F.0020.0002] # TETRAGRAM FOR LABOURING 1D356 ; [*0F40.0020.0002] # TETRAGRAM FOR FOSTERING 1D369 ; [*1BEF.0020.0002] # COUNTING ROD TENS DIGIT ONE 1D36A ; [*1BF0.0020.0002] # COUNTING ROD TENS DIGIT TWO 1D36B ; [*1BF1.0020.0002] # COUNTING ROD TENS DIGIT THREE 1D36C ; [*1BF2.0020.0002] # COUNTING ROD TENS DIGIT FOUR 1D36D ; [*1BF3.0020.0002] # COUNTING ROD TENS DIGIT FIVE 1D36E ; [*1BF4.0020.0002] # COUNTING ROD TENS DIGIT SIX 1D36F ; [*1BF5.0020.0002] # COUNTING ROD TENS DIGIT SEVEN 1D370 ; [*1BF6.0020.0002] # COUNTING ROD TENS DIGIT EIGHT 1D371 ; [*1BF7.0020.0002] # COUNTING ROD TENS DIGIT NINE 1D6C1 ; [*060C.0020.0005] # MATHEMATICAL BOLD NABLA 1D6DB ; [*0608.0020.0005] # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL 1D6FB ; [*060C.0020.0005] # MATHEMATICAL ITALIC NABLA 1D715 ; [*0608.0020.0005] # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL 1D735 ; [*060C.0020.0005] # MATHEMATICAL BOLD ITALIC NABLA 1D74F ; [*0608.0020.0005] # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL 1D76F ; [*060C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD NABLA 1D789 ; [*0608.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL 1D7A9 ; [*060C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA 1D7C3 ; [*0608.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL 1D800 ; [*183F.0020.0002] # SIGNWRITING HAND-FIST INDEX 1D801 ; [*1840.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX 1D802 ; [*1841.0020.0002] # SIGNWRITING HAND-CUP INDEX 1D803 ; [*1842.0020.0002] # SIGNWRITING HAND-OVAL INDEX 1D804 ; [*1843.0020.0002] # SIGNWRITING HAND-HINGE INDEX 1D805 ; [*1844.0020.0002] # SIGNWRITING HAND-ANGLE INDEX 1D806 ; [*1845.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT 1D807 ; [*1846.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX BENT 1D808 ; [*1847.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT 1D809 ; [*1848.0020.0002] # SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE 1D80A ; [*1849.0020.0002] # SIGNWRITING HAND-FIST INDEX CUPPED 1D80B ; [*184A.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED 1D80C ; [*184B.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED LOW 1D80D ; [*184C.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX HINGE 1D80E ; [*184D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE 1D80F ; [*184E.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE 1D810 ; [*184F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT 1D811 ; [*1850.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES 1D812 ; [*1851.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED 1D813 ; [*1852.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED 1D814 ; [*1853.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP 1D815 ; [*1854.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED 1D816 ; [*1855.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT 1D817 ; [*1856.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT 1D818 ; [*1857.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED 1D819 ; [*1858.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED 1D81A ; [*1859.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED 1D81B ; [*185A.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED 1D81C ; [*185B.0020.0002] # SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX 1D81D ; [*185C.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE 1D81E ; [*185D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB 1D81F ; [*185E.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB 1D820 ; [*185F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT 1D821 ; [*1860.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT 1D822 ; [*1861.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT 1D823 ; [*1862.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE 1D824 ; [*1863.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE 1D825 ; [*1864.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED 1D826 ; [*1865.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE 1D827 ; [*1866.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD 1D828 ; [*1867.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED 1D829 ; [*1868.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED 1D82A ; [*1869.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED 1D82B ; [*186A.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED 1D82C ; [*186B.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT 1D82D ; [*186C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE 1D82E ; [*186D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED 1D82F ; [*186E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT 1D830 ; [*186F.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP 1D831 ; [*1870.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP 1D832 ; [*1871.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE 1D833 ; [*1872.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE 1D834 ; [*1873.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD 1D835 ; [*1874.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD 1D836 ; [*1875.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP 1D837 ; [*1876.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP 1D838 ; [*1877.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP 1D839 ; [*1878.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED 1D83A ; [*1879.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP 1D83B ; [*187A.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP 1D83C ; [*187B.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP 1D83D ; [*187C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED 1D83E ; [*187D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT 1D83F ; [*187E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED 1D840 ; [*187F.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP 1D841 ; [*1880.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED 1D842 ; [*1881.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP 1D843 ; [*1882.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED 1D844 ; [*1883.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS 1D845 ; [*1884.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS BENT 1D846 ; [*1885.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS HINGED 1D847 ; [*1886.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED 1D848 ; [*1887.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT 1D849 ; [*1888.0020.0002] # SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED 1D84A ; [*1889.0020.0002] # SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT 1D84B ; [*188A.0020.0002] # SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED 1D84C ; [*188B.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD 1D84D ; [*188C.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD 1D84E ; [*188D.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT 1D84F ; [*188E.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT 1D850 ; [*188F.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT 1D851 ; [*1890.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT 1D852 ; [*1891.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD 1D853 ; [*1892.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD 1D854 ; [*1893.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN 1D855 ; [*1894.0020.0002] # SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN 1D856 ; [*1895.0020.0002] # SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD 1D857 ; [*1896.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED 1D858 ; [*1897.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE 1D859 ; [*1898.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB 1D85A ; [*1899.0020.0002] # SIGNWRITING HAND-FLAT 1D85B ; [*189A.0020.0002] # SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS 1D85C ; [*189B.0020.0002] # SIGNWRITING HAND-FLAT HEEL 1D85D ; [*189C.0020.0002] # SIGNWRITING HAND-FLAT THUMB SIDE 1D85E ; [*189D.0020.0002] # SIGNWRITING HAND-FLAT HEEL THUMB SIDE 1D85F ; [*189E.0020.0002] # SIGNWRITING HAND-FLAT THUMB BENT 1D860 ; [*189F.0020.0002] # SIGNWRITING HAND-FLAT THUMB FORWARD 1D861 ; [*18A0.0020.0002] # SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE 1D862 ; [*18A1.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE 1D863 ; [*18A2.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE 1D864 ; [*18A3.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT 1D865 ; [*18A4.0020.0002] # SIGNWRITING HAND-FLAT SPLIT LITTLE 1D866 ; [*18A5.0020.0002] # SIGNWRITING HAND-CLAW 1D867 ; [*18A6.0020.0002] # SIGNWRITING HAND-CLAW THUMB SIDE 1D868 ; [*18A7.0020.0002] # SIGNWRITING HAND-CLAW NO THUMB 1D869 ; [*18A8.0020.0002] # SIGNWRITING HAND-CLAW THUMB FORWARD 1D86A ; [*18A9.0020.0002] # SIGNWRITING HAND-HOOK CURLICUE 1D86B ; [*18AA.0020.0002] # SIGNWRITING HAND-HOOK 1D86C ; [*18AB.0020.0002] # SIGNWRITING HAND-CUP OPEN 1D86D ; [*18AC.0020.0002] # SIGNWRITING HAND-CUP 1D86E ; [*18AD.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB SIDE 1D86F ; [*18AE.0020.0002] # SIGNWRITING HAND-CUP THUMB SIDE 1D870 ; [*18AF.0020.0002] # SIGNWRITING HAND-CUP OPEN NO THUMB 1D871 ; [*18B0.0020.0002] # SIGNWRITING HAND-CUP NO THUMB 1D872 ; [*18B1.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB FORWARD 1D873 ; [*18B2.0020.0002] # SIGNWRITING HAND-CUP THUMB FORWARD 1D874 ; [*18B3.0020.0002] # SIGNWRITING HAND-CURLICUE OPEN 1D875 ; [*18B4.0020.0002] # SIGNWRITING HAND-CURLICUE 1D876 ; [*18B5.0020.0002] # SIGNWRITING HAND-CIRCLE 1D877 ; [*18B6.0020.0002] # SIGNWRITING HAND-OVAL 1D878 ; [*18B7.0020.0002] # SIGNWRITING HAND-OVAL THUMB SIDE 1D879 ; [*18B8.0020.0002] # SIGNWRITING HAND-OVAL NO THUMB 1D87A ; [*18B9.0020.0002] # SIGNWRITING HAND-OVAL THUMB FORWARD 1D87B ; [*18BA.0020.0002] # SIGNWRITING HAND-HINGE OPEN 1D87C ; [*18BB.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB FORWARD 1D87D ; [*18BC.0020.0002] # SIGNWRITING HAND-HINGE 1D87E ; [*18BD.0020.0002] # SIGNWRITING HAND-HINGE SMALL 1D87F ; [*18BE.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB SIDE 1D880 ; [*18BF.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE 1D881 ; [*18C0.0020.0002] # SIGNWRITING HAND-HINGE OPEN NO THUMB 1D882 ; [*18C1.0020.0002] # SIGNWRITING HAND-HINGE NO THUMB 1D883 ; [*18C2.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX 1D884 ; [*18C3.0020.0002] # SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING 1D885 ; [*18C4.0020.0002] # SIGNWRITING HAND-ANGLE 1D886 ; [*18C5.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING 1D887 ; [*18C6.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING 1D888 ; [*18C7.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING 1D889 ; [*18C8.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE RING 1D88A ; [*18C9.0020.0002] # SIGNWRITING HAND-HINGE LITTLE 1D88B ; [*18CA.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT 1D88C ; [*18CB.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED 1D88D ; [*18CC.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED 1D88E ; [*18CD.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN 1D88F ; [*18CE.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT 1D890 ; [*18CF.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED 1D891 ; [*18D0.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED 1D892 ; [*18D1.0020.0002] # SIGNWRITING HAND-FIST LITTLE UP 1D893 ; [*18D2.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP 1D894 ; [*18D3.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE UP 1D895 ; [*18D4.0020.0002] # SIGNWRITING HAND-OVAL LITTLE UP 1D896 ; [*18D5.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE UP 1D897 ; [*18D6.0020.0002] # SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE 1D898 ; [*18D7.0020.0002] # SIGNWRITING HAND-FIST LITTLE BENT 1D899 ; [*18D8.0020.0002] # SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB 1D89A ; [*18D9.0020.0002] # SIGNWRITING HAND-FIST LITTLE THUMB 1D89B ; [*18DA.0020.0002] # SIGNWRITING HAND-HINGE LITTLE THUMB 1D89C ; [*18DB.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX THUMB 1D89D ; [*18DC.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX THUMB 1D89E ; [*18DD.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT 1D89F ; [*18DE.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB 1D8A0 ; [*18DF.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX 1D8A1 ; [*18E0.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE INDEX 1D8A2 ; [*18E1.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX 1D8A3 ; [*18E2.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX 1D8A4 ; [*18E3.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE 1D8A5 ; [*18E4.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE 1D8A6 ; [*18E5.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE 1D8A7 ; [*18E6.0020.0002] # SIGNWRITING HAND-HINGE RING 1D8A8 ; [*18E7.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE 1D8A9 ; [*18E8.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE 1D8AA ; [*18E9.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE 1D8AB ; [*18EA.0020.0002] # SIGNWRITING HAND-FIST RING DOWN 1D8AC ; [*18EB.0020.0002] # SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE 1D8AD ; [*18EC.0020.0002] # SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS 1D8AE ; [*18ED.0020.0002] # SIGNWRITING HAND-FIST RING UP 1D8AF ; [*18EE.0020.0002] # SIGNWRITING HAND-FIST RING RAISED KNUCKLE 1D8B0 ; [*18EF.0020.0002] # SIGNWRITING HAND-FIST RING LITTLE 1D8B1 ; [*18F0.0020.0002] # SIGNWRITING HAND-CIRCLE RING LITTLE 1D8B2 ; [*18F1.0020.0002] # SIGNWRITING HAND-OVAL RING LITTLE 1D8B3 ; [*18F2.0020.0002] # SIGNWRITING HAND-ANGLE RING LITTLE 1D8B4 ; [*18F3.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE 1D8B5 ; [*18F4.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE CONJOINED 1D8B6 ; [*18F5.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES 1D8B7 ; [*18F6.0020.0002] # SIGNWRITING HAND-FIST RING INDEX 1D8B8 ; [*18F7.0020.0002] # SIGNWRITING HAND-FIST RING THUMB 1D8B9 ; [*18F8.0020.0002] # SIGNWRITING HAND-HOOK RING THUMB 1D8BA ; [*18F9.0020.0002] # SIGNWRITING HAND-FIST INDEX RING LITTLE 1D8BB ; [*18FA.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX RING LITTLE 1D8BC ; [*18FB.0020.0002] # SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON 1D8BD ; [*18FC.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT 1D8BE ; [*18FD.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE IN 1D8BF ; [*18FE.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER 1D8C0 ; [*18FF.0020.0002] # SIGNWRITING HAND-CUP INDEX RING LITTLE 1D8C1 ; [*1900.0020.0002] # SIGNWRITING HAND-HINGE INDEX RING LITTLE 1D8C2 ; [*1901.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT 1D8C3 ; [*1902.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE 1D8C4 ; [*1903.0020.0002] # SIGNWRITING HAND-FIST MIDDLE DOWN 1D8C5 ; [*1904.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE 1D8C6 ; [*1905.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP 1D8C7 ; [*1906.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE UP 1D8C8 ; [*1907.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE 1D8C9 ; [*1908.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE 1D8CA ; [*1909.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE THUMB 1D8CB ; [*190A.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE 1D8CC ; [*190B.0020.0002] # SIGNWRITING HAND-FIST MIDDLE LITTLE 1D8CD ; [*190C.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RING LITTLE 1D8CE ; [*190D.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE 1D8CF ; [*190E.0020.0002] # SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON 1D8D0 ; [*190F.0020.0002] # SIGNWRITING HAND-CUP MIDDLE RING LITTLE 1D8D1 ; [*1910.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE RING LITTLE 1D8D2 ; [*1911.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT 1D8D3 ; [*1912.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN 1D8D4 ; [*1913.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE 1D8D5 ; [*1914.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT 1D8D6 ; [*1915.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED 1D8D7 ; [*1916.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE 1D8D8 ; [*1917.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT 1D8D9 ; [*1918.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN 1D8DA ; [*1919.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED 1D8DB ; [*191A.0020.0002] # SIGNWRITING HAND-HINGE INDEX HINGED 1D8DC ; [*191B.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE 1D8DD ; [*191C.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SIDE 1D8DE ; [*191D.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL 1D8DF ; [*191E.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED 1D8E0 ; [*191F.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT 1D8E1 ; [*1920.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT 1D8E2 ; [*1921.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT 1D8E3 ; [*1922.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE 1D8E4 ; [*1923.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT 1D8E5 ; [*1924.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT 1D8E6 ; [*1925.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOK 1D8E7 ; [*1926.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURLICUE 1D8E8 ; [*1927.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE 1D8E9 ; [*1928.0020.0002] # SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE 1D8EA ; [*1929.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER 1D8EB ; [*192A.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLE 1D8EC ; [*192B.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB 1D8ED ; [*192C.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB OPEN 1D8EE ; [*192D.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB OPEN 1D8EF ; [*192E.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB LARGE 1D8F0 ; [*192F.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB 1D8F1 ; [*1930.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SMALL 1D8F2 ; [*1931.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB OUT 1D8F3 ; [*1932.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB IN 1D8F4 ; [*1933.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB 1D8F5 ; [*1934.0020.0002] # SIGNWRITING HAND-FIST THUMB 1D8F6 ; [*1935.0020.0002] # SIGNWRITING HAND-FIST THUMB HEEL 1D8F7 ; [*1936.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL 1D8F8 ; [*1937.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE CONJOINED 1D8F9 ; [*1938.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE BENT 1D8FA ; [*1939.0020.0002] # SIGNWRITING HAND-FIST THUMB FORWARD 1D8FB ; [*193A.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE 1D8FC ; [*193B.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING 1D8FD ; [*193C.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE 1D8FE ; [*193D.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS 1D8FF ; [*193E.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS 1D900 ; [*193F.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS 1D901 ; [*1940.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS 1D902 ; [*1941.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES 1D903 ; [*1942.0020.0002] # SIGNWRITING HAND-FIST 1D904 ; [*1943.0020.0002] # SIGNWRITING HAND-FIST HEEL 1D905 ; [*1944.0020.0002] # SIGNWRITING TOUCH SINGLE 1D906 ; [*1945.0020.0002] # SIGNWRITING TOUCH MULTIPLE 1D907 ; [*1946.0020.0002] # SIGNWRITING TOUCH BETWEEN 1D908 ; [*1947.0020.0002] # SIGNWRITING GRASP SINGLE 1D909 ; [*1948.0020.0002] # SIGNWRITING GRASP MULTIPLE 1D90A ; [*1949.0020.0002] # SIGNWRITING GRASP BETWEEN 1D90B ; [*194A.0020.0002] # SIGNWRITING STRIKE SINGLE 1D90C ; [*194B.0020.0002] # SIGNWRITING STRIKE MULTIPLE 1D90D ; [*194C.0020.0002] # SIGNWRITING STRIKE BETWEEN 1D90E ; [*194D.0020.0002] # SIGNWRITING BRUSH SINGLE 1D90F ; [*194E.0020.0002] # SIGNWRITING BRUSH MULTIPLE 1D910 ; [*194F.0020.0002] # SIGNWRITING BRUSH BETWEEN 1D911 ; [*1950.0020.0002] # SIGNWRITING RUB SINGLE 1D912 ; [*1951.0020.0002] # SIGNWRITING RUB MULTIPLE 1D913 ; [*1952.0020.0002] # SIGNWRITING RUB BETWEEN 1D914 ; [*1953.0020.0002] # SIGNWRITING SURFACE SYMBOLS 1D915 ; [*1954.0020.0002] # SIGNWRITING SURFACE BETWEEN 1D916 ; [*1955.0020.0002] # SIGNWRITING SQUEEZE LARGE SINGLE 1D917 ; [*1956.0020.0002] # SIGNWRITING SQUEEZE SMALL SINGLE 1D918 ; [*1957.0020.0002] # SIGNWRITING SQUEEZE LARGE MULTIPLE 1D919 ; [*1958.0020.0002] # SIGNWRITING SQUEEZE SMALL MULTIPLE 1D91A ; [*1959.0020.0002] # SIGNWRITING SQUEEZE SEQUENTIAL 1D91B ; [*195A.0020.0002] # SIGNWRITING FLICK LARGE SINGLE 1D91C ; [*195B.0020.0002] # SIGNWRITING FLICK SMALL SINGLE 1D91D ; [*195C.0020.0002] # SIGNWRITING FLICK LARGE MULTIPLE 1D91E ; [*195D.0020.0002] # SIGNWRITING FLICK SMALL MULTIPLE 1D91F ; [*195E.0020.0002] # SIGNWRITING FLICK SEQUENTIAL 1D920 ; [*195F.0020.0002] # SIGNWRITING SQUEEZE FLICK ALTERNATING 1D921 ; [*1960.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE 1D922 ; [*1961.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL 1D923 ; [*1962.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL 1D924 ; [*1963.0020.0002] # SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL 1D925 ; [*1964.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE 1D926 ; [*1965.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL 1D927 ; [*1966.0020.0002] # SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS 1D928 ; [*1967.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT 1D929 ; [*1968.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT 1D92A ; [*1969.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL 1D92B ; [*196A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM 1D92C ; [*196B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE 1D92D ; [*196C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST 1D92E ; [*196D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX 1D92F ; [*196E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT 1D930 ; [*196F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX 1D931 ; [*1970.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING 1D932 ; [*1971.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX 1D933 ; [*1972.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CROSS 1D934 ; [*1973.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT 1D935 ; [*1974.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX 1D936 ; [*1975.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING 1D937 ; [*1976.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX 1D938 ; [*1977.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL 1D939 ; [*1978.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM 1D93A ; [*1979.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE 1D93B ; [*197A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL 1D93C ; [*197B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM 1D93D ; [*197C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE 1D93E ; [*197D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION 1D93F ; [*197E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL 1D940 ; [*197F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM 1D941 ; [*1980.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE 1D942 ; [*1981.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL 1D943 ; [*1982.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM 1D944 ; [*1983.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE 1D945 ; [*1984.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL 1D946 ; [*1985.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM 1D947 ; [*1986.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE 1D948 ; [*1987.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL 1D949 ; [*1988.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM 1D94A ; [*1989.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE 1D94B ; [*198A.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE 1D94C ; [*198B.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE 1D94D ; [*198C.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING 1D94E ; [*198D.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE 1D94F ; [*198E.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE 1D950 ; [*198F.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING 1D951 ; [*1990.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE SHAKING 1D952 ; [*1991.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE 1D953 ; [*1992.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE 1D954 ; [*1993.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE 1D955 ; [*1994.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL 1D956 ; [*1995.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM 1D957 ; [*1996.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE 1D958 ; [*1997.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST 1D959 ; [*1998.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL 1D95A ; [*1999.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM 1D95B ; [*199A.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE 1D95C ; [*199B.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST 1D95D ; [*199C.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL 1D95E ; [*199D.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM 1D95F ; [*199E.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE 1D960 ; [*199F.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST 1D961 ; [*19A0.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL 1D962 ; [*19A1.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM 1D963 ; [*19A2.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE 1D964 ; [*19A3.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST 1D965 ; [*19A4.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL 1D966 ; [*19A5.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM 1D967 ; [*19A6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE 1D968 ; [*19A7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST 1D969 ; [*19A8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX 1D96A ; [*19A9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT 1D96B ; [*19AA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX 1D96C ; [*19AB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING 1D96D ; [*19AC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX 1D96E ; [*19AD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CROSS 1D96F ; [*19AE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT 1D970 ; [*19AF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX 1D971 ; [*19B0.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT 1D972 ; [*19B1.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX 1D973 ; [*19B2.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BEND 1D974 ; [*19B3.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL 1D975 ; [*19B4.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM 1D976 ; [*19B5.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE 1D977 ; [*19B6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CHECK 1D978 ; [*19B7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL 1D979 ; [*19B8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM 1D97A ; [*19B9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE 1D97B ; [*19BA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL 1D97C ; [*19BB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM 1D97D ; [*19BC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE 1D97E ; [*19BD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL 1D97F ; [*19BE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM 1D980 ; [*19BF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE 1D981 ; [*19C0.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE 1D982 ; [*19C1.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE 1D983 ; [*19C2.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING 1D984 ; [*19C3.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE 1D985 ; [*19C4.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE 1D986 ; [*19C5.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING 1D987 ; [*19C6.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE SHAKING 1D988 ; [*19C7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL 1D989 ; [*19C8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM 1D98A ; [*19C9.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE 1D98B ; [*19CA.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST 1D98C ; [*19CB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL 1D98D ; [*19CC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM 1D98E ; [*19CD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE 1D98F ; [*19CE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST 1D990 ; [*19CF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL 1D991 ; [*19D0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM 1D992 ; [*19D1.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL 1D993 ; [*19D2.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM 1D994 ; [*19D3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE 1D995 ; [*19D4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL 1D996 ; [*19D5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM 1D997 ; [*19D6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE 1D998 ; [*19D7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE 1D999 ; [*19D8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL 1D99A ; [*19D9.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM 1D99B ; [*19DA.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE 1D99C ; [*19DB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL 1D99D ; [*19DC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM 1D99E ; [*19DD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE 1D99F ; [*19DE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT 1D9A0 ; [*19DF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL 1D9A1 ; [*19E0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM 1D9A2 ; [*19E1.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE 1D9A3 ; [*19E2.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE 1D9A4 ; [*19E3.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATE 1D9A5 ; [*19E4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SHAKING 1D9A6 ; [*19E5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL 1D9A7 ; [*19E6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL 1D9A8 ; [*19E7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL 1D9A9 ; [*19E8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL 1D9AA ; [*19E9.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL 1D9AB ; [*19EA.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL 1D9AC ; [*19EB.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL 1D9AD ; [*19EC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST 1D9AE ; [*19ED.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST 1D9AF ; [*19EE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST 1D9B0 ; [*19EF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST 1D9B1 ; [*19F0.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST 1D9B2 ; [*19F1.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST 1D9B3 ; [*19F2.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST 1D9B4 ; [*19F3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL 1D9B5 ; [*19F4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM 1D9B6 ; [*19F5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE 1D9B7 ; [*19F6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL 1D9B8 ; [*19F7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE 1D9B9 ; [*19F8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE 1D9BA ; [*19F9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE 1D9BB ; [*19FA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE 1D9BC ; [*19FB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE 1D9BD ; [*19FC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE 1D9BE ; [*19FD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE 1D9BF ; [*19FE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE 1D9C0 ; [*19FF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE 1D9C1 ; [*1A00.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL 1D9C2 ; [*1A01.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE 1D9C3 ; [*1A02.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING 1D9C4 ; [*1A03.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING 1D9C5 ; [*1A04.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING 1D9C6 ; [*1A05.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL 1D9C7 ; [*1A06.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE 1D9C8 ; [*1A07.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE 1D9C9 ; [*1A08.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE 1D9CA ; [*1A09.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE 1D9CB ; [*1A0A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE 1D9CC ; [*1A0B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE 1D9CD ; [*1A0C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE 1D9CE ; [*1A0D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE 1D9CF ; [*1A0E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE 1D9D0 ; [*1A0F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL 1D9D1 ; [*1A10.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE 1D9D2 ; [*1A11.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR 1D9D3 ; [*1A12.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR 1D9D4 ; [*1A13.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR 1D9D5 ; [*1A14.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL 1D9D6 ; [*1A15.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM 1D9D7 ; [*1A16.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE 1D9D8 ; [*1A17.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST 1D9D9 ; [*1A18.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED 1D9DA ; [*1A19.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL 1D9DB ; [*1A1A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL 1D9DC ; [*1A1B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE 1D9DD ; [*1A1C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL 1D9DE ; [*1A1D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE 1D9DF ; [*1A1E.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE 1D9E0 ; [*1A1F.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE 1D9E1 ; [*1A20.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING 1D9E2 ; [*1A21.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL 1D9E3 ; [*1A22.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE 1D9E4 ; [*1A23.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE 1D9E5 ; [*1A24.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE 1D9E6 ; [*1A25.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE 1D9E7 ; [*1A26.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE 1D9E8 ; [*1A27.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE 1D9E9 ; [*1A28.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE 1D9EA ; [*1A29.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE 1D9EB ; [*1A2A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE 1D9EC ; [*1A2B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE 1D9ED ; [*1A2C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE 1D9EE ; [*1A2D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE 1D9EF ; [*1A2E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE 1D9F0 ; [*1A2F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE 1D9F1 ; [*1A30.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE 1D9F2 ; [*1A31.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE 1D9F3 ; [*1A32.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE 1D9F4 ; [*1A33.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE 1D9F5 ; [*1A34.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD SMALL 1D9F6 ; [*1A35.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD LARGE 1D9F7 ; [*1A36.0020.0002] # SIGNWRITING DYNAMIC FAST 1D9F8 ; [*1A37.0020.0002] # SIGNWRITING DYNAMIC SLOW 1D9F9 ; [*1A38.0020.0002] # SIGNWRITING DYNAMIC TENSE 1D9FA ; [*1A39.0020.0002] # SIGNWRITING DYNAMIC RELAXED 1D9FB ; [*1A3A.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS 1D9FC ; [*1A3B.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING 1D9FD ; [*1A3C.0020.0002] # SIGNWRITING DYNAMIC EVERY OTHER TIME 1D9FE ; [*1A3D.0020.0002] # SIGNWRITING DYNAMIC GRADUAL 1D9FF ; [*1A3E.0020.0002] # SIGNWRITING HEAD 1DA00 ; [.0000.0000.0000] # SIGNWRITING HEAD RIM 1DA01 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT 1DA02 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT 1DA03 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT 1DA04 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE 1DA05 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE 1DA06 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT CIRCLE 1DA07 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING 1DA08 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN 1DA09 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING 1DA0A ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT UP 1DA0B ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT NEUTRAL 1DA0C ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT DOWN 1DA0D ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN 1DA0E ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL 1DA0F ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS UP NEUTRAL 1DA10 ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS NEUTRAL UP 1DA11 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD NEUTRAL 1DA12 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD CONTACT 1DA13 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD WRINKLED 1DA14 ; [.0000.0000.0000] # SIGNWRITING EYES OPEN 1DA15 ; [.0000.0000.0000] # SIGNWRITING EYES SQUEEZED 1DA16 ; [.0000.0000.0000] # SIGNWRITING EYES CLOSED 1DA17 ; [.0000.0000.0000] # SIGNWRITING EYE BLINK SINGLE 1DA18 ; [.0000.0000.0000] # SIGNWRITING EYE BLINK MULTIPLE 1DA19 ; [.0000.0000.0000] # SIGNWRITING EYES HALF OPEN 1DA1A ; [.0000.0000.0000] # SIGNWRITING EYES WIDE OPEN 1DA1B ; [.0000.0000.0000] # SIGNWRITING EYES HALF CLOSED 1DA1C ; [.0000.0000.0000] # SIGNWRITING EYES WIDENING MOVEMENT 1DA1D ; [.0000.0000.0000] # SIGNWRITING EYE WINK 1DA1E ; [.0000.0000.0000] # SIGNWRITING EYELASHES UP 1DA1F ; [.0000.0000.0000] # SIGNWRITING EYELASHES DOWN 1DA20 ; [.0000.0000.0000] # SIGNWRITING EYELASHES FLUTTERING 1DA21 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT 1DA22 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE 1DA23 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING 1DA24 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT 1DA25 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE 1DA26 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING 1DA27 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE CURVED 1DA28 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE CURVED 1DA29 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE CIRCLING 1DA2A ; [.0000.0000.0000] # SIGNWRITING CHEEKS PUFFED 1DA2B ; [.0000.0000.0000] # SIGNWRITING CHEEKS NEUTRAL 1DA2C ; [.0000.0000.0000] # SIGNWRITING CHEEKS SUCKED 1DA2D ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS HIGH 1DA2E ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS MIDDLE 1DA2F ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS LOW 1DA30 ; [.0000.0000.0000] # SIGNWRITING EARS 1DA31 ; [.0000.0000.0000] # SIGNWRITING NOSE NEUTRAL 1DA32 ; [.0000.0000.0000] # SIGNWRITING NOSE CONTACT 1DA33 ; [.0000.0000.0000] # SIGNWRITING NOSE WRINKLES 1DA34 ; [.0000.0000.0000] # SIGNWRITING NOSE WIGGLES 1DA35 ; [.0000.0000.0000] # SIGNWRITING AIR BLOWING OUT 1DA36 ; [.0000.0000.0000] # SIGNWRITING AIR SUCKING IN 1DA37 ; [*1A3F.0020.0002] # SIGNWRITING AIR BLOW SMALL ROTATIONS 1DA38 ; [*1A40.0020.0002] # SIGNWRITING AIR SUCK SMALL ROTATIONS 1DA39 ; [*1A41.0020.0002] # SIGNWRITING BREATH INHALE 1DA3A ; [*1A42.0020.0002] # SIGNWRITING BREATH EXHALE 1DA3B ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED NEUTRAL 1DA3C ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED FORWARD 1DA3D ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED CONTACT 1DA3E ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE 1DA3F ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE WRINKLED 1DA40 ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE OPEN 1DA41 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN 1DA42 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN WRINKLED 1DA43 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN OPEN 1DA44 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN CIRCLE 1DA45 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN FORWARD 1DA46 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN WRINKLED 1DA47 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL 1DA48 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL WRINKLED 1DA49 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL YAWN 1DA4A ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE 1DA4B ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED 1DA4C ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE YAWN 1DA4D ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS 1DA4E ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS FORWARD 1DA4F ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS WRINKLED 1DA50 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE 1DA51 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE FORWARD 1DA52 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE SUCKED 1DA53 ; [.0000.0000.0000] # SIGNWRITING LIPS PRESSED TOGETHER 1DA54 ; [.0000.0000.0000] # SIGNWRITING LIP LOWER OVER UPPER 1DA55 ; [.0000.0000.0000] # SIGNWRITING LIP UPPER OVER LOWER 1DA56 ; [.0000.0000.0000] # SIGNWRITING MOUTH CORNERS 1DA57 ; [.0000.0000.0000] # SIGNWRITING MOUTH WRINKLES SINGLE 1DA58 ; [.0000.0000.0000] # SIGNWRITING MOUTH WRINKLES DOUBLE 1DA59 ; [.0000.0000.0000] # SIGNWRITING TONGUE STICKING OUT FAR 1DA5A ; [.0000.0000.0000] # SIGNWRITING TONGUE LICKING LIPS 1DA5B ; [.0000.0000.0000] # SIGNWRITING TONGUE TIP BETWEEN LIPS 1DA5C ; [.0000.0000.0000] # SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH 1DA5D ; [.0000.0000.0000] # SIGNWRITING TONGUE INSIDE MOUTH RELAXED 1DA5E ; [.0000.0000.0000] # SIGNWRITING TONGUE MOVES AGAINST CHEEK 1DA5F ; [.0000.0000.0000] # SIGNWRITING TONGUE CENTRE STICKING OUT 1DA60 ; [.0000.0000.0000] # SIGNWRITING TONGUE CENTRE INSIDE MOUTH 1DA61 ; [.0000.0000.0000] # SIGNWRITING TEETH 1DA62 ; [.0000.0000.0000] # SIGNWRITING TEETH MOVEMENT 1DA63 ; [.0000.0000.0000] # SIGNWRITING TEETH ON TONGUE 1DA64 ; [.0000.0000.0000] # SIGNWRITING TEETH ON TONGUE MOVEMENT 1DA65 ; [.0000.0000.0000] # SIGNWRITING TEETH ON LIPS 1DA66 ; [.0000.0000.0000] # SIGNWRITING TEETH ON LIPS MOVEMENT 1DA67 ; [.0000.0000.0000] # SIGNWRITING TEETH BITE LIPS 1DA68 ; [.0000.0000.0000] # SIGNWRITING MOVEMENT-WALLPLANE JAW 1DA69 ; [.0000.0000.0000] # SIGNWRITING MOVEMENT-FLOORPLANE JAW 1DA6A ; [.0000.0000.0000] # SIGNWRITING NECK 1DA6B ; [.0000.0000.0000] # SIGNWRITING HAIR 1DA6C ; [.0000.0000.0000] # SIGNWRITING EXCITEMENT 1DA6D ; [*1A43.0020.0002] # SIGNWRITING SHOULDER HIP SPINE 1DA6E ; [*1A44.0020.0002] # SIGNWRITING SHOULDER HIP POSITIONS 1DA6F ; [*1A45.0020.0002] # SIGNWRITING WALLPLANE SHOULDER HIP MOVE 1DA70 ; [*1A46.0020.0002] # SIGNWRITING FLOORPLANE SHOULDER HIP MOVE 1DA71 ; [*1A47.0020.0002] # SIGNWRITING SHOULDER TILTING FROM WAIST 1DA72 ; [*1A48.0020.0002] # SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH 1DA73 ; [*1A49.0020.0002] # SIGNWRITING TORSO-WALLPLANE CURVED BEND 1DA74 ; [*1A4A.0020.0002] # SIGNWRITING TORSO-FLOORPLANE TWISTING 1DA75 ; [.0000.0000.0000] # SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS 1DA76 ; [*1A4B.0020.0002] # SIGNWRITING LIMB COMBINATION 1DA77 ; [*1A4C.0020.0002] # SIGNWRITING LIMB LENGTH-1 1DA78 ; [*1A4D.0020.0002] # SIGNWRITING LIMB LENGTH-2 1DA79 ; [*1A4E.0020.0002] # SIGNWRITING LIMB LENGTH-3 1DA7A ; [*1A4F.0020.0002] # SIGNWRITING LIMB LENGTH-4 1DA7B ; [*1A50.0020.0002] # SIGNWRITING LIMB LENGTH-5 1DA7C ; [*1A51.0020.0002] # SIGNWRITING LIMB LENGTH-6 1DA7D ; [*1A52.0020.0002] # SIGNWRITING LIMB LENGTH-7 1DA7E ; [*1A53.0020.0002] # SIGNWRITING FINGER 1DA7F ; [*1A54.0020.0002] # SIGNWRITING LOCATION-WALLPLANE SPACE 1DA80 ; [*1A55.0020.0002] # SIGNWRITING LOCATION-FLOORPLANE SPACE 1DA81 ; [*1A56.0020.0002] # SIGNWRITING LOCATION HEIGHT 1DA82 ; [*1A57.0020.0002] # SIGNWRITING LOCATION WIDTH 1DA83 ; [*1A58.0020.0002] # SIGNWRITING LOCATION DEPTH 1DA84 ; [.0000.0000.0000] # SIGNWRITING LOCATION HEAD NECK 1DA85 ; [*1A59.0020.0002] # SIGNWRITING LOCATION TORSO 1DA86 ; [*1A5A.0020.0002] # SIGNWRITING LOCATION LIMBS DIGITS 1DA87 ; [*047D.0020.0002] # SIGNWRITING COMMA 1DA88 ; [*047E.0020.0002] # SIGNWRITING FULL STOP 1DA89 ; [*047F.0020.0002] # SIGNWRITING SEMICOLON 1DA8A ; [*0480.0020.0002] # SIGNWRITING COLON 1DA8B ; [*0481.0020.0002] # SIGNWRITING PARENTHESIS 1DA9B ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-2 1DA9C ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-3 1DA9D ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-4 1DA9E ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-5 1DA9F ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-6 1DAA1 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-2 1DAA2 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-3 1DAA3 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-4 1DAA4 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-5 1DAA5 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-6 1DAA6 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-7 1DAA7 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-8 1DAA8 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-9 1DAA9 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-10 1DAAA ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-11 1DAAB ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-12 1DAAC ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-13 1DAAD ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-14 1DAAE ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-15 1DAAF ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-16 1E8D0 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEENS 1E8D1 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TENS 1E8D2 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDREDS 1E8D3 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER THOUSANDS 1E8D4 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS 1E8D5 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS 1E8D6 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E95E ; [*0265.0020.0002] # ADLAM INITIAL EXCLAMATION MARK 1E95F ; [*0274.0020.0002] # ADLAM INITIAL QUESTION MARK 1EEF0 ; [*04FB.0020.0002] # ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL 1EEF1 ; [*04FC.0020.0002] # ARABIC MATHEMATICAL OPERATOR HAH WITH DAL 1F000 ; [*11C7.0020.0002] # MAHJONG TILE EAST WIND 1F001 ; [*11C8.0020.0002] # MAHJONG TILE SOUTH WIND 1F002 ; [*11C9.0020.0002] # MAHJONG TILE WEST WIND 1F003 ; [*11CA.0020.0002] # MAHJONG TILE NORTH WIND 1F004 ; [*11CB.0020.0002] # MAHJONG TILE RED DRAGON 1F005 ; [*11CC.0020.0002] # MAHJONG TILE GREEN DRAGON 1F006 ; [*11CD.0020.0002] # MAHJONG TILE WHITE DRAGON 1F007 ; [*11CE.0020.0002] # MAHJONG TILE ONE OF CHARACTERS 1F008 ; [*11CF.0020.0002] # MAHJONG TILE TWO OF CHARACTERS 1F009 ; [*11D0.0020.0002] # MAHJONG TILE THREE OF CHARACTERS 1F00A ; [*11D1.0020.0002] # MAHJONG TILE FOUR OF CHARACTERS 1F00B ; [*11D2.0020.0002] # MAHJONG TILE FIVE OF CHARACTERS 1F00C ; [*11D3.0020.0002] # MAHJONG TILE SIX OF CHARACTERS 1F00D ; [*11D4.0020.0002] # MAHJONG TILE SEVEN OF CHARACTERS 1F00E ; [*11D5.0020.0002] # MAHJONG TILE EIGHT OF CHARACTERS 1F00F ; [*11D6.0020.0002] # MAHJONG TILE NINE OF CHARACTERS 1F010 ; [*11D7.0020.0002] # MAHJONG TILE ONE OF BAMBOOS 1F011 ; [*11D8.0020.0002] # MAHJONG TILE TWO OF BAMBOOS 1F012 ; [*11D9.0020.0002] # MAHJONG TILE THREE OF BAMBOOS 1F013 ; [*11DA.0020.0002] # MAHJONG TILE FOUR OF BAMBOOS 1F014 ; [*11DB.0020.0002] # MAHJONG TILE FIVE OF BAMBOOS 1F015 ; [*11DC.0020.0002] # MAHJONG TILE SIX OF BAMBOOS 1F016 ; [*11DD.0020.0002] # MAHJONG TILE SEVEN OF BAMBOOS 1F017 ; [*11DE.0020.0002] # MAHJONG TILE EIGHT OF BAMBOOS 1F018 ; [*11DF.0020.0002] # MAHJONG TILE NINE OF BAMBOOS 1F019 ; [*11E0.0020.0002] # MAHJONG TILE ONE OF CIRCLES 1F01A ; [*11E1.0020.0002] # MAHJONG TILE TWO OF CIRCLES 1F01B ; [*11E2.0020.0002] # MAHJONG TILE THREE OF CIRCLES 1F01C ; [*11E3.0020.0002] # MAHJONG TILE FOUR OF CIRCLES 1F01D ; [*11E4.0020.0002] # MAHJONG TILE FIVE OF CIRCLES 1F01E ; [*11E5.0020.0002] # MAHJONG TILE SIX OF CIRCLES 1F01F ; [*11E6.0020.0002] # MAHJONG TILE SEVEN OF CIRCLES 1F020 ; [*11E7.0020.0002] # MAHJONG TILE EIGHT OF CIRCLES 1F021 ; [*11E8.0020.0002] # MAHJONG TILE NINE OF CIRCLES 1F022 ; [*11E9.0020.0002] # MAHJONG TILE PLUM 1F023 ; [*11EA.0020.0002] # MAHJONG TILE ORCHID 1F024 ; [*11EB.0020.0002] # MAHJONG TILE BAMBOO 1F025 ; [*11EC.0020.0002] # MAHJONG TILE CHRYSANTHEMUM 1F026 ; [*11ED.0020.0002] # MAHJONG TILE SPRING 1F027 ; [*11EE.0020.0002] # MAHJONG TILE SUMMER 1F028 ; [*11EF.0020.0002] # MAHJONG TILE AUTUMN 1F029 ; [*11F0.0020.0002] # MAHJONG TILE WINTER 1F02A ; [*11F1.0020.0002] # MAHJONG TILE JOKER 1F02B ; [*11F2.0020.0002] # MAHJONG TILE BACK 1F030 ; [*11F3.0020.0002] # DOMINO TILE HORIZONTAL BACK 1F031 ; [*11F4.0020.0002] # DOMINO TILE HORIZONTAL-00-00 1F032 ; [*11F5.0020.0002] # DOMINO TILE HORIZONTAL-00-01 1F033 ; [*11F6.0020.0002] # DOMINO TILE HORIZONTAL-00-02 1F034 ; [*11F7.0020.0002] # DOMINO TILE HORIZONTAL-00-03 1F035 ; [*11F8.0020.0002] # DOMINO TILE HORIZONTAL-00-04 1F036 ; [*11F9.0020.0002] # DOMINO TILE HORIZONTAL-00-05 1F037 ; [*11FA.0020.0002] # DOMINO TILE HORIZONTAL-00-06 1F038 ; [*11FB.0020.0002] # DOMINO TILE HORIZONTAL-01-00 1F039 ; [*11FC.0020.0002] # DOMINO TILE HORIZONTAL-01-01 1F03A ; [*11FD.0020.0002] # DOMINO TILE HORIZONTAL-01-02 1F03B ; [*11FE.0020.0002] # DOMINO TILE HORIZONTAL-01-03 1F03C ; [*11FF.0020.0002] # DOMINO TILE HORIZONTAL-01-04 1F03D ; [*1200.0020.0002] # DOMINO TILE HORIZONTAL-01-05 1F03E ; [*1201.0020.0002] # DOMINO TILE HORIZONTAL-01-06 1F03F ; [*1202.0020.0002] # DOMINO TILE HORIZONTAL-02-00 1F040 ; [*1203.0020.0002] # DOMINO TILE HORIZONTAL-02-01 1F041 ; [*1204.0020.0002] # DOMINO TILE HORIZONTAL-02-02 1F042 ; [*1205.0020.0002] # DOMINO TILE HORIZONTAL-02-03 1F043 ; [*1206.0020.0002] # DOMINO TILE HORIZONTAL-02-04 1F044 ; [*1207.0020.0002] # DOMINO TILE HORIZONTAL-02-05 1F045 ; [*1208.0020.0002] # DOMINO TILE HORIZONTAL-02-06 1F046 ; [*1209.0020.0002] # DOMINO TILE HORIZONTAL-03-00 1F047 ; [*120A.0020.0002] # DOMINO TILE HORIZONTAL-03-01 1F048 ; [*120B.0020.0002] # DOMINO TILE HORIZONTAL-03-02 1F049 ; [*120C.0020.0002] # DOMINO TILE HORIZONTAL-03-03 1F04A ; [*120D.0020.0002] # DOMINO TILE HORIZONTAL-03-04 1F04B ; [*120E.0020.0002] # DOMINO TILE HORIZONTAL-03-05 1F04C ; [*120F.0020.0002] # DOMINO TILE HORIZONTAL-03-06 1F04D ; [*1210.0020.0002] # DOMINO TILE HORIZONTAL-04-00 1F04E ; [*1211.0020.0002] # DOMINO TILE HORIZONTAL-04-01 1F04F ; [*1212.0020.0002] # DOMINO TILE HORIZONTAL-04-02 1F050 ; [*1213.0020.0002] # DOMINO TILE HORIZONTAL-04-03 1F051 ; [*1214.0020.0002] # DOMINO TILE HORIZONTAL-04-04 1F052 ; [*1215.0020.0002] # DOMINO TILE HORIZONTAL-04-05 1F053 ; [*1216.0020.0002] # DOMINO TILE HORIZONTAL-04-06 1F054 ; [*1217.0020.0002] # DOMINO TILE HORIZONTAL-05-00 1F055 ; [*1218.0020.0002] # DOMINO TILE HORIZONTAL-05-01 1F056 ; [*1219.0020.0002] # DOMINO TILE HORIZONTAL-05-02 1F057 ; [*121A.0020.0002] # DOMINO TILE HORIZONTAL-05-03 1F058 ; [*121B.0020.0002] # DOMINO TILE HORIZONTAL-05-04 1F059 ; [*121C.0020.0002] # DOMINO TILE HORIZONTAL-05-05 1F05A ; [*121D.0020.0002] # DOMINO TILE HORIZONTAL-05-06 1F05B ; [*121E.0020.0002] # DOMINO TILE HORIZONTAL-06-00 1F05C ; [*121F.0020.0002] # DOMINO TILE HORIZONTAL-06-01 1F05D ; [*1220.0020.0002] # DOMINO TILE HORIZONTAL-06-02 1F05E ; [*1221.0020.0002] # DOMINO TILE HORIZONTAL-06-03 1F05F ; [*1222.0020.0002] # DOMINO TILE HORIZONTAL-06-04 1F060 ; [*1223.0020.0002] # DOMINO TILE HORIZONTAL-06-05 1F061 ; [*1224.0020.0002] # DOMINO TILE HORIZONTAL-06-06 1F062 ; [*1225.0020.0002] # DOMINO TILE VERTICAL BACK 1F063 ; [*1226.0020.0002] # DOMINO TILE VERTICAL-00-00 1F064 ; [*1227.0020.0002] # DOMINO TILE VERTICAL-00-01 1F065 ; [*1228.0020.0002] # DOMINO TILE VERTICAL-00-02 1F066 ; [*1229.0020.0002] # DOMINO TILE VERTICAL-00-03 1F067 ; [*122A.0020.0002] # DOMINO TILE VERTICAL-00-04 1F068 ; [*122B.0020.0002] # DOMINO TILE VERTICAL-00-05 1F069 ; [*122C.0020.0002] # DOMINO TILE VERTICAL-00-06 1F06A ; [*122D.0020.0002] # DOMINO TILE VERTICAL-01-00 1F06B ; [*122E.0020.0002] # DOMINO TILE VERTICAL-01-01 1F06C ; [*122F.0020.0002] # DOMINO TILE VERTICAL-01-02 1F06D ; [*1230.0020.0002] # DOMINO TILE VERTICAL-01-03 1F06E ; [*1231.0020.0002] # DOMINO TILE VERTICAL-01-04 1F06F ; [*1232.0020.0002] # DOMINO TILE VERTICAL-01-05 1F070 ; [*1233.0020.0002] # DOMINO TILE VERTICAL-01-06 1F071 ; [*1234.0020.0002] # DOMINO TILE VERTICAL-02-00 1F072 ; [*1235.0020.0002] # DOMINO TILE VERTICAL-02-01 1F073 ; [*1236.0020.0002] # DOMINO TILE VERTICAL-02-02 1F074 ; [*1237.0020.0002] # DOMINO TILE VERTICAL-02-03 1F075 ; [*1238.0020.0002] # DOMINO TILE VERTICAL-02-04 1F076 ; [*1239.0020.0002] # DOMINO TILE VERTICAL-02-05 1F077 ; [*123A.0020.0002] # DOMINO TILE VERTICAL-02-06 1F078 ; [*123B.0020.0002] # DOMINO TILE VERTICAL-03-00 1F079 ; [*123C.0020.0002] # DOMINO TILE VERTICAL-03-01 1F07A ; [*123D.0020.0002] # DOMINO TILE VERTICAL-03-02 1F07B ; [*123E.0020.0002] # DOMINO TILE VERTICAL-03-03 1F07C ; [*123F.0020.0002] # DOMINO TILE VERTICAL-03-04 1F07D ; [*1240.0020.0002] # DOMINO TILE VERTICAL-03-05 1F07E ; [*1241.0020.0002] # DOMINO TILE VERTICAL-03-06 1F07F ; [*1242.0020.0002] # DOMINO TILE VERTICAL-04-00 1F080 ; [*1243.0020.0002] # DOMINO TILE VERTICAL-04-01 1F081 ; [*1244.0020.0002] # DOMINO TILE VERTICAL-04-02 1F082 ; [*1245.0020.0002] # DOMINO TILE VERTICAL-04-03 1F083 ; [*1246.0020.0002] # DOMINO TILE VERTICAL-04-04 1F084 ; [*1247.0020.0002] # DOMINO TILE VERTICAL-04-05 1F085 ; [*1248.0020.0002] # DOMINO TILE VERTICAL-04-06 1F086 ; [*1249.0020.0002] # DOMINO TILE VERTICAL-05-00 1F087 ; [*124A.0020.0002] # DOMINO TILE VERTICAL-05-01 1F088 ; [*124B.0020.0002] # DOMINO TILE VERTICAL-05-02 1F089 ; [*124C.0020.0002] # DOMINO TILE VERTICAL-05-03 1F08A ; [*124D.0020.0002] # DOMINO TILE VERTICAL-05-04 1F08B ; [*124E.0020.0002] # DOMINO TILE VERTICAL-05-05 1F08C ; [*124F.0020.0002] # DOMINO TILE VERTICAL-05-06 1F08D ; [*1250.0020.0002] # DOMINO TILE VERTICAL-06-00 1F08E ; [*1251.0020.0002] # DOMINO TILE VERTICAL-06-01 1F08F ; [*1252.0020.0002] # DOMINO TILE VERTICAL-06-02 1F090 ; [*1253.0020.0002] # DOMINO TILE VERTICAL-06-03 1F091 ; [*1254.0020.0002] # DOMINO TILE VERTICAL-06-04 1F092 ; [*1255.0020.0002] # DOMINO TILE VERTICAL-06-05 1F093 ; [*1256.0020.0002] # DOMINO TILE VERTICAL-06-06 1F0A0 ; [*1257.0020.0002] # PLAYING CARD BACK 1F0A1 ; [*1258.0020.0002] # PLAYING CARD ACE OF SPADES 1F0A2 ; [*1259.0020.0002] # PLAYING CARD TWO OF SPADES 1F0A3 ; [*125A.0020.0002] # PLAYING CARD THREE OF SPADES 1F0A4 ; [*125B.0020.0002] # PLAYING CARD FOUR OF SPADES 1F0A5 ; [*125C.0020.0002] # PLAYING CARD FIVE OF SPADES 1F0A6 ; [*125D.0020.0002] # PLAYING CARD SIX OF SPADES 1F0A7 ; [*125E.0020.0002] # PLAYING CARD SEVEN OF SPADES 1F0A8 ; [*125F.0020.0002] # PLAYING CARD EIGHT OF SPADES 1F0A9 ; [*1260.0020.0002] # PLAYING CARD NINE OF SPADES 1F0AA ; [*1261.0020.0002] # PLAYING CARD TEN OF SPADES 1F0AB ; [*1262.0020.0002] # PLAYING CARD JACK OF SPADES 1F0AC ; [*1263.0020.0002] # PLAYING CARD KNIGHT OF SPADES 1F0AD ; [*1264.0020.0002] # PLAYING CARD QUEEN OF SPADES 1F0AE ; [*1265.0020.0002] # PLAYING CARD KING OF SPADES 1F0B1 ; [*1266.0020.0002] # PLAYING CARD ACE OF HEARTS 1F0B2 ; [*1267.0020.0002] # PLAYING CARD TWO OF HEARTS 1F0B3 ; [*1268.0020.0002] # PLAYING CARD THREE OF HEARTS 1F0B4 ; [*1269.0020.0002] # PLAYING CARD FOUR OF HEARTS 1F0B5 ; [*126A.0020.0002] # PLAYING CARD FIVE OF HEARTS 1F0B6 ; [*126B.0020.0002] # PLAYING CARD SIX OF HEARTS 1F0B7 ; [*126C.0020.0002] # PLAYING CARD SEVEN OF HEARTS 1F0B8 ; [*126D.0020.0002] # PLAYING CARD EIGHT OF HEARTS 1F0B9 ; [*126E.0020.0002] # PLAYING CARD NINE OF HEARTS 1F0BA ; [*126F.0020.0002] # PLAYING CARD TEN OF HEARTS 1F0BB ; [*1270.0020.0002] # PLAYING CARD JACK OF HEARTS 1F0BC ; [*1271.0020.0002] # PLAYING CARD KNIGHT OF HEARTS 1F0BD ; [*1272.0020.0002] # PLAYING CARD QUEEN OF HEARTS 1F0BE ; [*1273.0020.0002] # PLAYING CARD KING OF HEARTS 1F0BF ; [*1274.0020.0002] # PLAYING CARD RED JOKER 1F0C1 ; [*1275.0020.0002] # PLAYING CARD ACE OF DIAMONDS 1F0C2 ; [*1276.0020.0002] # PLAYING CARD TWO OF DIAMONDS 1F0C3 ; [*1277.0020.0002] # PLAYING CARD THREE OF DIAMONDS 1F0C4 ; [*1278.0020.0002] # PLAYING CARD FOUR OF DIAMONDS 1F0C5 ; [*1279.0020.0002] # PLAYING CARD FIVE OF DIAMONDS 1F0C6 ; [*127A.0020.0002] # PLAYING CARD SIX OF DIAMONDS 1F0C7 ; [*127B.0020.0002] # PLAYING CARD SEVEN OF DIAMONDS 1F0C8 ; [*127C.0020.0002] # PLAYING CARD EIGHT OF DIAMONDS 1F0C9 ; [*127D.0020.0002] # PLAYING CARD NINE OF DIAMONDS 1F0CA ; [*127E.0020.0002] # PLAYING CARD TEN OF DIAMONDS 1F0CB ; [*127F.0020.0002] # PLAYING CARD JACK OF DIAMONDS 1F0CC ; [*1280.0020.0002] # PLAYING CARD KNIGHT OF DIAMONDS 1F0CD ; [*1281.0020.0002] # PLAYING CARD QUEEN OF DIAMONDS 1F0CE ; [*1282.0020.0002] # PLAYING CARD KING OF DIAMONDS 1F0CF ; [*1283.0020.0002] # PLAYING CARD BLACK JOKER 1F0D1 ; [*1284.0020.0002] # PLAYING CARD ACE OF CLUBS 1F0D2 ; [*1285.0020.0002] # PLAYING CARD TWO OF CLUBS 1F0D3 ; [*1286.0020.0002] # PLAYING CARD THREE OF CLUBS 1F0D4 ; [*1287.0020.0002] # PLAYING CARD FOUR OF CLUBS 1F0D5 ; [*1288.0020.0002] # PLAYING CARD FIVE OF CLUBS 1F0D6 ; [*1289.0020.0002] # PLAYING CARD SIX OF CLUBS 1F0D7 ; [*128A.0020.0002] # PLAYING CARD SEVEN OF CLUBS 1F0D8 ; [*128B.0020.0002] # PLAYING CARD EIGHT OF CLUBS 1F0D9 ; [*128C.0020.0002] # PLAYING CARD NINE OF CLUBS 1F0DA ; [*128D.0020.0002] # PLAYING CARD TEN OF CLUBS 1F0DB ; [*128E.0020.0002] # PLAYING CARD JACK OF CLUBS 1F0DC ; [*128F.0020.0002] # PLAYING CARD KNIGHT OF CLUBS 1F0DD ; [*1290.0020.0002] # PLAYING CARD QUEEN OF CLUBS 1F0DE ; [*1291.0020.0002] # PLAYING CARD KING OF CLUBS 1F0DF ; [*1292.0020.0002] # PLAYING CARD WHITE JOKER 1F0E0 ; [*1293.0020.0002] # PLAYING CARD FOOL 1F0E1 ; [*1294.0020.0002] # PLAYING CARD TRUMP-1 1F0E2 ; [*1295.0020.0002] # PLAYING CARD TRUMP-2 1F0E3 ; [*1296.0020.0002] # PLAYING CARD TRUMP-3 1F0E4 ; [*1297.0020.0002] # PLAYING CARD TRUMP-4 1F0E5 ; [*1298.0020.0002] # PLAYING CARD TRUMP-5 1F0E6 ; [*1299.0020.0002] # PLAYING CARD TRUMP-6 1F0E7 ; [*129A.0020.0002] # PLAYING CARD TRUMP-7 1F0E8 ; [*129B.0020.0002] # PLAYING CARD TRUMP-8 1F0E9 ; [*129C.0020.0002] # PLAYING CARD TRUMP-9 1F0EA ; [*129D.0020.0002] # PLAYING CARD TRUMP-10 1F0EB ; [*129E.0020.0002] # PLAYING CARD TRUMP-11 1F0EC ; [*129F.0020.0002] # PLAYING CARD TRUMP-12 1F0ED ; [*12A0.0020.0002] # PLAYING CARD TRUMP-13 1F0EE ; [*12A1.0020.0002] # PLAYING CARD TRUMP-14 1F0EF ; [*12A2.0020.0002] # PLAYING CARD TRUMP-15 1F0F0 ; [*12A3.0020.0002] # PLAYING CARD TRUMP-16 1F0F1 ; [*12A4.0020.0002] # PLAYING CARD TRUMP-17 1F0F2 ; [*12A5.0020.0002] # PLAYING CARD TRUMP-18 1F0F3 ; [*12A6.0020.0002] # PLAYING CARD TRUMP-19 1F0F4 ; [*12A7.0020.0002] # PLAYING CARD TRUMP-20 1F0F5 ; [*12A8.0020.0002] # PLAYING CARD TRUMP-21 1F1E6 ; [*0A07.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER A 1F1E7 ; [*0A08.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER B 1F1E8 ; [*0A09.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER C 1F1E9 ; [*0A0A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER D 1F1EA ; [*0A0B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER E 1F1EB ; [*0A0C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER F 1F1EC ; [*0A0D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER G 1F1ED ; [*0A0E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER H 1F1EE ; [*0A0F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER I 1F1EF ; [*0A10.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER J 1F1F0 ; [*0A11.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER K 1F1F1 ; [*0A12.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER L 1F1F2 ; [*0A13.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER M 1F1F3 ; [*0A14.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER N 1F1F4 ; [*0A15.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER O 1F1F5 ; [*0A16.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER P 1F1F6 ; [*0A17.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Q 1F1F7 ; [*0A18.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER R 1F1F8 ; [*0A19.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER S 1F1F9 ; [*0A1A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER T 1F1FA ; [*0A1B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER U 1F1FB ; [*0A1C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER V 1F1FC ; [*0A1D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER W 1F1FD ; [*0A1E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER X 1F1FE ; [*0A1F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Y 1F1FF ; [*0A20.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Z 1F300 ; [*12A9.0020.0002] # CYCLONE 1F301 ; [*12AA.0020.0002] # FOGGY 1F302 ; [*12AB.0020.0002] # CLOSED UMBRELLA 1F303 ; [*12AC.0020.0002] # NIGHT WITH STARS 1F304 ; [*12AD.0020.0002] # SUNRISE OVER MOUNTAINS 1F305 ; [*12AE.0020.0002] # SUNRISE 1F306 ; [*12AF.0020.0002] # CITYSCAPE AT DUSK 1F307 ; [*12B0.0020.0002] # SUNSET OVER BUILDINGS 1F308 ; [*12B1.0020.0002] # RAINBOW 1F309 ; [*12B2.0020.0002] # BRIDGE AT NIGHT 1F30A ; [*12B3.0020.0002] # WATER WAVE 1F30B ; [*12B4.0020.0002] # VOLCANO 1F30C ; [*12B5.0020.0002] # MILKY WAY 1F30D ; [*12B6.0020.0002] # EARTH GLOBE EUROPE-AFRICA 1F30E ; [*12B7.0020.0002] # EARTH GLOBE AMERICAS 1F30F ; [*12B8.0020.0002] # EARTH GLOBE ASIA-AUSTRALIA 1F310 ; [*12B9.0020.0002] # GLOBE WITH MERIDIANS 1F311 ; [*12BA.0020.0002] # NEW MOON SYMBOL 1F312 ; [*12BB.0020.0002] # WAXING CRESCENT MOON SYMBOL 1F313 ; [*12BC.0020.0002] # FIRST QUARTER MOON SYMBOL 1F314 ; [*12BD.0020.0002] # WAXING GIBBOUS MOON SYMBOL 1F315 ; [*12BE.0020.0002] # FULL MOON SYMBOL 1F316 ; [*12BF.0020.0002] # WANING GIBBOUS MOON SYMBOL 1F317 ; [*12C0.0020.0002] # LAST QUARTER MOON SYMBOL 1F318 ; [*12C1.0020.0002] # WANING CRESCENT MOON SYMBOL 1F319 ; [*12C2.0020.0002] # CRESCENT MOON 1F31A ; [*12C3.0020.0002] # NEW MOON WITH FACE 1F31B ; [*12C4.0020.0002] # FIRST QUARTER MOON WITH FACE 1F31C ; [*12C5.0020.0002] # LAST QUARTER MOON WITH FACE 1F31D ; [*12C6.0020.0002] # FULL MOON WITH FACE 1F31E ; [*12C7.0020.0002] # SUN WITH FACE 1F31F ; [*12C8.0020.0002] # GLOWING STAR 1F320 ; [*12C9.0020.0002] # SHOOTING STAR 1F321 ; [*12CA.0020.0002] # THERMOMETER 1F322 ; [*12CB.0020.0002] # BLACK DROPLET 1F323 ; [*12CC.0020.0002] # WHITE SUN 1F324 ; [*12CD.0020.0002] # WHITE SUN WITH SMALL CLOUD 1F325 ; [*12CE.0020.0002] # WHITE SUN BEHIND CLOUD 1F326 ; [*12CF.0020.0002] # WHITE SUN BEHIND CLOUD WITH RAIN 1F327 ; [*12D0.0020.0002] # CLOUD WITH RAIN 1F328 ; [*12D1.0020.0002] # CLOUD WITH SNOW 1F329 ; [*12D2.0020.0002] # CLOUD WITH LIGHTNING 1F32A ; [*12D3.0020.0002] # CLOUD WITH TORNADO 1F32B ; [*12D4.0020.0002] # FOG 1F32C ; [*12D5.0020.0002] # WIND BLOWING FACE 1F32D ; [*12D6.0020.0002] # HOT DOG 1F32E ; [*12D7.0020.0002] # TACO 1F32F ; [*12D8.0020.0002] # BURRITO 1F330 ; [*12D9.0020.0002] # CHESTNUT 1F331 ; [*12DA.0020.0002] # SEEDLING 1F332 ; [*12DB.0020.0002] # EVERGREEN TREE 1F333 ; [*12DC.0020.0002] # DECIDUOUS TREE 1F334 ; [*12DD.0020.0002] # PALM TREE 1F335 ; [*12DE.0020.0002] # CACTUS 1F336 ; [*12DF.0020.0002] # HOT PEPPER 1F337 ; [*12E0.0020.0002] # TULIP 1F338 ; [*12E1.0020.0002] # CHERRY BLOSSOM 1F339 ; [*12E2.0020.0002] # ROSE 1F33A ; [*12E3.0020.0002] # HIBISCUS 1F33B ; [*12E4.0020.0002] # SUNFLOWER 1F33C ; [*12E5.0020.0002] # BLOSSOM 1F33D ; [*12E6.0020.0002] # EAR OF MAIZE 1F33E ; [*12E7.0020.0002] # EAR OF RICE 1F33F ; [*12E8.0020.0002] # HERB 1F340 ; [*12E9.0020.0002] # FOUR LEAF CLOVER 1F341 ; [*12EA.0020.0002] # MAPLE LEAF 1F342 ; [*12EB.0020.0002] # FALLEN LEAF 1F343 ; [*12EC.0020.0002] # LEAF FLUTTERING IN WIND 1F344 ; [*12ED.0020.0002] # MUSHROOM 1F345 ; [*12EE.0020.0002] # TOMATO 1F346 ; [*12EF.0020.0002] # AUBERGINE 1F347 ; [*12F0.0020.0002] # GRAPES 1F348 ; [*12F1.0020.0002] # MELON 1F349 ; [*12F2.0020.0002] # WATERMELON 1F34A ; [*12F3.0020.0002] # TANGERINE 1F34B ; [*12F4.0020.0002] # LEMON 1F34C ; [*12F5.0020.0002] # BANANA 1F34D ; [*12F6.0020.0002] # PINEAPPLE 1F34E ; [*12F7.0020.0002] # RED APPLE 1F34F ; [*12F8.0020.0002] # GREEN APPLE 1F350 ; [*12F9.0020.0002] # PEAR 1F351 ; [*12FA.0020.0002] # PEACH 1F352 ; [*12FB.0020.0002] # CHERRIES 1F353 ; [*12FC.0020.0002] # STRAWBERRY 1F354 ; [*12FD.0020.0002] # HAMBURGER 1F355 ; [*12FE.0020.0002] # SLICE OF PIZZA 1F356 ; [*12FF.0020.0002] # MEAT ON BONE 1F357 ; [*1300.0020.0002] # POULTRY LEG 1F358 ; [*1301.0020.0002] # RICE CRACKER 1F359 ; [*1302.0020.0002] # RICE BALL 1F35A ; [*1303.0020.0002] # COOKED RICE 1F35B ; [*1304.0020.0002] # CURRY AND RICE 1F35C ; [*1305.0020.0002] # STEAMING BOWL 1F35D ; [*1306.0020.0002] # SPAGHETTI 1F35E ; [*1307.0020.0002] # BREAD 1F35F ; [*1308.0020.0002] # FRENCH FRIES 1F360 ; [*1309.0020.0002] # ROASTED SWEET POTATO 1F361 ; [*130A.0020.0002] # DANGO 1F362 ; [*130B.0020.0002] # ODEN 1F363 ; [*130C.0020.0002] # SUSHI 1F364 ; [*130D.0020.0002] # FRIED SHRIMP 1F365 ; [*130E.0020.0002] # FISH CAKE WITH SWIRL DESIGN 1F366 ; [*130F.0020.0002] # SOFT ICE CREAM 1F367 ; [*1310.0020.0002] # SHAVED ICE 1F368 ; [*1311.0020.0002] # ICE CREAM 1F369 ; [*1312.0020.0002] # DOUGHNUT 1F36A ; [*1313.0020.0002] # COOKIE 1F36B ; [*1314.0020.0002] # CHOCOLATE BAR 1F36C ; [*1315.0020.0002] # CANDY 1F36D ; [*1316.0020.0002] # LOLLIPOP 1F36E ; [*1317.0020.0002] # CUSTARD 1F36F ; [*1318.0020.0002] # HONEY POT 1F370 ; [*1319.0020.0002] # SHORTCAKE 1F371 ; [*131A.0020.0002] # BENTO BOX 1F372 ; [*131B.0020.0002] # POT OF FOOD 1F373 ; [*131C.0020.0002] # COOKING 1F374 ; [*131D.0020.0002] # FORK AND KNIFE 1F375 ; [*131E.0020.0002] # TEACUP WITHOUT HANDLE 1F376 ; [*131F.0020.0002] # SAKE BOTTLE AND CUP 1F377 ; [*1320.0020.0002] # WINE GLASS 1F378 ; [*1321.0020.0002] # COCKTAIL GLASS 1F379 ; [*1322.0020.0002] # TROPICAL DRINK 1F37A ; [*1323.0020.0002] # BEER MUG 1F37B ; [*1324.0020.0002] # CLINKING BEER MUGS 1F37C ; [*1325.0020.0002] # BABY BOTTLE 1F37D ; [*1326.0020.0002] # FORK AND KNIFE WITH PLATE 1F37E ; [*1327.0020.0002] # BOTTLE WITH POPPING CORK 1F37F ; [*1328.0020.0002] # POPCORN 1F380 ; [*1329.0020.0002] # RIBBON 1F381 ; [*132A.0020.0002] # WRAPPED PRESENT 1F382 ; [*132B.0020.0002] # BIRTHDAY CAKE 1F383 ; [*132C.0020.0002] # JACK-O-LANTERN 1F384 ; [*132D.0020.0002] # CHRISTMAS TREE 1F385 ; [*132E.0020.0002] # FATHER CHRISTMAS 1F386 ; [*132F.0020.0002] # FIREWORKS 1F387 ; [*1330.0020.0002] # FIREWORK SPARKLER 1F388 ; [*1331.0020.0002] # BALLOON 1F389 ; [*1332.0020.0002] # PARTY POPPER 1F38A ; [*1333.0020.0002] # CONFETTI BALL 1F38B ; [*1334.0020.0002] # TANABATA TREE 1F38C ; [*1335.0020.0002] # CROSSED FLAGS 1F38D ; [*1336.0020.0002] # PINE DECORATION 1F38E ; [*1337.0020.0002] # JAPANESE DOLLS 1F38F ; [*1338.0020.0002] # CARP STREAMER 1F390 ; [*1339.0020.0002] # WIND CHIME 1F391 ; [*133A.0020.0002] # MOON VIEWING CEREMONY 1F392 ; [*133B.0020.0002] # SCHOOL SATCHEL 1F393 ; [*133C.0020.0002] # GRADUATION CAP 1F394 ; [*133D.0020.0002] # HEART WITH TIP ON THE LEFT 1F395 ; [*133E.0020.0002] # BOUQUET OF FLOWERS 1F396 ; [*133F.0020.0002] # MILITARY MEDAL 1F397 ; [*1340.0020.0002] # REMINDER RIBBON 1F398 ; [*1341.0020.0002] # MUSICAL KEYBOARD WITH JACKS 1F399 ; [*1342.0020.0002] # STUDIO MICROPHONE 1F39A ; [*1343.0020.0002] # LEVEL SLIDER 1F39B ; [*1344.0020.0002] # CONTROL KNOBS 1F39C ; [*1345.0020.0002] # BEAMED ASCENDING MUSICAL NOTES 1F39D ; [*1346.0020.0002] # BEAMED DESCENDING MUSICAL NOTES 1F39E ; [*1347.0020.0002] # FILM FRAMES 1F39F ; [*1348.0020.0002] # ADMISSION TICKETS 1F3A0 ; [*1349.0020.0002] # CAROUSEL HORSE 1F3A1 ; [*134A.0020.0002] # FERRIS WHEEL 1F3A2 ; [*134B.0020.0002] # ROLLER COASTER 1F3A3 ; [*134C.0020.0002] # FISHING POLE AND FISH 1F3A4 ; [*134D.0020.0002] # MICROPHONE 1F3A5 ; [*134E.0020.0002] # MOVIE CAMERA 1F3A6 ; [*134F.0020.0002] # CINEMA 1F3A7 ; [*1350.0020.0002] # HEADPHONE 1F3A8 ; [*1351.0020.0002] # ARTIST PALETTE 1F3A9 ; [*1352.0020.0002] # TOP HAT 1F3AA ; [*1353.0020.0002] # CIRCUS TENT 1F3AB ; [*1354.0020.0002] # TICKET 1F3AC ; [*1355.0020.0002] # CLAPPER BOARD 1F3AD ; [*1356.0020.0002] # PERFORMING ARTS 1F3AE ; [*1357.0020.0002] # VIDEO GAME 1F3AF ; [*1358.0020.0002] # DIRECT HIT 1F3B0 ; [*1359.0020.0002] # SLOT MACHINE 1F3B1 ; [*135A.0020.0002] # BILLIARDS 1F3B2 ; [*135B.0020.0002] # GAME DIE 1F3B3 ; [*135C.0020.0002] # BOWLING 1F3B4 ; [*135D.0020.0002] # FLOWER PLAYING CARDS 1F3B5 ; [*135E.0020.0002] # MUSICAL NOTE 1F3B6 ; [*135F.0020.0002] # MULTIPLE MUSICAL NOTES 1F3B7 ; [*1360.0020.0002] # SAXOPHONE 1F3B8 ; [*1361.0020.0002] # GUITAR 1F3B9 ; [*1362.0020.0002] # MUSICAL KEYBOARD 1F3BA ; [*1363.0020.0002] # TRUMPET 1F3BB ; [*1364.0020.0002] # VIOLIN 1F3BC ; [*1365.0020.0002] # MUSICAL SCORE 1F3BD ; [*1366.0020.0002] # RUNNING SHIRT WITH SASH 1F3BE ; [*1367.0020.0002] # TENNIS RACQUET AND BALL 1F3BF ; [*1368.0020.0002] # SKI AND SKI BOOT 1F3C0 ; [*1369.0020.0002] # BASKETBALL AND HOOP 1F3C1 ; [*136A.0020.0002] # CHEQUERED FLAG 1F3C2 ; [*136B.0020.0002] # SNOWBOARDER 1F3C3 ; [*136C.0020.0002] # RUNNER 1F3C4 ; [*136D.0020.0002] # SURFER 1F3C5 ; [*136E.0020.0002] # SPORTS MEDAL 1F3C6 ; [*136F.0020.0002] # TROPHY 1F3C7 ; [*1370.0020.0002] # HORSE RACING 1F3C8 ; [*1371.0020.0002] # AMERICAN FOOTBALL 1F3C9 ; [*1372.0020.0002] # RUGBY FOOTBALL 1F3CA ; [*1373.0020.0002] # SWIMMER 1F3CB ; [*1374.0020.0002] # WEIGHT LIFTER 1F3CC ; [*1375.0020.0002] # GOLFER 1F3CD ; [*1376.0020.0002] # RACING MOTORCYCLE 1F3CE ; [*1377.0020.0002] # RACING CAR 1F3CF ; [*1378.0020.0002] # CRICKET BAT AND BALL 1F3D0 ; [*1379.0020.0002] # VOLLEYBALL 1F3D1 ; [*137A.0020.0002] # FIELD HOCKEY STICK AND BALL 1F3D2 ; [*137B.0020.0002] # ICE HOCKEY STICK AND PUCK 1F3D3 ; [*137C.0020.0002] # TABLE TENNIS PADDLE AND BALL 1F3D4 ; [*137D.0020.0002] # SNOW CAPPED MOUNTAIN 1F3D5 ; [*137E.0020.0002] # CAMPING 1F3D6 ; [*137F.0020.0002] # BEACH WITH UMBRELLA 1F3D7 ; [*1380.0020.0002] # BUILDING CONSTRUCTION 1F3D8 ; [*1381.0020.0002] # HOUSE BUILDINGS 1F3D9 ; [*1382.0020.0002] # CITYSCAPE 1F3DA ; [*1383.0020.0002] # DERELICT HOUSE BUILDING 1F3DB ; [*1384.0020.0002] # CLASSICAL BUILDING 1F3DC ; [*1385.0020.0002] # DESERT 1F3DD ; [*1386.0020.0002] # DESERT ISLAND 1F3DE ; [*1387.0020.0002] # NATIONAL PARK 1F3DF ; [*1388.0020.0002] # STADIUM 1F3E0 ; [*1389.0020.0002] # HOUSE BUILDING 1F3E1 ; [*138A.0020.0002] # HOUSE WITH GARDEN 1F3E2 ; [*138B.0020.0002] # OFFICE BUILDING 1F3E3 ; [*138C.0020.0002] # JAPANESE POST OFFICE 1F3E4 ; [*138D.0020.0002] # EUROPEAN POST OFFICE 1F3E5 ; [*138E.0020.0002] # HOSPITAL 1F3E6 ; [*138F.0020.0002] # BANK 1F3E7 ; [*1390.0020.0002] # AUTOMATED TELLER MACHINE 1F3E8 ; [*1391.0020.0002] # HOTEL 1F3E9 ; [*1392.0020.0002] # LOVE HOTEL 1F3EA ; [*1393.0020.0002] # CONVENIENCE STORE 1F3EB ; [*1394.0020.0002] # SCHOOL 1F3EC ; [*1395.0020.0002] # DEPARTMENT STORE 1F3ED ; [*1396.0020.0002] # FACTORY 1F3EE ; [*1397.0020.0002] # IZAKAYA LANTERN 1F3EF ; [*1398.0020.0002] # JAPANESE CASTLE 1F3F0 ; [*1399.0020.0002] # EUROPEAN CASTLE 1F3F1 ; [*139A.0020.0002] # WHITE PENNANT 1F3F2 ; [*139B.0020.0002] # BLACK PENNANT 1F3F3 ; [*139C.0020.0002] # WAVING WHITE FLAG 1F3F4 ; [*139D.0020.0002] # WAVING BLACK FLAG 1F3F5 ; [*139E.0020.0002] # ROSETTE 1F3F6 ; [*139F.0020.0002] # BLACK ROSETTE 1F3F7 ; [*13A0.0020.0002] # LABEL 1F3F8 ; [*13A1.0020.0002] # BADMINTON RACQUET AND SHUTTLECOCK 1F3F9 ; [*13A2.0020.0002] # BOW AND ARROW 1F3FA ; [*13A3.0020.0002] # AMPHORA 1F3FB ; [*13A4.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-1-2 1F3FC ; [*13A5.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-3 1F3FD ; [*13A6.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-4 1F3FE ; [*13A7.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-5 1F3FF ; [*13A8.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-6 1F400 ; [*13A9.0020.0002] # RAT 1F401 ; [*13AA.0020.0002] # MOUSE 1F402 ; [*13AB.0020.0002] # OX 1F403 ; [*13AC.0020.0002] # WATER BUFFALO 1F404 ; [*13AD.0020.0002] # COW 1F405 ; [*13AE.0020.0002] # TIGER 1F406 ; [*13AF.0020.0002] # LEOPARD 1F407 ; [*13B0.0020.0002] # RABBIT 1F408 ; [*13B1.0020.0002] # CAT 1F409 ; [*13B2.0020.0002] # DRAGON 1F40A ; [*13B3.0020.0002] # CROCODILE 1F40B ; [*13B4.0020.0002] # WHALE 1F40C ; [*13B5.0020.0002] # SNAIL 1F40D ; [*13B6.0020.0002] # SNAKE 1F40E ; [*13B7.0020.0002] # HORSE 1F40F ; [*13B8.0020.0002] # RAM 1F410 ; [*13B9.0020.0002] # GOAT 1F411 ; [*13BA.0020.0002] # SHEEP 1F412 ; [*13BB.0020.0002] # MONKEY 1F413 ; [*13BC.0020.0002] # ROOSTER 1F414 ; [*13BD.0020.0002] # CHICKEN 1F415 ; [*13BE.0020.0002] # DOG 1F416 ; [*13BF.0020.0002] # PIG 1F417 ; [*13C0.0020.0002] # BOAR 1F418 ; [*13C1.0020.0002] # ELEPHANT 1F419 ; [*13C2.0020.0002] # OCTOPUS 1F41A ; [*13C3.0020.0002] # SPIRAL SHELL 1F41B ; [*13C4.0020.0002] # BUG 1F41C ; [*13C5.0020.0002] # ANT 1F41D ; [*13C6.0020.0002] # HONEYBEE 1F41E ; [*13C7.0020.0002] # LADY BEETLE 1F41F ; [*13C8.0020.0002] # FISH 1F420 ; [*13C9.0020.0002] # TROPICAL FISH 1F421 ; [*13CA.0020.0002] # BLOWFISH 1F422 ; [*13CB.0020.0002] # TURTLE 1F423 ; [*13CC.0020.0002] # HATCHING CHICK 1F424 ; [*13CD.0020.0002] # BABY CHICK 1F425 ; [*13CE.0020.0002] # FRONT-FACING BABY CHICK 1F426 ; [*13CF.0020.0002] # BIRD 1F427 ; [*13D0.0020.0002] # PENGUIN 1F428 ; [*13D1.0020.0002] # KOALA 1F429 ; [*13D2.0020.0002] # POODLE 1F42A ; [*13D3.0020.0002] # DROMEDARY CAMEL 1F42B ; [*13D4.0020.0002] # BACTRIAN CAMEL 1F42C ; [*13D5.0020.0002] # DOLPHIN 1F42D ; [*13D6.0020.0002] # MOUSE FACE 1F42E ; [*13D7.0020.0002] # COW FACE 1F42F ; [*13D8.0020.0002] # TIGER FACE 1F430 ; [*13D9.0020.0002] # RABBIT FACE 1F431 ; [*13DA.0020.0002] # CAT FACE 1F432 ; [*13DB.0020.0002] # DRAGON FACE 1F433 ; [*13DC.0020.0002] # SPOUTING WHALE 1F434 ; [*13DD.0020.0002] # HORSE FACE 1F435 ; [*13DE.0020.0002] # MONKEY FACE 1F436 ; [*13DF.0020.0002] # DOG FACE 1F437 ; [*13E0.0020.0002] # PIG FACE 1F438 ; [*13E1.0020.0002] # FROG FACE 1F439 ; [*13E2.0020.0002] # HAMSTER FACE 1F43A ; [*13E3.0020.0002] # WOLF FACE 1F43B ; [*13E4.0020.0002] # BEAR FACE 1F43C ; [*13E5.0020.0002] # PANDA FACE 1F43D ; [*13E6.0020.0002] # PIG NOSE 1F43E ; [*13E7.0020.0002] # PAW PRINTS 1F43F ; [*13E8.0020.0002] # CHIPMUNK 1F440 ; [*13E9.0020.0002] # EYES 1F441 ; [*13EA.0020.0002] # EYE 1F442 ; [*13EB.0020.0002] # EAR 1F443 ; [*13EC.0020.0002] # NOSE 1F444 ; [*13ED.0020.0002] # MOUTH 1F445 ; [*13EE.0020.0002] # TONGUE 1F446 ; [*13EF.0020.0002] # WHITE UP POINTING BACKHAND INDEX 1F447 ; [*13F0.0020.0002] # WHITE DOWN POINTING BACKHAND INDEX 1F448 ; [*13F1.0020.0002] # WHITE LEFT POINTING BACKHAND INDEX 1F449 ; [*13F2.0020.0002] # WHITE RIGHT POINTING BACKHAND INDEX 1F44A ; [*13F3.0020.0002] # FISTED HAND SIGN 1F44B ; [*13F4.0020.0002] # WAVING HAND SIGN 1F44C ; [*13F5.0020.0002] # OK HAND SIGN 1F44D ; [*13F6.0020.0002] # THUMBS UP SIGN 1F44E ; [*13F7.0020.0002] # THUMBS DOWN SIGN 1F44F ; [*13F8.0020.0002] # CLAPPING HANDS SIGN 1F450 ; [*13F9.0020.0002] # OPEN HANDS SIGN 1F451 ; [*13FA.0020.0002] # CROWN 1F452 ; [*13FB.0020.0002] # WOMANS HAT 1F453 ; [*13FC.0020.0002] # EYEGLASSES 1F454 ; [*13FD.0020.0002] # NECKTIE 1F455 ; [*13FE.0020.0002] # T-SHIRT 1F456 ; [*13FF.0020.0002] # JEANS 1F457 ; [*1400.0020.0002] # DRESS 1F458 ; [*1401.0020.0002] # KIMONO 1F459 ; [*1402.0020.0002] # BIKINI 1F45A ; [*1403.0020.0002] # WOMANS CLOTHES 1F45B ; [*1404.0020.0002] # PURSE 1F45C ; [*1405.0020.0002] # HANDBAG 1F45D ; [*1406.0020.0002] # POUCH 1F45E ; [*1407.0020.0002] # MANS SHOE 1F45F ; [*1408.0020.0002] # ATHLETIC SHOE 1F460 ; [*1409.0020.0002] # HIGH-HEELED SHOE 1F461 ; [*140A.0020.0002] # WOMANS SANDAL 1F462 ; [*140B.0020.0002] # WOMANS BOOTS 1F463 ; [*140C.0020.0002] # FOOTPRINTS 1F464 ; [*140D.0020.0002] # BUST IN SILHOUETTE 1F465 ; [*140E.0020.0002] # BUSTS IN SILHOUETTE 1F466 ; [*140F.0020.0002] # BOY 1F467 ; [*1410.0020.0002] # GIRL 1F468 ; [*1411.0020.0002] # MAN 1F469 ; [*1412.0020.0002] # WOMAN 1F46A ; [*1413.0020.0002] # FAMILY 1F46B ; [*1414.0020.0002] # MAN AND WOMAN HOLDING HANDS 1F46C ; [*1415.0020.0002] # TWO MEN HOLDING HANDS 1F46D ; [*1416.0020.0002] # TWO WOMEN HOLDING HANDS 1F46E ; [*1417.0020.0002] # POLICE OFFICER 1F46F ; [*1418.0020.0002] # WOMAN WITH BUNNY EARS 1F470 ; [*1419.0020.0002] # BRIDE WITH VEIL 1F471 ; [*141A.0020.0002] # PERSON WITH BLOND HAIR 1F472 ; [*141B.0020.0002] # MAN WITH GUA PI MAO 1F473 ; [*141C.0020.0002] # MAN WITH TURBAN 1F474 ; [*141D.0020.0002] # OLDER MAN 1F475 ; [*141E.0020.0002] # OLDER WOMAN 1F476 ; [*141F.0020.0002] # BABY 1F477 ; [*1420.0020.0002] # CONSTRUCTION WORKER 1F478 ; [*1421.0020.0002] # PRINCESS 1F479 ; [*1422.0020.0002] # JAPANESE OGRE 1F47A ; [*1423.0020.0002] # JAPANESE GOBLIN 1F47B ; [*1424.0020.0002] # GHOST 1F47C ; [*1425.0020.0002] # BABY ANGEL 1F47D ; [*1426.0020.0002] # EXTRATERRESTRIAL ALIEN 1F47E ; [*1427.0020.0002] # ALIEN MONSTER 1F47F ; [*1428.0020.0002] # IMP 1F480 ; [*1429.0020.0002] # SKULL 1F481 ; [*142A.0020.0002] # INFORMATION DESK PERSON 1F482 ; [*142B.0020.0002] # GUARDSMAN 1F483 ; [*142C.0020.0002] # DANCER 1F484 ; [*142D.0020.0002] # LIPSTICK 1F485 ; [*142E.0020.0002] # NAIL POLISH 1F486 ; [*142F.0020.0002] # FACE MASSAGE 1F487 ; [*1430.0020.0002] # HAIRCUT 1F488 ; [*1431.0020.0002] # BARBER POLE 1F489 ; [*1432.0020.0002] # SYRINGE 1F48A ; [*1433.0020.0002] # PILL 1F48B ; [*1434.0020.0002] # KISS MARK 1F48C ; [*1435.0020.0002] # LOVE LETTER 1F48D ; [*1436.0020.0002] # RING 1F48E ; [*1437.0020.0002] # GEM STONE 1F48F ; [*1438.0020.0002] # KISS 1F490 ; [*1439.0020.0002] # BOUQUET 1F491 ; [*143A.0020.0002] # COUPLE WITH HEART 1F492 ; [*143B.0020.0002] # WEDDING 1F493 ; [*143C.0020.0002] # BEATING HEART 1F494 ; [*143D.0020.0002] # BROKEN HEART 1F495 ; [*143E.0020.0002] # TWO HEARTS 1F496 ; [*143F.0020.0002] # SPARKLING HEART 1F497 ; [*1440.0020.0002] # GROWING HEART 1F498 ; [*1441.0020.0002] # HEART WITH ARROW 1F499 ; [*1442.0020.0002] # BLUE HEART 1F49A ; [*1443.0020.0002] # GREEN HEART 1F49B ; [*1444.0020.0002] # YELLOW HEART 1F49C ; [*1445.0020.0002] # PURPLE HEART 1F49D ; [*1446.0020.0002] # HEART WITH RIBBON 1F49E ; [*1447.0020.0002] # REVOLVING HEARTS 1F49F ; [*1448.0020.0002] # HEART DECORATION 1F4A0 ; [*1449.0020.0002] # DIAMOND SHAPE WITH A DOT INSIDE 1F4A1 ; [*144A.0020.0002] # ELECTRIC LIGHT BULB 1F4A2 ; [*144B.0020.0002] # ANGER SYMBOL 1F4A3 ; [*144C.0020.0002] # BOMB 1F4A4 ; [*144D.0020.0002] # SLEEPING SYMBOL 1F4A5 ; [*144E.0020.0002] # COLLISION SYMBOL 1F4A6 ; [*144F.0020.0002] # SPLASHING SWEAT SYMBOL 1F4A7 ; [*1450.0020.0002] # DROPLET 1F4A8 ; [*1451.0020.0002] # DASH SYMBOL 1F4A9 ; [*1452.0020.0002] # PILE OF POO 1F4AA ; [*1453.0020.0002] # FLEXED BICEPS 1F4AB ; [*1454.0020.0002] # DIZZY SYMBOL 1F4AC ; [*1455.0020.0002] # SPEECH BALLOON 1F4AD ; [*1456.0020.0002] # THOUGHT BALLOON 1F4AE ; [*1457.0020.0002] # WHITE FLOWER 1F4AF ; [*1458.0020.0002] # HUNDRED POINTS SYMBOL 1F4B0 ; [*1459.0020.0002] # MONEY BAG 1F4B1 ; [*145A.0020.0002] # CURRENCY EXCHANGE 1F4B2 ; [*145B.0020.0002] # HEAVY DOLLAR SIGN 1F4B3 ; [*145C.0020.0002] # CREDIT CARD 1F4B4 ; [*145D.0020.0002] # BANKNOTE WITH YEN SIGN 1F4B5 ; [*145E.0020.0002] # BANKNOTE WITH DOLLAR SIGN 1F4B6 ; [*145F.0020.0002] # BANKNOTE WITH EURO SIGN 1F4B7 ; [*1460.0020.0002] # BANKNOTE WITH POUND SIGN 1F4B8 ; [*1461.0020.0002] # MONEY WITH WINGS 1F4B9 ; [*1462.0020.0002] # CHART WITH UPWARDS TREND AND YEN SIGN 1F4BA ; [*1463.0020.0002] # SEAT 1F4BB ; [*1464.0020.0002] # PERSONAL COMPUTER 1F4BC ; [*1465.0020.0002] # BRIEFCASE 1F4BD ; [*1466.0020.0002] # MINIDISC 1F4BE ; [*1467.0020.0002] # FLOPPY DISK 1F4BF ; [*1468.0020.0002] # OPTICAL DISC 1F4C0 ; [*1469.0020.0002] # DVD 1F4C1 ; [*146A.0020.0002] # FILE FOLDER 1F4C2 ; [*146B.0020.0002] # OPEN FILE FOLDER 1F4C3 ; [*146C.0020.0002] # PAGE WITH CURL 1F4C4 ; [*146D.0020.0002] # PAGE FACING UP 1F4C5 ; [*146E.0020.0002] # CALENDAR 1F4C6 ; [*146F.0020.0002] # TEAR-OFF CALENDAR 1F4C7 ; [*1470.0020.0002] # CARD INDEX 1F4C8 ; [*1471.0020.0002] # CHART WITH UPWARDS TREND 1F4C9 ; [*1472.0020.0002] # CHART WITH DOWNWARDS TREND 1F4CA ; [*1473.0020.0002] # BAR CHART 1F4CB ; [*1474.0020.0002] # CLIPBOARD 1F4CC ; [*1475.0020.0002] # PUSHPIN 1F4CD ; [*1476.0020.0002] # ROUND PUSHPIN 1F4CE ; [*1477.0020.0002] # PAPERCLIP 1F4CF ; [*1478.0020.0002] # STRAIGHT RULER 1F4D0 ; [*1479.0020.0002] # TRIANGULAR RULER 1F4D1 ; [*147A.0020.0002] # BOOKMARK TABS 1F4D2 ; [*147B.0020.0002] # LEDGER 1F4D3 ; [*147C.0020.0002] # NOTEBOOK 1F4D4 ; [*147D.0020.0002] # NOTEBOOK WITH DECORATIVE COVER 1F4D5 ; [*147E.0020.0002] # CLOSED BOOK 1F4D6 ; [*147F.0020.0002] # OPEN BOOK 1F4D7 ; [*1480.0020.0002] # GREEN BOOK 1F4D8 ; [*1481.0020.0002] # BLUE BOOK 1F4D9 ; [*1482.0020.0002] # ORANGE BOOK 1F4DA ; [*1483.0020.0002] # BOOKS 1F4DB ; [*1484.0020.0002] # NAME BADGE 1F4DC ; [*1485.0020.0002] # SCROLL 1F4DD ; [*1486.0020.0002] # MEMO 1F4DE ; [*1487.0020.0002] # TELEPHONE RECEIVER 1F4DF ; [*1488.0020.0002] # PAGER 1F4E0 ; [*1489.0020.0002] # FAX MACHINE 1F4E1 ; [*148A.0020.0002] # SATELLITE ANTENNA 1F4E2 ; [*148B.0020.0002] # PUBLIC ADDRESS LOUDSPEAKER 1F4E3 ; [*148C.0020.0002] # CHEERING MEGAPHONE 1F4E4 ; [*148D.0020.0002] # OUTBOX TRAY 1F4E5 ; [*148E.0020.0002] # INBOX TRAY 1F4E6 ; [*148F.0020.0002] # PACKAGE 1F4E7 ; [*1490.0020.0002] # E-MAIL SYMBOL 1F4E8 ; [*1491.0020.0002] # INCOMING ENVELOPE 1F4E9 ; [*1492.0020.0002] # ENVELOPE WITH DOWNWARDS ARROW ABOVE 1F4EA ; [*1493.0020.0002] # CLOSED MAILBOX WITH LOWERED FLAG 1F4EB ; [*1494.0020.0002] # CLOSED MAILBOX WITH RAISED FLAG 1F4EC ; [*1495.0020.0002] # OPEN MAILBOX WITH RAISED FLAG 1F4ED ; [*1496.0020.0002] # OPEN MAILBOX WITH LOWERED FLAG 1F4EE ; [*1497.0020.0002] # POSTBOX 1F4EF ; [*1498.0020.0002] # POSTAL HORN 1F4F0 ; [*1499.0020.0002] # NEWSPAPER 1F4F1 ; [*149A.0020.0002] # MOBILE PHONE 1F4F2 ; [*149B.0020.0002] # MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT 1F4F3 ; [*149C.0020.0002] # VIBRATION MODE 1F4F4 ; [*149D.0020.0002] # MOBILE PHONE OFF 1F4F5 ; [*149E.0020.0002] # NO MOBILE PHONES 1F4F6 ; [*149F.0020.0002] # ANTENNA WITH BARS 1F4F7 ; [*14A0.0020.0002] # CAMERA 1F4F8 ; [*14A1.0020.0002] # CAMERA WITH FLASH 1F4F9 ; [*14A2.0020.0002] # VIDEO CAMERA 1F4FA ; [*14A3.0020.0002] # TELEVISION 1F4FB ; [*14A4.0020.0002] # RADIO 1F4FC ; [*14A5.0020.0002] # VIDEOCASSETTE 1F4FD ; [*14A6.0020.0002] # FILM PROJECTOR 1F4FE ; [*14A7.0020.0002] # PORTABLE STEREO 1F4FF ; [*14A8.0020.0002] # PRAYER BEADS 1F500 ; [*14A9.0020.0002] # TWISTED RIGHTWARDS ARROWS 1F501 ; [*14AA.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS 1F502 ; [*14AB.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY 1F503 ; [*14AC.0020.0002] # CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS 1F504 ; [*14AD.0020.0002] # ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS 1F505 ; [*14AE.0020.0002] # LOW BRIGHTNESS SYMBOL 1F506 ; [*14AF.0020.0002] # HIGH BRIGHTNESS SYMBOL 1F507 ; [*14B0.0020.0002] # SPEAKER WITH CANCELLATION STROKE 1F508 ; [*14B1.0020.0002] # SPEAKER 1F509 ; [*14B2.0020.0002] # SPEAKER WITH ONE SOUND WAVE 1F50A ; [*14B3.0020.0002] # SPEAKER WITH THREE SOUND WAVES 1F50B ; [*14B4.0020.0002] # BATTERY 1F50C ; [*14B5.0020.0002] # ELECTRIC PLUG 1F50D ; [*14B6.0020.0002] # LEFT-POINTING MAGNIFYING GLASS 1F50E ; [*14B7.0020.0002] # RIGHT-POINTING MAGNIFYING GLASS 1F50F ; [*14B8.0020.0002] # LOCK WITH INK PEN 1F510 ; [*14B9.0020.0002] # CLOSED LOCK WITH KEY 1F511 ; [*14BA.0020.0002] # KEY 1F512 ; [*14BB.0020.0002] # LOCK 1F513 ; [*14BC.0020.0002] # OPEN LOCK 1F514 ; [*14BD.0020.0002] # BELL 1F515 ; [*14BE.0020.0002] # BELL WITH CANCELLATION STROKE 1F516 ; [*14BF.0020.0002] # BOOKMARK 1F517 ; [*14C0.0020.0002] # LINK SYMBOL 1F518 ; [*14C1.0020.0002] # RADIO BUTTON 1F519 ; [*14C2.0020.0002] # BACK WITH LEFTWARDS ARROW ABOVE 1F51A ; [*14C3.0020.0002] # END WITH LEFTWARDS ARROW ABOVE 1F51B ; [*14C4.0020.0002] # ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE 1F51C ; [*14C5.0020.0002] # SOON WITH RIGHTWARDS ARROW ABOVE 1F51D ; [*14C6.0020.0002] # TOP WITH UPWARDS ARROW ABOVE 1F51E ; [*14C7.0020.0002] # NO ONE UNDER EIGHTEEN SYMBOL 1F51F ; [*14C8.0020.0002] # KEYCAP TEN 1F520 ; [*14C9.0020.0002] # INPUT SYMBOL FOR LATIN CAPITAL LETTERS 1F521 ; [*14CA.0020.0002] # INPUT SYMBOL FOR LATIN SMALL LETTERS 1F522 ; [*14CB.0020.0002] # INPUT SYMBOL FOR NUMBERS 1F523 ; [*14CC.0020.0002] # INPUT SYMBOL FOR SYMBOLS 1F524 ; [*14CD.0020.0002] # INPUT SYMBOL FOR LATIN LETTERS 1F525 ; [*14CE.0020.0002] # FIRE 1F526 ; [*14CF.0020.0002] # ELECTRIC TORCH 1F527 ; [*14D0.0020.0002] # WRENCH 1F528 ; [*14D1.0020.0002] # HAMMER 1F529 ; [*14D2.0020.0002] # NUT AND BOLT 1F52A ; [*14D3.0020.0002] # HOCHO 1F52B ; [*14D4.0020.0002] # PISTOL 1F52C ; [*14D5.0020.0002] # MICROSCOPE 1F52D ; [*14D6.0020.0002] # TELESCOPE 1F52E ; [*14D7.0020.0002] # CRYSTAL BALL 1F52F ; [*14D8.0020.0002] # SIX POINTED STAR WITH MIDDLE DOT 1F530 ; [*14D9.0020.0002] # JAPANESE SYMBOL FOR BEGINNER 1F531 ; [*14DA.0020.0002] # TRIDENT EMBLEM 1F532 ; [*14DB.0020.0002] # BLACK SQUARE BUTTON 1F533 ; [*14DC.0020.0002] # WHITE SQUARE BUTTON 1F534 ; [*14DD.0020.0002] # LARGE RED CIRCLE 1F535 ; [*14DE.0020.0002] # LARGE BLUE CIRCLE 1F536 ; [*14DF.0020.0002] # LARGE ORANGE DIAMOND 1F537 ; [*14E0.0020.0002] # LARGE BLUE DIAMOND 1F538 ; [*14E1.0020.0002] # SMALL ORANGE DIAMOND 1F539 ; [*14E2.0020.0002] # SMALL BLUE DIAMOND 1F53A ; [*14E3.0020.0002] # UP-POINTING RED TRIANGLE 1F53B ; [*14E4.0020.0002] # DOWN-POINTING RED TRIANGLE 1F53C ; [*14E5.0020.0002] # UP-POINTING SMALL RED TRIANGLE 1F53D ; [*14E6.0020.0002] # DOWN-POINTING SMALL RED TRIANGLE 1F53E ; [*14E7.0020.0002] # LOWER RIGHT SHADOWED WHITE CIRCLE 1F53F ; [*14E8.0020.0002] # UPPER RIGHT SHADOWED WHITE CIRCLE 1F540 ; [*14E9.0020.0002] # CIRCLED CROSS POMMEE 1F541 ; [*14EA.0020.0002] # CROSS POMMEE WITH HALF-CIRCLE BELOW 1F542 ; [*14EB.0020.0002] # CROSS POMMEE 1F543 ; [*14EC.0020.0002] # NOTCHED LEFT SEMICIRCLE WITH THREE DOTS 1F544 ; [*14ED.0020.0002] # NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS 1F545 ; [*14EE.0020.0002] # SYMBOL FOR MARKS CHAPTER 1F546 ; [*14EF.0020.0002] # WHITE LATIN CROSS 1F547 ; [*14F0.0020.0002] # HEAVY LATIN CROSS 1F548 ; [*14F1.0020.0002] # CELTIC CROSS 1F549 ; [*14F2.0020.0002] # OM SYMBOL 1F54A ; [*14F3.0020.0002] # DOVE OF PEACE 1F54B ; [*14F4.0020.0002] # KAABA 1F54C ; [*14F5.0020.0002] # MOSQUE 1F54D ; [*14F6.0020.0002] # SYNAGOGUE 1F54E ; [*14F7.0020.0002] # MENORAH WITH NINE BRANCHES 1F54F ; [*14F8.0020.0002] # BOWL OF HYGIEIA 1F550 ; [*14F9.0020.0002] # CLOCK FACE ONE OCLOCK 1F551 ; [*14FA.0020.0002] # CLOCK FACE TWO OCLOCK 1F552 ; [*14FB.0020.0002] # CLOCK FACE THREE OCLOCK 1F553 ; [*14FC.0020.0002] # CLOCK FACE FOUR OCLOCK 1F554 ; [*14FD.0020.0002] # CLOCK FACE FIVE OCLOCK 1F555 ; [*14FE.0020.0002] # CLOCK FACE SIX OCLOCK 1F556 ; [*14FF.0020.0002] # CLOCK FACE SEVEN OCLOCK 1F557 ; [*1500.0020.0002] # CLOCK FACE EIGHT OCLOCK 1F558 ; [*1501.0020.0002] # CLOCK FACE NINE OCLOCK 1F559 ; [*1502.0020.0002] # CLOCK FACE TEN OCLOCK 1F55A ; [*1503.0020.0002] # CLOCK FACE ELEVEN OCLOCK 1F55B ; [*1504.0020.0002] # CLOCK FACE TWELVE OCLOCK 1F55C ; [*1505.0020.0002] # CLOCK FACE ONE-THIRTY 1F55D ; [*1506.0020.0002] # CLOCK FACE TWO-THIRTY 1F55E ; [*1507.0020.0002] # CLOCK FACE THREE-THIRTY 1F55F ; [*1508.0020.0002] # CLOCK FACE FOUR-THIRTY 1F560 ; [*1509.0020.0002] # CLOCK FACE FIVE-THIRTY 1F561 ; [*150A.0020.0002] # CLOCK FACE SIX-THIRTY 1F562 ; [*150B.0020.0002] # CLOCK FACE SEVEN-THIRTY 1F563 ; [*150C.0020.0002] # CLOCK FACE EIGHT-THIRTY 1F564 ; [*150D.0020.0002] # CLOCK FACE NINE-THIRTY 1F565 ; [*150E.0020.0002] # CLOCK FACE TEN-THIRTY 1F566 ; [*150F.0020.0002] # CLOCK FACE ELEVEN-THIRTY 1F567 ; [*1510.0020.0002] # CLOCK FACE TWELVE-THIRTY 1F568 ; [*1511.0020.0002] # RIGHT SPEAKER 1F569 ; [*1512.0020.0002] # RIGHT SPEAKER WITH ONE SOUND WAVE 1F56A ; [*1513.0020.0002] # RIGHT SPEAKER WITH THREE SOUND WAVES 1F56B ; [*1514.0020.0002] # BULLHORN 1F56C ; [*1515.0020.0002] # BULLHORN WITH SOUND WAVES 1F56D ; [*1516.0020.0002] # RINGING BELL 1F56E ; [*1517.0020.0002] # BOOK 1F56F ; [*1518.0020.0002] # CANDLE 1F570 ; [*1519.0020.0002] # MANTELPIECE CLOCK 1F571 ; [*151A.0020.0002] # BLACK SKULL AND CROSSBONES 1F572 ; [*151B.0020.0002] # NO PIRACY 1F573 ; [*151C.0020.0002] # HOLE 1F574 ; [*151D.0020.0002] # MAN IN BUSINESS SUIT LEVITATING 1F575 ; [*151E.0020.0002] # SLEUTH OR SPY 1F576 ; [*151F.0020.0002] # DARK SUNGLASSES 1F577 ; [*1520.0020.0002] # SPIDER 1F578 ; [*1521.0020.0002] # SPIDER WEB 1F579 ; [*1522.0020.0002] # JOYSTICK 1F57A ; [*1523.0020.0002] # MAN DANCING 1F57B ; [*1524.0020.0002] # LEFT HAND TELEPHONE RECEIVER 1F57C ; [*1525.0020.0002] # TELEPHONE RECEIVER WITH PAGE 1F57D ; [*1526.0020.0002] # RIGHT HAND TELEPHONE RECEIVER 1F57E ; [*1527.0020.0002] # WHITE TOUCHTONE TELEPHONE 1F57F ; [*1528.0020.0002] # BLACK TOUCHTONE TELEPHONE 1F580 ; [*1529.0020.0002] # TELEPHONE ON TOP OF MODEM 1F581 ; [*152A.0020.0002] # CLAMSHELL MOBILE PHONE 1F582 ; [*152B.0020.0002] # BACK OF ENVELOPE 1F583 ; [*152C.0020.0002] # STAMPED ENVELOPE 1F584 ; [*152D.0020.0002] # ENVELOPE WITH LIGHTNING 1F585 ; [*152E.0020.0002] # FLYING ENVELOPE 1F586 ; [*152F.0020.0002] # PEN OVER STAMPED ENVELOPE 1F587 ; [*1530.0020.0002] # LINKED PAPERCLIPS 1F588 ; [*1531.0020.0002] # BLACK PUSHPIN 1F589 ; [*1532.0020.0002] # LOWER LEFT PENCIL 1F58A ; [*1533.0020.0002] # LOWER LEFT BALLPOINT PEN 1F58B ; [*1534.0020.0002] # LOWER LEFT FOUNTAIN PEN 1F58C ; [*1535.0020.0002] # LOWER LEFT PAINTBRUSH 1F58D ; [*1536.0020.0002] # LOWER LEFT CRAYON 1F58E ; [*1537.0020.0002] # LEFT WRITING HAND 1F58F ; [*1538.0020.0002] # TURNED OK HAND SIGN 1F590 ; [*1539.0020.0002] # RAISED HAND WITH FINGERS SPLAYED 1F591 ; [*153A.0020.0002] # REVERSED RAISED HAND WITH FINGERS SPLAYED 1F592 ; [*153B.0020.0002] # REVERSED THUMBS UP SIGN 1F593 ; [*153C.0020.0002] # REVERSED THUMBS DOWN SIGN 1F594 ; [*153D.0020.0002] # REVERSED VICTORY HAND 1F595 ; [*153E.0020.0002] # REVERSED HAND WITH MIDDLE FINGER EXTENDED 1F596 ; [*153F.0020.0002] # RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS 1F597 ; [*1540.0020.0002] # WHITE DOWN POINTING LEFT HAND INDEX 1F598 ; [*1541.0020.0002] # SIDEWAYS WHITE LEFT POINTING INDEX 1F599 ; [*1542.0020.0002] # SIDEWAYS WHITE RIGHT POINTING INDEX 1F59A ; [*1543.0020.0002] # SIDEWAYS BLACK LEFT POINTING INDEX 1F59B ; [*1544.0020.0002] # SIDEWAYS BLACK RIGHT POINTING INDEX 1F59C ; [*1545.0020.0002] # BLACK LEFT POINTING BACKHAND INDEX 1F59D ; [*1546.0020.0002] # BLACK RIGHT POINTING BACKHAND INDEX 1F59E ; [*1547.0020.0002] # SIDEWAYS WHITE UP POINTING INDEX 1F59F ; [*1548.0020.0002] # SIDEWAYS WHITE DOWN POINTING INDEX 1F5A0 ; [*1549.0020.0002] # SIDEWAYS BLACK UP POINTING INDEX 1F5A1 ; [*154A.0020.0002] # SIDEWAYS BLACK DOWN POINTING INDEX 1F5A2 ; [*154B.0020.0002] # BLACK UP POINTING BACKHAND INDEX 1F5A3 ; [*154C.0020.0002] # BLACK DOWN POINTING BACKHAND INDEX 1F5A4 ; [*154D.0020.0002] # BLACK HEART 1F5A5 ; [*154E.0020.0002] # DESKTOP COMPUTER 1F5A6 ; [*154F.0020.0002] # KEYBOARD AND MOUSE 1F5A7 ; [*1550.0020.0002] # THREE NETWORKED COMPUTERS 1F5A8 ; [*1551.0020.0002] # PRINTER 1F5A9 ; [*1552.0020.0002] # POCKET CALCULATOR 1F5AA ; [*1553.0020.0002] # BLACK HARD SHELL FLOPPY DISK 1F5AB ; [*1554.0020.0002] # WHITE HARD SHELL FLOPPY DISK 1F5AC ; [*1555.0020.0002] # SOFT SHELL FLOPPY DISK 1F5AD ; [*1556.0020.0002] # TAPE CARTRIDGE 1F5AE ; [*1557.0020.0002] # WIRED KEYBOARD 1F5AF ; [*1558.0020.0002] # ONE BUTTON MOUSE 1F5B0 ; [*1559.0020.0002] # TWO BUTTON MOUSE 1F5B1 ; [*155A.0020.0002] # THREE BUTTON MOUSE 1F5B2 ; [*155B.0020.0002] # TRACKBALL 1F5B3 ; [*155C.0020.0002] # OLD PERSONAL COMPUTER 1F5B4 ; [*155D.0020.0002] # HARD DISK 1F5B5 ; [*155E.0020.0002] # SCREEN 1F5B6 ; [*155F.0020.0002] # PRINTER ICON 1F5B7 ; [*1560.0020.0002] # FAX ICON 1F5B8 ; [*1561.0020.0002] # OPTICAL DISC ICON 1F5B9 ; [*1562.0020.0002] # DOCUMENT WITH TEXT 1F5BA ; [*1563.0020.0002] # DOCUMENT WITH TEXT AND PICTURE 1F5BB ; [*1564.0020.0002] # DOCUMENT WITH PICTURE 1F5BC ; [*1565.0020.0002] # FRAME WITH PICTURE 1F5BD ; [*1566.0020.0002] # FRAME WITH TILES 1F5BE ; [*1567.0020.0002] # FRAME WITH AN X 1F5BF ; [*1568.0020.0002] # BLACK FOLDER 1F5C0 ; [*1569.0020.0002] # FOLDER 1F5C1 ; [*156A.0020.0002] # OPEN FOLDER 1F5C2 ; [*156B.0020.0002] # CARD INDEX DIVIDERS 1F5C3 ; [*156C.0020.0002] # CARD FILE BOX 1F5C4 ; [*156D.0020.0002] # FILE CABINET 1F5C5 ; [*156E.0020.0002] # EMPTY NOTE 1F5C6 ; [*156F.0020.0002] # EMPTY NOTE PAGE 1F5C7 ; [*1570.0020.0002] # EMPTY NOTE PAD 1F5C8 ; [*1571.0020.0002] # NOTE 1F5C9 ; [*1572.0020.0002] # NOTE PAGE 1F5CA ; [*1573.0020.0002] # NOTE PAD 1F5CB ; [*1574.0020.0002] # EMPTY DOCUMENT 1F5CC ; [*1575.0020.0002] # EMPTY PAGE 1F5CD ; [*1576.0020.0002] # EMPTY PAGES 1F5CE ; [*1577.0020.0002] # DOCUMENT 1F5CF ; [*1578.0020.0002] # PAGE 1F5D0 ; [*1579.0020.0002] # PAGES 1F5D1 ; [*157A.0020.0002] # WASTEBASKET 1F5D2 ; [*157B.0020.0002] # SPIRAL NOTE PAD 1F5D3 ; [*157C.0020.0002] # SPIRAL CALENDAR PAD 1F5D4 ; [*157D.0020.0002] # DESKTOP WINDOW 1F5D5 ; [*157E.0020.0002] # MINIMIZE 1F5D6 ; [*157F.0020.0002] # MAXIMIZE 1F5D7 ; [*1580.0020.0002] # OVERLAP 1F5D8 ; [*1581.0020.0002] # CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS 1F5D9 ; [*1582.0020.0002] # CANCELLATION X 1F5DA ; [*1583.0020.0002] # INCREASE FONT SIZE SYMBOL 1F5DB ; [*1584.0020.0002] # DECREASE FONT SIZE SYMBOL 1F5DC ; [*1585.0020.0002] # COMPRESSION 1F5DD ; [*1586.0020.0002] # OLD KEY 1F5DE ; [*1587.0020.0002] # ROLLED-UP NEWSPAPER 1F5DF ; [*1588.0020.0002] # PAGE WITH CIRCLED TEXT 1F5E0 ; [*1589.0020.0002] # STOCK CHART 1F5E1 ; [*158A.0020.0002] # DAGGER KNIFE 1F5E2 ; [*158B.0020.0002] # LIPS 1F5E3 ; [*158C.0020.0002] # SPEAKING HEAD IN SILHOUETTE 1F5E4 ; [*158D.0020.0002] # THREE RAYS ABOVE 1F5E5 ; [*158E.0020.0002] # THREE RAYS BELOW 1F5E6 ; [*158F.0020.0002] # THREE RAYS LEFT 1F5E7 ; [*1590.0020.0002] # THREE RAYS RIGHT 1F5E8 ; [*1591.0020.0002] # LEFT SPEECH BUBBLE 1F5E9 ; [*1592.0020.0002] # RIGHT SPEECH BUBBLE 1F5EA ; [*1593.0020.0002] # TWO SPEECH BUBBLES 1F5EB ; [*1594.0020.0002] # THREE SPEECH BUBBLES 1F5EC ; [*1595.0020.0002] # LEFT THOUGHT BUBBLE 1F5ED ; [*1596.0020.0002] # RIGHT THOUGHT BUBBLE 1F5EE ; [*1597.0020.0002] # LEFT ANGER BUBBLE 1F5EF ; [*1598.0020.0002] # RIGHT ANGER BUBBLE 1F5F0 ; [*1599.0020.0002] # MOOD BUBBLE 1F5F1 ; [*159A.0020.0002] # LIGHTNING MOOD BUBBLE 1F5F2 ; [*159B.0020.0002] # LIGHTNING MOOD 1F5F3 ; [*159C.0020.0002] # BALLOT BOX WITH BALLOT 1F5F4 ; [*159D.0020.0002] # BALLOT SCRIPT X 1F5F5 ; [*159E.0020.0002] # BALLOT BOX WITH SCRIPT X 1F5F6 ; [*159F.0020.0002] # BALLOT BOLD SCRIPT X 1F5F7 ; [*15A0.0020.0002] # BALLOT BOX WITH BOLD SCRIPT X 1F5F8 ; [*15A1.0020.0002] # LIGHT CHECK MARK 1F5F9 ; [*15A2.0020.0002] # BALLOT BOX WITH BOLD CHECK 1F5FA ; [*15A3.0020.0002] # WORLD MAP 1F5FB ; [*15A4.0020.0002] # MOUNT FUJI 1F5FC ; [*15A5.0020.0002] # TOKYO TOWER 1F5FD ; [*15A6.0020.0002] # STATUE OF LIBERTY 1F5FE ; [*15A7.0020.0002] # SILHOUETTE OF JAPAN 1F5FF ; [*15A8.0020.0002] # MOYAI 1F600 ; [*15FB.0020.0002] # GRINNING FACE 1F601 ; [*15FC.0020.0002] # GRINNING FACE WITH SMILING EYES 1F602 ; [*15FD.0020.0002] # FACE WITH TEARS OF JOY 1F603 ; [*15FE.0020.0002] # SMILING FACE WITH OPEN MOUTH 1F604 ; [*15FF.0020.0002] # SMILING FACE WITH OPEN MOUTH AND SMILING EYES 1F605 ; [*1600.0020.0002] # SMILING FACE WITH OPEN MOUTH AND COLD SWEAT 1F606 ; [*1601.0020.0002] # SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES 1F607 ; [*1602.0020.0002] # SMILING FACE WITH HALO 1F608 ; [*1603.0020.0002] # SMILING FACE WITH HORNS 1F609 ; [*1604.0020.0002] # WINKING FACE 1F60A ; [*1605.0020.0002] # SMILING FACE WITH SMILING EYES 1F60B ; [*1606.0020.0002] # FACE SAVOURING DELICIOUS FOOD 1F60C ; [*1607.0020.0002] # RELIEVED FACE 1F60D ; [*1608.0020.0002] # SMILING FACE WITH HEART-SHAPED EYES 1F60E ; [*1609.0020.0002] # SMILING FACE WITH SUNGLASSES 1F60F ; [*160A.0020.0002] # SMIRKING FACE 1F610 ; [*160B.0020.0002] # NEUTRAL FACE 1F611 ; [*160C.0020.0002] # EXPRESSIONLESS FACE 1F612 ; [*160D.0020.0002] # UNAMUSED FACE 1F613 ; [*160E.0020.0002] # FACE WITH COLD SWEAT 1F614 ; [*160F.0020.0002] # PENSIVE FACE 1F615 ; [*1610.0020.0002] # CONFUSED FACE 1F616 ; [*1611.0020.0002] # CONFOUNDED FACE 1F617 ; [*1612.0020.0002] # KISSING FACE 1F618 ; [*1613.0020.0002] # FACE THROWING A KISS 1F619 ; [*1614.0020.0002] # KISSING FACE WITH SMILING EYES 1F61A ; [*1615.0020.0002] # KISSING FACE WITH CLOSED EYES 1F61B ; [*1616.0020.0002] # FACE WITH STUCK-OUT TONGUE 1F61C ; [*1617.0020.0002] # FACE WITH STUCK-OUT TONGUE AND WINKING EYE 1F61D ; [*1618.0020.0002] # FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES 1F61E ; [*1619.0020.0002] # DISAPPOINTED FACE 1F61F ; [*161A.0020.0002] # WORRIED FACE 1F620 ; [*161B.0020.0002] # ANGRY FACE 1F621 ; [*161C.0020.0002] # POUTING FACE 1F622 ; [*161D.0020.0002] # CRYING FACE 1F623 ; [*161E.0020.0002] # PERSEVERING FACE 1F624 ; [*161F.0020.0002] # FACE WITH LOOK OF TRIUMPH 1F625 ; [*1620.0020.0002] # DISAPPOINTED BUT RELIEVED FACE 1F626 ; [*1621.0020.0002] # FROWNING FACE WITH OPEN MOUTH 1F627 ; [*1622.0020.0002] # ANGUISHED FACE 1F628 ; [*1623.0020.0002] # FEARFUL FACE 1F629 ; [*1624.0020.0002] # WEARY FACE 1F62A ; [*1625.0020.0002] # SLEEPY FACE 1F62B ; [*1626.0020.0002] # TIRED FACE 1F62C ; [*1627.0020.0002] # GRIMACING FACE 1F62D ; [*1628.0020.0002] # LOUDLY CRYING FACE 1F62E ; [*1629.0020.0002] # FACE WITH OPEN MOUTH 1F62F ; [*162A.0020.0002] # HUSHED FACE 1F630 ; [*162B.0020.0002] # FACE WITH OPEN MOUTH AND COLD SWEAT 1F631 ; [*162C.0020.0002] # FACE SCREAMING IN FEAR 1F632 ; [*162D.0020.0002] # ASTONISHED FACE 1F633 ; [*162E.0020.0002] # FLUSHED FACE 1F634 ; [*162F.0020.0002] # SLEEPING FACE 1F635 ; [*1630.0020.0002] # DIZZY FACE 1F636 ; [*1631.0020.0002] # FACE WITHOUT MOUTH 1F637 ; [*1632.0020.0002] # FACE WITH MEDICAL MASK 1F638 ; [*1633.0020.0002] # GRINNING CAT FACE WITH SMILING EYES 1F639 ; [*1634.0020.0002] # CAT FACE WITH TEARS OF JOY 1F63A ; [*1635.0020.0002] # SMILING CAT FACE WITH OPEN MOUTH 1F63B ; [*1636.0020.0002] # SMILING CAT FACE WITH HEART-SHAPED EYES 1F63C ; [*1637.0020.0002] # CAT FACE WITH WRY SMILE 1F63D ; [*1638.0020.0002] # KISSING CAT FACE WITH CLOSED EYES 1F63E ; [*1639.0020.0002] # POUTING CAT FACE 1F63F ; [*163A.0020.0002] # CRYING CAT FACE 1F640 ; [*163B.0020.0002] # WEARY CAT FACE 1F641 ; [*163C.0020.0002] # SLIGHTLY FROWNING FACE 1F642 ; [*163D.0020.0002] # SLIGHTLY SMILING FACE 1F643 ; [*163E.0020.0002] # UPSIDE-DOWN FACE 1F644 ; [*163F.0020.0002] # FACE WITH ROLLING EYES 1F645 ; [*1640.0020.0002] # FACE WITH NO GOOD GESTURE 1F646 ; [*1641.0020.0002] # FACE WITH OK GESTURE 1F647 ; [*1642.0020.0002] # PERSON BOWING DEEPLY 1F648 ; [*1643.0020.0002] # SEE-NO-EVIL MONKEY 1F649 ; [*1644.0020.0002] # HEAR-NO-EVIL MONKEY 1F64A ; [*1645.0020.0002] # SPEAK-NO-EVIL MONKEY 1F64B ; [*1646.0020.0002] # HAPPY PERSON RAISING ONE HAND 1F64C ; [*1647.0020.0002] # PERSON RAISING BOTH HANDS IN CELEBRATION 1F64D ; [*1648.0020.0002] # PERSON FROWNING 1F64E ; [*1649.0020.0002] # PERSON WITH POUTING FACE 1F64F ; [*164A.0020.0002] # PERSON WITH FOLDED HANDS 1F650 ; [*164B.0020.0002] # NORTH WEST POINTING LEAF 1F651 ; [*164C.0020.0002] # SOUTH WEST POINTING LEAF 1F652 ; [*164D.0020.0002] # NORTH EAST POINTING LEAF 1F653 ; [*164E.0020.0002] # SOUTH EAST POINTING LEAF 1F654 ; [*164F.0020.0002] # TURNED NORTH WEST POINTING LEAF 1F655 ; [*1650.0020.0002] # TURNED SOUTH WEST POINTING LEAF 1F656 ; [*1651.0020.0002] # TURNED NORTH EAST POINTING LEAF 1F657 ; [*1652.0020.0002] # TURNED SOUTH EAST POINTING LEAF 1F658 ; [*1653.0020.0002] # NORTH WEST POINTING VINE LEAF 1F659 ; [*1654.0020.0002] # SOUTH WEST POINTING VINE LEAF 1F65A ; [*1655.0020.0002] # NORTH EAST POINTING VINE LEAF 1F65B ; [*1656.0020.0002] # SOUTH EAST POINTING VINE LEAF 1F65C ; [*1657.0020.0002] # HEAVY NORTH WEST POINTING VINE LEAF 1F65D ; [*1658.0020.0002] # HEAVY SOUTH WEST POINTING VINE LEAF 1F65E ; [*1659.0020.0002] # HEAVY NORTH EAST POINTING VINE LEAF 1F65F ; [*165A.0020.0002] # HEAVY SOUTH EAST POINTING VINE LEAF 1F660 ; [*165B.0020.0002] # NORTH WEST POINTING BUD 1F661 ; [*165C.0020.0002] # SOUTH WEST POINTING BUD 1F662 ; [*165D.0020.0002] # NORTH EAST POINTING BUD 1F663 ; [*165E.0020.0002] # SOUTH EAST POINTING BUD 1F664 ; [*165F.0020.0002] # HEAVY NORTH WEST POINTING BUD 1F665 ; [*1660.0020.0002] # HEAVY SOUTH WEST POINTING BUD 1F666 ; [*1661.0020.0002] # HEAVY NORTH EAST POINTING BUD 1F667 ; [*1662.0020.0002] # HEAVY SOUTH EAST POINTING BUD 1F668 ; [*1663.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT 1F669 ; [*1664.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE 1F66A ; [*1665.0020.0002] # SOLID QUILT SQUARE ORNAMENT 1F66B ; [*1666.0020.0002] # SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE 1F66C ; [*1667.0020.0002] # LEFTWARDS ROCKET 1F66D ; [*1668.0020.0002] # UPWARDS ROCKET 1F66E ; [*1669.0020.0002] # RIGHTWARDS ROCKET 1F66F ; [*166A.0020.0002] # DOWNWARDS ROCKET 1F670 ; [*166B.0020.0002] # SCRIPT LIGATURE ET ORNAMENT 1F671 ; [*166C.0020.0002] # HEAVY SCRIPT LIGATURE ET ORNAMENT 1F672 ; [*166D.0020.0002] # LIGATURE OPEN ET ORNAMENT 1F673 ; [*166E.0020.0002] # HEAVY LIGATURE OPEN ET ORNAMENT 1F674 ; [*166F.0020.0002] # HEAVY AMPERSAND ORNAMENT 1F675 ; [*1670.0020.0002] # SWASH AMPERSAND ORNAMENT 1F676 ; [*1671.0020.0002] # SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT 1F677 ; [*1672.0020.0002] # SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT 1F678 ; [*1673.0020.0002] # SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT 1F679 ; [*1674.0020.0002] # HEAVY INTERROBANG ORNAMENT 1F67A ; [*1675.0020.0002] # SANS-SERIF INTERROBANG ORNAMENT 1F67B ; [*1676.0020.0002] # HEAVY SANS-SERIF INTERROBANG ORNAMENT 1F67C ; [*1677.0020.0002] # VERY HEAVY SOLIDUS 1F67D ; [*1678.0020.0002] # VERY HEAVY REVERSE SOLIDUS 1F67E ; [*1679.0020.0002] # CHECKER BOARD 1F67F ; [*167A.0020.0002] # REVERSE CHECKER BOARD 1F680 ; [*167B.0020.0002] # ROCKET 1F681 ; [*167C.0020.0002] # HELICOPTER 1F682 ; [*167D.0020.0002] # STEAM LOCOMOTIVE 1F683 ; [*167E.0020.0002] # RAILWAY CAR 1F684 ; [*167F.0020.0002] # HIGH-SPEED TRAIN 1F685 ; [*1680.0020.0002] # HIGH-SPEED TRAIN WITH BULLET NOSE 1F686 ; [*1681.0020.0002] # TRAIN 1F687 ; [*1682.0020.0002] # METRO 1F688 ; [*1683.0020.0002] # LIGHT RAIL 1F689 ; [*1684.0020.0002] # STATION 1F68A ; [*1685.0020.0002] # TRAM 1F68B ; [*1686.0020.0002] # TRAM CAR 1F68C ; [*1687.0020.0002] # BUS 1F68D ; [*1688.0020.0002] # ONCOMING BUS 1F68E ; [*1689.0020.0002] # TROLLEYBUS 1F68F ; [*168A.0020.0002] # BUS STOP 1F690 ; [*168B.0020.0002] # MINIBUS 1F691 ; [*168C.0020.0002] # AMBULANCE 1F692 ; [*168D.0020.0002] # FIRE ENGINE 1F693 ; [*168E.0020.0002] # POLICE CAR 1F694 ; [*168F.0020.0002] # ONCOMING POLICE CAR 1F695 ; [*1690.0020.0002] # TAXI 1F696 ; [*1691.0020.0002] # ONCOMING TAXI 1F697 ; [*1692.0020.0002] # AUTOMOBILE 1F698 ; [*1693.0020.0002] # ONCOMING AUTOMOBILE 1F699 ; [*1694.0020.0002] # RECREATIONAL VEHICLE 1F69A ; [*1695.0020.0002] # DELIVERY TRUCK 1F69B ; [*1696.0020.0002] # ARTICULATED LORRY 1F69C ; [*1697.0020.0002] # TRACTOR 1F69D ; [*1698.0020.0002] # MONORAIL 1F69E ; [*1699.0020.0002] # MOUNTAIN RAILWAY 1F69F ; [*169A.0020.0002] # SUSPENSION RAILWAY 1F6A0 ; [*169B.0020.0002] # MOUNTAIN CABLEWAY 1F6A1 ; [*169C.0020.0002] # AERIAL TRAMWAY 1F6A2 ; [*169D.0020.0002] # SHIP 1F6A3 ; [*169E.0020.0002] # ROWBOAT 1F6A4 ; [*169F.0020.0002] # SPEEDBOAT 1F6A5 ; [*16A0.0020.0002] # HORIZONTAL TRAFFIC LIGHT 1F6A6 ; [*16A1.0020.0002] # VERTICAL TRAFFIC LIGHT 1F6A7 ; [*16A2.0020.0002] # CONSTRUCTION SIGN 1F6A8 ; [*16A3.0020.0002] # POLICE CARS REVOLVING LIGHT 1F6A9 ; [*16A4.0020.0002] # TRIANGULAR FLAG ON POST 1F6AA ; [*16A5.0020.0002] # DOOR 1F6AB ; [*16A6.0020.0002] # NO ENTRY SIGN 1F6AC ; [*16A7.0020.0002] # SMOKING SYMBOL 1F6AD ; [*16A8.0020.0002] # NO SMOKING SYMBOL 1F6AE ; [*16A9.0020.0002] # PUT LITTER IN ITS PLACE SYMBOL 1F6AF ; [*16AA.0020.0002] # DO NOT LITTER SYMBOL 1F6B0 ; [*16AB.0020.0002] # POTABLE WATER SYMBOL 1F6B1 ; [*16AC.0020.0002] # NON-POTABLE WATER SYMBOL 1F6B2 ; [*16AD.0020.0002] # BICYCLE 1F6B3 ; [*16AE.0020.0002] # NO BICYCLES 1F6B4 ; [*16AF.0020.0002] # BICYCLIST 1F6B5 ; [*16B0.0020.0002] # MOUNTAIN BICYCLIST 1F6B6 ; [*16B1.0020.0002] # PEDESTRIAN 1F6B7 ; [*16B2.0020.0002] # NO PEDESTRIANS 1F6B8 ; [*16B3.0020.0002] # CHILDREN CROSSING 1F6B9 ; [*16B4.0020.0002] # MENS SYMBOL 1F6BA ; [*16B5.0020.0002] # WOMENS SYMBOL 1F6BB ; [*16B6.0020.0002] # RESTROOM 1F6BC ; [*16B7.0020.0002] # BABY SYMBOL 1F6BD ; [*16B8.0020.0002] # TOILET 1F6BE ; [*16B9.0020.0002] # WATER CLOSET 1F6BF ; [*16BA.0020.0002] # SHOWER 1F6C0 ; [*16BB.0020.0002] # BATH 1F6C1 ; [*16BC.0020.0002] # BATHTUB 1F6C2 ; [*16BD.0020.0002] # PASSPORT CONTROL 1F6C3 ; [*16BE.0020.0002] # CUSTOMS 1F6C4 ; [*16BF.0020.0002] # BAGGAGE CLAIM 1F6C5 ; [*16C0.0020.0002] # LEFT LUGGAGE 1F6C6 ; [*16C1.0020.0002] # TRIANGLE WITH ROUNDED CORNERS 1F6C7 ; [*16C2.0020.0002] # PROHIBITED SIGN 1F6C8 ; [*16C3.0020.0002] # CIRCLED INFORMATION SOURCE 1F6C9 ; [*16C4.0020.0002] # BOYS SYMBOL 1F6CA ; [*16C5.0020.0002] # GIRLS SYMBOL 1F6CB ; [*16C6.0020.0002] # COUCH AND LAMP 1F6CC ; [*16C7.0020.0002] # SLEEPING ACCOMMODATION 1F6CD ; [*16C8.0020.0002] # SHOPPING BAGS 1F6CE ; [*16C9.0020.0002] # BELLHOP BELL 1F6CF ; [*16CA.0020.0002] # BED 1F6D0 ; [*16CB.0020.0002] # PLACE OF WORSHIP 1F6D1 ; [*16CC.0020.0002] # OCTAGONAL SIGN 1F6D2 ; [*16CD.0020.0002] # SHOPPING TROLLEY 1F6E0 ; [*16CE.0020.0002] # HAMMER AND WRENCH 1F6E1 ; [*16CF.0020.0002] # SHIELD 1F6E2 ; [*16D0.0020.0002] # OIL DRUM 1F6E3 ; [*16D1.0020.0002] # MOTORWAY 1F6E4 ; [*16D2.0020.0002] # RAILWAY TRACK 1F6E5 ; [*16D3.0020.0002] # MOTOR BOAT 1F6E6 ; [*16D4.0020.0002] # UP-POINTING MILITARY AIRPLANE 1F6E7 ; [*16D5.0020.0002] # UP-POINTING AIRPLANE 1F6E8 ; [*16D6.0020.0002] # UP-POINTING SMALL AIRPLANE 1F6E9 ; [*16D7.0020.0002] # SMALL AIRPLANE 1F6EA ; [*16D8.0020.0002] # NORTHEAST-POINTING AIRPLANE 1F6EB ; [*16D9.0020.0002] # AIRPLANE DEPARTURE 1F6EC ; [*16DA.0020.0002] # AIRPLANE ARRIVING 1F6F0 ; [*16DB.0020.0002] # SATELLITE 1F6F1 ; [*16DC.0020.0002] # ONCOMING FIRE ENGINE 1F6F2 ; [*16DD.0020.0002] # DIESEL LOCOMOTIVE 1F6F3 ; [*16DE.0020.0002] # PASSENGER SHIP 1F6F4 ; [*16DF.0020.0002] # SCOOTER 1F6F5 ; [*16E0.0020.0002] # MOTOR SCOOTER 1F6F6 ; [*16E1.0020.0002] # CANOE 1F700 ; [*16E2.0020.0002] # ALCHEMICAL SYMBOL FOR QUINTESSENCE 1F701 ; [*16E3.0020.0002] # ALCHEMICAL SYMBOL FOR AIR 1F702 ; [*16E4.0020.0002] # ALCHEMICAL SYMBOL FOR FIRE 1F703 ; [*16E5.0020.0002] # ALCHEMICAL SYMBOL FOR EARTH 1F704 ; [*16E6.0020.0002] # ALCHEMICAL SYMBOL FOR WATER 1F705 ; [*16E7.0020.0002] # ALCHEMICAL SYMBOL FOR AQUAFORTIS 1F706 ; [*16E8.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA 1F707 ; [*16E9.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA-2 1F708 ; [*16EA.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE 1F709 ; [*16EB.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE-2 1F70A ; [*16EC.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR 1F70B ; [*16ED.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-2 1F70C ; [*16EE.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-3 1F70D ; [*16EF.0020.0002] # ALCHEMICAL SYMBOL FOR SULFUR 1F70E ; [*16F0.0020.0002] # ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR 1F70F ; [*16F1.0020.0002] # ALCHEMICAL SYMBOL FOR BLACK SULFUR 1F710 ; [*16F2.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE 1F711 ; [*16F3.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2 1F712 ; [*16F4.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3 1F713 ; [*16F5.0020.0002] # ALCHEMICAL SYMBOL FOR CINNABAR 1F714 ; [*16F6.0020.0002] # ALCHEMICAL SYMBOL FOR SALT 1F715 ; [*16F7.0020.0002] # ALCHEMICAL SYMBOL FOR NITRE 1F716 ; [*16F8.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL 1F717 ; [*16F9.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL-2 1F718 ; [*16FA.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT 1F719 ; [*16FB.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT-2 1F71A ; [*16FC.0020.0002] # ALCHEMICAL SYMBOL FOR GOLD 1F71B ; [*16FD.0020.0002] # ALCHEMICAL SYMBOL FOR SILVER 1F71C ; [*16FE.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE 1F71D ; [*16FF.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE-2 1F71E ; [*1700.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF IRON 1F71F ; [*1701.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF IRON 1F720 ; [*1702.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ORE 1F721 ; [*1703.0020.0002] # ALCHEMICAL SYMBOL FOR IRON-COPPER ORE 1F722 ; [*1704.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER 1F723 ; [*1705.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER 1F724 ; [*1706.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2 1F725 ; [*1707.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE 1F726 ; [*1708.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE 1F727 ; [*1709.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER 1F728 ; [*170A.0020.0002] # ALCHEMICAL SYMBOL FOR VERDIGRIS 1F729 ; [*170B.0020.0002] # ALCHEMICAL SYMBOL FOR TIN ORE 1F72A ; [*170C.0020.0002] # ALCHEMICAL SYMBOL FOR LEAD ORE 1F72B ; [*170D.0020.0002] # ALCHEMICAL SYMBOL FOR ANTIMONY ORE 1F72C ; [*170E.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY 1F72D ; [*170F.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY 1F72E ; [*1710.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY 1F72F ; [*1711.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY 1F730 ; [*1712.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY 1F731 ; [*1713.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2 1F732 ; [*1714.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS 1F733 ; [*1715.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-2 1F734 ; [*1716.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-3 1F735 ; [*1717.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-4 1F736 ; [*1718.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI 1F737 ; [*1719.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI-2 1F738 ; [*171A.0020.0002] # ALCHEMICAL SYMBOL FOR MARCASITE 1F739 ; [*171B.0020.0002] # ALCHEMICAL SYMBOL FOR SAL-AMMONIAC 1F73A ; [*171C.0020.0002] # ALCHEMICAL SYMBOL FOR ARSENIC 1F73B ; [*171D.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR 1F73C ; [*171E.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR-2 1F73D ; [*171F.0020.0002] # ALCHEMICAL SYMBOL FOR AURIPIGMENT 1F73E ; [*1720.0020.0002] # ALCHEMICAL SYMBOL FOR BISMUTH ORE 1F73F ; [*1721.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR 1F740 ; [*1722.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR-2 1F741 ; [*1723.0020.0002] # ALCHEMICAL SYMBOL FOR QUICK LIME 1F742 ; [*1724.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX 1F743 ; [*1725.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-2 1F744 ; [*1726.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-3 1F745 ; [*1727.0020.0002] # ALCHEMICAL SYMBOL FOR ALUM 1F746 ; [*1728.0020.0002] # ALCHEMICAL SYMBOL FOR OIL 1F747 ; [*1729.0020.0002] # ALCHEMICAL SYMBOL FOR SPIRIT 1F748 ; [*172A.0020.0002] # ALCHEMICAL SYMBOL FOR TINCTURE 1F749 ; [*172B.0020.0002] # ALCHEMICAL SYMBOL FOR GUM 1F74A ; [*172C.0020.0002] # ALCHEMICAL SYMBOL FOR WAX 1F74B ; [*172D.0020.0002] # ALCHEMICAL SYMBOL FOR POWDER 1F74C ; [*172E.0020.0002] # ALCHEMICAL SYMBOL FOR CALX 1F74D ; [*172F.0020.0002] # ALCHEMICAL SYMBOL FOR TUTTY 1F74E ; [*1730.0020.0002] # ALCHEMICAL SYMBOL FOR CAPUT MORTUUM 1F74F ; [*1731.0020.0002] # ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE 1F750 ; [*1732.0020.0002] # ALCHEMICAL SYMBOL FOR CADUCEUS 1F751 ; [*1733.0020.0002] # ALCHEMICAL SYMBOL FOR TRIDENT 1F752 ; [*1734.0020.0002] # ALCHEMICAL SYMBOL FOR STARRED TRIDENT 1F753 ; [*1735.0020.0002] # ALCHEMICAL SYMBOL FOR LODESTONE 1F754 ; [*1736.0020.0002] # ALCHEMICAL SYMBOL FOR SOAP 1F755 ; [*1737.0020.0002] # ALCHEMICAL SYMBOL FOR URINE 1F756 ; [*1738.0020.0002] # ALCHEMICAL SYMBOL FOR HORSE DUNG 1F757 ; [*1739.0020.0002] # ALCHEMICAL SYMBOL FOR ASHES 1F758 ; [*173A.0020.0002] # ALCHEMICAL SYMBOL FOR POT ASHES 1F759 ; [*173B.0020.0002] # ALCHEMICAL SYMBOL FOR BRICK 1F75A ; [*173C.0020.0002] # ALCHEMICAL SYMBOL FOR POWDERED BRICK 1F75B ; [*173D.0020.0002] # ALCHEMICAL SYMBOL FOR AMALGAM 1F75C ; [*173E.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM 1F75D ; [*173F.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2 1F75E ; [*1740.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATION 1F75F ; [*1741.0020.0002] # ALCHEMICAL SYMBOL FOR PRECIPITATE 1F760 ; [*1742.0020.0002] # ALCHEMICAL SYMBOL FOR DISTILL 1F761 ; [*1743.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE 1F762 ; [*1744.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE-2 1F763 ; [*1745.0020.0002] # ALCHEMICAL SYMBOL FOR PURIFY 1F764 ; [*1746.0020.0002] # ALCHEMICAL SYMBOL FOR PUTREFACTION 1F765 ; [*1747.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE 1F766 ; [*1748.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-2 1F767 ; [*1749.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-3 1F768 ; [*174A.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-4 1F769 ; [*174B.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-5 1F76A ; [*174C.0020.0002] # ALCHEMICAL SYMBOL FOR ALEMBIC 1F76B ; [*174D.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF MARY 1F76C ; [*174E.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF VAPOURS 1F76D ; [*174F.0020.0002] # ALCHEMICAL SYMBOL FOR RETORT 1F76E ; [*1750.0020.0002] # ALCHEMICAL SYMBOL FOR HOUR 1F76F ; [*1751.0020.0002] # ALCHEMICAL SYMBOL FOR NIGHT 1F770 ; [*1752.0020.0002] # ALCHEMICAL SYMBOL FOR DAY-NIGHT 1F771 ; [*1753.0020.0002] # ALCHEMICAL SYMBOL FOR MONTH 1F772 ; [*1754.0020.0002] # ALCHEMICAL SYMBOL FOR HALF DRAM 1F773 ; [*1755.0020.0002] # ALCHEMICAL SYMBOL FOR HALF OUNCE 1F780 ; [*1756.0020.0002] # BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE 1F781 ; [*1757.0020.0002] # BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE 1F782 ; [*1758.0020.0002] # BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE 1F783 ; [*1759.0020.0002] # BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE 1F784 ; [*175A.0020.0002] # BLACK SLIGHTLY SMALL CIRCLE 1F785 ; [*175B.0020.0002] # MEDIUM BOLD WHITE CIRCLE 1F786 ; [*175C.0020.0002] # BOLD WHITE CIRCLE 1F787 ; [*175D.0020.0002] # HEAVY WHITE CIRCLE 1F788 ; [*175E.0020.0002] # VERY HEAVY WHITE CIRCLE 1F789 ; [*175F.0020.0002] # EXTREMELY HEAVY WHITE CIRCLE 1F78A ; [*1760.0020.0002] # WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE 1F78B ; [*1761.0020.0002] # ROUND TARGET 1F78C ; [*1762.0020.0002] # BLACK TINY SQUARE 1F78D ; [*1763.0020.0002] # BLACK SLIGHTLY SMALL SQUARE 1F78E ; [*1764.0020.0002] # LIGHT WHITE SQUARE 1F78F ; [*1765.0020.0002] # MEDIUM WHITE SQUARE 1F790 ; [*1766.0020.0002] # BOLD WHITE SQUARE 1F791 ; [*1767.0020.0002] # HEAVY WHITE SQUARE 1F792 ; [*1768.0020.0002] # VERY HEAVY WHITE SQUARE 1F793 ; [*1769.0020.0002] # EXTREMELY HEAVY WHITE SQUARE 1F794 ; [*176A.0020.0002] # WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE 1F795 ; [*176B.0020.0002] # WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE 1F796 ; [*176C.0020.0002] # SQUARE TARGET 1F797 ; [*176D.0020.0002] # BLACK TINY DIAMOND 1F798 ; [*176E.0020.0002] # BLACK VERY SMALL DIAMOND 1F799 ; [*176F.0020.0002] # BLACK MEDIUM SMALL DIAMOND 1F79A ; [*1770.0020.0002] # WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND 1F79B ; [*1771.0020.0002] # WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND 1F79C ; [*1772.0020.0002] # DIAMOND TARGET 1F79D ; [*1773.0020.0002] # BLACK TINY LOZENGE 1F79E ; [*1774.0020.0002] # BLACK VERY SMALL LOZENGE 1F79F ; [*1775.0020.0002] # BLACK MEDIUM SMALL LOZENGE 1F7A0 ; [*1776.0020.0002] # WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE 1F7A1 ; [*1777.0020.0002] # THIN GREEK CROSS 1F7A2 ; [*1778.0020.0002] # LIGHT GREEK CROSS 1F7A3 ; [*1779.0020.0002] # MEDIUM GREEK CROSS 1F7A4 ; [*177A.0020.0002] # BOLD GREEK CROSS 1F7A5 ; [*177B.0020.0002] # VERY BOLD GREEK CROSS 1F7A6 ; [*177C.0020.0002] # VERY HEAVY GREEK CROSS 1F7A7 ; [*177D.0020.0002] # EXTREMELY HEAVY GREEK CROSS 1F7A8 ; [*177E.0020.0002] # THIN SALTIRE 1F7A9 ; [*177F.0020.0002] # LIGHT SALTIRE 1F7AA ; [*1780.0020.0002] # MEDIUM SALTIRE 1F7AB ; [*1781.0020.0002] # BOLD SALTIRE 1F7AC ; [*1782.0020.0002] # HEAVY SALTIRE 1F7AD ; [*1783.0020.0002] # VERY HEAVY SALTIRE 1F7AE ; [*1784.0020.0002] # EXTREMELY HEAVY SALTIRE 1F7AF ; [*1785.0020.0002] # LIGHT FIVE SPOKED ASTERISK 1F7B0 ; [*1786.0020.0002] # MEDIUM FIVE SPOKED ASTERISK 1F7B1 ; [*1787.0020.0002] # BOLD FIVE SPOKED ASTERISK 1F7B2 ; [*1788.0020.0002] # HEAVY FIVE SPOKED ASTERISK 1F7B3 ; [*1789.0020.0002] # VERY HEAVY FIVE SPOKED ASTERISK 1F7B4 ; [*178A.0020.0002] # EXTREMELY HEAVY FIVE SPOKED ASTERISK 1F7B5 ; [*178B.0020.0002] # LIGHT SIX SPOKED ASTERISK 1F7B6 ; [*178C.0020.0002] # MEDIUM SIX SPOKED ASTERISK 1F7B7 ; [*178D.0020.0002] # BOLD SIX SPOKED ASTERISK 1F7B8 ; [*178E.0020.0002] # HEAVY SIX SPOKED ASTERISK 1F7B9 ; [*178F.0020.0002] # VERY HEAVY SIX SPOKED ASTERISK 1F7BA ; [*1790.0020.0002] # EXTREMELY HEAVY SIX SPOKED ASTERISK 1F7BB ; [*1791.0020.0002] # LIGHT EIGHT SPOKED ASTERISK 1F7BC ; [*1792.0020.0002] # MEDIUM EIGHT SPOKED ASTERISK 1F7BD ; [*1793.0020.0002] # BOLD EIGHT SPOKED ASTERISK 1F7BE ; [*1794.0020.0002] # HEAVY EIGHT SPOKED ASTERISK 1F7BF ; [*1795.0020.0002] # VERY HEAVY EIGHT SPOKED ASTERISK 1F7C0 ; [*1796.0020.0002] # LIGHT THREE POINTED BLACK STAR 1F7C1 ; [*1797.0020.0002] # MEDIUM THREE POINTED BLACK STAR 1F7C2 ; [*1798.0020.0002] # THREE POINTED BLACK STAR 1F7C3 ; [*1799.0020.0002] # MEDIUM THREE POINTED PINWHEEL STAR 1F7C4 ; [*179A.0020.0002] # LIGHT FOUR POINTED BLACK STAR 1F7C5 ; [*179B.0020.0002] # MEDIUM FOUR POINTED BLACK STAR 1F7C6 ; [*179C.0020.0002] # FOUR POINTED BLACK STAR 1F7C7 ; [*179D.0020.0002] # MEDIUM FOUR POINTED PINWHEEL STAR 1F7C8 ; [*179E.0020.0002] # REVERSE LIGHT FOUR POINTED PINWHEEL STAR 1F7C9 ; [*179F.0020.0002] # LIGHT FIVE POINTED BLACK STAR 1F7CA ; [*17A0.0020.0002] # HEAVY FIVE POINTED BLACK STAR 1F7CB ; [*17A1.0020.0002] # MEDIUM SIX POINTED BLACK STAR 1F7CC ; [*17A2.0020.0002] # HEAVY SIX POINTED BLACK STAR 1F7CD ; [*17A3.0020.0002] # SIX POINTED PINWHEEL STAR 1F7CE ; [*17A4.0020.0002] # MEDIUM EIGHT POINTED BLACK STAR 1F7CF ; [*17A5.0020.0002] # HEAVY EIGHT POINTED BLACK STAR 1F7D0 ; [*17A6.0020.0002] # VERY HEAVY EIGHT POINTED BLACK STAR 1F7D1 ; [*17A7.0020.0002] # HEAVY EIGHT POINTED PINWHEEL STAR 1F7D2 ; [*17A8.0020.0002] # LIGHT TWELVE POINTED BLACK STAR 1F7D3 ; [*17A9.0020.0002] # HEAVY TWELVE POINTED BLACK STAR 1F7D4 ; [*17AA.0020.0002] # HEAVY TWELVE POINTED PINWHEEL STAR 1F800 ; [*17AB.0020.0002] # LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD 1F801 ; [*17AC.0020.0002] # UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD 1F802 ; [*17AD.0020.0002] # RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD 1F803 ; [*17AE.0020.0002] # DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD 1F804 ; [*17AF.0020.0002] # LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD 1F805 ; [*17B0.0020.0002] # UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD 1F806 ; [*17B1.0020.0002] # RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD 1F807 ; [*17B2.0020.0002] # DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD 1F808 ; [*17B3.0020.0002] # LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F809 ; [*17B4.0020.0002] # UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F80A ; [*17B5.0020.0002] # RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F80B ; [*17B6.0020.0002] # DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F810 ; [*17B7.0020.0002] # LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD 1F811 ; [*17B8.0020.0002] # UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD 1F812 ; [*17B9.0020.0002] # RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD 1F813 ; [*17BA.0020.0002] # DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD 1F814 ; [*17BB.0020.0002] # LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F815 ; [*17BC.0020.0002] # UPWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F816 ; [*17BD.0020.0002] # RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F817 ; [*17BE.0020.0002] # DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F818 ; [*17BF.0020.0002] # HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F819 ; [*17C0.0020.0002] # HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F81A ; [*17C1.0020.0002] # HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F81B ; [*17C2.0020.0002] # HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD 1F81C ; [*17C3.0020.0002] # HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD 1F81D ; [*17C4.0020.0002] # HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD 1F81E ; [*17C5.0020.0002] # HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD 1F81F ; [*17C6.0020.0002] # HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD 1F820 ; [*17C7.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT 1F821 ; [*17C8.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT 1F822 ; [*17C9.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT 1F823 ; [*17CA.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT 1F824 ; [*17CB.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT 1F825 ; [*17CC.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT 1F826 ; [*17CD.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT 1F827 ; [*17CE.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT 1F828 ; [*17CF.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT 1F829 ; [*17D0.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT 1F82A ; [*17D1.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT 1F82B ; [*17D2.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT 1F82C ; [*17D3.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT 1F82D ; [*17D4.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT 1F82E ; [*17D5.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT 1F82F ; [*17D6.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT 1F830 ; [*17D7.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT 1F831 ; [*17D8.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT 1F832 ; [*17D9.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT 1F833 ; [*17DA.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT 1F834 ; [*17DB.0020.0002] # LEFTWARDS FINGER-POST ARROW 1F835 ; [*17DC.0020.0002] # UPWARDS FINGER-POST ARROW 1F836 ; [*17DD.0020.0002] # RIGHTWARDS FINGER-POST ARROW 1F837 ; [*17DE.0020.0002] # DOWNWARDS FINGER-POST ARROW 1F838 ; [*17DF.0020.0002] # LEFTWARDS SQUARED ARROW 1F839 ; [*17E0.0020.0002] # UPWARDS SQUARED ARROW 1F83A ; [*17E1.0020.0002] # RIGHTWARDS SQUARED ARROW 1F83B ; [*17E2.0020.0002] # DOWNWARDS SQUARED ARROW 1F83C ; [*17E3.0020.0002] # LEFTWARDS COMPRESSED ARROW 1F83D ; [*17E4.0020.0002] # UPWARDS COMPRESSED ARROW 1F83E ; [*17E5.0020.0002] # RIGHTWARDS COMPRESSED ARROW 1F83F ; [*17E6.0020.0002] # DOWNWARDS COMPRESSED ARROW 1F840 ; [*17E7.0020.0002] # LEFTWARDS HEAVY COMPRESSED ARROW 1F841 ; [*17E8.0020.0002] # UPWARDS HEAVY COMPRESSED ARROW 1F842 ; [*17E9.0020.0002] # RIGHTWARDS HEAVY COMPRESSED ARROW 1F843 ; [*17EA.0020.0002] # DOWNWARDS HEAVY COMPRESSED ARROW 1F844 ; [*17EB.0020.0002] # LEFTWARDS HEAVY ARROW 1F845 ; [*17EC.0020.0002] # UPWARDS HEAVY ARROW 1F846 ; [*17ED.0020.0002] # RIGHTWARDS HEAVY ARROW 1F847 ; [*17EE.0020.0002] # DOWNWARDS HEAVY ARROW 1F850 ; [*17EF.0020.0002] # LEFTWARDS SANS-SERIF ARROW 1F851 ; [*17F0.0020.0002] # UPWARDS SANS-SERIF ARROW 1F852 ; [*17F1.0020.0002] # RIGHTWARDS SANS-SERIF ARROW 1F853 ; [*17F2.0020.0002] # DOWNWARDS SANS-SERIF ARROW 1F854 ; [*17F3.0020.0002] # NORTH WEST SANS-SERIF ARROW 1F855 ; [*17F4.0020.0002] # NORTH EAST SANS-SERIF ARROW 1F856 ; [*17F5.0020.0002] # SOUTH EAST SANS-SERIF ARROW 1F857 ; [*17F6.0020.0002] # SOUTH WEST SANS-SERIF ARROW 1F858 ; [*17F7.0020.0002] # LEFT RIGHT SANS-SERIF ARROW 1F859 ; [*17F8.0020.0002] # UP DOWN SANS-SERIF ARROW 1F860 ; [*17F9.0020.0002] # WIDE-HEADED LEFTWARDS LIGHT BARB ARROW 1F861 ; [*17FA.0020.0002] # WIDE-HEADED UPWARDS LIGHT BARB ARROW 1F862 ; [*17FB.0020.0002] # WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW 1F863 ; [*17FC.0020.0002] # WIDE-HEADED DOWNWARDS LIGHT BARB ARROW 1F864 ; [*17FD.0020.0002] # WIDE-HEADED NORTH WEST LIGHT BARB ARROW 1F865 ; [*17FE.0020.0002] # WIDE-HEADED NORTH EAST LIGHT BARB ARROW 1F866 ; [*17FF.0020.0002] # WIDE-HEADED SOUTH EAST LIGHT BARB ARROW 1F867 ; [*1800.0020.0002] # WIDE-HEADED SOUTH WEST LIGHT BARB ARROW 1F868 ; [*1801.0020.0002] # WIDE-HEADED LEFTWARDS BARB ARROW 1F869 ; [*1802.0020.0002] # WIDE-HEADED UPWARDS BARB ARROW 1F86A ; [*1803.0020.0002] # WIDE-HEADED RIGHTWARDS BARB ARROW 1F86B ; [*1804.0020.0002] # WIDE-HEADED DOWNWARDS BARB ARROW 1F86C ; [*1805.0020.0002] # WIDE-HEADED NORTH WEST BARB ARROW 1F86D ; [*1806.0020.0002] # WIDE-HEADED NORTH EAST BARB ARROW 1F86E ; [*1807.0020.0002] # WIDE-HEADED SOUTH EAST BARB ARROW 1F86F ; [*1808.0020.0002] # WIDE-HEADED SOUTH WEST BARB ARROW 1F870 ; [*1809.0020.0002] # WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW 1F871 ; [*180A.0020.0002] # WIDE-HEADED UPWARDS MEDIUM BARB ARROW 1F872 ; [*180B.0020.0002] # WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW 1F873 ; [*180C.0020.0002] # WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW 1F874 ; [*180D.0020.0002] # WIDE-HEADED NORTH WEST MEDIUM BARB ARROW 1F875 ; [*180E.0020.0002] # WIDE-HEADED NORTH EAST MEDIUM BARB ARROW 1F876 ; [*180F.0020.0002] # WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW 1F877 ; [*1810.0020.0002] # WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW 1F878 ; [*1811.0020.0002] # WIDE-HEADED LEFTWARDS HEAVY BARB ARROW 1F879 ; [*1812.0020.0002] # WIDE-HEADED UPWARDS HEAVY BARB ARROW 1F87A ; [*1813.0020.0002] # WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW 1F87B ; [*1814.0020.0002] # WIDE-HEADED DOWNWARDS HEAVY BARB ARROW 1F87C ; [*1815.0020.0002] # WIDE-HEADED NORTH WEST HEAVY BARB ARROW 1F87D ; [*1816.0020.0002] # WIDE-HEADED NORTH EAST HEAVY BARB ARROW 1F87E ; [*1817.0020.0002] # WIDE-HEADED SOUTH EAST HEAVY BARB ARROW 1F87F ; [*1818.0020.0002] # WIDE-HEADED SOUTH WEST HEAVY BARB ARROW 1F880 ; [*1819.0020.0002] # WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW 1F881 ; [*181A.0020.0002] # WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW 1F882 ; [*181B.0020.0002] # WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW 1F883 ; [*181C.0020.0002] # WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW 1F884 ; [*181D.0020.0002] # WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW 1F885 ; [*181E.0020.0002] # WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW 1F886 ; [*181F.0020.0002] # WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW 1F887 ; [*1820.0020.0002] # WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW 1F890 ; [*1821.0020.0002] # LEFTWARDS TRIANGLE ARROWHEAD 1F891 ; [*1822.0020.0002] # UPWARDS TRIANGLE ARROWHEAD 1F892 ; [*1823.0020.0002] # RIGHTWARDS TRIANGLE ARROWHEAD 1F893 ; [*1824.0020.0002] # DOWNWARDS TRIANGLE ARROWHEAD 1F894 ; [*1825.0020.0002] # LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD 1F895 ; [*1826.0020.0002] # UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD 1F896 ; [*1827.0020.0002] # RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD 1F897 ; [*1828.0020.0002] # DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD 1F898 ; [*1829.0020.0002] # LEFTWARDS ARROW WITH NOTCHED TAIL 1F899 ; [*182A.0020.0002] # UPWARDS ARROW WITH NOTCHED TAIL 1F89A ; [*182B.0020.0002] # RIGHTWARDS ARROW WITH NOTCHED TAIL 1F89B ; [*182C.0020.0002] # DOWNWARDS ARROW WITH NOTCHED TAIL 1F89C ; [*182D.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE 1F89D ; [*182E.0020.0002] # HEAVY ARROW SHAFT WIDTH TWO THIRDS 1F89E ; [*182F.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE HALF 1F89F ; [*1830.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE THIRD 1F8A0 ; [*1831.0020.0002] # LEFTWARDS BOTTOM-SHADED WHITE ARROW 1F8A1 ; [*1832.0020.0002] # RIGHTWARDS BOTTOM SHADED WHITE ARROW 1F8A2 ; [*1833.0020.0002] # LEFTWARDS TOP SHADED WHITE ARROW 1F8A3 ; [*1834.0020.0002] # RIGHTWARDS TOP SHADED WHITE ARROW 1F8A4 ; [*1835.0020.0002] # LEFTWARDS LEFT-SHADED WHITE ARROW 1F8A5 ; [*1836.0020.0002] # RIGHTWARDS RIGHT-SHADED WHITE ARROW 1F8A6 ; [*1837.0020.0002] # LEFTWARDS RIGHT-SHADED WHITE ARROW 1F8A7 ; [*1838.0020.0002] # RIGHTWARDS LEFT-SHADED WHITE ARROW 1F8A8 ; [*1839.0020.0002] # LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW 1F8A9 ; [*183A.0020.0002] # RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW 1F8AA ; [*183B.0020.0002] # LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW 1F8AB ; [*183C.0020.0002] # RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW 1F8AC ; [*183D.0020.0002] # WHITE ARROW SHAFT WIDTH ONE 1F8AD ; [*183E.0020.0002] # WHITE ARROW SHAFT WIDTH TWO THIRDS 1F910 ; [*15A9.0020.0002] # ZIPPER-MOUTH FACE 1F911 ; [*15AA.0020.0002] # MONEY-MOUTH FACE 1F912 ; [*15AB.0020.0002] # FACE WITH THERMOMETER 1F913 ; [*15AC.0020.0002] # NERD FACE 1F914 ; [*15AD.0020.0002] # THINKING FACE 1F915 ; [*15AE.0020.0002] # FACE WITH HEAD-BANDAGE 1F916 ; [*15AF.0020.0002] # ROBOT FACE 1F917 ; [*15B0.0020.0002] # HUGGING FACE 1F918 ; [*15B1.0020.0002] # SIGN OF THE HORNS 1F919 ; [*15B2.0020.0002] # CALL ME HAND 1F91A ; [*15B3.0020.0002] # RAISED BACK OF HAND 1F91B ; [*15B4.0020.0002] # LEFT-FACING FIST 1F91C ; [*15B5.0020.0002] # RIGHT-FACING FIST 1F91D ; [*15B6.0020.0002] # HANDSHAKE 1F91E ; [*15B7.0020.0002] # HAND WITH INDEX AND MIDDLE FINGERS CROSSED 1F920 ; [*15B8.0020.0002] # FACE WITH COWBOY HAT 1F921 ; [*15B9.0020.0002] # CLOWN FACE 1F922 ; [*15BA.0020.0002] # NAUSEATED FACE 1F923 ; [*15BB.0020.0002] # ROLLING ON THE FLOOR LAUGHING 1F924 ; [*15BC.0020.0002] # DROOLING FACE 1F925 ; [*15BD.0020.0002] # LYING FACE 1F926 ; [*15BE.0020.0002] # FACE PALM 1F927 ; [*15BF.0020.0002] # SNEEZING FACE 1F930 ; [*15C0.0020.0002] # PREGNANT WOMAN 1F933 ; [*15C1.0020.0002] # SELFIE 1F934 ; [*15C2.0020.0002] # PRINCE 1F935 ; [*15C3.0020.0002] # MAN IN TUXEDO 1F936 ; [*15C4.0020.0002] # MOTHER CHRISTMAS 1F937 ; [*15C5.0020.0002] # SHRUG 1F938 ; [*15C6.0020.0002] # PERSON DOING CARTWHEEL 1F939 ; [*15C7.0020.0002] # JUGGLING 1F93A ; [*15C8.0020.0002] # FENCER 1F93B ; [*15C9.0020.0002] # MODERN PENTATHLON 1F93C ; [*15CA.0020.0002] # WRESTLERS 1F93D ; [*15CB.0020.0002] # WATER POLO 1F93E ; [*15CC.0020.0002] # HANDBALL 1F940 ; [*15CD.0020.0002] # WILTED FLOWER 1F941 ; [*15CE.0020.0002] # DRUM WITH DRUMSTICKS 1F942 ; [*15CF.0020.0002] # CLINKING GLASSES 1F943 ; [*15D0.0020.0002] # TUMBLER GLASS 1F944 ; [*15D1.0020.0002] # SPOON 1F945 ; [*15D2.0020.0002] # GOAL NET 1F946 ; [*15D3.0020.0002] # RIFLE 1F947 ; [*15D4.0020.0002] # FIRST PLACE MEDAL 1F948 ; [*15D5.0020.0002] # SECOND PLACE MEDAL 1F949 ; [*15D6.0020.0002] # THIRD PLACE MEDAL 1F94A ; [*15D7.0020.0002] # BOXING GLOVE 1F94B ; [*15D8.0020.0002] # MARTIAL ARTS UNIFORM 1F950 ; [*15D9.0020.0002] # CROISSANT 1F951 ; [*15DA.0020.0002] # AVOCADO 1F952 ; [*15DB.0020.0002] # CUCUMBER 1F953 ; [*15DC.0020.0002] # BACON 1F954 ; [*15DD.0020.0002] # POTATO 1F955 ; [*15DE.0020.0002] # CARROT 1F956 ; [*15DF.0020.0002] # BAGUETTE BREAD 1F957 ; [*15E0.0020.0002] # GREEN SALAD 1F958 ; [*15E1.0020.0002] # SHALLOW PAN OF FOOD 1F959 ; [*15E2.0020.0002] # STUFFED FLATBREAD 1F95A ; [*15E3.0020.0002] # EGG 1F95B ; [*15E4.0020.0002] # GLASS OF MILK 1F95C ; [*15E5.0020.0002] # PEANUTS 1F95D ; [*15E6.0020.0002] # KIWIFRUIT 1F95E ; [*15E7.0020.0002] # PANCAKES 1F980 ; [*15E8.0020.0002] # CRAB 1F981 ; [*15E9.0020.0002] # LION FACE 1F982 ; [*15EA.0020.0002] # SCORPION 1F983 ; [*15EB.0020.0002] # TURKEY 1F984 ; [*15EC.0020.0002] # UNICORN FACE 1F985 ; [*15ED.0020.0002] # EAGLE 1F986 ; [*15EE.0020.0002] # DUCK 1F987 ; [*15EF.0020.0002] # BAT 1F988 ; [*15F0.0020.0002] # SHARK 1F989 ; [*15F1.0020.0002] # OWL 1F98A ; [*15F2.0020.0002] # FOX FACE 1F98B ; [*15F3.0020.0002] # BUTTERFLY 1F98C ; [*15F4.0020.0002] # DEER 1F98D ; [*15F5.0020.0002] # GORILLA 1F98E ; [*15F6.0020.0002] # LIZARD 1F98F ; [*15F7.0020.0002] # RHINOCEROS 1F990 ; [*15F8.0020.0002] # SHRIMP 1F991 ; [*15F9.0020.0002] # SQUID 1F9C0 ; [*15FA.0020.0002] # CHEESE WEDGE 0332 ; [.0000.0021.0002] # COMBINING LOW LINE 0313 ; [.0000.0022.0002] # COMBINING COMMA ABOVE 0343 ; [.0000.0022.0002] # COMBINING GREEK KORONIS 0486 ; [.0000.0022.0002] # COMBINING CYRILLIC PSILI PNEUMATA 2CF1 ; [.0000.0022.0002] # COPTIC COMBINING SPIRITUS LENIS 0314 ; [.0000.0023.0002] # COMBINING REVERSED COMMA ABOVE 0485 ; [.0000.0023.0002] # COMBINING CYRILLIC DASIA PNEUMATA 2CF0 ; [.0000.0023.0002] # COPTIC COMBINING SPIRITUS ASPER 0301 ; [.0000.0024.0002] # COMBINING ACUTE ACCENT 0341 ; [.0000.0024.0002] # COMBINING ACUTE TONE MARK 0954 ; [.0000.0024.0002] # DEVANAGARI ACUTE ACCENT 0300 ; [.0000.0025.0002] # COMBINING GRAVE ACCENT 0340 ; [.0000.0025.0002] # COMBINING GRAVE TONE MARK 0953 ; [.0000.0025.0002] # DEVANAGARI GRAVE ACCENT 0306 ; [.0000.0026.0002] # COMBINING BREVE 0302 ; [.0000.0027.0002] # COMBINING CIRCUMFLEX ACCENT 030C ; [.0000.0028.0002] # COMBINING CARON 030A ; [.0000.0029.0002] # COMBINING RING ABOVE 0342 ; [.0000.002A.0002] # COMBINING GREEK PERISPOMENI 0308 ; [.0000.002B.0002] # COMBINING DIAERESIS 0344 ; [.0000.002B.0002][.0000.0024.0002] # COMBINING GREEK DIALYTIKA TONOS 030B ; [.0000.002C.0002] # COMBINING DOUBLE ACUTE ACCENT 0303 ; [.0000.002D.0002] # COMBINING TILDE 0307 ; [.0000.002E.0002] # COMBINING DOT ABOVE 0338 ; [.0000.002F.0002] # COMBINING LONG SOLIDUS OVERLAY 0327 ; [.0000.0030.0002] # COMBINING CEDILLA 0328 ; [.0000.0031.0002] # COMBINING OGONEK 0304 ; [.0000.0032.0002] # COMBINING MACRON 030D ; [.0000.0033.0002] # COMBINING VERTICAL LINE ABOVE 030E ; [.0000.0033.0002] # COMBINING DOUBLE VERTICAL LINE ABOVE 0312 ; [.0000.0033.0002] # COMBINING TURNED COMMA ABOVE 0315 ; [.0000.0033.0002] # COMBINING COMMA ABOVE RIGHT 031A ; [.0000.0033.0002] # COMBINING LEFT ANGLE ABOVE 033D ; [.0000.0033.0002] # COMBINING X ABOVE 033E ; [.0000.0033.0002] # COMBINING VERTICAL TILDE 033F ; [.0000.0033.0002] # COMBINING DOUBLE OVERLINE 0346 ; [.0000.0033.0002] # COMBINING BRIDGE ABOVE 034A ; [.0000.0033.0002] # COMBINING NOT TILDE ABOVE 034B ; [.0000.0033.0002] # COMBINING HOMOTHETIC ABOVE 034C ; [.0000.0033.0002] # COMBINING ALMOST EQUAL TO ABOVE 0350 ; [.0000.0033.0002] # COMBINING RIGHT ARROWHEAD ABOVE 0351 ; [.0000.0033.0002] # COMBINING LEFT HALF RING ABOVE 0352 ; [.0000.0033.0002] # COMBINING FERMATA 0357 ; [.0000.0033.0002] # COMBINING RIGHT HALF RING ABOVE 035B ; [.0000.0033.0002] # COMBINING ZIGZAG ABOVE 035D ; [.0000.0033.0002] # COMBINING DOUBLE BREVE 035E ; [.0000.0033.0002] # COMBINING DOUBLE MACRON 0484 ; [.0000.0033.0002] # COMBINING CYRILLIC PALATALIZATION 0487 ; [.0000.0033.0002] # COMBINING CYRILLIC POKRYTIE 0741 ; [.0000.0033.0002] # SYRIAC QUSHSHAYA 0745 ; [.0000.0033.0002] # SYRIAC THREE DOTS ABOVE 17CB ; [.0000.0033.0002] # KHMER SIGN BANTOC 17CC ; [.0000.0033.0002] # KHMER SIGN ROBAT 17CD ; [.0000.0033.0002] # KHMER SIGN TOANDAKHIAT 17CE ; [.0000.0033.0002] # KHMER SIGN KAKABAT 17CF ; [.0000.0033.0002] # KHMER SIGN AHSDA 17D0 ; [.0000.0033.0002] # KHMER SIGN SAMYOK SANNYA 17D1 ; [.0000.0033.0002] # KHMER SIGN VIRIAM 17DD ; [.0000.0033.0002] # KHMER SIGN ATTHACAN 1AB0 ; [.0000.0033.0002] # COMBINING DOUBLED CIRCUMFLEX ACCENT 1AB1 ; [.0000.0033.0002] # COMBINING DIAERESIS-RING 1AB2 ; [.0000.0033.0002] # COMBINING INFINITY 1AB3 ; [.0000.0033.0002] # COMBINING DOWNWARDS ARROW 1AB4 ; [.0000.0033.0002] # COMBINING TRIPLE DOT 1ABB ; [.0000.0033.0002] # COMBINING PARENTHESES ABOVE 1ABC ; [.0000.0033.0002] # COMBINING DOUBLE PARENTHESES ABOVE 1DC0 ; [.0000.0033.0002] # COMBINING DOTTED GRAVE ACCENT 1DC1 ; [.0000.0033.0002] # COMBINING DOTTED ACUTE ACCENT 1DC3 ; [.0000.0033.0002] # COMBINING SUSPENSION MARK 1DC4 ; [.0000.0033.0002] # COMBINING MACRON-ACUTE 1DC5 ; [.0000.0033.0002] # COMBINING GRAVE-MACRON 1DC6 ; [.0000.0033.0002] # COMBINING MACRON-GRAVE 1DC7 ; [.0000.0033.0002] # COMBINING ACUTE-MACRON 1DC8 ; [.0000.0033.0002] # COMBINING GRAVE-ACUTE-GRAVE 1DC9 ; [.0000.0033.0002] # COMBINING ACUTE-GRAVE-ACUTE 1DCB ; [.0000.0033.0002] # COMBINING BREVE-MACRON 1DCC ; [.0000.0033.0002] # COMBINING MACRON-BREVE 1DCD ; [.0000.0033.0002] # COMBINING DOUBLE CIRCUMFLEX ABOVE 1DCE ; [.0000.0033.0002] # COMBINING OGONEK ABOVE 1DD1 ; [.0000.0033.0002] # COMBINING UR ABOVE 1DF5 ; [.0000.0033.0002] # COMBINING UP TACK ABOVE 1DFB ; [.0000.0033.0002] # COMBINING DELETION MARK 1DFE ; [.0000.0033.0002] # COMBINING LEFT ARROWHEAD ABOVE 20F0 ; [.0000.0033.0002] # COMBINING ASTERISK ABOVE 2CEF ; [.0000.0033.0002] # COPTIC COMBINING NI ABOVE A67C ; [.0000.0033.0002] # COMBINING CYRILLIC KAVYKA A67D ; [.0000.0033.0002] # COMBINING CYRILLIC PAYEROK 10AE5 ; [.0000.0033.0002] # MANICHAEAN ABBREVIATION MARK ABOVE 1BC9D ; [.0000.0033.0002] # DUPLOYAN THICK LETTER SELECTOR 0316 ; [.0000.0034.0002] # COMBINING GRAVE ACCENT BELOW 0317 ; [.0000.0034.0002] # COMBINING ACUTE ACCENT BELOW 0318 ; [.0000.0034.0002] # COMBINING LEFT TACK BELOW 0319 ; [.0000.0034.0002] # COMBINING RIGHT TACK BELOW 031C ; [.0000.0034.0002] # COMBINING LEFT HALF RING BELOW 031D ; [.0000.0034.0002] # COMBINING UP TACK BELOW 031E ; [.0000.0034.0002] # COMBINING DOWN TACK BELOW 031F ; [.0000.0034.0002] # COMBINING PLUS SIGN BELOW 0320 ; [.0000.0034.0002] # COMBINING MINUS SIGN BELOW 0329 ; [.0000.0034.0002] # COMBINING VERTICAL LINE BELOW 032A ; [.0000.0034.0002] # COMBINING BRIDGE BELOW 032B ; [.0000.0034.0002] # COMBINING INVERTED DOUBLE ARCH BELOW 032C ; [.0000.0034.0002] # COMBINING CARON BELOW 032F ; [.0000.0034.0002] # COMBINING INVERTED BREVE BELOW 0333 ; [.0000.0034.0002] # COMBINING DOUBLE LOW LINE 033A ; [.0000.0034.0002] # COMBINING INVERTED BRIDGE BELOW 033B ; [.0000.0034.0002] # COMBINING SQUARE BELOW 033C ; [.0000.0034.0002] # COMBINING SEAGULL BELOW 0347 ; [.0000.0034.0002] # COMBINING EQUALS SIGN BELOW 0348 ; [.0000.0034.0002] # COMBINING DOUBLE VERTICAL LINE BELOW 0349 ; [.0000.0034.0002] # COMBINING LEFT ANGLE BELOW 034D ; [.0000.0034.0002] # COMBINING LEFT RIGHT ARROW BELOW 034E ; [.0000.0034.0002] # COMBINING UPWARDS ARROW BELOW 0353 ; [.0000.0034.0002] # COMBINING X BELOW 0354 ; [.0000.0034.0002] # COMBINING LEFT ARROWHEAD BELOW 0355 ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD BELOW 0356 ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW 0359 ; [.0000.0034.0002] # COMBINING ASTERISK BELOW 035A ; [.0000.0034.0002] # COMBINING DOUBLE RING BELOW 035C ; [.0000.0034.0002] # COMBINING DOUBLE BREVE BELOW 035F ; [.0000.0034.0002] # COMBINING DOUBLE MACRON BELOW 0362 ; [.0000.0034.0002] # COMBINING DOUBLE RIGHTWARDS ARROW BELOW 0742 ; [.0000.0034.0002] # SYRIAC RUKKAKHA 0746 ; [.0000.0034.0002] # SYRIAC THREE DOTS BELOW 0859 ; [.0000.0034.0002] # MANDAIC AFFRICATION MARK 085A ; [.0000.0034.0002] # MANDAIC VOCALIZATION MARK 085B ; [.0000.0034.0002] # MANDAIC GEMINATION MARK 1AB5 ; [.0000.0034.0002] # COMBINING X-X BELOW 1AB6 ; [.0000.0034.0002] # COMBINING WIGGLY LINE BELOW 1AB7 ; [.0000.0034.0002] # COMBINING OPEN MARK BELOW 1AB8 ; [.0000.0034.0002] # COMBINING DOUBLE OPEN MARK BELOW 1AB9 ; [.0000.0034.0002] # COMBINING LIGHT CENTRALIZATION STROKE BELOW 1ABA ; [.0000.0034.0002] # COMBINING STRONG CENTRALIZATION STROKE BELOW 1ABD ; [.0000.0034.0002] # COMBINING PARENTHESES BELOW 1DC2 ; [.0000.0034.0002] # COMBINING SNAKE BELOW 1DCF ; [.0000.0034.0002] # COMBINING ZIGZAG BELOW 1DD0 ; [.0000.0034.0002] # COMBINING IS BELOW 1DFC ; [.0000.0034.0002] # COMBINING DOUBLE INVERTED BREVE BELOW 1DFD ; [.0000.0034.0002] # COMBINING ALMOST EQUAL TO BELOW 1DFF ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 20EC ; [.0000.0034.0002] # COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS 20ED ; [.0000.0034.0002] # COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS 20EE ; [.0000.0034.0002] # COMBINING LEFT ARROW BELOW 20EF ; [.0000.0034.0002] # COMBINING RIGHT ARROW BELOW FE27 ; [.0000.0034.0002] # COMBINING LIGATURE LEFT HALF BELOW 10A0D ; [.0000.0034.0002] # KHAROSHTHI SIGN DOUBLE RING BELOW 10AE6 ; [.0000.0034.0002] # MANICHAEAN ABBREVIATION MARK BELOW 0336 ; [.0000.0035.0002] # COMBINING LONG STROKE OVERLAY 0337 ; [.0000.0035.0002] # COMBINING SHORT SOLIDUS OVERLAY 20D8 ; [.0000.0035.0002] # COMBINING RING OVERLAY 20D9 ; [.0000.0035.0002] # COMBINING CLOCKWISE RING OVERLAY 20DA ; [.0000.0035.0002] # COMBINING ANTICLOCKWISE RING OVERLAY 20E5 ; [.0000.0035.0002] # COMBINING REVERSE SOLIDUS OVERLAY 20EA ; [.0000.0035.0002] # COMBINING LEFTWARDS ARROW OVERLAY 20EB ; [.0000.0035.0002] # COMBINING LONG DOUBLE SOLIDUS OVERLAY 1BC9E ; [.0000.0035.0002] # DUPLOYAN DOUBLE MARK 1ABE ; [.0000.0036.0002] # COMBINING PARENTHESES OVERLAY 20DD ; [.0000.0036.0002] # COMBINING ENCLOSING CIRCLE 20DE ; [.0000.0036.0002] # COMBINING ENCLOSING SQUARE 20DF ; [.0000.0036.0002] # COMBINING ENCLOSING DIAMOND 20E0 ; [.0000.0036.0002] # COMBINING ENCLOSING CIRCLE BACKSLASH 20E2 ; [.0000.0036.0002] # COMBINING ENCLOSING SCREEN 20E3 ; [.0000.0036.0002] # COMBINING ENCLOSING KEYCAP 20E4 ; [.0000.0036.0002] # COMBINING ENCLOSING UPWARD POINTING TRIANGLE 3099 ; [.0000.0037.0002] # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK FF9E ; [.0000.0037.0012] # HALFWIDTH KATAKANA VOICED SOUND MARK 309A ; [.0000.0038.0002] # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK FF9F ; [.0000.0038.0012] # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK 0335 ; [.0000.0039.0002] # COMBINING SHORT STROKE OVERLAY 0305 ; [.0000.003A.0002] # COMBINING OVERLINE 0309 ; [.0000.003B.0002] # COMBINING HOOK ABOVE 030F ; [.0000.003C.0002] # COMBINING DOUBLE GRAVE ACCENT 0310 ; [.0000.003D.0002] # COMBINING CANDRABINDU 0311 ; [.0000.003E.0002] # COMBINING INVERTED BREVE 031B ; [.0000.003F.0002] # COMBINING HORN 0321 ; [.0000.0040.0002] # COMBINING PALATALIZED HOOK BELOW 0322 ; [.0000.0041.0002] # COMBINING RETROFLEX HOOK BELOW 0323 ; [.0000.0042.0002] # COMBINING DOT BELOW 0324 ; [.0000.0043.0002] # COMBINING DIAERESIS BELOW 0325 ; [.0000.0044.0002] # COMBINING RING BELOW 0326 ; [.0000.0045.0002] # COMBINING COMMA BELOW 032D ; [.0000.0046.0002] # COMBINING CIRCUMFLEX ACCENT BELOW 032E ; [.0000.0047.0002] # COMBINING BREVE BELOW 0330 ; [.0000.0048.0002] # COMBINING TILDE BELOW 0331 ; [.0000.0049.0002] # COMBINING MACRON BELOW 0334 ; [.0000.004A.0002] # COMBINING TILDE OVERLAY 0339 ; [.0000.004B.0002] # COMBINING RIGHT HALF RING BELOW 0345 ; [.0000.004C.0002] # COMBINING GREEK YPOGEGRAMMENI 0358 ; [.0000.004D.0002] # COMBINING DOT ABOVE RIGHT 0360 ; [.0000.004E.0002] # COMBINING DOUBLE TILDE FE22 ; [.0000.004E.0002] # COMBINING DOUBLE TILDE LEFT HALF FE29 ; [.0000.004E.0002] # COMBINING TILDE LEFT HALF BELOW 0361 ; [.0000.004F.0002] # COMBINING DOUBLE INVERTED BREVE FE20 ; [.0000.004F.0002] # COMBINING LIGATURE LEFT HALF 0483 ; [.0000.0050.0002] # COMBINING CYRILLIC TITLO FE2E ; [.0000.0050.0002] # COMBINING CYRILLIC TITLO LEFT HALF A66F ; [.0000.0051.0002] # COMBINING CYRILLIC VZMET 05B0 ; [.0000.0052.0002] # HEBREW POINT SHEVA 05B1 ; [.0000.0053.0002] # HEBREW POINT HATAF SEGOL 05B2 ; [.0000.0054.0002] # HEBREW POINT HATAF PATAH 05B3 ; [.0000.0055.0002] # HEBREW POINT HATAF QAMATS 05B4 ; [.0000.0056.0002] # HEBREW POINT HIRIQ 05B5 ; [.0000.0057.0002] # HEBREW POINT TSERE 05B6 ; [.0000.0058.0002] # HEBREW POINT SEGOL 05B7 ; [.0000.0059.0002] # HEBREW POINT PATAH 05B8 ; [.0000.005A.0002] # HEBREW POINT QAMATS 05C7 ; [.0000.005A.0002] # HEBREW POINT QAMATS QATAN 05B9 ; [.0000.005B.0002] # HEBREW POINT HOLAM 05BA ; [.0000.005B.0002] # HEBREW POINT HOLAM HASER FOR VAV 05BB ; [.0000.005C.0002] # HEBREW POINT QUBUTS 05C2 ; [.0000.005D.0002] # HEBREW POINT SIN DOT 05C1 ; [.0000.005E.0002] # HEBREW POINT SHIN DOT 05BC ; [.0000.005F.0002] # HEBREW POINT DAGESH OR MAPIQ 05BF ; [.0000.0060.0002] # HEBREW POINT RAFE FB1E ; [.0000.0061.0002] # HEBREW POINT JUDEO-SPANISH VARIKA 081C ; [.0000.0062.0002] # SAMARITAN VOWEL SIGN LONG E 081D ; [.0000.0062.0002] # SAMARITAN VOWEL SIGN E 081E ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN OVERLONG AA 081F ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN LONG AA 0820 ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN AA 0821 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN OVERLONG A 0822 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN LONG A 0823 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN A 0824 ; [.0000.0065.0002] # SAMARITAN MODIFIER LETTER SHORT A 0825 ; [.0000.0065.0002] # SAMARITAN VOWEL SIGN SHORT A 0826 ; [.0000.0066.0002] # SAMARITAN VOWEL SIGN LONG U 0827 ; [.0000.0066.0002] # SAMARITAN VOWEL SIGN U 0828 ; [.0000.0067.0002] # SAMARITAN MODIFIER LETTER I 0829 ; [.0000.0067.0002] # SAMARITAN VOWEL SIGN LONG I 082A ; [.0000.0067.0002] # SAMARITAN VOWEL SIGN I 082B ; [.0000.0068.0002] # SAMARITAN VOWEL SIGN O 082C ; [.0000.0069.0002] # SAMARITAN VOWEL SIGN SUKUN 0818 ; [.0000.006A.0002] # SAMARITAN MARK OCCLUSION 0819 ; [.0000.006B.0002] # SAMARITAN MARK DAGESH 082D ; [.0000.006C.0002] # SAMARITAN MARK NEQUDAA 064B ; [.0000.006D.0002] # ARABIC FATHATAN FE71 ; [.0000.006D.0018] # ARABIC TATWEEL WITH FATHATAN ABOVE FE70 ; [.0000.006D.001A] # ARABIC FATHATAN ISOLATED FORM 08F0 ; [.0000.006E.0002] # ARABIC OPEN FATHATAN 08E7 ; [.0000.006F.0002] # ARABIC CURLY FATHATAN 064C ; [.0000.0070.0002] # ARABIC DAMMATAN FE72 ; [.0000.0070.001A] # ARABIC DAMMATAN ISOLATED FORM FC5E ; [.0000.0070.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM 08F1 ; [.0000.0071.0002] # ARABIC OPEN DAMMATAN 08E8 ; [.0000.0072.0002] # ARABIC CURLY DAMMATAN 064D ; [.0000.0073.0002] # ARABIC KASRATAN FE74 ; [.0000.0073.001A] # ARABIC KASRATAN ISOLATED FORM FC5F ; [.0000.0073.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM 08F2 ; [.0000.0074.0002] # ARABIC OPEN KASRATAN 08E9 ; [.0000.0075.0002] # ARABIC CURLY KASRATAN 064E ; [.0000.0076.0002] # ARABIC FATHA FE77 ; [.0000.0076.0018] # ARABIC FATHA MEDIAL FORM FE76 ; [.0000.0076.001A] # ARABIC FATHA ISOLATED FORM FCF2 ; [.0000.0076.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM FC60 ; [.0000.0076.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM 08E4 ; [.0000.0077.0002] # ARABIC CURLY FATHA 08F4 ; [.0000.0078.0002] # ARABIC FATHA WITH RING 08F5 ; [.0000.0079.0002] # ARABIC FATHA WITH DOT ABOVE 064F ; [.0000.007A.0002] # ARABIC DAMMA FE79 ; [.0000.007A.0018] # ARABIC DAMMA MEDIAL FORM FE78 ; [.0000.007A.001A] # ARABIC DAMMA ISOLATED FORM FCF3 ; [.0000.007A.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM FC61 ; [.0000.007A.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM 08E5 ; [.0000.007B.0002] # ARABIC CURLY DAMMA 08FE ; [.0000.007C.0002] # ARABIC DAMMA WITH DOT 0650 ; [.0000.007D.0002] # ARABIC KASRA FE7B ; [.0000.007D.0018] # ARABIC KASRA MEDIAL FORM FE7A ; [.0000.007D.001A] # ARABIC KASRA ISOLATED FORM FCF4 ; [.0000.007D.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM FC62 ; [.0000.007D.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM 08E6 ; [.0000.007E.0002] # ARABIC CURLY KASRA 08F6 ; [.0000.007F.0002] # ARABIC KASRA WITH DOT BELOW 0651 ; [.0000.0080.0002] # ARABIC SHADDA 11237 ; [.0000.0080.0002] # KHOJKI SIGN SHADDA FE7D ; [.0000.0080.0018] # ARABIC SHADDA MEDIAL FORM FE7C ; [.0000.0080.001A] # ARABIC SHADDA ISOLATED FORM FC63 ; [.0000.0080.001A][.0000.0098.001A] # ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM 0652 ; [.0000.0081.0002] # ARABIC SUKUN 1123E ; [.0000.0081.0002] # KHOJKI SIGN SUKUN FE7F ; [.0000.0081.0018] # ARABIC SUKUN MEDIAL FORM FE7E ; [.0000.0081.001A] # ARABIC SUKUN ISOLATED FORM 0653 ; [.0000.0082.0002] # ARABIC MADDAH ABOVE 0654 ; [.0000.0083.0002] # ARABIC HAMZA ABOVE 0655 ; [.0000.0084.0002] # ARABIC HAMZA BELOW 065F ; [.0000.0085.0002] # ARABIC WAVY HAMZA BELOW 0656 ; [.0000.0086.0002] # ARABIC SUBSCRIPT ALEF 0657 ; [.0000.0087.0002] # ARABIC INVERTED DAMMA 0658 ; [.0000.0088.0002] # ARABIC MARK NOON GHUNNA 08FF ; [.0000.0089.0002] # ARABIC MARK SIDEWAYS NOON GHUNNA 0659 ; [.0000.008A.0002] # ARABIC ZWARAKAY 065A ; [.0000.008B.0002] # ARABIC VOWEL SIGN SMALL V ABOVE 065B ; [.0000.008C.0002] # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE 065C ; [.0000.008D.0002] # ARABIC VOWEL SIGN DOT BELOW 065D ; [.0000.008E.0002] # ARABIC REVERSED DAMMA 065E ; [.0000.008F.0002] # ARABIC FATHA WITH TWO DOTS 08E3 ; [.0000.0090.0002] # ARABIC TURNED DAMMA BELOW 08F7 ; [.0000.0091.0002] # ARABIC LEFT ARROWHEAD ABOVE 08F8 ; [.0000.0092.0002] # ARABIC RIGHT ARROWHEAD ABOVE 08FD ; [.0000.0093.0002] # ARABIC RIGHT ARROWHEAD ABOVE WITH DOT 08FB ; [.0000.0094.0002] # ARABIC DOUBLE RIGHT ARROWHEAD ABOVE 08FC ; [.0000.0095.0002] # ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT 08F9 ; [.0000.0096.0002] # ARABIC LEFT ARROWHEAD BELOW 08FA ; [.0000.0097.0002] # ARABIC RIGHT ARROWHEAD BELOW 0670 ; [.0000.0098.0002] # ARABIC LETTER SUPERSCRIPT ALEF 0711 ; [.0000.0099.0002] # SYRIAC LETTER SUPERSCRIPT ALAPH 0730 ; [.0000.009A.0002] # SYRIAC PTHAHA ABOVE 0731 ; [.0000.009B.0002] # SYRIAC PTHAHA BELOW 0732 ; [.0000.009C.0002] # SYRIAC PTHAHA DOTTED 0733 ; [.0000.009D.0002] # SYRIAC ZQAPHA ABOVE 0734 ; [.0000.009E.0002] # SYRIAC ZQAPHA BELOW 0735 ; [.0000.009F.0002] # SYRIAC ZQAPHA DOTTED 0736 ; [.0000.00A0.0002] # SYRIAC RBASA ABOVE 0737 ; [.0000.00A1.0002] # SYRIAC RBASA BELOW 0738 ; [.0000.00A2.0002] # SYRIAC DOTTED ZLAMA HORIZONTAL 0739 ; [.0000.00A3.0002] # SYRIAC DOTTED ZLAMA ANGULAR 073A ; [.0000.00A4.0002] # SYRIAC HBASA ABOVE 073B ; [.0000.00A5.0002] # SYRIAC HBASA BELOW 073C ; [.0000.00A6.0002] # SYRIAC HBASA-ESASA DOTTED 073D ; [.0000.00A7.0002] # SYRIAC ESASA ABOVE 073E ; [.0000.00A8.0002] # SYRIAC ESASA BELOW 073F ; [.0000.00A9.0002] # SYRIAC RWAHA 07EB ; [.0000.00AA.0002] # NKO COMBINING SHORT HIGH TONE 07EC ; [.0000.00AB.0002] # NKO COMBINING SHORT LOW TONE 07ED ; [.0000.00AC.0002] # NKO COMBINING SHORT RISING TONE 07EE ; [.0000.00AD.0002] # NKO COMBINING LONG DESCENDING TONE 07EF ; [.0000.00AE.0002] # NKO COMBINING LONG HIGH TONE 07F0 ; [.0000.00AF.0002] # NKO COMBINING LONG LOW TONE 07F1 ; [.0000.00B0.0002] # NKO COMBINING LONG RISING TONE 07F2 ; [.0000.00B1.0002] # NKO COMBINING NASALIZATION MARK 07F3 ; [.0000.00B2.0002] # NKO COMBINING DOUBLE DOT ABOVE 135F ; [.0000.00B3.0002] # ETHIOPIC COMBINING GEMINATION MARK 135E ; [.0000.00B4.0002] # ETHIOPIC COMBINING VOWEL LENGTH MARK 135D ; [.0000.00B5.0002] # ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK A6F0 ; [.0000.00B6.0002] # BAMUM COMBINING MARK KOQNDON A6F1 ; [.0000.00B7.0002] # BAMUM COMBINING MARK TUKWENTIS 16AF0 ; [.0000.00B8.0002] # BASSA VAH COMBINING HIGH TONE 16AF1 ; [.0000.00B9.0002] # BASSA VAH COMBINING LOW TONE 16AF2 ; [.0000.00BA.0002] # BASSA VAH COMBINING MID TONE 16AF3 ; [.0000.00BB.0002] # BASSA VAH COMBINING LOW-MID TONE 16AF4 ; [.0000.00BC.0002] # BASSA VAH COMBINING HIGH-LOW TONE 1E944 ; [.0000.00BD.0002] # ADLAM ALIF LENGTHENER 1E945 ; [.0000.00BD.0002] # ADLAM VOWEL LENGTHENER 1E946 ; [.0000.00BD.0002] # ADLAM GEMINATION MARK 1E94A ; [.0000.00BE.0002] # ADLAM NUKTA 1E947 ; [.0000.00BF.0002] # ADLAM HAMZA 1E948 ; [.0000.00C0.0002] # ADLAM CONSONANT MODIFIER 1E949 ; [.0000.00C1.0002] # ADLAM GEMINATE CONSONANT MODIFIER 093C ; [.0000.00C2.0002] # DEVANAGARI SIGN NUKTA 09BC ; [.0000.00C2.0002] # BENGALI SIGN NUKTA 0A3C ; [.0000.00C2.0002] # GURMUKHI SIGN NUKTA 0ABC ; [.0000.00C2.0002] # GUJARATI SIGN NUKTA 0B3C ; [.0000.00C2.0002] # ORIYA SIGN NUKTA 0CBC ; [.0000.00C2.0002] # KANNADA SIGN NUKTA 1B34 ; [.0000.00C2.0002] # BALINESE SIGN REREKAN 1BE6 ; [.0000.00C2.0002] # BATAK SIGN TOMPI 1C37 ; [.0000.00C2.0002] # LEPCHA SIGN NUKTA A9B3 ; [.0000.00C2.0002] # JAVANESE SIGN CECAK TELU 110BA ; [.0000.00C2.0002] # KAITHI SIGN NUKTA 11173 ; [.0000.00C2.0002] # MAHAJANI SIGN NUKTA 111CA ; [.0000.00C2.0002] # SHARADA SIGN NUKTA 11236 ; [.0000.00C2.0002] # KHOJKI SIGN NUKTA 112E9 ; [.0000.00C2.0002] # KHUDAWADI SIGN NUKTA 1133C ; [.0000.00C2.0002] # GRANTHA SIGN NUKTA 11446 ; [.0000.00C2.0002] # NEWA SIGN NUKTA 114C3 ; [.0000.00C2.0002] # TIRHUTA SIGN NUKTA 115C0 ; [.0000.00C2.0002] # SIDDHAM SIGN NUKTA 116B7 ; [.0000.00C2.0002] # TAKRI SIGN NUKTA 0900 ; [.0000.00C3.0002] # DEVANAGARI SIGN INVERTED CANDRABINDU 0901 ; [.0000.00C3.0002] # DEVANAGARI SIGN CANDRABINDU 0981 ; [.0000.00C3.0002] # BENGALI SIGN CANDRABINDU 0A01 ; [.0000.00C3.0002] # GURMUKHI SIGN ADAK BINDI 0A81 ; [.0000.00C3.0002] # GUJARATI SIGN CANDRABINDU 0B01 ; [.0000.00C3.0002] # ORIYA SIGN CANDRABINDU 0C00 ; [.0000.00C3.0002] # TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C01 ; [.0000.00C3.0002] # TELUGU SIGN CANDRABINDU 0C81 ; [.0000.00C3.0002] # KANNADA SIGN CANDRABINDU 0D01 ; [.0000.00C3.0002] # MALAYALAM SIGN CANDRABINDU 1B00 ; [.0000.00C3.0002] # BALINESE SIGN ULU RICEM 1B01 ; [.0000.00C3.0002] # BALINESE SIGN ULU CANDRA A8C5 ; [.0000.00C3.0002] # SAURASHTRA SIGN CANDRABINDU A980 ; [.0000.00C3.0002] # JAVANESE SIGN PANYANGGA 11000 ; [.0000.00C3.0002] # BRAHMI SIGN CANDRABINDU 11080 ; [.0000.00C3.0002] # KAITHI SIGN CANDRABINDU 11100 ; [.0000.00C3.0002] # CHAKMA SIGN CANDRABINDU 11180 ; [.0000.00C3.0002] # SHARADA SIGN CANDRABINDU 11301 ; [.0000.00C3.0002] # GRANTHA SIGN CANDRABINDU 11443 ; [.0000.00C3.0002] # NEWA SIGN CANDRABINDU 114BF ; [.0000.00C3.0002] # TIRHUTA SIGN CANDRABINDU 115BC ; [.0000.00C3.0002] # SIDDHAM SIGN CANDRABINDU 11640 ; [.0000.00C3.0002] # MODI SIGN ARDHACANDRA 11C3C ; [.0000.00C3.0002] # BHAIKSUKI SIGN CANDRABINDU 11CB6 ; [.0000.00C3.0002] # MARCHEN SIGN CANDRABINDU 0902 ; [.0000.00C4.0002] # DEVANAGARI SIGN ANUSVARA 0982 ; [.0000.00C4.0002] # BENGALI SIGN ANUSVARA 0A02 ; [.0000.00C4.0002] # GURMUKHI SIGN BINDI 0A82 ; [.0000.00C4.0002] # GUJARATI SIGN ANUSVARA 0B02 ; [.0000.00C4.0002] # ORIYA SIGN ANUSVARA 0B82 ; [.0000.00C4.0002] # TAMIL SIGN ANUSVARA 0C02 ; [.0000.00C4.0002] # TELUGU SIGN ANUSVARA 0C82 ; [.0000.00C4.0002] # KANNADA SIGN ANUSVARA 0D02 ; [.0000.00C4.0002] # MALAYALAM SIGN ANUSVARA 0D82 ; [.0000.00C4.0002] # SINHALA SIGN ANUSVARAYA 0F7E ; [.0000.00C4.0002] # TIBETAN SIGN RJES SU NGA RO 1036 ; [.0000.00C4.0002] # MYANMAR SIGN ANUSVARA 17C6 ; [.0000.00C4.0002] # KHMER SIGN NIKAHIT 1A74 ; [.0000.00C4.0002] # TAI THAM SIGN MAI KANG 1B02 ; [.0000.00C4.0002] # BALINESE SIGN CECEK 1B80 ; [.0000.00C4.0002] # SUNDANESE SIGN PANYECEK 1CED ; [.0000.00C4.0002] # VEDIC SIGN TIRYAK A80B ; [.0000.00C4.0002] # SYLOTI NAGRI SIGN ANUSVARA A880 ; [.0000.00C4.0002] # SAURASHTRA SIGN ANUSVARA A981 ; [.0000.00C4.0002] # JAVANESE SIGN CECAK 10A0E ; [.0000.00C4.0002] # KHAROSHTHI SIGN ANUSVARA 11001 ; [.0000.00C4.0002] # BRAHMI SIGN ANUSVARA 11081 ; [.0000.00C4.0002] # KAITHI SIGN ANUSVARA 11101 ; [.0000.00C4.0002] # CHAKMA SIGN ANUSVARA 11181 ; [.0000.00C4.0002] # SHARADA SIGN ANUSVARA 11234 ; [.0000.00C4.0002] # KHOJKI SIGN ANUSVARA 112DF ; [.0000.00C4.0002] # KHUDAWADI SIGN ANUSVARA 11300 ; [.0000.00C4.0002] # GRANTHA SIGN COMBINING ANUSVARA ABOVE 11302 ; [.0000.00C4.0002] # GRANTHA SIGN ANUSVARA 11444 ; [.0000.00C4.0002] # NEWA SIGN ANUSVARA 114C0 ; [.0000.00C4.0002] # TIRHUTA SIGN ANUSVARA 115BD ; [.0000.00C4.0002] # SIDDHAM SIGN ANUSVARA 1163D ; [.0000.00C4.0002] # MODI SIGN ANUSVARA 116AB ; [.0000.00C4.0002] # TAKRI SIGN ANUSVARA 11C3D ; [.0000.00C4.0002] # BHAIKSUKI SIGN ANUSVARA 11CB5 ; [.0000.00C4.0002] # MARCHEN SIGN ANUSVARA 0903 ; [.0000.00C5.0002] # DEVANAGARI SIGN VISARGA 0983 ; [.0000.00C5.0002] # BENGALI SIGN VISARGA 0A03 ; [.0000.00C5.0002] # GURMUKHI SIGN VISARGA 0A83 ; [.0000.00C5.0002] # GUJARATI SIGN VISARGA 0B03 ; [.0000.00C5.0002] # ORIYA SIGN VISARGA 0C03 ; [.0000.00C5.0002] # TELUGU SIGN VISARGA 0C83 ; [.0000.00C5.0002] # KANNADA SIGN VISARGA 0D03 ; [.0000.00C5.0002] # MALAYALAM SIGN VISARGA 0D83 ; [.0000.00C5.0002] # SINHALA SIGN VISARGAYA 0F7F ; [.0000.00C5.0002] # TIBETAN SIGN RNAM BCAD 1038 ; [.0000.00C5.0002] # MYANMAR SIGN VISARGA 17C7 ; [.0000.00C5.0002] # KHMER SIGN REAHMUK 1B04 ; [.0000.00C5.0002] # BALINESE SIGN BISAH 1B82 ; [.0000.00C5.0002] # SUNDANESE SIGN PANGWISAD 1CF2 ; [.0000.00C5.0002] # VEDIC SIGN ARDHAVISARGA 1CF3 ; [.0000.00C5.0002] # VEDIC SIGN ROTATED ARDHAVISARGA A881 ; [.0000.00C5.0002] # SAURASHTRA SIGN VISARGA A983 ; [.0000.00C5.0002] # JAVANESE SIGN WIGNYAN 10A0F ; [.0000.00C5.0002] # KHAROSHTHI SIGN VISARGA 11002 ; [.0000.00C5.0002] # BRAHMI SIGN VISARGA 11082 ; [.0000.00C5.0002] # KAITHI SIGN VISARGA 11102 ; [.0000.00C5.0002] # CHAKMA SIGN VISARGA 11182 ; [.0000.00C5.0002] # SHARADA SIGN VISARGA 11303 ; [.0000.00C5.0002] # GRANTHA SIGN VISARGA 11445 ; [.0000.00C5.0002] # NEWA SIGN VISARGA 114C1 ; [.0000.00C5.0002] # TIRHUTA SIGN VISARGA 115BE ; [.0000.00C5.0002] # SIDDHAM SIGN VISARGA 1163E ; [.0000.00C5.0002] # MODI SIGN VISARGA 116AC ; [.0000.00C5.0002] # TAKRI SIGN VISARGA 11C3E ; [.0000.00C5.0002] # BHAIKSUKI SIGN VISARGA 0A70 ; [.0000.00C6.0002] # GURMUKHI TIPPI 0A71 ; [.0000.00C7.0002] # GURMUKHI ADDAK 1B03 ; [.0000.00C8.0002] # BALINESE SIGN SURANG A982 ; [.0000.00C9.0002] # JAVANESE SIGN LAYAR 1B81 ; [.0000.00CA.0002] # SUNDANESE SIGN PANGLAYAR ABEC ; [.0000.00CB.0002] # MEETEI MAYEK LUM IYEK 10A38 ; [.0000.00CC.0002] # KHAROSHTHI SIGN BAR ABOVE 10A39 ; [.0000.00CD.0002] # KHAROSHTHI SIGN CAUDA 10A3A ; [.0000.00CE.0002] # KHAROSHTHI SIGN DOT BELOW 111CB ; [.0000.00CF.0002] # SHARADA VOWEL MODIFIER MARK 111CC ; [.0000.00D0.0002] # SHARADA EXTRA SHORT VOWEL MARK 0E4E ; [.0000.00D1.0002] # THAI CHARACTER YAMAKKAN 0E47 ; [.0000.00D2.0002] # THAI CHARACTER MAITAIKHU 0E48 ; [.0000.00D3.0002] # THAI CHARACTER MAI EK 0E49 ; [.0000.00D4.0002] # THAI CHARACTER MAI THO 0E4A ; [.0000.00D5.0002] # THAI CHARACTER MAI TRI 0E4B ; [.0000.00D6.0002] # THAI CHARACTER MAI CHATTAWA 0E4C ; [.0000.00D7.0002] # THAI CHARACTER THANTHAKHAT 0E4D ; [.0000.00D8.0002] # THAI CHARACTER NIKHAHIT 0EC8 ; [.0000.00D9.0002] # LAO TONE MAI EK 0EC9 ; [.0000.00DA.0002] # LAO TONE MAI THO 0ECA ; [.0000.00DB.0002] # LAO TONE MAI TI 0ECB ; [.0000.00DC.0002] # LAO TONE MAI CATAWA 0ECC ; [.0000.00DD.0002] # LAO CANCELLATION MARK 0ECD ; [.0000.00DE.0002] # LAO NIGGAHITA AABF ; [.0000.00DF.0002] # TAI VIET TONE MAI EK AAC1 ; [.0000.00E0.0002] # TAI VIET TONE MAI THO 0F39 ; [.0000.00E1.0002] # TIBETAN MARK TSA -PHRU A92B ; [.0000.00E2.0002] # KAYAH LI TONE PLOPHU A92C ; [.0000.00E3.0002] # KAYAH LI TONE CALYA A92D ; [.0000.00E4.0002] # KAYAH LI TONE CALYA PLOPHU 1037 ; [.0000.00E5.0002] # MYANMAR SIGN DOT BELOW 17C8 ; [.0000.00E6.0002] # KHMER SIGN YUUKALEAPINTU 17C9 ; [.0000.00E7.0002] # KHMER SIGN MUUSIKATOAN 17CA ; [.0000.00E8.0002] # KHMER SIGN TRIISAP 1A75 ; [.0000.00E9.0002] # TAI THAM SIGN TONE-1 1A76 ; [.0000.00EA.0002] # TAI THAM SIGN TONE-2 1A77 ; [.0000.00EB.0002] # TAI THAM SIGN KHUEN TONE-3 1A78 ; [.0000.00EC.0002] # TAI THAM SIGN KHUEN TONE-4 1A79 ; [.0000.00ED.0002] # TAI THAM SIGN KHUEN TONE-5 1A7A ; [.0000.00EE.0002] # TAI THAM SIGN RA HAAM 1A7B ; [.0000.00EF.0002] # TAI THAM SIGN MAI SAM 1A7C ; [.0000.00F0.0002] # TAI THAM SIGN KHUEN-LUE KARAN 1939 ; [.0000.00F1.0002] # LIMBU SIGN MUKPHRENG 193A ; [.0000.00F2.0002] # LIMBU SIGN KEMPHRENG 193B ; [.0000.00F3.0002] # LIMBU SIGN SA-I 16B30 ; [.0000.00F4.0002] # PAHAWH HMONG MARK CIM TUB 16B31 ; [.0000.00F5.0002] # PAHAWH HMONG MARK CIM SO 16B32 ; [.0000.00F6.0002] # PAHAWH HMONG MARK CIM KES 16B33 ; [.0000.00F7.0002] # PAHAWH HMONG MARK CIM KHAV 16B34 ; [.0000.00F8.0002] # PAHAWH HMONG MARK CIM SUAM 16B35 ; [.0000.00F9.0002] # PAHAWH HMONG MARK CIM HOM 16B36 ; [.0000.00FA.0002] # PAHAWH HMONG MARK CIM TAUM 302A ; [.0000.00FB.0002] # IDEOGRAPHIC LEVEL TONE MARK 302B ; [.0000.00FC.0002] # IDEOGRAPHIC RISING TONE MARK 302C ; [.0000.00FD.0002] # IDEOGRAPHIC DEPARTING TONE MARK 302D ; [.0000.00FE.0002] # IDEOGRAPHIC ENTERING TONE MARK 302E ; [.0000.00FF.0002] # HANGUL SINGLE DOT TONE MARK 302F ; [.0000.0100.0002] # HANGUL DOUBLE DOT TONE MARK 20D0 ; [.0000.0101.0002] # COMBINING LEFT HARPOON ABOVE 20D1 ; [.0000.0102.0002] # COMBINING RIGHT HARPOON ABOVE 20D2 ; [.0000.0103.0002] # COMBINING LONG VERTICAL LINE OVERLAY 20D3 ; [.0000.0103.0002] # COMBINING SHORT VERTICAL LINE OVERLAY 20D4 ; [.0000.0104.0002] # COMBINING ANTICLOCKWISE ARROW ABOVE 20D5 ; [.0000.0105.0002] # COMBINING CLOCKWISE ARROW ABOVE 20D6 ; [.0000.0106.0002] # COMBINING LEFT ARROW ABOVE 20D7 ; [.0000.0107.0002] # COMBINING RIGHT ARROW ABOVE 20DB ; [.0000.0108.0002] # COMBINING THREE DOTS ABOVE 20DC ; [.0000.0109.0002] # COMBINING FOUR DOTS ABOVE 20E1 ; [.0000.010A.0002] # COMBINING LEFT RIGHT ARROW ABOVE 20E6 ; [.0000.010B.0002] # COMBINING DOUBLE VERTICAL STROKE OVERLAY 20E7 ; [.0000.010C.0002] # COMBINING ANNUITY SYMBOL 20E8 ; [.0000.010D.0002] # COMBINING TRIPLE UNDERDOT 20E9 ; [.0000.010E.0002] # COMBINING WIDE BRIDGE ABOVE 101FD ; [.0000.010F.0002] # PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE 02D0 ; [.1BF8.0020.0002] # MODIFIER LETTER TRIANGULAR COLON 02D1 ; [.1BF9.0020.0002] # MODIFIER LETTER HALF TRIANGULAR COLON 0971 ; [.1BFA.0020.0002] # DEVANAGARI SIGN HIGH SPACING DOT 0E46 ; [.1BFB.0020.0002] # THAI CHARACTER MAIYAMOK 0EC6 ; [.1BFC.0020.0002] # LAO KO LA 17D7 ; [.1BFD.0020.0002] # KHMER SIGN LEK TOO 1AA7 ; [.1BFE.0020.0002] # TAI THAM SIGN MAI YAMOK A9CF ; [.1BFF.0020.0002] # JAVANESE PANGRANGKEP A9E6 ; [.1C00.0020.0002] # MYANMAR MODIFIER LETTER SHAN REDUPLICATION AA70 ; [.1C01.0020.0002] # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION AADD ; [.1C02.0020.0002] # TAI VIET SYMBOL SAM AAF3 ; [.1C03.0020.0002] # MEETEI MAYEK SYLLABLE REPETITION MARK AAF4 ; [.1C04.0020.0002] # MEETEI MAYEK WORD REPETITION MARK 16B42 ; [.1C05.0020.0002] # PAHAWH HMONG SIGN VOS NRUA 16B43 ; [.1C06.0020.0002] # PAHAWH HMONG SIGN IB YAM 3005 ; [.1C07.0020.0002] # IDEOGRAPHIC ITERATION MARK 303B ; [.1C08.0020.0002] # VERTICAL IDEOGRAPHIC ITERATION MARK 16FE0 ; [.1C09.0020.0002] # TANGUT ITERATION MARK 3031 ; [.1C0A.0020.0002] # VERTICAL KANA REPEAT MARK 3032 ; [.1C0A.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK 3033 ; [.1C0B.0020.0002] # VERTICAL KANA REPEAT MARK UPPER HALF 3034 ; [.1C0B.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF 3035 ; [.1C0C.0020.0002] # VERTICAL KANA REPEAT MARK LOWER HALF 309D ; [.1C0D.0020.0002] # HIRAGANA ITERATION MARK 309E ; [.1C0D.0020.0002][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK 30FC ; [.1C0E.0020.0002] # KATAKANA-HIRAGANA PROLONGED SOUND MARK FF70 ; [.1C0E.0020.0012] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK 30FD ; [.1C0F.0020.0002] # KATAKANA ITERATION MARK 30FE ; [.1C0F.0020.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK 00A4 ; [.1C10.0020.0002] # CURRENCY SIGN 00A2 ; [.1C11.0020.0002] # CENT SIGN FFE0 ; [.1C11.0020.0003] # FULLWIDTH CENT SIGN 0024 ; [.1C12.0020.0002] # DOLLAR SIGN FF04 ; [.1C12.0020.0003] # FULLWIDTH DOLLAR SIGN FE69 ; [.1C12.0020.000F] # SMALL DOLLAR SIGN 00A3 ; [.1C13.0020.0002] # POUND SIGN FFE1 ; [.1C13.0020.0003] # FULLWIDTH POUND SIGN 00A5 ; [.1C14.0020.0002] # YEN SIGN FFE5 ; [.1C14.0020.0003] # FULLWIDTH YEN SIGN 058F ; [.1C15.0020.0002] # ARMENIAN DRAM SIGN 060B ; [.1C16.0020.0002] # AFGHANI SIGN 09F2 ; [.1C17.0020.0002] # BENGALI RUPEE MARK 09F3 ; [.1C18.0020.0002] # BENGALI RUPEE SIGN 09FB ; [.1C19.0020.0002] # BENGALI GANDA MARK 0AF1 ; [.1C1A.0020.0002] # GUJARATI RUPEE SIGN A838 ; [.1C1B.0020.0002] # NORTH INDIC RUPEE MARK 0BF9 ; [.1C1C.0020.0002] # TAMIL RUPEE SIGN 0E3F ; [.1C1D.0020.0002] # THAI CURRENCY SYMBOL BAHT 17DB ; [.1C1E.0020.0002] # KHMER CURRENCY SYMBOL RIEL 20A0 ; [.1C1F.0020.0002] # EURO-CURRENCY SIGN 20A1 ; [.1C20.0020.0002] # COLON SIGN 20A2 ; [.1C21.0020.0002] # CRUZEIRO SIGN 20A3 ; [.1C22.0020.0002] # FRENCH FRANC SIGN 20A4 ; [.1C23.0020.0002] # LIRA SIGN 20A5 ; [.1C24.0020.0002] # MILL SIGN 20A6 ; [.1C25.0020.0002] # NAIRA SIGN 20A7 ; [.1C26.0020.0002] # PESETA SIGN 20A9 ; [.1C27.0020.0002] # WON SIGN FFE6 ; [.1C27.0020.0003] # FULLWIDTH WON SIGN 20AA ; [.1C28.0020.0002] # NEW SHEQEL SIGN 20AB ; [.1C29.0020.0002] # DONG SIGN 20AC ; [.1C2A.0020.0002] # EURO SIGN 20AD ; [.1C2B.0020.0002] # KIP SIGN 20AE ; [.1C2C.0020.0002] # TUGRIK SIGN 20AF ; [.1C2D.0020.0002] # DRACHMA SIGN 20B0 ; [.1C2E.0020.0002] # GERMAN PENNY SIGN 20B1 ; [.1C2F.0020.0002] # PESO SIGN 20B2 ; [.1C30.0020.0002] # GUARANI SIGN 20B3 ; [.1C31.0020.0002] # AUSTRAL SIGN 20B4 ; [.1C32.0020.0002] # HRYVNIA SIGN 20B5 ; [.1C33.0020.0002] # CEDI SIGN 20B6 ; [.1C34.0020.0002] # LIVRE TOURNOIS SIGN 20B7 ; [.1C35.0020.0002] # SPESMILO SIGN 20B8 ; [.1C36.0020.0002] # TENGE SIGN 20B9 ; [.1C37.0020.0002] # INDIAN RUPEE SIGN 20BA ; [.1C38.0020.0002] # TURKISH LIRA SIGN 20BB ; [.1C39.0020.0002] # NORDIC MARK SIGN 20BC ; [.1C3A.0020.0002] # MANAT SIGN 20BD ; [.1C3B.0020.0002] # RUBLE SIGN 20BE ; [.1C3C.0020.0002] # LARI SIGN 0030 ; [.1C3D.0020.0002] # DIGIT ZERO 0660 ; [.1C3D.0020.0002] # ARABIC-INDIC DIGIT ZERO 06F0 ; [.1C3D.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ZERO 07C0 ; [.1C3D.0020.0002] # NKO DIGIT ZERO 0966 ; [.1C3D.0020.0002] # DEVANAGARI DIGIT ZERO 09E6 ; [.1C3D.0020.0002] # BENGALI DIGIT ZERO 0A66 ; [.1C3D.0020.0002] # GURMUKHI DIGIT ZERO 0AE6 ; [.1C3D.0020.0002] # GUJARATI DIGIT ZERO 0B66 ; [.1C3D.0020.0002] # ORIYA DIGIT ZERO 0BE6 ; [.1C3D.0020.0002] # TAMIL DIGIT ZERO 0C66 ; [.1C3D.0020.0002] # TELUGU DIGIT ZERO 0C78 ; [.1C3D.0020.0002] # TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR 0CE6 ; [.1C3D.0020.0002] # KANNADA DIGIT ZERO 0D66 ; [.1C3D.0020.0002] # MALAYALAM DIGIT ZERO 0DE6 ; [.1C3D.0020.0002] # SINHALA LITH DIGIT ZERO 0E50 ; [.1C3D.0020.0002] # THAI DIGIT ZERO 0ED0 ; [.1C3D.0020.0002] # LAO DIGIT ZERO 0F20 ; [.1C3D.0020.0002] # TIBETAN DIGIT ZERO 1040 ; [.1C3D.0020.0002] # MYANMAR DIGIT ZERO 1090 ; [.1C3D.0020.0002] # MYANMAR SHAN DIGIT ZERO 17E0 ; [.1C3D.0020.0002] # KHMER DIGIT ZERO 17F0 ; [.1C3D.0020.0002] # KHMER SYMBOL LEK ATTAK SON 1810 ; [.1C3D.0020.0002] # MONGOLIAN DIGIT ZERO 1946 ; [.1C3D.0020.0002] # LIMBU DIGIT ZERO 19D0 ; [.1C3D.0020.0002] # NEW TAI LUE DIGIT ZERO 1A80 ; [.1C3D.0020.0002] # TAI THAM HORA DIGIT ZERO 1A90 ; [.1C3D.0020.0002] # TAI THAM THAM DIGIT ZERO 1B50 ; [.1C3D.0020.0002] # BALINESE DIGIT ZERO 1BB0 ; [.1C3D.0020.0002] # SUNDANESE DIGIT ZERO 1C40 ; [.1C3D.0020.0002] # LEPCHA DIGIT ZERO 1C50 ; [.1C3D.0020.0002] # OL CHIKI DIGIT ZERO 3007 ; [.1C3D.0020.0002] # IDEOGRAPHIC NUMBER ZERO A620 ; [.1C3D.0020.0002] # VAI DIGIT ZERO A8D0 ; [.1C3D.0020.0002] # SAURASHTRA DIGIT ZERO A900 ; [.1C3D.0020.0002] # KAYAH LI DIGIT ZERO A9D0 ; [.1C3D.0020.0002] # JAVANESE DIGIT ZERO A9F0 ; [.1C3D.0020.0002] # MYANMAR TAI LAING DIGIT ZERO AA50 ; [.1C3D.0020.0002] # CHAM DIGIT ZERO ABF0 ; [.1C3D.0020.0002] # MEETEI MAYEK DIGIT ZERO 1018A ; [.1C3D.0020.0002] # GREEK ZERO SIGN 104A0 ; [.1C3D.0020.0002] # OSMANYA DIGIT ZERO 11066 ; [.1C3D.0020.0002] # BRAHMI DIGIT ZERO 110F0 ; [.1C3D.0020.0002] # SORA SOMPENG DIGIT ZERO 11136 ; [.1C3D.0020.0002] # CHAKMA DIGIT ZERO 111D0 ; [.1C3D.0020.0002] # SHARADA DIGIT ZERO 112F0 ; [.1C3D.0020.0002] # KHUDAWADI DIGIT ZERO 11450 ; [.1C3D.0020.0002] # NEWA DIGIT ZERO 114D0 ; [.1C3D.0020.0002] # TIRHUTA DIGIT ZERO 11650 ; [.1C3D.0020.0002] # MODI DIGIT ZERO 116C0 ; [.1C3D.0020.0002] # TAKRI DIGIT ZERO 11730 ; [.1C3D.0020.0002] # AHOM DIGIT ZERO 118E0 ; [.1C3D.0020.0002] # WARANG CITI DIGIT ZERO 11C50 ; [.1C3D.0020.0002] # BHAIKSUKI DIGIT ZERO 16A60 ; [.1C3D.0020.0002] # MRO DIGIT ZERO 16B50 ; [.1C3D.0020.0002] # PAHAWH HMONG DIGIT ZERO 1E950 ; [.1C3D.0020.0002] # ADLAM DIGIT ZERO FF10 ; [.1C3D.0020.0003] # FULLWIDTH DIGIT ZERO 0F33 ; [.1C3D.0020.0004] # TIBETAN DIGIT HALF ZERO 1F100 ; [.1C3D.0020.0004][*0277.0020.0004] # DIGIT ZERO FULL STOP 1F101 ; [.1C3D.0020.0004][*0222.0020.0004] # DIGIT ZERO COMMA 1D7CE ; [.1C3D.0020.0005] # MATHEMATICAL BOLD DIGIT ZERO 1D7D8 ; [.1C3D.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO 1D7E2 ; [.1C3D.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ZERO 1D7EC ; [.1C3D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO 1D7F6 ; [.1C3D.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ZERO 24EA ; [.1C3D.0020.0006] # CIRCLED DIGIT ZERO 24FF ; [.1C3D.0020.0006] # NEGATIVE CIRCLED DIGIT ZERO 1F10B ; [.1C3D.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ZERO 1F10C ; [.1C3D.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO 2070 ; [.1C3D.0020.0014] # SUPERSCRIPT ZERO 2080 ; [.1C3D.0020.0015] # SUBSCRIPT ZERO 2189 ; [.1C3D.0020.001E][*0626.0020.001E][.1C40.0020.001E] # VULGAR FRACTION ZERO THIRDS 3358 ; [.1C3D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO 0031 ; [.1C3E.0020.0002] # DIGIT ONE 0661 ; [.1C3E.0020.0002] # ARABIC-INDIC DIGIT ONE 06F1 ; [.1C3E.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ONE 07C1 ; [.1C3E.0020.0002] # NKO DIGIT ONE 0967 ; [.1C3E.0020.0002] # DEVANAGARI DIGIT ONE 09E7 ; [.1C3E.0020.0002] # BENGALI DIGIT ONE 0A67 ; [.1C3E.0020.0002] # GURMUKHI DIGIT ONE 0AE7 ; [.1C3E.0020.0002] # GUJARATI DIGIT ONE 0B67 ; [.1C3E.0020.0002] # ORIYA DIGIT ONE 0BE7 ; [.1C3E.0020.0002] # TAMIL DIGIT ONE 0C67 ; [.1C3E.0020.0002] # TELUGU DIGIT ONE 0C79 ; [.1C3E.0020.0002] # TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR 0C7C ; [.1C3E.0020.0002] # TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR 0CE7 ; [.1C3E.0020.0002] # KANNADA DIGIT ONE 0D67 ; [.1C3E.0020.0002] # MALAYALAM DIGIT ONE 0DE7 ; [.1C3E.0020.0002] # SINHALA LITH DIGIT ONE 0E51 ; [.1C3E.0020.0002] # THAI DIGIT ONE 0ED1 ; [.1C3E.0020.0002] # LAO DIGIT ONE 0F21 ; [.1C3E.0020.0002] # TIBETAN DIGIT ONE 1041 ; [.1C3E.0020.0002] # MYANMAR DIGIT ONE 1091 ; [.1C3E.0020.0002] # MYANMAR SHAN DIGIT ONE 1369 ; [.1C3E.0020.0002] # ETHIOPIC DIGIT ONE 17E1 ; [.1C3E.0020.0002] # KHMER DIGIT ONE 17F1 ; [.1C3E.0020.0002] # KHMER SYMBOL LEK ATTAK MUOY 1811 ; [.1C3E.0020.0002] # MONGOLIAN DIGIT ONE 1947 ; [.1C3E.0020.0002] # LIMBU DIGIT ONE 19D1 ; [.1C3E.0020.0002] # NEW TAI LUE DIGIT ONE 19DA ; [.1C3E.0020.0002] # NEW TAI LUE THAM DIGIT ONE 1A81 ; [.1C3E.0020.0002] # TAI THAM HORA DIGIT ONE 1A91 ; [.1C3E.0020.0002] # TAI THAM THAM DIGIT ONE 1B51 ; [.1C3E.0020.0002] # BALINESE DIGIT ONE 1BB1 ; [.1C3E.0020.0002] # SUNDANESE DIGIT ONE 1C41 ; [.1C3E.0020.0002] # LEPCHA DIGIT ONE 1C51 ; [.1C3E.0020.0002] # OL CHIKI DIGIT ONE 3021 ; [.1C3E.0020.0002] # HANGZHOU NUMERAL ONE A621 ; [.1C3E.0020.0002] # VAI DIGIT ONE A8D1 ; [.1C3E.0020.0002] # SAURASHTRA DIGIT ONE A901 ; [.1C3E.0020.0002] # KAYAH LI DIGIT ONE A9D1 ; [.1C3E.0020.0002] # JAVANESE DIGIT ONE A9F1 ; [.1C3E.0020.0002] # MYANMAR TAI LAING DIGIT ONE AA51 ; [.1C3E.0020.0002] # CHAM DIGIT ONE ABF1 ; [.1C3E.0020.0002] # MEETEI MAYEK DIGIT ONE 10107 ; [.1C3E.0020.0002] # AEGEAN NUMBER ONE 10142 ; [.1C3E.0020.0002] # GREEK ACROPHONIC ATTIC ONE DRACHMA 10158 ; [.1C3E.0020.0002] # GREEK ACROPHONIC HERAEUM ONE PLETHRON 10159 ; [.1C3E.0020.0002] # GREEK ACROPHONIC THESPIAN ONE 1015A ; [.1C3E.0020.0002] # GREEK ACROPHONIC HERMIONIAN ONE 102E1 ; [.1C3E.0020.0002] # COPTIC EPACT DIGIT ONE 10320 ; [.1C3E.0020.0002] # OLD ITALIC NUMERAL ONE 103D1 ; [.1C3E.0020.0002] # OLD PERSIAN NUMBER ONE 104A1 ; [.1C3E.0020.0002] # OSMANYA DIGIT ONE 10858 ; [.1C3E.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE 10879 ; [.1C3E.0020.0002] # PALMYRENE NUMBER ONE 108A7 ; [.1C3E.0020.0002] # NABATAEAN NUMBER ONE 108FB ; [.1C3E.0020.0002] # HATRAN NUMBER ONE 10916 ; [.1C3E.0020.0002] # PHOENICIAN NUMBER ONE 109C0 ; [.1C3E.0020.0002] # MEROITIC CURSIVE NUMBER ONE 10A40 ; [.1C3E.0020.0002] # KHAROSHTHI DIGIT ONE 10A7D ; [.1C3E.0020.0002] # OLD SOUTH ARABIAN NUMBER ONE 10A9D ; [.1C3E.0020.0002] # OLD NORTH ARABIAN NUMBER ONE 10AEB ; [.1C3E.0020.0002] # MANICHAEAN NUMBER ONE 10B58 ; [.1C3E.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE 10B78 ; [.1C3E.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE 10BA9 ; [.1C3E.0020.0002] # PSALTER PAHLAVI NUMBER ONE 10CFA ; [.1C3E.0020.0002] # OLD HUNGARIAN NUMBER ONE 10E60 ; [.1C3E.0020.0002] # RUMI DIGIT ONE 11052 ; [.1C3E.0020.0002] # BRAHMI NUMBER ONE 11067 ; [.1C3E.0020.0002] # BRAHMI DIGIT ONE 110F1 ; [.1C3E.0020.0002] # SORA SOMPENG DIGIT ONE 11137 ; [.1C3E.0020.0002] # CHAKMA DIGIT ONE 111D1 ; [.1C3E.0020.0002] # SHARADA DIGIT ONE 111E1 ; [.1C3E.0020.0002] # SINHALA ARCHAIC DIGIT ONE 112F1 ; [.1C3E.0020.0002] # KHUDAWADI DIGIT ONE 11451 ; [.1C3E.0020.0002] # NEWA DIGIT ONE 114D1 ; [.1C3E.0020.0002] # TIRHUTA DIGIT ONE 11651 ; [.1C3E.0020.0002] # MODI DIGIT ONE 116C1 ; [.1C3E.0020.0002] # TAKRI DIGIT ONE 11731 ; [.1C3E.0020.0002] # AHOM DIGIT ONE 118E1 ; [.1C3E.0020.0002] # WARANG CITI DIGIT ONE 11C51 ; [.1C3E.0020.0002] # BHAIKSUKI DIGIT ONE 11C5A ; [.1C3E.0020.0002] # BHAIKSUKI NUMBER ONE 12415 ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESH2 1241E ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESHU 1242C ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE SHARU 12434 ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BURU 1244F ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BAN2 12458 ; [.1C3E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE ESHE3 16A61 ; [.1C3E.0020.0002] # MRO DIGIT ONE 16B51 ; [.1C3E.0020.0002] # PAHAWH HMONG DIGIT ONE 1D360 ; [.1C3E.0020.0002] # COUNTING ROD UNIT DIGIT ONE 1E8C7 ; [.1C3E.0020.0002] # MENDE KIKAKUI DIGIT ONE 1E951 ; [.1C3E.0020.0002] # ADLAM DIGIT ONE FF11 ; [.1C3E.0020.0003] # FULLWIDTH DIGIT ONE 0F2A ; [.1C3E.0020.0004] # TIBETAN DIGIT HALF ONE 2474 ; [*0317.0020.0004][.1C3E.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT ONE 2488 ; [.1C3E.0020.0004][*0277.0020.0004] # DIGIT ONE FULL STOP 1F102 ; [.1C3E.0020.0004][*0222.0020.0004] # DIGIT ONE COMMA 1D7CF ; [.1C3E.0020.0005] # MATHEMATICAL BOLD DIGIT ONE 1D7D9 ; [.1C3E.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE 1D7E3 ; [.1C3E.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ONE 1D7ED ; [.1C3E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE 1D7F7 ; [.1C3E.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ONE 2460 ; [.1C3E.0020.0006] # CIRCLED DIGIT ONE 24F5 ; [.1C3E.0020.0006] # DOUBLE CIRCLED DIGIT ONE 2776 ; [.1C3E.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT ONE 2780 ; [.1C3E.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ONE 278A ; [.1C3E.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE 00B9 ; [.1C3E.0020.0014] # SUPERSCRIPT ONE 2081 ; [.1C3E.0020.0015] # SUBSCRIPT ONE 215F ; [.1C3E.0020.001E][*0626.0020.001E] # FRACTION NUMERATOR ONE 247D ; [*0317.0020.0004][.1C3E.0020.0004][.1C3D.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER TEN 2491 ; [.1C3E.0020.0004][.1C3D.0020.0004][*0277.0020.0004] # NUMBER TEN FULL STOP 2469 ; [.1C3E.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TEN 24FE ; [.1C3E.0020.0006][.1C3D.0020.0006] # DOUBLE CIRCLED NUMBER TEN 277F ; [.1C3E.0020.0006][.1C3D.0020.0006] # DINGBAT NEGATIVE CIRCLED NUMBER TEN 2789 ; [.1C3E.0020.0006][.1C3D.0020.0006] # DINGBAT CIRCLED SANS-SERIF NUMBER TEN 2793 ; [.1C3E.0020.0006][.1C3D.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN 3248 ; [.1C3E.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TEN ON BLACK SQUARE 33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN 32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER 3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN 247E ; [*0317.0020.0004][.1C3E.0020.0004][.1C3E.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER ELEVEN 2492 ; [.1C3E.0020.0004][.1C3E.0020.0004][*0277.0020.0004] # NUMBER ELEVEN FULL STOP 246A ; [.1C3E.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER ELEVEN 24EB ; [.1C3E.0020.0006][.1C3E.0020.0006] # NEGATIVE CIRCLED NUMBER ELEVEN 2152 ; [.1C3E.0020.001E][*0626.0020.001E][.1C3E.0020.001E][.1C3D.0020.001E] # VULGAR FRACTION ONE TENTH 33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN 32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER 3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN 247F ; [*0317.0020.0004][.1C3E.0020.0004][.1C3F.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER TWELVE 2493 ; [.1C3E.0020.0004][.1C3F.0020.0004][*0277.0020.0004] # NUMBER TWELVE FULL STOP 246B ; [.1C3E.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER TWELVE 24EC ; [.1C3E.0020.0006][.1C3F.0020.0006] # NEGATIVE CIRCLED NUMBER TWELVE 00BD ; [.1C3E.0020.001E][*0626.0020.001E][.1C3F.0020.001E] # VULGAR FRACTION ONE HALF 1F1A4 ; [.1C3E.0020.001C][.1C3F.0020.001C][.1C3D.0020.001C][.1E0C.0020.001D] # SQUARED ONE HUNDRED TWENTY P 33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE 32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER 3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE 2480 ; [*0317.0020.0004][.1C3E.0020.0004][.1C40.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER THIRTEEN 2494 ; [.1C3E.0020.0004][.1C40.0020.0004][*0277.0020.0004] # NUMBER THIRTEEN FULL STOP 246C ; [.1C3E.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER THIRTEEN 24ED ; [.1C3E.0020.0006][.1C40.0020.0006] # NEGATIVE CIRCLED NUMBER THIRTEEN 2153 ; [.1C3E.0020.001E][*0626.0020.001E][.1C40.0020.001E] # VULGAR FRACTION ONE THIRD 33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN 3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN 2481 ; [*0317.0020.0004][.1C3E.0020.0004][.1C41.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER FOURTEEN 2495 ; [.1C3E.0020.0004][.1C41.0020.0004][*0277.0020.0004] # NUMBER FOURTEEN FULL STOP 246D ; [.1C3E.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER FOURTEEN 24EE ; [.1C3E.0020.0006][.1C41.0020.0006] # NEGATIVE CIRCLED NUMBER FOURTEEN 00BC ; [.1C3E.0020.001E][*0626.0020.001E][.1C41.0020.001E] # VULGAR FRACTION ONE QUARTER 33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN 3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN 2482 ; [*0317.0020.0004][.1C3E.0020.0004][.1C42.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER FIFTEEN 2496 ; [.1C3E.0020.0004][.1C42.0020.0004][*0277.0020.0004] # NUMBER FIFTEEN FULL STOP 246E ; [.1C3E.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER FIFTEEN 24EF ; [.1C3E.0020.0006][.1C42.0020.0006] # NEGATIVE CIRCLED NUMBER FIFTEEN 2155 ; [.1C3E.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION ONE FIFTH 33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN 3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN 2483 ; [*0317.0020.0004][.1C3E.0020.0004][.1C43.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER SIXTEEN 2497 ; [.1C3E.0020.0004][.1C43.0020.0004][*0277.0020.0004] # NUMBER SIXTEEN FULL STOP 246F ; [.1C3E.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER SIXTEEN 24F0 ; [.1C3E.0020.0006][.1C43.0020.0006] # NEGATIVE CIRCLED NUMBER SIXTEEN 2159 ; [.1C3E.0020.001E][*0626.0020.001E][.1C43.0020.001E] # VULGAR FRACTION ONE SIXTH 33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN 3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN 2484 ; [*0317.0020.0004][.1C3E.0020.0004][.1C44.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER SEVENTEEN 2498 ; [.1C3E.0020.0004][.1C44.0020.0004][*0277.0020.0004] # NUMBER SEVENTEEN FULL STOP 2470 ; [.1C3E.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER SEVENTEEN 24F1 ; [.1C3E.0020.0006][.1C44.0020.0006] # NEGATIVE CIRCLED NUMBER SEVENTEEN 2150 ; [.1C3E.0020.001E][*0626.0020.001E][.1C44.0020.001E] # VULGAR FRACTION ONE SEVENTH 33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN 3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN 2485 ; [*0317.0020.0004][.1C3E.0020.0004][.1C45.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER EIGHTEEN 2499 ; [.1C3E.0020.0004][.1C45.0020.0004][*0277.0020.0004] # NUMBER EIGHTEEN FULL STOP 2471 ; [.1C3E.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER EIGHTEEN 24F2 ; [.1C3E.0020.0006][.1C45.0020.0006] # NEGATIVE CIRCLED NUMBER EIGHTEEN 215B ; [.1C3E.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION ONE EIGHTH 33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN 336A ; [.1C3E.0020.0004][.1C45.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN 2486 ; [*0317.0020.0004][.1C3E.0020.0004][.1C46.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER NINETEEN 249A ; [.1C3E.0020.0004][.1C46.0020.0004][*0277.0020.0004] # NUMBER NINETEEN FULL STOP 2472 ; [.1C3E.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER NINETEEN 24F3 ; [.1C3E.0020.0006][.1C46.0020.0006] # NEGATIVE CIRCLED NUMBER NINETEEN 2151 ; [.1C3E.0020.001E][*0626.0020.001E][.1C46.0020.001E] # VULGAR FRACTION ONE NINTH 33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN 336B ; [.1C3E.0020.0004][.1C46.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN 33E0 ; [.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE 32C0 ; [.1C3E.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY 3359 ; [.1C3E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE 0032 ; [.1C3F.0020.0002] # DIGIT TWO 0662 ; [.1C3F.0020.0002] # ARABIC-INDIC DIGIT TWO 06F2 ; [.1C3F.0020.0002] # EXTENDED ARABIC-INDIC DIGIT TWO 07C2 ; [.1C3F.0020.0002] # NKO DIGIT TWO 0968 ; [.1C3F.0020.0002] # DEVANAGARI DIGIT TWO 09E8 ; [.1C3F.0020.0002] # BENGALI DIGIT TWO 0A68 ; [.1C3F.0020.0002] # GURMUKHI DIGIT TWO 0AE8 ; [.1C3F.0020.0002] # GUJARATI DIGIT TWO 0B68 ; [.1C3F.0020.0002] # ORIYA DIGIT TWO 0BE8 ; [.1C3F.0020.0002] # TAMIL DIGIT TWO 0C68 ; [.1C3F.0020.0002] # TELUGU DIGIT TWO 0C7A ; [.1C3F.0020.0002] # TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR 0C7D ; [.1C3F.0020.0002] # TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR 0CE8 ; [.1C3F.0020.0002] # KANNADA DIGIT TWO 0D68 ; [.1C3F.0020.0002] # MALAYALAM DIGIT TWO 0DE8 ; [.1C3F.0020.0002] # SINHALA LITH DIGIT TWO 0E52 ; [.1C3F.0020.0002] # THAI DIGIT TWO 0ED2 ; [.1C3F.0020.0002] # LAO DIGIT TWO 0F22 ; [.1C3F.0020.0002] # TIBETAN DIGIT TWO 1042 ; [.1C3F.0020.0002] # MYANMAR DIGIT TWO 1092 ; [.1C3F.0020.0002] # MYANMAR SHAN DIGIT TWO 136A ; [.1C3F.0020.0002] # ETHIOPIC DIGIT TWO 17E2 ; [.1C3F.0020.0002] # KHMER DIGIT TWO 17F2 ; [.1C3F.0020.0002] # KHMER SYMBOL LEK ATTAK PII 1812 ; [.1C3F.0020.0002] # MONGOLIAN DIGIT TWO 1948 ; [.1C3F.0020.0002] # LIMBU DIGIT TWO 19D2 ; [.1C3F.0020.0002] # NEW TAI LUE DIGIT TWO 1A82 ; [.1C3F.0020.0002] # TAI THAM HORA DIGIT TWO 1A92 ; [.1C3F.0020.0002] # TAI THAM THAM DIGIT TWO 1B52 ; [.1C3F.0020.0002] # BALINESE DIGIT TWO 1BB2 ; [.1C3F.0020.0002] # SUNDANESE DIGIT TWO 1C42 ; [.1C3F.0020.0002] # LEPCHA DIGIT TWO 1C52 ; [.1C3F.0020.0002] # OL CHIKI DIGIT TWO 3022 ; [.1C3F.0020.0002] # HANGZHOU NUMERAL TWO A622 ; [.1C3F.0020.0002] # VAI DIGIT TWO A8D2 ; [.1C3F.0020.0002] # SAURASHTRA DIGIT TWO A902 ; [.1C3F.0020.0002] # KAYAH LI DIGIT TWO A9D2 ; [.1C3F.0020.0002] # JAVANESE DIGIT TWO A9F2 ; [.1C3F.0020.0002] # MYANMAR TAI LAING DIGIT TWO AA52 ; [.1C3F.0020.0002] # CHAM DIGIT TWO ABF2 ; [.1C3F.0020.0002] # MEETEI MAYEK DIGIT TWO 10108 ; [.1C3F.0020.0002] # AEGEAN NUMBER TWO 1015B ; [.1C3F.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO 1015C ; [.1C3F.0020.0002] # GREEK ACROPHONIC THESPIAN TWO 1015D ; [.1C3F.0020.0002] # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS 1015E ; [.1C3F.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS 102E2 ; [.1C3F.0020.0002] # COPTIC EPACT DIGIT TWO 103D2 ; [.1C3F.0020.0002] # OLD PERSIAN NUMBER TWO 104A2 ; [.1C3F.0020.0002] # OSMANYA DIGIT TWO 10859 ; [.1C3F.0020.0002] # IMPERIAL ARAMAIC NUMBER TWO 1087A ; [.1C3F.0020.0002] # PALMYRENE NUMBER TWO 108A8 ; [.1C3F.0020.0002] # NABATAEAN NUMBER TWO 1091A ; [.1C3F.0020.0002] # PHOENICIAN NUMBER TWO 109C1 ; [.1C3F.0020.0002] # MEROITIC CURSIVE NUMBER TWO 10A41 ; [.1C3F.0020.0002] # KHAROSHTHI DIGIT TWO 10B59 ; [.1C3F.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWO 10B79 ; [.1C3F.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWO 10BAA ; [.1C3F.0020.0002] # PSALTER PAHLAVI NUMBER TWO 10E61 ; [.1C3F.0020.0002] # RUMI DIGIT TWO 11053 ; [.1C3F.0020.0002] # BRAHMI NUMBER TWO 11068 ; [.1C3F.0020.0002] # BRAHMI DIGIT TWO 110F2 ; [.1C3F.0020.0002] # SORA SOMPENG DIGIT TWO 11138 ; [.1C3F.0020.0002] # CHAKMA DIGIT TWO 111D2 ; [.1C3F.0020.0002] # SHARADA DIGIT TWO 111E2 ; [.1C3F.0020.0002] # SINHALA ARCHAIC DIGIT TWO 112F2 ; [.1C3F.0020.0002] # KHUDAWADI DIGIT TWO 11452 ; [.1C3F.0020.0002] # NEWA DIGIT TWO 114D2 ; [.1C3F.0020.0002] # TIRHUTA DIGIT TWO 11652 ; [.1C3F.0020.0002] # MODI DIGIT TWO 116C2 ; [.1C3F.0020.0002] # TAKRI DIGIT TWO 11732 ; [.1C3F.0020.0002] # AHOM DIGIT TWO 118E2 ; [.1C3F.0020.0002] # WARANG CITI DIGIT TWO 11C52 ; [.1C3F.0020.0002] # BHAIKSUKI DIGIT TWO 11C5B ; [.1C3F.0020.0002] # BHAIKSUKI NUMBER TWO 12400 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH 12416 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESH2 1241F ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESHU 12423 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHAR2 1242D ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHARU 12435 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BURU 1244A ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH TENU 12450 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BAN2 12456 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAMIN 12459 ; [.1C3F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ESHE3 16A62 ; [.1C3F.0020.0002] # MRO DIGIT TWO 16B52 ; [.1C3F.0020.0002] # PAHAWH HMONG DIGIT TWO 1D361 ; [.1C3F.0020.0002] # COUNTING ROD UNIT DIGIT TWO 1E8C8 ; [.1C3F.0020.0002] # MENDE KIKAKUI DIGIT TWO 1E952 ; [.1C3F.0020.0002] # ADLAM DIGIT TWO FF12 ; [.1C3F.0020.0003] # FULLWIDTH DIGIT TWO 0F2B ; [.1C3F.0020.0004] # TIBETAN DIGIT HALF TWO 2475 ; [*0317.0020.0004][.1C3F.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT TWO 2489 ; [.1C3F.0020.0004][*0277.0020.0004] # DIGIT TWO FULL STOP 1F103 ; [.1C3F.0020.0004][*0222.0020.0004] # DIGIT TWO COMMA 1D7D0 ; [.1C3F.0020.0005] # MATHEMATICAL BOLD DIGIT TWO 1D7DA ; [.1C3F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO 1D7E4 ; [.1C3F.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT TWO 1D7EE ; [.1C3F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO 1D7F8 ; [.1C3F.0020.0005] # MATHEMATICAL MONOSPACE DIGIT TWO 2461 ; [.1C3F.0020.0006] # CIRCLED DIGIT TWO 24F6 ; [.1C3F.0020.0006] # DOUBLE CIRCLED DIGIT TWO 2777 ; [.1C3F.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT TWO 2781 ; [.1C3F.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT TWO 278B ; [.1C3F.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO 00B2 ; [.1C3F.0020.0014] # SUPERSCRIPT TWO 2082 ; [.1C3F.0020.0015] # SUBSCRIPT TWO 2487 ; [*0317.0020.0004][.1C3F.0020.0004][.1C3D.0020.0004][*0318.0020.0004] # PARENTHESIZED NUMBER TWENTY 249B ; [.1C3F.0020.0004][.1C3D.0020.0004][*0277.0020.0004] # NUMBER TWENTY FULL STOP 2473 ; [.1C3F.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TWENTY 24F4 ; [.1C3F.0020.0006][.1C3D.0020.0006] # NEGATIVE CIRCLED NUMBER TWENTY 3249 ; [.1C3F.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER TWENTY ON BLACK SQUARE 33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY 336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY 3251 ; [.1C3F.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER TWENTY ONE 33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE 336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE 3252 ; [.1C3F.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER TWENTY TWO 1F1A2 ; [.1C3F.0020.001C][.1C3F.0020.001C][*0277.0020.001C][.1C3F.0020.001C] # SQUARED TWENTY-TWO POINT TWO 33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO 336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO 3253 ; [.1C3F.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER TWENTY THREE 2154 ; [.1C3F.0020.001E][*0626.0020.001E][.1C40.0020.001E] # VULGAR FRACTION TWO THIRDS 33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE 336F ; [.1C3F.0020.0004][.1C40.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE 3254 ; [.1C3F.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER TWENTY FOUR 33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR 3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR 3255 ; [.1C3F.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER TWENTY FIVE 2156 ; [.1C3F.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION TWO FIFTHS 33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE 3256 ; [.1C3F.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER TWENTY SIX 33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX 3257 ; [.1C3F.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER TWENTY SEVEN 33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN 3258 ; [.1C3F.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER TWENTY EIGHT 33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT 3259 ; [.1C3F.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER TWENTY NINE 33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE 1F19D ; [.1C3F.0020.001C][.1D65.0020.001D] # SQUARED TWO K 1F19C ; [.1C3F.0020.001C][.1DB9.0020.001C][.1C8F.0020.001C][*0209.0020.001C][.1E71.0020.001D][.1C7A.0020.001C][.1E33.0020.001C] # SQUARED SECOND SCREEN 33E1 ; [.1C3F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO 32C1 ; [.1C3F.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY 335A ; [.1C3F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO 0033 ; [.1C40.0020.0002] # DIGIT THREE 0663 ; [.1C40.0020.0002] # ARABIC-INDIC DIGIT THREE 06F3 ; [.1C40.0020.0002] # EXTENDED ARABIC-INDIC DIGIT THREE 07C3 ; [.1C40.0020.0002] # NKO DIGIT THREE 0969 ; [.1C40.0020.0002] # DEVANAGARI DIGIT THREE 09E9 ; [.1C40.0020.0002] # BENGALI DIGIT THREE 0A69 ; [.1C40.0020.0002] # GURMUKHI DIGIT THREE 0AE9 ; [.1C40.0020.0002] # GUJARATI DIGIT THREE 0B69 ; [.1C40.0020.0002] # ORIYA DIGIT THREE 0BE9 ; [.1C40.0020.0002] # TAMIL DIGIT THREE 0C69 ; [.1C40.0020.0002] # TELUGU DIGIT THREE 0C7B ; [.1C40.0020.0002] # TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR 0C7E ; [.1C40.0020.0002] # TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR 0CE9 ; [.1C40.0020.0002] # KANNADA DIGIT THREE 0D69 ; [.1C40.0020.0002] # MALAYALAM DIGIT THREE 0DE9 ; [.1C40.0020.0002] # SINHALA LITH DIGIT THREE 0E53 ; [.1C40.0020.0002] # THAI DIGIT THREE 0ED3 ; [.1C40.0020.0002] # LAO DIGIT THREE 0F23 ; [.1C40.0020.0002] # TIBETAN DIGIT THREE 1043 ; [.1C40.0020.0002] # MYANMAR DIGIT THREE 1093 ; [.1C40.0020.0002] # MYANMAR SHAN DIGIT THREE 136B ; [.1C40.0020.0002] # ETHIOPIC DIGIT THREE 17E3 ; [.1C40.0020.0002] # KHMER DIGIT THREE 17F3 ; [.1C40.0020.0002] # KHMER SYMBOL LEK ATTAK BEI 1813 ; [.1C40.0020.0002] # MONGOLIAN DIGIT THREE 1949 ; [.1C40.0020.0002] # LIMBU DIGIT THREE 19D3 ; [.1C40.0020.0002] # NEW TAI LUE DIGIT THREE 1A83 ; [.1C40.0020.0002] # TAI THAM HORA DIGIT THREE 1A93 ; [.1C40.0020.0002] # TAI THAM THAM DIGIT THREE 1B53 ; [.1C40.0020.0002] # BALINESE DIGIT THREE 1BB3 ; [.1C40.0020.0002] # SUNDANESE DIGIT THREE 1C43 ; [.1C40.0020.0002] # LEPCHA DIGIT THREE 1C53 ; [.1C40.0020.0002] # OL CHIKI DIGIT THREE 3023 ; [.1C40.0020.0002] # HANGZHOU NUMERAL THREE A623 ; [.1C40.0020.0002] # VAI DIGIT THREE A8D3 ; [.1C40.0020.0002] # SAURASHTRA DIGIT THREE A903 ; [.1C40.0020.0002] # KAYAH LI DIGIT THREE A9D3 ; [.1C40.0020.0002] # JAVANESE DIGIT THREE A9F3 ; [.1C40.0020.0002] # MYANMAR TAI LAING DIGIT THREE AA53 ; [.1C40.0020.0002] # CHAM DIGIT THREE ABF3 ; [.1C40.0020.0002] # MEETEI MAYEK DIGIT THREE 10109 ; [.1C40.0020.0002] # AEGEAN NUMBER THREE 102E3 ; [.1C40.0020.0002] # COPTIC EPACT DIGIT THREE 104A3 ; [.1C40.0020.0002] # OSMANYA DIGIT THREE 1085A ; [.1C40.0020.0002] # IMPERIAL ARAMAIC NUMBER THREE 1087B ; [.1C40.0020.0002] # PALMYRENE NUMBER THREE 108A9 ; [.1C40.0020.0002] # NABATAEAN NUMBER THREE 1091B ; [.1C40.0020.0002] # PHOENICIAN NUMBER THREE 109C2 ; [.1C40.0020.0002] # MEROITIC CURSIVE NUMBER THREE 10A42 ; [.1C40.0020.0002] # KHAROSHTHI DIGIT THREE 10B5A ; [.1C40.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER THREE 10B7A ; [.1C40.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER THREE 10BAB ; [.1C40.0020.0002] # PSALTER PAHLAVI NUMBER THREE 10E62 ; [.1C40.0020.0002] # RUMI DIGIT THREE 11054 ; [.1C40.0020.0002] # BRAHMI NUMBER THREE 11069 ; [.1C40.0020.0002] # BRAHMI DIGIT THREE 110F3 ; [.1C40.0020.0002] # SORA SOMPENG DIGIT THREE 11139 ; [.1C40.0020.0002] # CHAKMA DIGIT THREE 111D3 ; [.1C40.0020.0002] # SHARADA DIGIT THREE 111E3 ; [.1C40.0020.0002] # SINHALA ARCHAIC DIGIT THREE 112F3 ; [.1C40.0020.0002] # KHUDAWADI DIGIT THREE 11453 ; [.1C40.0020.0002] # NEWA DIGIT THREE 114D3 ; [.1C40.0020.0002] # TIRHUTA DIGIT THREE 11653 ; [.1C40.0020.0002] # MODI DIGIT THREE 116C3 ; [.1C40.0020.0002] # TAKRI DIGIT THREE 11733 ; [.1C40.0020.0002] # AHOM DIGIT THREE 118E3 ; [.1C40.0020.0002] # WARANG CITI DIGIT THREE 11C53 ; [.1C40.0020.0002] # BHAIKSUKI DIGIT THREE 11C5C ; [.1C40.0020.0002] # BHAIKSUKI NUMBER THREE 12401 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH 12408 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE DISH 12417 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESH2 12420 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESHU 12424 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 12425 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM 1242E ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU 1242F ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM 12436 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU 12437 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM 1243A ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16 1243B ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21 1244B ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH TENU 12451 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BAN2 12457 ; [.1C40.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAESH 16A63 ; [.1C40.0020.0002] # MRO DIGIT THREE 16B53 ; [.1C40.0020.0002] # PAHAWH HMONG DIGIT THREE 1D362 ; [.1C40.0020.0002] # COUNTING ROD UNIT DIGIT THREE 1E8C9 ; [.1C40.0020.0002] # MENDE KIKAKUI DIGIT THREE 1E953 ; [.1C40.0020.0002] # ADLAM DIGIT THREE FF13 ; [.1C40.0020.0003] # FULLWIDTH DIGIT THREE 0F2C ; [.1C40.0020.0004] # TIBETAN DIGIT HALF THREE 2476 ; [*0317.0020.0004][.1C40.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT THREE 248A ; [.1C40.0020.0004][*0277.0020.0004] # DIGIT THREE FULL STOP 1F104 ; [.1C40.0020.0004][*0222.0020.0004] # DIGIT THREE COMMA 1D7D1 ; [.1C40.0020.0005] # MATHEMATICAL BOLD DIGIT THREE 1D7DB ; [.1C40.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE 1D7E5 ; [.1C40.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT THREE 1D7EF ; [.1C40.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE 1D7F9 ; [.1C40.0020.0005] # MATHEMATICAL MONOSPACE DIGIT THREE 2462 ; [.1C40.0020.0006] # CIRCLED DIGIT THREE 24F7 ; [.1C40.0020.0006] # DOUBLE CIRCLED DIGIT THREE 2778 ; [.1C40.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT THREE 2782 ; [.1C40.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT THREE 278C ; [.1C40.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE 00B3 ; [.1C40.0020.0014] # SUPERSCRIPT THREE 2083 ; [.1C40.0020.0015] # SUBSCRIPT THREE 324A ; [.1C40.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER THIRTY ON BLACK SQUARE 325A ; [.1C40.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER THIRTY 33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY 325B ; [.1C40.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER THIRTY ONE 33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE 325C ; [.1C40.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER THIRTY TWO 325D ; [.1C40.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER THIRTY THREE 325E ; [.1C40.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER THIRTY FOUR 00BE ; [.1C40.0020.001E][*0626.0020.001E][.1C41.0020.001E] # VULGAR FRACTION THREE QUARTERS 325F ; [.1C40.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER THIRTY FIVE 2157 ; [.1C40.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION THREE FIFTHS 32B1 ; [.1C40.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER THIRTY SIX 32B2 ; [.1C40.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER THIRTY SEVEN 32B3 ; [.1C40.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER THIRTY EIGHT 215C ; [.1C40.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION THREE EIGHTHS 32B4 ; [.1C40.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER THIRTY NINE 1F19B ; [.1C40.0020.001C][.1C8F.0020.001D] # SQUARED THREE D 33E2 ; [.1C40.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE 32C2 ; [.1C40.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH 335B ; [.1C40.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE 0034 ; [.1C41.0020.0002] # DIGIT FOUR 0664 ; [.1C41.0020.0002] # ARABIC-INDIC DIGIT FOUR 06F4 ; [.1C41.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FOUR 07C4 ; [.1C41.0020.0002] # NKO DIGIT FOUR 096A ; [.1C41.0020.0002] # DEVANAGARI DIGIT FOUR 09EA ; [.1C41.0020.0002] # BENGALI DIGIT FOUR 0A6A ; [.1C41.0020.0002] # GURMUKHI DIGIT FOUR 0AEA ; [.1C41.0020.0002] # GUJARATI DIGIT FOUR 0B6A ; [.1C41.0020.0002] # ORIYA DIGIT FOUR 0BEA ; [.1C41.0020.0002] # TAMIL DIGIT FOUR 0C6A ; [.1C41.0020.0002] # TELUGU DIGIT FOUR 0CEA ; [.1C41.0020.0002] # KANNADA DIGIT FOUR 0D6A ; [.1C41.0020.0002] # MALAYALAM DIGIT FOUR 0DEA ; [.1C41.0020.0002] # SINHALA LITH DIGIT FOUR 0E54 ; [.1C41.0020.0002] # THAI DIGIT FOUR 0ED4 ; [.1C41.0020.0002] # LAO DIGIT FOUR 0F24 ; [.1C41.0020.0002] # TIBETAN DIGIT FOUR 1044 ; [.1C41.0020.0002] # MYANMAR DIGIT FOUR 1094 ; [.1C41.0020.0002] # MYANMAR SHAN DIGIT FOUR 136C ; [.1C41.0020.0002] # ETHIOPIC DIGIT FOUR 17E4 ; [.1C41.0020.0002] # KHMER DIGIT FOUR 17F4 ; [.1C41.0020.0002] # KHMER SYMBOL LEK ATTAK BUON 1814 ; [.1C41.0020.0002] # MONGOLIAN DIGIT FOUR 194A ; [.1C41.0020.0002] # LIMBU DIGIT FOUR 19D4 ; [.1C41.0020.0002] # NEW TAI LUE DIGIT FOUR 1A84 ; [.1C41.0020.0002] # TAI THAM HORA DIGIT FOUR 1A94 ; [.1C41.0020.0002] # TAI THAM THAM DIGIT FOUR 1B54 ; [.1C41.0020.0002] # BALINESE DIGIT FOUR 1BB4 ; [.1C41.0020.0002] # SUNDANESE DIGIT FOUR 1C44 ; [.1C41.0020.0002] # LEPCHA DIGIT FOUR 1C54 ; [.1C41.0020.0002] # OL CHIKI DIGIT FOUR 3024 ; [.1C41.0020.0002] # HANGZHOU NUMERAL FOUR A624 ; [.1C41.0020.0002] # VAI DIGIT FOUR A8D4 ; [.1C41.0020.0002] # SAURASHTRA DIGIT FOUR A904 ; [.1C41.0020.0002] # KAYAH LI DIGIT FOUR A9D4 ; [.1C41.0020.0002] # JAVANESE DIGIT FOUR A9F4 ; [.1C41.0020.0002] # MYANMAR TAI LAING DIGIT FOUR AA54 ; [.1C41.0020.0002] # CHAM DIGIT FOUR ABF4 ; [.1C41.0020.0002] # MEETEI MAYEK DIGIT FOUR 1010A ; [.1C41.0020.0002] # AEGEAN NUMBER FOUR 102E4 ; [.1C41.0020.0002] # COPTIC EPACT DIGIT FOUR 104A4 ; [.1C41.0020.0002] # OSMANYA DIGIT FOUR 1087C ; [.1C41.0020.0002] # PALMYRENE NUMBER FOUR 108AA ; [.1C41.0020.0002] # NABATAEAN NUMBER FOUR 108AB ; [.1C41.0020.0002] # NABATAEAN CRUCIFORM NUMBER FOUR 109C3 ; [.1C41.0020.0002] # MEROITIC CURSIVE NUMBER FOUR 10A43 ; [.1C41.0020.0002] # KHAROSHTHI DIGIT FOUR 10B5B ; [.1C41.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER FOUR 10B7B ; [.1C41.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER FOUR 10BAC ; [.1C41.0020.0002] # PSALTER PAHLAVI NUMBER FOUR 10E63 ; [.1C41.0020.0002] # RUMI DIGIT FOUR 11055 ; [.1C41.0020.0002] # BRAHMI NUMBER FOUR 1106A ; [.1C41.0020.0002] # BRAHMI DIGIT FOUR 110F4 ; [.1C41.0020.0002] # SORA SOMPENG DIGIT FOUR 1113A ; [.1C41.0020.0002] # CHAKMA DIGIT FOUR 111D4 ; [.1C41.0020.0002] # SHARADA DIGIT FOUR 111E4 ; [.1C41.0020.0002] # SINHALA ARCHAIC DIGIT FOUR 112F4 ; [.1C41.0020.0002] # KHUDAWADI DIGIT FOUR 11454 ; [.1C41.0020.0002] # NEWA DIGIT FOUR 114D4 ; [.1C41.0020.0002] # TIRHUTA DIGIT FOUR 11654 ; [.1C41.0020.0002] # MODI DIGIT FOUR 116C4 ; [.1C41.0020.0002] # TAKRI DIGIT FOUR 11734 ; [.1C41.0020.0002] # AHOM DIGIT FOUR 118E4 ; [.1C41.0020.0002] # WARANG CITI DIGIT FOUR 11C54 ; [.1C41.0020.0002] # BHAIKSUKI DIGIT FOUR 11C5D ; [.1C41.0020.0002] # BHAIKSUKI NUMBER FOUR 12402 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH 12409 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR DISH 1240F ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U 12418 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESH2 12421 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESHU 12426 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHAR2 12430 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHARU 12438 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BURU 1243C ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU 1243D ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4 1243E ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A 1243F ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B 1244C ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH TENU 12452 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 12453 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM 12469 ; [.1C41.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM 16A64 ; [.1C41.0020.0002] # MRO DIGIT FOUR 16B54 ; [.1C41.0020.0002] # PAHAWH HMONG DIGIT FOUR 1D363 ; [.1C41.0020.0002] # COUNTING ROD UNIT DIGIT FOUR 1E8CA ; [.1C41.0020.0002] # MENDE KIKAKUI DIGIT FOUR 1E954 ; [.1C41.0020.0002] # ADLAM DIGIT FOUR FF14 ; [.1C41.0020.0003] # FULLWIDTH DIGIT FOUR 0F2D ; [.1C41.0020.0004] # TIBETAN DIGIT HALF FOUR 2477 ; [*0317.0020.0004][.1C41.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT FOUR 248B ; [.1C41.0020.0004][*0277.0020.0004] # DIGIT FOUR FULL STOP 1F105 ; [.1C41.0020.0004][*0222.0020.0004] # DIGIT FOUR COMMA 1D7D2 ; [.1C41.0020.0005] # MATHEMATICAL BOLD DIGIT FOUR 1D7DC ; [.1C41.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR 1D7E6 ; [.1C41.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FOUR 1D7F0 ; [.1C41.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR 1D7FA ; [.1C41.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FOUR 2463 ; [.1C41.0020.0006] # CIRCLED DIGIT FOUR 24F8 ; [.1C41.0020.0006] # DOUBLE CIRCLED DIGIT FOUR 2779 ; [.1C41.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FOUR 2783 ; [.1C41.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR 278D ; [.1C41.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR 2074 ; [.1C41.0020.0014] # SUPERSCRIPT FOUR 2084 ; [.1C41.0020.0015] # SUBSCRIPT FOUR 324B ; [.1C41.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FORTY ON BLACK SQUARE 32B5 ; [.1C41.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FORTY 32B6 ; [.1C41.0020.0006][.1C3E.0020.0006] # CIRCLED NUMBER FORTY ONE 32B7 ; [.1C41.0020.0006][.1C3F.0020.0006] # CIRCLED NUMBER FORTY TWO 32B8 ; [.1C41.0020.0006][.1C40.0020.0006] # CIRCLED NUMBER FORTY THREE 32B9 ; [.1C41.0020.0006][.1C41.0020.0006] # CIRCLED NUMBER FORTY FOUR 32BA ; [.1C41.0020.0006][.1C42.0020.0006] # CIRCLED NUMBER FORTY FIVE 2158 ; [.1C41.0020.001E][*0626.0020.001E][.1C42.0020.001E] # VULGAR FRACTION FOUR FIFTHS 32BB ; [.1C41.0020.0006][.1C43.0020.0006] # CIRCLED NUMBER FORTY SIX 32BC ; [.1C41.0020.0006][.1C44.0020.0006] # CIRCLED NUMBER FORTY SEVEN 32BD ; [.1C41.0020.0006][.1C45.0020.0006] # CIRCLED NUMBER FORTY EIGHT 32BE ; [.1C41.0020.0006][.1C46.0020.0006] # CIRCLED NUMBER FORTY NINE 1F19E ; [.1C41.0020.001C][.1D65.0020.001D] # SQUARED FOUR K 33E3 ; [.1C41.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR 32C3 ; [.1C41.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL 335C ; [.1C41.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR 0035 ; [.1C42.0020.0002] # DIGIT FIVE 0665 ; [.1C42.0020.0002] # ARABIC-INDIC DIGIT FIVE 06F5 ; [.1C42.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FIVE 07C5 ; [.1C42.0020.0002] # NKO DIGIT FIVE 096B ; [.1C42.0020.0002] # DEVANAGARI DIGIT FIVE 09EB ; [.1C42.0020.0002] # BENGALI DIGIT FIVE 0A6B ; [.1C42.0020.0002] # GURMUKHI DIGIT FIVE 0AEB ; [.1C42.0020.0002] # GUJARATI DIGIT FIVE 0B6B ; [.1C42.0020.0002] # ORIYA DIGIT FIVE 0BEB ; [.1C42.0020.0002] # TAMIL DIGIT FIVE 0C6B ; [.1C42.0020.0002] # TELUGU DIGIT FIVE 0CEB ; [.1C42.0020.0002] # KANNADA DIGIT FIVE 0D6B ; [.1C42.0020.0002] # MALAYALAM DIGIT FIVE 0DEB ; [.1C42.0020.0002] # SINHALA LITH DIGIT FIVE 0E55 ; [.1C42.0020.0002] # THAI DIGIT FIVE 0ED5 ; [.1C42.0020.0002] # LAO DIGIT FIVE 0F25 ; [.1C42.0020.0002] # TIBETAN DIGIT FIVE 1045 ; [.1C42.0020.0002] # MYANMAR DIGIT FIVE 1095 ; [.1C42.0020.0002] # MYANMAR SHAN DIGIT FIVE 136D ; [.1C42.0020.0002] # ETHIOPIC DIGIT FIVE 17E5 ; [.1C42.0020.0002] # KHMER DIGIT FIVE 17F5 ; [.1C42.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM 1815 ; [.1C42.0020.0002] # MONGOLIAN DIGIT FIVE 194B ; [.1C42.0020.0002] # LIMBU DIGIT FIVE 19D5 ; [.1C42.0020.0002] # NEW TAI LUE DIGIT FIVE 1A85 ; [.1C42.0020.0002] # TAI THAM HORA DIGIT FIVE 1A95 ; [.1C42.0020.0002] # TAI THAM THAM DIGIT FIVE 1B55 ; [.1C42.0020.0002] # BALINESE DIGIT FIVE 1BB5 ; [.1C42.0020.0002] # SUNDANESE DIGIT FIVE 1C45 ; [.1C42.0020.0002] # LEPCHA DIGIT FIVE 1C55 ; [.1C42.0020.0002] # OL CHIKI DIGIT FIVE 3025 ; [.1C42.0020.0002] # HANGZHOU NUMERAL FIVE A625 ; [.1C42.0020.0002] # VAI DIGIT FIVE A8D5 ; [.1C42.0020.0002] # SAURASHTRA DIGIT FIVE A905 ; [.1C42.0020.0002] # KAYAH LI DIGIT FIVE A9D5 ; [.1C42.0020.0002] # JAVANESE DIGIT FIVE A9F5 ; [.1C42.0020.0002] # MYANMAR TAI LAING DIGIT FIVE AA55 ; [.1C42.0020.0002] # CHAM DIGIT FIVE ABF5 ; [.1C42.0020.0002] # MEETEI MAYEK DIGIT FIVE 1010B ; [.1C42.0020.0002] # AEGEAN NUMBER FIVE 10143 ; [.1C42.0020.0002] # GREEK ACROPHONIC ATTIC FIVE 10148 ; [.1C42.0020.0002] # GREEK ACROPHONIC ATTIC FIVE TALENTS 1014F ; [.1C42.0020.0002] # GREEK ACROPHONIC ATTIC FIVE STATERS 1015F ; [.1C42.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE 10173 ; [.1C42.0020.0002] # GREEK ACROPHONIC DELPHIC FIVE MNAS 102E5 ; [.1C42.0020.0002] # COPTIC EPACT DIGIT FIVE 10321 ; [.1C42.0020.0002] # OLD ITALIC NUMERAL FIVE 104A5 ; [.1C42.0020.0002] # OSMANYA DIGIT FIVE 1087D ; [.1C42.0020.0002] # PALMYRENE NUMBER FIVE 108AC ; [.1C42.0020.0002] # NABATAEAN NUMBER FIVE 108FC ; [.1C42.0020.0002] # HATRAN NUMBER FIVE 109C4 ; [.1C42.0020.0002] # MEROITIC CURSIVE NUMBER FIVE 10AEC ; [.1C42.0020.0002] # MANICHAEAN NUMBER FIVE 10CFB ; [.1C42.0020.0002] # OLD HUNGARIAN NUMBER FIVE 10E64 ; [.1C42.0020.0002] # RUMI DIGIT FIVE 11056 ; [.1C42.0020.0002] # BRAHMI NUMBER FIVE 1106B ; [.1C42.0020.0002] # BRAHMI DIGIT FIVE 110F5 ; [.1C42.0020.0002] # SORA SOMPENG DIGIT FIVE 1113B ; [.1C42.0020.0002] # CHAKMA DIGIT FIVE 111D5 ; [.1C42.0020.0002] # SHARADA DIGIT FIVE 111E5 ; [.1C42.0020.0002] # SINHALA ARCHAIC DIGIT FIVE 112F5 ; [.1C42.0020.0002] # KHUDAWADI DIGIT FIVE 11455 ; [.1C42.0020.0002] # NEWA DIGIT FIVE 114D5 ; [.1C42.0020.0002] # TIRHUTA DIGIT FIVE 11655 ; [.1C42.0020.0002] # MODI DIGIT FIVE 116C5 ; [.1C42.0020.0002] # TAKRI DIGIT FIVE 11735 ; [.1C42.0020.0002] # AHOM DIGIT FIVE 118E5 ; [.1C42.0020.0002] # WARANG CITI DIGIT FIVE 11C55 ; [.1C42.0020.0002] # BHAIKSUKI DIGIT FIVE 11C5E ; [.1C42.0020.0002] # BHAIKSUKI NUMBER FIVE 12403 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH 1240A ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE DISH 12410 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U 12419 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESH2 12422 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESHU 12427 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHAR2 12431 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHARU 12439 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BURU 1244D ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH TENU 12454 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 12455 ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM 1246A ; [.1C42.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM 16A65 ; [.1C42.0020.0002] # MRO DIGIT FIVE 16B55 ; [.1C42.0020.0002] # PAHAWH HMONG DIGIT FIVE 1D364 ; [.1C42.0020.0002] # COUNTING ROD UNIT DIGIT FIVE 1E8CB ; [.1C42.0020.0002] # MENDE KIKAKUI DIGIT FIVE 1E955 ; [.1C42.0020.0002] # ADLAM DIGIT FIVE FF15 ; [.1C42.0020.0003] # FULLWIDTH DIGIT FIVE 0F2E ; [.1C42.0020.0004] # TIBETAN DIGIT HALF FIVE 2478 ; [*0317.0020.0004][.1C42.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT FIVE 248C ; [.1C42.0020.0004][*0277.0020.0004] # DIGIT FIVE FULL STOP 1F106 ; [.1C42.0020.0004][*0222.0020.0004] # DIGIT FIVE COMMA 1D7D3 ; [.1C42.0020.0005] # MATHEMATICAL BOLD DIGIT FIVE 1D7DD ; [.1C42.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE 1D7E7 ; [.1C42.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FIVE 1D7F1 ; [.1C42.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE 1D7FB ; [.1C42.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FIVE 2464 ; [.1C42.0020.0006] # CIRCLED DIGIT FIVE 24F9 ; [.1C42.0020.0006] # DOUBLE CIRCLED DIGIT FIVE 277A ; [.1C42.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FIVE 2784 ; [.1C42.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE 278E ; [.1C42.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE 2075 ; [.1C42.0020.0014] # SUPERSCRIPT FIVE 2085 ; [.1C42.0020.0015] # SUBSCRIPT FIVE 324C ; [.1C42.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FIFTY ON BLACK SQUARE 32BF ; [.1C42.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER FIFTY 1F1A0 ; [.1C42.0020.001C][*0277.0020.001C][.1C3E.0020.001C] # SQUARED FIVE POINT ONE 215A ; [.1C42.0020.001E][*0626.0020.001E][.1C43.0020.001E] # VULGAR FRACTION FIVE SIXTHS 215D ; [.1C42.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION FIVE EIGHTHS 33E4 ; [.1C42.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE 32C4 ; [.1C42.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY 335D ; [.1C42.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE 0036 ; [.1C43.0020.0002] # DIGIT SIX 0666 ; [.1C43.0020.0002] # ARABIC-INDIC DIGIT SIX 06F6 ; [.1C43.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SIX 07C6 ; [.1C43.0020.0002] # NKO DIGIT SIX 096C ; [.1C43.0020.0002] # DEVANAGARI DIGIT SIX 09EC ; [.1C43.0020.0002] # BENGALI DIGIT SIX 0A6C ; [.1C43.0020.0002] # GURMUKHI DIGIT SIX 0AEC ; [.1C43.0020.0002] # GUJARATI DIGIT SIX 0B6C ; [.1C43.0020.0002] # ORIYA DIGIT SIX 0BEC ; [.1C43.0020.0002] # TAMIL DIGIT SIX 0C6C ; [.1C43.0020.0002] # TELUGU DIGIT SIX 0CEC ; [.1C43.0020.0002] # KANNADA DIGIT SIX 0D6C ; [.1C43.0020.0002] # MALAYALAM DIGIT SIX 0DEC ; [.1C43.0020.0002] # SINHALA LITH DIGIT SIX 0E56 ; [.1C43.0020.0002] # THAI DIGIT SIX 0ED6 ; [.1C43.0020.0002] # LAO DIGIT SIX 0F26 ; [.1C43.0020.0002] # TIBETAN DIGIT SIX 1046 ; [.1C43.0020.0002] # MYANMAR DIGIT SIX 1096 ; [.1C43.0020.0002] # MYANMAR SHAN DIGIT SIX 136E ; [.1C43.0020.0002] # ETHIOPIC DIGIT SIX 17E6 ; [.1C43.0020.0002] # KHMER DIGIT SIX 17F6 ; [.1C43.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-MUOY 1816 ; [.1C43.0020.0002] # MONGOLIAN DIGIT SIX 194C ; [.1C43.0020.0002] # LIMBU DIGIT SIX 19D6 ; [.1C43.0020.0002] # NEW TAI LUE DIGIT SIX 1A86 ; [.1C43.0020.0002] # TAI THAM HORA DIGIT SIX 1A96 ; [.1C43.0020.0002] # TAI THAM THAM DIGIT SIX 1B56 ; [.1C43.0020.0002] # BALINESE DIGIT SIX 1BB6 ; [.1C43.0020.0002] # SUNDANESE DIGIT SIX 1C46 ; [.1C43.0020.0002] # LEPCHA DIGIT SIX 1C56 ; [.1C43.0020.0002] # OL CHIKI DIGIT SIX 2185 ; [.1C43.0020.0002] # ROMAN NUMERAL SIX LATE FORM 3026 ; [.1C43.0020.0002] # HANGZHOU NUMERAL SIX A626 ; [.1C43.0020.0002] # VAI DIGIT SIX A8D6 ; [.1C43.0020.0002] # SAURASHTRA DIGIT SIX A906 ; [.1C43.0020.0002] # KAYAH LI DIGIT SIX A9D6 ; [.1C43.0020.0002] # JAVANESE DIGIT SIX A9F6 ; [.1C43.0020.0002] # MYANMAR TAI LAING DIGIT SIX AA56 ; [.1C43.0020.0002] # CHAM DIGIT SIX ABF6 ; [.1C43.0020.0002] # MEETEI MAYEK DIGIT SIX 1010C ; [.1C43.0020.0002] # AEGEAN NUMBER SIX 102E6 ; [.1C43.0020.0002] # COPTIC EPACT DIGIT SIX 104A6 ; [.1C43.0020.0002] # OSMANYA DIGIT SIX 109C5 ; [.1C43.0020.0002] # MEROITIC CURSIVE NUMBER SIX 10E65 ; [.1C43.0020.0002] # RUMI DIGIT SIX 11057 ; [.1C43.0020.0002] # BRAHMI NUMBER SIX 1106C ; [.1C43.0020.0002] # BRAHMI DIGIT SIX 110F6 ; [.1C43.0020.0002] # SORA SOMPENG DIGIT SIX 1113C ; [.1C43.0020.0002] # CHAKMA DIGIT SIX 111D6 ; [.1C43.0020.0002] # SHARADA DIGIT SIX 111E6 ; [.1C43.0020.0002] # SINHALA ARCHAIC DIGIT SIX 112F6 ; [.1C43.0020.0002] # KHUDAWADI DIGIT SIX 11456 ; [.1C43.0020.0002] # NEWA DIGIT SIX 114D6 ; [.1C43.0020.0002] # TIRHUTA DIGIT SIX 11656 ; [.1C43.0020.0002] # MODI DIGIT SIX 116C6 ; [.1C43.0020.0002] # TAKRI DIGIT SIX 11736 ; [.1C43.0020.0002] # AHOM DIGIT SIX 118E6 ; [.1C43.0020.0002] # WARANG CITI DIGIT SIX 11C56 ; [.1C43.0020.0002] # BHAIKSUKI DIGIT SIX 11C5F ; [.1C43.0020.0002] # BHAIKSUKI NUMBER SIX 12404 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH 1240B ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX DISH 12411 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U 1241A ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX GESH2 12428 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX SHAR2 12440 ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9 1244E ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH TENU 1246B ; [.1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM 16A66 ; [.1C43.0020.0002] # MRO DIGIT SIX 16B56 ; [.1C43.0020.0002] # PAHAWH HMONG DIGIT SIX 1D365 ; [.1C43.0020.0002] # COUNTING ROD UNIT DIGIT SIX 1E8CC ; [.1C43.0020.0002] # MENDE KIKAKUI DIGIT SIX 1E956 ; [.1C43.0020.0002] # ADLAM DIGIT SIX FF16 ; [.1C43.0020.0003] # FULLWIDTH DIGIT SIX 0F2F ; [.1C43.0020.0004] # TIBETAN DIGIT HALF SIX 2479 ; [*0317.0020.0004][.1C43.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT SIX 248D ; [.1C43.0020.0004][*0277.0020.0004] # DIGIT SIX FULL STOP 1F107 ; [.1C43.0020.0004][*0222.0020.0004] # DIGIT SIX COMMA 1D7D4 ; [.1C43.0020.0005] # MATHEMATICAL BOLD DIGIT SIX 1D7DE ; [.1C43.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX 1D7E8 ; [.1C43.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SIX 1D7F2 ; [.1C43.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX 1D7FC ; [.1C43.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SIX 2465 ; [.1C43.0020.0006] # CIRCLED DIGIT SIX 24FA ; [.1C43.0020.0006] # DOUBLE CIRCLED DIGIT SIX 277B ; [.1C43.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SIX 2785 ; [.1C43.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SIX 278F ; [.1C43.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX 2076 ; [.1C43.0020.0014] # SUPERSCRIPT SIX 2086 ; [.1C43.0020.0015] # SUBSCRIPT SIX 324D ; [.1C43.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER SIXTY ON BLACK SQUARE 1F1A3 ; [.1C43.0020.001C][.1C3D.0020.001C][.1E0C.0020.001D] # SQUARED SIXTY P 33E5 ; [.1C43.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX 32C5 ; [.1C43.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE 335E ; [.1C43.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX 0037 ; [.1C44.0020.0002] # DIGIT SEVEN 0667 ; [.1C44.0020.0002] # ARABIC-INDIC DIGIT SEVEN 06F7 ; [.1C44.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SEVEN 07C7 ; [.1C44.0020.0002] # NKO DIGIT SEVEN 096D ; [.1C44.0020.0002] # DEVANAGARI DIGIT SEVEN 09ED ; [.1C44.0020.0002] # BENGALI DIGIT SEVEN 0A6D ; [.1C44.0020.0002] # GURMUKHI DIGIT SEVEN 0AED ; [.1C44.0020.0002] # GUJARATI DIGIT SEVEN 0B6D ; [.1C44.0020.0002] # ORIYA DIGIT SEVEN 0BED ; [.1C44.0020.0002] # TAMIL DIGIT SEVEN 0C6D ; [.1C44.0020.0002] # TELUGU DIGIT SEVEN 0CED ; [.1C44.0020.0002] # KANNADA DIGIT SEVEN 0D6D ; [.1C44.0020.0002] # MALAYALAM DIGIT SEVEN 0DED ; [.1C44.0020.0002] # SINHALA LITH DIGIT SEVEN 0E57 ; [.1C44.0020.0002] # THAI DIGIT SEVEN 0ED7 ; [.1C44.0020.0002] # LAO DIGIT SEVEN 0F27 ; [.1C44.0020.0002] # TIBETAN DIGIT SEVEN 1047 ; [.1C44.0020.0002] # MYANMAR DIGIT SEVEN 1097 ; [.1C44.0020.0002] # MYANMAR SHAN DIGIT SEVEN 136F ; [.1C44.0020.0002] # ETHIOPIC DIGIT SEVEN 17E7 ; [.1C44.0020.0002] # KHMER DIGIT SEVEN 17F7 ; [.1C44.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-PII 1817 ; [.1C44.0020.0002] # MONGOLIAN DIGIT SEVEN 194D ; [.1C44.0020.0002] # LIMBU DIGIT SEVEN 19D7 ; [.1C44.0020.0002] # NEW TAI LUE DIGIT SEVEN 1A87 ; [.1C44.0020.0002] # TAI THAM HORA DIGIT SEVEN 1A97 ; [.1C44.0020.0002] # TAI THAM THAM DIGIT SEVEN 1B57 ; [.1C44.0020.0002] # BALINESE DIGIT SEVEN 1BB7 ; [.1C44.0020.0002] # SUNDANESE DIGIT SEVEN 1C47 ; [.1C44.0020.0002] # LEPCHA DIGIT SEVEN 1C57 ; [.1C44.0020.0002] # OL CHIKI DIGIT SEVEN 3027 ; [.1C44.0020.0002] # HANGZHOU NUMERAL SEVEN A627 ; [.1C44.0020.0002] # VAI DIGIT SEVEN A8D7 ; [.1C44.0020.0002] # SAURASHTRA DIGIT SEVEN A907 ; [.1C44.0020.0002] # KAYAH LI DIGIT SEVEN A9D7 ; [.1C44.0020.0002] # JAVANESE DIGIT SEVEN A9F7 ; [.1C44.0020.0002] # MYANMAR TAI LAING DIGIT SEVEN AA57 ; [.1C44.0020.0002] # CHAM DIGIT SEVEN ABF7 ; [.1C44.0020.0002] # MEETEI MAYEK DIGIT SEVEN 1010D ; [.1C44.0020.0002] # AEGEAN NUMBER SEVEN 102E7 ; [.1C44.0020.0002] # COPTIC EPACT DIGIT SEVEN 104A7 ; [.1C44.0020.0002] # OSMANYA DIGIT SEVEN 109C6 ; [.1C44.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN 10E66 ; [.1C44.0020.0002] # RUMI DIGIT SEVEN 11058 ; [.1C44.0020.0002] # BRAHMI NUMBER SEVEN 1106D ; [.1C44.0020.0002] # BRAHMI DIGIT SEVEN 110F7 ; [.1C44.0020.0002] # SORA SOMPENG DIGIT SEVEN 1113D ; [.1C44.0020.0002] # CHAKMA DIGIT SEVEN 111D7 ; [.1C44.0020.0002] # SHARADA DIGIT SEVEN 111E7 ; [.1C44.0020.0002] # SINHALA ARCHAIC DIGIT SEVEN 112F7 ; [.1C44.0020.0002] # KHUDAWADI DIGIT SEVEN 11457 ; [.1C44.0020.0002] # NEWA DIGIT SEVEN 114D7 ; [.1C44.0020.0002] # TIRHUTA DIGIT SEVEN 11657 ; [.1C44.0020.0002] # MODI DIGIT SEVEN 116C7 ; [.1C44.0020.0002] # TAKRI DIGIT SEVEN 11737 ; [.1C44.0020.0002] # AHOM DIGIT SEVEN 118E7 ; [.1C44.0020.0002] # WARANG CITI DIGIT SEVEN 11C57 ; [.1C44.0020.0002] # BHAIKSUKI DIGIT SEVEN 11C60 ; [.1C44.0020.0002] # BHAIKSUKI NUMBER SEVEN 12405 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN ASH 1240C ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN DISH 12412 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U 1241B ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN GESH2 12429 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN SHAR2 12441 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3 12442 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A 12443 ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B 1246C ; [.1C44.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM 16A67 ; [.1C44.0020.0002] # MRO DIGIT SEVEN 16B57 ; [.1C44.0020.0002] # PAHAWH HMONG DIGIT SEVEN 1D366 ; [.1C44.0020.0002] # COUNTING ROD UNIT DIGIT SEVEN 1E8CD ; [.1C44.0020.0002] # MENDE KIKAKUI DIGIT SEVEN 1E957 ; [.1C44.0020.0002] # ADLAM DIGIT SEVEN FF17 ; [.1C44.0020.0003] # FULLWIDTH DIGIT SEVEN 0F30 ; [.1C44.0020.0004] # TIBETAN DIGIT HALF SEVEN 247A ; [*0317.0020.0004][.1C44.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT SEVEN 248E ; [.1C44.0020.0004][*0277.0020.0004] # DIGIT SEVEN FULL STOP 1F108 ; [.1C44.0020.0004][*0222.0020.0004] # DIGIT SEVEN COMMA 1D7D5 ; [.1C44.0020.0005] # MATHEMATICAL BOLD DIGIT SEVEN 1D7DF ; [.1C44.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN 1D7E9 ; [.1C44.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SEVEN 1D7F3 ; [.1C44.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN 1D7FD ; [.1C44.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SEVEN 2466 ; [.1C44.0020.0006] # CIRCLED DIGIT SEVEN 24FB ; [.1C44.0020.0006] # DOUBLE CIRCLED DIGIT SEVEN 277C ; [.1C44.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN 2786 ; [.1C44.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN 2790 ; [.1C44.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN 2077 ; [.1C44.0020.0014] # SUPERSCRIPT SEVEN 2087 ; [.1C44.0020.0015] # SUBSCRIPT SEVEN 324E ; [.1C44.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER SEVENTY ON BLACK SQUARE 1F1A1 ; [.1C44.0020.001C][*0277.0020.001C][.1C3E.0020.001C] # SQUARED SEVEN POINT ONE 215E ; [.1C44.0020.001E][*0626.0020.001E][.1C45.0020.001E] # VULGAR FRACTION SEVEN EIGHTHS 33E6 ; [.1C44.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN 32C6 ; [.1C44.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY 335F ; [.1C44.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN 0038 ; [.1C45.0020.0002] # DIGIT EIGHT 0668 ; [.1C45.0020.0002] # ARABIC-INDIC DIGIT EIGHT 06F8 ; [.1C45.0020.0002] # EXTENDED ARABIC-INDIC DIGIT EIGHT 07C8 ; [.1C45.0020.0002] # NKO DIGIT EIGHT 096E ; [.1C45.0020.0002] # DEVANAGARI DIGIT EIGHT 09EE ; [.1C45.0020.0002] # BENGALI DIGIT EIGHT 0A6E ; [.1C45.0020.0002] # GURMUKHI DIGIT EIGHT 0AEE ; [.1C45.0020.0002] # GUJARATI DIGIT EIGHT 0B6E ; [.1C45.0020.0002] # ORIYA DIGIT EIGHT 0BEE ; [.1C45.0020.0002] # TAMIL DIGIT EIGHT 0C6E ; [.1C45.0020.0002] # TELUGU DIGIT EIGHT 0CEE ; [.1C45.0020.0002] # KANNADA DIGIT EIGHT 0D6E ; [.1C45.0020.0002] # MALAYALAM DIGIT EIGHT 0DEE ; [.1C45.0020.0002] # SINHALA LITH DIGIT EIGHT 0E58 ; [.1C45.0020.0002] # THAI DIGIT EIGHT 0ED8 ; [.1C45.0020.0002] # LAO DIGIT EIGHT 0F28 ; [.1C45.0020.0002] # TIBETAN DIGIT EIGHT 1048 ; [.1C45.0020.0002] # MYANMAR DIGIT EIGHT 1098 ; [.1C45.0020.0002] # MYANMAR SHAN DIGIT EIGHT 1370 ; [.1C45.0020.0002] # ETHIOPIC DIGIT EIGHT 17E8 ; [.1C45.0020.0002] # KHMER DIGIT EIGHT 17F8 ; [.1C45.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BEI 1818 ; [.1C45.0020.0002] # MONGOLIAN DIGIT EIGHT 194E ; [.1C45.0020.0002] # LIMBU DIGIT EIGHT 19D8 ; [.1C45.0020.0002] # NEW TAI LUE DIGIT EIGHT 1A88 ; [.1C45.0020.0002] # TAI THAM HORA DIGIT EIGHT 1A98 ; [.1C45.0020.0002] # TAI THAM THAM DIGIT EIGHT 1B58 ; [.1C45.0020.0002] # BALINESE DIGIT EIGHT 1BB8 ; [.1C45.0020.0002] # SUNDANESE DIGIT EIGHT 1C48 ; [.1C45.0020.0002] # LEPCHA DIGIT EIGHT 1C58 ; [.1C45.0020.0002] # OL CHIKI DIGIT EIGHT 3028 ; [.1C45.0020.0002] # HANGZHOU NUMERAL EIGHT A628 ; [.1C45.0020.0002] # VAI DIGIT EIGHT A8D8 ; [.1C45.0020.0002] # SAURASHTRA DIGIT EIGHT A908 ; [.1C45.0020.0002] # KAYAH LI DIGIT EIGHT A9D8 ; [.1C45.0020.0002] # JAVANESE DIGIT EIGHT A9F8 ; [.1C45.0020.0002] # MYANMAR TAI LAING DIGIT EIGHT AA58 ; [.1C45.0020.0002] # CHAM DIGIT EIGHT ABF8 ; [.1C45.0020.0002] # MEETEI MAYEK DIGIT EIGHT 1010E ; [.1C45.0020.0002] # AEGEAN NUMBER EIGHT 102E8 ; [.1C45.0020.0002] # COPTIC EPACT DIGIT EIGHT 104A8 ; [.1C45.0020.0002] # OSMANYA DIGIT EIGHT 109C7 ; [.1C45.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT 10E67 ; [.1C45.0020.0002] # RUMI DIGIT EIGHT 11059 ; [.1C45.0020.0002] # BRAHMI NUMBER EIGHT 1106E ; [.1C45.0020.0002] # BRAHMI DIGIT EIGHT 110F8 ; [.1C45.0020.0002] # SORA SOMPENG DIGIT EIGHT 1113E ; [.1C45.0020.0002] # CHAKMA DIGIT EIGHT 111D8 ; [.1C45.0020.0002] # SHARADA DIGIT EIGHT 111E8 ; [.1C45.0020.0002] # SINHALA ARCHAIC DIGIT EIGHT 112F8 ; [.1C45.0020.0002] # KHUDAWADI DIGIT EIGHT 11458 ; [.1C45.0020.0002] # NEWA DIGIT EIGHT 114D8 ; [.1C45.0020.0002] # TIRHUTA DIGIT EIGHT 11658 ; [.1C45.0020.0002] # MODI DIGIT EIGHT 116C8 ; [.1C45.0020.0002] # TAKRI DIGIT EIGHT 11738 ; [.1C45.0020.0002] # AHOM DIGIT EIGHT 118E8 ; [.1C45.0020.0002] # WARANG CITI DIGIT EIGHT 11C58 ; [.1C45.0020.0002] # BHAIKSUKI DIGIT EIGHT 11C61 ; [.1C45.0020.0002] # BHAIKSUKI NUMBER EIGHT 12406 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT ASH 1240D ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT DISH 12413 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U 1241C ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT GESH2 1242A ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT SHAR2 12444 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU 12445 ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3 1246D ; [.1C45.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM 16A68 ; [.1C45.0020.0002] # MRO DIGIT EIGHT 16B58 ; [.1C45.0020.0002] # PAHAWH HMONG DIGIT EIGHT 1D367 ; [.1C45.0020.0002] # COUNTING ROD UNIT DIGIT EIGHT 1E8CE ; [.1C45.0020.0002] # MENDE KIKAKUI DIGIT EIGHT 1E958 ; [.1C45.0020.0002] # ADLAM DIGIT EIGHT FF18 ; [.1C45.0020.0003] # FULLWIDTH DIGIT EIGHT 0F31 ; [.1C45.0020.0004] # TIBETAN DIGIT HALF EIGHT 247B ; [*0317.0020.0004][.1C45.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT EIGHT 248F ; [.1C45.0020.0004][*0277.0020.0004] # DIGIT EIGHT FULL STOP 1F109 ; [.1C45.0020.0004][*0222.0020.0004] # DIGIT EIGHT COMMA 1D7D6 ; [.1C45.0020.0005] # MATHEMATICAL BOLD DIGIT EIGHT 1D7E0 ; [.1C45.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT 1D7EA ; [.1C45.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT EIGHT 1D7F4 ; [.1C45.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT 1D7FE ; [.1C45.0020.0005] # MATHEMATICAL MONOSPACE DIGIT EIGHT 2467 ; [.1C45.0020.0006] # CIRCLED DIGIT EIGHT 24FC ; [.1C45.0020.0006] # DOUBLE CIRCLED DIGIT EIGHT 277D ; [.1C45.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT 2787 ; [.1C45.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT 2791 ; [.1C45.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT 2078 ; [.1C45.0020.0014] # SUPERSCRIPT EIGHT 2088 ; [.1C45.0020.0015] # SUBSCRIPT EIGHT 324F ; [.1C45.0020.0006][.1C3D.0020.0006] # CIRCLED NUMBER EIGHTY ON BLACK SQUARE 1F19F ; [.1C45.0020.001C][.1D65.0020.001D] # SQUARED EIGHT K 33E7 ; [.1C45.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT 32C7 ; [.1C45.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST 3360 ; [.1C45.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT 0039 ; [.1C46.0020.0002] # DIGIT NINE 0669 ; [.1C46.0020.0002] # ARABIC-INDIC DIGIT NINE 06F9 ; [.1C46.0020.0002] # EXTENDED ARABIC-INDIC DIGIT NINE 07C9 ; [.1C46.0020.0002] # NKO DIGIT NINE 096F ; [.1C46.0020.0002] # DEVANAGARI DIGIT NINE 09EF ; [.1C46.0020.0002] # BENGALI DIGIT NINE 0A6F ; [.1C46.0020.0002] # GURMUKHI DIGIT NINE 0AEF ; [.1C46.0020.0002] # GUJARATI DIGIT NINE 0B6F ; [.1C46.0020.0002] # ORIYA DIGIT NINE 0BEF ; [.1C46.0020.0002] # TAMIL DIGIT NINE 0C6F ; [.1C46.0020.0002] # TELUGU DIGIT NINE 0CEF ; [.1C46.0020.0002] # KANNADA DIGIT NINE 0D6F ; [.1C46.0020.0002] # MALAYALAM DIGIT NINE 0DEF ; [.1C46.0020.0002] # SINHALA LITH DIGIT NINE 0E59 ; [.1C46.0020.0002] # THAI DIGIT NINE 0ED9 ; [.1C46.0020.0002] # LAO DIGIT NINE 0F29 ; [.1C46.0020.0002] # TIBETAN DIGIT NINE 1049 ; [.1C46.0020.0002] # MYANMAR DIGIT NINE 1099 ; [.1C46.0020.0002] # MYANMAR SHAN DIGIT NINE 1371 ; [.1C46.0020.0002] # ETHIOPIC DIGIT NINE 17E9 ; [.1C46.0020.0002] # KHMER DIGIT NINE 17F9 ; [.1C46.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BUON 1819 ; [.1C46.0020.0002] # MONGOLIAN DIGIT NINE 194F ; [.1C46.0020.0002] # LIMBU DIGIT NINE 19D9 ; [.1C46.0020.0002] # NEW TAI LUE DIGIT NINE 1A89 ; [.1C46.0020.0002] # TAI THAM HORA DIGIT NINE 1A99 ; [.1C46.0020.0002] # TAI THAM THAM DIGIT NINE 1B59 ; [.1C46.0020.0002] # BALINESE DIGIT NINE 1BB9 ; [.1C46.0020.0002] # SUNDANESE DIGIT NINE 1C49 ; [.1C46.0020.0002] # LEPCHA DIGIT NINE 1C59 ; [.1C46.0020.0002] # OL CHIKI DIGIT NINE 3029 ; [.1C46.0020.0002] # HANGZHOU NUMERAL NINE A629 ; [.1C46.0020.0002] # VAI DIGIT NINE A8D9 ; [.1C46.0020.0002] # SAURASHTRA DIGIT NINE A909 ; [.1C46.0020.0002] # KAYAH LI DIGIT NINE A9D9 ; [.1C46.0020.0002] # JAVANESE DIGIT NINE A9F9 ; [.1C46.0020.0002] # MYANMAR TAI LAING DIGIT NINE AA59 ; [.1C46.0020.0002] # CHAM DIGIT NINE ABF9 ; [.1C46.0020.0002] # MEETEI MAYEK DIGIT NINE 1010F ; [.1C46.0020.0002] # AEGEAN NUMBER NINE 102E9 ; [.1C46.0020.0002] # COPTIC EPACT DIGIT NINE 104A9 ; [.1C46.0020.0002] # OSMANYA DIGIT NINE 109C8 ; [.1C46.0020.0002] # MEROITIC CURSIVE NUMBER NINE 10E68 ; [.1C46.0020.0002] # RUMI DIGIT NINE 1105A ; [.1C46.0020.0002] # BRAHMI NUMBER NINE 1106F ; [.1C46.0020.0002] # BRAHMI DIGIT NINE 110F9 ; [.1C46.0020.0002] # SORA SOMPENG DIGIT NINE 1113F ; [.1C46.0020.0002] # CHAKMA DIGIT NINE 111D9 ; [.1C46.0020.0002] # SHARADA DIGIT NINE 111E9 ; [.1C46.0020.0002] # SINHALA ARCHAIC DIGIT NINE 112F9 ; [.1C46.0020.0002] # KHUDAWADI DIGIT NINE 11459 ; [.1C46.0020.0002] # NEWA DIGIT NINE 114D9 ; [.1C46.0020.0002] # TIRHUTA DIGIT NINE 11659 ; [.1C46.0020.0002] # MODI DIGIT NINE 116C9 ; [.1C46.0020.0002] # TAKRI DIGIT NINE 11739 ; [.1C46.0020.0002] # AHOM DIGIT NINE 118E9 ; [.1C46.0020.0002] # WARANG CITI DIGIT NINE 11C59 ; [.1C46.0020.0002] # BHAIKSUKI DIGIT NINE 11C62 ; [.1C46.0020.0002] # BHAIKSUKI NUMBER NINE 12407 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE ASH 1240E ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE DISH 12414 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U 1241D ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE GESH2 1242B ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE SHAR2 12446 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU 12447 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3 12448 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4 12449 ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A 1246E ; [.1C46.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 16A69 ; [.1C46.0020.0002] # MRO DIGIT NINE 16B59 ; [.1C46.0020.0002] # PAHAWH HMONG DIGIT NINE 1D368 ; [.1C46.0020.0002] # COUNTING ROD UNIT DIGIT NINE 1E8CF ; [.1C46.0020.0002] # MENDE KIKAKUI DIGIT NINE 1E959 ; [.1C46.0020.0002] # ADLAM DIGIT NINE FF19 ; [.1C46.0020.0003] # FULLWIDTH DIGIT NINE 0F32 ; [.1C46.0020.0004] # TIBETAN DIGIT HALF NINE 247C ; [*0317.0020.0004][.1C46.0020.0004][*0318.0020.0004] # PARENTHESIZED DIGIT NINE 2490 ; [.1C46.0020.0004][*0277.0020.0004] # DIGIT NINE FULL STOP 1F10A ; [.1C46.0020.0004][*0222.0020.0004] # DIGIT NINE COMMA 1D7D7 ; [.1C46.0020.0005] # MATHEMATICAL BOLD DIGIT NINE 1D7E1 ; [.1C46.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE 1D7EB ; [.1C46.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT NINE 1D7F5 ; [.1C46.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE 1D7FF ; [.1C46.0020.0005] # MATHEMATICAL MONOSPACE DIGIT NINE 2468 ; [.1C46.0020.0006] # CIRCLED DIGIT NINE 24FD ; [.1C46.0020.0006] # DOUBLE CIRCLED DIGIT NINE 277E ; [.1C46.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT NINE 2788 ; [.1C46.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT NINE 2792 ; [.1C46.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE 2079 ; [.1C46.0020.0014] # SUPERSCRIPT NINE 2089 ; [.1C46.0020.0015] # SUBSCRIPT NINE 33E8 ; [.1C46.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE 32C8 ; [.1C46.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER 3361 ; [.1C46.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE 0061 ; [.1C47.0020.0002] # LATIN SMALL LETTER A FF41 ; [.1C47.0020.0003] # FULLWIDTH LATIN SMALL LETTER A 0363 ; [.1C47.0020.0004] # COMBINING LATIN SMALL LETTER A 249C ; [*0317.0020.0004][.1C47.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER A 1D41A ; [.1C47.0020.0005] # MATHEMATICAL BOLD SMALL A 1D44E ; [.1C47.0020.0005] # MATHEMATICAL ITALIC SMALL A 1D482 ; [.1C47.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL A 1D4B6 ; [.1C47.0020.0005] # MATHEMATICAL SCRIPT SMALL A 1D4EA ; [.1C47.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL A 1D51E ; [.1C47.0020.0005] # MATHEMATICAL FRAKTUR SMALL A 1D552 ; [.1C47.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL A 1D586 ; [.1C47.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL A 1D5BA ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF SMALL A 1D5EE ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL A 1D622 ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL A 1D656 ; [.1C47.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A 1D68A ; [.1C47.0020.0005] # MATHEMATICAL MONOSPACE SMALL A 24D0 ; [.1C47.0020.0006] # CIRCLED LATIN SMALL LETTER A 0041 ; [.1C47.0020.0008] # LATIN CAPITAL LETTER A FF21 ; [.1C47.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER A 1F110 ; [*0317.0020.0004][.1C47.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER A 1D400 ; [.1C47.0020.000B] # MATHEMATICAL BOLD CAPITAL A 1D434 ; [.1C47.0020.000B] # MATHEMATICAL ITALIC CAPITAL A 1D468 ; [.1C47.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL A 1D49C ; [.1C47.0020.000B] # MATHEMATICAL SCRIPT CAPITAL A 1D4D0 ; [.1C47.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL A 1D504 ; [.1C47.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL A 1D538 ; [.1C47.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL A 1D56C ; [.1C47.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL A 1D5A0 ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL A 1D5D4 ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL A 1D608 ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A 1D63C ; [.1C47.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A 1D670 ; [.1C47.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL A 24B6 ; [.1C47.0020.000C] # CIRCLED LATIN CAPITAL LETTER A 1F150 ; [.1C47.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER A 00AA ; [.1C47.0020.0014] # FEMININE ORDINAL INDICATOR 1D43 ; [.1C47.0020.0014] # MODIFIER LETTER SMALL A 2090 ; [.1C47.0020.0015] # LATIN SUBSCRIPT SMALL LETTER A 1D2C ; [.1C47.0020.001D] # MODIFIER LETTER CAPITAL A 1F130 ; [.1C47.0020.001D] # SQUARED LATIN CAPITAL LETTER A 1F170 ; [.1C47.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER A 00E1 ; [.1C47.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH ACUTE 00E0 ; [.1C47.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C47.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH GRAVE 0103 ; [.1C47.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE 0102 ; [.1C47.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE 1EAF ; [.1C47.0020.0002][.0000.0026.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE 1EAE ; [.1C47.0020.0008][.0000.0026.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE 1EB1 ; [.1C47.0020.0002][.0000.0026.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE 1EB0 ; [.1C47.0020.0008][.0000.0026.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE 1EB5 ; [.1C47.0020.0002][.0000.0026.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE 1EB4 ; [.1C47.0020.0008][.0000.0026.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE 1EB3 ; [.1C47.0020.0002][.0000.0026.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE 1EB2 ; [.1C47.0020.0008][.0000.0026.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 00E2 ; [.1C47.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX 00C2 ; [.1C47.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 1EA5 ; [.1C47.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA4 ; [.1C47.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA7 ; [.1C47.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA6 ; [.1C47.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 1EAB ; [.1C47.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE 1EAA ; [.1C47.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1EA9 ; [.1C47.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EA8 ; [.1C47.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 01CE ; [.1C47.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER A WITH CARON 01CD ; [.1C47.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER A WITH CARON 00E5 ; [.1C47.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1C47.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1C47.0020.0008][.0000.0029.0002] # ANGSTROM SIGN 01FB ; [.1C47.0020.0002][.0000.0029.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1C47.0020.0008][.0000.0029.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 00E4 ; [.1C47.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER A WITH DIAERESIS 1DF2 ; [.1C47.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER A WITH DIAERESIS A79B ; [.1C47.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK AE 00C4 ; [.1C47.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS A79A ; [.1C47.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK AE 01DF ; [.1C47.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1C47.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00E3 ; [.1C47.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH TILDE 00C3 ; [.1C47.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH TILDE 0227 ; [.1C47.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER A WITH DOT ABOVE 0226 ; [.1C47.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE 01E1 ; [.1C47.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON 01E0 ; [.1C47.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON 0105 ; [.1C47.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER A WITH OGONEK 0104 ; [.1C47.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER A WITH OGONEK 0101 ; [.1C47.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH MACRON 1EA3 ; [.1C47.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH HOOK ABOVE 1EA2 ; [.1C47.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH HOOK ABOVE 0201 ; [.1C47.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER A WITH DOUBLE GRAVE 0200 ; [.1C47.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE 0203 ; [.1C47.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER A WITH INVERTED BREVE 0202 ; [.1C47.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER A WITH INVERTED BREVE 1EA1 ; [.1C47.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH DOT BELOW 1EA0 ; [.1C47.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH DOT BELOW 1EB7 ; [.1C47.0020.0002][.0000.0042.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW 1EB6 ; [.1C47.0020.0008][.0000.0042.0002][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW 1EAD ; [.1C47.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAC ; [.1C47.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1E01 ; [.1C47.0020.0002][.0000.0044.0002] # LATIN SMALL LETTER A WITH RING BELOW 1E00 ; [.1C47.0020.0008][.0000.0044.0002] # LATIN CAPITAL LETTER A WITH RING BELOW 1DD3 ; [.1C47.0020.0004][.0000.0110.0004] # COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE A733 ; [.1C47.0020.0004][.1C47.0020.0004] # LATIN SMALL LETTER AA A732 ; [.1C47.0020.000A][.1C47.0020.000A] # LATIN CAPITAL LETTER AA 1F18E ; [.1C47.0020.001D][.1C60.0020.001D] # NEGATIVE SQUARED AB 2100 ; [.1C47.0020.0004][*0394.0020.0004][.1C7A.0020.0004] # ACCOUNT OF 00E6 ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004] # LATIN SMALL LETTER AE 1DD4 ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1C47.0020.000A][.0000.0110.0004][.1CAA.0020.000A] # LATIN CAPITAL LETTER AE 1D2D ; [.1C47.0020.0014][.0000.0110.0014][.1CAA.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1C47.0020.000A][.0000.0110.0004][.1CAA.0020.000A][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1C47.0020.0004][.0000.0110.0004][.1CAA.0020.0004][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1C47.0020.000A][.0000.0110.0004][.1CAA.0020.000A][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 33C2 ; [.1C47.0020.001C][*0277.0020.001C][.1DAA.0020.001C][*0277.0020.001C] # SQUARE AM 33DF ; [.1C47.0020.001D][*0625.0020.001C][.1DAA.0020.001C] # SQUARE A OVER M 1DD5 ; [.1C47.0020.0004][.1DDD.0020.0004] # COMBINING LATIN SMALL LETTER AO A735 ; [.1C47.0020.0004][.1DDD.0020.0004] # LATIN SMALL LETTER AO A734 ; [.1C47.0020.000A][.1DDD.0020.000A] # LATIN CAPITAL LETTER AO 2101 ; [.1C47.0020.0004][*0394.0020.0004][.1E71.0020.0004] # ADDRESSED TO THE SUBJECT 214D ; [.1C47.0020.000A][*0394.0020.0004][.1E71.0020.000A] # AKTIESELSKAB A737 ; [.1C47.0020.0004][.1EB5.0020.0004] # LATIN SMALL LETTER AU A736 ; [.1C47.0020.000A][.1EB5.0020.000A] # LATIN CAPITAL LETTER AU 3373 ; [.1C47.0020.001D][.1EB5.0020.001D] # SQUARE AU 1DD6 ; [.1C47.0020.0004][.1EE3.0020.0004] # COMBINING LATIN SMALL LETTER AV A739 ; [.1C47.0020.0004][.1EE3.0020.0004] # LATIN SMALL LETTER AV A738 ; [.1C47.0020.000A][.1EE3.0020.000A] # LATIN CAPITAL LETTER AV A73B ; [.1C47.0020.0004][.0000.0110.0004][.1EE3.0020.0004] # LATIN SMALL LETTER AV WITH HORIZONTAL BAR A73A ; [.1C47.0020.000A][.0000.0110.0004][.1EE3.0020.000A] # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR A73D ; [.1C47.0020.0004][.1F0B.0020.0004] # LATIN SMALL LETTER AY A73C ; [.1C47.0020.000A][.1F0B.0020.000A] # LATIN CAPITAL LETTER AY 1E9A ; [.1C47.0020.0004][.1F80.0020.0004] # LATIN SMALL LETTER A WITH RIGHT HALF RING 1D00 ; [.1C4B.0020.0002] # LATIN LETTER SMALL CAPITAL A 2C65 ; [.1C4C.0020.0002] # LATIN SMALL LETTER A WITH STROKE 023A ; [.1C4C.0020.0008] # LATIN CAPITAL LETTER A WITH STROKE 1D8F ; [.1C4D.0020.0002] # LATIN SMALL LETTER A WITH RETROFLEX HOOK 1D01 ; [.1C4E.0020.0002] # LATIN LETTER SMALL CAPITAL AE 1D02 ; [.1C4F.0020.0002] # LATIN SMALL LETTER TURNED AE 1D46 ; [.1C4F.0020.0014] # MODIFIER LETTER SMALL TURNED AE AB31 ; [.1C50.0020.0002] # LATIN SMALL LETTER A REVERSED-SCHWA 0250 ; [.1C51.0020.0002] # LATIN SMALL LETTER TURNED A 2C6F ; [.1C51.0020.0008] # LATIN CAPITAL LETTER TURNED A 1D44 ; [.1C51.0020.0014] # MODIFIER LETTER SMALL TURNED A 0251 ; [.1C55.0020.0002] # LATIN SMALL LETTER ALPHA 1DE7 ; [.1C55.0020.0004] # COMBINING LATIN SMALL LETTER ALPHA 2C6D ; [.1C55.0020.0008] # LATIN CAPITAL LETTER ALPHA 1D45 ; [.1C55.0020.0014] # MODIFIER LETTER SMALL ALPHA AB30 ; [.1C59.0020.0002] # LATIN SMALL LETTER BARRED ALPHA 1D90 ; [.1C5A.0020.0002] # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK 0252 ; [.1C5B.0020.0002] # LATIN SMALL LETTER TURNED ALPHA 2C70 ; [.1C5B.0020.0008] # LATIN CAPITAL LETTER TURNED ALPHA 1D9B ; [.1C5B.0020.0014] # MODIFIER LETTER SMALL TURNED ALPHA AB64 ; [.1C5F.0020.0002] # LATIN SMALL LETTER INVERTED ALPHA 0062 ; [.1C60.0020.0002] # LATIN SMALL LETTER B FF42 ; [.1C60.0020.0003] # FULLWIDTH LATIN SMALL LETTER B 1DE8 ; [.1C60.0020.0004] # COMBINING LATIN SMALL LETTER B 249D ; [*0317.0020.0004][.1C60.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER B 1D41B ; [.1C60.0020.0005] # MATHEMATICAL BOLD SMALL B 1D44F ; [.1C60.0020.0005] # MATHEMATICAL ITALIC SMALL B 1D483 ; [.1C60.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL B 1D4B7 ; [.1C60.0020.0005] # MATHEMATICAL SCRIPT SMALL B 1D4EB ; [.1C60.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL B 1D51F ; [.1C60.0020.0005] # MATHEMATICAL FRAKTUR SMALL B 1D553 ; [.1C60.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL B 1D587 ; [.1C60.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL B 1D5BB ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF SMALL B 1D5EF ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL B 1D623 ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL B 1D657 ; [.1C60.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B 1D68B ; [.1C60.0020.0005] # MATHEMATICAL MONOSPACE SMALL B 24D1 ; [.1C60.0020.0006] # CIRCLED LATIN SMALL LETTER B 0042 ; [.1C60.0020.0008] # LATIN CAPITAL LETTER B FF22 ; [.1C60.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER B 1F111 ; [*0317.0020.0004][.1C60.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER B 212C ; [.1C60.0020.000B] # SCRIPT CAPITAL B 1D401 ; [.1C60.0020.000B] # MATHEMATICAL BOLD CAPITAL B 1D435 ; [.1C60.0020.000B] # MATHEMATICAL ITALIC CAPITAL B 1D469 ; [.1C60.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL B 1D4D1 ; [.1C60.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL B 1D505 ; [.1C60.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL B 1D539 ; [.1C60.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL B 1D56D ; [.1C60.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL B 1D5A1 ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL B 1D5D5 ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL B 1D609 ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B 1D63D ; [.1C60.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B 1D671 ; [.1C60.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL B 24B7 ; [.1C60.0020.000C] # CIRCLED LATIN CAPITAL LETTER B 1F151 ; [.1C60.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER B 1D47 ; [.1C60.0020.0014] # MODIFIER LETTER SMALL B 1D2E ; [.1C60.0020.001D] # MODIFIER LETTER CAPITAL B 1F131 ; [.1C60.0020.001D] # SQUARED LATIN CAPITAL LETTER B 1F171 ; [.1C60.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER B 1E03 ; [.1C60.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER B WITH DOT ABOVE 1E02 ; [.1C60.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E05 ; [.1C60.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER B WITH DOT BELOW 1E04 ; [.1C60.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER B WITH DOT BELOW 1E07 ; [.1C60.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER B WITH LINE BELOW 1E06 ; [.1C60.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER B WITH LINE BELOW 3374 ; [.1C60.0020.001C][.1C47.0020.001C][.1E33.0020.001C] # SQUARE BAR 33C3 ; [.1C60.0020.001D][.1E21.0020.001C] # SQUARE BQ 0299 ; [.1C64.0020.0002] # LATIN LETTER SMALL CAPITAL B 0180 ; [.1C68.0020.0002] # LATIN SMALL LETTER B WITH STROKE 0243 ; [.1C68.0020.0008] # LATIN CAPITAL LETTER B WITH STROKE 1D2F ; [.1C6C.0020.0002] # MODIFIER LETTER CAPITAL BARRED B 1D03 ; [.1C6D.0020.0002] # LATIN LETTER SMALL CAPITAL BARRED B 1D6C ; [.1C6E.0020.0002] # LATIN SMALL LETTER B WITH MIDDLE TILDE A797 ; [.1C6F.0020.0002] # LATIN SMALL LETTER B WITH FLOURISH A796 ; [.1C6F.0020.0008] # LATIN CAPITAL LETTER B WITH FLOURISH 1D80 ; [.1C70.0020.0002] # LATIN SMALL LETTER B WITH PALATAL HOOK 0253 ; [.1C71.0020.0002] # LATIN SMALL LETTER B WITH HOOK 0181 ; [.1C71.0020.0008] # LATIN CAPITAL LETTER B WITH HOOK 0183 ; [.1C75.0020.0002] # LATIN SMALL LETTER B WITH TOPBAR 0182 ; [.1C75.0020.0008] # LATIN CAPITAL LETTER B WITH TOPBAR A7B5 ; [.1C79.0020.0002] # LATIN SMALL LETTER BETA 1DE9 ; [.1C79.0020.0004] # COMBINING LATIN SMALL LETTER BETA A7B4 ; [.1C79.0020.0008] # LATIN CAPITAL LETTER BETA 0063 ; [.1C7A.0020.0002] # LATIN SMALL LETTER C FF43 ; [.1C7A.0020.0003] # FULLWIDTH LATIN SMALL LETTER C 0368 ; [.1C7A.0020.0004] # COMBINING LATIN SMALL LETTER C 217D ; [.1C7A.0020.0004] # SMALL ROMAN NUMERAL ONE HUNDRED 249E ; [*0317.0020.0004][.1C7A.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER C 1D41C ; [.1C7A.0020.0005] # MATHEMATICAL BOLD SMALL C 1D450 ; [.1C7A.0020.0005] # MATHEMATICAL ITALIC SMALL C 1D484 ; [.1C7A.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL C 1D4B8 ; [.1C7A.0020.0005] # MATHEMATICAL SCRIPT SMALL C 1D4EC ; [.1C7A.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL C 1D520 ; [.1C7A.0020.0005] # MATHEMATICAL FRAKTUR SMALL C 1D554 ; [.1C7A.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL C 1D588 ; [.1C7A.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL C 1D5BC ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF SMALL C 1D5F0 ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL C 1D624 ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL C 1D658 ; [.1C7A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C 1D68C ; [.1C7A.0020.0005] # MATHEMATICAL MONOSPACE SMALL C 24D2 ; [.1C7A.0020.0006] # CIRCLED LATIN SMALL LETTER C 0043 ; [.1C7A.0020.0008] # LATIN CAPITAL LETTER C FF23 ; [.1C7A.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER C 2103 ; [*04F6.0020.0004][.1C7A.0020.000A] # DEGREE CELSIUS 216D ; [.1C7A.0020.000A] # ROMAN NUMERAL ONE HUNDRED 1F112 ; [*0317.0020.0004][.1C7A.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER C 2102 ; [.1C7A.0020.000B] # DOUBLE-STRUCK CAPITAL C 212D ; [.1C7A.0020.000B] # BLACK-LETTER CAPITAL C 1D402 ; [.1C7A.0020.000B] # MATHEMATICAL BOLD CAPITAL C 1D436 ; [.1C7A.0020.000B] # MATHEMATICAL ITALIC CAPITAL C 1D46A ; [.1C7A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL C 1D49E ; [.1C7A.0020.000B] # MATHEMATICAL SCRIPT CAPITAL C 1D4D2 ; [.1C7A.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL C 1D56E ; [.1C7A.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL C 1D5A2 ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL C 1D5D6 ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL C 1D60A ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C 1D63E ; [.1C7A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C 1D672 ; [.1C7A.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL C 24B8 ; [.1C7A.0020.000C] # CIRCLED LATIN CAPITAL LETTER C 1F12B ; [.1C7A.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER C 1F152 ; [.1C7A.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER C 1D9C ; [.1C7A.0020.0014] # MODIFIER LETTER SMALL C 1F132 ; [.1C7A.0020.001D] # SQUARED LATIN CAPITAL LETTER C 1F172 ; [.1C7A.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER C 0107 ; [.1C7A.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH ACUTE 0106 ; [.1C7A.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH ACUTE 0109 ; [.1C7A.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX 0108 ; [.1C7A.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX 010D ; [.1C7A.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7A.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER C WITH CARON 010B ; [.1C7A.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER C WITH DOT ABOVE 010A ; [.1C7A.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER C WITH DOT ABOVE 00E7 ; [.1C7A.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER C WITH CEDILLA 1DD7 ; [.1C7A.0020.0004][.0000.0030.0004] # COMBINING LATIN SMALL LETTER C CEDILLA 00C7 ; [.1C7A.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER C WITH CEDILLA 1E09 ; [.1C7A.0020.0002][.0000.0030.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE 1E08 ; [.1C7A.0020.0008][.0000.0030.0002][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE 3388 ; [.1C7A.0020.001C][.1C47.0020.001C][.1D77.0020.001C] # SQUARE CAL 33C4 ; [.1C7A.0020.001C][.1C7A.0020.001C] # SQUARE CC 1F12D ; [.1C7A.0020.000C][.1C8F.0020.000C] # CIRCLED CD 33C5 ; [.1C7A.0020.001C][.1C8F.0020.001C] # SQUARE CD 33C6 ; [.1C7A.0020.001D][*0625.0020.001C][.1D65.0020.001C][.1CF4.0020.001C] # SQUARE C OVER KG 1F191 ; [.1C7A.0020.001D][.1D77.0020.001D] # SQUARED CL 339D ; [.1C7A.0020.001C][.1DAA.0020.001C] # SQUARE CM 33A0 ; [.1C7A.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE CM SQUARED 33A4 ; [.1C7A.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE CM CUBED 2105 ; [.1C7A.0020.0004][*0394.0020.0004][.1DDD.0020.0004] # CARE OF 33C7 ; [.1C7A.0020.001D][.1DDD.0020.001C][*0277.0020.001C] # SQUARE CO 1F192 ; [.1C7A.0020.001D][.1DDD.0020.001D][.1DDD.0020.001D][.1D77.0020.001D] # SQUARED COOL 2106 ; [.1C7A.0020.0004][*0394.0020.0004][.1EB5.0020.0004] # CADA UNA 1D04 ; [.1C7E.0020.0002] # LATIN LETTER SMALL CAPITAL C 023C ; [.1C7F.0020.0002] # LATIN SMALL LETTER C WITH STROKE 023B ; [.1C7F.0020.0008] # LATIN CAPITAL LETTER C WITH STROKE A793 ; [.1C83.0020.0002] # LATIN SMALL LETTER C WITH BAR A792 ; [.1C83.0020.0008] # LATIN CAPITAL LETTER C WITH BAR A794 ; [.1C84.0020.0002] # LATIN SMALL LETTER C WITH PALATAL HOOK 0188 ; [.1C85.0020.0002] # LATIN SMALL LETTER C WITH HOOK 0187 ; [.1C85.0020.0008] # LATIN CAPITAL LETTER C WITH HOOK 0255 ; [.1C89.0020.0002] # LATIN SMALL LETTER C WITH CURL 1D9D ; [.1C89.0020.0014] # MODIFIER LETTER SMALL C WITH CURL 2184 ; [.1C8D.0020.0002] # LATIN SMALL LETTER REVERSED C 2183 ; [.1C8D.0020.0008] # ROMAN NUMERAL REVERSED ONE HUNDRED A73F ; [.1C8E.0020.0002] # LATIN SMALL LETTER REVERSED C WITH DOT A73E ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER REVERSED C WITH DOT 0064 ; [.1C8F.0020.0002] # LATIN SMALL LETTER D FF44 ; [.1C8F.0020.0003] # FULLWIDTH LATIN SMALL LETTER D 0369 ; [.1C8F.0020.0004] # COMBINING LATIN SMALL LETTER D 217E ; [.1C8F.0020.0004] # SMALL ROMAN NUMERAL FIVE HUNDRED 249F ; [*0317.0020.0004][.1C8F.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER D 2146 ; [.1C8F.0020.0005] # DOUBLE-STRUCK ITALIC SMALL D 1D41D ; [.1C8F.0020.0005] # MATHEMATICAL BOLD SMALL D 1D451 ; [.1C8F.0020.0005] # MATHEMATICAL ITALIC SMALL D 1D485 ; [.1C8F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL D 1D4B9 ; [.1C8F.0020.0005] # MATHEMATICAL SCRIPT SMALL D 1D4ED ; [.1C8F.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL D 1D521 ; [.1C8F.0020.0005] # MATHEMATICAL FRAKTUR SMALL D 1D555 ; [.1C8F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL D 1D589 ; [.1C8F.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL D 1D5BD ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF SMALL D 1D5F1 ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL D 1D625 ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL D 1D659 ; [.1C8F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D 1D68D ; [.1C8F.0020.0005] # MATHEMATICAL MONOSPACE SMALL D 24D3 ; [.1C8F.0020.0006] # CIRCLED LATIN SMALL LETTER D 0044 ; [.1C8F.0020.0008] # LATIN CAPITAL LETTER D FF24 ; [.1C8F.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER D 216E ; [.1C8F.0020.000A] # ROMAN NUMERAL FIVE HUNDRED 1F113 ; [*0317.0020.0004][.1C8F.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER D 2145 ; [.1C8F.0020.000B] # DOUBLE-STRUCK ITALIC CAPITAL D 1D403 ; [.1C8F.0020.000B] # MATHEMATICAL BOLD CAPITAL D 1D437 ; [.1C8F.0020.000B] # MATHEMATICAL ITALIC CAPITAL D 1D46B ; [.1C8F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL D 1D49F ; [.1C8F.0020.000B] # MATHEMATICAL SCRIPT CAPITAL D 1D4D3 ; [.1C8F.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL D 1D507 ; [.1C8F.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL D 1D53B ; [.1C8F.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL D 1D56F ; [.1C8F.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL D 1D5A3 ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL D 1D5D7 ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL D 1D60B ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D 1D63F ; [.1C8F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D 1D673 ; [.1C8F.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL D 24B9 ; [.1C8F.0020.000C] # CIRCLED LATIN CAPITAL LETTER D 1F153 ; [.1C8F.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER D 1D48 ; [.1C8F.0020.0014] # MODIFIER LETTER SMALL D 1F1A5 ; [.1C8F.0020.001C] # SQUARED LATIN SMALL LETTER D 1D30 ; [.1C8F.0020.001D] # MODIFIER LETTER CAPITAL D 1F133 ; [.1C8F.0020.001D] # SQUARED LATIN CAPITAL LETTER D 1F173 ; [.1C8F.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER D 010F ; [.1C8F.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER D WITH CARON 010E ; [.1C8F.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER D WITH CARON 1E0B ; [.1C8F.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER D WITH DOT ABOVE 1E0A ; [.1C8F.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER D WITH DOT ABOVE 1E11 ; [.1C8F.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER D WITH CEDILLA 1E10 ; [.1C8F.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER D WITH CEDILLA 0111 ; [.1C8F.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE 1E0D ; [.1C8F.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER D WITH DOT BELOW 1E0C ; [.1C8F.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER D WITH DOT BELOW 1E13 ; [.1C8F.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW 1E12 ; [.1C8F.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW 1E0F ; [.1C8F.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER D WITH LINE BELOW 1E0E ; [.1C8F.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER D WITH LINE BELOW 00F0 ; [.1C8F.0020.0004][.0000.0110.0004] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0020.0004][.0000.0110.0004] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0020.000A][.0000.0110.0004] # LATIN CAPITAL LETTER ETH 1D9E ; [.1C8F.0020.0014][.0000.0110.0014] # MODIFIER LETTER SMALL ETH 1DD8 ; [.1C8F.0020.0004][.0000.0111.0004] # COMBINING LATIN SMALL LETTER INSULAR D A77A ; [.1C8F.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR D A779 ; [.1C8F.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR D 3372 ; [.1C8F.0020.001C][.1C47.0020.001C] # SQUARE DA 0238 ; [.1C8F.0020.0004][.1C60.0020.0004] # LATIN SMALL LETTER DB DIGRAPH 33C8 ; [.1C8F.0020.001C][.1C60.0020.001D] # SQUARE DB 1F190 ; [.1C8F.0020.001D][.1D4C.0020.001D] # SQUARE DJ 3397 ; [.1C8F.0020.001C][.1D77.0020.001C] # SQUARE DL 3377 ; [.1C8F.0020.001C][.1DAA.0020.001C] # SQUARE DM 3378 ; [.1C8F.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE DM SQUARED 3379 ; [.1C8F.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE DM CUBED 01F3 ; [.1C8F.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER DZ 02A3 ; [.1C8F.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH 01F2 ; [.1C8F.0020.000A][.1F21.0020.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z 01F1 ; [.1C8F.0020.000A][.1F21.0020.000A] # LATIN CAPITAL LETTER DZ 01C6 ; [.1C8F.0020.0004][.1F21.0020.0004][.0000.0028.0004] # LATIN SMALL LETTER DZ WITH CARON 01C5 ; [.1C8F.0020.000A][.1F21.0020.0004][.0000.0028.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON 01C4 ; [.1C8F.0020.000A][.1F21.0020.000A][.0000.0028.0004] # LATIN CAPITAL LETTER DZ WITH CARON 02A5 ; [.1C8F.0020.0004][.1F34.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH WITH CURL 02A4 ; [.1C8F.0020.0004][.1F3E.0020.0004] # LATIN SMALL LETTER DEZH DIGRAPH 1D05 ; [.1C93.0020.0002] # LATIN LETTER SMALL CAPITAL D 1D06 ; [.1C94.0020.0002] # LATIN LETTER SMALL CAPITAL ETH 1D6D ; [.1C95.0020.0002] # LATIN SMALL LETTER D WITH MIDDLE TILDE 1D81 ; [.1C96.0020.0002] # LATIN SMALL LETTER D WITH PALATAL HOOK 0256 ; [.1C97.0020.0002] # LATIN SMALL LETTER D WITH TAIL 0189 ; [.1C97.0020.0008] # LATIN CAPITAL LETTER AFRICAN D 0257 ; [.1C9B.0020.0002] # LATIN SMALL LETTER D WITH HOOK 018A ; [.1C9B.0020.0008] # LATIN CAPITAL LETTER D WITH HOOK 1D91 ; [.1C9F.0020.0002] # LATIN SMALL LETTER D WITH HOOK AND TAIL 018C ; [.1CA0.0020.0002] # LATIN SMALL LETTER D WITH TOPBAR 018B ; [.1CA0.0020.0008] # LATIN CAPITAL LETTER D WITH TOPBAR 0221 ; [.1CA4.0020.0002] # LATIN SMALL LETTER D WITH CURL A771 ; [.1CA8.0020.0002] # LATIN SMALL LETTER DUM 1E9F ; [.1CA9.0020.0002] # LATIN SMALL LETTER DELTA 0065 ; [.1CAA.0020.0002] # LATIN SMALL LETTER E FF45 ; [.1CAA.0020.0003] # FULLWIDTH LATIN SMALL LETTER E 0364 ; [.1CAA.0020.0004] # COMBINING LATIN SMALL LETTER E 24A0 ; [*0317.0020.0004][.1CAA.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER E 212F ; [.1CAA.0020.0005] # SCRIPT SMALL E 2147 ; [.1CAA.0020.0005] # DOUBLE-STRUCK ITALIC SMALL E 1D41E ; [.1CAA.0020.0005] # MATHEMATICAL BOLD SMALL E 1D452 ; [.1CAA.0020.0005] # MATHEMATICAL ITALIC SMALL E 1D486 ; [.1CAA.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL E 1D4EE ; [.1CAA.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL E 1D522 ; [.1CAA.0020.0005] # MATHEMATICAL FRAKTUR SMALL E 1D556 ; [.1CAA.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL E 1D58A ; [.1CAA.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL E 1D5BE ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF SMALL E 1D5F2 ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL E 1D626 ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL E 1D65A ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E 1D68E ; [.1CAA.0020.0005] # MATHEMATICAL MONOSPACE SMALL E 24D4 ; [.1CAA.0020.0006] # CIRCLED LATIN SMALL LETTER E 0045 ; [.1CAA.0020.0008] # LATIN CAPITAL LETTER E FF25 ; [.1CAA.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER E 1F114 ; [*0317.0020.0004][.1CAA.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER E 2130 ; [.1CAA.0020.000B] # SCRIPT CAPITAL E 1D404 ; [.1CAA.0020.000B] # MATHEMATICAL BOLD CAPITAL E 1D438 ; [.1CAA.0020.000B] # MATHEMATICAL ITALIC CAPITAL E 1D46C ; [.1CAA.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL E 1D4D4 ; [.1CAA.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL E 1D508 ; [.1CAA.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL E 1D53C ; [.1CAA.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL E 1D570 ; [.1CAA.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL E 1D5A4 ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL E 1D5D8 ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL E 1D60C ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E 1D640 ; [.1CAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E 1D674 ; [.1CAA.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL E 24BA ; [.1CAA.0020.000C] # CIRCLED LATIN CAPITAL LETTER E 1F154 ; [.1CAA.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER E 1D49 ; [.1CAA.0020.0014] # MODIFIER LETTER SMALL E 2091 ; [.1CAA.0020.0015] # LATIN SUBSCRIPT SMALL LETTER E 1D31 ; [.1CAA.0020.001D] # MODIFIER LETTER CAPITAL E 1F134 ; [.1CAA.0020.001D] # SQUARED LATIN CAPITAL LETTER E 1F174 ; [.1CAA.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER E 00E9 ; [.1CAA.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH ACUTE 00E8 ; [.1CAA.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.1CAA.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH GRAVE 0115 ; [.1CAA.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH BREVE 0114 ; [.1CAA.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH BREVE 00EA ; [.1CAA.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EBF ; [.1CAA.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAA.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC1 ; [.1CAA.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAA.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC5 ; [.1CAA.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAA.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAA.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAA.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 011B ; [.1CAA.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAA.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER E WITH CARON 00EB ; [.1CAA.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER E WITH DIAERESIS 00CB ; [.1CAA.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER E WITH DIAERESIS 1EBD ; [.1CAA.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH TILDE 1EBC ; [.1CAA.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH TILDE 0117 ; [.1CAA.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER E WITH DOT ABOVE 0116 ; [.1CAA.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER E WITH DOT ABOVE 0229 ; [.1CAA.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER E WITH CEDILLA 0228 ; [.1CAA.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER E WITH CEDILLA 1E1D ; [.1CAA.0020.0002][.0000.0030.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH CEDILLA AND BREVE 1E1C ; [.1CAA.0020.0008][.0000.0030.0002][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE 0119 ; [.1CAA.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1CAA.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER E WITH OGONEK 0113 ; [.1CAA.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON 1E17 ; [.1CAA.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH MACRON AND ACUTE 1E16 ; [.1CAA.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE 1E15 ; [.1CAA.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH MACRON AND GRAVE 1E14 ; [.1CAA.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE 1EBB ; [.1CAA.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH HOOK ABOVE 1EBA ; [.1CAA.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH HOOK ABOVE 0205 ; [.1CAA.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER E WITH DOUBLE GRAVE 0204 ; [.1CAA.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE 0207 ; [.1CAA.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER E WITH INVERTED BREVE 0206 ; [.1CAA.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER E WITH INVERTED BREVE 1EB9 ; [.1CAA.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH DOT BELOW 1EB8 ; [.1CAA.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH DOT BELOW 1EC7 ; [.1CAA.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAA.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1E19 ; [.1CAA.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW 1E18 ; [.1CAA.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW 1E1B ; [.1CAA.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER E WITH TILDE BELOW 1E1A ; [.1CAA.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER E WITH TILDE BELOW 32CD ; [.1CAA.0020.001C][.1E33.0020.001C][.1CF4.0020.001C] # SQUARE ERG 32CE ; [.1CAA.0020.001C][.1EE3.0020.001D] # SQUARE EV 1D07 ; [.1CAE.0020.0002] # LATIN LETTER SMALL CAPITAL E AB32 ; [.1CAF.0020.0002] # LATIN SMALL LETTER BLACKLETTER E AB33 ; [.1CB0.0020.0002] # LATIN SMALL LETTER BARRED E 0247 ; [.1CB1.0020.0002] # LATIN SMALL LETTER E WITH STROKE 0246 ; [.1CB1.0020.0008] # LATIN CAPITAL LETTER E WITH STROKE 1D92 ; [.1CB5.0020.0002] # LATIN SMALL LETTER E WITH RETROFLEX HOOK AB34 ; [.1CB6.0020.0002] # LATIN SMALL LETTER E WITH FLOURISH 2C78 ; [.1CB7.0020.0002] # LATIN SMALL LETTER E WITH NOTCH 01DD ; [.1CB8.0020.0002] # LATIN SMALL LETTER TURNED E 018E ; [.1CB8.0020.0008] # LATIN CAPITAL LETTER REVERSED E 1D32 ; [.1CB8.0020.001D] # MODIFIER LETTER CAPITAL REVERSED E 2C7B ; [.1CBC.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED E 0259 ; [.1CBD.0020.0002] # LATIN SMALL LETTER SCHWA 1DEA ; [.1CBD.0020.0004] # COMBINING LATIN SMALL LETTER SCHWA 018F ; [.1CBD.0020.0008] # LATIN CAPITAL LETTER SCHWA 1D4A ; [.1CBD.0020.0014] # MODIFIER LETTER SMALL SCHWA 2094 ; [.1CBD.0020.0015] # LATIN SUBSCRIPT SMALL LETTER SCHWA 1D95 ; [.1CC1.0020.0002] # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK 025B ; [.1CC2.0020.0002] # LATIN SMALL LETTER OPEN E 0190 ; [.1CC2.0020.0008] # LATIN CAPITAL LETTER OPEN E 2107 ; [.1CC2.0020.000A] # EULER CONSTANT 1D4B ; [.1CC2.0020.0014] # MODIFIER LETTER SMALL OPEN E 1D93 ; [.1CC6.0020.0002] # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK 0258 ; [.1CC7.0020.0002] # LATIN SMALL LETTER REVERSED E 025A ; [.1CCB.0020.0002] # LATIN SMALL LETTER SCHWA WITH HOOK 025C ; [.1CCF.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E A7AB ; [.1CCF.0020.0008] # LATIN CAPITAL LETTER REVERSED OPEN E 1D9F ; [.1CCF.0020.0014] # MODIFIER LETTER SMALL REVERSED OPEN E 1D94 ; [.1CD3.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK 1D08 ; [.1CD4.0020.0002] # LATIN SMALL LETTER TURNED OPEN E 1D4C ; [.1CD4.0020.0014] # MODIFIER LETTER SMALL TURNED OPEN E 025D ; [.1CD5.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK 025E ; [.1CD9.0020.0002] # LATIN SMALL LETTER CLOSED REVERSED OPEN E 029A ; [.1CDD.0020.0002] # LATIN SMALL LETTER CLOSED OPEN E 0264 ; [.1CE1.0020.0002] # LATIN SMALL LETTER RAMS HORN 0066 ; [.1CE5.0020.0002] # LATIN SMALL LETTER F FF46 ; [.1CE5.0020.0003] # FULLWIDTH LATIN SMALL LETTER F 1DEB ; [.1CE5.0020.0004] # COMBINING LATIN SMALL LETTER F 24A1 ; [*0317.0020.0004][.1CE5.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER F 1D41F ; [.1CE5.0020.0005] # MATHEMATICAL BOLD SMALL F 1D453 ; [.1CE5.0020.0005] # MATHEMATICAL ITALIC SMALL F 1D487 ; [.1CE5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL F 1D4BB ; [.1CE5.0020.0005] # MATHEMATICAL SCRIPT SMALL F 1D4EF ; [.1CE5.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL F 1D523 ; [.1CE5.0020.0005] # MATHEMATICAL FRAKTUR SMALL F 1D557 ; [.1CE5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL F 1D58B ; [.1CE5.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL F 1D5BF ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF SMALL F 1D5F3 ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL F 1D627 ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL F 1D65B ; [.1CE5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F 1D68F ; [.1CE5.0020.0005] # MATHEMATICAL MONOSPACE SMALL F 24D5 ; [.1CE5.0020.0006] # CIRCLED LATIN SMALL LETTER F 0046 ; [.1CE5.0020.0008] # LATIN CAPITAL LETTER F FF26 ; [.1CE5.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER F 2109 ; [*04F6.0020.0004][.1CE5.0020.000A] # DEGREE FAHRENHEIT 1F115 ; [*0317.0020.0004][.1CE5.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER F 2131 ; [.1CE5.0020.000B] # SCRIPT CAPITAL F 1D405 ; [.1CE5.0020.000B] # MATHEMATICAL BOLD CAPITAL F 1D439 ; [.1CE5.0020.000B] # MATHEMATICAL ITALIC CAPITAL F 1D46D ; [.1CE5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL F 1D4D5 ; [.1CE5.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL F 1D509 ; [.1CE5.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL F 1D53D ; [.1CE5.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL F 1D571 ; [.1CE5.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL F 1D5A5 ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL F 1D5D9 ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL F 1D60D ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F 1D641 ; [.1CE5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F 1D675 ; [.1CE5.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL F 24BB ; [.1CE5.0020.000C] # CIRCLED LATIN CAPITAL LETTER F 1F155 ; [.1CE5.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER F 1DA0 ; [.1CE5.0020.0014] # MODIFIER LETTER SMALL F 1F135 ; [.1CE5.0020.001D] # SQUARED LATIN CAPITAL LETTER F 1F175 ; [.1CE5.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER F 1E1F ; [.1CE5.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER F WITH DOT ABOVE 1E1E ; [.1CE5.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER F WITH DOT ABOVE A77C ; [.1CE5.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR F A77B ; [.1CE5.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR F 213B ; [.1CE5.0020.000A][.1C47.0020.000A][.1EFF.0020.000A] # FACSIMILE SIGN FB00 ; [.1CE5.0020.0004][.1CE5.0020.0004] # LATIN SMALL LIGATURE FF FB03 ; [.1CE5.0020.0004][.1CE5.0020.0004][.1D32.0020.0004] # LATIN SMALL LIGATURE FFI FB04 ; [.1CE5.0020.0004][.1CE5.0020.0004][.1D77.0020.0004] # LATIN SMALL LIGATURE FFL FB01 ; [.1CE5.0020.0004][.1D32.0020.0004] # LATIN SMALL LIGATURE FI FB02 ; [.1CE5.0020.0004][.1D77.0020.0004] # LATIN SMALL LIGATURE FL 3399 ; [.1CE5.0020.001C][.1DAA.0020.001C] # SQUARE FM 02A9 ; [.1CE5.0020.0004][.1DD8.0020.0004] # LATIN SMALL LETTER FENG DIGRAPH 1F193 ; [.1CE5.0020.001D][.1E33.0020.001D][.1CAA.0020.001D][.1CAA.0020.001D] # SQUARED FREE A730 ; [.1CE9.0020.0002] # LATIN LETTER SMALL CAPITAL F AB35 ; [.1CEA.0020.0002] # LATIN SMALL LETTER LENIS F A799 ; [.1CEB.0020.0002] # LATIN SMALL LETTER F WITH STROKE A798 ; [.1CEB.0020.0008] # LATIN CAPITAL LETTER F WITH STROKE 1D6E ; [.1CEC.0020.0002] # LATIN SMALL LETTER F WITH MIDDLE TILDE 1D82 ; [.1CED.0020.0002] # LATIN SMALL LETTER F WITH PALATAL HOOK 0192 ; [.1CEE.0020.0002] # LATIN SMALL LETTER F WITH HOOK 0191 ; [.1CEE.0020.0008] # LATIN CAPITAL LETTER F WITH HOOK 214E ; [.1CF2.0020.0002] # TURNED SMALL F 2132 ; [.1CF2.0020.0008] # TURNED CAPITAL F A7FB ; [.1CF3.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED F 0067 ; [.1CF4.0020.0002] # LATIN SMALL LETTER G FF47 ; [.1CF4.0020.0003] # FULLWIDTH LATIN SMALL LETTER G 1DDA ; [.1CF4.0020.0004] # COMBINING LATIN SMALL LETTER G 24A2 ; [*0317.0020.0004][.1CF4.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER G 210A ; [.1CF4.0020.0005] # SCRIPT SMALL G 1D420 ; [.1CF4.0020.0005] # MATHEMATICAL BOLD SMALL G 1D454 ; [.1CF4.0020.0005] # MATHEMATICAL ITALIC SMALL G 1D488 ; [.1CF4.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL G 1D4F0 ; [.1CF4.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL G 1D524 ; [.1CF4.0020.0005] # MATHEMATICAL FRAKTUR SMALL G 1D558 ; [.1CF4.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL G 1D58C ; [.1CF4.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL G 1D5C0 ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF SMALL G 1D5F4 ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL G 1D628 ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL G 1D65C ; [.1CF4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G 1D690 ; [.1CF4.0020.0005] # MATHEMATICAL MONOSPACE SMALL G 24D6 ; [.1CF4.0020.0006] # CIRCLED LATIN SMALL LETTER G 0047 ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER G FF27 ; [.1CF4.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER G 1F116 ; [*0317.0020.0004][.1CF4.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER G 1D406 ; [.1CF4.0020.000B] # MATHEMATICAL BOLD CAPITAL G 1D43A ; [.1CF4.0020.000B] # MATHEMATICAL ITALIC CAPITAL G 1D46E ; [.1CF4.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL G 1D4A2 ; [.1CF4.0020.000B] # MATHEMATICAL SCRIPT CAPITAL G 1D4D6 ; [.1CF4.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL G 1D50A ; [.1CF4.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL G 1D53E ; [.1CF4.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL G 1D572 ; [.1CF4.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL G 1D5A6 ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL G 1D5DA ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL G 1D60E ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G 1D642 ; [.1CF4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G 1D676 ; [.1CF4.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL G 24BC ; [.1CF4.0020.000C] # CIRCLED LATIN CAPITAL LETTER G 1F156 ; [.1CF4.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER G 1D4D ; [.1CF4.0020.0014] # MODIFIER LETTER SMALL G 1D33 ; [.1CF4.0020.001D] # MODIFIER LETTER CAPITAL G 1F136 ; [.1CF4.0020.001D] # SQUARED LATIN CAPITAL LETTER G 1F176 ; [.1CF4.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER G 01F5 ; [.1CF4.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER G WITH ACUTE 01F4 ; [.1CF4.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER G WITH ACUTE 011F ; [.1CF4.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER G WITH BREVE 011E ; [.1CF4.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER G WITH BREVE 011D ; [.1CF4.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX 011C ; [.1CF4.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX 01E7 ; [.1CF4.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER G WITH CARON 01E6 ; [.1CF4.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER G WITH CARON 0121 ; [.1CF4.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER G WITH DOT ABOVE 0120 ; [.1CF4.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER G WITH DOT ABOVE 0123 ; [.1CF4.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER G WITH CEDILLA 0122 ; [.1CF4.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER G WITH CEDILLA 1E21 ; [.1CF4.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER G WITH MACRON 1E20 ; [.1CF4.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER G WITH MACRON A7A1 ; [.1CF4.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER G WITH OBLIQUE STROKE A7A0 ; [.1CF4.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE 1D79 ; [.1CF4.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR G A77D ; [.1CF4.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR G 33FF ; [.1CF4.0020.001C][.1C47.0020.001C][.1D77.0020.001C] # SQUARE GAL 3387 ; [.1CF4.0020.001D][.1C60.0020.001D] # SQUARE GB 3393 ; [.1CF4.0020.001D][.1D18.0020.001D][.1F21.0020.001C] # SQUARE GHZ 33AC ; [.1CF4.0020.001D][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE GPA 33C9 ; [.1CF4.0020.001D][.1F0B.0020.001C] # SQUARE GY 0261 ; [.1CF8.0020.0002] # LATIN SMALL LETTER SCRIPT G A7AC ; [.1CF8.0020.0008] # LATIN CAPITAL LETTER SCRIPT G 1DA2 ; [.1CF8.0020.0014] # MODIFIER LETTER SMALL SCRIPT G AB36 ; [.1CFC.0020.0002] # LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL 0262 ; [.1CFD.0020.0002] # LATIN LETTER SMALL CAPITAL G 1DDB ; [.1CFD.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL G 01E5 ; [.1D01.0020.0002] # LATIN SMALL LETTER G WITH STROKE 01E4 ; [.1D01.0020.0008] # LATIN CAPITAL LETTER G WITH STROKE 1D83 ; [.1D05.0020.0002] # LATIN SMALL LETTER G WITH PALATAL HOOK 0260 ; [.1D06.0020.0002] # LATIN SMALL LETTER G WITH HOOK 0193 ; [.1D06.0020.0008] # LATIN CAPITAL LETTER G WITH HOOK 029B ; [.1D0A.0020.0002] # LATIN LETTER SMALL CAPITAL G WITH HOOK 1D77 ; [.1D0E.0020.0002] # LATIN SMALL LETTER TURNED G A77F ; [.1D0F.0020.0002] # LATIN SMALL LETTER TURNED INSULAR G A77E ; [.1D0F.0020.0008] # LATIN CAPITAL LETTER TURNED INSULAR G 0263 ; [.1D10.0020.0002] # LATIN SMALL LETTER GAMMA 0194 ; [.1D10.0020.0008] # LATIN CAPITAL LETTER GAMMA 02E0 ; [.1D10.0020.0014] # MODIFIER LETTER SMALL GAMMA 01A3 ; [.1D14.0020.0002] # LATIN SMALL LETTER OI 01A2 ; [.1D14.0020.0008] # LATIN CAPITAL LETTER OI 0068 ; [.1D18.0020.0002] # LATIN SMALL LETTER H FF48 ; [.1D18.0020.0003] # FULLWIDTH LATIN SMALL LETTER H 036A ; [.1D18.0020.0004] # COMBINING LATIN SMALL LETTER H 24A3 ; [*0317.0020.0004][.1D18.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER H 210E ; [.1D18.0020.0005] # PLANCK CONSTANT 1D421 ; [.1D18.0020.0005] # MATHEMATICAL BOLD SMALL H 1D489 ; [.1D18.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL H 1D4BD ; [.1D18.0020.0005] # MATHEMATICAL SCRIPT SMALL H 1D4F1 ; [.1D18.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL H 1D525 ; [.1D18.0020.0005] # MATHEMATICAL FRAKTUR SMALL H 1D559 ; [.1D18.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL H 1D58D ; [.1D18.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL H 1D5C1 ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF SMALL H 1D5F5 ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL H 1D629 ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL H 1D65D ; [.1D18.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H 1D691 ; [.1D18.0020.0005] # MATHEMATICAL MONOSPACE SMALL H 24D7 ; [.1D18.0020.0006] # CIRCLED LATIN SMALL LETTER H 0048 ; [.1D18.0020.0008] # LATIN CAPITAL LETTER H FF28 ; [.1D18.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER H 1F117 ; [*0317.0020.0004][.1D18.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER H 210B ; [.1D18.0020.000B] # SCRIPT CAPITAL H 210C ; [.1D18.0020.000B] # BLACK-LETTER CAPITAL H 210D ; [.1D18.0020.000B] # DOUBLE-STRUCK CAPITAL H 1D407 ; [.1D18.0020.000B] # MATHEMATICAL BOLD CAPITAL H 1D43B ; [.1D18.0020.000B] # MATHEMATICAL ITALIC CAPITAL H 1D46F ; [.1D18.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL H 1D4D7 ; [.1D18.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL H 1D573 ; [.1D18.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL H 1D5A7 ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL H 1D5DB ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL H 1D60F ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H 1D643 ; [.1D18.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H 1D677 ; [.1D18.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL H 24BD ; [.1D18.0020.000C] # CIRCLED LATIN CAPITAL LETTER H 1F157 ; [.1D18.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER H 02B0 ; [.1D18.0020.0014] # MODIFIER LETTER SMALL H 2095 ; [.1D18.0020.0015] # LATIN SUBSCRIPT SMALL LETTER H 1D34 ; [.1D18.0020.001D] # MODIFIER LETTER CAPITAL H 1F137 ; [.1D18.0020.001D] # SQUARED LATIN CAPITAL LETTER H 1F177 ; [.1D18.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER H 0125 ; [.1D18.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX 0124 ; [.1D18.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 021F ; [.1D18.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER H WITH CARON 021E ; [.1D18.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER H WITH CARON 1E27 ; [.1D18.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER H WITH DIAERESIS 1E26 ; [.1D18.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER H WITH DIAERESIS 1E23 ; [.1D18.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER H WITH DOT ABOVE 1E22 ; [.1D18.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER H WITH DOT ABOVE 1E29 ; [.1D18.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER H WITH CEDILLA 1E28 ; [.1D18.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER H WITH CEDILLA 0127 ; [.1D18.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER H WITH STROKE 210F ; [.1D18.0020.0002][.0000.0039.0002] # PLANCK CONSTANT OVER TWO PI 0126 ; [.1D18.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER H WITH STROKE A7F8 ; [.1D18.0020.0014][.0000.0039.0014] # MODIFIER LETTER CAPITAL H WITH STROKE 1E25 ; [.1D18.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER H WITH DOT BELOW 1E24 ; [.1D18.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER H WITH DOT BELOW 1E2B ; [.1D18.0020.0002][.0000.0047.0002] # LATIN SMALL LETTER H WITH BREVE BELOW 1E2A ; [.1D18.0020.0008][.0000.0047.0002] # LATIN CAPITAL LETTER H WITH BREVE BELOW 1E96 ; [.1D18.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER H WITH LINE BELOW 33CA ; [.1D18.0020.001C][.1C47.0020.001C] # SQUARE HA 1F1A6 ; [.1D18.0020.001D][.1C7A.0020.001C] # SQUARED HC 1F1A7 ; [.1D18.0020.001D][.1C8F.0020.001C][.1E33.0020.001D] # SQUARED HDR 32CC ; [.1D18.0020.001D][.1CF4.0020.001C] # SQUARE HG 1F1A8 ; [.1D18.0020.001D][.1D32.0020.001C][*0209.0020.001C][.1E33.0020.001D][.1CAA.0020.001C][.1E71.0020.001C] # SQUARED HI-RES 33CB ; [.1D18.0020.001D][.1E0C.0020.001D] # SQUARE HP 3371 ; [.1D18.0020.001C][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE HPA 1F14A ; [.1D18.0020.001D][.1EE3.0020.001D] # SQUARED HV 3390 ; [.1D18.0020.001D][.1F21.0020.001C] # SQUARE HZ 029C ; [.1D1C.0020.0002] # LATIN LETTER SMALL CAPITAL H 0195 ; [.1D20.0020.0002] # LATIN SMALL LETTER HV 01F6 ; [.1D20.0020.0008] # LATIN CAPITAL LETTER HWAIR A795 ; [.1D24.0020.0002] # LATIN SMALL LETTER H WITH PALATAL HOOK 0266 ; [.1D25.0020.0002] # LATIN SMALL LETTER H WITH HOOK A7AA ; [.1D25.0020.0008] # LATIN CAPITAL LETTER H WITH HOOK 02B1 ; [.1D25.0020.0014] # MODIFIER LETTER SMALL H WITH HOOK 2C68 ; [.1D29.0020.0002] # LATIN SMALL LETTER H WITH DESCENDER 2C67 ; [.1D29.0020.0008] # LATIN CAPITAL LETTER H WITH DESCENDER 2C76 ; [.1D2A.0020.0002] # LATIN SMALL LETTER HALF H 2C75 ; [.1D2A.0020.0008] # LATIN CAPITAL LETTER HALF H A727 ; [.1D2B.0020.0002] # LATIN SMALL LETTER HENG A726 ; [.1D2B.0020.0008] # LATIN CAPITAL LETTER HENG AB5C ; [.1D2B.0020.0014] # MODIFIER LETTER SMALL HENG 0267 ; [.1D2C.0020.0002] # LATIN SMALL LETTER HENG WITH HOOK 02BB ; [.1D30.0020.0002] # MODIFIER LETTER TURNED COMMA 02BD ; [.1D31.0020.0002] # MODIFIER LETTER REVERSED COMMA 0069 ; [.1D32.0020.0002] # LATIN SMALL LETTER I FF49 ; [.1D32.0020.0003] # FULLWIDTH LATIN SMALL LETTER I 0365 ; [.1D32.0020.0004] # COMBINING LATIN SMALL LETTER I 2170 ; [.1D32.0020.0004] # SMALL ROMAN NUMERAL ONE 24A4 ; [*0317.0020.0004][.1D32.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER I 2139 ; [.1D32.0020.0005] # INFORMATION SOURCE 2148 ; [.1D32.0020.0005] # DOUBLE-STRUCK ITALIC SMALL I 1D422 ; [.1D32.0020.0005] # MATHEMATICAL BOLD SMALL I 1D456 ; [.1D32.0020.0005] # MATHEMATICAL ITALIC SMALL I 1D48A ; [.1D32.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL I 1D4BE ; [.1D32.0020.0005] # MATHEMATICAL SCRIPT SMALL I 1D4F2 ; [.1D32.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL I 1D526 ; [.1D32.0020.0005] # MATHEMATICAL FRAKTUR SMALL I 1D55A ; [.1D32.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL I 1D58E ; [.1D32.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL I 1D5C2 ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF SMALL I 1D5F6 ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL I 1D62A ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL I 1D65E ; [.1D32.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I 1D692 ; [.1D32.0020.0005] # MATHEMATICAL MONOSPACE SMALL I 24D8 ; [.1D32.0020.0006] # CIRCLED LATIN SMALL LETTER I 0049 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I FF29 ; [.1D32.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER I 2160 ; [.1D32.0020.000A] # ROMAN NUMERAL ONE 1F118 ; [*0317.0020.0004][.1D32.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER I 2110 ; [.1D32.0020.000B] # SCRIPT CAPITAL I 2111 ; [.1D32.0020.000B] # BLACK-LETTER CAPITAL I 1D408 ; [.1D32.0020.000B] # MATHEMATICAL BOLD CAPITAL I 1D43C ; [.1D32.0020.000B] # MATHEMATICAL ITALIC CAPITAL I 1D470 ; [.1D32.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL I 1D4D8 ; [.1D32.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL I 1D540 ; [.1D32.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL I 1D574 ; [.1D32.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL I 1D5A8 ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL I 1D5DC ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL I 1D610 ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I 1D644 ; [.1D32.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I 1D678 ; [.1D32.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL I 24BE ; [.1D32.0020.000C] # CIRCLED LATIN CAPITAL LETTER I 1F158 ; [.1D32.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER I 2071 ; [.1D32.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER I 1D62 ; [.1D32.0020.0015] # LATIN SUBSCRIPT SMALL LETTER I 1D35 ; [.1D32.0020.001D] # MODIFIER LETTER CAPITAL I 1F138 ; [.1D32.0020.001D] # SQUARED LATIN CAPITAL LETTER I 1F178 ; [.1D32.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER I 00ED ; [.1D32.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE 00EC ; [.1D32.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.1D32.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE 012D ; [.1D32.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER I WITH BREVE 012C ; [.1D32.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE 00EE ; [.1D32.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX 00CE ; [.1D32.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 01D0 ; [.1D32.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER I WITH CARON 01CF ; [.1D32.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER I WITH CARON 00EF ; [.1D32.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER I WITH DIAERESIS 00CF ; [.1D32.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS 1E2F ; [.1D32.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE 1E2E ; [.1D32.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE 0129 ; [.1D32.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER I WITH TILDE 0128 ; [.1D32.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER I WITH TILDE 0130 ; [.1D32.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER I WITH DOT ABOVE 012F ; [.1D32.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER I WITH OGONEK 012E ; [.1D32.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK 012B ; [.1D32.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON 1EC9 ; [.1D32.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER I WITH HOOK ABOVE 1EC8 ; [.1D32.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER I WITH HOOK ABOVE 0209 ; [.1D32.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER I WITH DOUBLE GRAVE 0208 ; [.1D32.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE 020B ; [.1D32.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER I WITH INVERTED BREVE 020A ; [.1D32.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER I WITH INVERTED BREVE 1ECB ; [.1D32.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER I WITH DOT BELOW 1ECA ; [.1D32.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER I WITH DOT BELOW 1E2D ; [.1D32.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER I WITH TILDE BELOW 1E2C ; [.1D32.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER I WITH TILDE BELOW 1F18B ; [.1D32.0020.001D][.1C7A.0020.001D] # NEGATIVE SQUARED IC 1F194 ; [.1D32.0020.001D][.1C8F.0020.001D] # SQUARED ID 2171 ; [.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL TWO 2161 ; [.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL TWO 2172 ; [.1D32.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL THREE 2162 ; [.1D32.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL THREE 0133 ; [.1D32.0020.0004][.1D4C.0020.0004] # LATIN SMALL LIGATURE IJ 0132 ; [.1D32.0020.000A][.1D4C.0020.000A] # LATIN CAPITAL LIGATURE IJ 33CC ; [.1D32.0020.001C][.1DB9.0020.001C] # SQUARE IN 337A ; [.1D32.0020.001D][.1EB5.0020.001D] # SQUARE IU 2173 ; [.1D32.0020.0004][.1EE3.0020.0004] # SMALL ROMAN NUMERAL FOUR 2163 ; [.1D32.0020.000A][.1EE3.0020.000A] # ROMAN NUMERAL FOUR 2178 ; [.1D32.0020.0004][.1EFF.0020.0004] # SMALL ROMAN NUMERAL NINE 2168 ; [.1D32.0020.000A][.1EFF.0020.000A] # ROMAN NUMERAL NINE 0131 ; [.1D36.0020.0002] # LATIN SMALL LETTER DOTLESS I 1D6A4 ; [.1D36.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS I 026A ; [.1D3A.0020.0002] # LATIN LETTER SMALL CAPITAL I A7AE ; [.1D3A.0020.0008] # LATIN CAPITAL LETTER SMALL CAPITAL I 1DA6 ; [.1D3A.0020.0014] # MODIFIER LETTER SMALL CAPITAL I A7FE ; [.1D3E.0020.0002] # LATIN EPIGRAPHIC LETTER I LONGA A7F7 ; [.1D3F.0020.0002] # LATIN EPIGRAPHIC LETTER SIDEWAYS I 1D09 ; [.1D40.0020.0002] # LATIN SMALL LETTER TURNED I 1D4E ; [.1D40.0020.0014] # MODIFIER LETTER SMALL TURNED I 0268 ; [.1D41.0020.0002] # LATIN SMALL LETTER I WITH STROKE 0197 ; [.1D41.0020.0008] # LATIN CAPITAL LETTER I WITH STROKE 1DA4 ; [.1D41.0020.0014] # MODIFIER LETTER SMALL I WITH STROKE 1D7B ; [.1D45.0020.0002] # LATIN SMALL CAPITAL LETTER I WITH STROKE 1DA7 ; [.1D45.0020.0014] # MODIFIER LETTER SMALL CAPITAL I WITH STROKE 1D96 ; [.1D46.0020.0002] # LATIN SMALL LETTER I WITH RETROFLEX HOOK 0269 ; [.1D47.0020.0002] # LATIN SMALL LETTER IOTA 0196 ; [.1D47.0020.0008] # LATIN CAPITAL LETTER IOTA 1DA5 ; [.1D47.0020.0014] # MODIFIER LETTER SMALL IOTA 1D7C ; [.1D4B.0020.0002] # LATIN SMALL LETTER IOTA WITH STROKE 006A ; [.1D4C.0020.0002] # LATIN SMALL LETTER J FF4A ; [.1D4C.0020.0003] # FULLWIDTH LATIN SMALL LETTER J 24A5 ; [*0317.0020.0004][.1D4C.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER J 2149 ; [.1D4C.0020.0005] # DOUBLE-STRUCK ITALIC SMALL J 1D423 ; [.1D4C.0020.0005] # MATHEMATICAL BOLD SMALL J 1D457 ; [.1D4C.0020.0005] # MATHEMATICAL ITALIC SMALL J 1D48B ; [.1D4C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL J 1D4BF ; [.1D4C.0020.0005] # MATHEMATICAL SCRIPT SMALL J 1D4F3 ; [.1D4C.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL J 1D527 ; [.1D4C.0020.0005] # MATHEMATICAL FRAKTUR SMALL J 1D55B ; [.1D4C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL J 1D58F ; [.1D4C.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL J 1D5C3 ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF SMALL J 1D5F7 ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL J 1D62B ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL J 1D65F ; [.1D4C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J 1D693 ; [.1D4C.0020.0005] # MATHEMATICAL MONOSPACE SMALL J 24D9 ; [.1D4C.0020.0006] # CIRCLED LATIN SMALL LETTER J 004A ; [.1D4C.0020.0008] # LATIN CAPITAL LETTER J FF2A ; [.1D4C.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER J 1F119 ; [*0317.0020.0004][.1D4C.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER J 1D409 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD CAPITAL J 1D43D ; [.1D4C.0020.000B] # MATHEMATICAL ITALIC CAPITAL J 1D471 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL J 1D4A5 ; [.1D4C.0020.000B] # MATHEMATICAL SCRIPT CAPITAL J 1D4D9 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL J 1D50D ; [.1D4C.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL J 1D541 ; [.1D4C.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL J 1D575 ; [.1D4C.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL J 1D5A9 ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL J 1D5DD ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL J 1D611 ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J 1D645 ; [.1D4C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J 1D679 ; [.1D4C.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL J 24BF ; [.1D4C.0020.000C] # CIRCLED LATIN CAPITAL LETTER J 1F159 ; [.1D4C.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER J 02B2 ; [.1D4C.0020.0014] # MODIFIER LETTER SMALL J 2C7C ; [.1D4C.0020.0015] # LATIN SUBSCRIPT SMALL LETTER J 1D36 ; [.1D4C.0020.001D] # MODIFIER LETTER CAPITAL J 1F139 ; [.1D4C.0020.001D] # SQUARED LATIN CAPITAL LETTER J 1F179 ; [.1D4C.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER J 0135 ; [.1D4C.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX 0134 ; [.1D4C.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX 01F0 ; [.1D4C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER J WITH CARON 0237 ; [.1D50.0020.0002] # LATIN SMALL LETTER DOTLESS J 1D6A5 ; [.1D50.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS J 1D0A ; [.1D54.0020.0002] # LATIN LETTER SMALL CAPITAL J 0249 ; [.1D55.0020.0002] # LATIN SMALL LETTER J WITH STROKE 0248 ; [.1D55.0020.0008] # LATIN CAPITAL LETTER J WITH STROKE 029D ; [.1D59.0020.0002] # LATIN SMALL LETTER J WITH CROSSED-TAIL A7B2 ; [.1D59.0020.0008] # LATIN CAPITAL LETTER J WITH CROSSED-TAIL 1DA8 ; [.1D59.0020.0014] # MODIFIER LETTER SMALL J WITH CROSSED-TAIL 025F ; [.1D5D.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE 1DA1 ; [.1D5D.0020.0014] # MODIFIER LETTER SMALL DOTLESS J WITH STROKE 0284 ; [.1D61.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK 006B ; [.1D65.0020.0002] # LATIN SMALL LETTER K FF4B ; [.1D65.0020.0003] # FULLWIDTH LATIN SMALL LETTER K 1DDC ; [.1D65.0020.0004] # COMBINING LATIN SMALL LETTER K 24A6 ; [*0317.0020.0004][.1D65.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER K 1D424 ; [.1D65.0020.0005] # MATHEMATICAL BOLD SMALL K 1D458 ; [.1D65.0020.0005] # MATHEMATICAL ITALIC SMALL K 1D48C ; [.1D65.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL K 1D4C0 ; [.1D65.0020.0005] # MATHEMATICAL SCRIPT SMALL K 1D4F4 ; [.1D65.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL K 1D528 ; [.1D65.0020.0005] # MATHEMATICAL FRAKTUR SMALL K 1D55C ; [.1D65.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL K 1D590 ; [.1D65.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL K 1D5C4 ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF SMALL K 1D5F8 ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL K 1D62C ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL K 1D660 ; [.1D65.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K 1D694 ; [.1D65.0020.0005] # MATHEMATICAL MONOSPACE SMALL K 24DA ; [.1D65.0020.0006] # CIRCLED LATIN SMALL LETTER K 004B ; [.1D65.0020.0008] # LATIN CAPITAL LETTER K 212A ; [.1D65.0020.0008] # KELVIN SIGN FF2B ; [.1D65.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER K 1F11A ; [*0317.0020.0004][.1D65.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER K 1D40A ; [.1D65.0020.000B] # MATHEMATICAL BOLD CAPITAL K 1D43E ; [.1D65.0020.000B] # MATHEMATICAL ITALIC CAPITAL K 1D472 ; [.1D65.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL K 1D4A6 ; [.1D65.0020.000B] # MATHEMATICAL SCRIPT CAPITAL K 1D4DA ; [.1D65.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL K 1D50E ; [.1D65.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL K 1D542 ; [.1D65.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL K 1D576 ; [.1D65.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL K 1D5AA ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL K 1D5DE ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL K 1D612 ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K 1D646 ; [.1D65.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K 1D67A ; [.1D65.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL K 24C0 ; [.1D65.0020.000C] # CIRCLED LATIN CAPITAL LETTER K 1F15A ; [.1D65.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER K 1D4F ; [.1D65.0020.0014] # MODIFIER LETTER SMALL K 2096 ; [.1D65.0020.0015] # LATIN SUBSCRIPT SMALL LETTER K 1D37 ; [.1D65.0020.001D] # MODIFIER LETTER CAPITAL K 1F13A ; [.1D65.0020.001D] # SQUARED LATIN CAPITAL LETTER K 1F17A ; [.1D65.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER K 1E31 ; [.1D65.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER K WITH ACUTE 1E30 ; [.1D65.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER K WITH ACUTE 01E9 ; [.1D65.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER K WITH CARON 01E8 ; [.1D65.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER K WITH CARON 0137 ; [.1D65.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER K WITH CEDILLA 0136 ; [.1D65.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER K WITH CEDILLA A7A3 ; [.1D65.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER K WITH OBLIQUE STROKE A7A2 ; [.1D65.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE 1E33 ; [.1D65.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER K WITH DOT BELOW 1E32 ; [.1D65.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER K WITH DOT BELOW 1E35 ; [.1D65.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER K WITH LINE BELOW 1E34 ; [.1D65.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER K WITH LINE BELOW 3384 ; [.1D65.0020.001C][.1C47.0020.001D] # SQUARE KA 3385 ; [.1D65.0020.001D][.1C60.0020.001D] # SQUARE KB 3389 ; [.1D65.0020.001C][.1C7A.0020.001C][.1C47.0020.001C][.1D77.0020.001C] # SQUARE KCAL 338F ; [.1D65.0020.001C][.1CF4.0020.001C] # SQUARE KG 3391 ; [.1D65.0020.001C][.1D18.0020.001D][.1F21.0020.001C] # SQUARE KHZ 33CD ; [.1D65.0020.001D][.1D65.0020.001D] # SQUARE KK 3398 ; [.1D65.0020.001C][.1D77.0020.001C] # SQUARE KL 339E ; [.1D65.0020.001C][.1DAA.0020.001C] # SQUARE KM 33CE ; [.1D65.0020.001D][.1DAA.0020.001D] # SQUARE KM CAPITAL 33A2 ; [.1D65.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE KM SQUARED 33A6 ; [.1D65.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE KM CUBED 33AA ; [.1D65.0020.001C][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE KPA 33CF ; [.1D65.0020.001C][.1E95.0020.001C] # SQUARE KT 33B8 ; [.1D65.0020.001C][.1EE3.0020.001D] # SQUARE KV 33BE ; [.1D65.0020.001C][.1EF5.0020.001D] # SQUARE KW 33C0 ; [.1D65.0020.001C][.1FE1.0020.001D] # SQUARE K OHM 1D0B ; [.1D69.0020.0002] # LATIN LETTER SMALL CAPITAL K 1D84 ; [.1D6A.0020.0002] # LATIN SMALL LETTER K WITH PALATAL HOOK 0199 ; [.1D6B.0020.0002] # LATIN SMALL LETTER K WITH HOOK 0198 ; [.1D6B.0020.0008] # LATIN CAPITAL LETTER K WITH HOOK 2C6A ; [.1D6F.0020.0002] # LATIN SMALL LETTER K WITH DESCENDER 2C69 ; [.1D6F.0020.0008] # LATIN CAPITAL LETTER K WITH DESCENDER A741 ; [.1D70.0020.0002] # LATIN SMALL LETTER K WITH STROKE A740 ; [.1D70.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE A743 ; [.1D71.0020.0002] # LATIN SMALL LETTER K WITH DIAGONAL STROKE A742 ; [.1D71.0020.0008] # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE A745 ; [.1D72.0020.0002] # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE A744 ; [.1D72.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE 029E ; [.1D73.0020.0002] # LATIN SMALL LETTER TURNED K A7B0 ; [.1D73.0020.0008] # LATIN CAPITAL LETTER TURNED K 006C ; [.1D77.0020.0002] # LATIN SMALL LETTER L FF4C ; [.1D77.0020.0003] # FULLWIDTH LATIN SMALL LETTER L 1DDD ; [.1D77.0020.0004] # COMBINING LATIN SMALL LETTER L 217C ; [.1D77.0020.0004] # SMALL ROMAN NUMERAL FIFTY 24A7 ; [*0317.0020.0004][.1D77.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER L 2113 ; [.1D77.0020.0005] # SCRIPT SMALL L 1D425 ; [.1D77.0020.0005] # MATHEMATICAL BOLD SMALL L 1D459 ; [.1D77.0020.0005] # MATHEMATICAL ITALIC SMALL L 1D48D ; [.1D77.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL L 1D4C1 ; [.1D77.0020.0005] # MATHEMATICAL SCRIPT SMALL L 1D4F5 ; [.1D77.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL L 1D529 ; [.1D77.0020.0005] # MATHEMATICAL FRAKTUR SMALL L 1D55D ; [.1D77.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL L 1D591 ; [.1D77.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL L 1D5C5 ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF SMALL L 1D5F9 ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL L 1D62D ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL L 1D661 ; [.1D77.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L 1D695 ; [.1D77.0020.0005] # MATHEMATICAL MONOSPACE SMALL L 24DB ; [.1D77.0020.0006] # CIRCLED LATIN SMALL LETTER L 004C ; [.1D77.0020.0008] # LATIN CAPITAL LETTER L FF2C ; [.1D77.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER L 216C ; [.1D77.0020.000A] # ROMAN NUMERAL FIFTY 1F11B ; [*0317.0020.0004][.1D77.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER L 2112 ; [.1D77.0020.000B] # SCRIPT CAPITAL L 1D40B ; [.1D77.0020.000B] # MATHEMATICAL BOLD CAPITAL L 1D43F ; [.1D77.0020.000B] # MATHEMATICAL ITALIC CAPITAL L 1D473 ; [.1D77.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL L 1D4DB ; [.1D77.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL L 1D50F ; [.1D77.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL L 1D543 ; [.1D77.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL L 1D577 ; [.1D77.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL L 1D5AB ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL L 1D5DF ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL L 1D613 ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L 1D647 ; [.1D77.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L 1D67B ; [.1D77.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL L 24C1 ; [.1D77.0020.000C] # CIRCLED LATIN CAPITAL LETTER L 1F15B ; [.1D77.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER L 02E1 ; [.1D77.0020.0014] # MODIFIER LETTER SMALL L 2097 ; [.1D77.0020.0015] # LATIN SUBSCRIPT SMALL LETTER L 1D38 ; [.1D77.0020.001D] # MODIFIER LETTER CAPITAL L 1F13B ; [.1D77.0020.001D] # SQUARED LATIN CAPITAL LETTER L 1F17B ; [.1D77.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER L 013A ; [.1D77.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER L WITH ACUTE 0139 ; [.1D77.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER L WITH ACUTE 013E ; [.1D77.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER L WITH CARON 013D ; [.1D77.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER L WITH CARON 013C ; [.1D77.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER L WITH CEDILLA 013B ; [.1D77.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER L WITH CEDILLA 0142 ; [.1D77.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER L WITH STROKE 0141 ; [.1D77.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER L WITH STROKE 1E37 ; [.1D77.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER L WITH DOT BELOW 1E36 ; [.1D77.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW 1E39 ; [.1D77.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON 1E38 ; [.1D77.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON 1E3D ; [.1D77.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW 1E3C ; [.1D77.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW 1E3B ; [.1D77.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER L WITH LINE BELOW 1E3A ; [.1D77.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER L WITH LINE BELOW 0140 ; [.1D77.0020.0002][.0000.0110.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT 006C 00B7 ; [.1D77.0020.0002][.0000.0110.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT 006C 0387 ; [.1D77.0020.0002][.0000.0110.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT 013F ; [.1D77.0020.0008][.0000.0110.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT 004C 00B7 ; [.1D77.0020.0008][.0000.0110.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT 004C 0387 ; [.1D77.0020.0008][.0000.0110.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT 01C9 ; [.1D77.0020.0004][.1D4C.0020.0004] # LATIN SMALL LETTER LJ 01C8 ; [.1D77.0020.000A][.1D4C.0020.0004] # LATIN CAPITAL LETTER L WITH SMALL LETTER J 01C7 ; [.1D77.0020.000A][.1D4C.0020.000A] # LATIN CAPITAL LETTER LJ 1EFB ; [.1D77.0020.0004][.1D77.0020.0004] # LATIN SMALL LETTER MIDDLE-WELSH LL 1EFA ; [.1D77.0020.000A][.1D77.0020.000A] # LATIN CAPITAL LETTER MIDDLE-WELSH LL 33D0 ; [.1D77.0020.001C][.1DAA.0020.001C] # SQUARE LM 33D1 ; [.1D77.0020.001C][.1DB9.0020.001C] # SQUARE LN 33D2 ; [.1D77.0020.001C][.1DDD.0020.001C][.1CF4.0020.001C] # SQUARE LOG 1F1A9 ; [.1D77.0020.001D][.1DDD.0020.001C][.1E71.0020.001C][.1E71.0020.001C][.1D77.0020.001C][.1CAA.0020.001C][.1E71.0020.001C][.1E71.0020.001C] # SQUARED LOSSLESS 02AA ; [.1D77.0020.0004][.1E71.0020.0004] # LATIN SMALL LETTER LS DIGRAPH 32CF ; [.1D77.0020.001D][.1E95.0020.001D][.1C8F.0020.001D] # LIMITED LIABILITY SIGN 33D3 ; [.1D77.0020.001C][.1EFF.0020.001C] # SQUARE LX 02AB ; [.1D77.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER LZ DIGRAPH 029F ; [.1D7B.0020.0002] # LATIN LETTER SMALL CAPITAL L 1DDE ; [.1D7B.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL L 1DAB ; [.1D7B.0020.0014] # MODIFIER LETTER SMALL CAPITAL L A747 ; [.1D7F.0020.0002] # LATIN SMALL LETTER BROKEN L A746 ; [.1D7F.0020.0008] # LATIN CAPITAL LETTER BROKEN L 1D0C ; [.1D80.0020.0002] # LATIN LETTER SMALL CAPITAL L WITH STROKE A749 ; [.1D81.0020.0002] # LATIN SMALL LETTER L WITH HIGH STROKE A748 ; [.1D81.0020.0008] # LATIN CAPITAL LETTER L WITH HIGH STROKE 019A ; [.1D82.0020.0002] # LATIN SMALL LETTER L WITH BAR 023D ; [.1D82.0020.0008] # LATIN CAPITAL LETTER L WITH BAR 2C61 ; [.1D86.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE BAR 2C60 ; [.1D86.0020.0008] # LATIN CAPITAL LETTER L WITH DOUBLE BAR 026B ; [.1D87.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE TILDE 2C62 ; [.1D87.0020.0008] # LATIN CAPITAL LETTER L WITH MIDDLE TILDE AB5E ; [.1D87.0020.0014] # MODIFIER LETTER SMALL L WITH MIDDLE TILDE AB38 ; [.1D8B.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE 1DEC ; [.1D8B.0020.0004] # COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE AB39 ; [.1D8C.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE RING 026C ; [.1D8D.0020.0002] # LATIN SMALL LETTER L WITH BELT A7AD ; [.1D8D.0020.0008] # LATIN CAPITAL LETTER L WITH BELT AB37 ; [.1D91.0020.0002] # LATIN SMALL LETTER L WITH INVERTED LAZY S AB5D ; [.1D91.0020.0014] # MODIFIER LETTER SMALL L WITH INVERTED LAZY S 1D85 ; [.1D92.0020.0002] # LATIN SMALL LETTER L WITH PALATAL HOOK 1DAA ; [.1D92.0020.0014] # MODIFIER LETTER SMALL L WITH PALATAL HOOK 026D ; [.1D93.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK 1DA9 ; [.1D93.0020.0014] # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK A78E ; [.1D97.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT 0234 ; [.1D98.0020.0002] # LATIN SMALL LETTER L WITH CURL A772 ; [.1D9C.0020.0002] # LATIN SMALL LETTER LUM 026E ; [.1D9D.0020.0002] # LATIN SMALL LETTER LEZH A781 ; [.1DA1.0020.0002] # LATIN SMALL LETTER TURNED L A780 ; [.1DA1.0020.0008] # LATIN CAPITAL LETTER TURNED L 019B ; [.1DA2.0020.0002] # LATIN SMALL LETTER LAMBDA WITH STROKE 028E ; [.1DA6.0020.0002] # LATIN SMALL LETTER TURNED Y 006D ; [.1DAA.0020.0002] # LATIN SMALL LETTER M FF4D ; [.1DAA.0020.0003] # FULLWIDTH LATIN SMALL LETTER M 036B ; [.1DAA.0020.0004] # COMBINING LATIN SMALL LETTER M 217F ; [.1DAA.0020.0004] # SMALL ROMAN NUMERAL ONE THOUSAND 24A8 ; [*0317.0020.0004][.1DAA.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER M 1D426 ; [.1DAA.0020.0005] # MATHEMATICAL BOLD SMALL M 1D45A ; [.1DAA.0020.0005] # MATHEMATICAL ITALIC SMALL M 1D48E ; [.1DAA.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL M 1D4C2 ; [.1DAA.0020.0005] # MATHEMATICAL SCRIPT SMALL M 1D4F6 ; [.1DAA.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL M 1D52A ; [.1DAA.0020.0005] # MATHEMATICAL FRAKTUR SMALL M 1D55E ; [.1DAA.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL M 1D592 ; [.1DAA.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL M 1D5C6 ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF SMALL M 1D5FA ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL M 1D62E ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL M 1D662 ; [.1DAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M 1D696 ; [.1DAA.0020.0005] # MATHEMATICAL MONOSPACE SMALL M 24DC ; [.1DAA.0020.0006] # CIRCLED LATIN SMALL LETTER M 004D ; [.1DAA.0020.0008] # LATIN CAPITAL LETTER M FF2D ; [.1DAA.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER M 216F ; [.1DAA.0020.000A] # ROMAN NUMERAL ONE THOUSAND 1F11C ; [*0317.0020.0004][.1DAA.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER M 2133 ; [.1DAA.0020.000B] # SCRIPT CAPITAL M 1D40C ; [.1DAA.0020.000B] # MATHEMATICAL BOLD CAPITAL M 1D440 ; [.1DAA.0020.000B] # MATHEMATICAL ITALIC CAPITAL M 1D474 ; [.1DAA.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL M 1D4DC ; [.1DAA.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL M 1D510 ; [.1DAA.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL M 1D544 ; [.1DAA.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL M 1D578 ; [.1DAA.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL M 1D5AC ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL M 1D5E0 ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL M 1D614 ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M 1D648 ; [.1DAA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M 1D67C ; [.1DAA.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL M 24C2 ; [.1DAA.0020.000C] # CIRCLED LATIN CAPITAL LETTER M 1F15C ; [.1DAA.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER M 1D50 ; [.1DAA.0020.0014] # MODIFIER LETTER SMALL M 2098 ; [.1DAA.0020.0015] # LATIN SUBSCRIPT SMALL LETTER M 1D39 ; [.1DAA.0020.001D] # MODIFIER LETTER CAPITAL M 1F13C ; [.1DAA.0020.001D] # SQUARED LATIN CAPITAL LETTER M 1F17C ; [.1DAA.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER M 1E3F ; [.1DAA.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1DAA.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER M WITH ACUTE 1E41 ; [.1DAA.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER M WITH DOT ABOVE 1E40 ; [.1DAA.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER M WITH DOT ABOVE 1E43 ; [.1DAA.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER M WITH DOT BELOW 1E42 ; [.1DAA.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER M WITH DOT BELOW 33A1 ; [.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE M SQUARED 33A5 ; [.1DAA.0020.001C][.1C40.0020.001C] # SQUARE M CUBED 3383 ; [.1DAA.0020.001C][.1C47.0020.001D] # SQUARE MA 33D4 ; [.1DAA.0020.001C][.1C60.0020.001C] # SQUARE MB SMALL 3386 ; [.1DAA.0020.001D][.1C60.0020.001D] # SQUARE MB 1F16A ; [.1DAA.0020.0014][.1C7A.0020.0014] # RAISED MC SIGN 1F16B ; [.1DAA.0020.0014][.1C8F.0020.0014] # RAISED MD SIGN 338E ; [.1DAA.0020.001C][.1CF4.0020.001C] # SQUARE MG 3392 ; [.1DAA.0020.001D][.1D18.0020.001D][.1F21.0020.001C] # SQUARE MHZ 33D5 ; [.1DAA.0020.001C][.1D32.0020.001C][.1D77.0020.001C] # SQUARE MIL 3396 ; [.1DAA.0020.001C][.1D77.0020.001C] # SQUARE ML 339C ; [.1DAA.0020.001C][.1DAA.0020.001C] # SQUARE MM 339F ; [.1DAA.0020.001C][.1DAA.0020.001C][.1C3F.0020.001C] # SQUARE MM SQUARED 33A3 ; [.1DAA.0020.001C][.1DAA.0020.001C][.1C40.0020.001C] # SQUARE MM CUBED 33D6 ; [.1DAA.0020.001C][.1DDD.0020.001C][.1D77.0020.001C] # SQUARE MOL 33AB ; [.1DAA.0020.001D][.1E0C.0020.001D][.1C47.0020.001C] # SQUARE MPA 33A7 ; [.1DAA.0020.001C][*0625.0020.001C][.1E71.0020.001C] # SQUARE M OVER S 33B3 ; [.1DAA.0020.001C][.1E71.0020.001C] # SQUARE MS 33A8 ; [.1DAA.0020.001C][*0625.0020.001C][.1E71.0020.001C][.1C3F.0020.001C] # SQUARE M OVER S SQUARED 33B7 ; [.1DAA.0020.001C][.1EE3.0020.001D] # SQUARE MV 33B9 ; [.1DAA.0020.001D][.1EE3.0020.001D] # SQUARE MV MEGA 1F14B ; [.1DAA.0020.001D][.1EE3.0020.001D] # SQUARED MV 33BD ; [.1DAA.0020.001C][.1EF5.0020.001D] # SQUARE MW 33BF ; [.1DAA.0020.001D][.1EF5.0020.001D] # SQUARE MW MEGA 33C1 ; [.1DAA.0020.001D][.1FE1.0020.001D] # SQUARE M OHM 1D0D ; [.1DAE.0020.0002] # LATIN LETTER SMALL CAPITAL M 1DDF ; [.1DAE.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL M 1D6F ; [.1DAF.0020.0002] # LATIN SMALL LETTER M WITH MIDDLE TILDE 1D86 ; [.1DB0.0020.0002] # LATIN SMALL LETTER M WITH PALATAL HOOK 0271 ; [.1DB1.0020.0002] # LATIN SMALL LETTER M WITH HOOK 2C6E ; [.1DB1.0020.0008] # LATIN CAPITAL LETTER M WITH HOOK 1DAC ; [.1DB1.0020.0014] # MODIFIER LETTER SMALL M WITH HOOK AB3A ; [.1DB5.0020.0002] # LATIN SMALL LETTER M WITH CROSSED-TAIL A7FD ; [.1DB6.0020.0002] # LATIN EPIGRAPHIC LETTER INVERTED M A7FF ; [.1DB7.0020.0002] # LATIN EPIGRAPHIC LETTER ARCHAIC M A773 ; [.1DB8.0020.0002] # LATIN SMALL LETTER MUM 006E ; [.1DB9.0020.0002] # LATIN SMALL LETTER N FF4E ; [.1DB9.0020.0003] # FULLWIDTH LATIN SMALL LETTER N 1DE0 ; [.1DB9.0020.0004] # COMBINING LATIN SMALL LETTER N 24A9 ; [*0317.0020.0004][.1DB9.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER N 1D427 ; [.1DB9.0020.0005] # MATHEMATICAL BOLD SMALL N 1D45B ; [.1DB9.0020.0005] # MATHEMATICAL ITALIC SMALL N 1D48F ; [.1DB9.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL N 1D4C3 ; [.1DB9.0020.0005] # MATHEMATICAL SCRIPT SMALL N 1D4F7 ; [.1DB9.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL N 1D52B ; [.1DB9.0020.0005] # MATHEMATICAL FRAKTUR SMALL N 1D55F ; [.1DB9.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL N 1D593 ; [.1DB9.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL N 1D5C7 ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF SMALL N 1D5FB ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL N 1D62F ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL N 1D663 ; [.1DB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N 1D697 ; [.1DB9.0020.0005] # MATHEMATICAL MONOSPACE SMALL N 24DD ; [.1DB9.0020.0006] # CIRCLED LATIN SMALL LETTER N 004E ; [.1DB9.0020.0008] # LATIN CAPITAL LETTER N FF2E ; [.1DB9.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER N 1F11D ; [*0317.0020.0004][.1DB9.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER N 2115 ; [.1DB9.0020.000B] # DOUBLE-STRUCK CAPITAL N 1D40D ; [.1DB9.0020.000B] # MATHEMATICAL BOLD CAPITAL N 1D441 ; [.1DB9.0020.000B] # MATHEMATICAL ITALIC CAPITAL N 1D475 ; [.1DB9.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL N 1D4A9 ; [.1DB9.0020.000B] # MATHEMATICAL SCRIPT CAPITAL N 1D4DD ; [.1DB9.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL N 1D511 ; [.1DB9.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL N 1D579 ; [.1DB9.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL N 1D5AD ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL N 1D5E1 ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL N 1D615 ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N 1D649 ; [.1DB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N 1D67D ; [.1DB9.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL N 24C3 ; [.1DB9.0020.000C] # CIRCLED LATIN CAPITAL LETTER N 1F15D ; [.1DB9.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER N 207F ; [.1DB9.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER N 2099 ; [.1DB9.0020.0015] # LATIN SUBSCRIPT SMALL LETTER N 1D3A ; [.1DB9.0020.001D] # MODIFIER LETTER CAPITAL N 1F13D ; [.1DB9.0020.001D] # SQUARED LATIN CAPITAL LETTER N 1F17D ; [.1DB9.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER N 0144 ; [.1DB9.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DB9.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER N WITH ACUTE 01F9 ; [.1DB9.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.1DB9.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER N WITH GRAVE 0148 ; [.1DB9.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER N WITH CARON 0147 ; [.1DB9.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER N WITH CARON 00F1 ; [.1DB9.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER N WITH TILDE 00D1 ; [.1DB9.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER N WITH TILDE 1E45 ; [.1DB9.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER N WITH DOT ABOVE 1E44 ; [.1DB9.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER N WITH DOT ABOVE 0146 ; [.1DB9.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER N WITH CEDILLA 0145 ; [.1DB9.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER N WITH CEDILLA A7A5 ; [.1DB9.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER N WITH OBLIQUE STROKE A7A4 ; [.1DB9.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE 1E47 ; [.1DB9.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER N WITH DOT BELOW 1E46 ; [.1DB9.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER N WITH DOT BELOW 1E4B ; [.1DB9.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW 1E4A ; [.1DB9.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW 1E49 ; [.1DB9.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER N WITH LINE BELOW 1E48 ; [.1DB9.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER N WITH LINE BELOW 3381 ; [.1DB9.0020.001C][.1C47.0020.001D] # SQUARE NA 1F195 ; [.1DB9.0020.001D][.1CAA.0020.001D][.1EF5.0020.001D] # SQUARED NEW 338B ; [.1DB9.0020.001C][.1CE5.0020.001D] # SQUARE NF 1F196 ; [.1DB9.0020.001D][.1CF4.0020.001D] # SQUARED NG 01CC ; [.1DB9.0020.0004][.1D4C.0020.0004] # LATIN SMALL LETTER NJ 01CB ; [.1DB9.0020.000A][.1D4C.0020.0004] # LATIN CAPITAL LETTER N WITH SMALL LETTER J 01CA ; [.1DB9.0020.000A][.1D4C.0020.000A] # LATIN CAPITAL LETTER NJ 339A ; [.1DB9.0020.001C][.1DAA.0020.001C] # SQUARE NM 2116 ; [.1DB9.0020.000A][.1DDD.0020.0004] # NUMERO SIGN 33B1 ; [.1DB9.0020.001C][.1E71.0020.001C] # SQUARE NS 33B5 ; [.1DB9.0020.001C][.1EE3.0020.001D] # SQUARE NV 33BB ; [.1DB9.0020.001C][.1EF5.0020.001D] # SQUARE NW 0274 ; [.1DBD.0020.0002] # LATIN LETTER SMALL CAPITAL N 1DE1 ; [.1DBD.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL N 1DB0 ; [.1DBD.0020.0014] # MODIFIER LETTER SMALL CAPITAL N 1D3B ; [.1DC1.0020.0002] # MODIFIER LETTER CAPITAL REVERSED N 1D0E ; [.1DC2.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED N 1D70 ; [.1DC3.0020.0002] # LATIN SMALL LETTER N WITH MIDDLE TILDE 0272 ; [.1DC4.0020.0002] # LATIN SMALL LETTER N WITH LEFT HOOK 019D ; [.1DC4.0020.0008] # LATIN CAPITAL LETTER N WITH LEFT HOOK 1DAE ; [.1DC4.0020.0014] # MODIFIER LETTER SMALL N WITH LEFT HOOK 019E ; [.1DC8.0020.0002] # LATIN SMALL LETTER N WITH LONG RIGHT LEG 0220 ; [.1DC8.0020.0008] # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG A791 ; [.1DCC.0020.0002] # LATIN SMALL LETTER N WITH DESCENDER A790 ; [.1DCC.0020.0008] # LATIN CAPITAL LETTER N WITH DESCENDER 1D87 ; [.1DCD.0020.0002] # LATIN SMALL LETTER N WITH PALATAL HOOK 0273 ; [.1DCE.0020.0002] # LATIN SMALL LETTER N WITH RETROFLEX HOOK 1DAF ; [.1DCE.0020.0014] # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK 0235 ; [.1DD2.0020.0002] # LATIN SMALL LETTER N WITH CURL AB3B ; [.1DD6.0020.0002] # LATIN SMALL LETTER N WITH CROSSED-TAIL A774 ; [.1DD7.0020.0002] # LATIN SMALL LETTER NUM 014B ; [.1DD8.0020.0002] # LATIN SMALL LETTER ENG 014A ; [.1DD8.0020.0008] # LATIN CAPITAL LETTER ENG 1D51 ; [.1DD8.0020.0014] # MODIFIER LETTER SMALL ENG AB3C ; [.1DDC.0020.0002] # LATIN SMALL LETTER ENG WITH CROSSED-TAIL 006F ; [.1DDD.0020.0002] # LATIN SMALL LETTER O FF4F ; [.1DDD.0020.0003] # FULLWIDTH LATIN SMALL LETTER O 0366 ; [.1DDD.0020.0004] # COMBINING LATIN SMALL LETTER O 24AA ; [*0317.0020.0004][.1DDD.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER O 2134 ; [.1DDD.0020.0005] # SCRIPT SMALL O 1D428 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD SMALL O 1D45C ; [.1DDD.0020.0005] # MATHEMATICAL ITALIC SMALL O 1D490 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL O 1D4F8 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL O 1D52C ; [.1DDD.0020.0005] # MATHEMATICAL FRAKTUR SMALL O 1D560 ; [.1DDD.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL O 1D594 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL O 1D5C8 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF SMALL O 1D5FC ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL O 1D630 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL O 1D664 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O 1D698 ; [.1DDD.0020.0005] # MATHEMATICAL MONOSPACE SMALL O 24DE ; [.1DDD.0020.0006] # CIRCLED LATIN SMALL LETTER O 004F ; [.1DDD.0020.0008] # LATIN CAPITAL LETTER O FF2F ; [.1DDD.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER O 1F11E ; [*0317.0020.0004][.1DDD.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER O 1D40E ; [.1DDD.0020.000B] # MATHEMATICAL BOLD CAPITAL O 1D442 ; [.1DDD.0020.000B] # MATHEMATICAL ITALIC CAPITAL O 1D476 ; [.1DDD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL O 1D4AA ; [.1DDD.0020.000B] # MATHEMATICAL SCRIPT CAPITAL O 1D4DE ; [.1DDD.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL O 1D512 ; [.1DDD.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL O 1D546 ; [.1DDD.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL O 1D57A ; [.1DDD.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL O 1D5AE ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL O 1D5E2 ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL O 1D616 ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O 1D64A ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O 1D67E ; [.1DDD.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL O 24C4 ; [.1DDD.0020.000C] # CIRCLED LATIN CAPITAL LETTER O 1F15E ; [.1DDD.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER O 00BA ; [.1DDD.0020.0014] # MASCULINE ORDINAL INDICATOR 1D52 ; [.1DDD.0020.0014] # MODIFIER LETTER SMALL O 2092 ; [.1DDD.0020.0015] # LATIN SUBSCRIPT SMALL LETTER O 1D3C ; [.1DDD.0020.001D] # MODIFIER LETTER CAPITAL O 1F13E ; [.1DDD.0020.001D] # SQUARED LATIN CAPITAL LETTER O 1F17E ; [.1DDD.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER O 00F3 ; [.1DDD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH ACUTE 00F2 ; [.1DDD.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1DDD.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH GRAVE 014F ; [.1DDD.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER O WITH BREVE 014E ; [.1DDD.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER O WITH BREVE 00F4 ; [.1DDD.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1DDD.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED1 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED3 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED7 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1DDD.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1DDD.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 01D2 ; [.1DDD.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1DDD.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER O WITH CARON 00F6 ; [.1DDD.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH DIAERESIS 1DF3 ; [.1DDD.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER O WITH DIAERESIS A79D ; [.1DDD.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK OE 00D6 ; [.1DDD.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS A79C ; [.1DDD.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK OE 022B ; [.1DDD.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1DDD.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1DDD.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1DDD.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 00F5 ; [.1DDD.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH TILDE 00D5 ; [.1DDD.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH TILDE 1E4D ; [.1DDD.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE 1E4C ; [.1DDD.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE 1E4F ; [.1DDD.0020.0002][.0000.002D.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS 1E4E ; [.1DDD.0020.0008][.0000.002D.0002][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS 022D ; [.1DDD.0020.0002][.0000.002D.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON 022C ; [.1DDD.0020.0008][.0000.002D.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON 022F ; [.1DDD.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER O WITH DOT ABOVE 022E ; [.1DDD.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE 0231 ; [.1DDD.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON 0230 ; [.1DDD.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON 00F8 ; [.1DDD.0020.0002][.0000.002F.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1DDD.0020.0008][.0000.002F.0002] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1DDD.0020.0002][.0000.002F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1DDD.0020.0008][.0000.002F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 01EB ; [.1DDD.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER O WITH OGONEK 01EA ; [.1DDD.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER O WITH OGONEK 01ED ; [.1DDD.0020.0002][.0000.0031.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH OGONEK AND MACRON 01EC ; [.1DDD.0020.0008][.0000.0031.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON 014D ; [.1DDD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON 1E53 ; [.1DDD.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH MACRON AND ACUTE 1E52 ; [.1DDD.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE 1E51 ; [.1DDD.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH MACRON AND GRAVE 1E50 ; [.1DDD.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE 1DED ; [.1DDD.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE 1ECF ; [.1DDD.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HOOK ABOVE 1ECE ; [.1DDD.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HOOK ABOVE 020D ; [.1DDD.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER O WITH DOUBLE GRAVE 020C ; [.1DDD.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE 020F ; [.1DDD.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER O WITH INVERTED BREVE 020E ; [.1DDD.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER O WITH INVERTED BREVE 01A1 ; [.1DDD.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN 01A0 ; [.1DDD.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN 1EDB ; [.1DDD.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH HORN AND ACUTE 1EDA ; [.1DDD.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE 1EDD ; [.1DDD.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE 1EDC ; [.1DDD.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE 1EE1 ; [.1DDD.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE 1EE0 ; [.1DDD.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE 1EDF ; [.1DDD.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE 1EDE ; [.1DDD.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE 1EE3 ; [.1DDD.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW 1EE2 ; [.1DDD.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 1ECD ; [.1DDD.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH DOT BELOW 1ECC ; [.1DDD.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH DOT BELOW 1ED9 ; [.1DDD.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1DDD.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 0153 ; [.1DDD.0020.0004][.0000.0110.0004][.1CAA.0020.0004] # LATIN SMALL LIGATURE OE 0152 ; [.1DDD.0020.000A][.0000.0110.0004][.1CAA.0020.000A] # LATIN CAPITAL LIGATURE OE A7F9 ; [.1DDD.0020.0014][.0000.0110.0014][.1CAA.0020.0014] # MODIFIER LETTER SMALL LIGATURE OE 1F197 ; [.1DDD.0020.001D][.1D65.0020.001D] # SQUARED OK A74F ; [.1DDD.0020.0004][.1DDD.0020.0004] # LATIN SMALL LETTER OO A74E ; [.1DDD.0020.000A][.1DDD.0020.000A] # LATIN CAPITAL LETTER OO 3375 ; [.1DDD.0020.001C][.1EE3.0020.001D] # SQUARE OV 1D0F ; [.1DE1.0020.0002] # LATIN LETTER SMALL CAPITAL O 1D11 ; [.1DE2.0020.0002] # LATIN SMALL LETTER SIDEWAYS O AB3D ; [.1DE3.0020.0002] # LATIN SMALL LETTER BLACKLETTER O 0276 ; [.1DE4.0020.0002] # LATIN LETTER SMALL CAPITAL OE 1D14 ; [.1DE8.0020.0002] # LATIN SMALL LETTER TURNED OE AB41 ; [.1DE9.0020.0002] # LATIN SMALL LETTER TURNED OE WITH STROKE AB42 ; [.1DEA.0020.0002] # LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE AB40 ; [.1DEB.0020.0002] # LATIN SMALL LETTER INVERTED OE AB43 ; [.1DEC.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O AB44 ; [.1DED.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE 1D13 ; [.1DEE.0020.0002] # LATIN SMALL LETTER SIDEWAYS O WITH STROKE AB3E ; [.1DEF.0020.0002] # LATIN SMALL LETTER BLACKLETTER O WITH STROKE 0254 ; [.1DF0.0020.0002] # LATIN SMALL LETTER OPEN O 0186 ; [.1DF0.0020.0008] # LATIN CAPITAL LETTER OPEN O 1D53 ; [.1DF0.0020.0014] # MODIFIER LETTER SMALL OPEN O 1D10 ; [.1DF4.0020.0002] # LATIN LETTER SMALL CAPITAL OPEN O 1D12 ; [.1DF5.0020.0002] # LATIN SMALL LETTER SIDEWAYS OPEN O AB3F ; [.1DF6.0020.0002] # LATIN SMALL LETTER OPEN O WITH STROKE 1D97 ; [.1DF7.0020.0002] # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK AB62 ; [.1DF8.0020.0002] # LATIN SMALL LETTER OPEN OE A74D ; [.1DF9.0020.0002] # LATIN SMALL LETTER O WITH LOOP A74C ; [.1DF9.0020.0008] # LATIN CAPITAL LETTER O WITH LOOP 1D16 ; [.1DFA.0020.0002] # LATIN SMALL LETTER TOP HALF O 1D54 ; [.1DFA.0020.0014] # MODIFIER LETTER SMALL TOP HALF O 1D17 ; [.1DFB.0020.0002] # LATIN SMALL LETTER BOTTOM HALF O 1D55 ; [.1DFB.0020.0014] # MODIFIER LETTER SMALL BOTTOM HALF O 2C7A ; [.1DFC.0020.0002] # LATIN SMALL LETTER O WITH LOW RING INSIDE 0275 ; [.1DFD.0020.0002] # LATIN SMALL LETTER BARRED O 019F ; [.1DFD.0020.0008] # LATIN CAPITAL LETTER O WITH MIDDLE TILDE 1DB1 ; [.1DFD.0020.0014] # MODIFIER LETTER SMALL BARRED O A74B ; [.1E01.0020.0002] # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY A74A ; [.1E01.0020.0008] # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY 0277 ; [.1E02.0020.0002] # LATIN SMALL LETTER CLOSED OMEGA A7B7 ; [.1E06.0020.0002] # LATIN SMALL LETTER OMEGA A7B6 ; [.1E06.0020.0008] # LATIN CAPITAL LETTER OMEGA 0223 ; [.1E07.0020.0002] # LATIN SMALL LETTER OU 0222 ; [.1E07.0020.0008] # LATIN CAPITAL LETTER OU 1D3D ; [.1E07.0020.001D] # MODIFIER LETTER CAPITAL OU 1D15 ; [.1E0B.0020.0002] # LATIN LETTER SMALL CAPITAL OU 0070 ; [.1E0C.0020.0002] # LATIN SMALL LETTER P FF50 ; [.1E0C.0020.0003] # FULLWIDTH LATIN SMALL LETTER P 1DEE ; [.1E0C.0020.0004] # COMBINING LATIN SMALL LETTER P 24AB ; [*0317.0020.0004][.1E0C.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER P 1D429 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD SMALL P 1D45D ; [.1E0C.0020.0005] # MATHEMATICAL ITALIC SMALL P 1D491 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL P 1D4C5 ; [.1E0C.0020.0005] # MATHEMATICAL SCRIPT SMALL P 1D4F9 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL P 1D52D ; [.1E0C.0020.0005] # MATHEMATICAL FRAKTUR SMALL P 1D561 ; [.1E0C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL P 1D595 ; [.1E0C.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL P 1D5C9 ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF SMALL P 1D5FD ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL P 1D631 ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL P 1D665 ; [.1E0C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P 1D699 ; [.1E0C.0020.0005] # MATHEMATICAL MONOSPACE SMALL P 24DF ; [.1E0C.0020.0006] # CIRCLED LATIN SMALL LETTER P 0050 ; [.1E0C.0020.0008] # LATIN CAPITAL LETTER P FF30 ; [.1E0C.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER P 1F11F ; [*0317.0020.0004][.1E0C.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER P 2119 ; [.1E0C.0020.000B] # DOUBLE-STRUCK CAPITAL P 1D40F ; [.1E0C.0020.000B] # MATHEMATICAL BOLD CAPITAL P 1D443 ; [.1E0C.0020.000B] # MATHEMATICAL ITALIC CAPITAL P 1D477 ; [.1E0C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL P 1D4AB ; [.1E0C.0020.000B] # MATHEMATICAL SCRIPT CAPITAL P 1D4DF ; [.1E0C.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL P 1D513 ; [.1E0C.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL P 1D57B ; [.1E0C.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL P 1D5AF ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL P 1D5E3 ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL P 1D617 ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P 1D64B ; [.1E0C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P 1D67F ; [.1E0C.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL P 24C5 ; [.1E0C.0020.000C] # CIRCLED LATIN CAPITAL LETTER P 1F15F ; [.1E0C.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER P 1D56 ; [.1E0C.0020.0014] # MODIFIER LETTER SMALL P 209A ; [.1E0C.0020.0015] # LATIN SUBSCRIPT SMALL LETTER P 1D3E ; [.1E0C.0020.001D] # MODIFIER LETTER CAPITAL P 1F13F ; [.1E0C.0020.001D] # SQUARED LATIN CAPITAL LETTER P 1F17F ; [.1E0C.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER P 1F18A ; [.1E0C.0020.001D] # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P 1E55 ; [.1E0C.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER P WITH ACUTE 1E54 ; [.1E0C.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER P WITH ACUTE 1E57 ; [.1E0C.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER P WITH DOT ABOVE 1E56 ; [.1E0C.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER P WITH DOT ABOVE 3380 ; [.1E0C.0020.001C][.1C47.0020.001D] # SQUARE PA AMPS 33A9 ; [.1E0C.0020.001D][.1C47.0020.001C] # SQUARE PA 1F18C ; [.1E0C.0020.001D][.1C47.0020.001D] # NEGATIVE SQUARED PA 3376 ; [.1E0C.0020.001C][.1C7A.0020.001C] # SQUARE PC 338A ; [.1E0C.0020.001C][.1CE5.0020.001D] # SQUARE PF 33D7 ; [.1E0C.0020.001D][.1D18.0020.001D] # SQUARE PH 33D8 ; [.1E0C.0020.001C][*0277.0020.001C][.1DAA.0020.001C][*0277.0020.001C] # SQUARE PM 33D9 ; [.1E0C.0020.001D][.1E0C.0020.001D][.1DAA.0020.001D] # SQUARE PPM 1F14E ; [.1E0C.0020.001D][.1E0C.0020.001D][.1EE3.0020.001D] # SQUARED PPV 33DA ; [.1E0C.0020.001D][.1E33.0020.001D] # SQUARE PR 33B0 ; [.1E0C.0020.001C][.1E71.0020.001C] # SQUARE PS 3250 ; [.1E0C.0020.001D][.1E95.0020.001D][.1CAA.0020.001D] # PARTNERSHIP SIGN 33B4 ; [.1E0C.0020.001C][.1EE3.0020.001D] # SQUARE PV 33BA ; [.1E0C.0020.001C][.1EF5.0020.001D] # SQUARE PW 1D18 ; [.1E10.0020.0002] # LATIN LETTER SMALL CAPITAL P 1D7D ; [.1E11.0020.0002] # LATIN SMALL LETTER P WITH STROKE 2C63 ; [.1E11.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE A751 ; [.1E12.0020.0002] # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER A750 ; [.1E12.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER 1D71 ; [.1E13.0020.0002] # LATIN SMALL LETTER P WITH MIDDLE TILDE 1D88 ; [.1E14.0020.0002] # LATIN SMALL LETTER P WITH PALATAL HOOK 01A5 ; [.1E15.0020.0002] # LATIN SMALL LETTER P WITH HOOK 01A4 ; [.1E15.0020.0008] # LATIN CAPITAL LETTER P WITH HOOK A753 ; [.1E19.0020.0002] # LATIN SMALL LETTER P WITH FLOURISH A752 ; [.1E19.0020.0008] # LATIN CAPITAL LETTER P WITH FLOURISH A755 ; [.1E1A.0020.0002] # LATIN SMALL LETTER P WITH SQUIRREL TAIL A754 ; [.1E1A.0020.0008] # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL A7FC ; [.1E1B.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED P 0278 ; [.1E1C.0020.0002] # LATIN SMALL LETTER PHI 1DB2 ; [.1E1C.0020.0014] # MODIFIER LETTER SMALL PHI 2C77 ; [.1E20.0020.0002] # LATIN SMALL LETTER TAILLESS PHI 0071 ; [.1E21.0020.0002] # LATIN SMALL LETTER Q FF51 ; [.1E21.0020.0003] # FULLWIDTH LATIN SMALL LETTER Q 24AC ; [*0317.0020.0004][.1E21.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Q 1D42A ; [.1E21.0020.0005] # MATHEMATICAL BOLD SMALL Q 1D45E ; [.1E21.0020.0005] # MATHEMATICAL ITALIC SMALL Q 1D492 ; [.1E21.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Q 1D4C6 ; [.1E21.0020.0005] # MATHEMATICAL SCRIPT SMALL Q 1D4FA ; [.1E21.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Q 1D52E ; [.1E21.0020.0005] # MATHEMATICAL FRAKTUR SMALL Q 1D562 ; [.1E21.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Q 1D596 ; [.1E21.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Q 1D5CA ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Q 1D5FE ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Q 1D632 ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Q 1D666 ; [.1E21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q 1D69A ; [.1E21.0020.0005] # MATHEMATICAL MONOSPACE SMALL Q 24E0 ; [.1E21.0020.0006] # CIRCLED LATIN SMALL LETTER Q 0051 ; [.1E21.0020.0008] # LATIN CAPITAL LETTER Q FF31 ; [.1E21.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Q 1F120 ; [*0317.0020.0004][.1E21.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Q 211A ; [.1E21.0020.000B] # DOUBLE-STRUCK CAPITAL Q 1D410 ; [.1E21.0020.000B] # MATHEMATICAL BOLD CAPITAL Q 1D444 ; [.1E21.0020.000B] # MATHEMATICAL ITALIC CAPITAL Q 1D478 ; [.1E21.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Q 1D4AC ; [.1E21.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Q 1D4E0 ; [.1E21.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Q 1D514 ; [.1E21.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Q 1D57C ; [.1E21.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Q 1D5B0 ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Q 1D5E4 ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q 1D618 ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q 1D64C ; [.1E21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q 1D680 ; [.1E21.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Q 24C6 ; [.1E21.0020.000C] # CIRCLED LATIN CAPITAL LETTER Q 1F160 ; [.1E21.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Q 1F140 ; [.1E21.0020.001D] # SQUARED LATIN CAPITAL LETTER Q 1F180 ; [.1E21.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Q 0239 ; [.1E21.0020.0004][.1E0C.0020.0004] # LATIN SMALL LETTER QP DIGRAPH A757 ; [.1E25.0020.0002] # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER A756 ; [.1E25.0020.0008] # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER A759 ; [.1E26.0020.0002] # LATIN SMALL LETTER Q WITH DIAGONAL STROKE A758 ; [.1E26.0020.0008] # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE 02A0 ; [.1E27.0020.0002] # LATIN SMALL LETTER Q WITH HOOK 024B ; [.1E2B.0020.0002] # LATIN SMALL LETTER Q WITH HOOK TAIL 024A ; [.1E2B.0020.0008] # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL 0138 ; [.1E2F.0020.0002] # LATIN SMALL LETTER KRA 0072 ; [.1E33.0020.0002] # LATIN SMALL LETTER R FF52 ; [.1E33.0020.0003] # FULLWIDTH LATIN SMALL LETTER R 036C ; [.1E33.0020.0004] # COMBINING LATIN SMALL LETTER R 1DCA ; [.1E33.0020.0004] # COMBINING LATIN SMALL LETTER R BELOW 24AD ; [*0317.0020.0004][.1E33.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER R 1D42B ; [.1E33.0020.0005] # MATHEMATICAL BOLD SMALL R 1D45F ; [.1E33.0020.0005] # MATHEMATICAL ITALIC SMALL R 1D493 ; [.1E33.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL R 1D4C7 ; [.1E33.0020.0005] # MATHEMATICAL SCRIPT SMALL R 1D4FB ; [.1E33.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL R 1D52F ; [.1E33.0020.0005] # MATHEMATICAL FRAKTUR SMALL R 1D563 ; [.1E33.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL R 1D597 ; [.1E33.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL R 1D5CB ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF SMALL R 1D5FF ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL R 1D633 ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL R 1D667 ; [.1E33.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R 1D69B ; [.1E33.0020.0005] # MATHEMATICAL MONOSPACE SMALL R 24E1 ; [.1E33.0020.0006] # CIRCLED LATIN SMALL LETTER R 0052 ; [.1E33.0020.0008] # LATIN CAPITAL LETTER R FF32 ; [.1E33.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER R 1F121 ; [*0317.0020.0004][.1E33.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER R 211B ; [.1E33.0020.000B] # SCRIPT CAPITAL R 211C ; [.1E33.0020.000B] # BLACK-LETTER CAPITAL R 211D ; [.1E33.0020.000B] # DOUBLE-STRUCK CAPITAL R 1D411 ; [.1E33.0020.000B] # MATHEMATICAL BOLD CAPITAL R 1D445 ; [.1E33.0020.000B] # MATHEMATICAL ITALIC CAPITAL R 1D479 ; [.1E33.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL R 1D4E1 ; [.1E33.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL R 1D57D ; [.1E33.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL R 1D5B1 ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL R 1D5E5 ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL R 1D619 ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R 1D64D ; [.1E33.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R 1D681 ; [.1E33.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL R 24C7 ; [.1E33.0020.000C] # CIRCLED LATIN CAPITAL LETTER R 1F12C ; [.1E33.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER R 1F161 ; [.1E33.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER R 02B3 ; [.1E33.0020.0014] # MODIFIER LETTER SMALL R 1D63 ; [.1E33.0020.0015] # LATIN SUBSCRIPT SMALL LETTER R 1D3F ; [.1E33.0020.001D] # MODIFIER LETTER CAPITAL R 1F141 ; [.1E33.0020.001D] # SQUARED LATIN CAPITAL LETTER R 1F181 ; [.1E33.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER R 0155 ; [.1E33.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER R WITH ACUTE 0154 ; [.1E33.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER R WITH ACUTE 0159 ; [.1E33.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER R WITH CARON 0158 ; [.1E33.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER R WITH CARON 1E59 ; [.1E33.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER R WITH DOT ABOVE 1E58 ; [.1E33.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER R WITH DOT ABOVE 0157 ; [.1E33.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER R WITH CEDILLA 0156 ; [.1E33.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER R WITH CEDILLA A7A7 ; [.1E33.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER R WITH OBLIQUE STROKE A7A6 ; [.1E33.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE 0211 ; [.1E33.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER R WITH DOUBLE GRAVE 0210 ; [.1E33.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE 0213 ; [.1E33.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER R WITH INVERTED BREVE 0212 ; [.1E33.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER R WITH INVERTED BREVE 1E5B ; [.1E33.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER R WITH DOT BELOW 1E5A ; [.1E33.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW 1E5D ; [.1E33.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON 1E5C ; [.1E33.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON 1E5F ; [.1E33.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER R WITH LINE BELOW 1E5E ; [.1E33.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER R WITH LINE BELOW A783 ; [.1E33.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR R A782 ; [.1E33.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR R 33AD ; [.1E33.0020.001C][.1C47.0020.001C][.1C8F.0020.001C] # SQUARE RAD 33AE ; [.1E33.0020.001C][.1C47.0020.001C][.1C8F.0020.001C][*0625.0020.001C][.1E71.0020.001C] # SQUARE RAD OVER S 33AF ; [.1E33.0020.001C][.1C47.0020.001C][.1C8F.0020.001C][*0625.0020.001C][.1E71.0020.001C][.1C3F.0020.001C] # SQUARE RAD OVER S SQUARED 20A8 ; [.1E33.0020.000A][.1E71.0020.0004] # RUPEE SIGN AB45 ; [.1E37.0020.0002] # LATIN SMALL LETTER STIRRUP R 0280 ; [.1E38.0020.0002] # LATIN LETTER SMALL CAPITAL R 1DE2 ; [.1E38.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL R 01A6 ; [.1E38.0020.0008] # LATIN LETTER YR AB46 ; [.1E3C.0020.0002] # LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG A75B ; [.1E3D.0020.0002] # LATIN SMALL LETTER R ROTUNDA 1DE3 ; [.1E3D.0020.0004] # COMBINING LATIN SMALL LETTER R ROTUNDA A75A ; [.1E3D.0020.0008] # LATIN CAPITAL LETTER R ROTUNDA 1D19 ; [.1E3E.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED R 024D ; [.1E3F.0020.0002] # LATIN SMALL LETTER R WITH STROKE 024C ; [.1E3F.0020.0008] # LATIN CAPITAL LETTER R WITH STROKE 1D72 ; [.1E43.0020.0002] # LATIN SMALL LETTER R WITH MIDDLE TILDE 0279 ; [.1E44.0020.0002] # LATIN SMALL LETTER TURNED R 02B4 ; [.1E44.0020.0014] # MODIFIER LETTER SMALL TURNED R 1D1A ; [.1E48.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED R 027A ; [.1E49.0020.0002] # LATIN SMALL LETTER TURNED R WITH LONG LEG 1D89 ; [.1E4D.0020.0002] # LATIN SMALL LETTER R WITH PALATAL HOOK 027B ; [.1E4E.0020.0002] # LATIN SMALL LETTER TURNED R WITH HOOK 02B5 ; [.1E4E.0020.0014] # MODIFIER LETTER SMALL TURNED R WITH HOOK 2C79 ; [.1E52.0020.0002] # LATIN SMALL LETTER TURNED R WITH TAIL 027C ; [.1E53.0020.0002] # LATIN SMALL LETTER R WITH LONG LEG 027D ; [.1E57.0020.0002] # LATIN SMALL LETTER R WITH TAIL 2C64 ; [.1E57.0020.0008] # LATIN CAPITAL LETTER R WITH TAIL AB49 ; [.1E5B.0020.0002] # LATIN SMALL LETTER R WITH CROSSED-TAIL 027E ; [.1E5C.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK 1D73 ; [.1E60.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE 027F ; [.1E61.0020.0002] # LATIN SMALL LETTER REVERSED R WITH FISHHOOK AB47 ; [.1E65.0020.0002] # LATIN SMALL LETTER R WITHOUT HANDLE AB48 ; [.1E66.0020.0002] # LATIN SMALL LETTER DOUBLE R AB4A ; [.1E67.0020.0002] # LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL AB4B ; [.1E68.0020.0002] # LATIN SMALL LETTER SCRIPT R AB4C ; [.1E69.0020.0002] # LATIN SMALL LETTER SCRIPT R WITH RING 0281 ; [.1E6A.0020.0002] # LATIN LETTER SMALL CAPITAL INVERTED R 02B6 ; [.1E6A.0020.0014] # MODIFIER LETTER SMALL CAPITAL INVERTED R A775 ; [.1E6E.0020.0002] # LATIN SMALL LETTER RUM A776 ; [.1E6F.0020.0002] # LATIN LETTER SMALL CAPITAL RUM A75D ; [.1E70.0020.0002] # LATIN SMALL LETTER RUM ROTUNDA A75C ; [.1E70.0020.0008] # LATIN CAPITAL LETTER RUM ROTUNDA 0073 ; [.1E71.0020.0002] # LATIN SMALL LETTER S FF53 ; [.1E71.0020.0003] # FULLWIDTH LATIN SMALL LETTER S 1DE4 ; [.1E71.0020.0004] # COMBINING LATIN SMALL LETTER S 24AE ; [*0317.0020.0004][.1E71.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER S 1D42C ; [.1E71.0020.0005] # MATHEMATICAL BOLD SMALL S 1D460 ; [.1E71.0020.0005] # MATHEMATICAL ITALIC SMALL S 1D494 ; [.1E71.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL S 1D4C8 ; [.1E71.0020.0005] # MATHEMATICAL SCRIPT SMALL S 1D4FC ; [.1E71.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL S 1D530 ; [.1E71.0020.0005] # MATHEMATICAL FRAKTUR SMALL S 1D564 ; [.1E71.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL S 1D598 ; [.1E71.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL S 1D5CC ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF SMALL S 1D600 ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL S 1D634 ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL S 1D668 ; [.1E71.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S 1D69C ; [.1E71.0020.0005] # MATHEMATICAL MONOSPACE SMALL S 24E2 ; [.1E71.0020.0006] # CIRCLED LATIN SMALL LETTER S 0053 ; [.1E71.0020.0008] # LATIN CAPITAL LETTER S FF33 ; [.1E71.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER S 1F122 ; [*0317.0020.0004][.1E71.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER S 1F12A ; [*0379.0020.0004][.1E71.0020.000A][*037A.0020.0004] # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S 1D412 ; [.1E71.0020.000B] # MATHEMATICAL BOLD CAPITAL S 1D446 ; [.1E71.0020.000B] # MATHEMATICAL ITALIC CAPITAL S 1D47A ; [.1E71.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL S 1D4AE ; [.1E71.0020.000B] # MATHEMATICAL SCRIPT CAPITAL S 1D4E2 ; [.1E71.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL S 1D516 ; [.1E71.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL S 1D54A ; [.1E71.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL S 1D57E ; [.1E71.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL S 1D5B2 ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL S 1D5E6 ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL S 1D61A ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S 1D64E ; [.1E71.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S 1D682 ; [.1E71.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL S 24C8 ; [.1E71.0020.000C] # CIRCLED LATIN CAPITAL LETTER S 1F162 ; [.1E71.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER S 02E2 ; [.1E71.0020.0014] # MODIFIER LETTER SMALL S 209B ; [.1E71.0020.0015] # LATIN SUBSCRIPT SMALL LETTER S 1F142 ; [.1E71.0020.001D] # SQUARED LATIN CAPITAL LETTER S 1F182 ; [.1E71.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER S 015B ; [.1E71.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER S WITH ACUTE 015A ; [.1E71.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER S WITH ACUTE 1E65 ; [.1E71.0020.0002][.0000.0024.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE 1E64 ; [.1E71.0020.0008][.0000.0024.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE 015D ; [.1E71.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX 015C ; [.1E71.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX 0161 ; [.1E71.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E71.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER S WITH CARON 1E67 ; [.1E71.0020.0002][.0000.0028.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE 1E66 ; [.1E71.0020.0008][.0000.0028.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE 1E61 ; [.1E71.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT ABOVE 1E60 ; [.1E71.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT ABOVE 015F ; [.1E71.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER S WITH CEDILLA 015E ; [.1E71.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER S WITH CEDILLA A7A9 ; [.1E71.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER S WITH OBLIQUE STROKE A7A8 ; [.1E71.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE 1E63 ; [.1E71.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER S WITH DOT BELOW 1E62 ; [.1E71.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW 1E69 ; [.1E71.0020.0002][.0000.0042.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE 1E68 ; [.1E71.0020.0008][.0000.0042.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE 0219 ; [.1E71.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER S WITH COMMA BELOW 0218 ; [.1E71.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER S WITH COMMA BELOW 017F ; [.1E71.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER LONG S 1DE5 ; [.1E71.0020.0004][.0000.0111.0004] # COMBINING LATIN SMALL LETTER LONG S A785 ; [.1E71.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR S A784 ; [.1E71.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR S 1E9B ; [.1E71.0020.0004][.0000.0111.0004][.0000.002E.0002] # LATIN SMALL LETTER LONG S WITH DOT ABOVE 1F18D ; [.1E71.0020.001D][.1C47.0020.001D] # NEGATIVE SQUARED SA 1F14C ; [.1E71.0020.001D][.1C8F.0020.001D] # SQUARED SD 1F1AA ; [.1E71.0020.001D][.1D18.0020.001D][.1EE3.0020.001D] # SQUARED SHV 2120 ; [.1E71.0020.0014][.1DAA.0020.0014] # SERVICE MARK 1F198 ; [.1E71.0020.001D][.1DDD.0020.001D][.1E71.0020.001D] # SQUARED SOS 33DB ; [.1E71.0020.001C][.1E33.0020.001C] # SQUARE SR 1F14D ; [.1E71.0020.001D][.1E71.0020.001D] # SQUARED SS 00DF ; [.1E71.0020.0004][.0000.0110.0004][.1E71.0020.0004] # LATIN SMALL LETTER SHARP S 1E9E ; [.1E71.0020.000A][.0000.0110.0004][.1E71.0020.000A] # LATIN CAPITAL LETTER SHARP S FB06 ; [.1E71.0020.0004][.1E95.0020.0004] # LATIN SMALL LIGATURE ST FB05 ; [.1E71.0020.0004][.0000.0111.0004][.1E95.0020.0004] # LATIN SMALL LIGATURE LONG S T 33DC ; [.1E71.0020.001D][.1EE3.0020.001C] # SQUARE SV A731 ; [.1E75.0020.0002] # LATIN LETTER SMALL CAPITAL S 1D74 ; [.1E76.0020.0002] # LATIN SMALL LETTER S WITH MIDDLE TILDE 1D8A ; [.1E77.0020.0002] # LATIN SMALL LETTER S WITH PALATAL HOOK 0282 ; [.1E78.0020.0002] # LATIN SMALL LETTER S WITH HOOK 1DB3 ; [.1E78.0020.0014] # MODIFIER LETTER SMALL S WITH HOOK 023F ; [.1E7C.0020.0002] # LATIN SMALL LETTER S WITH SWASH TAIL 2C7E ; [.1E7C.0020.0008] # LATIN CAPITAL LETTER S WITH SWASH TAIL 1E9C ; [.1E80.0020.0002] # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE 1E9D ; [.1E81.0020.0002] # LATIN SMALL LETTER LONG S WITH HIGH STROKE 0283 ; [.1E82.0020.0002] # LATIN SMALL LETTER ESH 1DEF ; [.1E82.0020.0004] # COMBINING LATIN SMALL LETTER ESH 01A9 ; [.1E82.0020.0008] # LATIN CAPITAL LETTER ESH 1DB4 ; [.1E82.0020.0014] # MODIFIER LETTER SMALL ESH AB4D ; [.1E86.0020.0002] # LATIN SMALL LETTER BASELINE ESH 1D8B ; [.1E87.0020.0002] # LATIN SMALL LETTER ESH WITH PALATAL HOOK 01AA ; [.1E88.0020.0002] # LATIN LETTER REVERSED ESH LOOP 0285 ; [.1E8C.0020.0002] # LATIN SMALL LETTER SQUAT REVERSED ESH 1D98 ; [.1E90.0020.0002] # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK 0286 ; [.1E91.0020.0002] # LATIN SMALL LETTER ESH WITH CURL 0074 ; [.1E95.0020.0002] # LATIN SMALL LETTER T FF54 ; [.1E95.0020.0003] # FULLWIDTH LATIN SMALL LETTER T 036D ; [.1E95.0020.0004] # COMBINING LATIN SMALL LETTER T 24AF ; [*0317.0020.0004][.1E95.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER T 1D42D ; [.1E95.0020.0005] # MATHEMATICAL BOLD SMALL T 1D461 ; [.1E95.0020.0005] # MATHEMATICAL ITALIC SMALL T 1D495 ; [.1E95.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL T 1D4C9 ; [.1E95.0020.0005] # MATHEMATICAL SCRIPT SMALL T 1D4FD ; [.1E95.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL T 1D531 ; [.1E95.0020.0005] # MATHEMATICAL FRAKTUR SMALL T 1D565 ; [.1E95.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL T 1D599 ; [.1E95.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL T 1D5CD ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF SMALL T 1D601 ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL T 1D635 ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL T 1D669 ; [.1E95.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T 1D69D ; [.1E95.0020.0005] # MATHEMATICAL MONOSPACE SMALL T 24E3 ; [.1E95.0020.0006] # CIRCLED LATIN SMALL LETTER T 0054 ; [.1E95.0020.0008] # LATIN CAPITAL LETTER T FF34 ; [.1E95.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER T 1F123 ; [*0317.0020.0004][.1E95.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER T 1D413 ; [.1E95.0020.000B] # MATHEMATICAL BOLD CAPITAL T 1D447 ; [.1E95.0020.000B] # MATHEMATICAL ITALIC CAPITAL T 1D47B ; [.1E95.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL T 1D4AF ; [.1E95.0020.000B] # MATHEMATICAL SCRIPT CAPITAL T 1D4E3 ; [.1E95.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL T 1D517 ; [.1E95.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL T 1D54B ; [.1E95.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL T 1D57F ; [.1E95.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL T 1D5B3 ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL T 1D5E7 ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL T 1D61B ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T 1D64F ; [.1E95.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T 1D683 ; [.1E95.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL T 24C9 ; [.1E95.0020.000C] # CIRCLED LATIN CAPITAL LETTER T 1F163 ; [.1E95.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER T 1D57 ; [.1E95.0020.0014] # MODIFIER LETTER SMALL T 209C ; [.1E95.0020.0015] # LATIN SUBSCRIPT SMALL LETTER T 1D40 ; [.1E95.0020.001D] # MODIFIER LETTER CAPITAL T 1F143 ; [.1E95.0020.001D] # SQUARED LATIN CAPITAL LETTER T 1F183 ; [.1E95.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER T 0165 ; [.1E95.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER T WITH CARON 0164 ; [.1E95.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER T WITH CARON 1E97 ; [.1E95.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER T WITH DIAERESIS 1E6B ; [.1E95.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER T WITH DOT ABOVE 1E6A ; [.1E95.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER T WITH DOT ABOVE 0163 ; [.1E95.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER T WITH CEDILLA 0162 ; [.1E95.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER T WITH CEDILLA 1E6D ; [.1E95.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER T WITH DOT BELOW 1E6C ; [.1E95.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER T WITH DOT BELOW 021B ; [.1E95.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER T WITH COMMA BELOW 021A ; [.1E95.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER T WITH COMMA BELOW 1E71 ; [.1E95.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW 1E70 ; [.1E95.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW 1E6F ; [.1E95.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER T WITH LINE BELOW 1E6E ; [.1E95.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER T WITH LINE BELOW A787 ; [.1E95.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER INSULAR T A786 ; [.1E95.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER INSULAR T 02A8 ; [.1E95.0020.0004][.1C89.0020.0004] # LATIN SMALL LETTER TC DIGRAPH WITH CURL 2121 ; [.1E95.0020.000A][.1CAA.0020.000A][.1D77.0020.000A] # TELEPHONE SIGN 1D7A ; [.1E95.0020.0004][.0000.0110.0004][.1D18.0020.0004] # LATIN SMALL LETTER TH WITH STRIKETHROUGH 3394 ; [.1E95.0020.001D][.1D18.0020.001D][.1F21.0020.001C] # SQUARE THZ 2122 ; [.1E95.0020.0014][.1DAA.0020.0014] # TRADE MARK SIGN 01BE ; [.1E95.0020.0004][.1E71.0020.0004] # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE 02A6 ; [.1E95.0020.0004][.1E71.0020.0004] # LATIN SMALL LETTER TS DIGRAPH 02A7 ; [.1E95.0020.0004][.1E82.0020.0004] # LATIN SMALL LETTER TESH DIGRAPH A729 ; [.1E95.0020.0004][.1F21.0020.0004] # LATIN SMALL LETTER TZ A728 ; [.1E95.0020.000A][.1F21.0020.0004] # LATIN CAPITAL LETTER TZ 1D1B ; [.1E99.0020.0002] # LATIN LETTER SMALL CAPITAL T 0167 ; [.1E9A.0020.0002] # LATIN SMALL LETTER T WITH STROKE 0166 ; [.1E9A.0020.0008] # LATIN CAPITAL LETTER T WITH STROKE 2C66 ; [.1E9E.0020.0002] # LATIN SMALL LETTER T WITH DIAGONAL STROKE 023E ; [.1E9E.0020.0008] # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE 1D75 ; [.1E9F.0020.0002] # LATIN SMALL LETTER T WITH MIDDLE TILDE 01AB ; [.1EA0.0020.0002] # LATIN SMALL LETTER T WITH PALATAL HOOK 1DB5 ; [.1EA0.0020.0014] # MODIFIER LETTER SMALL T WITH PALATAL HOOK 01AD ; [.1EA4.0020.0002] # LATIN SMALL LETTER T WITH HOOK 01AC ; [.1EA4.0020.0008] # LATIN CAPITAL LETTER T WITH HOOK 0288 ; [.1EA8.0020.0002] # LATIN SMALL LETTER T WITH RETROFLEX HOOK 01AE ; [.1EA8.0020.0008] # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK 0236 ; [.1EAC.0020.0002] # LATIN SMALL LETTER T WITH CURL A777 ; [.1EB0.0020.0002] # LATIN SMALL LETTER TUM 0287 ; [.1EB1.0020.0002] # LATIN SMALL LETTER TURNED T A7B1 ; [.1EB1.0020.0008] # LATIN CAPITAL LETTER TURNED T 0075 ; [.1EB5.0020.0002] # LATIN SMALL LETTER U FF55 ; [.1EB5.0020.0003] # FULLWIDTH LATIN SMALL LETTER U 0367 ; [.1EB5.0020.0004] # COMBINING LATIN SMALL LETTER U 24B0 ; [*0317.0020.0004][.1EB5.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER U 1D42E ; [.1EB5.0020.0005] # MATHEMATICAL BOLD SMALL U 1D462 ; [.1EB5.0020.0005] # MATHEMATICAL ITALIC SMALL U 1D496 ; [.1EB5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL U 1D4CA ; [.1EB5.0020.0005] # MATHEMATICAL SCRIPT SMALL U 1D4FE ; [.1EB5.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL U 1D532 ; [.1EB5.0020.0005] # MATHEMATICAL FRAKTUR SMALL U 1D566 ; [.1EB5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL U 1D59A ; [.1EB5.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL U 1D5CE ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF SMALL U 1D602 ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL U 1D636 ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL U 1D66A ; [.1EB5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U 1D69E ; [.1EB5.0020.0005] # MATHEMATICAL MONOSPACE SMALL U 24E4 ; [.1EB5.0020.0006] # CIRCLED LATIN SMALL LETTER U 0055 ; [.1EB5.0020.0008] # LATIN CAPITAL LETTER U FF35 ; [.1EB5.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER U 1F124 ; [*0317.0020.0004][.1EB5.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER U 1D414 ; [.1EB5.0020.000B] # MATHEMATICAL BOLD CAPITAL U 1D448 ; [.1EB5.0020.000B] # MATHEMATICAL ITALIC CAPITAL U 1D47C ; [.1EB5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL U 1D4B0 ; [.1EB5.0020.000B] # MATHEMATICAL SCRIPT CAPITAL U 1D4E4 ; [.1EB5.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL U 1D518 ; [.1EB5.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL U 1D54C ; [.1EB5.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL U 1D580 ; [.1EB5.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL U 1D5B4 ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL U 1D5E8 ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL U 1D61C ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U 1D650 ; [.1EB5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U 1D684 ; [.1EB5.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL U 24CA ; [.1EB5.0020.000C] # CIRCLED LATIN CAPITAL LETTER U 1F164 ; [.1EB5.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER U 1D58 ; [.1EB5.0020.0014] # MODIFIER LETTER SMALL U 1D64 ; [.1EB5.0020.0015] # LATIN SUBSCRIPT SMALL LETTER U 1D41 ; [.1EB5.0020.001D] # MODIFIER LETTER CAPITAL U 1F144 ; [.1EB5.0020.001D] # SQUARED LATIN CAPITAL LETTER U 1F184 ; [.1EB5.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER U 00FA ; [.1EB5.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH ACUTE 00F9 ; [.1EB5.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1EB5.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH GRAVE 016D ; [.1EB5.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER U WITH BREVE 016C ; [.1EB5.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER U WITH BREVE 00FB ; [.1EB5.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX 00DB ; [.1EB5.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 01D4 ; [.1EB5.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1EB5.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH CARON 016F ; [.1EB5.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH RING ABOVE 016E ; [.1EB5.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH RING ABOVE 00FC ; [.1EB5.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH DIAERESIS 1DF4 ; [.1EB5.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER U WITH DIAERESIS A79F ; [.1EB5.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK UE 00DC ; [.1EB5.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS A79E ; [.1EB5.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK UE 01D8 ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01DC ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01DA ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 01D6 ; [.1EB5.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0171 ; [.1EB5.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1EB5.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0169 ; [.1EB5.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH TILDE 0168 ; [.1EB5.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH TILDE 1E79 ; [.1EB5.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH TILDE AND ACUTE 1E78 ; [.1EB5.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE 0173 ; [.1EB5.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER U WITH OGONEK 0172 ; [.1EB5.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER U WITH OGONEK 016B ; [.1EB5.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON 1E7B ; [.1EB5.0020.0002][.0000.0032.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS 1E7A ; [.1EB5.0020.0008][.0000.0032.0002][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS 1DF0 ; [.1EB5.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE 1EE7 ; [.1EB5.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HOOK ABOVE 1EE6 ; [.1EB5.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HOOK ABOVE 0215 ; [.1EB5.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER U WITH DOUBLE GRAVE 0214 ; [.1EB5.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE 0217 ; [.1EB5.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER U WITH INVERTED BREVE 0216 ; [.1EB5.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER U WITH INVERTED BREVE 01B0 ; [.1EB5.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN 01AF ; [.1EB5.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN 1EE9 ; [.1EB5.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH HORN AND ACUTE 1EE8 ; [.1EB5.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE 1EEB ; [.1EB5.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE 1EEA ; [.1EB5.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE 1EEF ; [.1EB5.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH HORN AND TILDE 1EEE ; [.1EB5.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH HORN AND TILDE 1EED ; [.1EB5.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE 1EEC ; [.1EB5.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE 1EF1 ; [.1EB5.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW 1EF0 ; [.1EB5.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW 1EE5 ; [.1EB5.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH DOT BELOW 1EE4 ; [.1EB5.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH DOT BELOW 1E73 ; [.1EB5.0020.0002][.0000.0043.0002] # LATIN SMALL LETTER U WITH DIAERESIS BELOW 1E72 ; [.1EB5.0020.0008][.0000.0043.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW 1E77 ; [.1EB5.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW 1E76 ; [.1EB5.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW 1E75 ; [.1EB5.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER U WITH TILDE BELOW 1E74 ; [.1EB5.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER U WITH TILDE BELOW 1F1AB ; [.1EB5.0020.001D][.1D18.0020.001D][.1C8F.0020.001D] # SQUARED UHD 1F199 ; [.1EB5.0020.001D][.1E0C.0020.001D][*0260.0020.001C] # SQUARED UP WITH EXCLAMATION MARK 1D1C ; [.1EB9.0020.0002] # LATIN LETTER SMALL CAPITAL U 1DB8 ; [.1EB9.0020.0014] # MODIFIER LETTER SMALL CAPITAL U AB4E ; [.1EBA.0020.0002] # LATIN SMALL LETTER U WITH SHORT RIGHT LEG 1D1D ; [.1EBB.0020.0002] # LATIN SMALL LETTER SIDEWAYS U 1D59 ; [.1EBB.0020.0014] # MODIFIER LETTER SMALL SIDEWAYS U 1D1E ; [.1EBC.0020.0002] # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U 1D6B ; [.1EBD.0020.0002] # LATIN SMALL LETTER UE AB50 ; [.1EBE.0020.0002] # LATIN SMALL LETTER UI AB51 ; [.1EBF.0020.0002] # LATIN SMALL LETTER TURNED UI 0289 ; [.1EC0.0020.0002] # LATIN SMALL LETTER U BAR 0244 ; [.1EC0.0020.0008] # LATIN CAPITAL LETTER U BAR 1DB6 ; [.1EC0.0020.0014] # MODIFIER LETTER SMALL U BAR AB4F ; [.1EC4.0020.0002] # LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG 1D7E ; [.1EC5.0020.0002] # LATIN SMALL CAPITAL LETTER U WITH STROKE 1D99 ; [.1EC6.0020.0002] # LATIN SMALL LETTER U WITH RETROFLEX HOOK AB52 ; [.1EC7.0020.0002] # LATIN SMALL LETTER U WITH LEFT HOOK AB5F ; [.1EC7.0020.0014] # MODIFIER LETTER SMALL U WITH LEFT HOOK 0265 ; [.1EC8.0020.0002] # LATIN SMALL LETTER TURNED H A78D ; [.1EC8.0020.0008] # LATIN CAPITAL LETTER TURNED H 1DA3 ; [.1EC8.0020.0014] # MODIFIER LETTER SMALL TURNED H 02AE ; [.1ECC.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK 02AF ; [.1ED0.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 026F ; [.1ED4.0020.0002] # LATIN SMALL LETTER TURNED M 019C ; [.1ED4.0020.0008] # LATIN CAPITAL LETTER TURNED M 1D5A ; [.1ED4.0020.0014] # MODIFIER LETTER SMALL TURNED M A7FA ; [.1ED8.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED M 1D1F ; [.1ED9.0020.0002] # LATIN SMALL LETTER SIDEWAYS TURNED M 0270 ; [.1EDA.0020.0002] # LATIN SMALL LETTER TURNED M WITH LONG LEG 1DAD ; [.1EDA.0020.0014] # MODIFIER LETTER SMALL TURNED M WITH LONG LEG 028A ; [.1EDE.0020.0002] # LATIN SMALL LETTER UPSILON 01B1 ; [.1EDE.0020.0008] # LATIN CAPITAL LETTER UPSILON 1DB7 ; [.1EDE.0020.0014] # MODIFIER LETTER SMALL UPSILON 1D7F ; [.1EE2.0020.0002] # LATIN SMALL LETTER UPSILON WITH STROKE 0076 ; [.1EE3.0020.0002] # LATIN SMALL LETTER V FF56 ; [.1EE3.0020.0003] # FULLWIDTH LATIN SMALL LETTER V 036E ; [.1EE3.0020.0004] # COMBINING LATIN SMALL LETTER V 2174 ; [.1EE3.0020.0004] # SMALL ROMAN NUMERAL FIVE 24B1 ; [*0317.0020.0004][.1EE3.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER V 1D42F ; [.1EE3.0020.0005] # MATHEMATICAL BOLD SMALL V 1D463 ; [.1EE3.0020.0005] # MATHEMATICAL ITALIC SMALL V 1D497 ; [.1EE3.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL V 1D4CB ; [.1EE3.0020.0005] # MATHEMATICAL SCRIPT SMALL V 1D4FF ; [.1EE3.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL V 1D533 ; [.1EE3.0020.0005] # MATHEMATICAL FRAKTUR SMALL V 1D567 ; [.1EE3.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL V 1D59B ; [.1EE3.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL V 1D5CF ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF SMALL V 1D603 ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL V 1D637 ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL V 1D66B ; [.1EE3.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V 1D69F ; [.1EE3.0020.0005] # MATHEMATICAL MONOSPACE SMALL V 24E5 ; [.1EE3.0020.0006] # CIRCLED LATIN SMALL LETTER V 0056 ; [.1EE3.0020.0008] # LATIN CAPITAL LETTER V FF36 ; [.1EE3.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER V 2164 ; [.1EE3.0020.000A] # ROMAN NUMERAL FIVE 1F125 ; [*0317.0020.0004][.1EE3.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER V 1D415 ; [.1EE3.0020.000B] # MATHEMATICAL BOLD CAPITAL V 1D449 ; [.1EE3.0020.000B] # MATHEMATICAL ITALIC CAPITAL V 1D47D ; [.1EE3.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL V 1D4B1 ; [.1EE3.0020.000B] # MATHEMATICAL SCRIPT CAPITAL V 1D4E5 ; [.1EE3.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL V 1D519 ; [.1EE3.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL V 1D54D ; [.1EE3.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL V 1D581 ; [.1EE3.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL V 1D5B5 ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL V 1D5E9 ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL V 1D61D ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V 1D651 ; [.1EE3.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V 1D685 ; [.1EE3.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL V 24CB ; [.1EE3.0020.000C] # CIRCLED LATIN CAPITAL LETTER V 1F165 ; [.1EE3.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER V 1D5B ; [.1EE3.0020.0014] # MODIFIER LETTER SMALL V 1D65 ; [.1EE3.0020.0015] # LATIN SUBSCRIPT SMALL LETTER V 2C7D ; [.1EE3.0020.001D] # MODIFIER LETTER CAPITAL V 1F145 ; [.1EE3.0020.001D] # SQUARED LATIN CAPITAL LETTER V 1F185 ; [.1EE3.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER V 1E7D ; [.1EE3.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER V WITH TILDE 1E7C ; [.1EE3.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER V WITH TILDE 1E7F ; [.1EE3.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER V WITH DOT BELOW 1E7E ; [.1EE3.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER V WITH DOT BELOW 2175 ; [.1EE3.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL SIX 2165 ; [.1EE3.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL SIX 2176 ; [.1EE3.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL SEVEN 2166 ; [.1EE3.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL SEVEN 2177 ; [.1EE3.0020.0004][.1D32.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL EIGHT 2167 ; [.1EE3.0020.000A][.1D32.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL EIGHT 33DE ; [.1EE3.0020.001D][*0625.0020.001C][.1DAA.0020.001C] # SQUARE V OVER M 1F1AC ; [.1EE3.0020.001D][.1DDD.0020.001D][.1C8F.0020.001D] # SQUARED VOD 1F19A ; [.1EE3.0020.001D][.1E71.0020.001D] # SQUARED VS A761 ; [.1EE3.0020.0004][.1F0B.0020.0004] # LATIN SMALL LETTER VY A760 ; [.1EE3.0020.000A][.1F0B.0020.000A] # LATIN CAPITAL LETTER VY 1D20 ; [.1EE7.0020.0002] # LATIN LETTER SMALL CAPITAL V A75F ; [.1EE8.0020.0002] # LATIN SMALL LETTER V WITH DIAGONAL STROKE A75E ; [.1EE8.0020.0008] # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE 1D8C ; [.1EE9.0020.0002] # LATIN SMALL LETTER V WITH PALATAL HOOK 028B ; [.1EEA.0020.0002] # LATIN SMALL LETTER V WITH HOOK 01B2 ; [.1EEA.0020.0008] # LATIN CAPITAL LETTER V WITH HOOK 1DB9 ; [.1EEA.0020.0014] # MODIFIER LETTER SMALL V WITH HOOK 2C71 ; [.1EEE.0020.0002] # LATIN SMALL LETTER V WITH RIGHT HOOK 2C74 ; [.1EEF.0020.0002] # LATIN SMALL LETTER V WITH CURL 1EFD ; [.1EF0.0020.0002] # LATIN SMALL LETTER MIDDLE-WELSH V 1EFC ; [.1EF0.0020.0008] # LATIN CAPITAL LETTER MIDDLE-WELSH V 028C ; [.1EF1.0020.0002] # LATIN SMALL LETTER TURNED V 0245 ; [.1EF1.0020.0008] # LATIN CAPITAL LETTER TURNED V 1DBA ; [.1EF1.0020.0014] # MODIFIER LETTER SMALL TURNED V 0077 ; [.1EF5.0020.0002] # LATIN SMALL LETTER W FF57 ; [.1EF5.0020.0003] # FULLWIDTH LATIN SMALL LETTER W 1DF1 ; [.1EF5.0020.0004] # COMBINING LATIN SMALL LETTER W 24B2 ; [*0317.0020.0004][.1EF5.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER W 1D430 ; [.1EF5.0020.0005] # MATHEMATICAL BOLD SMALL W 1D464 ; [.1EF5.0020.0005] # MATHEMATICAL ITALIC SMALL W 1D498 ; [.1EF5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL W 1D4CC ; [.1EF5.0020.0005] # MATHEMATICAL SCRIPT SMALL W 1D500 ; [.1EF5.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL W 1D534 ; [.1EF5.0020.0005] # MATHEMATICAL FRAKTUR SMALL W 1D568 ; [.1EF5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL W 1D59C ; [.1EF5.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL W 1D5D0 ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF SMALL W 1D604 ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL W 1D638 ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL W 1D66C ; [.1EF5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W 1D6A0 ; [.1EF5.0020.0005] # MATHEMATICAL MONOSPACE SMALL W 24E6 ; [.1EF5.0020.0006] # CIRCLED LATIN SMALL LETTER W 0057 ; [.1EF5.0020.0008] # LATIN CAPITAL LETTER W FF37 ; [.1EF5.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER W 1F126 ; [*0317.0020.0004][.1EF5.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER W 1D416 ; [.1EF5.0020.000B] # MATHEMATICAL BOLD CAPITAL W 1D44A ; [.1EF5.0020.000B] # MATHEMATICAL ITALIC CAPITAL W 1D47E ; [.1EF5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL W 1D4B2 ; [.1EF5.0020.000B] # MATHEMATICAL SCRIPT CAPITAL W 1D4E6 ; [.1EF5.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL W 1D51A ; [.1EF5.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL W 1D54E ; [.1EF5.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL W 1D582 ; [.1EF5.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL W 1D5B6 ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL W 1D5EA ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL W 1D61E ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W 1D652 ; [.1EF5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W 1D686 ; [.1EF5.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL W 24CC ; [.1EF5.0020.000C] # CIRCLED LATIN CAPITAL LETTER W 1F166 ; [.1EF5.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER W 02B7 ; [.1EF5.0020.0014] # MODIFIER LETTER SMALL W 1D42 ; [.1EF5.0020.001D] # MODIFIER LETTER CAPITAL W 1F146 ; [.1EF5.0020.001D] # SQUARED LATIN CAPITAL LETTER W 1F186 ; [.1EF5.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER W 1E83 ; [.1EF5.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER W WITH ACUTE 1E82 ; [.1EF5.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER W WITH ACUTE 1E81 ; [.1EF5.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER W WITH GRAVE 1E80 ; [.1EF5.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER W WITH GRAVE 0175 ; [.1EF5.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER W WITH CIRCUMFLEX 0174 ; [.1EF5.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER W WITH CIRCUMFLEX 1E98 ; [.1EF5.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER W WITH RING ABOVE 1E85 ; [.1EF5.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER W WITH DIAERESIS 1E84 ; [.1EF5.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER W WITH DIAERESIS 1E87 ; [.1EF5.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER W WITH DOT ABOVE 1E86 ; [.1EF5.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER W WITH DOT ABOVE 1E89 ; [.1EF5.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER W WITH DOT BELOW 1E88 ; [.1EF5.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER W WITH DOT BELOW 33DD ; [.1EF5.0020.001D][.1C60.0020.001C] # SQUARE WB 1F14F ; [.1EF5.0020.001D][.1C7A.0020.001D] # SQUARED WC 1F18F ; [.1EF5.0020.001D][.1C7A.0020.001D] # NEGATIVE SQUARED WC 1F12E ; [.1EF5.0020.000C][.1F21.0020.000C] # CIRCLED WZ 1D21 ; [.1EF9.0020.0002] # LATIN LETTER SMALL CAPITAL W 2C73 ; [.1EFA.0020.0002] # LATIN SMALL LETTER W WITH HOOK 2C72 ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER W WITH HOOK 028D ; [.1EFB.0020.0002] # LATIN SMALL LETTER TURNED W 0078 ; [.1EFF.0020.0002] # LATIN SMALL LETTER X FF58 ; [.1EFF.0020.0003] # FULLWIDTH LATIN SMALL LETTER X 036F ; [.1EFF.0020.0004] # COMBINING LATIN SMALL LETTER X 2179 ; [.1EFF.0020.0004] # SMALL ROMAN NUMERAL TEN 24B3 ; [*0317.0020.0004][.1EFF.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER X 1D431 ; [.1EFF.0020.0005] # MATHEMATICAL BOLD SMALL X 1D465 ; [.1EFF.0020.0005] # MATHEMATICAL ITALIC SMALL X 1D499 ; [.1EFF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL X 1D4CD ; [.1EFF.0020.0005] # MATHEMATICAL SCRIPT SMALL X 1D501 ; [.1EFF.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL X 1D535 ; [.1EFF.0020.0005] # MATHEMATICAL FRAKTUR SMALL X 1D569 ; [.1EFF.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL X 1D59D ; [.1EFF.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL X 1D5D1 ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF SMALL X 1D605 ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL X 1D639 ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL X 1D66D ; [.1EFF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X 1D6A1 ; [.1EFF.0020.0005] # MATHEMATICAL MONOSPACE SMALL X 24E7 ; [.1EFF.0020.0006] # CIRCLED LATIN SMALL LETTER X 0058 ; [.1EFF.0020.0008] # LATIN CAPITAL LETTER X FF38 ; [.1EFF.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER X 2169 ; [.1EFF.0020.000A] # ROMAN NUMERAL TEN 1F127 ; [*0317.0020.0004][.1EFF.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER X 1D417 ; [.1EFF.0020.000B] # MATHEMATICAL BOLD CAPITAL X 1D44B ; [.1EFF.0020.000B] # MATHEMATICAL ITALIC CAPITAL X 1D47F ; [.1EFF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL X 1D4B3 ; [.1EFF.0020.000B] # MATHEMATICAL SCRIPT CAPITAL X 1D4E7 ; [.1EFF.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL X 1D51B ; [.1EFF.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL X 1D54F ; [.1EFF.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL X 1D583 ; [.1EFF.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL X 1D5B7 ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL X 1D5EB ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL X 1D61F ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X 1D653 ; [.1EFF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X 1D687 ; [.1EFF.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL X 24CD ; [.1EFF.0020.000C] # CIRCLED LATIN CAPITAL LETTER X 1F167 ; [.1EFF.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER X 02E3 ; [.1EFF.0020.0014] # MODIFIER LETTER SMALL X 2093 ; [.1EFF.0020.0015] # LATIN SUBSCRIPT SMALL LETTER X 1F147 ; [.1EFF.0020.001D] # SQUARED LATIN CAPITAL LETTER X 1F187 ; [.1EFF.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER X 1E8D ; [.1EFF.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER X WITH DIAERESIS 1E8C ; [.1EFF.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER X WITH DIAERESIS 1E8B ; [.1EFF.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER X WITH DOT ABOVE 1E8A ; [.1EFF.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER X WITH DOT ABOVE 217A ; [.1EFF.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL ELEVEN 216A ; [.1EFF.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL ELEVEN 217B ; [.1EFF.0020.0004][.1D32.0020.0004][.1D32.0020.0004] # SMALL ROMAN NUMERAL TWELVE 216B ; [.1EFF.0020.000A][.1D32.0020.000A][.1D32.0020.000A] # ROMAN NUMERAL TWELVE 1D8D ; [.1F03.0020.0002] # LATIN SMALL LETTER X WITH PALATAL HOOK AB56 ; [.1F04.0020.0002] # LATIN SMALL LETTER X WITH LOW RIGHT RING AB57 ; [.1F05.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG AB58 ; [.1F06.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING AB59 ; [.1F07.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF AB53 ; [.1F08.0020.0002] # LATIN SMALL LETTER CHI A7B3 ; [.1F08.0020.0008] # LATIN CAPITAL LETTER CHI AB54 ; [.1F09.0020.0002] # LATIN SMALL LETTER CHI WITH LOW RIGHT RING AB55 ; [.1F0A.0020.0002] # LATIN SMALL LETTER CHI WITH LOW LEFT SERIF 0079 ; [.1F0B.0020.0002] # LATIN SMALL LETTER Y FF59 ; [.1F0B.0020.0003] # FULLWIDTH LATIN SMALL LETTER Y 24B4 ; [*0317.0020.0004][.1F0B.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Y 1D432 ; [.1F0B.0020.0005] # MATHEMATICAL BOLD SMALL Y 1D466 ; [.1F0B.0020.0005] # MATHEMATICAL ITALIC SMALL Y 1D49A ; [.1F0B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Y 1D4CE ; [.1F0B.0020.0005] # MATHEMATICAL SCRIPT SMALL Y 1D502 ; [.1F0B.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Y 1D536 ; [.1F0B.0020.0005] # MATHEMATICAL FRAKTUR SMALL Y 1D56A ; [.1F0B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Y 1D59E ; [.1F0B.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Y 1D5D2 ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Y 1D606 ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Y 1D63A ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Y 1D66E ; [.1F0B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y 1D6A2 ; [.1F0B.0020.0005] # MATHEMATICAL MONOSPACE SMALL Y 24E8 ; [.1F0B.0020.0006] # CIRCLED LATIN SMALL LETTER Y 0059 ; [.1F0B.0020.0008] # LATIN CAPITAL LETTER Y FF39 ; [.1F0B.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Y 1F128 ; [*0317.0020.0004][.1F0B.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Y 1D418 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD CAPITAL Y 1D44C ; [.1F0B.0020.000B] # MATHEMATICAL ITALIC CAPITAL Y 1D480 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Y 1D4B4 ; [.1F0B.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Y 1D4E8 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Y 1D51C ; [.1F0B.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Y 1D550 ; [.1F0B.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y 1D584 ; [.1F0B.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Y 1D5B8 ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Y 1D5EC ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y 1D620 ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y 1D654 ; [.1F0B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y 1D688 ; [.1F0B.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Y 24CE ; [.1F0B.0020.000C] # CIRCLED LATIN CAPITAL LETTER Y 1F168 ; [.1F0B.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Y 02B8 ; [.1F0B.0020.0014] # MODIFIER LETTER SMALL Y 1F148 ; [.1F0B.0020.001D] # SQUARED LATIN CAPITAL LETTER Y 1F188 ; [.1F0B.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Y 00FD ; [.1F0B.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Y WITH ACUTE 00DD ; [.1F0B.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Y WITH ACUTE 1EF3 ; [.1F0B.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER Y WITH GRAVE 1EF2 ; [.1F0B.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER Y WITH GRAVE 0177 ; [.1F0B.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX 0176 ; [.1F0B.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 1E99 ; [.1F0B.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH RING ABOVE 00FF ; [.1F0B.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER Y WITH DIAERESIS 0178 ; [.1F0B.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER Y WITH DIAERESIS 1EF9 ; [.1F0B.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER Y WITH TILDE 1EF8 ; [.1F0B.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER Y WITH TILDE 1E8F ; [.1F0B.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Y WITH DOT ABOVE 1E8E ; [.1F0B.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Y WITH DOT ABOVE 0233 ; [.1F0B.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER Y WITH MACRON 0232 ; [.1F0B.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER Y WITH MACRON 1EF7 ; [.1F0B.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER Y WITH HOOK ABOVE 1EF6 ; [.1F0B.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE 1EF5 ; [.1F0B.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Y WITH DOT BELOW 1EF4 ; [.1F0B.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Y WITH DOT BELOW 028F ; [.1F0F.0020.0002] # LATIN LETTER SMALL CAPITAL Y 024F ; [.1F13.0020.0002] # LATIN SMALL LETTER Y WITH STROKE 024E ; [.1F13.0020.0008] # LATIN CAPITAL LETTER Y WITH STROKE 01B4 ; [.1F17.0020.0002] # LATIN SMALL LETTER Y WITH HOOK 01B3 ; [.1F17.0020.0008] # LATIN CAPITAL LETTER Y WITH HOOK 1EFF ; [.1F1B.0020.0002] # LATIN SMALL LETTER Y WITH LOOP 1EFE ; [.1F1B.0020.0008] # LATIN CAPITAL LETTER Y WITH LOOP AB5A ; [.1F1C.0020.0002] # LATIN SMALL LETTER Y WITH SHORT RIGHT LEG 021D ; [.1F1D.0020.0002] # LATIN SMALL LETTER YOGH 021C ; [.1F1D.0020.0008] # LATIN CAPITAL LETTER YOGH 007A ; [.1F21.0020.0002] # LATIN SMALL LETTER Z FF5A ; [.1F21.0020.0003] # FULLWIDTH LATIN SMALL LETTER Z 1DE6 ; [.1F21.0020.0004] # COMBINING LATIN SMALL LETTER Z 24B5 ; [*0317.0020.0004][.1F21.0020.0004][*0318.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Z 1D433 ; [.1F21.0020.0005] # MATHEMATICAL BOLD SMALL Z 1D467 ; [.1F21.0020.0005] # MATHEMATICAL ITALIC SMALL Z 1D49B ; [.1F21.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Z 1D4CF ; [.1F21.0020.0005] # MATHEMATICAL SCRIPT SMALL Z 1D503 ; [.1F21.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Z 1D537 ; [.1F21.0020.0005] # MATHEMATICAL FRAKTUR SMALL Z 1D56B ; [.1F21.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Z 1D59F ; [.1F21.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Z 1D5D3 ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Z 1D607 ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Z 1D63B ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Z 1D66F ; [.1F21.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z 1D6A3 ; [.1F21.0020.0005] # MATHEMATICAL MONOSPACE SMALL Z 24E9 ; [.1F21.0020.0006] # CIRCLED LATIN SMALL LETTER Z 005A ; [.1F21.0020.0008] # LATIN CAPITAL LETTER Z FF3A ; [.1F21.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Z 1F129 ; [*0317.0020.0004][.1F21.0020.000A][*0318.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Z 2124 ; [.1F21.0020.000B] # DOUBLE-STRUCK CAPITAL Z 2128 ; [.1F21.0020.000B] # BLACK-LETTER CAPITAL Z 1D419 ; [.1F21.0020.000B] # MATHEMATICAL BOLD CAPITAL Z 1D44D ; [.1F21.0020.000B] # MATHEMATICAL ITALIC CAPITAL Z 1D481 ; [.1F21.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Z 1D4B5 ; [.1F21.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Z 1D4E9 ; [.1F21.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Z 1D585 ; [.1F21.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Z 1D5B9 ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Z 1D5ED ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z 1D621 ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z 1D655 ; [.1F21.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z 1D689 ; [.1F21.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Z 24CF ; [.1F21.0020.000C] # CIRCLED LATIN CAPITAL LETTER Z 1F169 ; [.1F21.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1DBB ; [.1F21.0020.0014] # MODIFIER LETTER SMALL Z 1F149 ; [.1F21.0020.001D] # SQUARED LATIN CAPITAL LETTER Z 1F189 ; [.1F21.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Z 017A ; [.1F21.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Z WITH ACUTE 0179 ; [.1F21.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Z WITH ACUTE 1E91 ; [.1F21.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Z WITH CIRCUMFLEX 1E90 ; [.1F21.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX 017E ; [.1F21.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F21.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER Z WITH CARON 017C ; [.1F21.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE 017B ; [.1F21.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Z WITH DOT ABOVE 1E93 ; [.1F21.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Z WITH DOT BELOW 1E92 ; [.1F21.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Z WITH DOT BELOW 1E95 ; [.1F21.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER Z WITH LINE BELOW 1E94 ; [.1F21.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER Z WITH LINE BELOW 018D ; [.1F21.0020.0004][.1EF5.0020.0004] # LATIN SMALL LETTER TURNED DELTA 1D22 ; [.1F25.0020.0002] # LATIN LETTER SMALL CAPITAL Z 01B6 ; [.1F26.0020.0002] # LATIN SMALL LETTER Z WITH STROKE 01B5 ; [.1F26.0020.0008] # LATIN CAPITAL LETTER Z WITH STROKE 1D76 ; [.1F2A.0020.0002] # LATIN SMALL LETTER Z WITH MIDDLE TILDE 1D8E ; [.1F2B.0020.0002] # LATIN SMALL LETTER Z WITH PALATAL HOOK 0225 ; [.1F2C.0020.0002] # LATIN SMALL LETTER Z WITH HOOK 0224 ; [.1F2C.0020.0008] # LATIN CAPITAL LETTER Z WITH HOOK 0290 ; [.1F30.0020.0002] # LATIN SMALL LETTER Z WITH RETROFLEX HOOK 1DBC ; [.1F30.0020.0014] # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK 0291 ; [.1F34.0020.0002] # LATIN SMALL LETTER Z WITH CURL 1DBD ; [.1F34.0020.0014] # MODIFIER LETTER SMALL Z WITH CURL 0240 ; [.1F38.0020.0002] # LATIN SMALL LETTER Z WITH SWASH TAIL 2C7F ; [.1F38.0020.0008] # LATIN CAPITAL LETTER Z WITH SWASH TAIL 2C6C ; [.1F3C.0020.0002] # LATIN SMALL LETTER Z WITH DESCENDER 2C6B ; [.1F3C.0020.0008] # LATIN CAPITAL LETTER Z WITH DESCENDER A763 ; [.1F3D.0020.0002] # LATIN SMALL LETTER VISIGOTHIC Z A762 ; [.1F3D.0020.0008] # LATIN CAPITAL LETTER VISIGOTHIC Z 0292 ; [.1F3E.0020.0002] # LATIN SMALL LETTER EZH 01B7 ; [.1F3E.0020.0008] # LATIN CAPITAL LETTER EZH 1DBE ; [.1F3E.0020.0014] # MODIFIER LETTER SMALL EZH 01EF ; [.1F3E.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON 01EE ; [.1F3E.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON 1D23 ; [.1F42.0020.0002] # LATIN LETTER SMALL CAPITAL EZH 01B9 ; [.1F43.0020.0002] # LATIN SMALL LETTER EZH REVERSED 01B8 ; [.1F43.0020.0008] # LATIN CAPITAL LETTER EZH REVERSED 1D9A ; [.1F47.0020.0002] # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 01BA ; [.1F48.0020.0002] # LATIN SMALL LETTER EZH WITH TAIL 0293 ; [.1F4C.0020.0002] # LATIN SMALL LETTER EZH WITH CURL 00FE ; [.1F50.0020.0002] # LATIN SMALL LETTER THORN 00DE ; [.1F50.0020.0008] # LATIN CAPITAL LETTER THORN A765 ; [.1F54.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE A764 ; [.1F54.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE A767 ; [.1F55.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER A766 ; [.1F55.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER 01BF ; [.1F56.0020.0002] # LATIN LETTER WYNN 01F7 ; [.1F56.0020.0008] # LATIN CAPITAL LETTER WYNN A769 ; [.1F5A.0020.0002] # LATIN SMALL LETTER VEND A768 ; [.1F5A.0020.0008] # LATIN CAPITAL LETTER VEND AB60 ; [.1F5B.0020.0002] # LATIN SMALL LETTER SAKHA YAT AB61 ; [.1F5C.0020.0002] # LATIN SMALL LETTER IOTIFIED E AB63 ; [.1F5D.0020.0002] # LATIN SMALL LETTER UO A76B ; [.1F5E.0020.0002] # LATIN SMALL LETTER ET A76A ; [.1F5E.0020.0008] # LATIN CAPITAL LETTER ET A76D ; [.1F5F.0020.0002] # LATIN SMALL LETTER IS A76C ; [.1F5F.0020.0008] # LATIN CAPITAL LETTER IS A76F ; [.1F60.0020.0002] # LATIN SMALL LETTER CON 1DD2 ; [.1F60.0020.0004] # COMBINING US ABOVE A76E ; [.1F60.0020.0008] # LATIN CAPITAL LETTER CON A770 ; [.1F60.0020.0014] # MODIFIER LETTER US A778 ; [.1F61.0020.0002] # LATIN SMALL LETTER UM 01BB ; [.1F62.0020.0002] # LATIN LETTER TWO WITH STROKE A72B ; [.1F66.0020.0002] # LATIN SMALL LETTER TRESILLO A72A ; [.1F66.0020.0008] # LATIN CAPITAL LETTER TRESILLO A72D ; [.1F67.0020.0002] # LATIN SMALL LETTER CUATRILLO A72C ; [.1F67.0020.0008] # LATIN CAPITAL LETTER CUATRILLO A72F ; [.1F68.0020.0002] # LATIN SMALL LETTER CUATRILLO WITH COMMA A72E ; [.1F68.0020.0008] # LATIN CAPITAL LETTER CUATRILLO WITH COMMA 01A8 ; [.1F69.0020.0002] # LATIN SMALL LETTER TONE TWO 01A7 ; [.1F69.0020.0008] # LATIN CAPITAL LETTER TONE TWO 01BD ; [.1F6D.0020.0002] # LATIN SMALL LETTER TONE FIVE 01BC ; [.1F6D.0020.0008] # LATIN CAPITAL LETTER TONE FIVE 0185 ; [.1F71.0020.0002] # LATIN SMALL LETTER TONE SIX 0184 ; [.1F71.0020.0008] # LATIN CAPITAL LETTER TONE SIX 0294 ; [.1F75.0020.0002] # LATIN LETTER GLOTTAL STOP 0242 ; [.1F79.0020.0002] # LATIN SMALL LETTER GLOTTAL STOP 0241 ; [.1F79.0020.0008] # LATIN CAPITAL LETTER GLOTTAL STOP 02C0 ; [.1F7D.0020.0002] # MODIFIER LETTER GLOTTAL STOP 02BC ; [.1F7E.0020.0002] # MODIFIER LETTER APOSTROPHE 0149 ; [.1F7E.0020.0004][.1DB9.0020.0004] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE 02EE ; [.1F7F.0020.0002] # MODIFIER LETTER DOUBLE APOSTROPHE 02BE ; [.1F80.0020.0002] # MODIFIER LETTER RIGHT HALF RING A723 ; [.1F81.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL ALEF A722 ; [.1F81.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF A78C ; [.1F82.0020.0002] # LATIN SMALL LETTER SALTILLO A78B ; [.1F82.0020.0008] # LATIN CAPITAL LETTER SALTILLO A78F ; [.1F83.0020.0002] # LATIN LETTER SINOLOGICAL DOT 0295 ; [.1F84.0020.0002] # LATIN LETTER PHARYNGEAL VOICED FRICATIVE 02E4 ; [.1F84.0020.0014] # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP 02BF ; [.1F88.0020.0002] # MODIFIER LETTER LEFT HALF RING 02C1 ; [.1F89.0020.0002] # MODIFIER LETTER REVERSED GLOTTAL STOP 1D24 ; [.1F8A.0020.0002] # LATIN LETTER VOICED LARYNGEAL SPIRANT 1D25 ; [.1F8B.0020.0002] # LATIN LETTER AIN 1D5C ; [.1F8B.0020.0014] # MODIFIER LETTER SMALL AIN A725 ; [.1F8C.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL AIN A724 ; [.1F8C.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN 02A1 ; [.1F8D.0020.0002] # LATIN LETTER GLOTTAL STOP WITH STROKE 02A2 ; [.1F91.0020.0002] # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE 0296 ; [.1F95.0020.0002] # LATIN LETTER INVERTED GLOTTAL STOP 01C0 ; [.1F99.0020.0002] # LATIN LETTER DENTAL CLICK 01C1 ; [.1F9D.0020.0002] # LATIN LETTER LATERAL CLICK 01C2 ; [.1FA1.0020.0002] # LATIN LETTER ALVEOLAR CLICK 01C3 ; [.1FA5.0020.0002] # LATIN LETTER RETROFLEX CLICK 0297 ; [.1FA9.0020.0002] # LATIN LETTER STRETCHED C 0298 ; [.1FAD.0020.0002] # LATIN LETTER BILABIAL CLICK 02AC ; [.1FB1.0020.0002] # LATIN LETTER BILABIAL PERCUSSIVE 02AD ; [.1FB5.0020.0002] # LATIN LETTER BIDENTAL PERCUSSIVE 03B1 ; [.1FB9.0020.0002] # GREEK SMALL LETTER ALPHA 1D6C2 ; [.1FB9.0020.0005] # MATHEMATICAL BOLD SMALL ALPHA 1D6FC ; [.1FB9.0020.0005] # MATHEMATICAL ITALIC SMALL ALPHA 1D736 ; [.1FB9.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ALPHA 1D770 ; [.1FB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA 1D7AA ; [.1FB9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA 0391 ; [.1FB9.0020.0008] # GREEK CAPITAL LETTER ALPHA 1D6A8 ; [.1FB9.0020.000B] # MATHEMATICAL BOLD CAPITAL ALPHA 1D6E2 ; [.1FB9.0020.000B] # MATHEMATICAL ITALIC CAPITAL ALPHA 1D71C ; [.1FB9.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA 1D756 ; [.1FB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA 1D790 ; [.1FB9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA 1F00 ; [.1FB9.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ALPHA WITH PSILI 1F08 ; [.1FB9.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI 1F04 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA 1F0C ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA 1F84 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F8C ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F02 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA 1F0A ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA 1F82 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F8A ; [.1FB9.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F06 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI 1F0E ; [.1FB9.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI 1F86 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F8E ; [.1FB9.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F80 ; [.1FB9.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI 1F88 ; [.1FB9.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 1F01 ; [.1FB9.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ALPHA WITH DASIA 1F09 ; [.1FB9.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA 1F05 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA 1F0D ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA 1F85 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F8D ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F03 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA 1F0B ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA 1F83 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F8B ; [.1FB9.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F07 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI 1F0F ; [.1FB9.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI 1F87 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F8F ; [.1FB9.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F81 ; [.1FB9.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI 1F89 ; [.1FB9.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 03AC ; [.1FB9.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH TONOS 1F71 ; [.1FB9.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH OXIA 0386 ; [.1FB9.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH TONOS 1FBB ; [.1FB9.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH OXIA 1FB4 ; [.1FB9.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 1F70 ; [.1FB9.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH VARIA 1FBA ; [.1FB9.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH VARIA 1FB2 ; [.1FB9.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 1FB0 ; [.1FB9.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER ALPHA WITH VRACHY 1FB8 ; [.1FB9.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER ALPHA WITH VRACHY 1FB6 ; [.1FB9.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI 1FB7 ; [.1FB9.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 1FB1 ; [.1FB9.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER ALPHA WITH MACRON 1FB9 ; [.1FB9.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER ALPHA WITH MACRON 1FB3 ; [.1FB9.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI 1FBC ; [.1FB9.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 03B2 ; [.1FBA.0020.0002] # GREEK SMALL LETTER BETA 03D0 ; [.1FBA.0020.0004] # GREEK BETA SYMBOL 1D6C3 ; [.1FBA.0020.0005] # MATHEMATICAL BOLD SMALL BETA 1D6FD ; [.1FBA.0020.0005] # MATHEMATICAL ITALIC SMALL BETA 1D737 ; [.1FBA.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL BETA 1D771 ; [.1FBA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL BETA 1D7AB ; [.1FBA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA 0392 ; [.1FBA.0020.0008] # GREEK CAPITAL LETTER BETA 1D6A9 ; [.1FBA.0020.000B] # MATHEMATICAL BOLD CAPITAL BETA 1D6E3 ; [.1FBA.0020.000B] # MATHEMATICAL ITALIC CAPITAL BETA 1D71D ; [.1FBA.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL BETA 1D757 ; [.1FBA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA 1D791 ; [.1FBA.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA 1D5D ; [.1FBA.0020.0014] # MODIFIER LETTER SMALL BETA 1D66 ; [.1FBA.0020.0015] # GREEK SUBSCRIPT SMALL LETTER BETA 03B3 ; [.1FBB.0020.0002] # GREEK SMALL LETTER GAMMA 213D ; [.1FBB.0020.0005] # DOUBLE-STRUCK SMALL GAMMA 1D6C4 ; [.1FBB.0020.0005] # MATHEMATICAL BOLD SMALL GAMMA 1D6FE ; [.1FBB.0020.0005] # MATHEMATICAL ITALIC SMALL GAMMA 1D738 ; [.1FBB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL GAMMA 1D772 ; [.1FBB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA 1D7AC ; [.1FBB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA 0393 ; [.1FBB.0020.0008] # GREEK CAPITAL LETTER GAMMA 213E ; [.1FBB.0020.000B] # DOUBLE-STRUCK CAPITAL GAMMA 1D6AA ; [.1FBB.0020.000B] # MATHEMATICAL BOLD CAPITAL GAMMA 1D6E4 ; [.1FBB.0020.000B] # MATHEMATICAL ITALIC CAPITAL GAMMA 1D71E ; [.1FBB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA 1D758 ; [.1FBB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA 1D792 ; [.1FBB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA 1D5E ; [.1FBB.0020.0014] # MODIFIER LETTER SMALL GREEK GAMMA 1D67 ; [.1FBB.0020.0015] # GREEK SUBSCRIPT SMALL LETTER GAMMA 1D26 ; [.1FBC.0020.0002] # GREEK LETTER SMALL CAPITAL GAMMA 03B4 ; [.1FBD.0020.0002] # GREEK SMALL LETTER DELTA 1D6C5 ; [.1FBD.0020.0005] # MATHEMATICAL BOLD SMALL DELTA 1D6FF ; [.1FBD.0020.0005] # MATHEMATICAL ITALIC SMALL DELTA 1D739 ; [.1FBD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL DELTA 1D773 ; [.1FBD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA 1D7AD ; [.1FBD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA 0394 ; [.1FBD.0020.0008] # GREEK CAPITAL LETTER DELTA 1D6AB ; [.1FBD.0020.000B] # MATHEMATICAL BOLD CAPITAL DELTA 1D6E5 ; [.1FBD.0020.000B] # MATHEMATICAL ITALIC CAPITAL DELTA 1D71F ; [.1FBD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL DELTA 1D759 ; [.1FBD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA 1D793 ; [.1FBD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA 1D5F ; [.1FBD.0020.0014] # MODIFIER LETTER SMALL DELTA 03B5 ; [.1FBE.0020.0002] # GREEK SMALL LETTER EPSILON 03F5 ; [.1FBE.0020.0004] # GREEK LUNATE EPSILON SYMBOL 1D6C6 ; [.1FBE.0020.0005] # MATHEMATICAL BOLD SMALL EPSILON 1D6DC ; [.1FBE.0020.0005] # MATHEMATICAL BOLD EPSILON SYMBOL 1D700 ; [.1FBE.0020.0005] # MATHEMATICAL ITALIC SMALL EPSILON 1D716 ; [.1FBE.0020.0005] # MATHEMATICAL ITALIC EPSILON SYMBOL 1D73A ; [.1FBE.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL EPSILON 1D750 ; [.1FBE.0020.0005] # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL 1D774 ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON 1D78A ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL 1D7AE ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON 1D7C4 ; [.1FBE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL 0395 ; [.1FBE.0020.0008] # GREEK CAPITAL LETTER EPSILON 1D6AC ; [.1FBE.0020.000B] # MATHEMATICAL BOLD CAPITAL EPSILON 1D6E6 ; [.1FBE.0020.000B] # MATHEMATICAL ITALIC CAPITAL EPSILON 1D720 ; [.1FBE.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON 1D75A ; [.1FBE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON 1D794 ; [.1FBE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON 1F10 ; [.1FBE.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER EPSILON WITH PSILI 1F18 ; [.1FBE.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI 1F14 ; [.1FBE.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA 1F1C ; [.1FBE.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA 1F12 ; [.1FBE.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA 1F1A ; [.1FBE.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA 1F11 ; [.1FBE.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER EPSILON WITH DASIA 1F19 ; [.1FBE.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA 1F15 ; [.1FBE.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F1D ; [.1FBE.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F13 ; [.1FBE.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA 1F1B ; [.1FBE.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA 03AD ; [.1FBE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH TONOS 1F73 ; [.1FBE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH OXIA 0388 ; [.1FBE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH TONOS 1FC9 ; [.1FBE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH OXIA 1F72 ; [.1FBE.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH VARIA 1FC8 ; [.1FBE.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH VARIA 03DD ; [.1FBF.0020.0002] # GREEK SMALL LETTER DIGAMMA 1D7CB ; [.1FBF.0020.0005] # MATHEMATICAL BOLD SMALL DIGAMMA 03DC ; [.1FBF.0020.0008] # GREEK LETTER DIGAMMA 1D7CA ; [.1FBF.0020.000B] # MATHEMATICAL BOLD CAPITAL DIGAMMA 0377 ; [.1FC0.0020.0002] # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA 0376 ; [.1FC0.0020.0008] # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA 03DB ; [.1FC1.0020.0002] # GREEK SMALL LETTER STIGMA 03DA ; [.1FC1.0020.0008] # GREEK LETTER STIGMA 03B6 ; [.1FC2.0020.0002] # GREEK SMALL LETTER ZETA 1D6C7 ; [.1FC2.0020.0005] # MATHEMATICAL BOLD SMALL ZETA 1D701 ; [.1FC2.0020.0005] # MATHEMATICAL ITALIC SMALL ZETA 1D73B ; [.1FC2.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ZETA 1D775 ; [.1FC2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA 1D7AF ; [.1FC2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA 0396 ; [.1FC2.0020.0008] # GREEK CAPITAL LETTER ZETA 1D6AD ; [.1FC2.0020.000B] # MATHEMATICAL BOLD CAPITAL ZETA 1D6E7 ; [.1FC2.0020.000B] # MATHEMATICAL ITALIC CAPITAL ZETA 1D721 ; [.1FC2.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ZETA 1D75B ; [.1FC2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA 1D795 ; [.1FC2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA 0371 ; [.1FC3.0020.0002] # GREEK SMALL LETTER HETA 0370 ; [.1FC3.0020.0008] # GREEK CAPITAL LETTER HETA 03B7 ; [.1FC4.0020.0002] # GREEK SMALL LETTER ETA 1D6C8 ; [.1FC4.0020.0005] # MATHEMATICAL BOLD SMALL ETA 1D702 ; [.1FC4.0020.0005] # MATHEMATICAL ITALIC SMALL ETA 1D73C ; [.1FC4.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ETA 1D776 ; [.1FC4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ETA 1D7B0 ; [.1FC4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA 0397 ; [.1FC4.0020.0008] # GREEK CAPITAL LETTER ETA 1D6AE ; [.1FC4.0020.000B] # MATHEMATICAL BOLD CAPITAL ETA 1D6E8 ; [.1FC4.0020.000B] # MATHEMATICAL ITALIC CAPITAL ETA 1D722 ; [.1FC4.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ETA 1D75C ; [.1FC4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA 1D796 ; [.1FC4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA 1F20 ; [.1FC4.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ETA WITH PSILI 1F28 ; [.1FC4.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ETA WITH PSILI 1F24 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA 1F2C ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA 1F94 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1F9C ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F22 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA 1F2A ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA 1F92 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1F9A ; [.1FC4.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F26 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI 1F2E ; [.1FC4.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI 1F96 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1F9E ; [.1FC4.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1F90 ; [.1FC4.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI 1F98 ; [.1FC4.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 1F21 ; [.1FC4.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ETA WITH DASIA 1F29 ; [.1FC4.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ETA WITH DASIA 1F25 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA 1F2D ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA 1F95 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1F9D ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F23 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA 1F2B ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA 1F93 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1F9B ; [.1FC4.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F27 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI 1F2F ; [.1FC4.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI 1F97 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1F9F ; [.1FC4.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1F91 ; [.1FC4.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI 1F99 ; [.1FC4.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 03AE ; [.1FC4.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH TONOS 1F75 ; [.1FC4.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH OXIA 0389 ; [.1FC4.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH TONOS 1FCB ; [.1FC4.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH OXIA 1FC4 ; [.1FC4.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 1F74 ; [.1FC4.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH VARIA 1FCA ; [.1FC4.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH VARIA 1FC2 ; [.1FC4.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI 1FC6 ; [.1FC4.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI 1FC7 ; [.1FC4.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 1FC3 ; [.1FC4.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI 1FCC ; [.1FC4.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 03B8 ; [.1FC5.0020.0002] # GREEK SMALL LETTER THETA 03D1 ; [.1FC5.0020.0004] # GREEK THETA SYMBOL 1D6C9 ; [.1FC5.0020.0005] # MATHEMATICAL BOLD SMALL THETA 1D6DD ; [.1FC5.0020.0005] # MATHEMATICAL BOLD THETA SYMBOL 1D703 ; [.1FC5.0020.0005] # MATHEMATICAL ITALIC SMALL THETA 1D717 ; [.1FC5.0020.0005] # MATHEMATICAL ITALIC THETA SYMBOL 1D73D ; [.1FC5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL THETA 1D751 ; [.1FC5.0020.0005] # MATHEMATICAL BOLD ITALIC THETA SYMBOL 1D777 ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL THETA 1D78B ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL 1D7B1 ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA 1D7C5 ; [.1FC5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL 0398 ; [.1FC5.0020.0008] # GREEK CAPITAL LETTER THETA 03F4 ; [.1FC5.0020.000A] # GREEK CAPITAL THETA SYMBOL 1D6AF ; [.1FC5.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA 1D6B9 ; [.1FC5.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA SYMBOL 1D6E9 ; [.1FC5.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA 1D6F3 ; [.1FC5.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL 1D723 ; [.1FC5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA 1D72D ; [.1FC5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL 1D75D ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA 1D767 ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL 1D797 ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA 1D7A1 ; [.1FC5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL 1DBF ; [.1FC5.0020.0014] # MODIFIER LETTER SMALL THETA 03B9 ; [.1FC6.0020.0002] # GREEK SMALL LETTER IOTA 1FBE ; [.1FC6.0020.0002] # GREEK PROSGEGRAMMENI 037A ; [.1FC6.0020.0004] # GREEK YPOGEGRAMMENI 1D6CA ; [.1FC6.0020.0005] # MATHEMATICAL BOLD SMALL IOTA 1D704 ; [.1FC6.0020.0005] # MATHEMATICAL ITALIC SMALL IOTA 1D73E ; [.1FC6.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL IOTA 1D778 ; [.1FC6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA 1D7B2 ; [.1FC6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA 0399 ; [.1FC6.0020.0008] # GREEK CAPITAL LETTER IOTA 1D6B0 ; [.1FC6.0020.000B] # MATHEMATICAL BOLD CAPITAL IOTA 1D6EA ; [.1FC6.0020.000B] # MATHEMATICAL ITALIC CAPITAL IOTA 1D724 ; [.1FC6.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL IOTA 1D75E ; [.1FC6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA 1D798 ; [.1FC6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA 1F30 ; [.1FC6.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER IOTA WITH PSILI 1F38 ; [.1FC6.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI 1F34 ; [.1FC6.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA 1F3C ; [.1FC6.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA 1F32 ; [.1FC6.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA 1F3A ; [.1FC6.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA 1F36 ; [.1FC6.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI 1F3E ; [.1FC6.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI 1F31 ; [.1FC6.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER IOTA WITH DASIA 1F39 ; [.1FC6.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA 1F35 ; [.1FC6.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA 1F3D ; [.1FC6.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA 1F33 ; [.1FC6.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA 1F3B ; [.1FC6.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA 1F37 ; [.1FC6.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI 1F3F ; [.1FC6.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI 03AF ; [.1FC6.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH TONOS 1F77 ; [.1FC6.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH OXIA 038A ; [.1FC6.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH TONOS 1FDB ; [.1FC6.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH OXIA 1F76 ; [.1FC6.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH VARIA 1FDA ; [.1FC6.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH VARIA 1FD0 ; [.1FC6.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER IOTA WITH VRACHY 1FD8 ; [.1FC6.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER IOTA WITH VRACHY 1FD6 ; [.1FC6.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PERISPOMENI 03CA ; [.1FC6.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA 03AA ; [.1FC6.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 0390 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 1FD3 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 1FD2 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 1FD7 ; [.1FC6.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 1FD1 ; [.1FC6.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER IOTA WITH MACRON 1FD9 ; [.1FC6.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER IOTA WITH MACRON 03F3 ; [.1FC7.0020.0002] # GREEK LETTER YOT 037F ; [.1FC7.0020.0008] # GREEK CAPITAL LETTER YOT 03BA ; [.1FC8.0020.0002] # GREEK SMALL LETTER KAPPA 03F0 ; [.1FC8.0020.0004] # GREEK KAPPA SYMBOL 1D6CB ; [.1FC8.0020.0005] # MATHEMATICAL BOLD SMALL KAPPA 1D6DE ; [.1FC8.0020.0005] # MATHEMATICAL BOLD KAPPA SYMBOL 1D705 ; [.1FC8.0020.0005] # MATHEMATICAL ITALIC SMALL KAPPA 1D718 ; [.1FC8.0020.0005] # MATHEMATICAL ITALIC KAPPA SYMBOL 1D73F ; [.1FC8.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL KAPPA 1D752 ; [.1FC8.0020.0005] # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL 1D779 ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA 1D78C ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL 1D7B3 ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA 1D7C6 ; [.1FC8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL 039A ; [.1FC8.0020.0008] # GREEK CAPITAL LETTER KAPPA 1D6B1 ; [.1FC8.0020.000B] # MATHEMATICAL BOLD CAPITAL KAPPA 1D6EB ; [.1FC8.0020.000B] # MATHEMATICAL ITALIC CAPITAL KAPPA 1D725 ; [.1FC8.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA 1D75F ; [.1FC8.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA 1D799 ; [.1FC8.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA 03D7 ; [.1FC8.0020.0004][.1FB9.0020.0004][.1FC6.0020.0004] # GREEK KAI SYMBOL 03CF ; [.1FC8.0020.000A][.1FB9.0020.0004][.1FC6.0020.0004] # GREEK CAPITAL KAI SYMBOL 03BB ; [.1FC9.0020.0002] # GREEK SMALL LETTER LAMDA 1D6CC ; [.1FC9.0020.0005] # MATHEMATICAL BOLD SMALL LAMDA 1D706 ; [.1FC9.0020.0005] # MATHEMATICAL ITALIC SMALL LAMDA 1D740 ; [.1FC9.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL LAMDA 1D77A ; [.1FC9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA 1D7B4 ; [.1FC9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA 039B ; [.1FC9.0020.0008] # GREEK CAPITAL LETTER LAMDA 1D6B2 ; [.1FC9.0020.000B] # MATHEMATICAL BOLD CAPITAL LAMDA 1D6EC ; [.1FC9.0020.000B] # MATHEMATICAL ITALIC CAPITAL LAMDA 1D726 ; [.1FC9.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA 1D760 ; [.1FC9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA 1D79A ; [.1FC9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA 1D27 ; [.1FCA.0020.0002] # GREEK LETTER SMALL CAPITAL LAMDA 03BC ; [.1FCB.0020.0002] # GREEK SMALL LETTER MU 00B5 ; [.1FCB.0020.0004] # MICRO SIGN 1D6CD ; [.1FCB.0020.0005] # MATHEMATICAL BOLD SMALL MU 1D707 ; [.1FCB.0020.0005] # MATHEMATICAL ITALIC SMALL MU 1D741 ; [.1FCB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL MU 1D77B ; [.1FCB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL MU 1D7B5 ; [.1FCB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU 039C ; [.1FCB.0020.0008] # GREEK CAPITAL LETTER MU 1D6B3 ; [.1FCB.0020.000B] # MATHEMATICAL BOLD CAPITAL MU 1D6ED ; [.1FCB.0020.000B] # MATHEMATICAL ITALIC CAPITAL MU 1D727 ; [.1FCB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL MU 1D761 ; [.1FCB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU 1D79B ; [.1FCB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU 3382 ; [.1FCB.0020.001C][.1C47.0020.001D] # SQUARE MU A 338C ; [.1FCB.0020.001C][.1CE5.0020.001D] # SQUARE MU F 338D ; [.1FCB.0020.001C][.1CF4.0020.001C] # SQUARE MU G 3395 ; [.1FCB.0020.001C][.1D77.0020.001C] # SQUARE MU L 339B ; [.1FCB.0020.001C][.1DAA.0020.001C] # SQUARE MU M 33B2 ; [.1FCB.0020.001C][.1E71.0020.001C] # SQUARE MU S 33B6 ; [.1FCB.0020.001C][.1EE3.0020.001D] # SQUARE MU V 33BC ; [.1FCB.0020.001C][.1EF5.0020.001D] # SQUARE MU W 03BD ; [.1FCC.0020.0002] # GREEK SMALL LETTER NU 1D6CE ; [.1FCC.0020.0005] # MATHEMATICAL BOLD SMALL NU 1D708 ; [.1FCC.0020.0005] # MATHEMATICAL ITALIC SMALL NU 1D742 ; [.1FCC.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL NU 1D77C ; [.1FCC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL NU 1D7B6 ; [.1FCC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU 039D ; [.1FCC.0020.0008] # GREEK CAPITAL LETTER NU 1D6B4 ; [.1FCC.0020.000B] # MATHEMATICAL BOLD CAPITAL NU 1D6EE ; [.1FCC.0020.000B] # MATHEMATICAL ITALIC CAPITAL NU 1D728 ; [.1FCC.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL NU 1D762 ; [.1FCC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU 1D79C ; [.1FCC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU 03BE ; [.1FCD.0020.0002] # GREEK SMALL LETTER XI 1D6CF ; [.1FCD.0020.0005] # MATHEMATICAL BOLD SMALL XI 1D709 ; [.1FCD.0020.0005] # MATHEMATICAL ITALIC SMALL XI 1D743 ; [.1FCD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL XI 1D77D ; [.1FCD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL XI 1D7B7 ; [.1FCD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI 039E ; [.1FCD.0020.0008] # GREEK CAPITAL LETTER XI 1D6B5 ; [.1FCD.0020.000B] # MATHEMATICAL BOLD CAPITAL XI 1D6EF ; [.1FCD.0020.000B] # MATHEMATICAL ITALIC CAPITAL XI 1D729 ; [.1FCD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL XI 1D763 ; [.1FCD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI 1D79D ; [.1FCD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI 03BF ; [.1FCE.0020.0002] # GREEK SMALL LETTER OMICRON 1D6D0 ; [.1FCE.0020.0005] # MATHEMATICAL BOLD SMALL OMICRON 1D70A ; [.1FCE.0020.0005] # MATHEMATICAL ITALIC SMALL OMICRON 1D744 ; [.1FCE.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMICRON 1D77E ; [.1FCE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON 1D7B8 ; [.1FCE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON 039F ; [.1FCE.0020.0008] # GREEK CAPITAL LETTER OMICRON 1D6B6 ; [.1FCE.0020.000B] # MATHEMATICAL BOLD CAPITAL OMICRON 1D6F0 ; [.1FCE.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMICRON 1D72A ; [.1FCE.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON 1D764 ; [.1FCE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON 1D79E ; [.1FCE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON 1F40 ; [.1FCE.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMICRON WITH PSILI 1F48 ; [.1FCE.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI 1F44 ; [.1FCE.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA 1F4C ; [.1FCE.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA 1F42 ; [.1FCE.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA 1F4A ; [.1FCE.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA 1F41 ; [.1FCE.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMICRON WITH DASIA 1F49 ; [.1FCE.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA 1F45 ; [.1FCE.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA 1F4D ; [.1FCE.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA 1F43 ; [.1FCE.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA 1F4B ; [.1FCE.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA 03CC ; [.1FCE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH TONOS 1F79 ; [.1FCE.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH OXIA 038C ; [.1FCE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH TONOS 1FF9 ; [.1FCE.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH OXIA 1F78 ; [.1FCE.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH VARIA 1FF8 ; [.1FCE.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH VARIA 03C0 ; [.1FCF.0020.0002] # GREEK SMALL LETTER PI 03D6 ; [.1FCF.0020.0004] # GREEK PI SYMBOL 213C ; [.1FCF.0020.0005] # DOUBLE-STRUCK SMALL PI 1D6D1 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD SMALL PI 1D6E1 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD PI SYMBOL 1D70B ; [.1FCF.0020.0005] # MATHEMATICAL ITALIC SMALL PI 1D71B ; [.1FCF.0020.0005] # MATHEMATICAL ITALIC PI SYMBOL 1D745 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PI 1D755 ; [.1FCF.0020.0005] # MATHEMATICAL BOLD ITALIC PI SYMBOL 1D77F ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PI 1D78F ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL 1D7B9 ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI 1D7C9 ; [.1FCF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL 03A0 ; [.1FCF.0020.0008] # GREEK CAPITAL LETTER PI 213F ; [.1FCF.0020.000B] # DOUBLE-STRUCK CAPITAL PI 1D6B7 ; [.1FCF.0020.000B] # MATHEMATICAL BOLD CAPITAL PI 1D6F1 ; [.1FCF.0020.000B] # MATHEMATICAL ITALIC CAPITAL PI 1D72B ; [.1FCF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PI 1D765 ; [.1FCF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI 1D79F ; [.1FCF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI 1D28 ; [.1FD0.0020.0002] # GREEK LETTER SMALL CAPITAL PI 03FB ; [.1FD1.0020.0002] # GREEK SMALL LETTER SAN 03FA ; [.1FD1.0020.0008] # GREEK CAPITAL LETTER SAN 03DF ; [.1FD2.0020.0002] # GREEK SMALL LETTER KOPPA 03DE ; [.1FD2.0020.0008] # GREEK LETTER KOPPA 03D9 ; [.1FD3.0020.0002] # GREEK SMALL LETTER ARCHAIC KOPPA 03D8 ; [.1FD3.0020.0008] # GREEK LETTER ARCHAIC KOPPA 03C1 ; [.1FD4.0020.0002] # GREEK SMALL LETTER RHO 03F1 ; [.1FD4.0020.0004] # GREEK RHO SYMBOL 1D6D2 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD SMALL RHO 1D6E0 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD RHO SYMBOL 1D70C ; [.1FD4.0020.0005] # MATHEMATICAL ITALIC SMALL RHO 1D71A ; [.1FD4.0020.0005] # MATHEMATICAL ITALIC RHO SYMBOL 1D746 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL RHO 1D754 ; [.1FD4.0020.0005] # MATHEMATICAL BOLD ITALIC RHO SYMBOL 1D780 ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL RHO 1D78E ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL 1D7BA ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO 1D7C8 ; [.1FD4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL 03A1 ; [.1FD4.0020.0008] # GREEK CAPITAL LETTER RHO 1D6B8 ; [.1FD4.0020.000B] # MATHEMATICAL BOLD CAPITAL RHO 1D6F2 ; [.1FD4.0020.000B] # MATHEMATICAL ITALIC CAPITAL RHO 1D72C ; [.1FD4.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL RHO 1D766 ; [.1FD4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO 1D7A0 ; [.1FD4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO 1D68 ; [.1FD4.0020.0015] # GREEK SUBSCRIPT SMALL LETTER RHO 1FE4 ; [.1FD4.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER RHO WITH PSILI 1FE5 ; [.1FD4.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER RHO WITH DASIA 1FEC ; [.1FD4.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER RHO WITH DASIA 1D29 ; [.1FD5.0020.0002] # GREEK LETTER SMALL CAPITAL RHO 03FC ; [.1FD6.0020.0002] # GREEK RHO WITH STROKE SYMBOL 03C3 ; [.1FD7.0020.0002] # GREEK SMALL LETTER SIGMA 03F2 ; [.1FD7.0020.0004] # GREEK LUNATE SIGMA SYMBOL 1D6D3 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD SMALL FINAL SIGMA 1D6D4 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD SMALL SIGMA 1D70D ; [.1FD7.0020.0005] # MATHEMATICAL ITALIC SMALL FINAL SIGMA 1D70E ; [.1FD7.0020.0005] # MATHEMATICAL ITALIC SMALL SIGMA 1D747 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA 1D748 ; [.1FD7.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL SIGMA 1D781 ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA 1D782 ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA 1D7BB ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA 1D7BC ; [.1FD7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA 03A3 ; [.1FD7.0020.0008] # GREEK CAPITAL LETTER SIGMA 03F9 ; [.1FD7.0020.000A] # GREEK CAPITAL LUNATE SIGMA SYMBOL 1D6BA ; [.1FD7.0020.000B] # MATHEMATICAL BOLD CAPITAL SIGMA 1D6F4 ; [.1FD7.0020.000B] # MATHEMATICAL ITALIC CAPITAL SIGMA 1D72E ; [.1FD7.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA 1D768 ; [.1FD7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA 1D7A2 ; [.1FD7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA 03C2 ; [.1FD7.0020.0019] # GREEK SMALL LETTER FINAL SIGMA 037C ; [.1FD8.0020.0002] # GREEK SMALL DOTTED LUNATE SIGMA SYMBOL 03FE ; [.1FD8.0020.0008] # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL 037B ; [.1FD9.0020.0002] # GREEK SMALL REVERSED LUNATE SIGMA SYMBOL 03FD ; [.1FD9.0020.0008] # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL 037D ; [.1FDA.0020.0002] # GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL 03FF ; [.1FDA.0020.0008] # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL 03C4 ; [.1FDB.0020.0002] # GREEK SMALL LETTER TAU 1D6D5 ; [.1FDB.0020.0005] # MATHEMATICAL BOLD SMALL TAU 1D70F ; [.1FDB.0020.0005] # MATHEMATICAL ITALIC SMALL TAU 1D749 ; [.1FDB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL TAU 1D783 ; [.1FDB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL TAU 1D7BD ; [.1FDB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU 03A4 ; [.1FDB.0020.0008] # GREEK CAPITAL LETTER TAU 1D6BB ; [.1FDB.0020.000B] # MATHEMATICAL BOLD CAPITAL TAU 1D6F5 ; [.1FDB.0020.000B] # MATHEMATICAL ITALIC CAPITAL TAU 1D72F ; [.1FDB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL TAU 1D769 ; [.1FDB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU 1D7A3 ; [.1FDB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU 03C5 ; [.1FDC.0020.0002] # GREEK SMALL LETTER UPSILON 1D6D6 ; [.1FDC.0020.0005] # MATHEMATICAL BOLD SMALL UPSILON 1D710 ; [.1FDC.0020.0005] # MATHEMATICAL ITALIC SMALL UPSILON 1D74A ; [.1FDC.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL UPSILON 1D784 ; [.1FDC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON 1D7BE ; [.1FDC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON 03A5 ; [.1FDC.0020.0008] # GREEK CAPITAL LETTER UPSILON 03D2 ; [.1FDC.0020.000A] # GREEK UPSILON WITH HOOK SYMBOL 1D6BC ; [.1FDC.0020.000B] # MATHEMATICAL BOLD CAPITAL UPSILON 1D6F6 ; [.1FDC.0020.000B] # MATHEMATICAL ITALIC CAPITAL UPSILON 1D730 ; [.1FDC.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON 1D76A ; [.1FDC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON 1D7A4 ; [.1FDC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON 1F50 ; [.1FDC.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER UPSILON WITH PSILI 1F54 ; [.1FDC.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 1F52 ; [.1FDC.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 1F56 ; [.1FDC.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 1F51 ; [.1FDC.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER UPSILON WITH DASIA 1F59 ; [.1FDC.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA 1F55 ; [.1FDC.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA 1F5D ; [.1FDC.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA 1F53 ; [.1FDC.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA 1F5B ; [.1FDC.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA 1F57 ; [.1FDC.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI 1F5F ; [.1FDC.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI 03CD ; [.1FDC.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH TONOS 1F7B ; [.1FDC.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH OXIA 038E ; [.1FDC.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH TONOS 1FEB ; [.1FDC.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH OXIA 03D3 ; [.1FDC.0020.000A][.0000.0024.0002] # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL 1F7A ; [.1FDC.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH VARIA 1FEA ; [.1FDC.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH VARIA 1FE0 ; [.1FDC.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER UPSILON WITH VRACHY 1FE8 ; [.1FDC.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER UPSILON WITH VRACHY 1FE6 ; [.1FDC.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PERISPOMENI 03CB ; [.1FDC.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA 03AB ; [.1FDC.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 03D4 ; [.1FDC.0020.000A][.0000.002B.0002] # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL 03B0 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 1FE3 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 1FE2 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 1FE7 ; [.1FDC.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 1FE1 ; [.1FDC.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER UPSILON WITH MACRON 1FE9 ; [.1FDC.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER UPSILON WITH MACRON 03C6 ; [.1FDD.0020.0002] # GREEK SMALL LETTER PHI 03D5 ; [.1FDD.0020.0004] # GREEK PHI SYMBOL 1D6D7 ; [.1FDD.0020.0005] # MATHEMATICAL BOLD SMALL PHI 1D6DF ; [.1FDD.0020.0005] # MATHEMATICAL BOLD PHI SYMBOL 1D711 ; [.1FDD.0020.0005] # MATHEMATICAL ITALIC SMALL PHI 1D719 ; [.1FDD.0020.0005] # MATHEMATICAL ITALIC PHI SYMBOL 1D74B ; [.1FDD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PHI 1D753 ; [.1FDD.0020.0005] # MATHEMATICAL BOLD ITALIC PHI SYMBOL 1D785 ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PHI 1D78D ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL 1D7BF ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI 1D7C7 ; [.1FDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL 03A6 ; [.1FDD.0020.0008] # GREEK CAPITAL LETTER PHI 1D6BD ; [.1FDD.0020.000B] # MATHEMATICAL BOLD CAPITAL PHI 1D6F7 ; [.1FDD.0020.000B] # MATHEMATICAL ITALIC CAPITAL PHI 1D731 ; [.1FDD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PHI 1D76B ; [.1FDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI 1D7A5 ; [.1FDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI 1D60 ; [.1FDD.0020.0014] # MODIFIER LETTER SMALL GREEK PHI 1D69 ; [.1FDD.0020.0015] # GREEK SUBSCRIPT SMALL LETTER PHI 03C7 ; [.1FDE.0020.0002] # GREEK SMALL LETTER CHI 1D6D8 ; [.1FDE.0020.0005] # MATHEMATICAL BOLD SMALL CHI 1D712 ; [.1FDE.0020.0005] # MATHEMATICAL ITALIC SMALL CHI 1D74C ; [.1FDE.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL CHI 1D786 ; [.1FDE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL CHI 1D7C0 ; [.1FDE.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI 03A7 ; [.1FDE.0020.0008] # GREEK CAPITAL LETTER CHI 1D6BE ; [.1FDE.0020.000B] # MATHEMATICAL BOLD CAPITAL CHI 1D6F8 ; [.1FDE.0020.000B] # MATHEMATICAL ITALIC CAPITAL CHI 1D732 ; [.1FDE.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL CHI 1D76C ; [.1FDE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI 1D7A6 ; [.1FDE.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI 1D61 ; [.1FDE.0020.0014] # MODIFIER LETTER SMALL CHI 1D6A ; [.1FDE.0020.0015] # GREEK SUBSCRIPT SMALL LETTER CHI 03C8 ; [.1FDF.0020.0002] # GREEK SMALL LETTER PSI 1D6D9 ; [.1FDF.0020.0005] # MATHEMATICAL BOLD SMALL PSI 1D713 ; [.1FDF.0020.0005] # MATHEMATICAL ITALIC SMALL PSI 1D74D ; [.1FDF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PSI 1D787 ; [.1FDF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PSI 1D7C1 ; [.1FDF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI 03A8 ; [.1FDF.0020.0008] # GREEK CAPITAL LETTER PSI 1D6BF ; [.1FDF.0020.000B] # MATHEMATICAL BOLD CAPITAL PSI 1D6F9 ; [.1FDF.0020.000B] # MATHEMATICAL ITALIC CAPITAL PSI 1D733 ; [.1FDF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PSI 1D76D ; [.1FDF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI 1D7A7 ; [.1FDF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI 1D2A ; [.1FE0.0020.0002] # GREEK LETTER SMALL CAPITAL PSI 03C9 ; [.1FE1.0020.0002] # GREEK SMALL LETTER OMEGA 1D6DA ; [.1FE1.0020.0005] # MATHEMATICAL BOLD SMALL OMEGA 1D714 ; [.1FE1.0020.0005] # MATHEMATICAL ITALIC SMALL OMEGA 1D74E ; [.1FE1.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMEGA 1D788 ; [.1FE1.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA 1D7C2 ; [.1FE1.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 03A9 ; [.1FE1.0020.0008] # GREEK CAPITAL LETTER OMEGA 2126 ; [.1FE1.0020.0008] # OHM SIGN 1D6C0 ; [.1FE1.0020.000B] # MATHEMATICAL BOLD CAPITAL OMEGA 1D6FA ; [.1FE1.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMEGA 1D734 ; [.1FE1.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA 1D76E ; [.1FE1.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA 1D7A8 ; [.1FE1.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1F60 ; [.1FE1.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMEGA WITH PSILI 1F68 ; [.1FE1.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI 1F64 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA 1F6C ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA 1FA4 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI 1FAC ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 1F62 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA 1F6A ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA 1FA2 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI 1FAA ; [.1FE1.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 1F66 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI 1F6E ; [.1FE1.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI 1FA6 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 1FAE ; [.1FE1.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 1FA0 ; [.1FE1.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI 1FA8 ; [.1FE1.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 1F61 ; [.1FE1.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMEGA WITH DASIA 1F69 ; [.1FE1.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA 1F65 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA 1F6D ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA 1FA5 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI 1FAD ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 1F63 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA 1F6B ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA 1FA3 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI 1FAB ; [.1FE1.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 1F67 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI 1F6F ; [.1FE1.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI 1FA7 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 1FAF ; [.1FE1.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 1FA1 ; [.1FE1.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI 1FA9 ; [.1FE1.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 03CE ; [.1FE1.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH TONOS 1F7D ; [.1FE1.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH OXIA 038F ; [.1FE1.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH TONOS 1FFB ; [.1FE1.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH OXIA 1FF4 ; [.1FE1.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 1F7C ; [.1FE1.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH VARIA 1FFA ; [.1FE1.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH VARIA 1FF2 ; [.1FE1.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI 1FF6 ; [.1FE1.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI 1FF7 ; [.1FE1.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI 1FF3 ; [.1FE1.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 1FFC ; [.1FE1.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI AB65 ; [.1FE2.0020.0002] # GREEK LETTER SMALL CAPITAL OMEGA 03E1 ; [.1FE3.0020.0002] # GREEK SMALL LETTER SAMPI 03E0 ; [.1FE3.0020.0008] # GREEK LETTER SAMPI 0373 ; [.1FE4.0020.0002] # GREEK SMALL LETTER ARCHAIC SAMPI 0372 ; [.1FE4.0020.0008] # GREEK CAPITAL LETTER ARCHAIC SAMPI 03F8 ; [.1FE5.0020.0002] # GREEK SMALL LETTER SHO 03F7 ; [.1FE5.0020.0008] # GREEK CAPITAL LETTER SHO 2C81 ; [.1FE6.0020.0002] # COPTIC SMALL LETTER ALFA 2C80 ; [.1FE6.0020.0008] # COPTIC CAPITAL LETTER ALFA 2C83 ; [.1FE7.0020.0002] # COPTIC SMALL LETTER VIDA 2C82 ; [.1FE7.0020.0008] # COPTIC CAPITAL LETTER VIDA 2C85 ; [.1FE8.0020.0002] # COPTIC SMALL LETTER GAMMA 2C84 ; [.1FE8.0020.0008] # COPTIC CAPITAL LETTER GAMMA 2C87 ; [.1FE9.0020.0002] # COPTIC SMALL LETTER DALDA 2C86 ; [.1FE9.0020.0008] # COPTIC CAPITAL LETTER DALDA 2C89 ; [.1FEA.0020.0002] # COPTIC SMALL LETTER EIE 2C88 ; [.1FEA.0020.0008] # COPTIC CAPITAL LETTER EIE 2CB7 ; [.1FEB.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE 2CB6 ; [.1FEB.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE 2C8B ; [.1FEC.0020.0002] # COPTIC SMALL LETTER SOU 2C8A ; [.1FEC.0020.0008] # COPTIC CAPITAL LETTER SOU 2C8D ; [.1FED.0020.0002] # COPTIC SMALL LETTER ZATA 2C8C ; [.1FED.0020.0008] # COPTIC CAPITAL LETTER ZATA 2C8F ; [.1FEE.0020.0002] # COPTIC SMALL LETTER HATE 2C8E ; [.1FEE.0020.0008] # COPTIC CAPITAL LETTER HATE 2C91 ; [.1FEF.0020.0002] # COPTIC SMALL LETTER THETHE 2C90 ; [.1FEF.0020.0008] # COPTIC CAPITAL LETTER THETHE 2C93 ; [.1FF0.0020.0002] # COPTIC SMALL LETTER IAUDA 2C92 ; [.1FF0.0020.0008] # COPTIC CAPITAL LETTER IAUDA 2C95 ; [.1FF1.0020.0002] # COPTIC SMALL LETTER KAPA 2C94 ; [.1FF1.0020.0008] # COPTIC CAPITAL LETTER KAPA 2CE4 ; [.1FF1.0020.0004][.1FE6.0020.0004][.1FF0.0020.0004] # COPTIC SYMBOL KAI 2CB9 ; [.1FF2.0020.0002] # COPTIC SMALL LETTER DIALECT-P KAPA 2CB8 ; [.1FF2.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P KAPA 2C97 ; [.1FF3.0020.0002] # COPTIC SMALL LETTER LAULA 2C96 ; [.1FF3.0020.0008] # COPTIC CAPITAL LETTER LAULA 2C99 ; [.1FF4.0020.0002] # COPTIC SMALL LETTER MI 2C98 ; [.1FF4.0020.0008] # COPTIC CAPITAL LETTER MI 2C9B ; [.1FF5.0020.0002] # COPTIC SMALL LETTER NI 2C9A ; [.1FF5.0020.0008] # COPTIC CAPITAL LETTER NI 2CBB ; [.1FF6.0020.0002] # COPTIC SMALL LETTER DIALECT-P NI 2CBA ; [.1FF6.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P NI 2CBD ; [.1FF7.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC NI 2CBC ; [.1FF7.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI 2C9D ; [.1FF8.0020.0002] # COPTIC SMALL LETTER KSI 2C9C ; [.1FF8.0020.0008] # COPTIC CAPITAL LETTER KSI 2C9F ; [.1FF9.0020.0002] # COPTIC SMALL LETTER O 2C9E ; [.1FF9.0020.0008] # COPTIC CAPITAL LETTER O 2CA1 ; [.1FFA.0020.0002] # COPTIC SMALL LETTER PI 2CA0 ; [.1FFA.0020.0008] # COPTIC CAPITAL LETTER PI 2CA3 ; [.1FFB.0020.0002] # COPTIC SMALL LETTER RO 2CA2 ; [.1FFB.0020.0008] # COPTIC CAPITAL LETTER RO 2CA5 ; [.1FFC.0020.0002] # COPTIC SMALL LETTER SIMA 2CA4 ; [.1FFC.0020.0008] # COPTIC CAPITAL LETTER SIMA 2CA7 ; [.1FFD.0020.0002] # COPTIC SMALL LETTER TAU 2CA6 ; [.1FFD.0020.0008] # COPTIC CAPITAL LETTER TAU 2CA9 ; [.1FFE.0020.0002] # COPTIC SMALL LETTER UA 2CA8 ; [.1FFE.0020.0008] # COPTIC CAPITAL LETTER UA 2CAB ; [.1FFF.0020.0002] # COPTIC SMALL LETTER FI 2CAA ; [.1FFF.0020.0008] # COPTIC CAPITAL LETTER FI 2CAD ; [.2000.0020.0002] # COPTIC SMALL LETTER KHI 2CAC ; [.2000.0020.0008] # COPTIC CAPITAL LETTER KHI 2CAF ; [.2001.0020.0002] # COPTIC SMALL LETTER PSI 2CAE ; [.2001.0020.0008] # COPTIC CAPITAL LETTER PSI 2CB1 ; [.2002.0020.0002] # COPTIC SMALL LETTER OOU 2CB0 ; [.2002.0020.0008] # COPTIC CAPITAL LETTER OOU 2CBF ; [.2003.0020.0002] # COPTIC SMALL LETTER OLD COPTIC OOU 2CBE ; [.2003.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC OOU 2CC1 ; [.2004.0020.0002] # COPTIC SMALL LETTER SAMPI 2CC0 ; [.2004.0020.0008] # COPTIC CAPITAL LETTER SAMPI 03E3 ; [.2005.0020.0002] # COPTIC SMALL LETTER SHEI 03E2 ; [.2005.0020.0008] # COPTIC CAPITAL LETTER SHEI 2CEC ; [.2006.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI 2CEB ; [.2006.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI 2CC3 ; [.2007.0020.0002] # COPTIC SMALL LETTER CROSSED SHEI 2CC2 ; [.2007.0020.0008] # COPTIC CAPITAL LETTER CROSSED SHEI 2CC5 ; [.2008.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHEI 2CC4 ; [.2008.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHEI 2CC7 ; [.2009.0020.0002] # COPTIC SMALL LETTER OLD COPTIC ESH 2CC6 ; [.2009.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC ESH 03E5 ; [.200A.0020.0002] # COPTIC SMALL LETTER FEI 03E4 ; [.200A.0020.0008] # COPTIC CAPITAL LETTER FEI 03E7 ; [.200B.0020.0002] # COPTIC SMALL LETTER KHEI 03E6 ; [.200B.0020.0008] # COPTIC CAPITAL LETTER KHEI 2CF3 ; [.200C.0020.0002] # COPTIC SMALL LETTER BOHAIRIC KHEI 2CF2 ; [.200C.0020.0008] # COPTIC CAPITAL LETTER BOHAIRIC KHEI 2CC9 ; [.200D.0020.0002] # COPTIC SMALL LETTER AKHMIMIC KHEI 2CC8 ; [.200D.0020.0008] # COPTIC CAPITAL LETTER AKHMIMIC KHEI 03E9 ; [.200E.0020.0002] # COPTIC SMALL LETTER HORI 03E8 ; [.200E.0020.0008] # COPTIC CAPITAL LETTER HORI 2CCB ; [.200F.0020.0002] # COPTIC SMALL LETTER DIALECT-P HORI 2CCA ; [.200F.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P HORI 2CCD ; [.2010.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HORI 2CCC ; [.2010.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HORI 2CCF ; [.2011.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HA 2CCE ; [.2011.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HA 2CD1 ; [.2012.0020.0002] # COPTIC SMALL LETTER L-SHAPED HA 2CD0 ; [.2012.0020.0008] # COPTIC CAPITAL LETTER L-SHAPED HA 2CD3 ; [.2013.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HEI 2CD2 ; [.2013.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HEI 2CD5 ; [.2014.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HAT 2CD4 ; [.2014.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HAT 03EB ; [.2015.0020.0002] # COPTIC SMALL LETTER GANGIA 03EA ; [.2015.0020.0008] # COPTIC CAPITAL LETTER GANGIA 2CEE ; [.2016.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA 2CED ; [.2016.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA 2CD7 ; [.2017.0020.0002] # COPTIC SMALL LETTER OLD COPTIC GANGIA 2CD6 ; [.2017.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC GANGIA 03ED ; [.2018.0020.0002] # COPTIC SMALL LETTER SHIMA 03EC ; [.2018.0020.0008] # COPTIC CAPITAL LETTER SHIMA 2CD9 ; [.2019.0020.0002] # COPTIC SMALL LETTER OLD COPTIC DJA 2CD8 ; [.2019.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC DJA 2CDB ; [.201A.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHIMA 2CDA ; [.201A.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHIMA 2CDD ; [.201B.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN SHIMA 2CDC ; [.201B.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA 03EF ; [.201C.0020.0002] # COPTIC SMALL LETTER DEI 03EE ; [.201C.0020.0008] # COPTIC CAPITAL LETTER DEI 2CB3 ; [.201D.0020.0002] # COPTIC SMALL LETTER DIALECT-P ALEF 2CB2 ; [.201D.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P ALEF 2CB5 ; [.201E.0020.0002] # COPTIC SMALL LETTER OLD COPTIC AIN 2CB4 ; [.201E.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC AIN 2CDF ; [.201F.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NGI 2CDE ; [.201F.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NGI 2CE1 ; [.2020.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NYI 2CE0 ; [.2020.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NYI 2CE3 ; [.2021.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN WAU 2CE2 ; [.2021.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN WAU 0430 ; [.2022.0020.0002] # CYRILLIC SMALL LETTER A 2DF6 ; [.2022.0020.0004] # COMBINING CYRILLIC LETTER A 0410 ; [.2022.0020.0008] # CYRILLIC CAPITAL LETTER A 04D1 ; [.2022.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER A WITH BREVE 04D0 ; [.2022.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER A WITH BREVE 04D3 ; [.2022.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER A WITH DIAERESIS 04D2 ; [.2022.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS 04D9 ; [.2026.0020.0002] # CYRILLIC SMALL LETTER SCHWA 04D8 ; [.2026.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA 04DB ; [.2026.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS 04DA ; [.2026.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS 04D5 ; [.202A.0020.0002] # CYRILLIC SMALL LIGATURE A IE 04D4 ; [.202A.0020.0008] # CYRILLIC CAPITAL LIGATURE A IE 0431 ; [.202E.0020.0002] # CYRILLIC SMALL LETTER BE 2DE0 ; [.202E.0020.0004] # COMBINING CYRILLIC LETTER BE 0411 ; [.202E.0020.0008] # CYRILLIC CAPITAL LETTER BE 0432 ; [.2032.0020.0002] # CYRILLIC SMALL LETTER VE 1C80 ; [.2032.0020.0004] # CYRILLIC SMALL LETTER ROUNDED VE 2DE1 ; [.2032.0020.0004] # COMBINING CYRILLIC LETTER VE 0412 ; [.2032.0020.0008] # CYRILLIC CAPITAL LETTER VE 0433 ; [.2036.0020.0002] # CYRILLIC SMALL LETTER GHE 2DE2 ; [.2036.0020.0004] # COMBINING CYRILLIC LETTER GHE 0413 ; [.2036.0020.0008] # CYRILLIC CAPITAL LETTER GHE 0453 ; [.2036.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER GJE 0403 ; [.2036.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER GJE 0491 ; [.2036.0020.0004][.0000.0111.0004] # CYRILLIC SMALL LETTER GHE WITH UPTURN 0490 ; [.2036.0020.000A][.0000.0111.0004] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN 0493 ; [.203A.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE 0492 ; [.203A.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE 04FB ; [.203E.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK 04FA ; [.203E.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK 0495 ; [.2042.0020.0002] # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK 0494 ; [.2042.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK 04F7 ; [.2046.0020.0002] # CYRILLIC SMALL LETTER GHE WITH DESCENDER 04F6 ; [.2046.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER 0434 ; [.204A.0020.0002] # CYRILLIC SMALL LETTER DE 1C81 ; [.204A.0020.0004] # CYRILLIC SMALL LETTER LONG-LEGGED DE 2DE3 ; [.204A.0020.0004] # COMBINING CYRILLIC LETTER DE 0414 ; [.204A.0020.0008] # CYRILLIC CAPITAL LETTER DE 0501 ; [.204E.0020.0002] # CYRILLIC SMALL LETTER KOMI DE 0500 ; [.204E.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DE A681 ; [.204F.0020.0002] # CYRILLIC SMALL LETTER DWE A680 ; [.204F.0020.0008] # CYRILLIC CAPITAL LETTER DWE 0452 ; [.2050.0020.0002] # CYRILLIC SMALL LETTER DJE 0402 ; [.2050.0020.0008] # CYRILLIC CAPITAL LETTER DJE A663 ; [.2054.0020.0002] # CYRILLIC SMALL LETTER SOFT DE A662 ; [.2054.0020.0008] # CYRILLIC CAPITAL LETTER SOFT DE 0503 ; [.2055.0020.0002] # CYRILLIC SMALL LETTER KOMI DJE 0502 ; [.2055.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DJE 0499 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER ZE WITH DESCENDER 0498 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER 0435 ; [.205A.0020.0002] # CYRILLIC SMALL LETTER IE 2DF7 ; [.205A.0020.0004] # COMBINING CYRILLIC LETTER IE 0415 ; [.205A.0020.0008] # CYRILLIC CAPITAL LETTER IE 0450 ; [.205A.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER IE WITH GRAVE 0400 ; [.205A.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER IE WITH GRAVE 04D7 ; [.205A.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER IE WITH BREVE 04D6 ; [.205A.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER IE WITH BREVE 0451 ; [.205A.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER IO 0401 ; [.205A.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER IO 0454 ; [.205E.0020.0002] # CYRILLIC SMALL LETTER UKRAINIAN IE A674 ; [.205E.0020.0004] # COMBINING CYRILLIC LETTER UKRAINIAN IE 0404 ; [.205E.0020.0008] # CYRILLIC CAPITAL LETTER UKRAINIAN IE 0436 ; [.2062.0020.0002] # CYRILLIC SMALL LETTER ZHE 2DE4 ; [.2062.0020.0004] # COMBINING CYRILLIC LETTER ZHE 0416 ; [.2062.0020.0008] # CYRILLIC CAPITAL LETTER ZHE 04C2 ; [.2062.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER ZHE WITH BREVE 04C1 ; [.2062.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER ZHE WITH BREVE 04DD ; [.2062.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS 04DC ; [.2062.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS 052B ; [.2066.0020.0002] # CYRILLIC SMALL LETTER DZZHE 052A ; [.2066.0020.0008] # CYRILLIC CAPITAL LETTER DZZHE A685 ; [.2067.0020.0002] # CYRILLIC SMALL LETTER ZHWE A684 ; [.2067.0020.0008] # CYRILLIC CAPITAL LETTER ZHWE 0497 ; [.2068.0020.0002] # CYRILLIC SMALL LETTER ZHE WITH DESCENDER 0496 ; [.2068.0020.0008] # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER 0437 ; [.206C.0020.0002] # CYRILLIC SMALL LETTER ZE 2DE5 ; [.206C.0020.0004] # COMBINING CYRILLIC LETTER ZE 0417 ; [.206C.0020.0008] # CYRILLIC CAPITAL LETTER ZE 04DF ; [.206C.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS 04DE ; [.206C.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS A641 ; [.2070.0020.0002] # CYRILLIC SMALL LETTER ZEMLYA A640 ; [.2070.0020.0008] # CYRILLIC CAPITAL LETTER ZEMLYA 0505 ; [.2071.0020.0002] # CYRILLIC SMALL LETTER KOMI ZJE 0504 ; [.2071.0020.0008] # CYRILLIC CAPITAL LETTER KOMI ZJE 0511 ; [.2072.0020.0002] # CYRILLIC SMALL LETTER REVERSED ZE 0510 ; [.2072.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED ZE A643 ; [.2073.0020.0002] # CYRILLIC SMALL LETTER DZELO A642 ; [.2073.0020.0008] # CYRILLIC CAPITAL LETTER DZELO 0455 ; [.2074.0020.0002] # CYRILLIC SMALL LETTER DZE 0405 ; [.2074.0020.0008] # CYRILLIC CAPITAL LETTER DZE A645 ; [.2078.0020.0002] # CYRILLIC SMALL LETTER REVERSED DZE A644 ; [.2078.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED DZE 04E1 ; [.2079.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN DZE 04E0 ; [.2079.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN DZE A689 ; [.207D.0020.0002] # CYRILLIC SMALL LETTER DZZE A688 ; [.207D.0020.0008] # CYRILLIC CAPITAL LETTER DZZE 0507 ; [.207E.0020.0002] # CYRILLIC SMALL LETTER KOMI DZJE 0506 ; [.207E.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DZJE A683 ; [.207F.0020.0002] # CYRILLIC SMALL LETTER DZWE A682 ; [.207F.0020.0008] # CYRILLIC CAPITAL LETTER DZWE 0438 ; [.2080.0020.0002] # CYRILLIC SMALL LETTER I A675 ; [.2080.0020.0004] # COMBINING CYRILLIC LETTER I 0418 ; [.2080.0020.0008] # CYRILLIC CAPITAL LETTER I 045D ; [.2080.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER I WITH GRAVE 040D ; [.2080.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER I WITH GRAVE 04E5 ; [.2080.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER I WITH DIAERESIS 04E4 ; [.2080.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER I WITH DIAERESIS 04E3 ; [.2080.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER I WITH MACRON 04E2 ; [.2080.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER I WITH MACRON 048B ; [.2084.0020.0002] # CYRILLIC SMALL LETTER SHORT I WITH TAIL 048A ; [.2084.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL 0456 ; [.2088.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0406 ; [.2088.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 0457 ; [.2088.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YI A676 ; [.2088.0020.0004][.0000.002B.0004] # COMBINING CYRILLIC LETTER YI 0407 ; [.2088.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YI A647 ; [.208C.0020.0002] # CYRILLIC SMALL LETTER IOTA A646 ; [.208C.0020.0008] # CYRILLIC CAPITAL LETTER IOTA 0439 ; [.208D.0020.0002] # CYRILLIC SMALL LETTER SHORT I 0438 0306 ; [.208D.0020.0002] # CYRILLIC SMALL LETTER SHORT I 0419 ; [.208D.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I 0418 0306 ; [.208D.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I 0458 ; [.2091.0020.0002] # CYRILLIC SMALL LETTER JE 0408 ; [.2091.0020.0008] # CYRILLIC CAPITAL LETTER JE A649 ; [.2095.0020.0002] # CYRILLIC SMALL LETTER DJERV 2DF8 ; [.2095.0020.0004] # COMBINING CYRILLIC LETTER DJERV A648 ; [.2095.0020.0008] # CYRILLIC CAPITAL LETTER DJERV 043A ; [.2096.0020.0002] # CYRILLIC SMALL LETTER KA 2DE6 ; [.2096.0020.0004] # COMBINING CYRILLIC LETTER KA 041A ; [.2096.0020.0008] # CYRILLIC CAPITAL LETTER KA 045C ; [.2096.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER KJE 040C ; [.2096.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER KJE 049B ; [.209A.0020.0002] # CYRILLIC SMALL LETTER KA WITH DESCENDER 049A ; [.209A.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH DESCENDER 04C4 ; [.209E.0020.0002] # CYRILLIC SMALL LETTER KA WITH HOOK 04C3 ; [.209E.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH HOOK 04A1 ; [.20A2.0020.0002] # CYRILLIC SMALL LETTER BASHKIR KA 04A0 ; [.20A2.0020.0008] # CYRILLIC CAPITAL LETTER BASHKIR KA 049F ; [.20A6.0020.0002] # CYRILLIC SMALL LETTER KA WITH STROKE 049E ; [.20A6.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH STROKE 049D ; [.20AA.0020.0002] # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE 049C ; [.20AA.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE 051F ; [.20AE.0020.0002] # CYRILLIC SMALL LETTER ALEUT KA 051E ; [.20AE.0020.0008] # CYRILLIC CAPITAL LETTER ALEUT KA 051B ; [.20AF.0020.0002] # CYRILLIC SMALL LETTER QA 051A ; [.20AF.0020.0008] # CYRILLIC CAPITAL LETTER QA 043B ; [.20B0.0020.0002] # CYRILLIC SMALL LETTER EL 2DE7 ; [.20B0.0020.0004] # COMBINING CYRILLIC LETTER EL 041B ; [.20B0.0020.0008] # CYRILLIC CAPITAL LETTER EL 1D2B ; [.20B4.0020.0002] # CYRILLIC LETTER SMALL CAPITAL EL 04C6 ; [.20B5.0020.0002] # CYRILLIC SMALL LETTER EL WITH TAIL 04C5 ; [.20B5.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH TAIL 052F ; [.20B9.0020.0002] # CYRILLIC SMALL LETTER EL WITH DESCENDER 052E ; [.20B9.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH DESCENDER 0513 ; [.20BA.0020.0002] # CYRILLIC SMALL LETTER EL WITH HOOK 0512 ; [.20BA.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH HOOK 0521 ; [.20BB.0020.0002] # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK 0520 ; [.20BB.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK 0459 ; [.20BC.0020.0002] # CYRILLIC SMALL LETTER LJE 0409 ; [.20BC.0020.0008] # CYRILLIC CAPITAL LETTER LJE A665 ; [.20C0.0020.0002] # CYRILLIC SMALL LETTER SOFT EL A664 ; [.20C0.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EL 0509 ; [.20C1.0020.0002] # CYRILLIC SMALL LETTER KOMI LJE 0508 ; [.20C1.0020.0008] # CYRILLIC CAPITAL LETTER KOMI LJE 0515 ; [.20C2.0020.0002] # CYRILLIC SMALL LETTER LHA 0514 ; [.20C2.0020.0008] # CYRILLIC CAPITAL LETTER LHA 043C ; [.20C3.0020.0002] # CYRILLIC SMALL LETTER EM 2DE8 ; [.20C3.0020.0004] # COMBINING CYRILLIC LETTER EM 041C ; [.20C3.0020.0008] # CYRILLIC CAPITAL LETTER EM 04CE ; [.20C7.0020.0002] # CYRILLIC SMALL LETTER EM WITH TAIL 04CD ; [.20C7.0020.0008] # CYRILLIC CAPITAL LETTER EM WITH TAIL A667 ; [.20CB.0020.0002] # CYRILLIC SMALL LETTER SOFT EM A666 ; [.20CB.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EM 043D ; [.20CC.0020.0002] # CYRILLIC SMALL LETTER EN 2DE9 ; [.20CC.0020.0004] # COMBINING CYRILLIC LETTER EN 041D ; [.20CC.0020.0008] # CYRILLIC CAPITAL LETTER EN 1D78 ; [.20CC.0020.0014] # MODIFIER LETTER CYRILLIC EN 0529 ; [.20D0.0020.0002] # CYRILLIC SMALL LETTER EN WITH LEFT HOOK 0528 ; [.20D0.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK 04CA ; [.20D1.0020.0002] # CYRILLIC SMALL LETTER EN WITH TAIL 04C9 ; [.20D1.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH TAIL 04A3 ; [.20D5.0020.0002] # CYRILLIC SMALL LETTER EN WITH DESCENDER 04A2 ; [.20D5.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH DESCENDER 04C8 ; [.20D9.0020.0002] # CYRILLIC SMALL LETTER EN WITH HOOK 04C7 ; [.20D9.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH HOOK 0523 ; [.20DD.0020.0002] # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK 0522 ; [.20DD.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK 04A5 ; [.20DE.0020.0002] # CYRILLIC SMALL LIGATURE EN GHE 04A4 ; [.20DE.0020.0008] # CYRILLIC CAPITAL LIGATURE EN GHE 045A ; [.20E2.0020.0002] # CYRILLIC SMALL LETTER NJE 040A ; [.20E2.0020.0008] # CYRILLIC CAPITAL LETTER NJE 050B ; [.20E6.0020.0002] # CYRILLIC SMALL LETTER KOMI NJE 050A ; [.20E6.0020.0008] # CYRILLIC CAPITAL LETTER KOMI NJE 043E ; [.20E7.0020.0002] # CYRILLIC SMALL LETTER O 1C82 ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER NARROW O 2DEA ; [.20E7.0020.0004] # COMBINING CYRILLIC LETTER O A669 ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER MONOCULAR O A66B ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER BINOCULAR O A66D ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O A66E ; [.20E7.0020.0004] # CYRILLIC LETTER MULTIOCULAR O A699 ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER DOUBLE O A69B ; [.20E7.0020.0004] # CYRILLIC SMALL LETTER CROSSED O 041E ; [.20E7.0020.0008] # CYRILLIC CAPITAL LETTER O A668 ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER MONOCULAR O A66A ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER BINOCULAR O A66C ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O A698 ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE O A69A ; [.20E7.0020.000A] # CYRILLIC CAPITAL LETTER CROSSED O 04E7 ; [.20E7.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER O WITH DIAERESIS 04E6 ; [.20E7.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS 04E9 ; [.20EB.0020.0002] # CYRILLIC SMALL LETTER BARRED O 04E8 ; [.20EB.0020.0008] # CYRILLIC CAPITAL LETTER BARRED O 04EB ; [.20EB.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS 04EA ; [.20EB.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS 043F ; [.20EF.0020.0002] # CYRILLIC SMALL LETTER PE 2DEB ; [.20EF.0020.0004] # COMBINING CYRILLIC LETTER PE 041F ; [.20EF.0020.0008] # CYRILLIC CAPITAL LETTER PE 0525 ; [.20F3.0020.0002] # CYRILLIC SMALL LETTER PE WITH DESCENDER 0524 ; [.20F3.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH DESCENDER 04A7 ; [.20F4.0020.0002] # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK 04A6 ; [.20F4.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK 0481 ; [.20F8.0020.0002] # CYRILLIC SMALL LETTER KOPPA 0480 ; [.20F8.0020.0008] # CYRILLIC CAPITAL LETTER KOPPA 0440 ; [.20FC.0020.0002] # CYRILLIC SMALL LETTER ER 2DEC ; [.20FC.0020.0004] # COMBINING CYRILLIC LETTER ER 0420 ; [.20FC.0020.0008] # CYRILLIC CAPITAL LETTER ER 048F ; [.2100.0020.0002] # CYRILLIC SMALL LETTER ER WITH TICK 048E ; [.2100.0020.0008] # CYRILLIC CAPITAL LETTER ER WITH TICK 0517 ; [.2104.0020.0002] # CYRILLIC SMALL LETTER RHA 0516 ; [.2104.0020.0008] # CYRILLIC CAPITAL LETTER RHA 0441 ; [.2105.0020.0002] # CYRILLIC SMALL LETTER ES 1C83 ; [.2105.0020.0004] # CYRILLIC SMALL LETTER WIDE ES 2DED ; [.2105.0020.0004] # COMBINING CYRILLIC LETTER ES 0421 ; [.2105.0020.0008] # CYRILLIC CAPITAL LETTER ES 2DF5 ; [.2105.0020.0004][.210E.0020.0004] # COMBINING CYRILLIC LETTER ES-TE 050D ; [.2109.0020.0002] # CYRILLIC SMALL LETTER KOMI SJE 050C ; [.2109.0020.0008] # CYRILLIC CAPITAL LETTER KOMI SJE 04AB ; [.210A.0020.0002] # CYRILLIC SMALL LETTER ES WITH DESCENDER 04AA ; [.210A.0020.0008] # CYRILLIC CAPITAL LETTER ES WITH DESCENDER 0442 ; [.210E.0020.0002] # CYRILLIC SMALL LETTER TE 1C84 ; [.210E.0020.0004] # CYRILLIC SMALL LETTER TALL TE 1C85 ; [.210E.0020.0004] # CYRILLIC SMALL LETTER THREE-LEGGED TE 2DEE ; [.210E.0020.0004] # COMBINING CYRILLIC LETTER TE 0422 ; [.210E.0020.0008] # CYRILLIC CAPITAL LETTER TE A68D ; [.2112.0020.0002] # CYRILLIC SMALL LETTER TWE A68C ; [.2112.0020.0008] # CYRILLIC CAPITAL LETTER TWE 050F ; [.2113.0020.0002] # CYRILLIC SMALL LETTER KOMI TJE 050E ; [.2113.0020.0008] # CYRILLIC CAPITAL LETTER KOMI TJE 04AD ; [.2114.0020.0002] # CYRILLIC SMALL LETTER TE WITH DESCENDER 04AC ; [.2114.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH DESCENDER A68B ; [.2118.0020.0002] # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK A68A ; [.2118.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK 045B ; [.2119.0020.0002] # CYRILLIC SMALL LETTER TSHE 040B ; [.2119.0020.0008] # CYRILLIC CAPITAL LETTER TSHE 0443 ; [.211D.0020.0002] # CYRILLIC SMALL LETTER U A677 ; [.211D.0020.0004] # COMBINING CYRILLIC LETTER U 0423 ; [.211D.0020.0008] # CYRILLIC CAPITAL LETTER U 045E ; [.211D.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT U 040E ; [.211D.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT U 04F1 ; [.211D.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER U WITH DIAERESIS 04F0 ; [.211D.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS 04F3 ; [.211D.0020.0002][.0000.002C.0002] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE 04F2 ; [.211D.0020.0008][.0000.002C.0002] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE 04EF ; [.211D.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER U WITH MACRON 04EE ; [.211D.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER U WITH MACRON 04AF ; [.2121.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U 04AE ; [.2121.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U 04B1 ; [.2125.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE 04B0 ; [.2125.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE A64B ; [.2129.0020.0002] # CYRILLIC SMALL LETTER MONOGRAPH UK 1C88 ; [.2129.0020.0004] # CYRILLIC SMALL LETTER UNBLENDED UK 2DF9 ; [.2129.0020.0004] # COMBINING CYRILLIC LETTER MONOGRAPH UK A64A ; [.2129.0020.0008] # CYRILLIC CAPITAL LETTER MONOGRAPH UK 0479 ; [.212A.0020.0002] # CYRILLIC SMALL LETTER UK 0478 ; [.212A.0020.0008] # CYRILLIC CAPITAL LETTER UK 0444 ; [.212E.0020.0002] # CYRILLIC SMALL LETTER EF A69E ; [.212E.0020.0004] # COMBINING CYRILLIC LETTER EF 0424 ; [.212E.0020.0008] # CYRILLIC CAPITAL LETTER EF 0445 ; [.2132.0020.0002] # CYRILLIC SMALL LETTER HA 2DEF ; [.2132.0020.0004] # COMBINING CYRILLIC LETTER HA 0425 ; [.2132.0020.0008] # CYRILLIC CAPITAL LETTER HA 04FD ; [.2136.0020.0002] # CYRILLIC SMALL LETTER HA WITH HOOK 04FC ; [.2136.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH HOOK 04FF ; [.213A.0020.0002] # CYRILLIC SMALL LETTER HA WITH STROKE 04FE ; [.213A.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH STROKE 04B3 ; [.213E.0020.0002] # CYRILLIC SMALL LETTER HA WITH DESCENDER 04B2 ; [.213E.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH DESCENDER 04BB ; [.2142.0020.0002] # CYRILLIC SMALL LETTER SHHA 04BA ; [.2142.0020.0008] # CYRILLIC CAPITAL LETTER SHHA 0527 ; [.2146.0020.0002] # CYRILLIC SMALL LETTER SHHA WITH DESCENDER 0526 ; [.2146.0020.0008] # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER A695 ; [.2147.0020.0002] # CYRILLIC SMALL LETTER HWE A694 ; [.2147.0020.0008] # CYRILLIC CAPITAL LETTER HWE 0461 ; [.2148.0020.0002] # CYRILLIC SMALL LETTER OMEGA A67B ; [.2148.0020.0004] # COMBINING CYRILLIC LETTER OMEGA 0460 ; [.2148.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA 047F ; [.214C.0020.0002] # CYRILLIC SMALL LETTER OT 047E ; [.214C.0020.0008] # CYRILLIC CAPITAL LETTER OT A64D ; [.2150.0020.0002] # CYRILLIC SMALL LETTER BROAD OMEGA A64C ; [.2150.0020.0008] # CYRILLIC CAPITAL LETTER BROAD OMEGA 047D ; [.2151.0020.0002] # CYRILLIC SMALL LETTER OMEGA WITH TITLO 047C ; [.2151.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO 047B ; [.2155.0020.0002] # CYRILLIC SMALL LETTER ROUND OMEGA 047A ; [.2155.0020.0008] # CYRILLIC CAPITAL LETTER ROUND OMEGA 0446 ; [.2159.0020.0002] # CYRILLIC SMALL LETTER TSE 2DF0 ; [.2159.0020.0004] # COMBINING CYRILLIC LETTER TSE 0426 ; [.2159.0020.0008] # CYRILLIC CAPITAL LETTER TSE A661 ; [.215D.0020.0002] # CYRILLIC SMALL LETTER REVERSED TSE A660 ; [.215D.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED TSE A68F ; [.215E.0020.0002] # CYRILLIC SMALL LETTER TSWE A68E ; [.215E.0020.0008] # CYRILLIC CAPITAL LETTER TSWE 04B5 ; [.215F.0020.0002] # CYRILLIC SMALL LIGATURE TE TSE 04B4 ; [.215F.0020.0008] # CYRILLIC CAPITAL LIGATURE TE TSE A691 ; [.2163.0020.0002] # CYRILLIC SMALL LETTER TSSE A690 ; [.2163.0020.0008] # CYRILLIC CAPITAL LETTER TSSE 0447 ; [.2164.0020.0002] # CYRILLIC SMALL LETTER CHE 2DF1 ; [.2164.0020.0004] # COMBINING CYRILLIC LETTER CHE 0427 ; [.2164.0020.0008] # CYRILLIC CAPITAL LETTER CHE 04F5 ; [.2164.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS 04F4 ; [.2164.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS 052D ; [.2168.0020.0002] # CYRILLIC SMALL LETTER DCHE 052C ; [.2168.0020.0008] # CYRILLIC CAPITAL LETTER DCHE A693 ; [.2169.0020.0002] # CYRILLIC SMALL LETTER TCHE A692 ; [.2169.0020.0008] # CYRILLIC CAPITAL LETTER TCHE 04B7 ; [.216A.0020.0002] # CYRILLIC SMALL LETTER CHE WITH DESCENDER 04B6 ; [.216A.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER 04CC ; [.216E.0020.0002] # CYRILLIC SMALL LETTER KHAKASSIAN CHE 04CB ; [.216E.0020.0008] # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE 04B9 ; [.2172.0020.0002] # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE 04B8 ; [.2172.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE A687 ; [.2176.0020.0002] # CYRILLIC SMALL LETTER CCHE A686 ; [.2176.0020.0008] # CYRILLIC CAPITAL LETTER CCHE 04BD ; [.2177.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE 04BC ; [.2177.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE 04BF ; [.217B.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER 04BE ; [.217B.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER 045F ; [.217F.0020.0002] # CYRILLIC SMALL LETTER DZHE 040F ; [.217F.0020.0008] # CYRILLIC CAPITAL LETTER DZHE 0448 ; [.2183.0020.0002] # CYRILLIC SMALL LETTER SHA 2DF2 ; [.2183.0020.0004] # COMBINING CYRILLIC LETTER SHA 0428 ; [.2183.0020.0008] # CYRILLIC CAPITAL LETTER SHA A697 ; [.2187.0020.0002] # CYRILLIC SMALL LETTER SHWE A696 ; [.2187.0020.0008] # CYRILLIC CAPITAL LETTER SHWE 0449 ; [.2188.0020.0002] # CYRILLIC SMALL LETTER SHCHA 2DF3 ; [.2188.0020.0004] # COMBINING CYRILLIC LETTER SHCHA 0429 ; [.2188.0020.0008] # CYRILLIC CAPITAL LETTER SHCHA A64F ; [.218C.0020.0002] # CYRILLIC SMALL LETTER NEUTRAL YER A64E ; [.218C.0020.0008] # CYRILLIC CAPITAL LETTER NEUTRAL YER 2E2F ; [.218D.0020.0002] # VERTICAL TILDE A67F ; [.218E.0020.0002] # CYRILLIC PAYEROK 044A ; [.218F.0020.0002] # CYRILLIC SMALL LETTER HARD SIGN 1C86 ; [.218F.0020.0004] # CYRILLIC SMALL LETTER TALL HARD SIGN A678 ; [.218F.0020.0004] # COMBINING CYRILLIC LETTER HARD SIGN 042A ; [.218F.0020.0008] # CYRILLIC CAPITAL LETTER HARD SIGN A69C ; [.218F.0020.0014] # MODIFIER LETTER CYRILLIC HARD SIGN A651 ; [.2193.0020.0002] # CYRILLIC SMALL LETTER YERU WITH BACK YER A650 ; [.2193.0020.0008] # CYRILLIC CAPITAL LETTER YERU WITH BACK YER 044B ; [.2194.0020.0002] # CYRILLIC SMALL LETTER YERU A679 ; [.2194.0020.0004] # COMBINING CYRILLIC LETTER YERU 042B ; [.2194.0020.0008] # CYRILLIC CAPITAL LETTER YERU 04F9 ; [.2194.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS 04F8 ; [.2194.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS 044C ; [.2198.0020.0002] # CYRILLIC SMALL LETTER SOFT SIGN A67A ; [.2198.0020.0004] # COMBINING CYRILLIC LETTER SOFT SIGN 042C ; [.2198.0020.0008] # CYRILLIC CAPITAL LETTER SOFT SIGN A69D ; [.2198.0020.0014] # MODIFIER LETTER CYRILLIC SOFT SIGN 048D ; [.219C.0020.0002] # CYRILLIC SMALL LETTER SEMISOFT SIGN 048C ; [.219C.0020.0008] # CYRILLIC CAPITAL LETTER SEMISOFT SIGN 0463 ; [.21A0.0020.0002] # CYRILLIC SMALL LETTER YAT 1C87 ; [.21A0.0020.0004] # CYRILLIC SMALL LETTER TALL YAT 2DFA ; [.21A0.0020.0004] # COMBINING CYRILLIC LETTER YAT 0462 ; [.21A0.0020.0008] # CYRILLIC CAPITAL LETTER YAT A653 ; [.21A4.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED YAT A652 ; [.21A4.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED YAT 044D ; [.21A5.0020.0002] # CYRILLIC SMALL LETTER E 042D ; [.21A5.0020.0008] # CYRILLIC CAPITAL LETTER E 04ED ; [.21A5.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER E WITH DIAERESIS 04EC ; [.21A5.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS 044E ; [.21A9.0020.0002] # CYRILLIC SMALL LETTER YU 2DFB ; [.21A9.0020.0004] # COMBINING CYRILLIC LETTER YU 042E ; [.21A9.0020.0008] # CYRILLIC CAPITAL LETTER YU A655 ; [.21AD.0020.0002] # CYRILLIC SMALL LETTER REVERSED YU A654 ; [.21AD.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED YU A657 ; [.21AE.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED A 2DFC ; [.21AE.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED A A656 ; [.21AE.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED A 044F ; [.21AF.0020.0002] # CYRILLIC SMALL LETTER YA 042F ; [.21AF.0020.0008] # CYRILLIC CAPITAL LETTER YA 0519 ; [.21B3.0020.0002] # CYRILLIC SMALL LETTER YAE 0518 ; [.21B3.0020.0008] # CYRILLIC CAPITAL LETTER YAE 0465 ; [.21B4.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED E A69F ; [.21B4.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED E 0464 ; [.21B4.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED E 0467 ; [.21B8.0020.0002] # CYRILLIC SMALL LETTER LITTLE YUS 2DFD ; [.21B8.0020.0004] # COMBINING CYRILLIC LETTER LITTLE YUS 0466 ; [.21B8.0020.0008] # CYRILLIC CAPITAL LETTER LITTLE YUS A659 ; [.21BC.0020.0002] # CYRILLIC SMALL LETTER CLOSED LITTLE YUS A658 ; [.21BC.0020.0008] # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS 046B ; [.21BD.0020.0002] # CYRILLIC SMALL LETTER BIG YUS 2DFE ; [.21BD.0020.0004] # COMBINING CYRILLIC LETTER BIG YUS 046A ; [.21BD.0020.0008] # CYRILLIC CAPITAL LETTER BIG YUS A65B ; [.21C1.0020.0002] # CYRILLIC SMALL LETTER BLENDED YUS A65A ; [.21C1.0020.0008] # CYRILLIC CAPITAL LETTER BLENDED YUS 0469 ; [.21C2.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS 0468 ; [.21C2.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS A65D ; [.21C6.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS A65C ; [.21C6.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS 046D ; [.21C7.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED BIG YUS 2DFF ; [.21C7.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED BIG YUS 046C ; [.21C7.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS 046F ; [.21CB.0020.0002] # CYRILLIC SMALL LETTER KSI 046E ; [.21CB.0020.0008] # CYRILLIC CAPITAL LETTER KSI 0471 ; [.21CF.0020.0002] # CYRILLIC SMALL LETTER PSI 0470 ; [.21CF.0020.0008] # CYRILLIC CAPITAL LETTER PSI 0473 ; [.21D3.0020.0002] # CYRILLIC SMALL LETTER FITA 2DF4 ; [.21D3.0020.0004] # COMBINING CYRILLIC LETTER FITA 0472 ; [.21D3.0020.0008] # CYRILLIC CAPITAL LETTER FITA 0475 ; [.21D7.0020.0002] # CYRILLIC SMALL LETTER IZHITSA 0474 ; [.21D7.0020.0008] # CYRILLIC CAPITAL LETTER IZHITSA 0477 ; [.21D7.0020.0002][.0000.003C.0002] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT 0476 ; [.21D7.0020.0008][.0000.003C.0002] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT A65F ; [.21DB.0020.0002] # CYRILLIC SMALL LETTER YN A65E ; [.21DB.0020.0008] # CYRILLIC CAPITAL LETTER YN 04A9 ; [.21DC.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN HA 04A8 ; [.21DC.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN HA 051D ; [.21E0.0020.0002] # CYRILLIC SMALL LETTER WE 051C ; [.21E0.0020.0008] # CYRILLIC CAPITAL LETTER WE 04CF ; [.21E1.0020.0002] # CYRILLIC SMALL LETTER PALOCHKA 04C0 ; [.21E1.0020.0008] # CYRILLIC LETTER PALOCHKA 2C30 ; [.21E5.0020.0002] # GLAGOLITIC SMALL LETTER AZU 1E000 ; [.21E5.0020.0004] # COMBINING GLAGOLITIC LETTER AZU 2C00 ; [.21E5.0020.0008] # GLAGOLITIC CAPITAL LETTER AZU 2C31 ; [.21E6.0020.0002] # GLAGOLITIC SMALL LETTER BUKY 1E001 ; [.21E6.0020.0004] # COMBINING GLAGOLITIC LETTER BUKY 2C01 ; [.21E6.0020.0008] # GLAGOLITIC CAPITAL LETTER BUKY 2C32 ; [.21E7.0020.0002] # GLAGOLITIC SMALL LETTER VEDE 1E002 ; [.21E7.0020.0004] # COMBINING GLAGOLITIC LETTER VEDE 2C02 ; [.21E7.0020.0008] # GLAGOLITIC CAPITAL LETTER VEDE 2C33 ; [.21E8.0020.0002] # GLAGOLITIC SMALL LETTER GLAGOLI 1E003 ; [.21E8.0020.0004] # COMBINING GLAGOLITIC LETTER GLAGOLI 2C03 ; [.21E8.0020.0008] # GLAGOLITIC CAPITAL LETTER GLAGOLI 2C34 ; [.21E9.0020.0002] # GLAGOLITIC SMALL LETTER DOBRO 1E004 ; [.21E9.0020.0004] # COMBINING GLAGOLITIC LETTER DOBRO 2C04 ; [.21E9.0020.0008] # GLAGOLITIC CAPITAL LETTER DOBRO 2C35 ; [.21EA.0020.0002] # GLAGOLITIC SMALL LETTER YESTU 1E005 ; [.21EA.0020.0004] # COMBINING GLAGOLITIC LETTER YESTU 2C05 ; [.21EA.0020.0008] # GLAGOLITIC CAPITAL LETTER YESTU 2C36 ; [.21EB.0020.0002] # GLAGOLITIC SMALL LETTER ZHIVETE 1E006 ; [.21EB.0020.0004] # COMBINING GLAGOLITIC LETTER ZHIVETE 2C06 ; [.21EB.0020.0008] # GLAGOLITIC CAPITAL LETTER ZHIVETE 2C37 ; [.21EC.0020.0002] # GLAGOLITIC SMALL LETTER DZELO 2C07 ; [.21EC.0020.0008] # GLAGOLITIC CAPITAL LETTER DZELO 2C38 ; [.21ED.0020.0002] # GLAGOLITIC SMALL LETTER ZEMLJA 1E008 ; [.21ED.0020.0004] # COMBINING GLAGOLITIC LETTER ZEMLJA 2C08 ; [.21ED.0020.0008] # GLAGOLITIC CAPITAL LETTER ZEMLJA 2C39 ; [.21EE.0020.0002] # GLAGOLITIC SMALL LETTER IZHE 1E009 ; [.21EE.0020.0004] # COMBINING GLAGOLITIC LETTER IZHE 2C09 ; [.21EE.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHE 2C3A ; [.21EF.0020.0002] # GLAGOLITIC SMALL LETTER INITIAL IZHE 1E00A ; [.21EF.0020.0004] # COMBINING GLAGOLITIC LETTER INITIAL IZHE 2C0A ; [.21EF.0020.0008] # GLAGOLITIC CAPITAL LETTER INITIAL IZHE 2C3B ; [.21F0.0020.0002] # GLAGOLITIC SMALL LETTER I 1E00B ; [.21F0.0020.0004] # COMBINING GLAGOLITIC LETTER I 2C0B ; [.21F0.0020.0008] # GLAGOLITIC CAPITAL LETTER I 2C3C ; [.21F1.0020.0002] # GLAGOLITIC SMALL LETTER DJERVI 1E00C ; [.21F1.0020.0004] # COMBINING GLAGOLITIC LETTER DJERVI 2C0C ; [.21F1.0020.0008] # GLAGOLITIC CAPITAL LETTER DJERVI 2C3D ; [.21F2.0020.0002] # GLAGOLITIC SMALL LETTER KAKO 1E00D ; [.21F2.0020.0004] # COMBINING GLAGOLITIC LETTER KAKO 2C0D ; [.21F2.0020.0008] # GLAGOLITIC CAPITAL LETTER KAKO 2C3E ; [.21F3.0020.0002] # GLAGOLITIC SMALL LETTER LJUDIJE 1E00E ; [.21F3.0020.0004] # COMBINING GLAGOLITIC LETTER LJUDIJE 2C0E ; [.21F3.0020.0008] # GLAGOLITIC CAPITAL LETTER LJUDIJE 2C3F ; [.21F4.0020.0002] # GLAGOLITIC SMALL LETTER MYSLITE 1E00F ; [.21F4.0020.0004] # COMBINING GLAGOLITIC LETTER MYSLITE 2C0F ; [.21F4.0020.0008] # GLAGOLITIC CAPITAL LETTER MYSLITE 2C40 ; [.21F5.0020.0002] # GLAGOLITIC SMALL LETTER NASHI 1E010 ; [.21F5.0020.0004] # COMBINING GLAGOLITIC LETTER NASHI 2C10 ; [.21F5.0020.0008] # GLAGOLITIC CAPITAL LETTER NASHI 2C41 ; [.21F6.0020.0002] # GLAGOLITIC SMALL LETTER ONU 1E011 ; [.21F6.0020.0004] # COMBINING GLAGOLITIC LETTER ONU 2C11 ; [.21F6.0020.0008] # GLAGOLITIC CAPITAL LETTER ONU 2C42 ; [.21F7.0020.0002] # GLAGOLITIC SMALL LETTER POKOJI 1E012 ; [.21F7.0020.0004] # COMBINING GLAGOLITIC LETTER POKOJI 2C12 ; [.21F7.0020.0008] # GLAGOLITIC CAPITAL LETTER POKOJI 2C43 ; [.21F8.0020.0002] # GLAGOLITIC SMALL LETTER RITSI 1E013 ; [.21F8.0020.0004] # COMBINING GLAGOLITIC LETTER RITSI 2C13 ; [.21F8.0020.0008] # GLAGOLITIC CAPITAL LETTER RITSI 2C44 ; [.21F9.0020.0002] # GLAGOLITIC SMALL LETTER SLOVO 1E014 ; [.21F9.0020.0004] # COMBINING GLAGOLITIC LETTER SLOVO 2C14 ; [.21F9.0020.0008] # GLAGOLITIC CAPITAL LETTER SLOVO 2C45 ; [.21FA.0020.0002] # GLAGOLITIC SMALL LETTER TVRIDO 1E015 ; [.21FA.0020.0004] # COMBINING GLAGOLITIC LETTER TVRIDO 2C15 ; [.21FA.0020.0008] # GLAGOLITIC CAPITAL LETTER TVRIDO 2C46 ; [.21FB.0020.0002] # GLAGOLITIC SMALL LETTER UKU 1E016 ; [.21FB.0020.0004] # COMBINING GLAGOLITIC LETTER UKU 2C16 ; [.21FB.0020.0008] # GLAGOLITIC CAPITAL LETTER UKU 2C47 ; [.21FC.0020.0002] # GLAGOLITIC SMALL LETTER FRITU 1E017 ; [.21FC.0020.0004] # COMBINING GLAGOLITIC LETTER FRITU 2C17 ; [.21FC.0020.0008] # GLAGOLITIC CAPITAL LETTER FRITU 2C48 ; [.21FD.0020.0002] # GLAGOLITIC SMALL LETTER HERU 1E018 ; [.21FD.0020.0004] # COMBINING GLAGOLITIC LETTER HERU 2C18 ; [.21FD.0020.0008] # GLAGOLITIC CAPITAL LETTER HERU 2C49 ; [.21FE.0020.0002] # GLAGOLITIC SMALL LETTER OTU 2C19 ; [.21FE.0020.0008] # GLAGOLITIC CAPITAL LETTER OTU 2C4A ; [.21FF.0020.0002] # GLAGOLITIC SMALL LETTER PE 2C1A ; [.21FF.0020.0008] # GLAGOLITIC CAPITAL LETTER PE 2C4B ; [.2200.0020.0002] # GLAGOLITIC SMALL LETTER SHTA 1E01B ; [.2200.0020.0004] # COMBINING GLAGOLITIC LETTER SHTA 2C1B ; [.2200.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTA 2C4C ; [.2201.0020.0002] # GLAGOLITIC SMALL LETTER TSI 1E01C ; [.2201.0020.0004] # COMBINING GLAGOLITIC LETTER TSI 2C1C ; [.2201.0020.0008] # GLAGOLITIC CAPITAL LETTER TSI 2C4D ; [.2202.0020.0002] # GLAGOLITIC SMALL LETTER CHRIVI 1E01D ; [.2202.0020.0004] # COMBINING GLAGOLITIC LETTER CHRIVI 2C1D ; [.2202.0020.0008] # GLAGOLITIC CAPITAL LETTER CHRIVI 2C4E ; [.2203.0020.0002] # GLAGOLITIC SMALL LETTER SHA 1E01E ; [.2203.0020.0004] # COMBINING GLAGOLITIC LETTER SHA 2C1E ; [.2203.0020.0008] # GLAGOLITIC CAPITAL LETTER SHA 2C4F ; [.2204.0020.0002] # GLAGOLITIC SMALL LETTER YERU 1E01F ; [.2204.0020.0004] # COMBINING GLAGOLITIC LETTER YERU 2C1F ; [.2204.0020.0008] # GLAGOLITIC CAPITAL LETTER YERU 2C50 ; [.2205.0020.0002] # GLAGOLITIC SMALL LETTER YERI 1E020 ; [.2205.0020.0004] # COMBINING GLAGOLITIC LETTER YERI 2C20 ; [.2205.0020.0008] # GLAGOLITIC CAPITAL LETTER YERI 2C51 ; [.2206.0020.0002] # GLAGOLITIC SMALL LETTER YATI 1E021 ; [.2206.0020.0004] # COMBINING GLAGOLITIC LETTER YATI 2C21 ; [.2206.0020.0008] # GLAGOLITIC CAPITAL LETTER YATI 2C52 ; [.2207.0020.0002] # GLAGOLITIC SMALL LETTER SPIDERY HA 2C22 ; [.2207.0020.0008] # GLAGOLITIC CAPITAL LETTER SPIDERY HA 2C53 ; [.2208.0020.0002] # GLAGOLITIC SMALL LETTER YU 1E023 ; [.2208.0020.0004] # COMBINING GLAGOLITIC LETTER YU 2C23 ; [.2208.0020.0008] # GLAGOLITIC CAPITAL LETTER YU 2C54 ; [.2209.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS 1E024 ; [.2209.0020.0004] # COMBINING GLAGOLITIC LETTER SMALL YUS 2C24 ; [.2209.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS 2C55 ; [.220A.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL 2C25 ; [.220A.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL 2C56 ; [.220B.0020.0002] # GLAGOLITIC SMALL LETTER YO 1E026 ; [.220B.0020.0004] # COMBINING GLAGOLITIC LETTER YO 2C26 ; [.220B.0020.0008] # GLAGOLITIC CAPITAL LETTER YO 2C57 ; [.220C.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS 1E027 ; [.220C.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS 2C27 ; [.220C.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS 2C58 ; [.220D.0020.0002] # GLAGOLITIC SMALL LETTER BIG YUS 1E028 ; [.220D.0020.0004] # COMBINING GLAGOLITIC LETTER BIG YUS 2C28 ; [.220D.0020.0008] # GLAGOLITIC CAPITAL LETTER BIG YUS 2C59 ; [.220E.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED BIG YUS 1E029 ; [.220E.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED BIG YUS 2C29 ; [.220E.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS 2C5A ; [.220F.0020.0002] # GLAGOLITIC SMALL LETTER FITA 1E02A ; [.220F.0020.0004] # COMBINING GLAGOLITIC LETTER FITA 2C2A ; [.220F.0020.0008] # GLAGOLITIC CAPITAL LETTER FITA 2C5B ; [.2210.0020.0002] # GLAGOLITIC SMALL LETTER IZHITSA 2C2B ; [.2210.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHITSA 2C5C ; [.2211.0020.0002] # GLAGOLITIC SMALL LETTER SHTAPIC 2C2C ; [.2211.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTAPIC 2C5D ; [.2212.0020.0002] # GLAGOLITIC SMALL LETTER TROKUTASTI A 2C2D ; [.2212.0020.0008] # GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C5E ; [.2213.0020.0002] # GLAGOLITIC SMALL LETTER LATINATE MYSLITE 2C2E ; [.2213.0020.0008] # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE 10350 ; [.2214.0020.0002] # OLD PERMIC LETTER AN 10376 ; [.2214.0020.0004] # COMBINING OLD PERMIC LETTER AN 10351 ; [.2215.0020.0002] # OLD PERMIC LETTER BUR 10352 ; [.2216.0020.0002] # OLD PERMIC LETTER GAI 10353 ; [.2217.0020.0002] # OLD PERMIC LETTER DOI 10377 ; [.2217.0020.0004] # COMBINING OLD PERMIC LETTER DOI 10354 ; [.2218.0020.0002] # OLD PERMIC LETTER E 10355 ; [.2219.0020.0002] # OLD PERMIC LETTER ZHOI 10356 ; [.221A.0020.0002] # OLD PERMIC LETTER DZHOI 10357 ; [.221B.0020.0002] # OLD PERMIC LETTER ZATA 10378 ; [.221B.0020.0004] # COMBINING OLD PERMIC LETTER ZATA 10358 ; [.221C.0020.0002] # OLD PERMIC LETTER DZITA 10359 ; [.221D.0020.0002] # OLD PERMIC LETTER I 1035A ; [.221E.0020.0002] # OLD PERMIC LETTER KOKE 1035B ; [.221F.0020.0002] # OLD PERMIC LETTER LEI 1035C ; [.2220.0020.0002] # OLD PERMIC LETTER MENOE 1035D ; [.2221.0020.0002] # OLD PERMIC LETTER NENOE 10379 ; [.2221.0020.0004] # COMBINING OLD PERMIC LETTER NENOE 1035E ; [.2222.0020.0002] # OLD PERMIC LETTER VOOI 1035F ; [.2223.0020.0002] # OLD PERMIC LETTER PEEI 10360 ; [.2224.0020.0002] # OLD PERMIC LETTER REI 10361 ; [.2225.0020.0002] # OLD PERMIC LETTER SII 1037A ; [.2225.0020.0004] # COMBINING OLD PERMIC LETTER SII 10362 ; [.2226.0020.0002] # OLD PERMIC LETTER TAI 10363 ; [.2227.0020.0002] # OLD PERMIC LETTER U 10364 ; [.2228.0020.0002] # OLD PERMIC LETTER CHERY 10365 ; [.2229.0020.0002] # OLD PERMIC LETTER SHOOI 10366 ; [.222A.0020.0002] # OLD PERMIC LETTER SHCHOOI 10367 ; [.222B.0020.0002] # OLD PERMIC LETTER YRY 10368 ; [.222C.0020.0002] # OLD PERMIC LETTER YERU 10369 ; [.222D.0020.0002] # OLD PERMIC LETTER O 1036A ; [.222E.0020.0002] # OLD PERMIC LETTER OO 1036B ; [.222F.0020.0002] # OLD PERMIC LETTER EF 1036C ; [.2230.0020.0002] # OLD PERMIC LETTER HA 1036D ; [.2231.0020.0002] # OLD PERMIC LETTER TSIU 1036E ; [.2232.0020.0002] # OLD PERMIC LETTER VER 1036F ; [.2233.0020.0002] # OLD PERMIC LETTER YER 10370 ; [.2234.0020.0002] # OLD PERMIC LETTER YERI 10371 ; [.2235.0020.0002] # OLD PERMIC LETTER YAT 10372 ; [.2236.0020.0002] # OLD PERMIC LETTER IE 10373 ; [.2237.0020.0002] # OLD PERMIC LETTER YU 10374 ; [.2238.0020.0002] # OLD PERMIC LETTER YA 10375 ; [.2239.0020.0002] # OLD PERMIC LETTER IA 10D0 ; [.223A.0020.0002] # GEORGIAN LETTER AN 2D00 ; [.223B.0020.0002] # GEORGIAN SMALL LETTER AN 10A0 ; [.223B.0020.0008] # GEORGIAN CAPITAL LETTER AN 10D1 ; [.223C.0020.0002] # GEORGIAN LETTER BAN 2D01 ; [.223D.0020.0002] # GEORGIAN SMALL LETTER BAN 10A1 ; [.223D.0020.0008] # GEORGIAN CAPITAL LETTER BAN 10D2 ; [.223E.0020.0002] # GEORGIAN LETTER GAN 2D02 ; [.223F.0020.0002] # GEORGIAN SMALL LETTER GAN 10A2 ; [.223F.0020.0008] # GEORGIAN CAPITAL LETTER GAN 10D3 ; [.2240.0020.0002] # GEORGIAN LETTER DON 2D03 ; [.2241.0020.0002] # GEORGIAN SMALL LETTER DON 10A3 ; [.2241.0020.0008] # GEORGIAN CAPITAL LETTER DON 10D4 ; [.2242.0020.0002] # GEORGIAN LETTER EN 2D04 ; [.2243.0020.0002] # GEORGIAN SMALL LETTER EN 10A4 ; [.2243.0020.0008] # GEORGIAN CAPITAL LETTER EN 10D5 ; [.2244.0020.0002] # GEORGIAN LETTER VIN 2D05 ; [.2245.0020.0002] # GEORGIAN SMALL LETTER VIN 10A5 ; [.2245.0020.0008] # GEORGIAN CAPITAL LETTER VIN 10D6 ; [.2246.0020.0002] # GEORGIAN LETTER ZEN 2D06 ; [.2247.0020.0002] # GEORGIAN SMALL LETTER ZEN 10A6 ; [.2247.0020.0008] # GEORGIAN CAPITAL LETTER ZEN 10F1 ; [.2248.0020.0002] # GEORGIAN LETTER HE 2D21 ; [.2249.0020.0002] # GEORGIAN SMALL LETTER HE 10C1 ; [.2249.0020.0008] # GEORGIAN CAPITAL LETTER HE 10D7 ; [.224A.0020.0002] # GEORGIAN LETTER TAN 2D07 ; [.224B.0020.0002] # GEORGIAN SMALL LETTER TAN 10A7 ; [.224B.0020.0008] # GEORGIAN CAPITAL LETTER TAN 10D8 ; [.224C.0020.0002] # GEORGIAN LETTER IN 2D08 ; [.224D.0020.0002] # GEORGIAN SMALL LETTER IN 10A8 ; [.224D.0020.0008] # GEORGIAN CAPITAL LETTER IN 10D9 ; [.224E.0020.0002] # GEORGIAN LETTER KAN 2D09 ; [.224F.0020.0002] # GEORGIAN SMALL LETTER KAN 10A9 ; [.224F.0020.0008] # GEORGIAN CAPITAL LETTER KAN 10DA ; [.2250.0020.0002] # GEORGIAN LETTER LAS 2D0A ; [.2251.0020.0002] # GEORGIAN SMALL LETTER LAS 10AA ; [.2251.0020.0008] # GEORGIAN CAPITAL LETTER LAS 10DB ; [.2252.0020.0002] # GEORGIAN LETTER MAN 2D0B ; [.2253.0020.0002] # GEORGIAN SMALL LETTER MAN 10AB ; [.2253.0020.0008] # GEORGIAN CAPITAL LETTER MAN 10DC ; [.2254.0020.0002] # GEORGIAN LETTER NAR 10FC ; [.2254.0020.0014] # MODIFIER LETTER GEORGIAN NAR 2D0C ; [.2255.0020.0002] # GEORGIAN SMALL LETTER NAR 10AC ; [.2255.0020.0008] # GEORGIAN CAPITAL LETTER NAR 10F2 ; [.2256.0020.0002] # GEORGIAN LETTER HIE 2D22 ; [.2257.0020.0002] # GEORGIAN SMALL LETTER HIE 10C2 ; [.2257.0020.0008] # GEORGIAN CAPITAL LETTER HIE 10DD ; [.2258.0020.0002] # GEORGIAN LETTER ON 2D0D ; [.2259.0020.0002] # GEORGIAN SMALL LETTER ON 10AD ; [.2259.0020.0008] # GEORGIAN CAPITAL LETTER ON 10DE ; [.225A.0020.0002] # GEORGIAN LETTER PAR 2D0E ; [.225B.0020.0002] # GEORGIAN SMALL LETTER PAR 10AE ; [.225B.0020.0008] # GEORGIAN CAPITAL LETTER PAR 10DF ; [.225C.0020.0002] # GEORGIAN LETTER ZHAR 2D0F ; [.225D.0020.0002] # GEORGIAN SMALL LETTER ZHAR 10AF ; [.225D.0020.0008] # GEORGIAN CAPITAL LETTER ZHAR 10E0 ; [.225E.0020.0002] # GEORGIAN LETTER RAE 2D10 ; [.225F.0020.0002] # GEORGIAN SMALL LETTER RAE 10B0 ; [.225F.0020.0008] # GEORGIAN CAPITAL LETTER RAE 10E1 ; [.2260.0020.0002] # GEORGIAN LETTER SAN 2D11 ; [.2261.0020.0002] # GEORGIAN SMALL LETTER SAN 10B1 ; [.2261.0020.0008] # GEORGIAN CAPITAL LETTER SAN 10E2 ; [.2262.0020.0002] # GEORGIAN LETTER TAR 2D12 ; [.2263.0020.0002] # GEORGIAN SMALL LETTER TAR 10B2 ; [.2263.0020.0008] # GEORGIAN CAPITAL LETTER TAR 10F3 ; [.2264.0020.0002] # GEORGIAN LETTER WE 2D23 ; [.2265.0020.0002] # GEORGIAN SMALL LETTER WE 10C3 ; [.2265.0020.0008] # GEORGIAN CAPITAL LETTER WE 10E3 ; [.2266.0020.0002] # GEORGIAN LETTER UN 2D13 ; [.2267.0020.0002] # GEORGIAN SMALL LETTER UN 10B3 ; [.2267.0020.0008] # GEORGIAN CAPITAL LETTER UN 10E4 ; [.2268.0020.0002] # GEORGIAN LETTER PHAR 2D14 ; [.2269.0020.0002] # GEORGIAN SMALL LETTER PHAR 10B4 ; [.2269.0020.0008] # GEORGIAN CAPITAL LETTER PHAR 10E5 ; [.226A.0020.0002] # GEORGIAN LETTER KHAR 2D15 ; [.226B.0020.0002] # GEORGIAN SMALL LETTER KHAR 10B5 ; [.226B.0020.0008] # GEORGIAN CAPITAL LETTER KHAR 10E6 ; [.226C.0020.0002] # GEORGIAN LETTER GHAN 2D16 ; [.226D.0020.0002] # GEORGIAN SMALL LETTER GHAN 10B6 ; [.226D.0020.0008] # GEORGIAN CAPITAL LETTER GHAN 10E7 ; [.226E.0020.0002] # GEORGIAN LETTER QAR 2D17 ; [.226F.0020.0002] # GEORGIAN SMALL LETTER QAR 10B7 ; [.226F.0020.0008] # GEORGIAN CAPITAL LETTER QAR 10E8 ; [.2270.0020.0002] # GEORGIAN LETTER SHIN 2D18 ; [.2271.0020.0002] # GEORGIAN SMALL LETTER SHIN 10B8 ; [.2271.0020.0008] # GEORGIAN CAPITAL LETTER SHIN 10E9 ; [.2272.0020.0002] # GEORGIAN LETTER CHIN 2D19 ; [.2273.0020.0002] # GEORGIAN SMALL LETTER CHIN 10B9 ; [.2273.0020.0008] # GEORGIAN CAPITAL LETTER CHIN 10EA ; [.2274.0020.0002] # GEORGIAN LETTER CAN 2D1A ; [.2275.0020.0002] # GEORGIAN SMALL LETTER CAN 10BA ; [.2275.0020.0008] # GEORGIAN CAPITAL LETTER CAN 10EB ; [.2276.0020.0002] # GEORGIAN LETTER JIL 2D1B ; [.2277.0020.0002] # GEORGIAN SMALL LETTER JIL 10BB ; [.2277.0020.0008] # GEORGIAN CAPITAL LETTER JIL 10EC ; [.2278.0020.0002] # GEORGIAN LETTER CIL 2D1C ; [.2279.0020.0002] # GEORGIAN SMALL LETTER CIL 10BC ; [.2279.0020.0008] # GEORGIAN CAPITAL LETTER CIL 10ED ; [.227A.0020.0002] # GEORGIAN LETTER CHAR 2D1D ; [.227B.0020.0002] # GEORGIAN SMALL LETTER CHAR 10BD ; [.227B.0020.0008] # GEORGIAN CAPITAL LETTER CHAR 10EE ; [.227C.0020.0002] # GEORGIAN LETTER XAN 2D1E ; [.227D.0020.0002] # GEORGIAN SMALL LETTER XAN 10BE ; [.227D.0020.0008] # GEORGIAN CAPITAL LETTER XAN 10F4 ; [.227E.0020.0002] # GEORGIAN LETTER HAR 2D24 ; [.227F.0020.0002] # GEORGIAN SMALL LETTER HAR 10C4 ; [.227F.0020.0008] # GEORGIAN CAPITAL LETTER HAR 10EF ; [.2280.0020.0002] # GEORGIAN LETTER JHAN 2D1F ; [.2281.0020.0002] # GEORGIAN SMALL LETTER JHAN 10BF ; [.2281.0020.0008] # GEORGIAN CAPITAL LETTER JHAN 10F0 ; [.2282.0020.0002] # GEORGIAN LETTER HAE 2D20 ; [.2283.0020.0002] # GEORGIAN SMALL LETTER HAE 10C0 ; [.2283.0020.0008] # GEORGIAN CAPITAL LETTER HAE 10F5 ; [.2284.0020.0002] # GEORGIAN LETTER HOE 2D25 ; [.2285.0020.0002] # GEORGIAN SMALL LETTER HOE 10C5 ; [.2285.0020.0008] # GEORGIAN CAPITAL LETTER HOE 10F6 ; [.2286.0020.0002] # GEORGIAN LETTER FI 10F7 ; [.2287.0020.0002] # GEORGIAN LETTER YN 2D27 ; [.2288.0020.0002] # GEORGIAN SMALL LETTER YN 10C7 ; [.2288.0020.0008] # GEORGIAN CAPITAL LETTER YN 10F8 ; [.2289.0020.0002] # GEORGIAN LETTER ELIFI 10F9 ; [.228A.0020.0002] # GEORGIAN LETTER TURNED GAN 10FA ; [.228B.0020.0002] # GEORGIAN LETTER AIN 10FD ; [.228C.0020.0002] # GEORGIAN LETTER AEN 2D2D ; [.228D.0020.0002] # GEORGIAN SMALL LETTER AEN 10CD ; [.228D.0020.0008] # GEORGIAN CAPITAL LETTER AEN 10FE ; [.228E.0020.0002] # GEORGIAN LETTER HARD SIGN 10FF ; [.228F.0020.0002] # GEORGIAN LETTER LABIAL SIGN 0561 ; [.2290.0020.0002] # ARMENIAN SMALL LETTER AYB 0531 ; [.2290.0020.0008] # ARMENIAN CAPITAL LETTER AYB 0562 ; [.2291.0020.0002] # ARMENIAN SMALL LETTER BEN 0532 ; [.2291.0020.0008] # ARMENIAN CAPITAL LETTER BEN 0563 ; [.2292.0020.0002] # ARMENIAN SMALL LETTER GIM 0533 ; [.2292.0020.0008] # ARMENIAN CAPITAL LETTER GIM 0564 ; [.2293.0020.0002] # ARMENIAN SMALL LETTER DA 0534 ; [.2293.0020.0008] # ARMENIAN CAPITAL LETTER DA 0565 ; [.2294.0020.0002] # ARMENIAN SMALL LETTER ECH 0535 ; [.2294.0020.0008] # ARMENIAN CAPITAL LETTER ECH 0587 ; [.2294.0020.0004][.22B1.0020.0004] # ARMENIAN SMALL LIGATURE ECH YIWN 0566 ; [.2295.0020.0002] # ARMENIAN SMALL LETTER ZA 0536 ; [.2295.0020.0008] # ARMENIAN CAPITAL LETTER ZA 0567 ; [.2296.0020.0002] # ARMENIAN SMALL LETTER EH 0537 ; [.2296.0020.0008] # ARMENIAN CAPITAL LETTER EH 0568 ; [.2297.0020.0002] # ARMENIAN SMALL LETTER ET 0538 ; [.2297.0020.0008] # ARMENIAN CAPITAL LETTER ET 0569 ; [.2298.0020.0002] # ARMENIAN SMALL LETTER TO 0539 ; [.2298.0020.0008] # ARMENIAN CAPITAL LETTER TO 056A ; [.2299.0020.0002] # ARMENIAN SMALL LETTER ZHE 053A ; [.2299.0020.0008] # ARMENIAN CAPITAL LETTER ZHE 056B ; [.229A.0020.0002] # ARMENIAN SMALL LETTER INI 053B ; [.229A.0020.0008] # ARMENIAN CAPITAL LETTER INI 056C ; [.229B.0020.0002] # ARMENIAN SMALL LETTER LIWN 053C ; [.229B.0020.0008] # ARMENIAN CAPITAL LETTER LIWN 056D ; [.229C.0020.0002] # ARMENIAN SMALL LETTER XEH 053D ; [.229C.0020.0008] # ARMENIAN CAPITAL LETTER XEH 056E ; [.229D.0020.0002] # ARMENIAN SMALL LETTER CA 053E ; [.229D.0020.0008] # ARMENIAN CAPITAL LETTER CA 056F ; [.229E.0020.0002] # ARMENIAN SMALL LETTER KEN 053F ; [.229E.0020.0008] # ARMENIAN CAPITAL LETTER KEN 0570 ; [.229F.0020.0002] # ARMENIAN SMALL LETTER HO 0540 ; [.229F.0020.0008] # ARMENIAN CAPITAL LETTER HO 0571 ; [.22A0.0020.0002] # ARMENIAN SMALL LETTER JA 0541 ; [.22A0.0020.0008] # ARMENIAN CAPITAL LETTER JA 0572 ; [.22A1.0020.0002] # ARMENIAN SMALL LETTER GHAD 0542 ; [.22A1.0020.0008] # ARMENIAN CAPITAL LETTER GHAD 0573 ; [.22A2.0020.0002] # ARMENIAN SMALL LETTER CHEH 0543 ; [.22A2.0020.0008] # ARMENIAN CAPITAL LETTER CHEH 0574 ; [.22A3.0020.0002] # ARMENIAN SMALL LETTER MEN 0544 ; [.22A3.0020.0008] # ARMENIAN CAPITAL LETTER MEN FB14 ; [.22A3.0020.0004][.2294.0020.0004] # ARMENIAN SMALL LIGATURE MEN ECH FB15 ; [.22A3.0020.0004][.229A.0020.0004] # ARMENIAN SMALL LIGATURE MEN INI FB17 ; [.22A3.0020.0004][.229C.0020.0004] # ARMENIAN SMALL LIGATURE MEN XEH FB13 ; [.22A3.0020.0004][.22A5.0020.0004] # ARMENIAN SMALL LIGATURE MEN NOW 0575 ; [.22A4.0020.0002] # ARMENIAN SMALL LETTER YI 0545 ; [.22A4.0020.0008] # ARMENIAN CAPITAL LETTER YI 0576 ; [.22A5.0020.0002] # ARMENIAN SMALL LETTER NOW 0546 ; [.22A5.0020.0008] # ARMENIAN CAPITAL LETTER NOW 0577 ; [.22A6.0020.0002] # ARMENIAN SMALL LETTER SHA 0547 ; [.22A6.0020.0008] # ARMENIAN CAPITAL LETTER SHA 0578 ; [.22A7.0020.0002] # ARMENIAN SMALL LETTER VO 0548 ; [.22A7.0020.0008] # ARMENIAN CAPITAL LETTER VO 0579 ; [.22A8.0020.0002] # ARMENIAN SMALL LETTER CHA 0549 ; [.22A8.0020.0008] # ARMENIAN CAPITAL LETTER CHA 057A ; [.22A9.0020.0002] # ARMENIAN SMALL LETTER PEH 054A ; [.22A9.0020.0008] # ARMENIAN CAPITAL LETTER PEH 057B ; [.22AA.0020.0002] # ARMENIAN SMALL LETTER JHEH 054B ; [.22AA.0020.0008] # ARMENIAN CAPITAL LETTER JHEH 057C ; [.22AB.0020.0002] # ARMENIAN SMALL LETTER RA 054C ; [.22AB.0020.0008] # ARMENIAN CAPITAL LETTER RA 057D ; [.22AC.0020.0002] # ARMENIAN SMALL LETTER SEH 054D ; [.22AC.0020.0008] # ARMENIAN CAPITAL LETTER SEH 057E ; [.22AD.0020.0002] # ARMENIAN SMALL LETTER VEW 054E ; [.22AD.0020.0008] # ARMENIAN CAPITAL LETTER VEW FB16 ; [.22AD.0020.0004][.22A5.0020.0004] # ARMENIAN SMALL LIGATURE VEW NOW 057F ; [.22AE.0020.0002] # ARMENIAN SMALL LETTER TIWN 054F ; [.22AE.0020.0008] # ARMENIAN CAPITAL LETTER TIWN 0580 ; [.22AF.0020.0002] # ARMENIAN SMALL LETTER REH 0550 ; [.22AF.0020.0008] # ARMENIAN CAPITAL LETTER REH 0581 ; [.22B0.0020.0002] # ARMENIAN SMALL LETTER CO 0551 ; [.22B0.0020.0008] # ARMENIAN CAPITAL LETTER CO 0582 ; [.22B1.0020.0002] # ARMENIAN SMALL LETTER YIWN 0552 ; [.22B1.0020.0008] # ARMENIAN CAPITAL LETTER YIWN 0583 ; [.22B2.0020.0002] # ARMENIAN SMALL LETTER PIWR 0553 ; [.22B2.0020.0008] # ARMENIAN CAPITAL LETTER PIWR 0584 ; [.22B3.0020.0002] # ARMENIAN SMALL LETTER KEH 0554 ; [.22B3.0020.0008] # ARMENIAN CAPITAL LETTER KEH 0585 ; [.22B4.0020.0002] # ARMENIAN SMALL LETTER OH 0555 ; [.22B4.0020.0008] # ARMENIAN CAPITAL LETTER OH 0586 ; [.22B5.0020.0002] # ARMENIAN SMALL LETTER FEH 0556 ; [.22B5.0020.0008] # ARMENIAN CAPITAL LETTER FEH 0559 ; [.22B6.0020.0002] # ARMENIAN MODIFIER LETTER LEFT HALF RING 05D0 ; [.22B7.0020.0002] # HEBREW LETTER ALEF 2135 ; [.22B7.0020.0004] # ALEF SYMBOL FB21 ; [.22B7.0020.0005] # HEBREW LETTER WIDE ALEF FB2E ; [.22B7.0020.0002][.0000.0059.0002] # HEBREW LETTER ALEF WITH PATAH FB2F ; [.22B7.0020.0002][.0000.005A.0002] # HEBREW LETTER ALEF WITH QAMATS FB30 ; [.22B7.0020.0002][.0000.005F.0002] # HEBREW LETTER ALEF WITH MAPIQ FB4F ; [.22B7.0020.0004][.22C2.0020.0004] # HEBREW LIGATURE ALEF LAMED 05D1 ; [.22B8.0020.0002] # HEBREW LETTER BET 2136 ; [.22B8.0020.0004] # BET SYMBOL FB31 ; [.22B8.0020.0002][.0000.005F.0002] # HEBREW LETTER BET WITH DAGESH FB4C ; [.22B8.0020.0002][.0000.0060.0002] # HEBREW LETTER BET WITH RAFE 05D2 ; [.22B9.0020.0002] # HEBREW LETTER GIMEL 2137 ; [.22B9.0020.0004] # GIMEL SYMBOL FB32 ; [.22B9.0020.0002][.0000.005F.0002] # HEBREW LETTER GIMEL WITH DAGESH 05D3 ; [.22BA.0020.0002] # HEBREW LETTER DALET 2138 ; [.22BA.0020.0004] # DALET SYMBOL FB22 ; [.22BA.0020.0005] # HEBREW LETTER WIDE DALET FB33 ; [.22BA.0020.0002][.0000.005F.0002] # HEBREW LETTER DALET WITH DAGESH 05D4 ; [.22BB.0020.0002] # HEBREW LETTER HE FB23 ; [.22BB.0020.0005] # HEBREW LETTER WIDE HE FB34 ; [.22BB.0020.0002][.0000.005F.0002] # HEBREW LETTER HE WITH MAPIQ 05D5 ; [.22BC.0020.0002] # HEBREW LETTER VAV FB4B ; [.22BC.0020.0002][.0000.005B.0002] # HEBREW LETTER VAV WITH HOLAM FB35 ; [.22BC.0020.0002][.0000.005F.0002] # HEBREW LETTER VAV WITH DAGESH 05F0 ; [.22BC.0020.0004][.22BC.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE VAV 05F1 ; [.22BC.0020.0004][.22C0.0020.0004] # HEBREW LIGATURE YIDDISH VAV YOD 05D6 ; [.22BD.0020.0002] # HEBREW LETTER ZAYIN FB36 ; [.22BD.0020.0002][.0000.005F.0002] # HEBREW LETTER ZAYIN WITH DAGESH 05D7 ; [.22BE.0020.0002] # HEBREW LETTER HET 05D8 ; [.22BF.0020.0002] # HEBREW LETTER TET FB38 ; [.22BF.0020.0002][.0000.005F.0002] # HEBREW LETTER TET WITH DAGESH 05D9 ; [.22C0.0020.0002] # HEBREW LETTER YOD FB1D ; [.22C0.0020.0002][.0000.0056.0002] # HEBREW LETTER YOD WITH HIRIQ FB39 ; [.22C0.0020.0002][.0000.005F.0002] # HEBREW LETTER YOD WITH DAGESH 05F2 ; [.22C0.0020.0004][.22C0.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE YOD FB1F ; [.22C0.0020.0004][.22C0.0020.0004][.0000.0059.0002] # HEBREW LIGATURE YIDDISH YOD YOD PATAH 05DB ; [.22C1.0020.0002] # HEBREW LETTER KAF FB24 ; [.22C1.0020.0005] # HEBREW LETTER WIDE KAF 05DA ; [.22C1.0020.0019] # HEBREW LETTER FINAL KAF FB3B ; [.22C1.0020.0002][.0000.005F.0002] # HEBREW LETTER KAF WITH DAGESH FB3A ; [.22C1.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL KAF WITH DAGESH FB4D ; [.22C1.0020.0002][.0000.0060.0002] # HEBREW LETTER KAF WITH RAFE 05DC ; [.22C2.0020.0002] # HEBREW LETTER LAMED FB25 ; [.22C2.0020.0005] # HEBREW LETTER WIDE LAMED FB3C ; [.22C2.0020.0002][.0000.005F.0002] # HEBREW LETTER LAMED WITH DAGESH 05DE ; [.22C3.0020.0002] # HEBREW LETTER MEM FB26 ; [.22C3.0020.0005] # HEBREW LETTER WIDE FINAL MEM 05DD ; [.22C3.0020.0019] # HEBREW LETTER FINAL MEM FB3E ; [.22C3.0020.0002][.0000.005F.0002] # HEBREW LETTER MEM WITH DAGESH 05E0 ; [.22C4.0020.0002] # HEBREW LETTER NUN 05DF ; [.22C4.0020.0019] # HEBREW LETTER FINAL NUN FB40 ; [.22C4.0020.0002][.0000.005F.0002] # HEBREW LETTER NUN WITH DAGESH 05E1 ; [.22C5.0020.0002] # HEBREW LETTER SAMEKH FB41 ; [.22C5.0020.0002][.0000.005F.0002] # HEBREW LETTER SAMEKH WITH DAGESH 05E2 ; [.22C6.0020.0002] # HEBREW LETTER AYIN FB20 ; [.22C6.0020.0005] # HEBREW LETTER ALTERNATIVE AYIN 05E4 ; [.22C7.0020.0002] # HEBREW LETTER PE 05E3 ; [.22C7.0020.0019] # HEBREW LETTER FINAL PE FB44 ; [.22C7.0020.0002][.0000.005F.0002] # HEBREW LETTER PE WITH DAGESH FB43 ; [.22C7.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL PE WITH DAGESH FB4E ; [.22C7.0020.0002][.0000.0060.0002] # HEBREW LETTER PE WITH RAFE 05E6 ; [.22C8.0020.0002] # HEBREW LETTER TSADI 05E5 ; [.22C8.0020.0019] # HEBREW LETTER FINAL TSADI FB46 ; [.22C8.0020.0002][.0000.005F.0002] # HEBREW LETTER TSADI WITH DAGESH 05E7 ; [.22C9.0020.0002] # HEBREW LETTER QOF FB47 ; [.22C9.0020.0002][.0000.005F.0002] # HEBREW LETTER QOF WITH DAGESH 05E8 ; [.22CA.0020.0002] # HEBREW LETTER RESH FB27 ; [.22CA.0020.0005] # HEBREW LETTER WIDE RESH FB48 ; [.22CA.0020.0002][.0000.005F.0002] # HEBREW LETTER RESH WITH DAGESH 05E9 ; [.22CB.0020.0002] # HEBREW LETTER SHIN FB2B ; [.22CB.0020.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH SIN DOT FB2A ; [.22CB.0020.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH SHIN DOT FB49 ; [.22CB.0020.0002][.0000.005F.0002] # HEBREW LETTER SHIN WITH DAGESH FB2D ; [.22CB.0020.0002][.0000.005F.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT FB2C ; [.22CB.0020.0002][.0000.005F.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT 05EA ; [.22CC.0020.0002] # HEBREW LETTER TAV FB28 ; [.22CC.0020.0005] # HEBREW LETTER WIDE TAV FB4A ; [.22CC.0020.0002][.0000.005F.0002] # HEBREW LETTER TAV WITH DAGESH 10900 ; [.22CD.0020.0002] # PHOENICIAN LETTER ALF 10901 ; [.22CE.0020.0002] # PHOENICIAN LETTER BET 10902 ; [.22CF.0020.0002] # PHOENICIAN LETTER GAML 10903 ; [.22D0.0020.0002] # PHOENICIAN LETTER DELT 10904 ; [.22D1.0020.0002] # PHOENICIAN LETTER HE 10905 ; [.22D2.0020.0002] # PHOENICIAN LETTER WAU 10906 ; [.22D3.0020.0002] # PHOENICIAN LETTER ZAI 10907 ; [.22D4.0020.0002] # PHOENICIAN LETTER HET 10908 ; [.22D5.0020.0002] # PHOENICIAN LETTER TET 10909 ; [.22D6.0020.0002] # PHOENICIAN LETTER YOD 1090A ; [.22D7.0020.0002] # PHOENICIAN LETTER KAF 1090B ; [.22D8.0020.0002] # PHOENICIAN LETTER LAMD 1090C ; [.22D9.0020.0002] # PHOENICIAN LETTER MEM 1090D ; [.22DA.0020.0002] # PHOENICIAN LETTER NUN 1090E ; [.22DB.0020.0002] # PHOENICIAN LETTER SEMK 1090F ; [.22DC.0020.0002] # PHOENICIAN LETTER AIN 10910 ; [.22DD.0020.0002] # PHOENICIAN LETTER PE 10911 ; [.22DE.0020.0002] # PHOENICIAN LETTER SADE 10912 ; [.22DF.0020.0002] # PHOENICIAN LETTER QOF 10913 ; [.22E0.0020.0002] # PHOENICIAN LETTER ROSH 10914 ; [.22E1.0020.0002] # PHOENICIAN LETTER SHIN 10915 ; [.22E2.0020.0002] # PHOENICIAN LETTER TAU 0800 ; [.22E3.0020.0002] # SAMARITAN LETTER ALAF 0801 ; [.22E4.0020.0002] # SAMARITAN LETTER BIT 0802 ; [.22E5.0020.0002] # SAMARITAN LETTER GAMAN 0803 ; [.22E6.0020.0002] # SAMARITAN LETTER DALAT 0804 ; [.22E7.0020.0002] # SAMARITAN LETTER IY 0805 ; [.22E8.0020.0002] # SAMARITAN LETTER BAA 0806 ; [.22E9.0020.0002] # SAMARITAN LETTER ZEN 0807 ; [.22EA.0020.0002] # SAMARITAN LETTER IT 0808 ; [.22EB.0020.0002] # SAMARITAN LETTER TIT 0809 ; [.22EC.0020.0002] # SAMARITAN LETTER YUT 080A ; [.22ED.0020.0002] # SAMARITAN LETTER KAAF 080B ; [.22EE.0020.0002] # SAMARITAN LETTER LABAT 080C ; [.22EF.0020.0002] # SAMARITAN LETTER MIM 080D ; [.22F0.0020.0002] # SAMARITAN LETTER NUN 080E ; [.22F1.0020.0002] # SAMARITAN LETTER SINGAAT 080F ; [.22F2.0020.0002] # SAMARITAN LETTER IN 0810 ; [.22F3.0020.0002] # SAMARITAN LETTER FI 0811 ; [.22F4.0020.0002] # SAMARITAN LETTER TSAADIY 0812 ; [.22F5.0020.0002] # SAMARITAN LETTER QUF 0813 ; [.22F6.0020.0002] # SAMARITAN LETTER RISH 0814 ; [.22F7.0020.0002] # SAMARITAN LETTER SHAN 0815 ; [.22F8.0020.0002] # SAMARITAN LETTER TAAF 0816 ; [.22F9.0020.0002] # SAMARITAN MARK IN 0817 ; [.22FA.0020.0002] # SAMARITAN MARK IN-ALAF 081A ; [.22FB.0020.0002] # SAMARITAN MODIFIER LETTER EPENTHETIC YUT 081B ; [.22FC.0020.0002] # SAMARITAN MARK EPENTHETIC YUT 0621 ; [.22FD.0020.0002] # ARABIC LETTER HAMZA 0674 ; [.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA FE80 ; [.22FD.0020.001A] # ARABIC LETTER HAMZA ISOLATED FORM 06FD ; [.22FD.0020.0004][.0000.0111.0004] # ARABIC SIGN SINDHI AMPERSAND 0622 ; [.22FE.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE 0627 0653 ; [.22FE.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE FE82 ; [.22FE.0020.0019] # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM FE81 ; [.22FE.0020.001A] # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM 0623 ; [.22FF.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE 0627 0654 ; [.22FF.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE FE84 ; [.22FF.0020.0019] # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM FE83 ; [.22FF.0020.001A] # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM 0672 ; [.2300.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE 0671 ; [.2301.0020.0002] # ARABIC LETTER ALEF WASLA FB51 ; [.2301.0020.0019] # ARABIC LETTER ALEF WASLA FINAL FORM FB50 ; [.2301.0020.001A] # ARABIC LETTER ALEF WASLA ISOLATED FORM 0624 ; [.2302.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE 0648 0654 ; [.2302.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE FE86 ; [.2302.0020.0019] # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM FE85 ; [.2302.0020.001A] # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM 0625 ; [.2303.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW 0627 0655 ; [.2303.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW FE88 ; [.2303.0020.0019] # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM FE87 ; [.2303.0020.001A] # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM 0673 ; [.2304.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW 0773 ; [.2305.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE 0774 ; [.2306.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE 0626 ; [.2307.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE 064A 0654 ; [.2307.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE FE8B ; [.2307.0020.0017] # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM FE8C ; [.2307.0020.0018] # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM FE8A ; [.2307.0020.0019] # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM FE89 ; [.2307.0020.001A] # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM FBEB ; [.2307.0020.0019][.230B.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM FBEA ; [.2307.0020.001A][.230B.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM FC97 ; [.2307.0020.0017][.2325.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM FC00 ; [.2307.0020.001A][.2325.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM FC98 ; [.2307.0020.0017][.232C.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM FC01 ; [.2307.0020.001A][.232C.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM FC99 ; [.2307.0020.0017][.232D.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM FC64 ; [.2307.0020.0019][.2346.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM FC65 ; [.2307.0020.0019][.2347.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM FC9A ; [.2307.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM FCDF ; [.2307.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM FC66 ; [.2307.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM FC02 ; [.2307.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM FC67 ; [.2307.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM FC9B ; [.2307.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM FCE0 ; [.2307.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM FBED ; [.2307.0020.0019][.23B6.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM FBEC ; [.2307.0020.001A][.23B6.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM FBEF ; [.2307.0020.0019][.23B7.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM FBEE ; [.2307.0020.001A][.23B7.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM FBF3 ; [.2307.0020.0019][.23BA.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM FBF2 ; [.2307.0020.001A][.23BA.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM FBF1 ; [.2307.0020.0019][.23BB.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM FBF0 ; [.2307.0020.001A][.23BB.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM FBF5 ; [.2307.0020.0019][.23BC.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM FBF4 ; [.2307.0020.001A][.23BC.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM FBFB ; [.2307.0020.0017][.23C5.0020.0017] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM FBFA ; [.2307.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM FC68 ; [.2307.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM FBF9 ; [.2307.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM FC03 ; [.2307.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM FC69 ; [.2307.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM FC04 ; [.2307.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM FBF8 ; [.2307.0020.0017][.23CA.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM FBF7 ; [.2307.0020.0019][.23CA.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM FBF6 ; [.2307.0020.001A][.23CA.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM 08A8 ; [.2308.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE 08A9 ; [.2309.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE 08AC ; [.230A.0020.0002] # ARABIC LETTER ROHINGYA YEH 0627 ; [.230B.0020.0002] # ARABIC LETTER ALEF 08AD ; [.230B.0020.0004] # ARABIC LETTER LOW ALEF 1EE00 ; [.230B.0020.0005] # ARABIC MATHEMATICAL ALEF 1EE80 ; [.230B.0020.0005] # ARABIC MATHEMATICAL LOOPED ALEF FE8E ; [.230B.0020.0019] # ARABIC LETTER ALEF FINAL FORM FE8D ; [.230B.0020.001A] # ARABIC LETTER ALEF ISOLATED FORM FD3C ; [.230B.0020.0019][.0000.006D.0019] # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM FD3D ; [.230B.0020.001A][.0000.006D.001A] # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM 0675 ; [.230B.0020.0004][.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA ALEF FDF3 ; [.230B.0020.001A][.2387.0020.001A][.230D.0020.001A][.2346.0020.001A] # ARABIC LIGATURE AKBAR ISOLATED FORM FDF2 ; [.230B.0020.001A][.239C.0020.001A][.239C.0020.001A][.23B1.0020.001A] # ARABIC LIGATURE ALLAH ISOLATED FORM 066E ; [.230C.0020.0002] # ARABIC LETTER DOTLESS BEH 1EE1C ; [.230C.0020.0005] # ARABIC MATHEMATICAL DOTLESS BEH 1EE7C ; [.230C.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS BEH 0628 ; [.230D.0020.0002] # ARABIC LETTER BEH 1EE01 ; [.230D.0020.0005] # ARABIC MATHEMATICAL BEH 1EE21 ; [.230D.0020.0005] # ARABIC MATHEMATICAL INITIAL BEH 1EE61 ; [.230D.0020.0005] # ARABIC MATHEMATICAL STRETCHED BEH 1EE81 ; [.230D.0020.0005] # ARABIC MATHEMATICAL LOOPED BEH 1EEA1 ; [.230D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK BEH FE91 ; [.230D.0020.0017] # ARABIC LETTER BEH INITIAL FORM FE92 ; [.230D.0020.0018] # ARABIC LETTER BEH MEDIAL FORM FE90 ; [.230D.0020.0019] # ARABIC LETTER BEH FINAL FORM FE8F ; [.230D.0020.001A] # ARABIC LETTER BEH ISOLATED FORM FC9C ; [.230D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM FC05 ; [.230D.0020.001A][.2325.0020.001A] # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM FC9D ; [.230D.0020.0017][.232C.0020.0017] # ARABIC LIGATURE BEH WITH HAH INITIAL FORM FC06 ; [.230D.0020.001A][.232C.0020.001A] # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM FDC2 ; [.230D.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM FC9E ; [.230D.0020.0017][.232D.0020.0017] # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM FC07 ; [.230D.0020.001A][.232D.0020.001A] # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM FD9E ; [.230D.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM FC6A ; [.230D.0020.0019][.2346.0020.0019] # ARABIC LIGATURE BEH WITH REH FINAL FORM FC6B ; [.230D.0020.0019][.2347.0020.0019] # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM FC9F ; [.230D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM FCE1 ; [.230D.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM FC6C ; [.230D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE BEH WITH MEEM FINAL FORM FC08 ; [.230D.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM FC6D ; [.230D.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE BEH WITH NOON FINAL FORM FCA0 ; [.230D.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE BEH WITH HEH INITIAL FORM FCE2 ; [.230D.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM FC6E ; [.230D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM FC09 ; [.230D.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM FC6F ; [.230D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE BEH WITH YEH FINAL FORM FC0A ; [.230D.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM 067B ; [.230E.0020.0002] # ARABIC LETTER BEEH FB54 ; [.230E.0020.0017] # ARABIC LETTER BEEH INITIAL FORM FB55 ; [.230E.0020.0018] # ARABIC LETTER BEEH MEDIAL FORM FB53 ; [.230E.0020.0019] # ARABIC LETTER BEEH FINAL FORM FB52 ; [.230E.0020.001A] # ARABIC LETTER BEEH ISOLATED FORM 067E ; [.230F.0020.0002] # ARABIC LETTER PEH FB58 ; [.230F.0020.0017] # ARABIC LETTER PEH INITIAL FORM FB59 ; [.230F.0020.0018] # ARABIC LETTER PEH MEDIAL FORM FB57 ; [.230F.0020.0019] # ARABIC LETTER PEH FINAL FORM FB56 ; [.230F.0020.001A] # ARABIC LETTER PEH ISOLATED FORM 0680 ; [.2310.0020.0002] # ARABIC LETTER BEHEH FB5C ; [.2310.0020.0017] # ARABIC LETTER BEHEH INITIAL FORM FB5D ; [.2310.0020.0018] # ARABIC LETTER BEHEH MEDIAL FORM FB5B ; [.2310.0020.0019] # ARABIC LETTER BEHEH FINAL FORM FB5A ; [.2310.0020.001A] # ARABIC LETTER BEHEH ISOLATED FORM 0750 ; [.2311.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW 0751 ; [.2312.0020.0002] # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE 0752 ; [.2313.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW 0753 ; [.2314.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE 0754 ; [.2315.0020.0002] # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE 0755 ; [.2316.0020.0002] # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW 08A0 ; [.2317.0020.0002] # ARABIC LETTER BEH WITH SMALL V BELOW 0756 ; [.2318.0020.0002] # ARABIC LETTER BEH WITH SMALL V 08A1 ; [.2319.0020.0002] # ARABIC LETTER BEH WITH HAMZA ABOVE 08B6 ; [.231A.0020.0002] # ARABIC LETTER BEH WITH SMALL MEEM ABOVE 08B7 ; [.231B.0020.0002] # ARABIC LETTER PEH WITH SMALL MEEM ABOVE 0629 ; [.231C.0020.0002] # ARABIC LETTER TEH MARBUTA FE94 ; [.231C.0020.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM FE93 ; [.231C.0020.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM 062A ; [.231D.0020.0002] # ARABIC LETTER TEH 1EE15 ; [.231D.0020.0005] # ARABIC MATHEMATICAL TEH 1EE35 ; [.231D.0020.0005] # ARABIC MATHEMATICAL INITIAL TEH 1EE75 ; [.231D.0020.0005] # ARABIC MATHEMATICAL STRETCHED TEH 1EE95 ; [.231D.0020.0005] # ARABIC MATHEMATICAL LOOPED TEH 1EEB5 ; [.231D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TEH FE97 ; [.231D.0020.0017] # ARABIC LETTER TEH INITIAL FORM FE98 ; [.231D.0020.0018] # ARABIC LETTER TEH MEDIAL FORM FE96 ; [.231D.0020.0019] # ARABIC LETTER TEH FINAL FORM FE95 ; [.231D.0020.001A] # ARABIC LETTER TEH ISOLATED FORM FCA1 ; [.231D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM FC0B ; [.231D.0020.001A][.2325.0020.001A] # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM FD50 ; [.231D.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM FDA0 ; [.231D.0020.0019][.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM FD9F ; [.231D.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM FCA2 ; [.231D.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TEH WITH HAH INITIAL FORM FC0C ; [.231D.0020.001A][.232C.0020.001A] # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM FD52 ; [.231D.0020.0017][.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM FD51 ; [.231D.0020.0019][.232C.0020.0019][.2325.0020.0019] # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM FD53 ; [.231D.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM FCA3 ; [.231D.0020.0017][.232D.0020.0017] # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM FC0D ; [.231D.0020.001A][.232D.0020.001A] # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM FD54 ; [.231D.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM FDA2 ; [.231D.0020.0019][.232D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM FDA1 ; [.231D.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM FC70 ; [.231D.0020.0019][.2346.0020.0019] # ARABIC LIGATURE TEH WITH REH FINAL FORM FC71 ; [.231D.0020.0019][.2347.0020.0019] # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM FCA4 ; [.231D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM FCE3 ; [.231D.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM FC72 ; [.231D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE TEH WITH MEEM FINAL FORM FC0E ; [.231D.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM FD55 ; [.231D.0020.0017][.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM FD56 ; [.231D.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM FD57 ; [.231D.0020.0017][.23A3.0020.0017][.232D.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM FDA4 ; [.231D.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM FDA3 ; [.231D.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM FC73 ; [.231D.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE TEH WITH NOON FINAL FORM FCA5 ; [.231D.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE TEH WITH HEH INITIAL FORM FCE4 ; [.231D.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM FC74 ; [.231D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM FC0F ; [.231D.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM FC75 ; [.231D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TEH WITH YEH FINAL FORM FC10 ; [.231D.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM 062B ; [.231E.0020.0002] # ARABIC LETTER THEH 1EE16 ; [.231E.0020.0005] # ARABIC MATHEMATICAL THEH 1EE36 ; [.231E.0020.0005] # ARABIC MATHEMATICAL INITIAL THEH 1EE76 ; [.231E.0020.0005] # ARABIC MATHEMATICAL STRETCHED THEH 1EE96 ; [.231E.0020.0005] # ARABIC MATHEMATICAL LOOPED THEH 1EEB6 ; [.231E.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THEH FE9B ; [.231E.0020.0017] # ARABIC LETTER THEH INITIAL FORM FE9C ; [.231E.0020.0018] # ARABIC LETTER THEH MEDIAL FORM FE9A ; [.231E.0020.0019] # ARABIC LETTER THEH FINAL FORM FE99 ; [.231E.0020.001A] # ARABIC LETTER THEH ISOLATED FORM FC11 ; [.231E.0020.001A][.2325.0020.001A] # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM FC76 ; [.231E.0020.0019][.2346.0020.0019] # ARABIC LIGATURE THEH WITH REH FINAL FORM FC77 ; [.231E.0020.0019][.2347.0020.0019] # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM FCA6 ; [.231E.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM FCE5 ; [.231E.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM FC78 ; [.231E.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE THEH WITH MEEM FINAL FORM FC12 ; [.231E.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM FC79 ; [.231E.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE THEH WITH NOON FINAL FORM FCE6 ; [.231E.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM FC7A ; [.231E.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM FC13 ; [.231E.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM FC7B ; [.231E.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE THEH WITH YEH FINAL FORM FC14 ; [.231E.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM 0679 ; [.231F.0020.0002] # ARABIC LETTER TTEH FB68 ; [.231F.0020.0017] # ARABIC LETTER TTEH INITIAL FORM FB69 ; [.231F.0020.0018] # ARABIC LETTER TTEH MEDIAL FORM FB67 ; [.231F.0020.0019] # ARABIC LETTER TTEH FINAL FORM FB66 ; [.231F.0020.001A] # ARABIC LETTER TTEH ISOLATED FORM 067A ; [.2320.0020.0002] # ARABIC LETTER TTEHEH FB60 ; [.2320.0020.0017] # ARABIC LETTER TTEHEH INITIAL FORM FB61 ; [.2320.0020.0018] # ARABIC LETTER TTEHEH MEDIAL FORM FB5F ; [.2320.0020.0019] # ARABIC LETTER TTEHEH FINAL FORM FB5E ; [.2320.0020.001A] # ARABIC LETTER TTEHEH ISOLATED FORM 067C ; [.2321.0020.0002] # ARABIC LETTER TEH WITH RING 067D ; [.2322.0020.0002] # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS 067F ; [.2323.0020.0002] # ARABIC LETTER TEHEH FB64 ; [.2323.0020.0017] # ARABIC LETTER TEHEH INITIAL FORM FB65 ; [.2323.0020.0018] # ARABIC LETTER TEHEH MEDIAL FORM FB63 ; [.2323.0020.0019] # ARABIC LETTER TEHEH FINAL FORM FB62 ; [.2323.0020.001A] # ARABIC LETTER TEHEH ISOLATED FORM 08B8 ; [.2324.0020.0002] # ARABIC LETTER TEH WITH SMALL TEH ABOVE 062C ; [.2325.0020.0002] # ARABIC LETTER JEEM 1EE02 ; [.2325.0020.0005] # ARABIC MATHEMATICAL JEEM 1EE22 ; [.2325.0020.0005] # ARABIC MATHEMATICAL INITIAL JEEM 1EE42 ; [.2325.0020.0005] # ARABIC MATHEMATICAL TAILED JEEM 1EE62 ; [.2325.0020.0005] # ARABIC MATHEMATICAL STRETCHED JEEM 1EE82 ; [.2325.0020.0005] # ARABIC MATHEMATICAL LOOPED JEEM 1EEA2 ; [.2325.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM FE9F ; [.2325.0020.0017] # ARABIC LETTER JEEM INITIAL FORM FEA0 ; [.2325.0020.0018] # ARABIC LETTER JEEM MEDIAL FORM FE9E ; [.2325.0020.0019] # ARABIC LETTER JEEM FINAL FORM FE9D ; [.2325.0020.001A] # ARABIC LETTER JEEM ISOLATED FORM FCA7 ; [.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM FC15 ; [.2325.0020.001A][.232C.0020.001A] # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM FDA6 ; [.2325.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM FDBE ; [.2325.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM FDFB ; [.2325.0020.001A][.239C.0020.001A][*0209.0020.001A][.2325.0020.001A][.239C.0020.001A][.230B.0020.001A][.239C.0020.001A][.23B1.0020.001A] # ARABIC LIGATURE JALLAJALALOUHOU FCA8 ; [.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM FC16 ; [.2325.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM FD59 ; [.2325.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM FD58 ; [.2325.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM FDA7 ; [.2325.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM FDA5 ; [.2325.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM FD1D ; [.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM FD01 ; [.2325.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM FD1E ; [.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE JEEM WITH YEH FINAL FORM FD02 ; [.2325.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM 0683 ; [.2326.0020.0002] # ARABIC LETTER NYEH FB78 ; [.2326.0020.0017] # ARABIC LETTER NYEH INITIAL FORM FB79 ; [.2326.0020.0018] # ARABIC LETTER NYEH MEDIAL FORM FB77 ; [.2326.0020.0019] # ARABIC LETTER NYEH FINAL FORM FB76 ; [.2326.0020.001A] # ARABIC LETTER NYEH ISOLATED FORM 0684 ; [.2327.0020.0002] # ARABIC LETTER DYEH FB74 ; [.2327.0020.0017] # ARABIC LETTER DYEH INITIAL FORM FB75 ; [.2327.0020.0018] # ARABIC LETTER DYEH MEDIAL FORM FB73 ; [.2327.0020.0019] # ARABIC LETTER DYEH FINAL FORM FB72 ; [.2327.0020.001A] # ARABIC LETTER DYEH ISOLATED FORM 0686 ; [.2328.0020.0002] # ARABIC LETTER TCHEH FB7C ; [.2328.0020.0017] # ARABIC LETTER TCHEH INITIAL FORM FB7D ; [.2328.0020.0018] # ARABIC LETTER TCHEH MEDIAL FORM FB7B ; [.2328.0020.0019] # ARABIC LETTER TCHEH FINAL FORM FB7A ; [.2328.0020.001A] # ARABIC LETTER TCHEH ISOLATED FORM 06BF ; [.2329.0020.0002] # ARABIC LETTER TCHEH WITH DOT ABOVE 0687 ; [.232A.0020.0002] # ARABIC LETTER TCHEHEH FB80 ; [.232A.0020.0017] # ARABIC LETTER TCHEHEH INITIAL FORM FB81 ; [.232A.0020.0018] # ARABIC LETTER TCHEHEH MEDIAL FORM FB7F ; [.232A.0020.0019] # ARABIC LETTER TCHEHEH FINAL FORM FB7E ; [.232A.0020.001A] # ARABIC LETTER TCHEHEH ISOLATED FORM 08A2 ; [.232B.0020.0002] # ARABIC LETTER JEEM WITH TWO DOTS ABOVE 062D ; [.232C.0020.0002] # ARABIC LETTER HAH 1EE07 ; [.232C.0020.0005] # ARABIC MATHEMATICAL HAH 1EE27 ; [.232C.0020.0005] # ARABIC MATHEMATICAL INITIAL HAH 1EE47 ; [.232C.0020.0005] # ARABIC MATHEMATICAL TAILED HAH 1EE67 ; [.232C.0020.0005] # ARABIC MATHEMATICAL STRETCHED HAH 1EE87 ; [.232C.0020.0005] # ARABIC MATHEMATICAL LOOPED HAH 1EEA7 ; [.232C.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK HAH FEA3 ; [.232C.0020.0017] # ARABIC LETTER HAH INITIAL FORM FEA4 ; [.232C.0020.0018] # ARABIC LETTER HAH MEDIAL FORM FEA2 ; [.232C.0020.0019] # ARABIC LETTER HAH FINAL FORM FEA1 ; [.232C.0020.001A] # ARABIC LETTER HAH ISOLATED FORM FCA9 ; [.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM FC17 ; [.232C.0020.001A][.2325.0020.001A] # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM FDBF ; [.232C.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM FCAA ; [.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM FC18 ; [.232C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM FD5B ; [.232C.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM FD5A ; [.232C.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM FD1B ; [.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM FCFF ; [.232C.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM FD1C ; [.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE HAH WITH YEH FINAL FORM FD00 ; [.232C.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM 062E ; [.232D.0020.0002] # ARABIC LETTER KHAH 1EE17 ; [.232D.0020.0005] # ARABIC MATHEMATICAL KHAH 1EE37 ; [.232D.0020.0005] # ARABIC MATHEMATICAL INITIAL KHAH 1EE57 ; [.232D.0020.0005] # ARABIC MATHEMATICAL TAILED KHAH 1EE77 ; [.232D.0020.0005] # ARABIC MATHEMATICAL STRETCHED KHAH 1EE97 ; [.232D.0020.0005] # ARABIC MATHEMATICAL LOOPED KHAH 1EEB7 ; [.232D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH FEA7 ; [.232D.0020.0017] # ARABIC LETTER KHAH INITIAL FORM FEA8 ; [.232D.0020.0018] # ARABIC LETTER KHAH MEDIAL FORM FEA6 ; [.232D.0020.0019] # ARABIC LETTER KHAH FINAL FORM FEA5 ; [.232D.0020.001A] # ARABIC LETTER KHAH ISOLATED FORM FCAB ; [.232D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM FC19 ; [.232D.0020.001A][.2325.0020.001A] # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM FC1A ; [.232D.0020.001A][.232C.0020.001A] # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM FCAC ; [.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM FC1B ; [.232D.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM FD1F ; [.232D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM FD03 ; [.232D.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM FD20 ; [.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE KHAH WITH YEH FINAL FORM FD04 ; [.232D.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM 0681 ; [.232E.0020.0002] # ARABIC LETTER HAH WITH HAMZA ABOVE 0682 ; [.232F.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE 0685 ; [.2330.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS ABOVE 0757 ; [.2331.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS ABOVE 0758 ; [.2332.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW 076E ; [.2333.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW 076F ; [.2334.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS 0772 ; [.2335.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE 077C ; [.2336.0020.0002] # ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW 062F ; [.2337.0020.0002] # ARABIC LETTER DAL 1EE03 ; [.2337.0020.0005] # ARABIC MATHEMATICAL DAL 1EE83 ; [.2337.0020.0005] # ARABIC MATHEMATICAL LOOPED DAL 1EEA3 ; [.2337.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAL FEAA ; [.2337.0020.0019] # ARABIC LETTER DAL FINAL FORM FEA9 ; [.2337.0020.001A] # ARABIC LETTER DAL ISOLATED FORM 0630 ; [.2338.0020.0002] # ARABIC LETTER THAL 1EE18 ; [.2338.0020.0005] # ARABIC MATHEMATICAL THAL 1EE98 ; [.2338.0020.0005] # ARABIC MATHEMATICAL LOOPED THAL 1EEB8 ; [.2338.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THAL FEAC ; [.2338.0020.0019] # ARABIC LETTER THAL FINAL FORM FEAB ; [.2338.0020.001A] # ARABIC LETTER THAL ISOLATED FORM FC5B ; [.2338.0020.001A][.0000.0098.001A] # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM 0688 ; [.2339.0020.0002] # ARABIC LETTER DDAL FB89 ; [.2339.0020.0019] # ARABIC LETTER DDAL FINAL FORM FB88 ; [.2339.0020.001A] # ARABIC LETTER DDAL ISOLATED FORM 0689 ; [.233A.0020.0002] # ARABIC LETTER DAL WITH RING 068A ; [.233B.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW 068B ; [.233C.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH 068C ; [.233D.0020.0002] # ARABIC LETTER DAHAL FB85 ; [.233D.0020.0019] # ARABIC LETTER DAHAL FINAL FORM FB84 ; [.233D.0020.001A] # ARABIC LETTER DAHAL ISOLATED FORM 068D ; [.233E.0020.0002] # ARABIC LETTER DDAHAL FB83 ; [.233E.0020.0019] # ARABIC LETTER DDAHAL FINAL FORM FB82 ; [.233E.0020.001A] # ARABIC LETTER DDAHAL ISOLATED FORM 08AE ; [.233F.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS BELOW 068E ; [.2340.0020.0002] # ARABIC LETTER DUL FB87 ; [.2340.0020.0019] # ARABIC LETTER DUL FINAL FORM FB86 ; [.2340.0020.001A] # ARABIC LETTER DUL ISOLATED FORM 068F ; [.2341.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS 0690 ; [.2342.0020.0002] # ARABIC LETTER DAL WITH FOUR DOTS ABOVE 06EE ; [.2343.0020.0002] # ARABIC LETTER DAL WITH INVERTED V 0759 ; [.2344.0020.0002] # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH 075A ; [.2345.0020.0002] # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW 0631 ; [.2346.0020.0002] # ARABIC LETTER REH 1EE13 ; [.2346.0020.0005] # ARABIC MATHEMATICAL REH 1EE93 ; [.2346.0020.0005] # ARABIC MATHEMATICAL LOOPED REH 1EEB3 ; [.2346.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK REH FEAE ; [.2346.0020.0019] # ARABIC LETTER REH FINAL FORM FEAD ; [.2346.0020.001A] # ARABIC LETTER REH ISOLATED FORM FC5C ; [.2346.0020.001A][.0000.0098.001A] # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM FDF6 ; [.2346.0020.001A][.2359.0020.001A][.23B7.0020.001A][.239C.0020.001A] # ARABIC LIGATURE RASOUL ISOLATED FORM FDFC ; [.2346.0020.001A][.23C7.0020.001A][.230B.0020.001A][.239C.0020.001A] # RIAL SIGN 0632 ; [.2347.0020.0002] # ARABIC LETTER ZAIN 1EE06 ; [.2347.0020.0005] # ARABIC MATHEMATICAL ZAIN 1EE86 ; [.2347.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAIN 1EEA6 ; [.2347.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN FEB0 ; [.2347.0020.0019] # ARABIC LETTER ZAIN FINAL FORM FEAF ; [.2347.0020.001A] # ARABIC LETTER ZAIN ISOLATED FORM 0691 ; [.2348.0020.0002] # ARABIC LETTER RREH FB8D ; [.2348.0020.0019] # ARABIC LETTER RREH FINAL FORM FB8C ; [.2348.0020.001A] # ARABIC LETTER RREH ISOLATED FORM 0692 ; [.2349.0020.0002] # ARABIC LETTER REH WITH SMALL V 0693 ; [.234A.0020.0002] # ARABIC LETTER REH WITH RING 0694 ; [.234B.0020.0002] # ARABIC LETTER REH WITH DOT BELOW 0695 ; [.234C.0020.0002] # ARABIC LETTER REH WITH SMALL V BELOW 0696 ; [.234D.0020.0002] # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE 0697 ; [.234E.0020.0002] # ARABIC LETTER REH WITH TWO DOTS ABOVE 0698 ; [.234F.0020.0002] # ARABIC LETTER JEH FB8B ; [.234F.0020.0019] # ARABIC LETTER JEH FINAL FORM FB8A ; [.234F.0020.001A] # ARABIC LETTER JEH ISOLATED FORM 0699 ; [.2350.0020.0002] # ARABIC LETTER REH WITH FOUR DOTS ABOVE 06EF ; [.2351.0020.0002] # ARABIC LETTER REH WITH INVERTED V 075B ; [.2352.0020.0002] # ARABIC LETTER REH WITH STROKE 076B ; [.2353.0020.0002] # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE 076C ; [.2354.0020.0002] # ARABIC LETTER REH WITH HAMZA ABOVE 0771 ; [.2355.0020.0002] # ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS 08AA ; [.2356.0020.0002] # ARABIC LETTER REH WITH LOOP 08B2 ; [.2357.0020.0002] # ARABIC LETTER ZAIN WITH INVERTED V ABOVE 08B9 ; [.2358.0020.0002] # ARABIC LETTER REH WITH SMALL NOON ABOVE 0633 ; [.2359.0020.0002] # ARABIC LETTER SEEN 1EE0E ; [.2359.0020.0005] # ARABIC MATHEMATICAL SEEN 1EE2E ; [.2359.0020.0005] # ARABIC MATHEMATICAL INITIAL SEEN 1EE4E ; [.2359.0020.0005] # ARABIC MATHEMATICAL TAILED SEEN 1EE6E ; [.2359.0020.0005] # ARABIC MATHEMATICAL STRETCHED SEEN 1EE8E ; [.2359.0020.0005] # ARABIC MATHEMATICAL LOOPED SEEN 1EEAE ; [.2359.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN FEB3 ; [.2359.0020.0017] # ARABIC LETTER SEEN INITIAL FORM FEB4 ; [.2359.0020.0018] # ARABIC LETTER SEEN MEDIAL FORM FEB2 ; [.2359.0020.0019] # ARABIC LETTER SEEN FINAL FORM FEB1 ; [.2359.0020.001A] # ARABIC LETTER SEEN ISOLATED FORM FCAD ; [.2359.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM FD34 ; [.2359.0020.0018][.2325.0020.0018] # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM FC1C ; [.2359.0020.001A][.2325.0020.001A] # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM FD5D ; [.2359.0020.0017][.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM FD5E ; [.2359.0020.0019][.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM FCAE ; [.2359.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM FD35 ; [.2359.0020.0018][.232C.0020.0018] # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM FC1D ; [.2359.0020.001A][.232C.0020.001A] # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM FD5C ; [.2359.0020.0017][.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM FCAF ; [.2359.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM FD36 ; [.2359.0020.0018][.232D.0020.0018] # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM FC1E ; [.2359.0020.001A][.232D.0020.001A] # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM FDA8 ; [.2359.0020.0019][.232D.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM FDC6 ; [.2359.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM FD2A ; [.2359.0020.0019][.2346.0020.0019] # ARABIC LIGATURE SEEN WITH REH FINAL FORM FD0E ; [.2359.0020.001A][.2346.0020.001A] # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM FCB0 ; [.2359.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM FCE7 ; [.2359.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM FC1F ; [.2359.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM FD61 ; [.2359.0020.0017][.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM FD60 ; [.2359.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM FD5F ; [.2359.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM FD63 ; [.2359.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM FD62 ; [.2359.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM FD31 ; [.2359.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM FCE8 ; [.2359.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM FD17 ; [.2359.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM FCFB ; [.2359.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM FD18 ; [.2359.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SEEN WITH YEH FINAL FORM FCFC ; [.2359.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM 0634 ; [.235A.0020.0002] # ARABIC LETTER SHEEN 1EE14 ; [.235A.0020.0005] # ARABIC MATHEMATICAL SHEEN 1EE34 ; [.235A.0020.0005] # ARABIC MATHEMATICAL INITIAL SHEEN 1EE54 ; [.235A.0020.0005] # ARABIC MATHEMATICAL TAILED SHEEN 1EE74 ; [.235A.0020.0005] # ARABIC MATHEMATICAL STRETCHED SHEEN 1EE94 ; [.235A.0020.0005] # ARABIC MATHEMATICAL LOOPED SHEEN 1EEB4 ; [.235A.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN FEB7 ; [.235A.0020.0017] # ARABIC LETTER SHEEN INITIAL FORM FEB8 ; [.235A.0020.0018] # ARABIC LETTER SHEEN MEDIAL FORM FEB6 ; [.235A.0020.0019] # ARABIC LETTER SHEEN FINAL FORM FEB5 ; [.235A.0020.001A] # ARABIC LETTER SHEEN ISOLATED FORM FD2D ; [.235A.0020.0017][.2325.0020.0017] # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM FD37 ; [.235A.0020.0018][.2325.0020.0018] # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM FD25 ; [.235A.0020.0019][.2325.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM FD09 ; [.235A.0020.001A][.2325.0020.001A] # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM FD69 ; [.235A.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM FD2E ; [.235A.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM FD38 ; [.235A.0020.0018][.232C.0020.0018] # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM FD26 ; [.235A.0020.0019][.232C.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM FD0A ; [.235A.0020.001A][.232C.0020.001A] # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM FD68 ; [.235A.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM FD67 ; [.235A.0020.0019][.232C.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM FDAA ; [.235A.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM FD2F ; [.235A.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM FD39 ; [.235A.0020.0018][.232D.0020.0018] # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM FD27 ; [.235A.0020.0019][.232D.0020.0019] # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM FD0B ; [.235A.0020.001A][.232D.0020.001A] # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM FD29 ; [.235A.0020.0019][.2346.0020.0019] # ARABIC LIGATURE SHEEN WITH REH FINAL FORM FD0D ; [.235A.0020.001A][.2346.0020.001A] # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM FD30 ; [.235A.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM FCE9 ; [.235A.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM FD28 ; [.235A.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM FD0C ; [.235A.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM FD6B ; [.235A.0020.0017][.23A3.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM FD6A ; [.235A.0020.0019][.23A3.0020.0019][.232D.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM FD6D ; [.235A.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM FD6C ; [.235A.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM FD32 ; [.235A.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM FCEA ; [.235A.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM FD19 ; [.235A.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM FCFD ; [.235A.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM FD1A ; [.235A.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM FCFE ; [.235A.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM 069A ; [.235B.0020.0002] # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE 069B ; [.235C.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW 069C ; [.235D.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE 06FA ; [.235E.0020.0002] # ARABIC LETTER SHEEN WITH DOT BELOW 075C ; [.235F.0020.0002] # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE 076D ; [.2360.0020.0002] # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE 0770 ; [.2361.0020.0002] # ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS 077D ; [.2362.0020.0002] # ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE 077E ; [.2363.0020.0002] # ARABIC LETTER SEEN WITH INVERTED V 0635 ; [.2364.0020.0002] # ARABIC LETTER SAD 1EE11 ; [.2364.0020.0005] # ARABIC MATHEMATICAL SAD 1EE31 ; [.2364.0020.0005] # ARABIC MATHEMATICAL INITIAL SAD 1EE51 ; [.2364.0020.0005] # ARABIC MATHEMATICAL TAILED SAD 1EE71 ; [.2364.0020.0005] # ARABIC MATHEMATICAL STRETCHED SAD 1EE91 ; [.2364.0020.0005] # ARABIC MATHEMATICAL LOOPED SAD 1EEB1 ; [.2364.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SAD FEBB ; [.2364.0020.0017] # ARABIC LETTER SAD INITIAL FORM FEBC ; [.2364.0020.0018] # ARABIC LETTER SAD MEDIAL FORM FEBA ; [.2364.0020.0019] # ARABIC LETTER SAD FINAL FORM FEB9 ; [.2364.0020.001A] # ARABIC LETTER SAD ISOLATED FORM FCB1 ; [.2364.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SAD WITH HAH INITIAL FORM FC20 ; [.2364.0020.001A][.232C.0020.001A] # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM FD65 ; [.2364.0020.0017][.232C.0020.0017][.232C.0020.0017] # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM FD64 ; [.2364.0020.0019][.232C.0020.0019][.232C.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM FDA9 ; [.2364.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM FCB2 ; [.2364.0020.0017][.232D.0020.0017] # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM FD2B ; [.2364.0020.0019][.2346.0020.0019] # ARABIC LIGATURE SAD WITH REH FINAL FORM FD0F ; [.2364.0020.001A][.2346.0020.001A] # ARABIC LIGATURE SAD WITH REH ISOLATED FORM FDF5 ; [.2364.0020.001A][.239C.0020.001A][.236E.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SALAM ISOLATED FORM FDF9 ; [.2364.0020.001A][.239C.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SALLA ISOLATED FORM FDFA ; [.2364.0020.001A][.239C.0020.001A][.23C5.0020.001A][*0209.0020.001A][.230B.0020.001A][.239C.0020.001A][.239C.0020.001A][.23B1.0020.001A][*0209.0020.001A][.236E.0020.001A][.239C.0020.001A][.23C6.0020.001A][.23B1.0020.001A][*0209.0020.001A][.23B7.0020.001A][.2359.0020.001A][.239C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM FDF0 ; [.2364.0020.001A][.239C.0020.001A][.23D4.0020.001A] # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM FCB3 ; [.2364.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM FC21 ; [.2364.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM FDC5 ; [.2364.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM FD66 ; [.2364.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM FD21 ; [.2364.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM FD05 ; [.2364.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM FD22 ; [.2364.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE SAD WITH YEH FINAL FORM FD06 ; [.2364.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM 0636 ; [.2365.0020.0002] # ARABIC LETTER DAD 1EE19 ; [.2365.0020.0005] # ARABIC MATHEMATICAL DAD 1EE39 ; [.2365.0020.0005] # ARABIC MATHEMATICAL INITIAL DAD 1EE59 ; [.2365.0020.0005] # ARABIC MATHEMATICAL TAILED DAD 1EE79 ; [.2365.0020.0005] # ARABIC MATHEMATICAL STRETCHED DAD 1EE99 ; [.2365.0020.0005] # ARABIC MATHEMATICAL LOOPED DAD 1EEB9 ; [.2365.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAD FEBF ; [.2365.0020.0017] # ARABIC LETTER DAD INITIAL FORM FEC0 ; [.2365.0020.0018] # ARABIC LETTER DAD MEDIAL FORM FEBE ; [.2365.0020.0019] # ARABIC LETTER DAD FINAL FORM FEBD ; [.2365.0020.001A] # ARABIC LETTER DAD ISOLATED FORM FCB4 ; [.2365.0020.0017][.2325.0020.0017] # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM FC22 ; [.2365.0020.001A][.2325.0020.001A] # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM FCB5 ; [.2365.0020.0017][.232C.0020.0017] # ARABIC LIGATURE DAD WITH HAH INITIAL FORM FC23 ; [.2365.0020.001A][.232C.0020.001A] # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM FD6E ; [.2365.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM FDAB ; [.2365.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM FCB6 ; [.2365.0020.0017][.232D.0020.0017] # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM FC24 ; [.2365.0020.001A][.232D.0020.001A] # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM FD70 ; [.2365.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM FD6F ; [.2365.0020.0019][.232D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM FD2C ; [.2365.0020.0019][.2346.0020.0019] # ARABIC LIGATURE DAD WITH REH FINAL FORM FD10 ; [.2365.0020.001A][.2346.0020.001A] # ARABIC LIGATURE DAD WITH REH ISOLATED FORM FCB7 ; [.2365.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM FC25 ; [.2365.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM FD23 ; [.2365.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM FD07 ; [.2365.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM FD24 ; [.2365.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE DAD WITH YEH FINAL FORM FD08 ; [.2365.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM 069D ; [.2366.0020.0002] # ARABIC LETTER SAD WITH TWO DOTS BELOW 08AF ; [.2367.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS BELOW 069E ; [.2368.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS ABOVE 06FB ; [.2369.0020.0002] # ARABIC LETTER DAD WITH DOT BELOW 0637 ; [.236A.0020.0002] # ARABIC LETTER TAH 1EE08 ; [.236A.0020.0005] # ARABIC MATHEMATICAL TAH 1EE68 ; [.236A.0020.0005] # ARABIC MATHEMATICAL STRETCHED TAH 1EE88 ; [.236A.0020.0005] # ARABIC MATHEMATICAL LOOPED TAH 1EEA8 ; [.236A.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TAH FEC3 ; [.236A.0020.0017] # ARABIC LETTER TAH INITIAL FORM FEC4 ; [.236A.0020.0018] # ARABIC LETTER TAH MEDIAL FORM FEC2 ; [.236A.0020.0019] # ARABIC LETTER TAH FINAL FORM FEC1 ; [.236A.0020.001A] # ARABIC LETTER TAH ISOLATED FORM FCB8 ; [.236A.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TAH WITH HAH INITIAL FORM FC26 ; [.236A.0020.001A][.232C.0020.001A] # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM FD33 ; [.236A.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM FD3A ; [.236A.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM FC27 ; [.236A.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM FD72 ; [.236A.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM FD71 ; [.236A.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM FD73 ; [.236A.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM FD74 ; [.236A.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM FD11 ; [.236A.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM FCF5 ; [.236A.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM FD12 ; [.236A.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE TAH WITH YEH FINAL FORM FCF6 ; [.236A.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM 0638 ; [.236B.0020.0002] # ARABIC LETTER ZAH 1EE1A ; [.236B.0020.0005] # ARABIC MATHEMATICAL ZAH 1EE7A ; [.236B.0020.0005] # ARABIC MATHEMATICAL STRETCHED ZAH 1EE9A ; [.236B.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAH 1EEBA ; [.236B.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH FEC7 ; [.236B.0020.0017] # ARABIC LETTER ZAH INITIAL FORM FEC8 ; [.236B.0020.0018] # ARABIC LETTER ZAH MEDIAL FORM FEC6 ; [.236B.0020.0019] # ARABIC LETTER ZAH FINAL FORM FEC5 ; [.236B.0020.001A] # ARABIC LETTER ZAH ISOLATED FORM FCB9 ; [.236B.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM FD3B ; [.236B.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM FC28 ; [.236B.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM 069F ; [.236C.0020.0002] # ARABIC LETTER TAH WITH THREE DOTS ABOVE 08A3 ; [.236D.0020.0002] # ARABIC LETTER TAH WITH TWO DOTS ABOVE 0639 ; [.236E.0020.0002] # ARABIC LETTER AIN 1EE0F ; [.236E.0020.0005] # ARABIC MATHEMATICAL AIN 1EE2F ; [.236E.0020.0005] # ARABIC MATHEMATICAL INITIAL AIN 1EE4F ; [.236E.0020.0005] # ARABIC MATHEMATICAL TAILED AIN 1EE6F ; [.236E.0020.0005] # ARABIC MATHEMATICAL STRETCHED AIN 1EE8F ; [.236E.0020.0005] # ARABIC MATHEMATICAL LOOPED AIN 1EEAF ; [.236E.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK AIN FECB ; [.236E.0020.0017] # ARABIC LETTER AIN INITIAL FORM FECC ; [.236E.0020.0018] # ARABIC LETTER AIN MEDIAL FORM FECA ; [.236E.0020.0019] # ARABIC LETTER AIN FINAL FORM FEC9 ; [.236E.0020.001A] # ARABIC LETTER AIN ISOLATED FORM FCBA ; [.236E.0020.0017][.2325.0020.0017] # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM FC29 ; [.236E.0020.001A][.2325.0020.001A] # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM FDC4 ; [.236E.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM FD75 ; [.236E.0020.0019][.2325.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM FDF7 ; [.236E.0020.001A][.239C.0020.001A][.23C6.0020.001A][.23B1.0020.001A] # ARABIC LIGATURE ALAYHE ISOLATED FORM FCBB ; [.236E.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM FC2A ; [.236E.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM FD77 ; [.236E.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM FD76 ; [.236E.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM FD78 ; [.236E.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM FDB6 ; [.236E.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM FD13 ; [.236E.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM FCF7 ; [.236E.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM FD14 ; [.236E.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE AIN WITH YEH FINAL FORM FCF8 ; [.236E.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM 063A ; [.236F.0020.0002] # ARABIC LETTER GHAIN 1EE1B ; [.236F.0020.0005] # ARABIC MATHEMATICAL GHAIN 1EE3B ; [.236F.0020.0005] # ARABIC MATHEMATICAL INITIAL GHAIN 1EE5B ; [.236F.0020.0005] # ARABIC MATHEMATICAL TAILED GHAIN 1EE7B ; [.236F.0020.0005] # ARABIC MATHEMATICAL STRETCHED GHAIN 1EE9B ; [.236F.0020.0005] # ARABIC MATHEMATICAL LOOPED GHAIN 1EEBB ; [.236F.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN FECF ; [.236F.0020.0017] # ARABIC LETTER GHAIN INITIAL FORM FED0 ; [.236F.0020.0018] # ARABIC LETTER GHAIN MEDIAL FORM FECE ; [.236F.0020.0019] # ARABIC LETTER GHAIN FINAL FORM FECD ; [.236F.0020.001A] # ARABIC LETTER GHAIN ISOLATED FORM FCBC ; [.236F.0020.0017][.2325.0020.0017] # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM FC2B ; [.236F.0020.001A][.2325.0020.001A] # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM FCBD ; [.236F.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM FC2C ; [.236F.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM FD79 ; [.236F.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM FD7B ; [.236F.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM FD7A ; [.236F.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM FD15 ; [.236F.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM FCF9 ; [.236F.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM FD16 ; [.236F.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM FCFA ; [.236F.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM 06A0 ; [.2370.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS ABOVE 06FC ; [.2371.0020.0002] # ARABIC LETTER GHAIN WITH DOT BELOW 075D ; [.2372.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS ABOVE 075E ; [.2373.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE 075F ; [.2374.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE 08B3 ; [.2375.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS BELOW 0641 ; [.2376.0020.0002] # ARABIC LETTER FEH 1EE10 ; [.2376.0020.0005] # ARABIC MATHEMATICAL FEH 1EE30 ; [.2376.0020.0005] # ARABIC MATHEMATICAL INITIAL FEH 1EE70 ; [.2376.0020.0005] # ARABIC MATHEMATICAL STRETCHED FEH 1EE90 ; [.2376.0020.0005] # ARABIC MATHEMATICAL LOOPED FEH 1EEB0 ; [.2376.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK FEH FED3 ; [.2376.0020.0017] # ARABIC LETTER FEH INITIAL FORM FED4 ; [.2376.0020.0018] # ARABIC LETTER FEH MEDIAL FORM FED2 ; [.2376.0020.0019] # ARABIC LETTER FEH FINAL FORM FED1 ; [.2376.0020.001A] # ARABIC LETTER FEH ISOLATED FORM FCBE ; [.2376.0020.0017][.2325.0020.0017] # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM FC2D ; [.2376.0020.001A][.2325.0020.001A] # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM FCBF ; [.2376.0020.0017][.232C.0020.0017] # ARABIC LIGATURE FEH WITH HAH INITIAL FORM FC2E ; [.2376.0020.001A][.232C.0020.001A] # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM FCC0 ; [.2376.0020.0017][.232D.0020.0017] # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM FC2F ; [.2376.0020.001A][.232D.0020.001A] # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM FD7D ; [.2376.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM FD7C ; [.2376.0020.0019][.232D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM FCC1 ; [.2376.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM FC30 ; [.2376.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM FDC1 ; [.2376.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM FC7C ; [.2376.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM FC31 ; [.2376.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM FC7D ; [.2376.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE FEH WITH YEH FINAL FORM FC32 ; [.2376.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM 06A1 ; [.2377.0020.0002] # ARABIC LETTER DOTLESS FEH 1EE1E ; [.2377.0020.0005] # ARABIC MATHEMATICAL DOTLESS FEH 1EE7E ; [.2377.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS FEH 06A2 ; [.2378.0020.0002] # ARABIC LETTER FEH WITH DOT MOVED BELOW 08BB ; [.2379.0020.0002] # ARABIC LETTER AFRICAN FEH 06A3 ; [.237A.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW 06A4 ; [.237B.0020.0002] # ARABIC LETTER VEH FB6C ; [.237B.0020.0017] # ARABIC LETTER VEH INITIAL FORM FB6D ; [.237B.0020.0018] # ARABIC LETTER VEH MEDIAL FORM FB6B ; [.237B.0020.0019] # ARABIC LETTER VEH FINAL FORM FB6A ; [.237B.0020.001A] # ARABIC LETTER VEH ISOLATED FORM 08A4 ; [.237C.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE 06A5 ; [.237D.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS BELOW 06A6 ; [.237E.0020.0002] # ARABIC LETTER PEHEH FB70 ; [.237E.0020.0017] # ARABIC LETTER PEHEH INITIAL FORM FB71 ; [.237E.0020.0018] # ARABIC LETTER PEHEH MEDIAL FORM FB6F ; [.237E.0020.0019] # ARABIC LETTER PEHEH FINAL FORM FB6E ; [.237E.0020.001A] # ARABIC LETTER PEHEH ISOLATED FORM 0760 ; [.237F.0020.0002] # ARABIC LETTER FEH WITH TWO DOTS BELOW 0761 ; [.2380.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW 066F ; [.2381.0020.0002] # ARABIC LETTER DOTLESS QAF 1EE1F ; [.2381.0020.0005] # ARABIC MATHEMATICAL DOTLESS QAF 1EE5F ; [.2381.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS QAF 0642 ; [.2382.0020.0002] # ARABIC LETTER QAF 1EE12 ; [.2382.0020.0005] # ARABIC MATHEMATICAL QAF 1EE32 ; [.2382.0020.0005] # ARABIC MATHEMATICAL INITIAL QAF 1EE52 ; [.2382.0020.0005] # ARABIC MATHEMATICAL TAILED QAF 1EE72 ; [.2382.0020.0005] # ARABIC MATHEMATICAL STRETCHED QAF 1EE92 ; [.2382.0020.0005] # ARABIC MATHEMATICAL LOOPED QAF 1EEB2 ; [.2382.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK QAF FED7 ; [.2382.0020.0017] # ARABIC LETTER QAF INITIAL FORM FED8 ; [.2382.0020.0018] # ARABIC LETTER QAF MEDIAL FORM FED6 ; [.2382.0020.0019] # ARABIC LETTER QAF FINAL FORM FED5 ; [.2382.0020.001A] # ARABIC LETTER QAF ISOLATED FORM FCC2 ; [.2382.0020.0017][.232C.0020.0017] # ARABIC LIGATURE QAF WITH HAH INITIAL FORM FC33 ; [.2382.0020.001A][.232C.0020.001A] # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM FDF1 ; [.2382.0020.001A][.239C.0020.001A][.23D4.0020.001A] # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM FCC3 ; [.2382.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM FC34 ; [.2382.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM FDB4 ; [.2382.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM FD7E ; [.2382.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM FD7F ; [.2382.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM FDB2 ; [.2382.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM FC7E ; [.2382.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM FC35 ; [.2382.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM FC7F ; [.2382.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE QAF WITH YEH FINAL FORM FC36 ; [.2382.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM 06A7 ; [.2383.0020.0002] # ARABIC LETTER QAF WITH DOT ABOVE 08BC ; [.2384.0020.0002] # ARABIC LETTER AFRICAN QAF 06A8 ; [.2385.0020.0002] # ARABIC LETTER QAF WITH THREE DOTS ABOVE 08A5 ; [.2386.0020.0002] # ARABIC LETTER QAF WITH DOT BELOW 0643 ; [.2387.0020.0002] # ARABIC LETTER KAF 1EE0A ; [.2387.0020.0005] # ARABIC MATHEMATICAL KAF 1EE2A ; [.2387.0020.0005] # ARABIC MATHEMATICAL INITIAL KAF 1EE6A ; [.2387.0020.0005] # ARABIC MATHEMATICAL STRETCHED KAF FEDB ; [.2387.0020.0017] # ARABIC LETTER KAF INITIAL FORM FEDC ; [.2387.0020.0018] # ARABIC LETTER KAF MEDIAL FORM FEDA ; [.2387.0020.0019] # ARABIC LETTER KAF FINAL FORM FED9 ; [.2387.0020.001A] # ARABIC LETTER KAF ISOLATED FORM FC80 ; [.2387.0020.0019][.230B.0020.0019] # ARABIC LIGATURE KAF WITH ALEF FINAL FORM FC37 ; [.2387.0020.001A][.230B.0020.001A] # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM FCC4 ; [.2387.0020.0017][.2325.0020.0017] # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM FC38 ; [.2387.0020.001A][.2325.0020.001A] # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM FCC5 ; [.2387.0020.0017][.232C.0020.0017] # ARABIC LIGATURE KAF WITH HAH INITIAL FORM FC39 ; [.2387.0020.001A][.232C.0020.001A] # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM FCC6 ; [.2387.0020.0017][.232D.0020.0017] # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM FC3A ; [.2387.0020.001A][.232D.0020.001A] # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM FCC7 ; [.2387.0020.0017][.239C.0020.0017] # ARABIC LIGATURE KAF WITH LAM INITIAL FORM FCEB ; [.2387.0020.0018][.239C.0020.0018] # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM FC81 ; [.2387.0020.0019][.239C.0020.0019] # ARABIC LIGATURE KAF WITH LAM FINAL FORM FC3B ; [.2387.0020.001A][.239C.0020.001A] # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM FCC8 ; [.2387.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM FCEC ; [.2387.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM FC82 ; [.2387.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE KAF WITH MEEM FINAL FORM FC3C ; [.2387.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM FDC3 ; [.2387.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM FDBB ; [.2387.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM FDB7 ; [.2387.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM FC83 ; [.2387.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM FC3D ; [.2387.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM FC84 ; [.2387.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE KAF WITH YEH FINAL FORM FC3E ; [.2387.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM 06A9 ; [.2388.0020.0002] # ARABIC LETTER KEHEH FB90 ; [.2388.0020.0017] # ARABIC LETTER KEHEH INITIAL FORM FB91 ; [.2388.0020.0018] # ARABIC LETTER KEHEH MEDIAL FORM FB8F ; [.2388.0020.0019] # ARABIC LETTER KEHEH FINAL FORM FB8E ; [.2388.0020.001A] # ARABIC LETTER KEHEH ISOLATED FORM 06AA ; [.2389.0020.0002] # ARABIC LETTER SWASH KAF 06AB ; [.238A.0020.0002] # ARABIC LETTER KAF WITH RING 06AC ; [.238B.0020.0002] # ARABIC LETTER KAF WITH DOT ABOVE 077F ; [.238C.0020.0002] # ARABIC LETTER KAF WITH TWO DOTS ABOVE 06AD ; [.238D.0020.0002] # ARABIC LETTER NG FBD5 ; [.238D.0020.0017] # ARABIC LETTER NG INITIAL FORM FBD6 ; [.238D.0020.0018] # ARABIC LETTER NG MEDIAL FORM FBD4 ; [.238D.0020.0019] # ARABIC LETTER NG FINAL FORM FBD3 ; [.238D.0020.001A] # ARABIC LETTER NG ISOLATED FORM 06AE ; [.238E.0020.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW 08B4 ; [.238F.0020.0002] # ARABIC LETTER KAF WITH DOT BELOW 06AF ; [.2390.0020.0002] # ARABIC LETTER GAF FB94 ; [.2390.0020.0017] # ARABIC LETTER GAF INITIAL FORM FB95 ; [.2390.0020.0018] # ARABIC LETTER GAF MEDIAL FORM FB93 ; [.2390.0020.0019] # ARABIC LETTER GAF FINAL FORM FB92 ; [.2390.0020.001A] # ARABIC LETTER GAF ISOLATED FORM 08B0 ; [.2391.0020.0002] # ARABIC LETTER GAF WITH INVERTED STROKE 06B0 ; [.2392.0020.0002] # ARABIC LETTER GAF WITH RING 06B1 ; [.2393.0020.0002] # ARABIC LETTER NGOEH FB9C ; [.2393.0020.0017] # ARABIC LETTER NGOEH INITIAL FORM FB9D ; [.2393.0020.0018] # ARABIC LETTER NGOEH MEDIAL FORM FB9B ; [.2393.0020.0019] # ARABIC LETTER NGOEH FINAL FORM FB9A ; [.2393.0020.001A] # ARABIC LETTER NGOEH ISOLATED FORM 06B2 ; [.2394.0020.0002] # ARABIC LETTER GAF WITH TWO DOTS BELOW 06B3 ; [.2395.0020.0002] # ARABIC LETTER GUEH FB98 ; [.2395.0020.0017] # ARABIC LETTER GUEH INITIAL FORM FB99 ; [.2395.0020.0018] # ARABIC LETTER GUEH MEDIAL FORM FB97 ; [.2395.0020.0019] # ARABIC LETTER GUEH FINAL FORM FB96 ; [.2395.0020.001A] # ARABIC LETTER GUEH ISOLATED FORM 06B4 ; [.2396.0020.0002] # ARABIC LETTER GAF WITH THREE DOTS ABOVE 0762 ; [.2397.0020.0002] # ARABIC LETTER KEHEH WITH DOT ABOVE 063B ; [.2398.0020.0002] # ARABIC LETTER KEHEH WITH TWO DOTS ABOVE 063C ; [.2399.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS BELOW 0763 ; [.239A.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE 0764 ; [.239B.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW 0644 ; [.239C.0020.0002] # ARABIC LETTER LAM 1EE0B ; [.239C.0020.0005] # ARABIC MATHEMATICAL LAM 1EE2B ; [.239C.0020.0005] # ARABIC MATHEMATICAL INITIAL LAM 1EE4B ; [.239C.0020.0005] # ARABIC MATHEMATICAL TAILED LAM 1EE8B ; [.239C.0020.0005] # ARABIC MATHEMATICAL LOOPED LAM 1EEAB ; [.239C.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK LAM FEDF ; [.239C.0020.0017] # ARABIC LETTER LAM INITIAL FORM FEE0 ; [.239C.0020.0018] # ARABIC LETTER LAM MEDIAL FORM FEDE ; [.239C.0020.0019] # ARABIC LETTER LAM FINAL FORM FEDD ; [.239C.0020.001A] # ARABIC LETTER LAM ISOLATED FORM FEF6 ; [.239C.0020.0019][.22FE.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM FEF5 ; [.239C.0020.001A][.22FE.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM FEF8 ; [.239C.0020.0019][.22FF.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM FEF7 ; [.239C.0020.001A][.22FF.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM FEFA ; [.239C.0020.0019][.2303.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM FEF9 ; [.239C.0020.001A][.2303.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM FEFC ; [.239C.0020.0019][.230B.0020.0019] # ARABIC LIGATURE LAM WITH ALEF FINAL FORM FEFB ; [.239C.0020.001A][.230B.0020.001A] # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM FCC9 ; [.239C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM FC3F ; [.239C.0020.001A][.2325.0020.001A] # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM FD83 ; [.239C.0020.0017][.2325.0020.0017][.2325.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM FD84 ; [.239C.0020.0019][.2325.0020.0019][.2325.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM FDBA ; [.239C.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM FDBC ; [.239C.0020.0019][.2325.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM FDAC ; [.239C.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM FCCA ; [.239C.0020.0017][.232C.0020.0017] # ARABIC LIGATURE LAM WITH HAH INITIAL FORM FC40 ; [.239C.0020.001A][.232C.0020.001A] # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM FDB5 ; [.239C.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM FD80 ; [.239C.0020.0019][.232C.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM FD82 ; [.239C.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM FD81 ; [.239C.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM FCCB ; [.239C.0020.0017][.232D.0020.0017] # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM FC41 ; [.239C.0020.001A][.232D.0020.001A] # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM FD86 ; [.239C.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM FD85 ; [.239C.0020.0019][.232D.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM FCCC ; [.239C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM FCED ; [.239C.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM FC85 ; [.239C.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE LAM WITH MEEM FINAL FORM FC42 ; [.239C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM FD88 ; [.239C.0020.0017][.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM FD87 ; [.239C.0020.0019][.23A3.0020.0019][.232C.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM FDAD ; [.239C.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM FCCD ; [.239C.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE LAM WITH HEH INITIAL FORM FC86 ; [.239C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM FC43 ; [.239C.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM FC87 ; [.239C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE LAM WITH YEH FINAL FORM FC44 ; [.239C.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM 06B5 ; [.239D.0020.0002] # ARABIC LETTER LAM WITH SMALL V 06B6 ; [.239E.0020.0002] # ARABIC LETTER LAM WITH DOT ABOVE 06B7 ; [.239F.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS ABOVE 06B8 ; [.23A0.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS BELOW 076A ; [.23A1.0020.0002] # ARABIC LETTER LAM WITH BAR 08A6 ; [.23A2.0020.0002] # ARABIC LETTER LAM WITH DOUBLE BAR 0645 ; [.23A3.0020.0002] # ARABIC LETTER MEEM 1EE0C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL MEEM 1EE2C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL INITIAL MEEM 1EE6C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL STRETCHED MEEM 1EE8C ; [.23A3.0020.0005] # ARABIC MATHEMATICAL LOOPED MEEM 1EEAC ; [.23A3.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM FEE3 ; [.23A3.0020.0017] # ARABIC LETTER MEEM INITIAL FORM FEE4 ; [.23A3.0020.0018] # ARABIC LETTER MEEM MEDIAL FORM FEE2 ; [.23A3.0020.0019] # ARABIC LETTER MEEM FINAL FORM FEE1 ; [.23A3.0020.001A] # ARABIC LETTER MEEM ISOLATED FORM 06FE ; [.23A3.0020.0004][.0000.0111.0004] # ARABIC SIGN SINDHI POSTPOSITION MEN FC88 ; [.23A3.0020.0019][.230B.0020.0019] # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM FCCE ; [.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM FC45 ; [.23A3.0020.001A][.2325.0020.001A] # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM FD8C ; [.23A3.0020.0017][.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM FD92 ; [.23A3.0020.0017][.2325.0020.0017][.232D.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM FD8D ; [.23A3.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM FDC0 ; [.23A3.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM FCCF ; [.23A3.0020.0017][.232C.0020.0017] # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM FC46 ; [.23A3.0020.001A][.232C.0020.001A] # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM FD89 ; [.23A3.0020.0017][.232C.0020.0017][.2325.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM FD8A ; [.23A3.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM FDF4 ; [.23A3.0020.001A][.232C.0020.001A][.23A3.0020.001A][.2337.0020.001A] # ARABIC LIGATURE MOHAMMAD ISOLATED FORM FD8B ; [.23A3.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM FCD0 ; [.23A3.0020.0017][.232D.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM FC47 ; [.23A3.0020.001A][.232D.0020.001A] # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM FD8E ; [.23A3.0020.0017][.232D.0020.0017][.2325.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM FD8F ; [.23A3.0020.0017][.232D.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FDB9 ; [.23A3.0020.0019][.232D.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM FCD1 ; [.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM FC89 ; [.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM FC48 ; [.23A3.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM FDB1 ; [.23A3.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM FC49 ; [.23A3.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM FC4A ; [.23A3.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM 0765 ; [.23A4.0020.0002] # ARABIC LETTER MEEM WITH DOT ABOVE 0766 ; [.23A5.0020.0002] # ARABIC LETTER MEEM WITH DOT BELOW 08A7 ; [.23A6.0020.0002] # ARABIC LETTER MEEM WITH THREE DOTS ABOVE 0646 ; [.23A7.0020.0002] # ARABIC LETTER NOON 1EE0D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL NOON 1EE2D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL INITIAL NOON 1EE4D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL TAILED NOON 1EE6D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL STRETCHED NOON 1EE8D ; [.23A7.0020.0005] # ARABIC MATHEMATICAL LOOPED NOON 1EEAD ; [.23A7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK NOON FEE7 ; [.23A7.0020.0017] # ARABIC LETTER NOON INITIAL FORM FEE8 ; [.23A7.0020.0018] # ARABIC LETTER NOON MEDIAL FORM FEE6 ; [.23A7.0020.0019] # ARABIC LETTER NOON FINAL FORM FEE5 ; [.23A7.0020.001A] # ARABIC LETTER NOON ISOLATED FORM FCD2 ; [.23A7.0020.0017][.2325.0020.0017] # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM FC4B ; [.23A7.0020.001A][.2325.0020.001A] # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM FDB8 ; [.23A7.0020.0017][.2325.0020.0017][.232C.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM FDBD ; [.23A7.0020.0019][.2325.0020.0019][.232C.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM FD98 ; [.23A7.0020.0017][.2325.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM FD97 ; [.23A7.0020.0019][.2325.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM FD99 ; [.23A7.0020.0019][.2325.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM FDC7 ; [.23A7.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM FCD3 ; [.23A7.0020.0017][.232C.0020.0017] # ARABIC LIGATURE NOON WITH HAH INITIAL FORM FC4C ; [.23A7.0020.001A][.232C.0020.001A] # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM FD95 ; [.23A7.0020.0017][.232C.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM FD96 ; [.23A7.0020.0019][.232C.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM FDB3 ; [.23A7.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM FCD4 ; [.23A7.0020.0017][.232D.0020.0017] # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM FC4D ; [.23A7.0020.001A][.232D.0020.001A] # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM FC8A ; [.23A7.0020.0019][.2346.0020.0019] # ARABIC LIGATURE NOON WITH REH FINAL FORM FC8B ; [.23A7.0020.0019][.2347.0020.0019] # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM FCD5 ; [.23A7.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM FCEE ; [.23A7.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM FC8C ; [.23A7.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE NOON WITH MEEM FINAL FORM FC4E ; [.23A7.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM FD9B ; [.23A7.0020.0019][.23A3.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM FD9A ; [.23A7.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM FC8D ; [.23A7.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE NOON WITH NOON FINAL FORM FCD6 ; [.23A7.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE NOON WITH HEH INITIAL FORM FCEF ; [.23A7.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM FC8E ; [.23A7.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM FC4F ; [.23A7.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM FC8F ; [.23A7.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE NOON WITH YEH FINAL FORM FC50 ; [.23A7.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM 06BA ; [.23A8.0020.0002] # ARABIC LETTER NOON GHUNNA 1EE1D ; [.23A8.0020.0005] # ARABIC MATHEMATICAL DOTLESS NOON 1EE5D ; [.23A8.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS NOON FB9F ; [.23A8.0020.0019] # ARABIC LETTER NOON GHUNNA FINAL FORM FB9E ; [.23A8.0020.001A] # ARABIC LETTER NOON GHUNNA ISOLATED FORM 08BD ; [.23A9.0020.0002] # ARABIC LETTER AFRICAN NOON 06BB ; [.23AA.0020.0002] # ARABIC LETTER RNOON FBA2 ; [.23AA.0020.0017] # ARABIC LETTER RNOON INITIAL FORM FBA3 ; [.23AA.0020.0018] # ARABIC LETTER RNOON MEDIAL FORM FBA1 ; [.23AA.0020.0019] # ARABIC LETTER RNOON FINAL FORM FBA0 ; [.23AA.0020.001A] # ARABIC LETTER RNOON ISOLATED FORM 06BC ; [.23AB.0020.0002] # ARABIC LETTER NOON WITH RING 06BD ; [.23AC.0020.0002] # ARABIC LETTER NOON WITH THREE DOTS ABOVE 06B9 ; [.23AD.0020.0002] # ARABIC LETTER NOON WITH DOT BELOW 0767 ; [.23AE.0020.0002] # ARABIC LETTER NOON WITH TWO DOTS BELOW 0768 ; [.23AF.0020.0002] # ARABIC LETTER NOON WITH SMALL TAH 0769 ; [.23B0.0020.0002] # ARABIC LETTER NOON WITH SMALL V 0647 ; [.23B1.0020.0002] # ARABIC LETTER HEH 1EE24 ; [.23B1.0020.0005] # ARABIC MATHEMATICAL INITIAL HEH 1EE64 ; [.23B1.0020.0005] # ARABIC MATHEMATICAL STRETCHED HEH 1EE84 ; [.23B1.0020.0005] # ARABIC MATHEMATICAL LOOPED HEH FEEB ; [.23B1.0020.0017] # ARABIC LETTER HEH INITIAL FORM FEEC ; [.23B1.0020.0018] # ARABIC LETTER HEH MEDIAL FORM FEEA ; [.23B1.0020.0019] # ARABIC LETTER HEH FINAL FORM FEE9 ; [.23B1.0020.001A] # ARABIC LETTER HEH ISOLATED FORM FCD9 ; [.23B1.0020.0017][.0000.0098.0017] # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM FCD7 ; [.23B1.0020.0017][.2325.0020.0017] # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM FC51 ; [.23B1.0020.001A][.2325.0020.001A] # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM FCD8 ; [.23B1.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM FC52 ; [.23B1.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM FD93 ; [.23B1.0020.0017][.23A3.0020.0017][.2325.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM FD94 ; [.23B1.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM FC53 ; [.23B1.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM FC54 ; [.23B1.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM 06BE ; [.23B2.0020.0002] # ARABIC LETTER HEH DOACHASHMEE FBAC ; [.23B2.0020.0017] # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM FBAD ; [.23B2.0020.0018] # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM FBAB ; [.23B2.0020.0019] # ARABIC LETTER HEH DOACHASHMEE FINAL FORM FBAA ; [.23B2.0020.001A] # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM 06C1 ; [.23B3.0020.0002] # ARABIC LETTER HEH GOAL FBA8 ; [.23B3.0020.0017] # ARABIC LETTER HEH GOAL INITIAL FORM FBA9 ; [.23B3.0020.0018] # ARABIC LETTER HEH GOAL MEDIAL FORM FBA7 ; [.23B3.0020.0019] # ARABIC LETTER HEH GOAL FINAL FORM FBA6 ; [.23B3.0020.001A] # ARABIC LETTER HEH GOAL ISOLATED FORM 06C2 ; [.23B3.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE 06C3 ; [.23B4.0020.0002] # ARABIC LETTER TEH MARBUTA GOAL 06FF ; [.23B5.0020.0002] # ARABIC LETTER HEH WITH INVERTED V 06D5 ; [.23B6.0020.0002] # ARABIC LETTER AE 06C0 ; [.23B6.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH WITH YEH ABOVE FBA5 ; [.23B6.0020.0019][.0000.0083.0019] # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM FBA4 ; [.23B6.0020.001A][.0000.0083.001A] # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM 0648 ; [.23B7.0020.0002] # ARABIC LETTER WAW 06E5 ; [.23B7.0020.0004] # ARABIC SMALL WAW 1EE05 ; [.23B7.0020.0005] # ARABIC MATHEMATICAL WAW 1EE85 ; [.23B7.0020.0005] # ARABIC MATHEMATICAL LOOPED WAW 1EEA5 ; [.23B7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK WAW FEEE ; [.23B7.0020.0019] # ARABIC LETTER WAW FINAL FORM FEED ; [.23B7.0020.001A] # ARABIC LETTER WAW ISOLATED FORM 0676 ; [.23B7.0020.0004][.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA WAW FDF8 ; [.23B7.0020.001A][.2359.0020.001A][.239C.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE WASALLAM ISOLATED FORM 06C4 ; [.23B8.0020.0002] # ARABIC LETTER WAW WITH RING 06C5 ; [.23B9.0020.0002] # ARABIC LETTER KIRGHIZ OE FBE1 ; [.23B9.0020.0019] # ARABIC LETTER KIRGHIZ OE FINAL FORM FBE0 ; [.23B9.0020.001A] # ARABIC LETTER KIRGHIZ OE ISOLATED FORM 06C6 ; [.23BA.0020.0002] # ARABIC LETTER OE FBDA ; [.23BA.0020.0019] # ARABIC LETTER OE FINAL FORM FBD9 ; [.23BA.0020.001A] # ARABIC LETTER OE ISOLATED FORM 06C7 ; [.23BB.0020.0002] # ARABIC LETTER U FBD8 ; [.23BB.0020.0019] # ARABIC LETTER U FINAL FORM FBD7 ; [.23BB.0020.001A] # ARABIC LETTER U ISOLATED FORM 0677 ; [.23BB.0020.0004][.22FD.0020.0004] # ARABIC LETTER U WITH HAMZA ABOVE FBDD ; [.23BB.0020.001A][.22FD.0020.001A] # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM 06C8 ; [.23BC.0020.0002] # ARABIC LETTER YU FBDC ; [.23BC.0020.0019] # ARABIC LETTER YU FINAL FORM FBDB ; [.23BC.0020.001A] # ARABIC LETTER YU ISOLATED FORM 06C9 ; [.23BD.0020.0002] # ARABIC LETTER KIRGHIZ YU FBE3 ; [.23BD.0020.0019] # ARABIC LETTER KIRGHIZ YU FINAL FORM FBE2 ; [.23BD.0020.001A] # ARABIC LETTER KIRGHIZ YU ISOLATED FORM 06CA ; [.23BE.0020.0002] # ARABIC LETTER WAW WITH TWO DOTS ABOVE 06CB ; [.23BF.0020.0002] # ARABIC LETTER VE FBDF ; [.23BF.0020.0019] # ARABIC LETTER VE FINAL FORM FBDE ; [.23BF.0020.001A] # ARABIC LETTER VE ISOLATED FORM 08B1 ; [.23C0.0020.0002] # ARABIC LETTER STRAIGHT WAW 06CF ; [.23C1.0020.0002] # ARABIC LETTER WAW WITH DOT ABOVE 0778 ; [.23C2.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE 0779 ; [.23C3.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE 08AB ; [.23C4.0020.0002] # ARABIC LETTER WAW WITH DOT WITHIN 0649 ; [.23C5.0020.0002] # ARABIC LETTER ALEF MAKSURA FBE8 ; [.23C5.0020.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM FBE9 ; [.23C5.0020.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM FEF0 ; [.23C5.0020.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM FEEF ; [.23C5.0020.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM FC90 ; [.23C5.0020.0019][.0000.0098.0019] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM FC5D ; [.23C5.0020.001A][.0000.0098.001A] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM 064A ; [.23C6.0020.0002] # ARABIC LETTER YEH 06E6 ; [.23C6.0020.0004] # ARABIC SMALL YEH 1EE09 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL YEH 1EE29 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL INITIAL YEH 1EE49 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL TAILED YEH 1EE69 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL STRETCHED YEH 1EE89 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL LOOPED YEH 1EEA9 ; [.23C6.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK YEH FEF3 ; [.23C6.0020.0017] # ARABIC LETTER YEH INITIAL FORM FEF4 ; [.23C6.0020.0018] # ARABIC LETTER YEH MEDIAL FORM FEF2 ; [.23C6.0020.0019] # ARABIC LETTER YEH FINAL FORM FEF1 ; [.23C6.0020.001A] # ARABIC LETTER YEH ISOLATED FORM 0678 ; [.23C6.0020.0004][.22FD.0020.0004] # ARABIC LETTER HIGH HAMZA YEH FCDA ; [.23C6.0020.0017][.2325.0020.0017] # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM FC55 ; [.23C6.0020.001A][.2325.0020.001A] # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM FDAF ; [.23C6.0020.0019][.2325.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM FCDB ; [.23C6.0020.0017][.232C.0020.0017] # ARABIC LIGATURE YEH WITH HAH INITIAL FORM FC56 ; [.23C6.0020.001A][.232C.0020.001A] # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM FDAE ; [.23C6.0020.0019][.232C.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM FCDC ; [.23C6.0020.0017][.232D.0020.0017] # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM FC57 ; [.23C6.0020.001A][.232D.0020.001A] # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM FC91 ; [.23C6.0020.0019][.2346.0020.0019] # ARABIC LIGATURE YEH WITH REH FINAL FORM FC92 ; [.23C6.0020.0019][.2347.0020.0019] # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM FCDD ; [.23C6.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM FCF0 ; [.23C6.0020.0018][.23A3.0020.0018] # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM FC93 ; [.23C6.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE YEH WITH MEEM FINAL FORM FC58 ; [.23C6.0020.001A][.23A3.0020.001A] # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM FD9D ; [.23C6.0020.0017][.23A3.0020.0017][.23A3.0020.0017] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM FD9C ; [.23C6.0020.0019][.23A3.0020.0019][.23A3.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM FDB0 ; [.23C6.0020.0019][.23A3.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM FC94 ; [.23C6.0020.0019][.23A7.0020.0019] # ARABIC LIGATURE YEH WITH NOON FINAL FORM FCDE ; [.23C6.0020.0017][.23B1.0020.0017] # ARABIC LIGATURE YEH WITH HEH INITIAL FORM FCF1 ; [.23C6.0020.0018][.23B1.0020.0018] # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM FC95 ; [.23C6.0020.0019][.23C5.0020.0019] # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM FC59 ; [.23C6.0020.001A][.23C5.0020.001A] # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM FC96 ; [.23C6.0020.0019][.23C6.0020.0019] # ARABIC LIGATURE YEH WITH YEH FINAL FORM FC5A ; [.23C6.0020.001A][.23C6.0020.001A] # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM 06CC ; [.23C7.0020.0002] # ARABIC LETTER FARSI YEH FBFE ; [.23C7.0020.0017] # ARABIC LETTER FARSI YEH INITIAL FORM FBFF ; [.23C7.0020.0018] # ARABIC LETTER FARSI YEH MEDIAL FORM FBFD ; [.23C7.0020.0019] # ARABIC LETTER FARSI YEH FINAL FORM FBFC ; [.23C7.0020.001A] # ARABIC LETTER FARSI YEH ISOLATED FORM 06CD ; [.23C8.0020.0002] # ARABIC LETTER YEH WITH TAIL 06CE ; [.23C9.0020.0002] # ARABIC LETTER YEH WITH SMALL V 06D0 ; [.23CA.0020.0002] # ARABIC LETTER E FBE6 ; [.23CA.0020.0017] # ARABIC LETTER E INITIAL FORM FBE7 ; [.23CA.0020.0018] # ARABIC LETTER E MEDIAL FORM FBE5 ; [.23CA.0020.0019] # ARABIC LETTER E FINAL FORM FBE4 ; [.23CA.0020.001A] # ARABIC LETTER E ISOLATED FORM 06D1 ; [.23CB.0020.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW 063D ; [.23CC.0020.0002] # ARABIC LETTER FARSI YEH WITH INVERTED V 063E ; [.23CD.0020.0002] # ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE 063F ; [.23CE.0020.0002] # ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0620 ; [.23CF.0020.0002] # ARABIC LETTER KASHMIRI YEH 0775 ; [.23D0.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE 0776 ; [.23D1.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE 0777 ; [.23D2.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW 08BA ; [.23D3.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE 06D2 ; [.23D4.0020.0002] # ARABIC LETTER YEH BARREE FBAF ; [.23D4.0020.0019] # ARABIC LETTER YEH BARREE FINAL FORM FBAE ; [.23D4.0020.001A] # ARABIC LETTER YEH BARREE ISOLATED FORM 06D3 ; [.23D4.0020.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FBB1 ; [.23D4.0020.0019][.0000.0083.0019] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FBB0 ; [.23D4.0020.001A][.0000.0083.001A] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM 077A ; [.23D5.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE 077B ; [.23D6.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE 0710 ; [.23D7.0020.0002] # SYRIAC LETTER ALAPH 0712 ; [.23D8.0020.0002] # SYRIAC LETTER BETH 072D ; [.23D8.0020.0004][.0000.0112.0004] # SYRIAC LETTER PERSIAN BHETH 0713 ; [.23D9.0020.0002] # SYRIAC LETTER GAMAL 0714 ; [.23D9.0020.0004][.0000.0111.0004] # SYRIAC LETTER GAMAL GARSHUNI 072E ; [.23D9.0020.0004][.0000.0112.0004] # SYRIAC LETTER PERSIAN GHAMAL 0716 ; [.23DA.0020.0002] # SYRIAC LETTER DOTLESS DALATH RISH 0715 ; [.23DB.0020.0002] # SYRIAC LETTER DALATH 072F ; [.23DB.0020.0004][.0000.0112.0004] # SYRIAC LETTER PERSIAN DHALATH 0717 ; [.23DC.0020.0002] # SYRIAC LETTER HE 0718 ; [.23DD.0020.0002] # SYRIAC LETTER WAW 0719 ; [.23DE.0020.0002] # SYRIAC LETTER ZAIN 074D ; [.23DF.0020.0002] # SYRIAC LETTER SOGDIAN ZHAIN 071A ; [.23E0.0020.0002] # SYRIAC LETTER HETH 071B ; [.23E1.0020.0002] # SYRIAC LETTER TETH 071C ; [.23E1.0020.0004][.0000.0111.0004] # SYRIAC LETTER TETH GARSHUNI 071D ; [.23E2.0020.0002] # SYRIAC LETTER YUDH 071E ; [.23E3.0020.0002] # SYRIAC LETTER YUDH HE 071F ; [.23E4.0020.0002] # SYRIAC LETTER KAPH 074E ; [.23E5.0020.0002] # SYRIAC LETTER SOGDIAN KHAPH 0720 ; [.23E6.0020.0002] # SYRIAC LETTER LAMADH 0721 ; [.23E7.0020.0002] # SYRIAC LETTER MIM 0722 ; [.23E8.0020.0002] # SYRIAC LETTER NUN 0723 ; [.23E9.0020.0002] # SYRIAC LETTER SEMKATH 0724 ; [.23E9.0020.0019] # SYRIAC LETTER FINAL SEMKATH 0725 ; [.23EA.0020.0002] # SYRIAC LETTER E 0726 ; [.23EB.0020.0002] # SYRIAC LETTER PE 0727 ; [.23EB.0020.0004][.0000.0111.0004] # SYRIAC LETTER REVERSED PE 074F ; [.23EC.0020.0002] # SYRIAC LETTER SOGDIAN FE 0728 ; [.23ED.0020.0002] # SYRIAC LETTER SADHE 0729 ; [.23EE.0020.0002] # SYRIAC LETTER QAPH 072A ; [.23EF.0020.0002] # SYRIAC LETTER RISH 072B ; [.23F0.0020.0002] # SYRIAC LETTER SHIN 072C ; [.23F1.0020.0002] # SYRIAC LETTER TAW 0840 ; [.23F2.0020.0002] # MANDAIC LETTER HALQA 0841 ; [.23F3.0020.0002] # MANDAIC LETTER AB 0842 ; [.23F4.0020.0002] # MANDAIC LETTER AG 0843 ; [.23F5.0020.0002] # MANDAIC LETTER AD 0844 ; [.23F6.0020.0002] # MANDAIC LETTER AH 0845 ; [.23F7.0020.0002] # MANDAIC LETTER USHENNA 0846 ; [.23F8.0020.0002] # MANDAIC LETTER AZ 0847 ; [.23F9.0020.0002] # MANDAIC LETTER IT 0848 ; [.23FA.0020.0002] # MANDAIC LETTER ATT 0849 ; [.23FB.0020.0002] # MANDAIC LETTER AKSA 084A ; [.23FC.0020.0002] # MANDAIC LETTER AK 084B ; [.23FD.0020.0002] # MANDAIC LETTER AL 084C ; [.23FE.0020.0002] # MANDAIC LETTER AM 084D ; [.23FF.0020.0002] # MANDAIC LETTER AN 084E ; [.2400.0020.0002] # MANDAIC LETTER AS 084F ; [.2401.0020.0002] # MANDAIC LETTER IN 0850 ; [.2402.0020.0002] # MANDAIC LETTER AP 0851 ; [.2403.0020.0002] # MANDAIC LETTER ASZ 0852 ; [.2404.0020.0002] # MANDAIC LETTER AQ 0853 ; [.2405.0020.0002] # MANDAIC LETTER AR 0854 ; [.2406.0020.0002] # MANDAIC LETTER ASH 0855 ; [.2407.0020.0002] # MANDAIC LETTER AT 0856 ; [.2408.0020.0002] # MANDAIC LETTER DUSHENNA 0857 ; [.2409.0020.0002] # MANDAIC LETTER KAD 0858 ; [.240A.0020.0002] # MANDAIC LETTER AIN 0780 ; [.240B.0020.0002] # THAANA LETTER HAA 0799 ; [.240C.0020.0002] # THAANA LETTER HHAA 079A ; [.240D.0020.0002] # THAANA LETTER KHAA 0781 ; [.240E.0020.0002] # THAANA LETTER SHAVIYANI 0782 ; [.240F.0020.0002] # THAANA LETTER NOONU 0783 ; [.2410.0020.0002] # THAANA LETTER RAA 079C ; [.2411.0020.0002] # THAANA LETTER ZAA 0784 ; [.2412.0020.0002] # THAANA LETTER BAA 0785 ; [.2413.0020.0002] # THAANA LETTER LHAVIYANI 0786 ; [.2414.0020.0002] # THAANA LETTER KAAFU 0787 ; [.2415.0020.0002] # THAANA LETTER ALIFU 07A2 ; [.2416.0020.0002] # THAANA LETTER AINU 07A3 ; [.2417.0020.0002] # THAANA LETTER GHAINU 0788 ; [.2418.0020.0002] # THAANA LETTER VAAVU 07A5 ; [.2419.0020.0002] # THAANA LETTER WAAVU 0789 ; [.241A.0020.0002] # THAANA LETTER MEEMU 078A ; [.241B.0020.0002] # THAANA LETTER FAAFU 078B ; [.241C.0020.0002] # THAANA LETTER DHAALU 079B ; [.241D.0020.0002] # THAANA LETTER THAALU 078C ; [.241E.0020.0002] # THAANA LETTER THAA 0798 ; [.241F.0020.0002] # THAANA LETTER TTAA 07A0 ; [.2420.0020.0002] # THAANA LETTER TO 07A1 ; [.2421.0020.0002] # THAANA LETTER ZO 078D ; [.2422.0020.0002] # THAANA LETTER LAAMU 078E ; [.2423.0020.0002] # THAANA LETTER GAAFU 07A4 ; [.2424.0020.0002] # THAANA LETTER QAAFU 078F ; [.2425.0020.0002] # THAANA LETTER GNAVIYANI 0790 ; [.2426.0020.0002] # THAANA LETTER SEENU 079D ; [.2427.0020.0002] # THAANA LETTER SHEENU 079E ; [.2428.0020.0002] # THAANA LETTER SAADHU 079F ; [.2429.0020.0002] # THAANA LETTER DAADHU 0791 ; [.242A.0020.0002] # THAANA LETTER DAVIYANI 0792 ; [.242B.0020.0002] # THAANA LETTER ZAVIYANI 0793 ; [.242C.0020.0002] # THAANA LETTER TAVIYANI 0794 ; [.242D.0020.0002] # THAANA LETTER YAA 0795 ; [.242E.0020.0002] # THAANA LETTER PAVIYANI 0796 ; [.242F.0020.0002] # THAANA LETTER JAVIYANI 0797 ; [.2430.0020.0002] # THAANA LETTER CHAVIYANI 07B1 ; [.2431.0020.0002] # THAANA LETTER NAA 07A6 ; [.2432.0020.0002] # THAANA ABAFILI 07A7 ; [.2433.0020.0002] # THAANA AABAAFILI 07A8 ; [.2434.0020.0002] # THAANA IBIFILI 07A9 ; [.2435.0020.0002] # THAANA EEBEEFILI 07AA ; [.2436.0020.0002] # THAANA UBUFILI 07AB ; [.2437.0020.0002] # THAANA OOBOOFILI 07AC ; [.2438.0020.0002] # THAANA EBEFILI 07AD ; [.2439.0020.0002] # THAANA EYBEYFILI 07AE ; [.243A.0020.0002] # THAANA OBOFILI 07AF ; [.243B.0020.0002] # THAANA OABOAFILI 07B0 ; [.243C.0020.0002] # THAANA SUKUN 07CA ; [.243D.0020.0002] # NKO LETTER A 07CB ; [.243E.0020.0002] # NKO LETTER EE 07CC ; [.243F.0020.0002] # NKO LETTER I 07CD ; [.2440.0020.0002] # NKO LETTER E 07CE ; [.2441.0020.0002] # NKO LETTER U 07CF ; [.2442.0020.0002] # NKO LETTER OO 07D0 ; [.2443.0020.0002] # NKO LETTER O 07D1 ; [.2444.0020.0002] # NKO LETTER DAGBASINNA 07D2 ; [.2445.0020.0002] # NKO LETTER N 07D3 ; [.2446.0020.0002] # NKO LETTER BA 07D4 ; [.2447.0020.0002] # NKO LETTER PA 07D5 ; [.2448.0020.0002] # NKO LETTER TA 07D6 ; [.2449.0020.0002] # NKO LETTER JA 07E8 ; [.2449.0020.0004][.0000.0110.0004] # NKO LETTER JONA JA 07D7 ; [.244A.0020.0002] # NKO LETTER CHA 07E9 ; [.244A.0020.0004][.0000.0110.0004] # NKO LETTER JONA CHA 07D8 ; [.244B.0020.0002] # NKO LETTER DA 07D9 ; [.244C.0020.0002] # NKO LETTER RA 07EA ; [.244C.0020.0004][.0000.0110.0004] # NKO LETTER JONA RA 07DA ; [.244D.0020.0002] # NKO LETTER RRA 07DB ; [.244E.0020.0002] # NKO LETTER SA 07DC ; [.244F.0020.0002] # NKO LETTER GBA 07DD ; [.2450.0020.0002] # NKO LETTER FA 07DE ; [.2451.0020.0002] # NKO LETTER KA 07DF ; [.2452.0020.0002] # NKO LETTER LA 07E0 ; [.2453.0020.0002] # NKO LETTER NA WOLOSO 07E1 ; [.2454.0020.0002] # NKO LETTER MA 07E2 ; [.2455.0020.0002] # NKO LETTER NYA 07E3 ; [.2456.0020.0002] # NKO LETTER NA 07E4 ; [.2457.0020.0002] # NKO LETTER HA 07E5 ; [.2458.0020.0002] # NKO LETTER WA 07E6 ; [.2459.0020.0002] # NKO LETTER YA 07E7 ; [.245A.0020.0002] # NKO LETTER NYA WOLOSO 07F4 ; [.245B.0020.0002] # NKO HIGH TONE APOSTROPHE 07F5 ; [.245C.0020.0002] # NKO LOW TONE APOSTROPHE 2D30 ; [.245D.0020.0002] # TIFINAGH LETTER YA 2D31 ; [.245E.0020.0002] # TIFINAGH LETTER YAB 2D32 ; [.245F.0020.0002] # TIFINAGH LETTER YABH 2D33 ; [.2460.0020.0002] # TIFINAGH LETTER YAG 2D34 ; [.2461.0020.0002] # TIFINAGH LETTER YAGHH 2D35 ; [.2462.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAJ 2D36 ; [.2463.0020.0002] # TIFINAGH LETTER YAJ 2D37 ; [.2464.0020.0002] # TIFINAGH LETTER YAD 2D38 ; [.2465.0020.0002] # TIFINAGH LETTER YADH 2D39 ; [.2466.0020.0002] # TIFINAGH LETTER YADD 2D3A ; [.2467.0020.0002] # TIFINAGH LETTER YADDH 2D3B ; [.2468.0020.0002] # TIFINAGH LETTER YEY 2D66 ; [.2469.0020.0002] # TIFINAGH LETTER YE 2D3C ; [.246A.0020.0002] # TIFINAGH LETTER YAF 2D3D ; [.246B.0020.0002] # TIFINAGH LETTER YAK 2D3E ; [.246C.0020.0002] # TIFINAGH LETTER TUAREG YAK 2D3F ; [.246D.0020.0002] # TIFINAGH LETTER YAKHH 2D40 ; [.246E.0020.0002] # TIFINAGH LETTER YAH 2D41 ; [.246F.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAH 2D42 ; [.2470.0020.0002] # TIFINAGH LETTER TUAREG YAH 2D43 ; [.2471.0020.0002] # TIFINAGH LETTER YAHH 2D44 ; [.2472.0020.0002] # TIFINAGH LETTER YAA 2D45 ; [.2473.0020.0002] # TIFINAGH LETTER YAKH 2D46 ; [.2474.0020.0002] # TIFINAGH LETTER TUAREG YAKH 2D47 ; [.2475.0020.0002] # TIFINAGH LETTER YAQ 2D48 ; [.2476.0020.0002] # TIFINAGH LETTER TUAREG YAQ 2D49 ; [.2477.0020.0002] # TIFINAGH LETTER YI 2D4A ; [.2478.0020.0002] # TIFINAGH LETTER YAZH 2D4B ; [.2479.0020.0002] # TIFINAGH LETTER AHAGGAR YAZH 2D4C ; [.247A.0020.0002] # TIFINAGH LETTER TUAREG YAZH 2D4D ; [.247B.0020.0002] # TIFINAGH LETTER YAL 2D4E ; [.247C.0020.0002] # TIFINAGH LETTER YAM 2D4F ; [.247D.0020.0002] # TIFINAGH LETTER YAN 2D50 ; [.247E.0020.0002] # TIFINAGH LETTER TUAREG YAGN 2D51 ; [.247F.0020.0002] # TIFINAGH LETTER TUAREG YANG 2D52 ; [.2480.0020.0002] # TIFINAGH LETTER YAP 2D53 ; [.2481.0020.0002] # TIFINAGH LETTER YU 2D67 ; [.2482.0020.0002] # TIFINAGH LETTER YO 2D54 ; [.2483.0020.0002] # TIFINAGH LETTER YAR 2D55 ; [.2484.0020.0002] # TIFINAGH LETTER YARR 2D56 ; [.2485.0020.0002] # TIFINAGH LETTER YAGH 2D57 ; [.2486.0020.0002] # TIFINAGH LETTER TUAREG YAGH 2D58 ; [.2487.0020.0002] # TIFINAGH LETTER AYER YAGH 2D59 ; [.2488.0020.0002] # TIFINAGH LETTER YAS 2D5A ; [.2489.0020.0002] # TIFINAGH LETTER YASS 2D5B ; [.248A.0020.0002] # TIFINAGH LETTER YASH 2D5C ; [.248B.0020.0002] # TIFINAGH LETTER YAT 2D5D ; [.248C.0020.0002] # TIFINAGH LETTER YATH 2D5E ; [.248D.0020.0002] # TIFINAGH LETTER YACH 2D5F ; [.248E.0020.0002] # TIFINAGH LETTER YATT 2D60 ; [.248F.0020.0002] # TIFINAGH LETTER YAV 2D61 ; [.2490.0020.0002] # TIFINAGH LETTER YAW 2D62 ; [.2491.0020.0002] # TIFINAGH LETTER YAY 2D63 ; [.2492.0020.0002] # TIFINAGH LETTER YAZ 2D64 ; [.2493.0020.0002] # TIFINAGH LETTER TAWELLEMET YAZ 2D65 ; [.2494.0020.0002] # TIFINAGH LETTER YAZZ 2D6F ; [.2495.0020.0002] # TIFINAGH MODIFIER LETTER LABIALIZATION MARK 1200 ; [.2496.0020.0002] # ETHIOPIC SYLLABLE HA 1201 ; [.2497.0020.0002] # ETHIOPIC SYLLABLE HU 1202 ; [.2498.0020.0002] # ETHIOPIC SYLLABLE HI 1203 ; [.2499.0020.0002] # ETHIOPIC SYLLABLE HAA 1204 ; [.249A.0020.0002] # ETHIOPIC SYLLABLE HEE 1205 ; [.249B.0020.0002] # ETHIOPIC SYLLABLE HE 1206 ; [.249C.0020.0002] # ETHIOPIC SYLLABLE HO 1207 ; [.249D.0020.0002] # ETHIOPIC SYLLABLE HOA 1208 ; [.249E.0020.0002] # ETHIOPIC SYLLABLE LA 1209 ; [.249F.0020.0002] # ETHIOPIC SYLLABLE LU 120A ; [.24A0.0020.0002] # ETHIOPIC SYLLABLE LI 120B ; [.24A1.0020.0002] # ETHIOPIC SYLLABLE LAA 120C ; [.24A2.0020.0002] # ETHIOPIC SYLLABLE LEE 120D ; [.24A3.0020.0002] # ETHIOPIC SYLLABLE LE 120E ; [.24A4.0020.0002] # ETHIOPIC SYLLABLE LO 120F ; [.24A5.0020.0002] # ETHIOPIC SYLLABLE LWA 2D80 ; [.24A6.0020.0002] # ETHIOPIC SYLLABLE LOA 1210 ; [.24A7.0020.0002] # ETHIOPIC SYLLABLE HHA 1211 ; [.24A8.0020.0002] # ETHIOPIC SYLLABLE HHU 1212 ; [.24A9.0020.0002] # ETHIOPIC SYLLABLE HHI 1213 ; [.24AA.0020.0002] # ETHIOPIC SYLLABLE HHAA 1214 ; [.24AB.0020.0002] # ETHIOPIC SYLLABLE HHEE 1215 ; [.24AC.0020.0002] # ETHIOPIC SYLLABLE HHE 1216 ; [.24AD.0020.0002] # ETHIOPIC SYLLABLE HHO 1217 ; [.24AE.0020.0002] # ETHIOPIC SYLLABLE HHWA 1218 ; [.24AF.0020.0002] # ETHIOPIC SYLLABLE MA 1219 ; [.24B0.0020.0002] # ETHIOPIC SYLLABLE MU 121A ; [.24B1.0020.0002] # ETHIOPIC SYLLABLE MI 121B ; [.24B2.0020.0002] # ETHIOPIC SYLLABLE MAA 121C ; [.24B3.0020.0002] # ETHIOPIC SYLLABLE MEE 121D ; [.24B4.0020.0002] # ETHIOPIC SYLLABLE ME 121E ; [.24B5.0020.0002] # ETHIOPIC SYLLABLE MO 121F ; [.24B6.0020.0002] # ETHIOPIC SYLLABLE MWA 1380 ; [.24B7.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT MWA 1381 ; [.24B8.0020.0002] # ETHIOPIC SYLLABLE MWI 1382 ; [.24B9.0020.0002] # ETHIOPIC SYLLABLE MWEE 1383 ; [.24BA.0020.0002] # ETHIOPIC SYLLABLE MWE 2D81 ; [.24BB.0020.0002] # ETHIOPIC SYLLABLE MOA 1220 ; [.24BC.0020.0002] # ETHIOPIC SYLLABLE SZA 1221 ; [.24BD.0020.0002] # ETHIOPIC SYLLABLE SZU 1222 ; [.24BE.0020.0002] # ETHIOPIC SYLLABLE SZI 1223 ; [.24BF.0020.0002] # ETHIOPIC SYLLABLE SZAA 1224 ; [.24C0.0020.0002] # ETHIOPIC SYLLABLE SZEE 1225 ; [.24C1.0020.0002] # ETHIOPIC SYLLABLE SZE 1226 ; [.24C2.0020.0002] # ETHIOPIC SYLLABLE SZO 1227 ; [.24C3.0020.0002] # ETHIOPIC SYLLABLE SZWA 1228 ; [.24C4.0020.0002] # ETHIOPIC SYLLABLE RA 1229 ; [.24C5.0020.0002] # ETHIOPIC SYLLABLE RU 122A ; [.24C6.0020.0002] # ETHIOPIC SYLLABLE RI 122B ; [.24C7.0020.0002] # ETHIOPIC SYLLABLE RAA 122C ; [.24C8.0020.0002] # ETHIOPIC SYLLABLE REE 122D ; [.24C9.0020.0002] # ETHIOPIC SYLLABLE RE 122E ; [.24CA.0020.0002] # ETHIOPIC SYLLABLE RO 122F ; [.24CB.0020.0002] # ETHIOPIC SYLLABLE RWA 2D82 ; [.24CC.0020.0002] # ETHIOPIC SYLLABLE ROA 1230 ; [.24CD.0020.0002] # ETHIOPIC SYLLABLE SA 1231 ; [.24CE.0020.0002] # ETHIOPIC SYLLABLE SU 1232 ; [.24CF.0020.0002] # ETHIOPIC SYLLABLE SI 1233 ; [.24D0.0020.0002] # ETHIOPIC SYLLABLE SAA 1234 ; [.24D1.0020.0002] # ETHIOPIC SYLLABLE SEE 1235 ; [.24D2.0020.0002] # ETHIOPIC SYLLABLE SE 1236 ; [.24D3.0020.0002] # ETHIOPIC SYLLABLE SO 1237 ; [.24D4.0020.0002] # ETHIOPIC SYLLABLE SWA 2D83 ; [.24D5.0020.0002] # ETHIOPIC SYLLABLE SOA AB01 ; [.24D6.0020.0002] # ETHIOPIC SYLLABLE TTHU AB02 ; [.24D7.0020.0002] # ETHIOPIC SYLLABLE TTHI AB03 ; [.24D8.0020.0002] # ETHIOPIC SYLLABLE TTHAA AB04 ; [.24D9.0020.0002] # ETHIOPIC SYLLABLE TTHEE AB05 ; [.24DA.0020.0002] # ETHIOPIC SYLLABLE TTHE AB06 ; [.24DB.0020.0002] # ETHIOPIC SYLLABLE TTHO 1238 ; [.24DC.0020.0002] # ETHIOPIC SYLLABLE SHA 1239 ; [.24DD.0020.0002] # ETHIOPIC SYLLABLE SHU 123A ; [.24DE.0020.0002] # ETHIOPIC SYLLABLE SHI 123B ; [.24DF.0020.0002] # ETHIOPIC SYLLABLE SHAA 123C ; [.24E0.0020.0002] # ETHIOPIC SYLLABLE SHEE 123D ; [.24E1.0020.0002] # ETHIOPIC SYLLABLE SHE 123E ; [.24E2.0020.0002] # ETHIOPIC SYLLABLE SHO 123F ; [.24E3.0020.0002] # ETHIOPIC SYLLABLE SHWA 2D84 ; [.24E4.0020.0002] # ETHIOPIC SYLLABLE SHOA 1240 ; [.24E5.0020.0002] # ETHIOPIC SYLLABLE QA 1241 ; [.24E6.0020.0002] # ETHIOPIC SYLLABLE QU 1242 ; [.24E7.0020.0002] # ETHIOPIC SYLLABLE QI 1243 ; [.24E8.0020.0002] # ETHIOPIC SYLLABLE QAA 1244 ; [.24E9.0020.0002] # ETHIOPIC SYLLABLE QEE 1245 ; [.24EA.0020.0002] # ETHIOPIC SYLLABLE QE 1246 ; [.24EB.0020.0002] # ETHIOPIC SYLLABLE QO 1247 ; [.24EC.0020.0002] # ETHIOPIC SYLLABLE QOA 1248 ; [.24ED.0020.0002] # ETHIOPIC SYLLABLE QWA 124A ; [.24EE.0020.0002] # ETHIOPIC SYLLABLE QWI 124B ; [.24EF.0020.0002] # ETHIOPIC SYLLABLE QWAA 124C ; [.24F0.0020.0002] # ETHIOPIC SYLLABLE QWEE 124D ; [.24F1.0020.0002] # ETHIOPIC SYLLABLE QWE 1250 ; [.24F2.0020.0002] # ETHIOPIC SYLLABLE QHA 1251 ; [.24F3.0020.0002] # ETHIOPIC SYLLABLE QHU 1252 ; [.24F4.0020.0002] # ETHIOPIC SYLLABLE QHI 1253 ; [.24F5.0020.0002] # ETHIOPIC SYLLABLE QHAA 1254 ; [.24F6.0020.0002] # ETHIOPIC SYLLABLE QHEE 1255 ; [.24F7.0020.0002] # ETHIOPIC SYLLABLE QHE 1256 ; [.24F8.0020.0002] # ETHIOPIC SYLLABLE QHO 1258 ; [.24F9.0020.0002] # ETHIOPIC SYLLABLE QHWA 125A ; [.24FA.0020.0002] # ETHIOPIC SYLLABLE QHWI 125B ; [.24FB.0020.0002] # ETHIOPIC SYLLABLE QHWAA 125C ; [.24FC.0020.0002] # ETHIOPIC SYLLABLE QHWEE 125D ; [.24FD.0020.0002] # ETHIOPIC SYLLABLE QHWE 1260 ; [.24FE.0020.0002] # ETHIOPIC SYLLABLE BA 1261 ; [.24FF.0020.0002] # ETHIOPIC SYLLABLE BU 1262 ; [.2500.0020.0002] # ETHIOPIC SYLLABLE BI 1263 ; [.2501.0020.0002] # ETHIOPIC SYLLABLE BAA 1264 ; [.2502.0020.0002] # ETHIOPIC SYLLABLE BEE 1265 ; [.2503.0020.0002] # ETHIOPIC SYLLABLE BE 1266 ; [.2504.0020.0002] # ETHIOPIC SYLLABLE BO 1267 ; [.2505.0020.0002] # ETHIOPIC SYLLABLE BWA 1384 ; [.2506.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT BWA 1385 ; [.2507.0020.0002] # ETHIOPIC SYLLABLE BWI 1386 ; [.2508.0020.0002] # ETHIOPIC SYLLABLE BWEE 1387 ; [.2509.0020.0002] # ETHIOPIC SYLLABLE BWE 2D85 ; [.250A.0020.0002] # ETHIOPIC SYLLABLE BOA 1268 ; [.250B.0020.0002] # ETHIOPIC SYLLABLE VA 1269 ; [.250C.0020.0002] # ETHIOPIC SYLLABLE VU 126A ; [.250D.0020.0002] # ETHIOPIC SYLLABLE VI 126B ; [.250E.0020.0002] # ETHIOPIC SYLLABLE VAA 126C ; [.250F.0020.0002] # ETHIOPIC SYLLABLE VEE 126D ; [.2510.0020.0002] # ETHIOPIC SYLLABLE VE 126E ; [.2511.0020.0002] # ETHIOPIC SYLLABLE VO 126F ; [.2512.0020.0002] # ETHIOPIC SYLLABLE VWA 1270 ; [.2513.0020.0002] # ETHIOPIC SYLLABLE TA 1271 ; [.2514.0020.0002] # ETHIOPIC SYLLABLE TU 1272 ; [.2515.0020.0002] # ETHIOPIC SYLLABLE TI 1273 ; [.2516.0020.0002] # ETHIOPIC SYLLABLE TAA 1274 ; [.2517.0020.0002] # ETHIOPIC SYLLABLE TEE 1275 ; [.2518.0020.0002] # ETHIOPIC SYLLABLE TE 1276 ; [.2519.0020.0002] # ETHIOPIC SYLLABLE TO 1277 ; [.251A.0020.0002] # ETHIOPIC SYLLABLE TWA 2D86 ; [.251B.0020.0002] # ETHIOPIC SYLLABLE TOA 1278 ; [.251C.0020.0002] # ETHIOPIC SYLLABLE CA 1279 ; [.251D.0020.0002] # ETHIOPIC SYLLABLE CU 127A ; [.251E.0020.0002] # ETHIOPIC SYLLABLE CI 127B ; [.251F.0020.0002] # ETHIOPIC SYLLABLE CAA 127C ; [.2520.0020.0002] # ETHIOPIC SYLLABLE CEE 127D ; [.2521.0020.0002] # ETHIOPIC SYLLABLE CE 127E ; [.2522.0020.0002] # ETHIOPIC SYLLABLE CO 127F ; [.2523.0020.0002] # ETHIOPIC SYLLABLE CWA 2D87 ; [.2524.0020.0002] # ETHIOPIC SYLLABLE COA 1280 ; [.2525.0020.0002] # ETHIOPIC SYLLABLE XA 1281 ; [.2526.0020.0002] # ETHIOPIC SYLLABLE XU 1282 ; [.2527.0020.0002] # ETHIOPIC SYLLABLE XI 1283 ; [.2528.0020.0002] # ETHIOPIC SYLLABLE XAA 1284 ; [.2529.0020.0002] # ETHIOPIC SYLLABLE XEE 1285 ; [.252A.0020.0002] # ETHIOPIC SYLLABLE XE 1286 ; [.252B.0020.0002] # ETHIOPIC SYLLABLE XO 1287 ; [.252C.0020.0002] # ETHIOPIC SYLLABLE XOA 1288 ; [.252D.0020.0002] # ETHIOPIC SYLLABLE XWA 128A ; [.252E.0020.0002] # ETHIOPIC SYLLABLE XWI 128B ; [.252F.0020.0002] # ETHIOPIC SYLLABLE XWAA 128C ; [.2530.0020.0002] # ETHIOPIC SYLLABLE XWEE 128D ; [.2531.0020.0002] # ETHIOPIC SYLLABLE XWE 1290 ; [.2532.0020.0002] # ETHIOPIC SYLLABLE NA 1291 ; [.2533.0020.0002] # ETHIOPIC SYLLABLE NU 1292 ; [.2534.0020.0002] # ETHIOPIC SYLLABLE NI 1293 ; [.2535.0020.0002] # ETHIOPIC SYLLABLE NAA 1294 ; [.2536.0020.0002] # ETHIOPIC SYLLABLE NEE 1295 ; [.2537.0020.0002] # ETHIOPIC SYLLABLE NE 1296 ; [.2538.0020.0002] # ETHIOPIC SYLLABLE NO 1297 ; [.2539.0020.0002] # ETHIOPIC SYLLABLE NWA 2D88 ; [.253A.0020.0002] # ETHIOPIC SYLLABLE NOA 1298 ; [.253B.0020.0002] # ETHIOPIC SYLLABLE NYA 1299 ; [.253C.0020.0002] # ETHIOPIC SYLLABLE NYU 129A ; [.253D.0020.0002] # ETHIOPIC SYLLABLE NYI 129B ; [.253E.0020.0002] # ETHIOPIC SYLLABLE NYAA 129C ; [.253F.0020.0002] # ETHIOPIC SYLLABLE NYEE 129D ; [.2540.0020.0002] # ETHIOPIC SYLLABLE NYE 129E ; [.2541.0020.0002] # ETHIOPIC SYLLABLE NYO 129F ; [.2542.0020.0002] # ETHIOPIC SYLLABLE NYWA 2D89 ; [.2543.0020.0002] # ETHIOPIC SYLLABLE NYOA 12A0 ; [.2544.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL A 12A1 ; [.2545.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL U 12A2 ; [.2546.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL I 12A3 ; [.2547.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL AA 12A4 ; [.2548.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL EE 12A5 ; [.2549.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL E 12A6 ; [.254A.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL O 12A7 ; [.254B.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL WA 2D8A ; [.254C.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL OA 12A8 ; [.254D.0020.0002] # ETHIOPIC SYLLABLE KA 12A9 ; [.254E.0020.0002] # ETHIOPIC SYLLABLE KU 12AA ; [.254F.0020.0002] # ETHIOPIC SYLLABLE KI 12AB ; [.2550.0020.0002] # ETHIOPIC SYLLABLE KAA 12AC ; [.2551.0020.0002] # ETHIOPIC SYLLABLE KEE 12AD ; [.2552.0020.0002] # ETHIOPIC SYLLABLE KE 12AE ; [.2553.0020.0002] # ETHIOPIC SYLLABLE KO 12AF ; [.2554.0020.0002] # ETHIOPIC SYLLABLE KOA 12B0 ; [.2555.0020.0002] # ETHIOPIC SYLLABLE KWA 12B2 ; [.2556.0020.0002] # ETHIOPIC SYLLABLE KWI 12B3 ; [.2557.0020.0002] # ETHIOPIC SYLLABLE KWAA 12B4 ; [.2558.0020.0002] # ETHIOPIC SYLLABLE KWEE 12B5 ; [.2559.0020.0002] # ETHIOPIC SYLLABLE KWE 12B8 ; [.255A.0020.0002] # ETHIOPIC SYLLABLE KXA 12B9 ; [.255B.0020.0002] # ETHIOPIC SYLLABLE KXU 12BA ; [.255C.0020.0002] # ETHIOPIC SYLLABLE KXI 12BB ; [.255D.0020.0002] # ETHIOPIC SYLLABLE KXAA 12BC ; [.255E.0020.0002] # ETHIOPIC SYLLABLE KXEE 12BD ; [.255F.0020.0002] # ETHIOPIC SYLLABLE KXE 12BE ; [.2560.0020.0002] # ETHIOPIC SYLLABLE KXO 12C0 ; [.2561.0020.0002] # ETHIOPIC SYLLABLE KXWA 12C2 ; [.2562.0020.0002] # ETHIOPIC SYLLABLE KXWI 12C3 ; [.2563.0020.0002] # ETHIOPIC SYLLABLE KXWAA 12C4 ; [.2564.0020.0002] # ETHIOPIC SYLLABLE KXWEE 12C5 ; [.2565.0020.0002] # ETHIOPIC SYLLABLE KXWE 12C8 ; [.2566.0020.0002] # ETHIOPIC SYLLABLE WA 12C9 ; [.2567.0020.0002] # ETHIOPIC SYLLABLE WU 12CA ; [.2568.0020.0002] # ETHIOPIC SYLLABLE WI 12CB ; [.2569.0020.0002] # ETHIOPIC SYLLABLE WAA 12CC ; [.256A.0020.0002] # ETHIOPIC SYLLABLE WEE 12CD ; [.256B.0020.0002] # ETHIOPIC SYLLABLE WE 12CE ; [.256C.0020.0002] # ETHIOPIC SYLLABLE WO 12CF ; [.256D.0020.0002] # ETHIOPIC SYLLABLE WOA 12D0 ; [.256E.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL A 12D1 ; [.256F.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL U 12D2 ; [.2570.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL I 12D3 ; [.2571.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL AA 12D4 ; [.2572.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL EE 12D5 ; [.2573.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL E 12D6 ; [.2574.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL O 12D8 ; [.2575.0020.0002] # ETHIOPIC SYLLABLE ZA 12D9 ; [.2576.0020.0002] # ETHIOPIC SYLLABLE ZU 12DA ; [.2577.0020.0002] # ETHIOPIC SYLLABLE ZI 12DB ; [.2578.0020.0002] # ETHIOPIC SYLLABLE ZAA 12DC ; [.2579.0020.0002] # ETHIOPIC SYLLABLE ZEE 12DD ; [.257A.0020.0002] # ETHIOPIC SYLLABLE ZE 12DE ; [.257B.0020.0002] # ETHIOPIC SYLLABLE ZO 12DF ; [.257C.0020.0002] # ETHIOPIC SYLLABLE ZWA 2D8B ; [.257D.0020.0002] # ETHIOPIC SYLLABLE ZOA AB11 ; [.257E.0020.0002] # ETHIOPIC SYLLABLE DZU AB12 ; [.257F.0020.0002] # ETHIOPIC SYLLABLE DZI AB13 ; [.2580.0020.0002] # ETHIOPIC SYLLABLE DZAA AB14 ; [.2581.0020.0002] # ETHIOPIC SYLLABLE DZEE AB15 ; [.2582.0020.0002] # ETHIOPIC SYLLABLE DZE AB16 ; [.2583.0020.0002] # ETHIOPIC SYLLABLE DZO 12E0 ; [.2584.0020.0002] # ETHIOPIC SYLLABLE ZHA 12E1 ; [.2585.0020.0002] # ETHIOPIC SYLLABLE ZHU 12E2 ; [.2586.0020.0002] # ETHIOPIC SYLLABLE ZHI 12E3 ; [.2587.0020.0002] # ETHIOPIC SYLLABLE ZHAA 12E4 ; [.2588.0020.0002] # ETHIOPIC SYLLABLE ZHEE 12E5 ; [.2589.0020.0002] # ETHIOPIC SYLLABLE ZHE 12E6 ; [.258A.0020.0002] # ETHIOPIC SYLLABLE ZHO 12E7 ; [.258B.0020.0002] # ETHIOPIC SYLLABLE ZHWA 12E8 ; [.258C.0020.0002] # ETHIOPIC SYLLABLE YA 12E9 ; [.258D.0020.0002] # ETHIOPIC SYLLABLE YU 12EA ; [.258E.0020.0002] # ETHIOPIC SYLLABLE YI 12EB ; [.258F.0020.0002] # ETHIOPIC SYLLABLE YAA 12EC ; [.2590.0020.0002] # ETHIOPIC SYLLABLE YEE 12ED ; [.2591.0020.0002] # ETHIOPIC SYLLABLE YE 12EE ; [.2592.0020.0002] # ETHIOPIC SYLLABLE YO 12EF ; [.2593.0020.0002] # ETHIOPIC SYLLABLE YOA 12F0 ; [.2594.0020.0002] # ETHIOPIC SYLLABLE DA 12F1 ; [.2595.0020.0002] # ETHIOPIC SYLLABLE DU 12F2 ; [.2596.0020.0002] # ETHIOPIC SYLLABLE DI 12F3 ; [.2597.0020.0002] # ETHIOPIC SYLLABLE DAA 12F4 ; [.2598.0020.0002] # ETHIOPIC SYLLABLE DEE 12F5 ; [.2599.0020.0002] # ETHIOPIC SYLLABLE DE 12F6 ; [.259A.0020.0002] # ETHIOPIC SYLLABLE DO 12F7 ; [.259B.0020.0002] # ETHIOPIC SYLLABLE DWA 2D8C ; [.259C.0020.0002] # ETHIOPIC SYLLABLE DOA AB09 ; [.259D.0020.0002] # ETHIOPIC SYLLABLE DDHU AB0A ; [.259E.0020.0002] # ETHIOPIC SYLLABLE DDHI AB0B ; [.259F.0020.0002] # ETHIOPIC SYLLABLE DDHAA AB0C ; [.25A0.0020.0002] # ETHIOPIC SYLLABLE DDHEE AB0D ; [.25A1.0020.0002] # ETHIOPIC SYLLABLE DDHE AB0E ; [.25A2.0020.0002] # ETHIOPIC SYLLABLE DDHO 12F8 ; [.25A3.0020.0002] # ETHIOPIC SYLLABLE DDA 12F9 ; [.25A4.0020.0002] # ETHIOPIC SYLLABLE DDU 12FA ; [.25A5.0020.0002] # ETHIOPIC SYLLABLE DDI 12FB ; [.25A6.0020.0002] # ETHIOPIC SYLLABLE DDAA 12FC ; [.25A7.0020.0002] # ETHIOPIC SYLLABLE DDEE 12FD ; [.25A8.0020.0002] # ETHIOPIC SYLLABLE DDE 12FE ; [.25A9.0020.0002] # ETHIOPIC SYLLABLE DDO 12FF ; [.25AA.0020.0002] # ETHIOPIC SYLLABLE DDWA 2D8D ; [.25AB.0020.0002] # ETHIOPIC SYLLABLE DDOA 1300 ; [.25AC.0020.0002] # ETHIOPIC SYLLABLE JA 1301 ; [.25AD.0020.0002] # ETHIOPIC SYLLABLE JU 1302 ; [.25AE.0020.0002] # ETHIOPIC SYLLABLE JI 1303 ; [.25AF.0020.0002] # ETHIOPIC SYLLABLE JAA 1304 ; [.25B0.0020.0002] # ETHIOPIC SYLLABLE JEE 1305 ; [.25B1.0020.0002] # ETHIOPIC SYLLABLE JE 1306 ; [.25B2.0020.0002] # ETHIOPIC SYLLABLE JO 1307 ; [.25B3.0020.0002] # ETHIOPIC SYLLABLE JWA 2D8E ; [.25B4.0020.0002] # ETHIOPIC SYLLABLE JOA 1308 ; [.25B5.0020.0002] # ETHIOPIC SYLLABLE GA 1309 ; [.25B6.0020.0002] # ETHIOPIC SYLLABLE GU 130A ; [.25B7.0020.0002] # ETHIOPIC SYLLABLE GI 130B ; [.25B8.0020.0002] # ETHIOPIC SYLLABLE GAA 130C ; [.25B9.0020.0002] # ETHIOPIC SYLLABLE GEE 130D ; [.25BA.0020.0002] # ETHIOPIC SYLLABLE GE 130E ; [.25BB.0020.0002] # ETHIOPIC SYLLABLE GO 130F ; [.25BC.0020.0002] # ETHIOPIC SYLLABLE GOA 1310 ; [.25BD.0020.0002] # ETHIOPIC SYLLABLE GWA 1312 ; [.25BE.0020.0002] # ETHIOPIC SYLLABLE GWI 1313 ; [.25BF.0020.0002] # ETHIOPIC SYLLABLE GWAA 1314 ; [.25C0.0020.0002] # ETHIOPIC SYLLABLE GWEE 1315 ; [.25C1.0020.0002] # ETHIOPIC SYLLABLE GWE 1318 ; [.25C2.0020.0002] # ETHIOPIC SYLLABLE GGA 1319 ; [.25C3.0020.0002] # ETHIOPIC SYLLABLE GGU 131A ; [.25C4.0020.0002] # ETHIOPIC SYLLABLE GGI 131B ; [.25C5.0020.0002] # ETHIOPIC SYLLABLE GGAA 131C ; [.25C6.0020.0002] # ETHIOPIC SYLLABLE GGEE 131D ; [.25C7.0020.0002] # ETHIOPIC SYLLABLE GGE 131E ; [.25C8.0020.0002] # ETHIOPIC SYLLABLE GGO 131F ; [.25C9.0020.0002] # ETHIOPIC SYLLABLE GGWAA 2D93 ; [.25CA.0020.0002] # ETHIOPIC SYLLABLE GGWA 2D94 ; [.25CB.0020.0002] # ETHIOPIC SYLLABLE GGWI 2D95 ; [.25CC.0020.0002] # ETHIOPIC SYLLABLE GGWEE 2D96 ; [.25CD.0020.0002] # ETHIOPIC SYLLABLE GGWE 1320 ; [.25CE.0020.0002] # ETHIOPIC SYLLABLE THA 1321 ; [.25CF.0020.0002] # ETHIOPIC SYLLABLE THU 1322 ; [.25D0.0020.0002] # ETHIOPIC SYLLABLE THI 1323 ; [.25D1.0020.0002] # ETHIOPIC SYLLABLE THAA 1324 ; [.25D2.0020.0002] # ETHIOPIC SYLLABLE THEE 1325 ; [.25D3.0020.0002] # ETHIOPIC SYLLABLE THE 1326 ; [.25D4.0020.0002] # ETHIOPIC SYLLABLE THO 1327 ; [.25D5.0020.0002] # ETHIOPIC SYLLABLE THWA 2D8F ; [.25D6.0020.0002] # ETHIOPIC SYLLABLE THOA 1328 ; [.25D7.0020.0002] # ETHIOPIC SYLLABLE CHA 1329 ; [.25D8.0020.0002] # ETHIOPIC SYLLABLE CHU 132A ; [.25D9.0020.0002] # ETHIOPIC SYLLABLE CHI 132B ; [.25DA.0020.0002] # ETHIOPIC SYLLABLE CHAA 132C ; [.25DB.0020.0002] # ETHIOPIC SYLLABLE CHEE 132D ; [.25DC.0020.0002] # ETHIOPIC SYLLABLE CHE 132E ; [.25DD.0020.0002] # ETHIOPIC SYLLABLE CHO 132F ; [.25DE.0020.0002] # ETHIOPIC SYLLABLE CHWA 2D90 ; [.25DF.0020.0002] # ETHIOPIC SYLLABLE CHOA AB20 ; [.25E0.0020.0002] # ETHIOPIC SYLLABLE CCHHA AB21 ; [.25E1.0020.0002] # ETHIOPIC SYLLABLE CCHHU AB22 ; [.25E2.0020.0002] # ETHIOPIC SYLLABLE CCHHI AB23 ; [.25E3.0020.0002] # ETHIOPIC SYLLABLE CCHHAA AB24 ; [.25E4.0020.0002] # ETHIOPIC SYLLABLE CCHHEE AB25 ; [.25E5.0020.0002] # ETHIOPIC SYLLABLE CCHHE AB26 ; [.25E6.0020.0002] # ETHIOPIC SYLLABLE CCHHO 1330 ; [.25E7.0020.0002] # ETHIOPIC SYLLABLE PHA 1331 ; [.25E8.0020.0002] # ETHIOPIC SYLLABLE PHU 1332 ; [.25E9.0020.0002] # ETHIOPIC SYLLABLE PHI 1333 ; [.25EA.0020.0002] # ETHIOPIC SYLLABLE PHAA 1334 ; [.25EB.0020.0002] # ETHIOPIC SYLLABLE PHEE 1335 ; [.25EC.0020.0002] # ETHIOPIC SYLLABLE PHE 1336 ; [.25ED.0020.0002] # ETHIOPIC SYLLABLE PHO 1337 ; [.25EE.0020.0002] # ETHIOPIC SYLLABLE PHWA 2D91 ; [.25EF.0020.0002] # ETHIOPIC SYLLABLE PHOA 1338 ; [.25F0.0020.0002] # ETHIOPIC SYLLABLE TSA 1339 ; [.25F1.0020.0002] # ETHIOPIC SYLLABLE TSU 133A ; [.25F2.0020.0002] # ETHIOPIC SYLLABLE TSI 133B ; [.25F3.0020.0002] # ETHIOPIC SYLLABLE TSAA 133C ; [.25F4.0020.0002] # ETHIOPIC SYLLABLE TSEE 133D ; [.25F5.0020.0002] # ETHIOPIC SYLLABLE TSE 133E ; [.25F6.0020.0002] # ETHIOPIC SYLLABLE TSO 133F ; [.25F7.0020.0002] # ETHIOPIC SYLLABLE TSWA AB28 ; [.25F8.0020.0002] # ETHIOPIC SYLLABLE BBA AB29 ; [.25F9.0020.0002] # ETHIOPIC SYLLABLE BBU AB2A ; [.25FA.0020.0002] # ETHIOPIC SYLLABLE BBI AB2B ; [.25FB.0020.0002] # ETHIOPIC SYLLABLE BBAA AB2C ; [.25FC.0020.0002] # ETHIOPIC SYLLABLE BBEE AB2D ; [.25FD.0020.0002] # ETHIOPIC SYLLABLE BBE AB2E ; [.25FE.0020.0002] # ETHIOPIC SYLLABLE BBO 1340 ; [.25FF.0020.0002] # ETHIOPIC SYLLABLE TZA 1341 ; [.2600.0020.0002] # ETHIOPIC SYLLABLE TZU 1342 ; [.2601.0020.0002] # ETHIOPIC SYLLABLE TZI 1343 ; [.2602.0020.0002] # ETHIOPIC SYLLABLE TZAA 1344 ; [.2603.0020.0002] # ETHIOPIC SYLLABLE TZEE 1345 ; [.2604.0020.0002] # ETHIOPIC SYLLABLE TZE 1346 ; [.2605.0020.0002] # ETHIOPIC SYLLABLE TZO 1347 ; [.2606.0020.0002] # ETHIOPIC SYLLABLE TZOA 1348 ; [.2607.0020.0002] # ETHIOPIC SYLLABLE FA 1349 ; [.2608.0020.0002] # ETHIOPIC SYLLABLE FU 134A ; [.2609.0020.0002] # ETHIOPIC SYLLABLE FI 134B ; [.260A.0020.0002] # ETHIOPIC SYLLABLE FAA 134C ; [.260B.0020.0002] # ETHIOPIC SYLLABLE FEE 134D ; [.260C.0020.0002] # ETHIOPIC SYLLABLE FE 134E ; [.260D.0020.0002] # ETHIOPIC SYLLABLE FO 134F ; [.260E.0020.0002] # ETHIOPIC SYLLABLE FWA 1388 ; [.260F.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT FWA 1389 ; [.2610.0020.0002] # ETHIOPIC SYLLABLE FWI 138A ; [.2611.0020.0002] # ETHIOPIC SYLLABLE FWEE 138B ; [.2612.0020.0002] # ETHIOPIC SYLLABLE FWE 1350 ; [.2613.0020.0002] # ETHIOPIC SYLLABLE PA 1351 ; [.2614.0020.0002] # ETHIOPIC SYLLABLE PU 1352 ; [.2615.0020.0002] # ETHIOPIC SYLLABLE PI 1353 ; [.2616.0020.0002] # ETHIOPIC SYLLABLE PAA 1354 ; [.2617.0020.0002] # ETHIOPIC SYLLABLE PEE 1355 ; [.2618.0020.0002] # ETHIOPIC SYLLABLE PE 1356 ; [.2619.0020.0002] # ETHIOPIC SYLLABLE PO 1357 ; [.261A.0020.0002] # ETHIOPIC SYLLABLE PWA 138C ; [.261B.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT PWA 138D ; [.261C.0020.0002] # ETHIOPIC SYLLABLE PWI 138E ; [.261D.0020.0002] # ETHIOPIC SYLLABLE PWEE 138F ; [.261E.0020.0002] # ETHIOPIC SYLLABLE PWE 2D92 ; [.261F.0020.0002] # ETHIOPIC SYLLABLE POA 1358 ; [.2620.0020.0002] # ETHIOPIC SYLLABLE RYA 1359 ; [.2621.0020.0002] # ETHIOPIC SYLLABLE MYA 135A ; [.2622.0020.0002] # ETHIOPIC SYLLABLE FYA 2DA0 ; [.2623.0020.0002] # ETHIOPIC SYLLABLE SSA 2DA1 ; [.2624.0020.0002] # ETHIOPIC SYLLABLE SSU 2DA2 ; [.2625.0020.0002] # ETHIOPIC SYLLABLE SSI 2DA3 ; [.2626.0020.0002] # ETHIOPIC SYLLABLE SSAA 2DA4 ; [.2627.0020.0002] # ETHIOPIC SYLLABLE SSEE 2DA5 ; [.2628.0020.0002] # ETHIOPIC SYLLABLE SSE 2DA6 ; [.2629.0020.0002] # ETHIOPIC SYLLABLE SSO 2DA8 ; [.262A.0020.0002] # ETHIOPIC SYLLABLE CCA 2DA9 ; [.262B.0020.0002] # ETHIOPIC SYLLABLE CCU 2DAA ; [.262C.0020.0002] # ETHIOPIC SYLLABLE CCI 2DAB ; [.262D.0020.0002] # ETHIOPIC SYLLABLE CCAA 2DAC ; [.262E.0020.0002] # ETHIOPIC SYLLABLE CCEE 2DAD ; [.262F.0020.0002] # ETHIOPIC SYLLABLE CCE 2DAE ; [.2630.0020.0002] # ETHIOPIC SYLLABLE CCO 2DB0 ; [.2631.0020.0002] # ETHIOPIC SYLLABLE ZZA 2DB1 ; [.2632.0020.0002] # ETHIOPIC SYLLABLE ZZU 2DB2 ; [.2633.0020.0002] # ETHIOPIC SYLLABLE ZZI 2DB3 ; [.2634.0020.0002] # ETHIOPIC SYLLABLE ZZAA 2DB4 ; [.2635.0020.0002] # ETHIOPIC SYLLABLE ZZEE 2DB5 ; [.2636.0020.0002] # ETHIOPIC SYLLABLE ZZE 2DB6 ; [.2637.0020.0002] # ETHIOPIC SYLLABLE ZZO 2DB8 ; [.2638.0020.0002] # ETHIOPIC SYLLABLE CCHA 2DB9 ; [.2639.0020.0002] # ETHIOPIC SYLLABLE CCHU 2DBA ; [.263A.0020.0002] # ETHIOPIC SYLLABLE CCHI 2DBB ; [.263B.0020.0002] # ETHIOPIC SYLLABLE CCHAA 2DBC ; [.263C.0020.0002] # ETHIOPIC SYLLABLE CCHEE 2DBD ; [.263D.0020.0002] # ETHIOPIC SYLLABLE CCHE 2DBE ; [.263E.0020.0002] # ETHIOPIC SYLLABLE CCHO 2DC0 ; [.263F.0020.0002] # ETHIOPIC SYLLABLE QYA 2DC1 ; [.2640.0020.0002] # ETHIOPIC SYLLABLE QYU 2DC2 ; [.2641.0020.0002] # ETHIOPIC SYLLABLE QYI 2DC3 ; [.2642.0020.0002] # ETHIOPIC SYLLABLE QYAA 2DC4 ; [.2643.0020.0002] # ETHIOPIC SYLLABLE QYEE 2DC5 ; [.2644.0020.0002] # ETHIOPIC SYLLABLE QYE 2DC6 ; [.2645.0020.0002] # ETHIOPIC SYLLABLE QYO 2DC8 ; [.2646.0020.0002] # ETHIOPIC SYLLABLE KYA 2DC9 ; [.2647.0020.0002] # ETHIOPIC SYLLABLE KYU 2DCA ; [.2648.0020.0002] # ETHIOPIC SYLLABLE KYI 2DCB ; [.2649.0020.0002] # ETHIOPIC SYLLABLE KYAA 2DCC ; [.264A.0020.0002] # ETHIOPIC SYLLABLE KYEE 2DCD ; [.264B.0020.0002] # ETHIOPIC SYLLABLE KYE 2DCE ; [.264C.0020.0002] # ETHIOPIC SYLLABLE KYO 2DD0 ; [.264D.0020.0002] # ETHIOPIC SYLLABLE XYA 2DD1 ; [.264E.0020.0002] # ETHIOPIC SYLLABLE XYU 2DD2 ; [.264F.0020.0002] # ETHIOPIC SYLLABLE XYI 2DD3 ; [.2650.0020.0002] # ETHIOPIC SYLLABLE XYAA 2DD4 ; [.2651.0020.0002] # ETHIOPIC SYLLABLE XYEE 2DD5 ; [.2652.0020.0002] # ETHIOPIC SYLLABLE XYE 2DD6 ; [.2653.0020.0002] # ETHIOPIC SYLLABLE XYO 2DD8 ; [.2654.0020.0002] # ETHIOPIC SYLLABLE GYA 2DD9 ; [.2655.0020.0002] # ETHIOPIC SYLLABLE GYU 2DDA ; [.2656.0020.0002] # ETHIOPIC SYLLABLE GYI 2DDB ; [.2657.0020.0002] # ETHIOPIC SYLLABLE GYAA 2DDC ; [.2658.0020.0002] # ETHIOPIC SYLLABLE GYEE 2DDD ; [.2659.0020.0002] # ETHIOPIC SYLLABLE GYE 2DDE ; [.265A.0020.0002] # ETHIOPIC SYLLABLE GYO 0950 ; [.265B.0020.0002] # DEVANAGARI OM A8FD ; [.265C.0020.0002] # DEVANAGARI JAIN OM 0972 ; [.265D.0020.0002] # DEVANAGARI LETTER CANDRA A 0904 ; [.265E.0020.0002] # DEVANAGARI LETTER SHORT A 0905 ; [.265F.0020.0002] # DEVANAGARI LETTER A 0906 ; [.2660.0020.0002] # DEVANAGARI LETTER AA 0973 ; [.2661.0020.0002] # DEVANAGARI LETTER OE 0974 ; [.2662.0020.0002] # DEVANAGARI LETTER OOE 0975 ; [.2663.0020.0002] # DEVANAGARI LETTER AW 0976 ; [.2664.0020.0002] # DEVANAGARI LETTER UE 0977 ; [.2665.0020.0002] # DEVANAGARI LETTER UUE 0907 ; [.2666.0020.0002] # DEVANAGARI LETTER I 0908 ; [.2667.0020.0002] # DEVANAGARI LETTER II 0909 ; [.2668.0020.0002] # DEVANAGARI LETTER U 090A ; [.2669.0020.0002] # DEVANAGARI LETTER UU 090B ; [.266A.0020.0002] # DEVANAGARI LETTER VOCALIC R 0960 ; [.266B.0020.0002] # DEVANAGARI LETTER VOCALIC RR 090C ; [.266C.0020.0002] # DEVANAGARI LETTER VOCALIC L 0961 ; [.266D.0020.0002] # DEVANAGARI LETTER VOCALIC LL 090D ; [.266E.0020.0002] # DEVANAGARI LETTER CANDRA E 090E ; [.266F.0020.0002] # DEVANAGARI LETTER SHORT E 090F ; [.2670.0020.0002] # DEVANAGARI LETTER E 0910 ; [.2671.0020.0002] # DEVANAGARI LETTER AI 0911 ; [.2672.0020.0002] # DEVANAGARI LETTER CANDRA O 0912 ; [.2673.0020.0002] # DEVANAGARI LETTER SHORT O 0913 ; [.2674.0020.0002] # DEVANAGARI LETTER O 0914 ; [.2675.0020.0002] # DEVANAGARI LETTER AU 0915 ; [.2676.0020.0002] # DEVANAGARI LETTER KA 0958 ; [.2676.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER QA 0916 ; [.2677.0020.0002] # DEVANAGARI LETTER KHA 0959 ; [.2677.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER KHHA 0917 ; [.2678.0020.0002] # DEVANAGARI LETTER GA 095A ; [.2678.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER GHHA 097B ; [.2679.0020.0002] # DEVANAGARI LETTER GGA 0918 ; [.267A.0020.0002] # DEVANAGARI LETTER GHA 0919 ; [.267B.0020.0002] # DEVANAGARI LETTER NGA 091A ; [.267C.0020.0002] # DEVANAGARI LETTER CA 091B ; [.267D.0020.0002] # DEVANAGARI LETTER CHA 091C ; [.267E.0020.0002] # DEVANAGARI LETTER JA 095B ; [.267E.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER ZA 0979 ; [.267F.0020.0002] # DEVANAGARI LETTER ZHA 097C ; [.2680.0020.0002] # DEVANAGARI LETTER JJA 091D ; [.2681.0020.0002] # DEVANAGARI LETTER JHA 091E ; [.2682.0020.0002] # DEVANAGARI LETTER NYA 091F ; [.2683.0020.0002] # DEVANAGARI LETTER TTA 0920 ; [.2684.0020.0002] # DEVANAGARI LETTER TTHA 0978 ; [.2685.0020.0002] # DEVANAGARI LETTER MARWARI DDA 0921 ; [.2686.0020.0002] # DEVANAGARI LETTER DDA 095C ; [.2686.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER DDDHA 097E ; [.2687.0020.0002] # DEVANAGARI LETTER DDDA 0922 ; [.2688.0020.0002] # DEVANAGARI LETTER DDHA 095D ; [.2688.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RHA 0923 ; [.2689.0020.0002] # DEVANAGARI LETTER NNA 0924 ; [.268A.0020.0002] # DEVANAGARI LETTER TA 0925 ; [.268B.0020.0002] # DEVANAGARI LETTER THA 0926 ; [.268C.0020.0002] # DEVANAGARI LETTER DA 0927 ; [.268D.0020.0002] # DEVANAGARI LETTER DHA 0928 ; [.268E.0020.0002] # DEVANAGARI LETTER NA 0929 ; [.268E.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER NNNA 092A ; [.268F.0020.0002] # DEVANAGARI LETTER PA 092B ; [.2690.0020.0002] # DEVANAGARI LETTER PHA 095E ; [.2690.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER FA 092C ; [.2691.0020.0002] # DEVANAGARI LETTER BA 097F ; [.2692.0020.0002] # DEVANAGARI LETTER BBA 092D ; [.2693.0020.0002] # DEVANAGARI LETTER BHA 092E ; [.2694.0020.0002] # DEVANAGARI LETTER MA 092F ; [.2695.0020.0002] # DEVANAGARI LETTER YA 095F ; [.2695.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER YYA 097A ; [.2696.0020.0002] # DEVANAGARI LETTER HEAVY YA 0930 ; [.2697.0020.0002] # DEVANAGARI LETTER RA 0931 ; [.2697.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RRA 0932 ; [.2698.0020.0002] # DEVANAGARI LETTER LA 0933 ; [.2699.0020.0002] # DEVANAGARI LETTER LLA 0934 ; [.2699.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER LLLA 0935 ; [.269A.0020.0002] # DEVANAGARI LETTER VA 0936 ; [.269B.0020.0002] # DEVANAGARI LETTER SHA 0937 ; [.269C.0020.0002] # DEVANAGARI LETTER SSA 0938 ; [.269D.0020.0002] # DEVANAGARI LETTER SA 0939 ; [.269E.0020.0002] # DEVANAGARI LETTER HA 093D ; [.269F.0020.0002] # DEVANAGARI SIGN AVAGRAHA 097D ; [.26A0.0020.0002] # DEVANAGARI LETTER GLOTTAL STOP 1CE9 ; [.26A1.0020.0002] # VEDIC SIGN ANUSVARA ANTARGOMUKHA 1CEA ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA BAHIRGOMUKHA 1CEB ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA 1CEC ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL 1CEE ; [.26A1.0020.0004] # VEDIC SIGN HEXIFORM LONG ANUSVARA 1CEF ; [.26A1.0020.0004] # VEDIC SIGN LONG ANUSVARA 1CF0 ; [.26A1.0020.0004] # VEDIC SIGN RTHANG LONG ANUSVARA 1CF1 ; [.26A1.0020.0004] # VEDIC SIGN ANUSVARA UBHAYATO MUKHA 1CF5 ; [.26A2.0020.0002] # VEDIC SIGN JIHVAMULIYA 1CF6 ; [.26A3.0020.0002] # VEDIC SIGN UPADHMANIYA A8F2 ; [.26A4.0020.0002] # DEVANAGARI SIGN SPACING CANDRABINDU A8F3 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU VIRAMA A8F4 ; [.26A4.0020.0004] # DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA A8F5 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU TWO A8F6 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU THREE A8F7 ; [.26A4.0020.0004] # DEVANAGARI SIGN CANDRABINDU AVAGRAHA A8FB ; [.26A5.0020.0002] # DEVANAGARI HEADSTROKE 093E ; [.26A6.0020.0002] # DEVANAGARI VOWEL SIGN AA 093A ; [.26A7.0020.0002] # DEVANAGARI VOWEL SIGN OE 093B ; [.26A8.0020.0002] # DEVANAGARI VOWEL SIGN OOE 094F ; [.26A9.0020.0002] # DEVANAGARI VOWEL SIGN AW 0956 ; [.26AA.0020.0002] # DEVANAGARI VOWEL SIGN UE 0957 ; [.26AB.0020.0002] # DEVANAGARI VOWEL SIGN UUE 093F ; [.26AC.0020.0002] # DEVANAGARI VOWEL SIGN I 0940 ; [.26AD.0020.0002] # DEVANAGARI VOWEL SIGN II 0941 ; [.26AE.0020.0002] # DEVANAGARI VOWEL SIGN U 0942 ; [.26AF.0020.0002] # DEVANAGARI VOWEL SIGN UU 0943 ; [.26B0.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC R 0944 ; [.26B1.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC RR 0962 ; [.26B2.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC L 0963 ; [.26B3.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC LL 0945 ; [.26B4.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA E 0955 ; [.26B5.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA LONG E 0946 ; [.26B6.0020.0002] # DEVANAGARI VOWEL SIGN SHORT E 0947 ; [.26B7.0020.0002] # DEVANAGARI VOWEL SIGN E 094E ; [.26B8.0020.0002] # DEVANAGARI VOWEL SIGN PRISHTHAMATRA E 0948 ; [.26B9.0020.0002] # DEVANAGARI VOWEL SIGN AI 0949 ; [.26BA.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA O 094A ; [.26BB.0020.0002] # DEVANAGARI VOWEL SIGN SHORT O 094B ; [.26BC.0020.0002] # DEVANAGARI VOWEL SIGN O 094C ; [.26BD.0020.0002] # DEVANAGARI VOWEL SIGN AU 094D ; [.26BE.0020.0002] # DEVANAGARI SIGN VIRAMA 0980 ; [.26BF.0020.0002] # BENGALI ANJI 0985 ; [.26C0.0020.0002] # BENGALI LETTER A 0986 ; [.26C1.0020.0002] # BENGALI LETTER AA 0987 ; [.26C2.0020.0002] # BENGALI LETTER I 0988 ; [.26C3.0020.0002] # BENGALI LETTER II 0989 ; [.26C4.0020.0002] # BENGALI LETTER U 098A ; [.26C5.0020.0002] # BENGALI LETTER UU 098B ; [.26C6.0020.0002] # BENGALI LETTER VOCALIC R 09E0 ; [.26C7.0020.0002] # BENGALI LETTER VOCALIC RR 098C ; [.26C8.0020.0002] # BENGALI LETTER VOCALIC L 09E1 ; [.26C9.0020.0002] # BENGALI LETTER VOCALIC LL 098F ; [.26CA.0020.0002] # BENGALI LETTER E 0990 ; [.26CB.0020.0002] # BENGALI LETTER AI 0993 ; [.26CC.0020.0002] # BENGALI LETTER O 0994 ; [.26CD.0020.0002] # BENGALI LETTER AU 0995 ; [.26CE.0020.0002] # BENGALI LETTER KA 0996 ; [.26CF.0020.0002] # BENGALI LETTER KHA 0997 ; [.26D0.0020.0002] # BENGALI LETTER GA 0998 ; [.26D1.0020.0002] # BENGALI LETTER GHA 0999 ; [.26D2.0020.0002] # BENGALI LETTER NGA 099A ; [.26D3.0020.0002] # BENGALI LETTER CA 099B ; [.26D4.0020.0002] # BENGALI LETTER CHA 099C ; [.26D5.0020.0002] # BENGALI LETTER JA 099D ; [.26D6.0020.0002] # BENGALI LETTER JHA 099E ; [.26D7.0020.0002] # BENGALI LETTER NYA 099F ; [.26D8.0020.0002] # BENGALI LETTER TTA 09A0 ; [.26D9.0020.0002] # BENGALI LETTER TTHA 09A1 ; [.26DA.0020.0002] # BENGALI LETTER DDA 09DC ; [.26DA.0020.0002][.0000.00C2.0002] # BENGALI LETTER RRA 09A2 ; [.26DB.0020.0002] # BENGALI LETTER DDHA 09DD ; [.26DB.0020.0002][.0000.00C2.0002] # BENGALI LETTER RHA 09A3 ; [.26DC.0020.0002] # BENGALI LETTER NNA 09A4 ; [.26DD.0020.0002] # BENGALI LETTER TA 09CE ; [.26DD.0020.0004][.26FE.0020.0004] # BENGALI LETTER KHANDA TA 09A5 ; [.26DE.0020.0002] # BENGALI LETTER THA 09A6 ; [.26DF.0020.0002] # BENGALI LETTER DA 09A7 ; [.26E0.0020.0002] # BENGALI LETTER DHA 09A8 ; [.26E1.0020.0002] # BENGALI LETTER NA 09AA ; [.26E2.0020.0002] # BENGALI LETTER PA 09AB ; [.26E3.0020.0002] # BENGALI LETTER PHA 09AC ; [.26E4.0020.0002] # BENGALI LETTER BA 09AD ; [.26E5.0020.0002] # BENGALI LETTER BHA 09AE ; [.26E6.0020.0002] # BENGALI LETTER MA 09AF ; [.26E7.0020.0002] # BENGALI LETTER YA 09DF ; [.26E7.0020.0002][.0000.00C2.0002] # BENGALI LETTER YYA 09B0 ; [.26E8.0020.0002] # BENGALI LETTER RA 09F0 ; [.26E9.0020.0002] # BENGALI LETTER RA WITH MIDDLE DIAGONAL 09B2 ; [.26EA.0020.0002] # BENGALI LETTER LA 09F1 ; [.26EB.0020.0002] # BENGALI LETTER RA WITH LOWER DIAGONAL 09B6 ; [.26EC.0020.0002] # BENGALI LETTER SHA 09B7 ; [.26ED.0020.0002] # BENGALI LETTER SSA 09B8 ; [.26EE.0020.0002] # BENGALI LETTER SA 09B9 ; [.26EF.0020.0002] # BENGALI LETTER HA 09BD ; [.26F0.0020.0002] # BENGALI SIGN AVAGRAHA 09BE ; [.26F1.0020.0002] # BENGALI VOWEL SIGN AA 09BF ; [.26F2.0020.0002] # BENGALI VOWEL SIGN I 09C0 ; [.26F3.0020.0002] # BENGALI VOWEL SIGN II 09C1 ; [.26F4.0020.0002] # BENGALI VOWEL SIGN U 09C2 ; [.26F5.0020.0002] # BENGALI VOWEL SIGN UU 09C3 ; [.26F6.0020.0002] # BENGALI VOWEL SIGN VOCALIC R 09C4 ; [.26F7.0020.0002] # BENGALI VOWEL SIGN VOCALIC RR 09E2 ; [.26F8.0020.0002] # BENGALI VOWEL SIGN VOCALIC L 09E3 ; [.26F9.0020.0002] # BENGALI VOWEL SIGN VOCALIC LL 09C7 ; [.26FA.0020.0002] # BENGALI VOWEL SIGN E 09C8 ; [.26FB.0020.0002] # BENGALI VOWEL SIGN AI 09CB ; [.26FC.0020.0002] # BENGALI VOWEL SIGN O 09C7 09BE ; [.26FC.0020.0002] # BENGALI VOWEL SIGN O 09CC ; [.26FD.0020.0002] # BENGALI VOWEL SIGN AU 09C7 09D7 ; [.26FD.0020.0002] # BENGALI VOWEL SIGN AU 09CD ; [.26FE.0020.0002] # BENGALI SIGN VIRAMA 09D7 ; [.26FF.0020.0002] # BENGALI AU LENGTH MARK 0A74 ; [.2700.0020.0002] # GURMUKHI EK ONKAR 0A73 ; [.2701.0020.0002] # GURMUKHI URA 0A09 ; [.2702.0020.0002] # GURMUKHI LETTER U 0A0A ; [.2703.0020.0002] # GURMUKHI LETTER UU 0A13 ; [.2704.0020.0002] # GURMUKHI LETTER OO 0A05 ; [.2705.0020.0002] # GURMUKHI LETTER A 0A06 ; [.2706.0020.0002] # GURMUKHI LETTER AA 0A10 ; [.2707.0020.0002] # GURMUKHI LETTER AI 0A14 ; [.2708.0020.0002] # GURMUKHI LETTER AU 0A72 ; [.2709.0020.0002] # GURMUKHI IRI 0A07 ; [.270A.0020.0002] # GURMUKHI LETTER I 0A08 ; [.270B.0020.0002] # GURMUKHI LETTER II 0A0F ; [.270C.0020.0002] # GURMUKHI LETTER EE 0A38 ; [.270D.0020.0002] # GURMUKHI LETTER SA 0A36 ; [.270D.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER SHA 0A39 ; [.270E.0020.0002] # GURMUKHI LETTER HA 0A51 ; [.270F.0020.0002] # GURMUKHI SIGN UDAAT 0A15 ; [.2710.0020.0002] # GURMUKHI LETTER KA 0A16 ; [.2711.0020.0002] # GURMUKHI LETTER KHA 0A59 ; [.2711.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER KHHA 0A17 ; [.2712.0020.0002] # GURMUKHI LETTER GA 0A5A ; [.2712.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER GHHA 0A18 ; [.2713.0020.0002] # GURMUKHI LETTER GHA 0A19 ; [.2714.0020.0002] # GURMUKHI LETTER NGA 0A1A ; [.2715.0020.0002] # GURMUKHI LETTER CA 0A1B ; [.2716.0020.0002] # GURMUKHI LETTER CHA 0A1C ; [.2717.0020.0002] # GURMUKHI LETTER JA 0A5B ; [.2717.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER ZA 0A1D ; [.2718.0020.0002] # GURMUKHI LETTER JHA 0A1E ; [.2719.0020.0002] # GURMUKHI LETTER NYA 0A1F ; [.271A.0020.0002] # GURMUKHI LETTER TTA 0A20 ; [.271B.0020.0002] # GURMUKHI LETTER TTHA 0A21 ; [.271C.0020.0002] # GURMUKHI LETTER DDA 0A22 ; [.271D.0020.0002] # GURMUKHI LETTER DDHA 0A23 ; [.271E.0020.0002] # GURMUKHI LETTER NNA 0A24 ; [.271F.0020.0002] # GURMUKHI LETTER TA 0A25 ; [.2720.0020.0002] # GURMUKHI LETTER THA 0A26 ; [.2721.0020.0002] # GURMUKHI LETTER DA 0A27 ; [.2722.0020.0002] # GURMUKHI LETTER DHA 0A28 ; [.2723.0020.0002] # GURMUKHI LETTER NA 0A2A ; [.2724.0020.0002] # GURMUKHI LETTER PA 0A2B ; [.2725.0020.0002] # GURMUKHI LETTER PHA 0A5E ; [.2725.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER FA 0A2C ; [.2726.0020.0002] # GURMUKHI LETTER BA 0A2D ; [.2727.0020.0002] # GURMUKHI LETTER BHA 0A2E ; [.2728.0020.0002] # GURMUKHI LETTER MA 0A2F ; [.2729.0020.0002] # GURMUKHI LETTER YA 0A75 ; [.272A.0020.0002] # GURMUKHI SIGN YAKASH 0A30 ; [.272B.0020.0002] # GURMUKHI LETTER RA 0A32 ; [.272C.0020.0002] # GURMUKHI LETTER LA 0A33 ; [.272C.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER LLA 0A35 ; [.272D.0020.0002] # GURMUKHI LETTER VA 0A5C ; [.272E.0020.0002] # GURMUKHI LETTER RRA 0A3E ; [.272F.0020.0002] # GURMUKHI VOWEL SIGN AA 0A3F ; [.2730.0020.0002] # GURMUKHI VOWEL SIGN I 0A40 ; [.2731.0020.0002] # GURMUKHI VOWEL SIGN II 0A41 ; [.2732.0020.0002] # GURMUKHI VOWEL SIGN U 0A42 ; [.2733.0020.0002] # GURMUKHI VOWEL SIGN UU 0A47 ; [.2734.0020.0002] # GURMUKHI VOWEL SIGN EE 0A48 ; [.2735.0020.0002] # GURMUKHI VOWEL SIGN AI 0A4B ; [.2736.0020.0002] # GURMUKHI VOWEL SIGN OO 0A4C ; [.2737.0020.0002] # GURMUKHI VOWEL SIGN AU 0A4D ; [.2738.0020.0002] # GURMUKHI SIGN VIRAMA 0AD0 ; [.2739.0020.0002] # GUJARATI OM 0A85 ; [.273A.0020.0002] # GUJARATI LETTER A 0A86 ; [.273B.0020.0002] # GUJARATI LETTER AA 0A87 ; [.273C.0020.0002] # GUJARATI LETTER I 0A88 ; [.273D.0020.0002] # GUJARATI LETTER II 0A89 ; [.273E.0020.0002] # GUJARATI LETTER U 0A8A ; [.273F.0020.0002] # GUJARATI LETTER UU 0A8B ; [.2740.0020.0002] # GUJARATI LETTER VOCALIC R 0AE0 ; [.2741.0020.0002] # GUJARATI LETTER VOCALIC RR 0A8C ; [.2742.0020.0002] # GUJARATI LETTER VOCALIC L 0AE1 ; [.2743.0020.0002] # GUJARATI LETTER VOCALIC LL 0A8D ; [.2744.0020.0002] # GUJARATI VOWEL CANDRA E 0A8F ; [.2745.0020.0002] # GUJARATI LETTER E 0A90 ; [.2746.0020.0002] # GUJARATI LETTER AI 0A91 ; [.2747.0020.0002] # GUJARATI VOWEL CANDRA O 0A93 ; [.2748.0020.0002] # GUJARATI LETTER O 0A94 ; [.2749.0020.0002] # GUJARATI LETTER AU 0A95 ; [.274A.0020.0002] # GUJARATI LETTER KA 0A96 ; [.274B.0020.0002] # GUJARATI LETTER KHA 0A97 ; [.274C.0020.0002] # GUJARATI LETTER GA 0A98 ; [.274D.0020.0002] # GUJARATI LETTER GHA 0A99 ; [.274E.0020.0002] # GUJARATI LETTER NGA 0A9A ; [.274F.0020.0002] # GUJARATI LETTER CA 0A9B ; [.2750.0020.0002] # GUJARATI LETTER CHA 0A9C ; [.2751.0020.0002] # GUJARATI LETTER JA 0AF9 ; [.2752.0020.0002] # GUJARATI LETTER ZHA 0A9D ; [.2753.0020.0002] # GUJARATI LETTER JHA 0A9E ; [.2754.0020.0002] # GUJARATI LETTER NYA 0A9F ; [.2755.0020.0002] # GUJARATI LETTER TTA 0AA0 ; [.2756.0020.0002] # GUJARATI LETTER TTHA 0AA1 ; [.2757.0020.0002] # GUJARATI LETTER DDA 0AA2 ; [.2758.0020.0002] # GUJARATI LETTER DDHA 0AA3 ; [.2759.0020.0002] # GUJARATI LETTER NNA 0AA4 ; [.275A.0020.0002] # GUJARATI LETTER TA 0AA5 ; [.275B.0020.0002] # GUJARATI LETTER THA 0AA6 ; [.275C.0020.0002] # GUJARATI LETTER DA 0AA7 ; [.275D.0020.0002] # GUJARATI LETTER DHA 0AA8 ; [.275E.0020.0002] # GUJARATI LETTER NA 0AAA ; [.275F.0020.0002] # GUJARATI LETTER PA 0AAB ; [.2760.0020.0002] # GUJARATI LETTER PHA 0AAC ; [.2761.0020.0002] # GUJARATI LETTER BA 0AAD ; [.2762.0020.0002] # GUJARATI LETTER BHA 0AAE ; [.2763.0020.0002] # GUJARATI LETTER MA 0AAF ; [.2764.0020.0002] # GUJARATI LETTER YA 0AB0 ; [.2765.0020.0002] # GUJARATI LETTER RA 0AB2 ; [.2766.0020.0002] # GUJARATI LETTER LA 0AB5 ; [.2767.0020.0002] # GUJARATI LETTER VA 0AB6 ; [.2768.0020.0002] # GUJARATI LETTER SHA 0AB7 ; [.2769.0020.0002] # GUJARATI LETTER SSA 0AB8 ; [.276A.0020.0002] # GUJARATI LETTER SA 0AB9 ; [.276B.0020.0002] # GUJARATI LETTER HA 0AB3 ; [.276C.0020.0002] # GUJARATI LETTER LLA 0ABD ; [.276D.0020.0002] # GUJARATI SIGN AVAGRAHA 0ABE ; [.276E.0020.0002] # GUJARATI VOWEL SIGN AA 0ABF ; [.276F.0020.0002] # GUJARATI VOWEL SIGN I 0AC0 ; [.2770.0020.0002] # GUJARATI VOWEL SIGN II 0AC1 ; [.2771.0020.0002] # GUJARATI VOWEL SIGN U 0AC2 ; [.2772.0020.0002] # GUJARATI VOWEL SIGN UU 0AC3 ; [.2773.0020.0002] # GUJARATI VOWEL SIGN VOCALIC R 0AC4 ; [.2774.0020.0002] # GUJARATI VOWEL SIGN VOCALIC RR 0AE2 ; [.2775.0020.0002] # GUJARATI VOWEL SIGN VOCALIC L 0AE3 ; [.2776.0020.0002] # GUJARATI VOWEL SIGN VOCALIC LL 0AC5 ; [.2777.0020.0002] # GUJARATI VOWEL SIGN CANDRA E 0AC7 ; [.2778.0020.0002] # GUJARATI VOWEL SIGN E 0AC8 ; [.2779.0020.0002] # GUJARATI VOWEL SIGN AI 0AC9 ; [.277A.0020.0002] # GUJARATI VOWEL SIGN CANDRA O 0ACB ; [.277B.0020.0002] # GUJARATI VOWEL SIGN O 0ACC ; [.277C.0020.0002] # GUJARATI VOWEL SIGN AU 0ACD ; [.277D.0020.0002] # GUJARATI SIGN VIRAMA 0B05 ; [.277E.0020.0002] # ORIYA LETTER A 0B06 ; [.277F.0020.0002] # ORIYA LETTER AA 0B07 ; [.2780.0020.0002] # ORIYA LETTER I 0B08 ; [.2781.0020.0002] # ORIYA LETTER II 0B09 ; [.2782.0020.0002] # ORIYA LETTER U 0B0A ; [.2783.0020.0002] # ORIYA LETTER UU 0B0B ; [.2784.0020.0002] # ORIYA LETTER VOCALIC R 0B60 ; [.2785.0020.0002] # ORIYA LETTER VOCALIC RR 0B0C ; [.2786.0020.0002] # ORIYA LETTER VOCALIC L 0B61 ; [.2787.0020.0002] # ORIYA LETTER VOCALIC LL 0B0F ; [.2788.0020.0002] # ORIYA LETTER E 0B10 ; [.2789.0020.0002] # ORIYA LETTER AI 0B13 ; [.278A.0020.0002] # ORIYA LETTER O 0B14 ; [.278B.0020.0002] # ORIYA LETTER AU 0B15 ; [.278C.0020.0002] # ORIYA LETTER KA 0B16 ; [.278D.0020.0002] # ORIYA LETTER KHA 0B17 ; [.278E.0020.0002] # ORIYA LETTER GA 0B18 ; [.278F.0020.0002] # ORIYA LETTER GHA 0B19 ; [.2790.0020.0002] # ORIYA LETTER NGA 0B1A ; [.2791.0020.0002] # ORIYA LETTER CA 0B1B ; [.2792.0020.0002] # ORIYA LETTER CHA 0B1C ; [.2793.0020.0002] # ORIYA LETTER JA 0B1D ; [.2794.0020.0002] # ORIYA LETTER JHA 0B1E ; [.2795.0020.0002] # ORIYA LETTER NYA 0B1F ; [.2796.0020.0002] # ORIYA LETTER TTA 0B20 ; [.2797.0020.0002] # ORIYA LETTER TTHA 0B21 ; [.2798.0020.0002] # ORIYA LETTER DDA 0B5C ; [.2798.0020.0002][.0000.00C2.0002] # ORIYA LETTER RRA 0B22 ; [.2799.0020.0002] # ORIYA LETTER DDHA 0B5D ; [.2799.0020.0002][.0000.00C2.0002] # ORIYA LETTER RHA 0B23 ; [.279A.0020.0002] # ORIYA LETTER NNA 0B24 ; [.279B.0020.0002] # ORIYA LETTER TA 0B25 ; [.279C.0020.0002] # ORIYA LETTER THA 0B26 ; [.279D.0020.0002] # ORIYA LETTER DA 0B27 ; [.279E.0020.0002] # ORIYA LETTER DHA 0B28 ; [.279F.0020.0002] # ORIYA LETTER NA 0B2A ; [.27A0.0020.0002] # ORIYA LETTER PA 0B2B ; [.27A1.0020.0002] # ORIYA LETTER PHA 0B2C ; [.27A2.0020.0002] # ORIYA LETTER BA 0B2D ; [.27A3.0020.0002] # ORIYA LETTER BHA 0B2E ; [.27A4.0020.0002] # ORIYA LETTER MA 0B2F ; [.27A5.0020.0002] # ORIYA LETTER YA 0B5F ; [.27A6.0020.0002] # ORIYA LETTER YYA 0B30 ; [.27A7.0020.0002] # ORIYA LETTER RA 0B32 ; [.27A8.0020.0002] # ORIYA LETTER LA 0B33 ; [.27A9.0020.0002] # ORIYA LETTER LLA 0B35 ; [.27AA.0020.0002] # ORIYA LETTER VA 0B71 ; [.27AB.0020.0002] # ORIYA LETTER WA 0B36 ; [.27AC.0020.0002] # ORIYA LETTER SHA 0B37 ; [.27AD.0020.0002] # ORIYA LETTER SSA 0B38 ; [.27AE.0020.0002] # ORIYA LETTER SA 0B39 ; [.27AF.0020.0002] # ORIYA LETTER HA 0B3D ; [.27B0.0020.0002] # ORIYA SIGN AVAGRAHA 0B3E ; [.27B1.0020.0002] # ORIYA VOWEL SIGN AA 0B3F ; [.27B2.0020.0002] # ORIYA VOWEL SIGN I 0B40 ; [.27B3.0020.0002] # ORIYA VOWEL SIGN II 0B41 ; [.27B4.0020.0002] # ORIYA VOWEL SIGN U 0B42 ; [.27B5.0020.0002] # ORIYA VOWEL SIGN UU 0B43 ; [.27B6.0020.0002] # ORIYA VOWEL SIGN VOCALIC R 0B44 ; [.27B7.0020.0002] # ORIYA VOWEL SIGN VOCALIC RR 0B62 ; [.27B8.0020.0002] # ORIYA VOWEL SIGN VOCALIC L 0B63 ; [.27B9.0020.0002] # ORIYA VOWEL SIGN VOCALIC LL 0B47 ; [.27BA.0020.0002] # ORIYA VOWEL SIGN E 0B48 ; [.27BB.0020.0002] # ORIYA VOWEL SIGN AI 0B47 0B56 ; [.27BB.0020.0002] # ORIYA VOWEL SIGN AI 0B4B ; [.27BC.0020.0002] # ORIYA VOWEL SIGN O 0B47 0B3E ; [.27BC.0020.0002] # ORIYA VOWEL SIGN O 0B4C ; [.27BD.0020.0002] # ORIYA VOWEL SIGN AU 0B47 0B57 ; [.27BD.0020.0002] # ORIYA VOWEL SIGN AU 0B4D ; [.27BE.0020.0002] # ORIYA SIGN VIRAMA 0B56 ; [.27BF.0020.0002] # ORIYA AI LENGTH MARK 0B57 ; [.27C0.0020.0002] # ORIYA AU LENGTH MARK 0BD0 ; [.27C1.0020.0002] # TAMIL OM 0B85 ; [.27C2.0020.0002] # TAMIL LETTER A 0B86 ; [.27C3.0020.0002] # TAMIL LETTER AA 0B87 ; [.27C4.0020.0002] # TAMIL LETTER I 0B88 ; [.27C5.0020.0002] # TAMIL LETTER II 0B89 ; [.27C6.0020.0002] # TAMIL LETTER U 0B8A ; [.27C7.0020.0002] # TAMIL LETTER UU 0B8E ; [.27C8.0020.0002] # TAMIL LETTER E 0B8F ; [.27C9.0020.0002] # TAMIL LETTER EE 0B90 ; [.27CA.0020.0002] # TAMIL LETTER AI 0B92 ; [.27CB.0020.0002] # TAMIL LETTER O 0B93 ; [.27CC.0020.0002] # TAMIL LETTER OO 0B94 ; [.27CD.0020.0002] # TAMIL LETTER AU 0B92 0BD7 ; [.27CD.0020.0002] # TAMIL LETTER AU 0B83 ; [.27CE.0020.0002] # TAMIL SIGN VISARGA 0B95 ; [.27CF.0020.0002] # TAMIL LETTER KA 0B99 ; [.27D0.0020.0002] # TAMIL LETTER NGA 0B9A ; [.27D1.0020.0002] # TAMIL LETTER CA 0B9E ; [.27D2.0020.0002] # TAMIL LETTER NYA 0B9F ; [.27D3.0020.0002] # TAMIL LETTER TTA 0BA3 ; [.27D4.0020.0002] # TAMIL LETTER NNA 0BA4 ; [.27D5.0020.0002] # TAMIL LETTER TA 0BA8 ; [.27D6.0020.0002] # TAMIL LETTER NA 0BAA ; [.27D7.0020.0002] # TAMIL LETTER PA 0BAE ; [.27D8.0020.0002] # TAMIL LETTER MA 0BAF ; [.27D9.0020.0002] # TAMIL LETTER YA 0BB0 ; [.27DA.0020.0002] # TAMIL LETTER RA 0BB2 ; [.27DB.0020.0002] # TAMIL LETTER LA 0BB5 ; [.27DC.0020.0002] # TAMIL LETTER VA 0BB4 ; [.27DD.0020.0002] # TAMIL LETTER LLLA 0BB3 ; [.27DE.0020.0002] # TAMIL LETTER LLA 0BB1 ; [.27DF.0020.0002] # TAMIL LETTER RRA 0BA9 ; [.27E0.0020.0002] # TAMIL LETTER NNNA 0B9C ; [.27E1.0020.0002] # TAMIL LETTER JA 0BB6 ; [.27E2.0020.0002] # TAMIL LETTER SHA 0BB7 ; [.27E3.0020.0002] # TAMIL LETTER SSA 0BB8 ; [.27E4.0020.0002] # TAMIL LETTER SA 0BB9 ; [.27E5.0020.0002] # TAMIL LETTER HA 0BBE ; [.27E6.0020.0002] # TAMIL VOWEL SIGN AA 0BBF ; [.27E7.0020.0002] # TAMIL VOWEL SIGN I 0BC0 ; [.27E8.0020.0002] # TAMIL VOWEL SIGN II 0BC1 ; [.27E9.0020.0002] # TAMIL VOWEL SIGN U 0BC2 ; [.27EA.0020.0002] # TAMIL VOWEL SIGN UU 0BC6 ; [.27EB.0020.0002] # TAMIL VOWEL SIGN E 0BC7 ; [.27EC.0020.0002] # TAMIL VOWEL SIGN EE 0BC8 ; [.27ED.0020.0002] # TAMIL VOWEL SIGN AI 0BCA ; [.27EE.0020.0002] # TAMIL VOWEL SIGN O 0BC6 0BBE ; [.27EE.0020.0002] # TAMIL VOWEL SIGN O 0BCB ; [.27EF.0020.0002] # TAMIL VOWEL SIGN OO 0BC7 0BBE ; [.27EF.0020.0002] # TAMIL VOWEL SIGN OO 0BCC ; [.27F0.0020.0002] # TAMIL VOWEL SIGN AU 0BC6 0BD7 ; [.27F0.0020.0002] # TAMIL VOWEL SIGN AU 0BCD ; [.27F1.0020.0002] # TAMIL SIGN VIRAMA 0BD7 ; [.27F2.0020.0002] # TAMIL AU LENGTH MARK 0C05 ; [.27F3.0020.0002] # TELUGU LETTER A 0C06 ; [.27F4.0020.0002] # TELUGU LETTER AA 0C07 ; [.27F5.0020.0002] # TELUGU LETTER I 0C08 ; [.27F6.0020.0002] # TELUGU LETTER II 0C09 ; [.27F7.0020.0002] # TELUGU LETTER U 0C0A ; [.27F8.0020.0002] # TELUGU LETTER UU 0C0B ; [.27F9.0020.0002] # TELUGU LETTER VOCALIC R 0C60 ; [.27FA.0020.0002] # TELUGU LETTER VOCALIC RR 0C0C ; [.27FB.0020.0002] # TELUGU LETTER VOCALIC L 0C61 ; [.27FC.0020.0002] # TELUGU LETTER VOCALIC LL 0C0E ; [.27FD.0020.0002] # TELUGU LETTER E 0C0F ; [.27FE.0020.0002] # TELUGU LETTER EE 0C10 ; [.27FF.0020.0002] # TELUGU LETTER AI 0C12 ; [.2800.0020.0002] # TELUGU LETTER O 0C13 ; [.2801.0020.0002] # TELUGU LETTER OO 0C14 ; [.2802.0020.0002] # TELUGU LETTER AU 0C15 ; [.2803.0020.0002] # TELUGU LETTER KA 0C16 ; [.2804.0020.0002] # TELUGU LETTER KHA 0C17 ; [.2805.0020.0002] # TELUGU LETTER GA 0C18 ; [.2806.0020.0002] # TELUGU LETTER GHA 0C19 ; [.2807.0020.0002] # TELUGU LETTER NGA 0C1A ; [.2808.0020.0002] # TELUGU LETTER CA 0C58 ; [.2809.0020.0002] # TELUGU LETTER TSA 0C1B ; [.280A.0020.0002] # TELUGU LETTER CHA 0C1C ; [.280B.0020.0002] # TELUGU LETTER JA 0C59 ; [.280C.0020.0002] # TELUGU LETTER DZA 0C1D ; [.280D.0020.0002] # TELUGU LETTER JHA 0C1E ; [.280E.0020.0002] # TELUGU LETTER NYA 0C1F ; [.280F.0020.0002] # TELUGU LETTER TTA 0C20 ; [.2810.0020.0002] # TELUGU LETTER TTHA 0C21 ; [.2811.0020.0002] # TELUGU LETTER DDA 0C22 ; [.2812.0020.0002] # TELUGU LETTER DDHA 0C23 ; [.2813.0020.0002] # TELUGU LETTER NNA 0C24 ; [.2814.0020.0002] # TELUGU LETTER TA 0C25 ; [.2815.0020.0002] # TELUGU LETTER THA 0C26 ; [.2816.0020.0002] # TELUGU LETTER DA 0C27 ; [.2817.0020.0002] # TELUGU LETTER DHA 0C28 ; [.2818.0020.0002] # TELUGU LETTER NA 0C2A ; [.2819.0020.0002] # TELUGU LETTER PA 0C2B ; [.281A.0020.0002] # TELUGU LETTER PHA 0C2C ; [.281B.0020.0002] # TELUGU LETTER BA 0C2D ; [.281C.0020.0002] # TELUGU LETTER BHA 0C2E ; [.281D.0020.0002] # TELUGU LETTER MA 0C2F ; [.281E.0020.0002] # TELUGU LETTER YA 0C30 ; [.281F.0020.0002] # TELUGU LETTER RA 0C31 ; [.2820.0020.0002] # TELUGU LETTER RRA 0C32 ; [.2821.0020.0002] # TELUGU LETTER LA 0C35 ; [.2822.0020.0002] # TELUGU LETTER VA 0C36 ; [.2823.0020.0002] # TELUGU LETTER SHA 0C37 ; [.2824.0020.0002] # TELUGU LETTER SSA 0C38 ; [.2825.0020.0002] # TELUGU LETTER SA 0C39 ; [.2826.0020.0002] # TELUGU LETTER HA 0C33 ; [.2827.0020.0002] # TELUGU LETTER LLA 0C34 ; [.2828.0020.0002] # TELUGU LETTER LLLA 0C5A ; [.2829.0020.0002] # TELUGU LETTER RRRA 0C3D ; [.282A.0020.0002] # TELUGU SIGN AVAGRAHA 0C3E ; [.282B.0020.0002] # TELUGU VOWEL SIGN AA 0C3F ; [.282C.0020.0002] # TELUGU VOWEL SIGN I 0C40 ; [.282D.0020.0002] # TELUGU VOWEL SIGN II 0C41 ; [.282E.0020.0002] # TELUGU VOWEL SIGN U 0C42 ; [.282F.0020.0002] # TELUGU VOWEL SIGN UU 0C43 ; [.2830.0020.0002] # TELUGU VOWEL SIGN VOCALIC R 0C44 ; [.2831.0020.0002] # TELUGU VOWEL SIGN VOCALIC RR 0C62 ; [.2832.0020.0002] # TELUGU VOWEL SIGN VOCALIC L 0C63 ; [.2833.0020.0002] # TELUGU VOWEL SIGN VOCALIC LL 0C46 ; [.2834.0020.0002] # TELUGU VOWEL SIGN E 0C47 ; [.2835.0020.0002] # TELUGU VOWEL SIGN EE 0C48 ; [.2836.0020.0002] # TELUGU VOWEL SIGN AI 0C46 0C56 ; [.2836.0020.0002] # TELUGU VOWEL SIGN AI 0C4A ; [.2837.0020.0002] # TELUGU VOWEL SIGN O 0C4B ; [.2838.0020.0002] # TELUGU VOWEL SIGN OO 0C4C ; [.2839.0020.0002] # TELUGU VOWEL SIGN AU 0C4D ; [.283A.0020.0002] # TELUGU SIGN VIRAMA 0C55 ; [.283B.0020.0002] # TELUGU LENGTH MARK 0C56 ; [.283C.0020.0002] # TELUGU AI LENGTH MARK 0C85 ; [.283D.0020.0002] # KANNADA LETTER A 0C86 ; [.283E.0020.0002] # KANNADA LETTER AA 0C87 ; [.283F.0020.0002] # KANNADA LETTER I 0C88 ; [.2840.0020.0002] # KANNADA LETTER II 0C89 ; [.2841.0020.0002] # KANNADA LETTER U 0C8A ; [.2842.0020.0002] # KANNADA LETTER UU 0C8B ; [.2843.0020.0002] # KANNADA LETTER VOCALIC R 0CE0 ; [.2844.0020.0002] # KANNADA LETTER VOCALIC RR 0C8C ; [.2845.0020.0002] # KANNADA LETTER VOCALIC L 0CE1 ; [.2846.0020.0002] # KANNADA LETTER VOCALIC LL 0C8E ; [.2847.0020.0002] # KANNADA LETTER E 0C8F ; [.2848.0020.0002] # KANNADA LETTER EE 0C90 ; [.2849.0020.0002] # KANNADA LETTER AI 0C92 ; [.284A.0020.0002] # KANNADA LETTER O 0C93 ; [.284B.0020.0002] # KANNADA LETTER OO 0C94 ; [.284C.0020.0002] # KANNADA LETTER AU 0C95 ; [.284D.0020.0002] # KANNADA LETTER KA 0C96 ; [.284E.0020.0002] # KANNADA LETTER KHA 0C97 ; [.284F.0020.0002] # KANNADA LETTER GA 0C98 ; [.2850.0020.0002] # KANNADA LETTER GHA 0C99 ; [.2851.0020.0002] # KANNADA LETTER NGA 0C9A ; [.2852.0020.0002] # KANNADA LETTER CA 0C9B ; [.2853.0020.0002] # KANNADA LETTER CHA 0C9C ; [.2854.0020.0002] # KANNADA LETTER JA 0C9D ; [.2855.0020.0002] # KANNADA LETTER JHA 0C9E ; [.2856.0020.0002] # KANNADA LETTER NYA 0C9F ; [.2857.0020.0002] # KANNADA LETTER TTA 0CA0 ; [.2858.0020.0002] # KANNADA LETTER TTHA 0CA1 ; [.2859.0020.0002] # KANNADA LETTER DDA 0CA2 ; [.285A.0020.0002] # KANNADA LETTER DDHA 0CA3 ; [.285B.0020.0002] # KANNADA LETTER NNA 0CA4 ; [.285C.0020.0002] # KANNADA LETTER TA 0CA5 ; [.285D.0020.0002] # KANNADA LETTER THA 0CA6 ; [.285E.0020.0002] # KANNADA LETTER DA 0CA7 ; [.285F.0020.0002] # KANNADA LETTER DHA 0CA8 ; [.2860.0020.0002] # KANNADA LETTER NA 0CAA ; [.2861.0020.0002] # KANNADA LETTER PA 0CAB ; [.2862.0020.0002] # KANNADA LETTER PHA 0CAC ; [.2863.0020.0002] # KANNADA LETTER BA 0CAD ; [.2864.0020.0002] # KANNADA LETTER BHA 0CAE ; [.2865.0020.0002] # KANNADA LETTER MA 0CAF ; [.2866.0020.0002] # KANNADA LETTER YA 0CB0 ; [.2867.0020.0002] # KANNADA LETTER RA 0CB1 ; [.2868.0020.0002] # KANNADA LETTER RRA 0CB2 ; [.2869.0020.0002] # KANNADA LETTER LA 0CB5 ; [.286A.0020.0002] # KANNADA LETTER VA 0CB6 ; [.286B.0020.0002] # KANNADA LETTER SHA 0CB7 ; [.286C.0020.0002] # KANNADA LETTER SSA 0CB8 ; [.286D.0020.0002] # KANNADA LETTER SA 0CB9 ; [.286E.0020.0002] # KANNADA LETTER HA 0CB3 ; [.286F.0020.0002] # KANNADA LETTER LLA 0CDE ; [.2870.0020.0002] # KANNADA LETTER FA 0CBD ; [.2871.0020.0002] # KANNADA SIGN AVAGRAHA 0CF1 ; [.2872.0020.0002] # KANNADA SIGN JIHVAMULIYA 0CF2 ; [.2873.0020.0002] # KANNADA SIGN UPADHMANIYA 0C80 ; [.2874.0020.0002] # KANNADA SIGN SPACING CANDRABINDU 0CBE ; [.2875.0020.0002] # KANNADA VOWEL SIGN AA 0CBF ; [.2876.0020.0002] # KANNADA VOWEL SIGN I 0CC0 ; [.2877.0020.0002] # KANNADA VOWEL SIGN II 0CBF 0CD5 ; [.2877.0020.0002] # KANNADA VOWEL SIGN II 0CC1 ; [.2878.0020.0002] # KANNADA VOWEL SIGN U 0CC2 ; [.2879.0020.0002] # KANNADA VOWEL SIGN UU 0CC3 ; [.287A.0020.0002] # KANNADA VOWEL SIGN VOCALIC R 0CC4 ; [.287B.0020.0002] # KANNADA VOWEL SIGN VOCALIC RR 0CE2 ; [.287C.0020.0002] # KANNADA VOWEL SIGN VOCALIC L 0CE3 ; [.287D.0020.0002] # KANNADA VOWEL SIGN VOCALIC LL 0CC6 ; [.287E.0020.0002] # KANNADA VOWEL SIGN E 0CC7 ; [.287F.0020.0002] # KANNADA VOWEL SIGN EE 0CC6 0CD5 ; [.287F.0020.0002] # KANNADA VOWEL SIGN EE 0CC8 ; [.2880.0020.0002] # KANNADA VOWEL SIGN AI 0CC6 0CD6 ; [.2880.0020.0002] # KANNADA VOWEL SIGN AI 0CCA ; [.2881.0020.0002] # KANNADA VOWEL SIGN O 0CC6 0CC2 ; [.2881.0020.0002] # KANNADA VOWEL SIGN O 0CCB ; [.2882.0020.0002] # KANNADA VOWEL SIGN OO 0CC6 0CC2 0CD5 ; [.2882.0020.0002] # KANNADA VOWEL SIGN OO 0CCA 0CD5 ; [.2882.0020.0002] # KANNADA VOWEL SIGN OO 0CCC ; [.2883.0020.0002] # KANNADA VOWEL SIGN AU 0CCD ; [.2884.0020.0002] # KANNADA SIGN VIRAMA 0CD5 ; [.2885.0020.0002] # KANNADA LENGTH MARK 0CD6 ; [.2886.0020.0002] # KANNADA AI LENGTH MARK 0D05 ; [.2887.0020.0002] # MALAYALAM LETTER A 0D06 ; [.2888.0020.0002] # MALAYALAM LETTER AA 0D07 ; [.2889.0020.0002] # MALAYALAM LETTER I 0D08 ; [.288A.0020.0002] # MALAYALAM LETTER II 0D5F ; [.288B.0020.0002] # MALAYALAM LETTER ARCHAIC II 0D09 ; [.288C.0020.0002] # MALAYALAM LETTER U 0D0A ; [.288D.0020.0002] # MALAYALAM LETTER UU 0D0B ; [.288E.0020.0002] # MALAYALAM LETTER VOCALIC R 0D60 ; [.288F.0020.0002] # MALAYALAM LETTER VOCALIC RR 0D0C ; [.2890.0020.0002] # MALAYALAM LETTER VOCALIC L 0D61 ; [.2891.0020.0002] # MALAYALAM LETTER VOCALIC LL 0D0E ; [.2892.0020.0002] # MALAYALAM LETTER E 0D0F ; [.2893.0020.0002] # MALAYALAM LETTER EE 0D10 ; [.2894.0020.0002] # MALAYALAM LETTER AI 0D12 ; [.2895.0020.0002] # MALAYALAM LETTER O 0D13 ; [.2896.0020.0002] # MALAYALAM LETTER OO 0D14 ; [.2897.0020.0002] # MALAYALAM LETTER AU 0D15 ; [.2898.0020.0002] # MALAYALAM LETTER KA 0D7F ; [.2898.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU K 0D16 ; [.2899.0020.0002] # MALAYALAM LETTER KHA 0D17 ; [.289A.0020.0002] # MALAYALAM LETTER GA 0D18 ; [.289B.0020.0002] # MALAYALAM LETTER GHA 0D19 ; [.289C.0020.0002] # MALAYALAM LETTER NGA 0D1A ; [.289D.0020.0002] # MALAYALAM LETTER CA 0D1B ; [.289E.0020.0002] # MALAYALAM LETTER CHA 0D1C ; [.289F.0020.0002] # MALAYALAM LETTER JA 0D1D ; [.28A0.0020.0002] # MALAYALAM LETTER JHA 0D1E ; [.28A1.0020.0002] # MALAYALAM LETTER NYA 0D1F ; [.28A2.0020.0002] # MALAYALAM LETTER TTA 0D20 ; [.28A3.0020.0002] # MALAYALAM LETTER TTHA 0D21 ; [.28A4.0020.0002] # MALAYALAM LETTER DDA 0D22 ; [.28A5.0020.0002] # MALAYALAM LETTER DDHA 0D23 ; [.28A6.0020.0002] # MALAYALAM LETTER NNA 0D7A ; [.28A6.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU NN 0D24 ; [.28A7.0020.0002] # MALAYALAM LETTER TA 0D25 ; [.28A8.0020.0002] # MALAYALAM LETTER THA 0D26 ; [.28A9.0020.0002] # MALAYALAM LETTER DA 0D27 ; [.28AA.0020.0002] # MALAYALAM LETTER DHA 0D28 ; [.28AB.0020.0002] # MALAYALAM LETTER NA 0D7B ; [.28AB.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU N 0D29 ; [.28AC.0020.0002] # MALAYALAM LETTER NNNA 0D2A ; [.28AD.0020.0002] # MALAYALAM LETTER PA 0D2B ; [.28AE.0020.0002] # MALAYALAM LETTER PHA 0D2C ; [.28AF.0020.0002] # MALAYALAM LETTER BA 0D2D ; [.28B0.0020.0002] # MALAYALAM LETTER BHA 0D2E ; [.28B1.0020.0002] # MALAYALAM LETTER MA 0D54 ; [.28B1.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU M 0D2F ; [.28B2.0020.0002] # MALAYALAM LETTER YA 0D55 ; [.28B2.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU Y 0D30 ; [.28B3.0020.0002] # MALAYALAM LETTER RA 0D4E ; [.28B3.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER DOT REPH 0D7C ; [.28B3.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU RR 0D32 ; [.28B4.0020.0002] # MALAYALAM LETTER LA 0D7D ; [.28B4.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU L 0D35 ; [.28B5.0020.0002] # MALAYALAM LETTER VA 0D36 ; [.28B6.0020.0002] # MALAYALAM LETTER SHA 0D37 ; [.28B7.0020.0002] # MALAYALAM LETTER SSA 0D38 ; [.28B8.0020.0002] # MALAYALAM LETTER SA 0D39 ; [.28B9.0020.0002] # MALAYALAM LETTER HA 0D33 ; [.28BA.0020.0002] # MALAYALAM LETTER LLA 0D7E ; [.28BA.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU LL 0D34 ; [.28BB.0020.0002] # MALAYALAM LETTER LLLA 0D56 ; [.28BB.0020.0004][.28CF.0020.0004] # MALAYALAM LETTER CHILLU LLL 0D31 ; [.28BC.0020.0002] # MALAYALAM LETTER RRA 0D3A ; [.28BD.0020.0002] # MALAYALAM LETTER TTTA 0D3D ; [.28BE.0020.0002] # MALAYALAM SIGN AVAGRAHA 0D3E ; [.28BF.0020.0002] # MALAYALAM VOWEL SIGN AA 0D3F ; [.28C0.0020.0002] # MALAYALAM VOWEL SIGN I 0D40 ; [.28C1.0020.0002] # MALAYALAM VOWEL SIGN II 0D41 ; [.28C2.0020.0002] # MALAYALAM VOWEL SIGN U 0D42 ; [.28C3.0020.0002] # MALAYALAM VOWEL SIGN UU 0D43 ; [.28C4.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC R 0D44 ; [.28C5.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC RR 0D62 ; [.28C6.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC L 0D63 ; [.28C7.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC LL 0D46 ; [.28C8.0020.0002] # MALAYALAM VOWEL SIGN E 0D47 ; [.28C9.0020.0002] # MALAYALAM VOWEL SIGN EE 0D48 ; [.28CA.0020.0002] # MALAYALAM VOWEL SIGN AI 0D4A ; [.28CB.0020.0002] # MALAYALAM VOWEL SIGN O 0D46 0D3E ; [.28CB.0020.0002] # MALAYALAM VOWEL SIGN O 0D4B ; [.28CC.0020.0002] # MALAYALAM VOWEL SIGN OO 0D47 0D3E ; [.28CC.0020.0002] # MALAYALAM VOWEL SIGN OO 0D4C ; [.28CD.0020.0002] # MALAYALAM VOWEL SIGN AU 0D46 0D57 ; [.28CD.0020.0002] # MALAYALAM VOWEL SIGN AU 0D57 ; [.28CE.0020.0002] # MALAYALAM AU LENGTH MARK 0D4D ; [.28CF.0020.0002] # MALAYALAM SIGN VIRAMA 0D85 ; [.28D0.0020.0002] # SINHALA LETTER AYANNA 0D86 ; [.28D1.0020.0002] # SINHALA LETTER AAYANNA 0D87 ; [.28D2.0020.0002] # SINHALA LETTER AEYANNA 0D88 ; [.28D3.0020.0002] # SINHALA LETTER AEEYANNA 0D89 ; [.28D4.0020.0002] # SINHALA LETTER IYANNA 0D8A ; [.28D5.0020.0002] # SINHALA LETTER IIYANNA 0D8B ; [.28D6.0020.0002] # SINHALA LETTER UYANNA 0D8C ; [.28D7.0020.0002] # SINHALA LETTER UUYANNA 0D8D ; [.28D8.0020.0002] # SINHALA LETTER IRUYANNA 0D8E ; [.28D9.0020.0002] # SINHALA LETTER IRUUYANNA 0D8F ; [.28DA.0020.0002] # SINHALA LETTER ILUYANNA 0D90 ; [.28DB.0020.0002] # SINHALA LETTER ILUUYANNA 0D91 ; [.28DC.0020.0002] # SINHALA LETTER EYANNA 0D92 ; [.28DD.0020.0002] # SINHALA LETTER EEYANNA 0D93 ; [.28DE.0020.0002] # SINHALA LETTER AIYANNA 0D94 ; [.28DF.0020.0002] # SINHALA LETTER OYANNA 0D95 ; [.28E0.0020.0002] # SINHALA LETTER OOYANNA 0D96 ; [.28E1.0020.0002] # SINHALA LETTER AUYANNA 0D9A ; [.28E2.0020.0002] # SINHALA LETTER ALPAPRAANA KAYANNA 0D9B ; [.28E3.0020.0002] # SINHALA LETTER MAHAAPRAANA KAYANNA 0D9C ; [.28E4.0020.0002] # SINHALA LETTER ALPAPRAANA GAYANNA 0D9D ; [.28E5.0020.0002] # SINHALA LETTER MAHAAPRAANA GAYANNA 0D9E ; [.28E6.0020.0002] # SINHALA LETTER KANTAJA NAASIKYAYA 0D9F ; [.28E7.0020.0002] # SINHALA LETTER SANYAKA GAYANNA 0DA0 ; [.28E8.0020.0002] # SINHALA LETTER ALPAPRAANA CAYANNA 0DA1 ; [.28E9.0020.0002] # SINHALA LETTER MAHAAPRAANA CAYANNA 0DA2 ; [.28EA.0020.0002] # SINHALA LETTER ALPAPRAANA JAYANNA 0DA3 ; [.28EB.0020.0002] # SINHALA LETTER MAHAAPRAANA JAYANNA 0DA4 ; [.28EC.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA 0DA5 ; [.28ED.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA 0DA6 ; [.28EE.0020.0002] # SINHALA LETTER SANYAKA JAYANNA 0DA7 ; [.28EF.0020.0002] # SINHALA LETTER ALPAPRAANA TTAYANNA 0DA8 ; [.28F0.0020.0002] # SINHALA LETTER MAHAAPRAANA TTAYANNA 0DA9 ; [.28F1.0020.0002] # SINHALA LETTER ALPAPRAANA DDAYANNA 0DAA ; [.28F2.0020.0002] # SINHALA LETTER MAHAAPRAANA DDAYANNA 0DAB ; [.28F3.0020.0002] # SINHALA LETTER MUURDHAJA NAYANNA 0DAC ; [.28F4.0020.0002] # SINHALA LETTER SANYAKA DDAYANNA 0DAD ; [.28F5.0020.0002] # SINHALA LETTER ALPAPRAANA TAYANNA 0DAE ; [.28F6.0020.0002] # SINHALA LETTER MAHAAPRAANA TAYANNA 0DAF ; [.28F7.0020.0002] # SINHALA LETTER ALPAPRAANA DAYANNA 0DB0 ; [.28F8.0020.0002] # SINHALA LETTER MAHAAPRAANA DAYANNA 0DB1 ; [.28F9.0020.0002] # SINHALA LETTER DANTAJA NAYANNA 0DB3 ; [.28FA.0020.0002] # SINHALA LETTER SANYAKA DAYANNA 0DB4 ; [.28FB.0020.0002] # SINHALA LETTER ALPAPRAANA PAYANNA 0DB5 ; [.28FC.0020.0002] # SINHALA LETTER MAHAAPRAANA PAYANNA 0DB6 ; [.28FD.0020.0002] # SINHALA LETTER ALPAPRAANA BAYANNA 0DB7 ; [.28FE.0020.0002] # SINHALA LETTER MAHAAPRAANA BAYANNA 0DB8 ; [.28FF.0020.0002] # SINHALA LETTER MAYANNA 0DB9 ; [.2900.0020.0002] # SINHALA LETTER AMBA BAYANNA 0DBA ; [.2901.0020.0002] # SINHALA LETTER YAYANNA 0DBB ; [.2902.0020.0002] # SINHALA LETTER RAYANNA 0DBD ; [.2903.0020.0002] # SINHALA LETTER DANTAJA LAYANNA 0DC0 ; [.2904.0020.0002] # SINHALA LETTER VAYANNA 0DC1 ; [.2905.0020.0002] # SINHALA LETTER TAALUJA SAYANNA 0DC2 ; [.2906.0020.0002] # SINHALA LETTER MUURDHAJA SAYANNA 0DC3 ; [.2907.0020.0002] # SINHALA LETTER DANTAJA SAYANNA 0DC4 ; [.2908.0020.0002] # SINHALA LETTER HAYANNA 0DC5 ; [.2909.0020.0002] # SINHALA LETTER MUURDHAJA LAYANNA 0DC6 ; [.290A.0020.0002] # SINHALA LETTER FAYANNA 0DCF ; [.290B.0020.0002] # SINHALA VOWEL SIGN AELA-PILLA 0DD0 ; [.290C.0020.0002] # SINHALA VOWEL SIGN KETTI AEDA-PILLA 0DD1 ; [.290D.0020.0002] # SINHALA VOWEL SIGN DIGA AEDA-PILLA 0DD2 ; [.290E.0020.0002] # SINHALA VOWEL SIGN KETTI IS-PILLA 0DD3 ; [.290F.0020.0002] # SINHALA VOWEL SIGN DIGA IS-PILLA 0DD4 ; [.2910.0020.0002] # SINHALA VOWEL SIGN KETTI PAA-PILLA 0DD6 ; [.2911.0020.0002] # SINHALA VOWEL SIGN DIGA PAA-PILLA 0DD8 ; [.2912.0020.0002] # SINHALA VOWEL SIGN GAETTA-PILLA 0DF2 ; [.2913.0020.0002] # SINHALA VOWEL SIGN DIGA GAETTA-PILLA 0DDF ; [.2914.0020.0002] # SINHALA VOWEL SIGN GAYANUKITTA 0DF3 ; [.2915.0020.0002] # SINHALA VOWEL SIGN DIGA GAYANUKITTA 0DD9 ; [.2916.0020.0002] # SINHALA VOWEL SIGN KOMBUVA 0DDA ; [.2917.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA 0DD9 0DCA ; [.2917.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA 0DDB ; [.2918.0020.0002] # SINHALA VOWEL SIGN KOMBU DEKA 0DDC ; [.2919.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA 0DD9 0DCF ; [.2919.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA 0DDD ; [.291A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA 0DD9 0DCF 0DCA ; [.291A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA 0DDC 0DCA ; [.291A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA 0DDE ; [.291B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA 0DD9 0DDF ; [.291B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA 0DCA ; [.291C.0020.0002] # SINHALA SIGN AL-LAKUNA AAF2 ; [.291D.0020.0002] # MEETEI MAYEK ANJI ABC0 ; [.291E.0020.0002] # MEETEI MAYEK LETTER KOK ABC1 ; [.291F.0020.0002] # MEETEI MAYEK LETTER SAM ABC2 ; [.2920.0020.0002] # MEETEI MAYEK LETTER LAI ABC3 ; [.2921.0020.0002] # MEETEI MAYEK LETTER MIT ABC4 ; [.2922.0020.0002] # MEETEI MAYEK LETTER PA ABC5 ; [.2923.0020.0002] # MEETEI MAYEK LETTER NA ABC6 ; [.2924.0020.0002] # MEETEI MAYEK LETTER CHIL ABC7 ; [.2925.0020.0002] # MEETEI MAYEK LETTER TIL ABC8 ; [.2926.0020.0002] # MEETEI MAYEK LETTER KHOU ABC9 ; [.2927.0020.0002] # MEETEI MAYEK LETTER NGOU ABCA ; [.2928.0020.0002] # MEETEI MAYEK LETTER THOU ABCB ; [.2929.0020.0002] # MEETEI MAYEK LETTER WAI ABCC ; [.292A.0020.0002] # MEETEI MAYEK LETTER YANG ABCD ; [.292B.0020.0002] # MEETEI MAYEK LETTER HUK ABCE ; [.292C.0020.0002] # MEETEI MAYEK LETTER UN ABCF ; [.292D.0020.0002] # MEETEI MAYEK LETTER I ABD0 ; [.292E.0020.0002] # MEETEI MAYEK LETTER PHAM ABD1 ; [.292F.0020.0002] # MEETEI MAYEK LETTER ATIYA ABD2 ; [.2930.0020.0002] # MEETEI MAYEK LETTER GOK ABD3 ; [.2931.0020.0002] # MEETEI MAYEK LETTER JHAM ABD4 ; [.2932.0020.0002] # MEETEI MAYEK LETTER RAI ABD5 ; [.2933.0020.0002] # MEETEI MAYEK LETTER BA ABD6 ; [.2934.0020.0002] # MEETEI MAYEK LETTER JIL ABD7 ; [.2935.0020.0002] # MEETEI MAYEK LETTER DIL ABD8 ; [.2936.0020.0002] # MEETEI MAYEK LETTER GHOU ABD9 ; [.2937.0020.0002] # MEETEI MAYEK LETTER DHOU ABDA ; [.2938.0020.0002] # MEETEI MAYEK LETTER BHAM AAE0 ; [.2939.0020.0002] # MEETEI MAYEK LETTER E AAE1 ; [.293A.0020.0002] # MEETEI MAYEK LETTER O AAE2 ; [.293B.0020.0002] # MEETEI MAYEK LETTER CHA AAE3 ; [.293C.0020.0002] # MEETEI MAYEK LETTER NYA AAE4 ; [.293D.0020.0002] # MEETEI MAYEK LETTER TTA AAE5 ; [.293E.0020.0002] # MEETEI MAYEK LETTER TTHA AAE6 ; [.293F.0020.0002] # MEETEI MAYEK LETTER DDA AAE7 ; [.2940.0020.0002] # MEETEI MAYEK LETTER DDHA AAE8 ; [.2941.0020.0002] # MEETEI MAYEK LETTER NNA AAE9 ; [.2942.0020.0002] # MEETEI MAYEK LETTER SHA AAEA ; [.2943.0020.0002] # MEETEI MAYEK LETTER SSA ABE3 ; [.2944.0020.0002] # MEETEI MAYEK VOWEL SIGN ONAP ABE4 ; [.2945.0020.0002] # MEETEI MAYEK VOWEL SIGN INAP ABE5 ; [.2946.0020.0002] # MEETEI MAYEK VOWEL SIGN ANAP ABE6 ; [.2947.0020.0002] # MEETEI MAYEK VOWEL SIGN YENAP ABE7 ; [.2948.0020.0002] # MEETEI MAYEK VOWEL SIGN SOUNAP ABE8 ; [.2949.0020.0002] # MEETEI MAYEK VOWEL SIGN UNAP ABE9 ; [.294A.0020.0002] # MEETEI MAYEK VOWEL SIGN CHEINAP ABEA ; [.294B.0020.0002] # MEETEI MAYEK VOWEL SIGN NUNG AAEB ; [.294C.0020.0002] # MEETEI MAYEK VOWEL SIGN II AAEC ; [.294D.0020.0002] # MEETEI MAYEK VOWEL SIGN UU AAED ; [.294E.0020.0002] # MEETEI MAYEK VOWEL SIGN AAI AAEE ; [.294F.0020.0002] # MEETEI MAYEK VOWEL SIGN AU AAEF ; [.2950.0020.0002] # MEETEI MAYEK VOWEL SIGN AAU AAF5 ; [.2951.0020.0002] # MEETEI MAYEK VOWEL SIGN VISARGA ABDB ; [.2952.0020.0002] # MEETEI MAYEK LETTER KOK LONSUM ABDC ; [.2953.0020.0002] # MEETEI MAYEK LETTER LAI LONSUM ABDD ; [.2954.0020.0002] # MEETEI MAYEK LETTER MIT LONSUM ABDE ; [.2955.0020.0002] # MEETEI MAYEK LETTER PA LONSUM ABDF ; [.2956.0020.0002] # MEETEI MAYEK LETTER NA LONSUM ABE0 ; [.2957.0020.0002] # MEETEI MAYEK LETTER TIL LONSUM ABE1 ; [.2958.0020.0002] # MEETEI MAYEK LETTER NGOU LONSUM ABE2 ; [.2959.0020.0002] # MEETEI MAYEK LETTER I LONSUM ABED ; [.295A.0020.0002] # MEETEI MAYEK APUN IYEK AAF6 ; [.295B.0020.0002] # MEETEI MAYEK VIRAMA A800 ; [.295C.0020.0002] # SYLOTI NAGRI LETTER A A801 ; [.295D.0020.0002] # SYLOTI NAGRI LETTER I A802 ; [.295E.0020.0002] # SYLOTI NAGRI SIGN DVISVARA A803 ; [.295F.0020.0002] # SYLOTI NAGRI LETTER U A804 ; [.2960.0020.0002] # SYLOTI NAGRI LETTER E A805 ; [.2961.0020.0002] # SYLOTI NAGRI LETTER O A806 ; [.2962.0020.0002] # SYLOTI NAGRI SIGN HASANTA A807 ; [.2963.0020.0002] # SYLOTI NAGRI LETTER KO A808 ; [.2964.0020.0002] # SYLOTI NAGRI LETTER KHO A809 ; [.2965.0020.0002] # SYLOTI NAGRI LETTER GO A80A ; [.2966.0020.0002] # SYLOTI NAGRI LETTER GHO A80C ; [.2967.0020.0002] # SYLOTI NAGRI LETTER CO A80D ; [.2968.0020.0002] # SYLOTI NAGRI LETTER CHO A80E ; [.2969.0020.0002] # SYLOTI NAGRI LETTER JO A80F ; [.296A.0020.0002] # SYLOTI NAGRI LETTER JHO A810 ; [.296B.0020.0002] # SYLOTI NAGRI LETTER TTO A811 ; [.296C.0020.0002] # SYLOTI NAGRI LETTER TTHO A812 ; [.296D.0020.0002] # SYLOTI NAGRI LETTER DDO A813 ; [.296E.0020.0002] # SYLOTI NAGRI LETTER DDHO A814 ; [.296F.0020.0002] # SYLOTI NAGRI LETTER TO A815 ; [.2970.0020.0002] # SYLOTI NAGRI LETTER THO A816 ; [.2971.0020.0002] # SYLOTI NAGRI LETTER DO A817 ; [.2972.0020.0002] # SYLOTI NAGRI LETTER DHO A818 ; [.2973.0020.0002] # SYLOTI NAGRI LETTER NO A819 ; [.2974.0020.0002] # SYLOTI NAGRI LETTER PO A81A ; [.2975.0020.0002] # SYLOTI NAGRI LETTER PHO A81B ; [.2976.0020.0002] # SYLOTI NAGRI LETTER BO A81C ; [.2977.0020.0002] # SYLOTI NAGRI LETTER BHO A81D ; [.2978.0020.0002] # SYLOTI NAGRI LETTER MO A81E ; [.2979.0020.0002] # SYLOTI NAGRI LETTER RO A81F ; [.297A.0020.0002] # SYLOTI NAGRI LETTER LO A820 ; [.297B.0020.0002] # SYLOTI NAGRI LETTER RRO A821 ; [.297C.0020.0002] # SYLOTI NAGRI LETTER SO A822 ; [.297D.0020.0002] # SYLOTI NAGRI LETTER HO A823 ; [.297E.0020.0002] # SYLOTI NAGRI VOWEL SIGN A A824 ; [.297F.0020.0002] # SYLOTI NAGRI VOWEL SIGN I A825 ; [.2980.0020.0002] # SYLOTI NAGRI VOWEL SIGN U A826 ; [.2981.0020.0002] # SYLOTI NAGRI VOWEL SIGN E A827 ; [.2982.0020.0002] # SYLOTI NAGRI VOWEL SIGN OO A882 ; [.2983.0020.0002] # SAURASHTRA LETTER A A883 ; [.2984.0020.0002] # SAURASHTRA LETTER AA A884 ; [.2985.0020.0002] # SAURASHTRA LETTER I A885 ; [.2986.0020.0002] # SAURASHTRA LETTER II A886 ; [.2987.0020.0002] # SAURASHTRA LETTER U A887 ; [.2988.0020.0002] # SAURASHTRA LETTER UU A888 ; [.2989.0020.0002] # SAURASHTRA LETTER VOCALIC R A889 ; [.298A.0020.0002] # SAURASHTRA LETTER VOCALIC RR A88A ; [.298B.0020.0002] # SAURASHTRA LETTER VOCALIC L A88B ; [.298C.0020.0002] # SAURASHTRA LETTER VOCALIC LL A88C ; [.298D.0020.0002] # SAURASHTRA LETTER E A88D ; [.298E.0020.0002] # SAURASHTRA LETTER EE A88E ; [.298F.0020.0002] # SAURASHTRA LETTER AI A88F ; [.2990.0020.0002] # SAURASHTRA LETTER O A890 ; [.2991.0020.0002] # SAURASHTRA LETTER OO A891 ; [.2992.0020.0002] # SAURASHTRA LETTER AU A892 ; [.2993.0020.0002] # SAURASHTRA LETTER KA A893 ; [.2994.0020.0002] # SAURASHTRA LETTER KHA A894 ; [.2995.0020.0002] # SAURASHTRA LETTER GA A895 ; [.2996.0020.0002] # SAURASHTRA LETTER GHA A896 ; [.2997.0020.0002] # SAURASHTRA LETTER NGA A897 ; [.2998.0020.0002] # SAURASHTRA LETTER CA A898 ; [.2999.0020.0002] # SAURASHTRA LETTER CHA A899 ; [.299A.0020.0002] # SAURASHTRA LETTER JA A89A ; [.299B.0020.0002] # SAURASHTRA LETTER JHA A89B ; [.299C.0020.0002] # SAURASHTRA LETTER NYA A89C ; [.299D.0020.0002] # SAURASHTRA LETTER TTA A89D ; [.299E.0020.0002] # SAURASHTRA LETTER TTHA A89E ; [.299F.0020.0002] # SAURASHTRA LETTER DDA A89F ; [.29A0.0020.0002] # SAURASHTRA LETTER DDHA A8A0 ; [.29A1.0020.0002] # SAURASHTRA LETTER NNA A8A1 ; [.29A2.0020.0002] # SAURASHTRA LETTER TA A8A2 ; [.29A3.0020.0002] # SAURASHTRA LETTER THA A8A3 ; [.29A4.0020.0002] # SAURASHTRA LETTER DA A8A4 ; [.29A5.0020.0002] # SAURASHTRA LETTER DHA A8A5 ; [.29A6.0020.0002] # SAURASHTRA LETTER NA A8A6 ; [.29A7.0020.0002] # SAURASHTRA LETTER PA A8A7 ; [.29A8.0020.0002] # SAURASHTRA LETTER PHA A8A8 ; [.29A9.0020.0002] # SAURASHTRA LETTER BA A8A9 ; [.29AA.0020.0002] # SAURASHTRA LETTER BHA A8AA ; [.29AB.0020.0002] # SAURASHTRA LETTER MA A8AB ; [.29AC.0020.0002] # SAURASHTRA LETTER YA A8AC ; [.29AD.0020.0002] # SAURASHTRA LETTER RA A8AD ; [.29AE.0020.0002] # SAURASHTRA LETTER LA A8AE ; [.29AF.0020.0002] # SAURASHTRA LETTER VA A8AF ; [.29B0.0020.0002] # SAURASHTRA LETTER SHA A8B0 ; [.29B1.0020.0002] # SAURASHTRA LETTER SSA A8B1 ; [.29B2.0020.0002] # SAURASHTRA LETTER SA A8B2 ; [.29B3.0020.0002] # SAURASHTRA LETTER HA A8B3 ; [.29B4.0020.0002] # SAURASHTRA LETTER LLA A8B4 ; [.29B5.0020.0002] # SAURASHTRA CONSONANT SIGN HAARU A8B5 ; [.29B6.0020.0002] # SAURASHTRA VOWEL SIGN AA A8B6 ; [.29B7.0020.0002] # SAURASHTRA VOWEL SIGN I A8B7 ; [.29B8.0020.0002] # SAURASHTRA VOWEL SIGN II A8B8 ; [.29B9.0020.0002] # SAURASHTRA VOWEL SIGN U A8B9 ; [.29BA.0020.0002] # SAURASHTRA VOWEL SIGN UU A8BA ; [.29BB.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC R A8BB ; [.29BC.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC RR A8BC ; [.29BD.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC L A8BD ; [.29BE.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC LL A8BE ; [.29BF.0020.0002] # SAURASHTRA VOWEL SIGN E A8BF ; [.29C0.0020.0002] # SAURASHTRA VOWEL SIGN EE A8C0 ; [.29C1.0020.0002] # SAURASHTRA VOWEL SIGN AI A8C1 ; [.29C2.0020.0002] # SAURASHTRA VOWEL SIGN O A8C2 ; [.29C3.0020.0002] # SAURASHTRA VOWEL SIGN OO A8C3 ; [.29C4.0020.0002] # SAURASHTRA VOWEL SIGN AU A8C4 ; [.29C5.0020.0002] # SAURASHTRA SIGN VIRAMA 11083 ; [.29C6.0020.0002] # KAITHI LETTER A 11084 ; [.29C7.0020.0002] # KAITHI LETTER AA 11085 ; [.29C8.0020.0002] # KAITHI LETTER I 11086 ; [.29C9.0020.0002] # KAITHI LETTER II 11087 ; [.29CA.0020.0002] # KAITHI LETTER U 11088 ; [.29CB.0020.0002] # KAITHI LETTER UU 11089 ; [.29CC.0020.0002] # KAITHI LETTER E 1108A ; [.29CD.0020.0002] # KAITHI LETTER AI 1108B ; [.29CE.0020.0002] # KAITHI LETTER O 1108C ; [.29CF.0020.0002] # KAITHI LETTER AU 1108D ; [.29D0.0020.0002] # KAITHI LETTER KA 1108E ; [.29D1.0020.0002] # KAITHI LETTER KHA 1108F ; [.29D2.0020.0002] # KAITHI LETTER GA 11090 ; [.29D3.0020.0002] # KAITHI LETTER GHA 11091 ; [.29D4.0020.0002] # KAITHI LETTER NGA 11092 ; [.29D5.0020.0002] # KAITHI LETTER CA 11093 ; [.29D6.0020.0002] # KAITHI LETTER CHA 11094 ; [.29D7.0020.0002] # KAITHI LETTER JA 11095 ; [.29D8.0020.0002] # KAITHI LETTER JHA 11096 ; [.29D9.0020.0002] # KAITHI LETTER NYA 11097 ; [.29DA.0020.0002] # KAITHI LETTER TTA 11098 ; [.29DB.0020.0002] # KAITHI LETTER TTHA 11099 ; [.29DC.0020.0002] # KAITHI LETTER DDA 1109A ; [.29DC.0020.0002][.0000.00C2.0002] # KAITHI LETTER DDDHA 1109B ; [.29DD.0020.0002] # KAITHI LETTER DDHA 1109C ; [.29DD.0020.0002][.0000.00C2.0002] # KAITHI LETTER RHA 1109D ; [.29DE.0020.0002] # KAITHI LETTER NNA 1109E ; [.29DF.0020.0002] # KAITHI LETTER TA 1109F ; [.29E0.0020.0002] # KAITHI LETTER THA 110A0 ; [.29E1.0020.0002] # KAITHI LETTER DA 110A1 ; [.29E2.0020.0002] # KAITHI LETTER DHA 110A2 ; [.29E3.0020.0002] # KAITHI LETTER NA 110A3 ; [.29E4.0020.0002] # KAITHI LETTER PA 110A4 ; [.29E5.0020.0002] # KAITHI LETTER PHA 110A5 ; [.29E6.0020.0002] # KAITHI LETTER BA 110AB ; [.29E6.0020.0002][.0000.00C2.0002] # KAITHI LETTER VA 110A6 ; [.29E7.0020.0002] # KAITHI LETTER BHA 110A7 ; [.29E8.0020.0002] # KAITHI LETTER MA 110A8 ; [.29E9.0020.0002] # KAITHI LETTER YA 110A9 ; [.29EA.0020.0002] # KAITHI LETTER RA 110AA ; [.29EB.0020.0002] # KAITHI LETTER LA 110AC ; [.29EC.0020.0002] # KAITHI LETTER SHA 110AD ; [.29ED.0020.0002] # KAITHI LETTER SSA 110AE ; [.29EE.0020.0002] # KAITHI LETTER SA 110AF ; [.29EF.0020.0002] # KAITHI LETTER HA 110B0 ; [.29F0.0020.0002] # KAITHI VOWEL SIGN AA 110B1 ; [.29F1.0020.0002] # KAITHI VOWEL SIGN I 110B2 ; [.29F2.0020.0002] # KAITHI VOWEL SIGN II 110B3 ; [.29F3.0020.0002] # KAITHI VOWEL SIGN U 110B4 ; [.29F4.0020.0002] # KAITHI VOWEL SIGN UU 110B5 ; [.29F5.0020.0002] # KAITHI VOWEL SIGN E 110B6 ; [.29F6.0020.0002] # KAITHI VOWEL SIGN AI 110B7 ; [.29F7.0020.0002] # KAITHI VOWEL SIGN O 110B8 ; [.29F8.0020.0002] # KAITHI VOWEL SIGN AU 110B9 ; [.29F9.0020.0002] # KAITHI SIGN VIRAMA 11150 ; [.29FA.0020.0002] # MAHAJANI LETTER A 11151 ; [.29FB.0020.0002] # MAHAJANI LETTER I 11152 ; [.29FC.0020.0002] # MAHAJANI LETTER U 11153 ; [.29FD.0020.0002] # MAHAJANI LETTER E 11154 ; [.29FE.0020.0002] # MAHAJANI LETTER O 11155 ; [.29FF.0020.0002] # MAHAJANI LETTER KA 11156 ; [.2A00.0020.0002] # MAHAJANI LETTER KHA 11157 ; [.2A01.0020.0002] # MAHAJANI LETTER GA 11158 ; [.2A02.0020.0002] # MAHAJANI LETTER GHA 11159 ; [.2A03.0020.0002] # MAHAJANI LETTER CA 1115A ; [.2A04.0020.0002] # MAHAJANI LETTER CHA 1115B ; [.2A05.0020.0002] # MAHAJANI LETTER JA 1115C ; [.2A06.0020.0002] # MAHAJANI LETTER JHA 1115D ; [.2A07.0020.0002] # MAHAJANI LETTER NYA 1115E ; [.2A08.0020.0002] # MAHAJANI LETTER TTA 1115F ; [.2A09.0020.0002] # MAHAJANI LETTER TTHA 11160 ; [.2A0A.0020.0002] # MAHAJANI LETTER DDA 11161 ; [.2A0B.0020.0002] # MAHAJANI LETTER DDHA 11162 ; [.2A0C.0020.0002] # MAHAJANI LETTER NNA 11163 ; [.2A0D.0020.0002] # MAHAJANI LETTER TA 11164 ; [.2A0E.0020.0002] # MAHAJANI LETTER THA 11165 ; [.2A0F.0020.0002] # MAHAJANI LETTER DA 11166 ; [.2A10.0020.0002] # MAHAJANI LETTER DHA 11167 ; [.2A11.0020.0002] # MAHAJANI LETTER NA 11168 ; [.2A12.0020.0002] # MAHAJANI LETTER PA 11169 ; [.2A13.0020.0002] # MAHAJANI LETTER PHA 1116A ; [.2A14.0020.0002] # MAHAJANI LETTER BA 1116B ; [.2A15.0020.0002] # MAHAJANI LETTER BHA 1116C ; [.2A16.0020.0002] # MAHAJANI LETTER MA 1116D ; [.2A17.0020.0002] # MAHAJANI LETTER RA 1116E ; [.2A18.0020.0002] # MAHAJANI LETTER LA 1116F ; [.2A19.0020.0002] # MAHAJANI LETTER VA 11176 ; [.2A1A.0020.0002] # MAHAJANI LIGATURE SHRI 11170 ; [.2A1B.0020.0002] # MAHAJANI LETTER SA 11171 ; [.2A1C.0020.0002] # MAHAJANI LETTER HA 11172 ; [.2A1D.0020.0002] # MAHAJANI LETTER RRA 111C4 ; [.2A1E.0020.0002] # SHARADA OM 111DA ; [.2A1F.0020.0002] # SHARADA EKAM 11183 ; [.2A20.0020.0002] # SHARADA LETTER A 11184 ; [.2A21.0020.0002] # SHARADA LETTER AA 11185 ; [.2A22.0020.0002] # SHARADA LETTER I 11186 ; [.2A23.0020.0002] # SHARADA LETTER II 11187 ; [.2A24.0020.0002] # SHARADA LETTER U 11188 ; [.2A25.0020.0002] # SHARADA LETTER UU 11189 ; [.2A26.0020.0002] # SHARADA LETTER VOCALIC R 1118A ; [.2A27.0020.0002] # SHARADA LETTER VOCALIC RR 1118B ; [.2A28.0020.0002] # SHARADA LETTER VOCALIC L 1118C ; [.2A29.0020.0002] # SHARADA LETTER VOCALIC LL 1118D ; [.2A2A.0020.0002] # SHARADA LETTER E 1118E ; [.2A2B.0020.0002] # SHARADA LETTER AI 1118F ; [.2A2C.0020.0002] # SHARADA LETTER O 11190 ; [.2A2D.0020.0002] # SHARADA LETTER AU 11191 ; [.2A2E.0020.0002] # SHARADA LETTER KA 11192 ; [.2A2F.0020.0002] # SHARADA LETTER KHA 11193 ; [.2A30.0020.0002] # SHARADA LETTER GA 11194 ; [.2A31.0020.0002] # SHARADA LETTER GHA 11195 ; [.2A32.0020.0002] # SHARADA LETTER NGA 11196 ; [.2A33.0020.0002] # SHARADA LETTER CA 11197 ; [.2A34.0020.0002] # SHARADA LETTER CHA 11198 ; [.2A35.0020.0002] # SHARADA LETTER JA 11199 ; [.2A36.0020.0002] # SHARADA LETTER JHA 1119A ; [.2A37.0020.0002] # SHARADA LETTER NYA 1119B ; [.2A38.0020.0002] # SHARADA LETTER TTA 1119C ; [.2A39.0020.0002] # SHARADA LETTER TTHA 1119D ; [.2A3A.0020.0002] # SHARADA LETTER DDA 1119E ; [.2A3B.0020.0002] # SHARADA LETTER DDHA 1119F ; [.2A3C.0020.0002] # SHARADA LETTER NNA 111A0 ; [.2A3D.0020.0002] # SHARADA LETTER TA 111A1 ; [.2A3E.0020.0002] # SHARADA LETTER THA 111A2 ; [.2A3F.0020.0002] # SHARADA LETTER DA 111A3 ; [.2A40.0020.0002] # SHARADA LETTER DHA 111A4 ; [.2A41.0020.0002] # SHARADA LETTER NA 111A5 ; [.2A42.0020.0002] # SHARADA LETTER PA 111A6 ; [.2A43.0020.0002] # SHARADA LETTER PHA 111A7 ; [.2A44.0020.0002] # SHARADA LETTER BA 111A8 ; [.2A45.0020.0002] # SHARADA LETTER BHA 111A9 ; [.2A46.0020.0002] # SHARADA LETTER MA 111AA ; [.2A47.0020.0002] # SHARADA LETTER YA 111AB ; [.2A48.0020.0002] # SHARADA LETTER RA 111AC ; [.2A49.0020.0002] # SHARADA LETTER LA 111AD ; [.2A4A.0020.0002] # SHARADA LETTER LLA 111AE ; [.2A4B.0020.0002] # SHARADA LETTER VA 111AF ; [.2A4C.0020.0002] # SHARADA LETTER SHA 111B0 ; [.2A4D.0020.0002] # SHARADA LETTER SSA 111B1 ; [.2A4E.0020.0002] # SHARADA LETTER SA 111B2 ; [.2A4F.0020.0002] # SHARADA LETTER HA 111C1 ; [.2A50.0020.0002] # SHARADA SIGN AVAGRAHA 111C2 ; [.2A51.0020.0002] # SHARADA SIGN JIHVAMULIYA 111C3 ; [.2A52.0020.0002] # SHARADA SIGN UPADHMANIYA 111DC ; [.2A53.0020.0002] # SHARADA HEADSTROKE 111B3 ; [.2A54.0020.0002] # SHARADA VOWEL SIGN AA 111B4 ; [.2A55.0020.0002] # SHARADA VOWEL SIGN I 111B5 ; [.2A56.0020.0002] # SHARADA VOWEL SIGN II 111B6 ; [.2A57.0020.0002] # SHARADA VOWEL SIGN U 111B7 ; [.2A58.0020.0002] # SHARADA VOWEL SIGN UU 111B8 ; [.2A59.0020.0002] # SHARADA VOWEL SIGN VOCALIC R 111B9 ; [.2A5A.0020.0002] # SHARADA VOWEL SIGN VOCALIC RR 111BA ; [.2A5B.0020.0002] # SHARADA VOWEL SIGN VOCALIC L 111BB ; [.2A5C.0020.0002] # SHARADA VOWEL SIGN VOCALIC LL 111BC ; [.2A5D.0020.0002] # SHARADA VOWEL SIGN E 111BD ; [.2A5E.0020.0002] # SHARADA VOWEL SIGN AI 111BE ; [.2A5F.0020.0002] # SHARADA VOWEL SIGN O 111BF ; [.2A60.0020.0002] # SHARADA VOWEL SIGN AU 111C0 ; [.2A61.0020.0002] # SHARADA SIGN VIRAMA 11200 ; [.2A62.0020.0002] # KHOJKI LETTER A 11201 ; [.2A63.0020.0002] # KHOJKI LETTER AA 11202 ; [.2A64.0020.0002] # KHOJKI LETTER I 11203 ; [.2A65.0020.0002] # KHOJKI LETTER U 11204 ; [.2A66.0020.0002] # KHOJKI LETTER E 11205 ; [.2A67.0020.0002] # KHOJKI LETTER AI 11206 ; [.2A68.0020.0002] # KHOJKI LETTER O 11207 ; [.2A69.0020.0002] # KHOJKI LETTER AU 11208 ; [.2A6A.0020.0002] # KHOJKI LETTER KA 11209 ; [.2A6B.0020.0002] # KHOJKI LETTER KHA 1120A ; [.2A6C.0020.0002] # KHOJKI LETTER GA 1120B ; [.2A6D.0020.0002] # KHOJKI LETTER GGA 1120C ; [.2A6E.0020.0002] # KHOJKI LETTER GHA 1120D ; [.2A6F.0020.0002] # KHOJKI LETTER NGA 1120E ; [.2A70.0020.0002] # KHOJKI LETTER CA 1120F ; [.2A71.0020.0002] # KHOJKI LETTER CHA 11210 ; [.2A72.0020.0002] # KHOJKI LETTER JA 11211 ; [.2A73.0020.0002] # KHOJKI LETTER JJA 11213 ; [.2A74.0020.0002] # KHOJKI LETTER NYA 11214 ; [.2A75.0020.0002] # KHOJKI LETTER TTA 11215 ; [.2A76.0020.0002] # KHOJKI LETTER TTHA 11216 ; [.2A77.0020.0002] # KHOJKI LETTER DDA 11217 ; [.2A78.0020.0002] # KHOJKI LETTER DDHA 11218 ; [.2A79.0020.0002] # KHOJKI LETTER NNA 11219 ; [.2A7A.0020.0002] # KHOJKI LETTER TA 1121A ; [.2A7B.0020.0002] # KHOJKI LETTER THA 1121B ; [.2A7C.0020.0002] # KHOJKI LETTER DA 1121C ; [.2A7D.0020.0002] # KHOJKI LETTER DDDA 1121D ; [.2A7E.0020.0002] # KHOJKI LETTER DHA 1121E ; [.2A7F.0020.0002] # KHOJKI LETTER NA 1121F ; [.2A80.0020.0002] # KHOJKI LETTER PA 11220 ; [.2A81.0020.0002] # KHOJKI LETTER PHA 11221 ; [.2A82.0020.0002] # KHOJKI LETTER BA 11222 ; [.2A83.0020.0002] # KHOJKI LETTER BBA 11223 ; [.2A84.0020.0002] # KHOJKI LETTER BHA 11224 ; [.2A85.0020.0002] # KHOJKI LETTER MA 11225 ; [.2A86.0020.0002] # KHOJKI LETTER YA 11226 ; [.2A87.0020.0002] # KHOJKI LETTER RA 11227 ; [.2A88.0020.0002] # KHOJKI LETTER LA 11228 ; [.2A89.0020.0002] # KHOJKI LETTER VA 11229 ; [.2A8A.0020.0002] # KHOJKI LETTER SA 1122A ; [.2A8B.0020.0002] # KHOJKI LETTER HA 1122B ; [.2A8C.0020.0002] # KHOJKI LETTER LLA 1122C ; [.2A8D.0020.0002] # KHOJKI VOWEL SIGN AA 1122D ; [.2A8E.0020.0002] # KHOJKI VOWEL SIGN I 1122E ; [.2A8F.0020.0002] # KHOJKI VOWEL SIGN II 1122F ; [.2A90.0020.0002] # KHOJKI VOWEL SIGN U 11230 ; [.2A91.0020.0002] # KHOJKI VOWEL SIGN E 11231 ; [.2A92.0020.0002] # KHOJKI VOWEL SIGN AI 11232 ; [.2A93.0020.0002] # KHOJKI VOWEL SIGN O 11233 ; [.2A94.0020.0002] # KHOJKI VOWEL SIGN AU 11235 ; [.2A95.0020.0002] # KHOJKI SIGN VIRAMA 112B0 ; [.2A96.0020.0002] # KHUDAWADI LETTER A 112B1 ; [.2A97.0020.0002] # KHUDAWADI LETTER AA 112B2 ; [.2A98.0020.0002] # KHUDAWADI LETTER I 112B3 ; [.2A99.0020.0002] # KHUDAWADI LETTER II 112B4 ; [.2A9A.0020.0002] # KHUDAWADI LETTER U 112B5 ; [.2A9B.0020.0002] # KHUDAWADI LETTER UU 112B6 ; [.2A9C.0020.0002] # KHUDAWADI LETTER E 112B7 ; [.2A9D.0020.0002] # KHUDAWADI LETTER AI 112B8 ; [.2A9E.0020.0002] # KHUDAWADI LETTER O 112B9 ; [.2A9F.0020.0002] # KHUDAWADI LETTER AU 112BA ; [.2AA0.0020.0002] # KHUDAWADI LETTER KA 112BB ; [.2AA1.0020.0002] # KHUDAWADI LETTER KHA 112BC ; [.2AA2.0020.0002] # KHUDAWADI LETTER GA 112BD ; [.2AA3.0020.0002] # KHUDAWADI LETTER GGA 112BE ; [.2AA4.0020.0002] # KHUDAWADI LETTER GHA 112BF ; [.2AA5.0020.0002] # KHUDAWADI LETTER NGA 112C0 ; [.2AA6.0020.0002] # KHUDAWADI LETTER CA 112C1 ; [.2AA7.0020.0002] # KHUDAWADI LETTER CHA 112C2 ; [.2AA8.0020.0002] # KHUDAWADI LETTER JA 112C3 ; [.2AA9.0020.0002] # KHUDAWADI LETTER JJA 112C4 ; [.2AAA.0020.0002] # KHUDAWADI LETTER JHA 112C5 ; [.2AAB.0020.0002] # KHUDAWADI LETTER NYA 112C6 ; [.2AAC.0020.0002] # KHUDAWADI LETTER TTA 112C7 ; [.2AAD.0020.0002] # KHUDAWADI LETTER TTHA 112C8 ; [.2AAE.0020.0002] # KHUDAWADI LETTER DDA 112C9 ; [.2AAF.0020.0002] # KHUDAWADI LETTER DDDA 112CA ; [.2AB0.0020.0002] # KHUDAWADI LETTER RRA 112CB ; [.2AB1.0020.0002] # KHUDAWADI LETTER DDHA 112CC ; [.2AB2.0020.0002] # KHUDAWADI LETTER NNA 112CD ; [.2AB3.0020.0002] # KHUDAWADI LETTER TA 112CE ; [.2AB4.0020.0002] # KHUDAWADI LETTER THA 112CF ; [.2AB5.0020.0002] # KHUDAWADI LETTER DA 112D0 ; [.2AB6.0020.0002] # KHUDAWADI LETTER DHA 112D1 ; [.2AB7.0020.0002] # KHUDAWADI LETTER NA 112D2 ; [.2AB8.0020.0002] # KHUDAWADI LETTER PA 112D3 ; [.2AB9.0020.0002] # KHUDAWADI LETTER PHA 112D4 ; [.2ABA.0020.0002] # KHUDAWADI LETTER BA 112D5 ; [.2ABB.0020.0002] # KHUDAWADI LETTER BBA 112D6 ; [.2ABC.0020.0002] # KHUDAWADI LETTER BHA 112D7 ; [.2ABD.0020.0002] # KHUDAWADI LETTER MA 112D8 ; [.2ABE.0020.0002] # KHUDAWADI LETTER YA 112D9 ; [.2ABF.0020.0002] # KHUDAWADI LETTER RA 112DA ; [.2AC0.0020.0002] # KHUDAWADI LETTER LA 112DB ; [.2AC1.0020.0002] # KHUDAWADI LETTER VA 112DC ; [.2AC2.0020.0002] # KHUDAWADI LETTER SHA 112DD ; [.2AC3.0020.0002] # KHUDAWADI LETTER SA 112DE ; [.2AC4.0020.0002] # KHUDAWADI LETTER HA 112E0 ; [.2AC5.0020.0002] # KHUDAWADI VOWEL SIGN AA 112E1 ; [.2AC6.0020.0002] # KHUDAWADI VOWEL SIGN I 112E2 ; [.2AC7.0020.0002] # KHUDAWADI VOWEL SIGN II 112E3 ; [.2AC8.0020.0002] # KHUDAWADI VOWEL SIGN U 112E4 ; [.2AC9.0020.0002] # KHUDAWADI VOWEL SIGN UU 112E5 ; [.2ACA.0020.0002] # KHUDAWADI VOWEL SIGN E 112E6 ; [.2ACB.0020.0002] # KHUDAWADI VOWEL SIGN AI 112E7 ; [.2ACC.0020.0002] # KHUDAWADI VOWEL SIGN O 112E8 ; [.2ACD.0020.0002] # KHUDAWADI VOWEL SIGN AU 112EA ; [.2ACE.0020.0002] # KHUDAWADI SIGN VIRAMA 11280 ; [.2ACF.0020.0002] # MULTANI LETTER A 11281 ; [.2AD0.0020.0002] # MULTANI LETTER I 11282 ; [.2AD1.0020.0002] # MULTANI LETTER U 11283 ; [.2AD2.0020.0002] # MULTANI LETTER E 112A5 ; [.2AD3.0020.0002] # MULTANI LETTER SA 112A6 ; [.2AD4.0020.0002] # MULTANI LETTER HA 11284 ; [.2AD5.0020.0002] # MULTANI LETTER KA 11285 ; [.2AD6.0020.0002] # MULTANI LETTER KHA 11286 ; [.2AD7.0020.0002] # MULTANI LETTER GA 11288 ; [.2AD8.0020.0002] # MULTANI LETTER GHA 1128A ; [.2AD9.0020.0002] # MULTANI LETTER CA 1128B ; [.2ADA.0020.0002] # MULTANI LETTER CHA 1128C ; [.2ADB.0020.0002] # MULTANI LETTER JA 1128D ; [.2ADC.0020.0002] # MULTANI LETTER JJA 1128F ; [.2ADD.0020.0002] # MULTANI LETTER NYA 11290 ; [.2ADE.0020.0002] # MULTANI LETTER TTA 11291 ; [.2ADF.0020.0002] # MULTANI LETTER TTHA 11292 ; [.2AE0.0020.0002] # MULTANI LETTER DDA 11293 ; [.2AE1.0020.0002] # MULTANI LETTER DDDA 11294 ; [.2AE2.0020.0002] # MULTANI LETTER DDHA 11295 ; [.2AE3.0020.0002] # MULTANI LETTER NNA 11296 ; [.2AE4.0020.0002] # MULTANI LETTER TA 11297 ; [.2AE5.0020.0002] # MULTANI LETTER THA 11298 ; [.2AE6.0020.0002] # MULTANI LETTER DA 11299 ; [.2AE7.0020.0002] # MULTANI LETTER DHA 1129A ; [.2AE8.0020.0002] # MULTANI LETTER NA 1129B ; [.2AE9.0020.0002] # MULTANI LETTER PA 1129C ; [.2AEA.0020.0002] # MULTANI LETTER PHA 1129D ; [.2AEB.0020.0002] # MULTANI LETTER BA 1129F ; [.2AEC.0020.0002] # MULTANI LETTER BHA 112A0 ; [.2AED.0020.0002] # MULTANI LETTER MA 112A1 ; [.2AEE.0020.0002] # MULTANI LETTER YA 112A2 ; [.2AEF.0020.0002] # MULTANI LETTER RA 112A3 ; [.2AF0.0020.0002] # MULTANI LETTER LA 112A4 ; [.2AF1.0020.0002] # MULTANI LETTER VA 112A7 ; [.2AF2.0020.0002] # MULTANI LETTER RRA 112A8 ; [.2AF3.0020.0002] # MULTANI LETTER RHA 11350 ; [.2AF4.0020.0002] # GRANTHA OM 11305 ; [.2AF5.0020.0002] # GRANTHA LETTER A 11306 ; [.2AF6.0020.0002] # GRANTHA LETTER AA 11307 ; [.2AF7.0020.0002] # GRANTHA LETTER I 11308 ; [.2AF8.0020.0002] # GRANTHA LETTER II 11309 ; [.2AF9.0020.0002] # GRANTHA LETTER U 1130A ; [.2AFA.0020.0002] # GRANTHA LETTER UU 1130B ; [.2AFB.0020.0002] # GRANTHA LETTER VOCALIC R 11360 ; [.2AFC.0020.0002] # GRANTHA LETTER VOCALIC RR 1130C ; [.2AFD.0020.0002] # GRANTHA LETTER VOCALIC L 11361 ; [.2AFE.0020.0002] # GRANTHA LETTER VOCALIC LL 1130F ; [.2AFF.0020.0002] # GRANTHA LETTER EE 11310 ; [.2B00.0020.0002] # GRANTHA LETTER AI 11313 ; [.2B01.0020.0002] # GRANTHA LETTER OO 11314 ; [.2B02.0020.0002] # GRANTHA LETTER AU 11315 ; [.2B03.0020.0002] # GRANTHA LETTER KA 11316 ; [.2B04.0020.0002] # GRANTHA LETTER KHA 11317 ; [.2B05.0020.0002] # GRANTHA LETTER GA 11318 ; [.2B06.0020.0002] # GRANTHA LETTER GHA 11319 ; [.2B07.0020.0002] # GRANTHA LETTER NGA 1131A ; [.2B08.0020.0002] # GRANTHA LETTER CA 1131B ; [.2B09.0020.0002] # GRANTHA LETTER CHA 1131C ; [.2B0A.0020.0002] # GRANTHA LETTER JA 1131D ; [.2B0B.0020.0002] # GRANTHA LETTER JHA 1131E ; [.2B0C.0020.0002] # GRANTHA LETTER NYA 1131F ; [.2B0D.0020.0002] # GRANTHA LETTER TTA 11320 ; [.2B0E.0020.0002] # GRANTHA LETTER TTHA 11321 ; [.2B0F.0020.0002] # GRANTHA LETTER DDA 11322 ; [.2B10.0020.0002] # GRANTHA LETTER DDHA 11323 ; [.2B11.0020.0002] # GRANTHA LETTER NNA 11324 ; [.2B12.0020.0002] # GRANTHA LETTER TA 11325 ; [.2B13.0020.0002] # GRANTHA LETTER THA 11326 ; [.2B14.0020.0002] # GRANTHA LETTER DA 11327 ; [.2B15.0020.0002] # GRANTHA LETTER DHA 11328 ; [.2B16.0020.0002] # GRANTHA LETTER NA 1132A ; [.2B17.0020.0002] # GRANTHA LETTER PA 1132B ; [.2B18.0020.0002] # GRANTHA LETTER PHA 1132C ; [.2B19.0020.0002] # GRANTHA LETTER BA 1132D ; [.2B1A.0020.0002] # GRANTHA LETTER BHA 1132E ; [.2B1B.0020.0002] # GRANTHA LETTER MA 1132F ; [.2B1C.0020.0002] # GRANTHA LETTER YA 11330 ; [.2B1D.0020.0002] # GRANTHA LETTER RA 11332 ; [.2B1E.0020.0002] # GRANTHA LETTER LA 11333 ; [.2B1F.0020.0002] # GRANTHA LETTER LLA 11335 ; [.2B20.0020.0002] # GRANTHA LETTER VA 11336 ; [.2B21.0020.0002] # GRANTHA LETTER SHA 11337 ; [.2B22.0020.0002] # GRANTHA LETTER SSA 11338 ; [.2B23.0020.0002] # GRANTHA LETTER SA 11339 ; [.2B24.0020.0002] # GRANTHA LETTER HA 1133D ; [.2B25.0020.0002] # GRANTHA SIGN AVAGRAHA 1135E ; [.2B26.0020.0002] # GRANTHA LETTER VEDIC ANUSVARA 1135F ; [.2B27.0020.0002] # GRANTHA LETTER VEDIC DOUBLE ANUSVARA 1133E ; [.2B28.0020.0002] # GRANTHA VOWEL SIGN AA 1133F ; [.2B29.0020.0002] # GRANTHA VOWEL SIGN I 11340 ; [.2B2A.0020.0002] # GRANTHA VOWEL SIGN II 11341 ; [.2B2B.0020.0002] # GRANTHA VOWEL SIGN U 11342 ; [.2B2C.0020.0002] # GRANTHA VOWEL SIGN UU 11343 ; [.2B2D.0020.0002] # GRANTHA VOWEL SIGN VOCALIC R 11344 ; [.2B2E.0020.0002] # GRANTHA VOWEL SIGN VOCALIC RR 11362 ; [.2B2F.0020.0002] # GRANTHA VOWEL SIGN VOCALIC L 11363 ; [.2B30.0020.0002] # GRANTHA VOWEL SIGN VOCALIC LL 11347 ; [.2B31.0020.0002] # GRANTHA VOWEL SIGN EE 11348 ; [.2B32.0020.0002] # GRANTHA VOWEL SIGN AI 1134B ; [.2B33.0020.0002] # GRANTHA VOWEL SIGN OO 11347 1133E ; [.2B33.0020.0002] # GRANTHA VOWEL SIGN OO 1134C ; [.2B34.0020.0002] # GRANTHA VOWEL SIGN AU 11347 11357 ; [.2B34.0020.0002] # GRANTHA VOWEL SIGN AU 1134D ; [.2B35.0020.0002] # GRANTHA SIGN VIRAMA 11357 ; [.2B36.0020.0002] # GRANTHA AU LENGTH MARK 1135D ; [.2B37.0020.0002] # GRANTHA SIGN PLUTA 11449 ; [.2B38.0020.0002] # NEWA OM 1144A ; [.2B39.0020.0002] # NEWA SIDDHI 11400 ; [.2B3A.0020.0002] # NEWA LETTER A 11401 ; [.2B3B.0020.0002] # NEWA LETTER AA 11402 ; [.2B3C.0020.0002] # NEWA LETTER I 11403 ; [.2B3D.0020.0002] # NEWA LETTER II 11404 ; [.2B3E.0020.0002] # NEWA LETTER U 11405 ; [.2B3F.0020.0002] # NEWA LETTER UU 11406 ; [.2B40.0020.0002] # NEWA LETTER VOCALIC R 11407 ; [.2B41.0020.0002] # NEWA LETTER VOCALIC RR 11408 ; [.2B42.0020.0002] # NEWA LETTER VOCALIC L 11409 ; [.2B43.0020.0002] # NEWA LETTER VOCALIC LL 1140A ; [.2B44.0020.0002] # NEWA LETTER E 1140B ; [.2B45.0020.0002] # NEWA LETTER AI 1140C ; [.2B46.0020.0002] # NEWA LETTER O 1140D ; [.2B47.0020.0002] # NEWA LETTER AU 1140E ; [.2B48.0020.0002] # NEWA LETTER KA 1140F ; [.2B49.0020.0002] # NEWA LETTER KHA 11410 ; [.2B4A.0020.0002] # NEWA LETTER GA 11411 ; [.2B4B.0020.0002] # NEWA LETTER GHA 11412 ; [.2B4C.0020.0002] # NEWA LETTER NGA 11413 ; [.2B4D.0020.0002] # NEWA LETTER NGHA 11414 ; [.2B4E.0020.0002] # NEWA LETTER CA 11415 ; [.2B4F.0020.0002] # NEWA LETTER CHA 11416 ; [.2B50.0020.0002] # NEWA LETTER JA 11417 ; [.2B51.0020.0002] # NEWA LETTER JHA 11418 ; [.2B52.0020.0002] # NEWA LETTER NYA 11419 ; [.2B53.0020.0002] # NEWA LETTER NYHA 1141A ; [.2B54.0020.0002] # NEWA LETTER TTA 1141B ; [.2B55.0020.0002] # NEWA LETTER TTHA 1141C ; [.2B56.0020.0002] # NEWA LETTER DDA 1141D ; [.2B57.0020.0002] # NEWA LETTER DDHA 1141E ; [.2B58.0020.0002] # NEWA LETTER NNA 1141F ; [.2B59.0020.0002] # NEWA LETTER TA 11420 ; [.2B5A.0020.0002] # NEWA LETTER THA 11421 ; [.2B5B.0020.0002] # NEWA LETTER DA 11422 ; [.2B5C.0020.0002] # NEWA LETTER DHA 11423 ; [.2B5D.0020.0002] # NEWA LETTER NA 11424 ; [.2B5E.0020.0002] # NEWA LETTER NHA 11425 ; [.2B5F.0020.0002] # NEWA LETTER PA 11426 ; [.2B60.0020.0002] # NEWA LETTER PHA 11427 ; [.2B61.0020.0002] # NEWA LETTER BA 11428 ; [.2B62.0020.0002] # NEWA LETTER BHA 11429 ; [.2B63.0020.0002] # NEWA LETTER MA 1142A ; [.2B64.0020.0002] # NEWA LETTER MHA 1142B ; [.2B65.0020.0002] # NEWA LETTER YA 1142C ; [.2B66.0020.0002] # NEWA LETTER RA 1142D ; [.2B67.0020.0002] # NEWA LETTER RHA 1142E ; [.2B68.0020.0002] # NEWA LETTER LA 1142F ; [.2B69.0020.0002] # NEWA LETTER LHA 11430 ; [.2B6A.0020.0002] # NEWA LETTER WA 11431 ; [.2B6B.0020.0002] # NEWA LETTER SHA 11432 ; [.2B6C.0020.0002] # NEWA LETTER SSA 11433 ; [.2B6D.0020.0002] # NEWA LETTER SA 11434 ; [.2B6E.0020.0002] # NEWA LETTER HA 11447 ; [.2B6F.0020.0002] # NEWA SIGN AVAGRAHA 11448 ; [.2B70.0020.0002] # NEWA SIGN FINAL ANUSVARA 11435 ; [.2B71.0020.0002] # NEWA VOWEL SIGN AA 11436 ; [.2B72.0020.0002] # NEWA VOWEL SIGN I 11437 ; [.2B73.0020.0002] # NEWA VOWEL SIGN II 11438 ; [.2B74.0020.0002] # NEWA VOWEL SIGN U 11439 ; [.2B75.0020.0002] # NEWA VOWEL SIGN UU 1143A ; [.2B76.0020.0002] # NEWA VOWEL SIGN VOCALIC R 1143B ; [.2B77.0020.0002] # NEWA VOWEL SIGN VOCALIC RR 1143C ; [.2B78.0020.0002] # NEWA VOWEL SIGN VOCALIC L 1143D ; [.2B79.0020.0002] # NEWA VOWEL SIGN VOCALIC LL 1143E ; [.2B7A.0020.0002] # NEWA VOWEL SIGN E 1143F ; [.2B7B.0020.0002] # NEWA VOWEL SIGN AI 11440 ; [.2B7C.0020.0002] # NEWA VOWEL SIGN O 11441 ; [.2B7D.0020.0002] # NEWA VOWEL SIGN AU 11442 ; [.2B7E.0020.0002] # NEWA SIGN VIRAMA 114C7 ; [.2B7F.0020.0002] # TIRHUTA OM 11480 ; [.2B80.0020.0002] # TIRHUTA ANJI 11481 ; [.2B81.0020.0002] # TIRHUTA LETTER A 11482 ; [.2B82.0020.0002] # TIRHUTA LETTER AA 11483 ; [.2B83.0020.0002] # TIRHUTA LETTER I 11484 ; [.2B84.0020.0002] # TIRHUTA LETTER II 11485 ; [.2B85.0020.0002] # TIRHUTA LETTER U 11486 ; [.2B86.0020.0002] # TIRHUTA LETTER UU 11487 ; [.2B87.0020.0002] # TIRHUTA LETTER VOCALIC R 11488 ; [.2B88.0020.0002] # TIRHUTA LETTER VOCALIC RR 11489 ; [.2B89.0020.0002] # TIRHUTA LETTER VOCALIC L 1148A ; [.2B8A.0020.0002] # TIRHUTA LETTER VOCALIC LL 1148B ; [.2B8B.0020.0002] # TIRHUTA LETTER E 1148C ; [.2B8C.0020.0002] # TIRHUTA LETTER AI 1148D ; [.2B8D.0020.0002] # TIRHUTA LETTER O 1148E ; [.2B8E.0020.0002] # TIRHUTA LETTER AU 1148F ; [.2B8F.0020.0002] # TIRHUTA LETTER KA 11490 ; [.2B90.0020.0002] # TIRHUTA LETTER KHA 11491 ; [.2B91.0020.0002] # TIRHUTA LETTER GA 11492 ; [.2B92.0020.0002] # TIRHUTA LETTER GHA 11493 ; [.2B93.0020.0002] # TIRHUTA LETTER NGA 11494 ; [.2B94.0020.0002] # TIRHUTA LETTER CA 11495 ; [.2B95.0020.0002] # TIRHUTA LETTER CHA 11496 ; [.2B96.0020.0002] # TIRHUTA LETTER JA 11497 ; [.2B97.0020.0002] # TIRHUTA LETTER JHA 11498 ; [.2B98.0020.0002] # TIRHUTA LETTER NYA 11499 ; [.2B99.0020.0002] # TIRHUTA LETTER TTA 1149A ; [.2B9A.0020.0002] # TIRHUTA LETTER TTHA 1149B ; [.2B9B.0020.0002] # TIRHUTA LETTER DDA 1149C ; [.2B9C.0020.0002] # TIRHUTA LETTER DDHA 1149D ; [.2B9D.0020.0002] # TIRHUTA LETTER NNA 1149E ; [.2B9E.0020.0002] # TIRHUTA LETTER TA 1149F ; [.2B9F.0020.0002] # TIRHUTA LETTER THA 114A0 ; [.2BA0.0020.0002] # TIRHUTA LETTER DA 114A1 ; [.2BA1.0020.0002] # TIRHUTA LETTER DHA 114A2 ; [.2BA2.0020.0002] # TIRHUTA LETTER NA 114A3 ; [.2BA3.0020.0002] # TIRHUTA LETTER PA 114A4 ; [.2BA4.0020.0002] # TIRHUTA LETTER PHA 114A5 ; [.2BA5.0020.0002] # TIRHUTA LETTER BA 114A6 ; [.2BA6.0020.0002] # TIRHUTA LETTER BHA 114A7 ; [.2BA7.0020.0002] # TIRHUTA LETTER MA 114A8 ; [.2BA8.0020.0002] # TIRHUTA LETTER YA 114A9 ; [.2BA9.0020.0002] # TIRHUTA LETTER RA 114AA ; [.2BAA.0020.0002] # TIRHUTA LETTER LA 114AB ; [.2BAB.0020.0002] # TIRHUTA LETTER VA 114AC ; [.2BAC.0020.0002] # TIRHUTA LETTER SHA 114AD ; [.2BAD.0020.0002] # TIRHUTA LETTER SSA 114AE ; [.2BAE.0020.0002] # TIRHUTA LETTER SA 114AF ; [.2BAF.0020.0002] # TIRHUTA LETTER HA 114C4 ; [.2BB0.0020.0002] # TIRHUTA SIGN AVAGRAHA 114C5 ; [.2BB1.0020.0002] # TIRHUTA GVANG 114B0 ; [.2BB2.0020.0002] # TIRHUTA VOWEL SIGN AA 114B1 ; [.2BB3.0020.0002] # TIRHUTA VOWEL SIGN I 114B2 ; [.2BB4.0020.0002] # TIRHUTA VOWEL SIGN II 114B3 ; [.2BB5.0020.0002] # TIRHUTA VOWEL SIGN U 114B4 ; [.2BB6.0020.0002] # TIRHUTA VOWEL SIGN UU 114B5 ; [.2BB7.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC R 114B6 ; [.2BB8.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC RR 114B7 ; [.2BB9.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC L 114B8 ; [.2BBA.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC LL 114B9 ; [.2BBB.0020.0002] # TIRHUTA VOWEL SIGN E 114BA ; [.2BBC.0020.0002] # TIRHUTA VOWEL SIGN SHORT E 114BB ; [.2BBD.0020.0002] # TIRHUTA VOWEL SIGN AI 114B9 114BA ; [.2BBD.0020.0002] # TIRHUTA VOWEL SIGN AI 114BC ; [.2BBE.0020.0002] # TIRHUTA VOWEL SIGN O 114B9 114B0 ; [.2BBE.0020.0002] # TIRHUTA VOWEL SIGN O 114BD ; [.2BBF.0020.0002] # TIRHUTA VOWEL SIGN SHORT O 114BE ; [.2BC0.0020.0002] # TIRHUTA VOWEL SIGN AU 114B9 114BD ; [.2BC0.0020.0002] # TIRHUTA VOWEL SIGN AU 114C2 ; [.2BC1.0020.0002] # TIRHUTA SIGN VIRAMA 11580 ; [.2BC2.0020.0002] # SIDDHAM LETTER A 11581 ; [.2BC3.0020.0002] # SIDDHAM LETTER AA 11582 ; [.2BC4.0020.0002] # SIDDHAM LETTER I 115D8 ; [.2BC4.0020.0004][.0000.0110.0004] # SIDDHAM LETTER THREE-CIRCLE ALTERNATE I 115D9 ; [.2BC4.0020.0004][.0000.0111.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE I 11583 ; [.2BC5.0020.0002] # SIDDHAM LETTER II 115DA ; [.2BC5.0020.0004][.0000.0110.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE II 11584 ; [.2BC6.0020.0002] # SIDDHAM LETTER U 115DB ; [.2BC6.0020.0004][.0000.0110.0004] # SIDDHAM LETTER ALTERNATE U 11585 ; [.2BC7.0020.0002] # SIDDHAM LETTER UU 11586 ; [.2BC8.0020.0002] # SIDDHAM LETTER VOCALIC R 11587 ; [.2BC9.0020.0002] # SIDDHAM LETTER VOCALIC RR 11588 ; [.2BCA.0020.0002] # SIDDHAM LETTER VOCALIC L 11589 ; [.2BCB.0020.0002] # SIDDHAM LETTER VOCALIC LL 1158A ; [.2BCC.0020.0002] # SIDDHAM LETTER E 1158B ; [.2BCD.0020.0002] # SIDDHAM LETTER AI 1158C ; [.2BCE.0020.0002] # SIDDHAM LETTER O 1158D ; [.2BCF.0020.0002] # SIDDHAM LETTER AU 1158E ; [.2BD0.0020.0002] # SIDDHAM LETTER KA 1158F ; [.2BD1.0020.0002] # SIDDHAM LETTER KHA 11590 ; [.2BD2.0020.0002] # SIDDHAM LETTER GA 11591 ; [.2BD3.0020.0002] # SIDDHAM LETTER GHA 11592 ; [.2BD4.0020.0002] # SIDDHAM LETTER NGA 11593 ; [.2BD5.0020.0002] # SIDDHAM LETTER CA 11594 ; [.2BD6.0020.0002] # SIDDHAM LETTER CHA 11595 ; [.2BD7.0020.0002] # SIDDHAM LETTER JA 11596 ; [.2BD8.0020.0002] # SIDDHAM LETTER JHA 11597 ; [.2BD9.0020.0002] # SIDDHAM LETTER NYA 11598 ; [.2BDA.0020.0002] # SIDDHAM LETTER TTA 11599 ; [.2BDB.0020.0002] # SIDDHAM LETTER TTHA 1159A ; [.2BDC.0020.0002] # SIDDHAM LETTER DDA 1159B ; [.2BDD.0020.0002] # SIDDHAM LETTER DDHA 1159C ; [.2BDE.0020.0002] # SIDDHAM LETTER NNA 1159D ; [.2BDF.0020.0002] # SIDDHAM LETTER TA 1159E ; [.2BE0.0020.0002] # SIDDHAM LETTER THA 1159F ; [.2BE1.0020.0002] # SIDDHAM LETTER DA 115A0 ; [.2BE2.0020.0002] # SIDDHAM LETTER DHA 115A1 ; [.2BE3.0020.0002] # SIDDHAM LETTER NA 115A2 ; [.2BE4.0020.0002] # SIDDHAM LETTER PA 115A3 ; [.2BE5.0020.0002] # SIDDHAM LETTER PHA 115A4 ; [.2BE6.0020.0002] # SIDDHAM LETTER BA 115A5 ; [.2BE7.0020.0002] # SIDDHAM LETTER BHA 115A6 ; [.2BE8.0020.0002] # SIDDHAM LETTER MA 115A7 ; [.2BE9.0020.0002] # SIDDHAM LETTER YA 115A8 ; [.2BEA.0020.0002] # SIDDHAM LETTER RA 115A9 ; [.2BEB.0020.0002] # SIDDHAM LETTER LA 115AA ; [.2BEC.0020.0002] # SIDDHAM LETTER VA 115AB ; [.2BED.0020.0002] # SIDDHAM LETTER SHA 115AC ; [.2BEE.0020.0002] # SIDDHAM LETTER SSA 115AD ; [.2BEF.0020.0002] # SIDDHAM LETTER SA 115AE ; [.2BF0.0020.0002] # SIDDHAM LETTER HA 115AF ; [.2BF1.0020.0002] # SIDDHAM VOWEL SIGN AA 115B0 ; [.2BF2.0020.0002] # SIDDHAM VOWEL SIGN I 115B1 ; [.2BF3.0020.0002] # SIDDHAM VOWEL SIGN II 115B2 ; [.2BF4.0020.0002] # SIDDHAM VOWEL SIGN U 115DC ; [.2BF4.0020.0004][.0000.0110.0004] # SIDDHAM VOWEL SIGN ALTERNATE U 115B3 ; [.2BF5.0020.0002] # SIDDHAM VOWEL SIGN UU 115DD ; [.2BF5.0020.0004][.0000.0110.0004] # SIDDHAM VOWEL SIGN ALTERNATE UU 115B4 ; [.2BF6.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC R 115B5 ; [.2BF7.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC RR 115B8 ; [.2BF8.0020.0002] # SIDDHAM VOWEL SIGN E 115B9 ; [.2BF9.0020.0002] # SIDDHAM VOWEL SIGN AI 115BA ; [.2BFA.0020.0002] # SIDDHAM VOWEL SIGN O 115B8 115AF ; [.2BFA.0020.0002] # SIDDHAM VOWEL SIGN O 115BB ; [.2BFB.0020.0002] # SIDDHAM VOWEL SIGN AU 115B9 115AF ; [.2BFB.0020.0002] # SIDDHAM VOWEL SIGN AU 115BF ; [.2BFC.0020.0002] # SIDDHAM SIGN VIRAMA 11600 ; [.2BFD.0020.0002] # MODI LETTER A 11601 ; [.2BFE.0020.0002] # MODI LETTER AA 11602 ; [.2BFF.0020.0002] # MODI LETTER I 11603 ; [.2C00.0020.0002] # MODI LETTER II 11604 ; [.2C01.0020.0002] # MODI LETTER U 11605 ; [.2C02.0020.0002] # MODI LETTER UU 11606 ; [.2C03.0020.0002] # MODI LETTER VOCALIC R 11607 ; [.2C04.0020.0002] # MODI LETTER VOCALIC RR 11608 ; [.2C05.0020.0002] # MODI LETTER VOCALIC L 11609 ; [.2C06.0020.0002] # MODI LETTER VOCALIC LL 1160A ; [.2C07.0020.0002] # MODI LETTER E 1160B ; [.2C08.0020.0002] # MODI LETTER AI 1160C ; [.2C09.0020.0002] # MODI LETTER O 1160D ; [.2C0A.0020.0002] # MODI LETTER AU 1160E ; [.2C0B.0020.0002] # MODI LETTER KA 1160F ; [.2C0C.0020.0002] # MODI LETTER KHA 11610 ; [.2C0D.0020.0002] # MODI LETTER GA 11611 ; [.2C0E.0020.0002] # MODI LETTER GHA 11612 ; [.2C0F.0020.0002] # MODI LETTER NGA 11613 ; [.2C10.0020.0002] # MODI LETTER CA 11614 ; [.2C11.0020.0002] # MODI LETTER CHA 11615 ; [.2C12.0020.0002] # MODI LETTER JA 11616 ; [.2C13.0020.0002] # MODI LETTER JHA 11617 ; [.2C14.0020.0002] # MODI LETTER NYA 11618 ; [.2C15.0020.0002] # MODI LETTER TTA 11619 ; [.2C16.0020.0002] # MODI LETTER TTHA 1161A ; [.2C17.0020.0002] # MODI LETTER DDA 1161B ; [.2C18.0020.0002] # MODI LETTER DDHA 1161C ; [.2C19.0020.0002] # MODI LETTER NNA 1161D ; [.2C1A.0020.0002] # MODI LETTER TA 1161E ; [.2C1B.0020.0002] # MODI LETTER THA 1161F ; [.2C1C.0020.0002] # MODI LETTER DA 11620 ; [.2C1D.0020.0002] # MODI LETTER DHA 11621 ; [.2C1E.0020.0002] # MODI LETTER NA 11622 ; [.2C1F.0020.0002] # MODI LETTER PA 11623 ; [.2C20.0020.0002] # MODI LETTER PHA 11624 ; [.2C21.0020.0002] # MODI LETTER BA 11625 ; [.2C22.0020.0002] # MODI LETTER BHA 11626 ; [.2C23.0020.0002] # MODI LETTER MA 11627 ; [.2C24.0020.0002] # MODI LETTER YA 11628 ; [.2C25.0020.0002] # MODI LETTER RA 11629 ; [.2C26.0020.0002] # MODI LETTER LA 1162A ; [.2C27.0020.0002] # MODI LETTER VA 1162B ; [.2C28.0020.0002] # MODI LETTER SHA 1162C ; [.2C29.0020.0002] # MODI LETTER SSA 1162D ; [.2C2A.0020.0002] # MODI LETTER SA 1162E ; [.2C2B.0020.0002] # MODI LETTER HA 1162F ; [.2C2C.0020.0002] # MODI LETTER LLA 11630 ; [.2C2D.0020.0002] # MODI VOWEL SIGN AA 11631 ; [.2C2E.0020.0002] # MODI VOWEL SIGN I 11632 ; [.2C2F.0020.0002] # MODI VOWEL SIGN II 11633 ; [.2C30.0020.0002] # MODI VOWEL SIGN U 11634 ; [.2C31.0020.0002] # MODI VOWEL SIGN UU 11635 ; [.2C32.0020.0002] # MODI VOWEL SIGN VOCALIC R 11636 ; [.2C33.0020.0002] # MODI VOWEL SIGN VOCALIC RR 11637 ; [.2C34.0020.0002] # MODI VOWEL SIGN VOCALIC L 11638 ; [.2C35.0020.0002] # MODI VOWEL SIGN VOCALIC LL 11639 ; [.2C36.0020.0002] # MODI VOWEL SIGN E 1163A ; [.2C37.0020.0002] # MODI VOWEL SIGN AI 1163B ; [.2C38.0020.0002] # MODI VOWEL SIGN O 1163C ; [.2C39.0020.0002] # MODI VOWEL SIGN AU 1163F ; [.2C3A.0020.0002] # MODI SIGN VIRAMA 11644 ; [.2C3B.0020.0002] # MODI SIGN HUVA 11680 ; [.2C3C.0020.0002] # TAKRI LETTER A 11681 ; [.2C3D.0020.0002] # TAKRI LETTER AA 11682 ; [.2C3E.0020.0002] # TAKRI LETTER I 11683 ; [.2C3F.0020.0002] # TAKRI LETTER II 11684 ; [.2C40.0020.0002] # TAKRI LETTER U 11685 ; [.2C41.0020.0002] # TAKRI LETTER UU 11686 ; [.2C42.0020.0002] # TAKRI LETTER E 11687 ; [.2C43.0020.0002] # TAKRI LETTER AI 11688 ; [.2C44.0020.0002] # TAKRI LETTER O 11689 ; [.2C45.0020.0002] # TAKRI LETTER AU 116A8 ; [.2C46.0020.0002] # TAKRI LETTER SA 116A7 ; [.2C47.0020.0002] # TAKRI LETTER SHA 116A9 ; [.2C48.0020.0002] # TAKRI LETTER HA 1168A ; [.2C49.0020.0002] # TAKRI LETTER KA 1168B ; [.2C4A.0020.0002] # TAKRI LETTER KHA 1168C ; [.2C4B.0020.0002] # TAKRI LETTER GA 1168D ; [.2C4C.0020.0002] # TAKRI LETTER GHA 1168E ; [.2C4D.0020.0002] # TAKRI LETTER NGA 1168F ; [.2C4E.0020.0002] # TAKRI LETTER CA 11690 ; [.2C4F.0020.0002] # TAKRI LETTER CHA 11691 ; [.2C50.0020.0002] # TAKRI LETTER JA 11692 ; [.2C51.0020.0002] # TAKRI LETTER JHA 11693 ; [.2C52.0020.0002] # TAKRI LETTER NYA 11694 ; [.2C53.0020.0002] # TAKRI LETTER TTA 11695 ; [.2C54.0020.0002] # TAKRI LETTER TTHA 11696 ; [.2C55.0020.0002] # TAKRI LETTER DDA 11697 ; [.2C56.0020.0002] # TAKRI LETTER DDHA 11698 ; [.2C57.0020.0002] # TAKRI LETTER NNA 11699 ; [.2C58.0020.0002] # TAKRI LETTER TA 1169A ; [.2C59.0020.0002] # TAKRI LETTER THA 1169B ; [.2C5A.0020.0002] # TAKRI LETTER DA 1169C ; [.2C5B.0020.0002] # TAKRI LETTER DHA 1169D ; [.2C5C.0020.0002] # TAKRI LETTER NA 1169E ; [.2C5D.0020.0002] # TAKRI LETTER PA 1169F ; [.2C5E.0020.0002] # TAKRI LETTER PHA 116A0 ; [.2C5F.0020.0002] # TAKRI LETTER BA 116A1 ; [.2C60.0020.0002] # TAKRI LETTER BHA 116A2 ; [.2C61.0020.0002] # TAKRI LETTER MA 116A3 ; [.2C62.0020.0002] # TAKRI LETTER YA 116A4 ; [.2C63.0020.0002] # TAKRI LETTER RA 116A5 ; [.2C64.0020.0002] # TAKRI LETTER LA 116A6 ; [.2C65.0020.0002] # TAKRI LETTER VA 116AA ; [.2C66.0020.0002] # TAKRI LETTER RRA 116AD ; [.2C67.0020.0002] # TAKRI VOWEL SIGN AA 116AE ; [.2C68.0020.0002] # TAKRI VOWEL SIGN I 116AF ; [.2C69.0020.0002] # TAKRI VOWEL SIGN II 116B0 ; [.2C6A.0020.0002] # TAKRI VOWEL SIGN U 116B1 ; [.2C6B.0020.0002] # TAKRI VOWEL SIGN UU 116B2 ; [.2C6C.0020.0002] # TAKRI VOWEL SIGN E 116B3 ; [.2C6D.0020.0002] # TAKRI VOWEL SIGN AI 116B4 ; [.2C6E.0020.0002] # TAKRI VOWEL SIGN O 116B5 ; [.2C6F.0020.0002] # TAKRI VOWEL SIGN AU 116B6 ; [.2C70.0020.0002] # TAKRI SIGN VIRAMA 11700 ; [.2C71.0020.0002] # AHOM LETTER KA 11701 ; [.2C72.0020.0002] # AHOM LETTER KHA 11702 ; [.2C73.0020.0002] # AHOM LETTER NGA 11703 ; [.2C74.0020.0002] # AHOM LETTER NA 11704 ; [.2C75.0020.0002] # AHOM LETTER TA 11705 ; [.2C75.0020.0004][.0000.0110.0004] # AHOM LETTER ALTERNATE TA 11706 ; [.2C76.0020.0002] # AHOM LETTER PA 11707 ; [.2C77.0020.0002] # AHOM LETTER PHA 11708 ; [.2C78.0020.0002] # AHOM LETTER BA 11709 ; [.2C79.0020.0002] # AHOM LETTER MA 1170A ; [.2C7A.0020.0002] # AHOM LETTER JA 1170B ; [.2C7B.0020.0002] # AHOM LETTER CHA 1170C ; [.2C7C.0020.0002] # AHOM LETTER THA 1170D ; [.2C7D.0020.0002] # AHOM LETTER RA 1170E ; [.2C7E.0020.0002] # AHOM LETTER LA 1170F ; [.2C7F.0020.0002] # AHOM LETTER SA 11710 ; [.2C80.0020.0002] # AHOM LETTER NYA 11711 ; [.2C81.0020.0002] # AHOM LETTER HA 11712 ; [.2C82.0020.0002] # AHOM LETTER A 11713 ; [.2C83.0020.0002] # AHOM LETTER DA 11714 ; [.2C84.0020.0002] # AHOM LETTER DHA 11715 ; [.2C85.0020.0002] # AHOM LETTER GA 11716 ; [.2C85.0020.0004][.0000.0110.0004] # AHOM LETTER ALTERNATE GA 11717 ; [.2C86.0020.0002] # AHOM LETTER GHA 11718 ; [.2C87.0020.0002] # AHOM LETTER BHA 11719 ; [.2C88.0020.0002] # AHOM LETTER JHA 11720 ; [.2C89.0020.0002] # AHOM VOWEL SIGN A 11721 ; [.2C8A.0020.0002] # AHOM VOWEL SIGN AA 11722 ; [.2C8B.0020.0002] # AHOM VOWEL SIGN I 11723 ; [.2C8C.0020.0002] # AHOM VOWEL SIGN II 11724 ; [.2C8D.0020.0002] # AHOM VOWEL SIGN U 11725 ; [.2C8E.0020.0002] # AHOM VOWEL SIGN UU 11726 ; [.2C8F.0020.0002] # AHOM VOWEL SIGN E 11727 ; [.2C90.0020.0002] # AHOM VOWEL SIGN AW 11728 ; [.2C91.0020.0002] # AHOM VOWEL SIGN O 11729 ; [.2C92.0020.0002] # AHOM VOWEL SIGN AI 1172A ; [.2C93.0020.0002] # AHOM VOWEL SIGN AM 1172B ; [.2C94.0020.0002] # AHOM SIGN KILLER 1171D ; [.2C95.0020.0002] # AHOM CONSONANT SIGN MEDIAL LA 1171E ; [.2C96.0020.0002] # AHOM CONSONANT SIGN MEDIAL RA 1171F ; [.2C97.0020.0002] # AHOM CONSONANT SIGN MEDIAL LIGATING RA 1B83 ; [.2C98.0020.0002] # SUNDANESE LETTER A 1BBA ; [.2C98.0020.0004] # SUNDANESE AVAGRAHA 1B84 ; [.2C99.0020.0002] # SUNDANESE LETTER I 1B85 ; [.2C9A.0020.0002] # SUNDANESE LETTER U 1B86 ; [.2C9B.0020.0002] # SUNDANESE LETTER AE 1B87 ; [.2C9C.0020.0002] # SUNDANESE LETTER O 1B88 ; [.2C9D.0020.0002] # SUNDANESE LETTER E 1B89 ; [.2C9E.0020.0002] # SUNDANESE LETTER EU 1B8A ; [.2C9F.0020.0002] # SUNDANESE LETTER KA 1BBE ; [.2C9F.0020.0019] # SUNDANESE LETTER FINAL K 1BAE ; [.2CA0.0020.0002] # SUNDANESE LETTER KHA 1B8B ; [.2CA1.0020.0002] # SUNDANESE LETTER QA 1B8C ; [.2CA2.0020.0002] # SUNDANESE LETTER GA 1B8D ; [.2CA3.0020.0002] # SUNDANESE LETTER NGA 1B8E ; [.2CA4.0020.0002] # SUNDANESE LETTER CA 1B8F ; [.2CA5.0020.0002] # SUNDANESE LETTER JA 1B90 ; [.2CA6.0020.0002] # SUNDANESE LETTER ZA 1B91 ; [.2CA7.0020.0002] # SUNDANESE LETTER NYA 1B92 ; [.2CA8.0020.0002] # SUNDANESE LETTER TA 1B93 ; [.2CA9.0020.0002] # SUNDANESE LETTER DA 1B94 ; [.2CAA.0020.0002] # SUNDANESE LETTER NA 1B95 ; [.2CAB.0020.0002] # SUNDANESE LETTER PA 1B96 ; [.2CAC.0020.0002] # SUNDANESE LETTER FA 1B97 ; [.2CAD.0020.0002] # SUNDANESE LETTER VA 1B98 ; [.2CAE.0020.0002] # SUNDANESE LETTER BA 1BBD ; [.2CAF.0020.0002] # SUNDANESE LETTER BHA 1B99 ; [.2CB0.0020.0002] # SUNDANESE LETTER MA 1BBF ; [.2CB0.0020.0019] # SUNDANESE LETTER FINAL M 1BAC ; [.2CB1.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN MA 1B9A ; [.2CB2.0020.0002] # SUNDANESE LETTER YA 1BA1 ; [.2CB3.0020.0002] # SUNDANESE CONSONANT SIGN PAMINGKAL 1B9B ; [.2CB4.0020.0002] # SUNDANESE LETTER RA 1BA2 ; [.2CB5.0020.0002] # SUNDANESE CONSONANT SIGN PANYAKRA 1BBB ; [.2CB6.0020.0002] # SUNDANESE LETTER REU 1B9C ; [.2CB7.0020.0002] # SUNDANESE LETTER LA 1BA3 ; [.2CB8.0020.0002] # SUNDANESE CONSONANT SIGN PANYIKU 1BBC ; [.2CB9.0020.0002] # SUNDANESE LETTER LEU 1B9D ; [.2CBA.0020.0002] # SUNDANESE LETTER WA 1BAD ; [.2CBB.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN WA 1B9E ; [.2CBC.0020.0002] # SUNDANESE LETTER SA 1B9F ; [.2CBD.0020.0002] # SUNDANESE LETTER XA 1BAF ; [.2CBE.0020.0002] # SUNDANESE LETTER SYA 1BA0 ; [.2CBF.0020.0002] # SUNDANESE LETTER HA 1BA4 ; [.2CC0.0020.0002] # SUNDANESE VOWEL SIGN PANGHULU 1BA5 ; [.2CC1.0020.0002] # SUNDANESE VOWEL SIGN PANYUKU 1BA6 ; [.2CC2.0020.0002] # SUNDANESE VOWEL SIGN PANAELAENG 1BA7 ; [.2CC3.0020.0002] # SUNDANESE VOWEL SIGN PANOLONG 1BA8 ; [.2CC4.0020.0002] # SUNDANESE VOWEL SIGN PAMEPET 1BA9 ; [.2CC5.0020.0002] # SUNDANESE VOWEL SIGN PANEULEUNG 1BAA ; [.2CC6.0020.0002] # SUNDANESE SIGN PAMAAEH 1BAB ; [.2CC7.0020.0002] # SUNDANESE SIGN VIRAMA 11005 ; [.2CC8.0020.0002] # BRAHMI LETTER A 11006 ; [.2CC9.0020.0002] # BRAHMI LETTER AA 11007 ; [.2CCA.0020.0002] # BRAHMI LETTER I 11008 ; [.2CCB.0020.0002] # BRAHMI LETTER II 11009 ; [.2CCC.0020.0002] # BRAHMI LETTER U 1100A ; [.2CCD.0020.0002] # BRAHMI LETTER UU 1100B ; [.2CCE.0020.0002] # BRAHMI LETTER VOCALIC R 1100C ; [.2CCF.0020.0002] # BRAHMI LETTER VOCALIC RR 1100D ; [.2CD0.0020.0002] # BRAHMI LETTER VOCALIC L 1100E ; [.2CD1.0020.0002] # BRAHMI LETTER VOCALIC LL 1100F ; [.2CD2.0020.0002] # BRAHMI LETTER E 11010 ; [.2CD3.0020.0002] # BRAHMI LETTER AI 11011 ; [.2CD4.0020.0002] # BRAHMI LETTER O 11012 ; [.2CD5.0020.0002] # BRAHMI LETTER AU 11013 ; [.2CD6.0020.0002] # BRAHMI LETTER KA 11014 ; [.2CD7.0020.0002] # BRAHMI LETTER KHA 11015 ; [.2CD8.0020.0002] # BRAHMI LETTER GA 11016 ; [.2CD9.0020.0002] # BRAHMI LETTER GHA 11017 ; [.2CDA.0020.0002] # BRAHMI LETTER NGA 11018 ; [.2CDB.0020.0002] # BRAHMI LETTER CA 11019 ; [.2CDC.0020.0002] # BRAHMI LETTER CHA 1101A ; [.2CDD.0020.0002] # BRAHMI LETTER JA 1101B ; [.2CDE.0020.0002] # BRAHMI LETTER JHA 1101C ; [.2CDF.0020.0002] # BRAHMI LETTER NYA 1101D ; [.2CE0.0020.0002] # BRAHMI LETTER TTA 1101E ; [.2CE1.0020.0002] # BRAHMI LETTER TTHA 1101F ; [.2CE2.0020.0002] # BRAHMI LETTER DDA 11020 ; [.2CE3.0020.0002] # BRAHMI LETTER DDHA 11021 ; [.2CE4.0020.0002] # BRAHMI LETTER NNA 11022 ; [.2CE5.0020.0002] # BRAHMI LETTER TA 11023 ; [.2CE6.0020.0002] # BRAHMI LETTER THA 11024 ; [.2CE7.0020.0002] # BRAHMI LETTER DA 11025 ; [.2CE8.0020.0002] # BRAHMI LETTER DHA 11026 ; [.2CE9.0020.0002] # BRAHMI LETTER NA 11027 ; [.2CEA.0020.0002] # BRAHMI LETTER PA 11028 ; [.2CEB.0020.0002] # BRAHMI LETTER PHA 11029 ; [.2CEC.0020.0002] # BRAHMI LETTER BA 1102A ; [.2CED.0020.0002] # BRAHMI LETTER BHA 1102B ; [.2CEE.0020.0002] # BRAHMI LETTER MA 1102C ; [.2CEF.0020.0002] # BRAHMI LETTER YA 1102D ; [.2CF0.0020.0002] # BRAHMI LETTER RA 1102E ; [.2CF1.0020.0002] # BRAHMI LETTER LA 1102F ; [.2CF2.0020.0002] # BRAHMI LETTER VA 11030 ; [.2CF3.0020.0002] # BRAHMI LETTER SHA 11031 ; [.2CF4.0020.0002] # BRAHMI LETTER SSA 11032 ; [.2CF5.0020.0002] # BRAHMI LETTER SA 11033 ; [.2CF6.0020.0002] # BRAHMI LETTER HA 11003 ; [.2CF7.0020.0002] # BRAHMI SIGN JIHVAMULIYA 11004 ; [.2CF8.0020.0002] # BRAHMI SIGN UPADHMANIYA 11034 ; [.2CF9.0020.0002] # BRAHMI LETTER LLA 11035 ; [.2CFA.0020.0002] # BRAHMI LETTER OLD TAMIL LLLA 11036 ; [.2CFB.0020.0002] # BRAHMI LETTER OLD TAMIL RRA 11037 ; [.2CFC.0020.0002] # BRAHMI LETTER OLD TAMIL NNNA 11038 ; [.2CFD.0020.0002] # BRAHMI VOWEL SIGN AA 11039 ; [.2CFE.0020.0002] # BRAHMI VOWEL SIGN BHATTIPROLU AA 1103A ; [.2CFF.0020.0002] # BRAHMI VOWEL SIGN I 1103B ; [.2D00.0020.0002] # BRAHMI VOWEL SIGN II 1103C ; [.2D01.0020.0002] # BRAHMI VOWEL SIGN U 1103D ; [.2D02.0020.0002] # BRAHMI VOWEL SIGN UU 1103E ; [.2D03.0020.0002] # BRAHMI VOWEL SIGN VOCALIC R 1103F ; [.2D04.0020.0002] # BRAHMI VOWEL SIGN VOCALIC RR 11040 ; [.2D05.0020.0002] # BRAHMI VOWEL SIGN VOCALIC L 11041 ; [.2D06.0020.0002] # BRAHMI VOWEL SIGN VOCALIC LL 11042 ; [.2D07.0020.0002] # BRAHMI VOWEL SIGN E 11043 ; [.2D08.0020.0002] # BRAHMI VOWEL SIGN AI 11044 ; [.2D09.0020.0002] # BRAHMI VOWEL SIGN O 11045 ; [.2D0A.0020.0002] # BRAHMI VOWEL SIGN AU 11046 ; [.2D0B.0020.0002] # BRAHMI VIRAMA 1107F ; [.2D0C.0020.0002] # BRAHMI NUMBER JOINER 10A00 ; [.2D0D.0020.0002] # KHAROSHTHI LETTER A 10A01 ; [.2D0E.0020.0002] # KHAROSHTHI VOWEL SIGN I 10A02 ; [.2D0F.0020.0002] # KHAROSHTHI VOWEL SIGN U 10A03 ; [.2D10.0020.0002] # KHAROSHTHI VOWEL SIGN VOCALIC R 10A05 ; [.2D11.0020.0002] # KHAROSHTHI VOWEL SIGN E 10A06 ; [.2D12.0020.0002] # KHAROSHTHI VOWEL SIGN O 10A0C ; [.2D13.0020.0002] # KHAROSHTHI VOWEL LENGTH MARK 10A10 ; [.2D14.0020.0002] # KHAROSHTHI LETTER KA 10A11 ; [.2D15.0020.0002] # KHAROSHTHI LETTER KHA 10A12 ; [.2D16.0020.0002] # KHAROSHTHI LETTER GA 10A13 ; [.2D17.0020.0002] # KHAROSHTHI LETTER GHA 10A15 ; [.2D18.0020.0002] # KHAROSHTHI LETTER CA 10A16 ; [.2D19.0020.0002] # KHAROSHTHI LETTER CHA 10A17 ; [.2D1A.0020.0002] # KHAROSHTHI LETTER JA 10A19 ; [.2D1B.0020.0002] # KHAROSHTHI LETTER NYA 10A1A ; [.2D1C.0020.0002] # KHAROSHTHI LETTER TTA 10A1B ; [.2D1D.0020.0002] # KHAROSHTHI LETTER TTHA 10A1C ; [.2D1E.0020.0002] # KHAROSHTHI LETTER DDA 10A1D ; [.2D1F.0020.0002] # KHAROSHTHI LETTER DDHA 10A1E ; [.2D20.0020.0002] # KHAROSHTHI LETTER NNA 10A1F ; [.2D21.0020.0002] # KHAROSHTHI LETTER TA 10A20 ; [.2D22.0020.0002] # KHAROSHTHI LETTER THA 10A21 ; [.2D23.0020.0002] # KHAROSHTHI LETTER DA 10A22 ; [.2D24.0020.0002] # KHAROSHTHI LETTER DHA 10A23 ; [.2D25.0020.0002] # KHAROSHTHI LETTER NA 10A24 ; [.2D26.0020.0002] # KHAROSHTHI LETTER PA 10A25 ; [.2D27.0020.0002] # KHAROSHTHI LETTER PHA 10A26 ; [.2D28.0020.0002] # KHAROSHTHI LETTER BA 10A27 ; [.2D29.0020.0002] # KHAROSHTHI LETTER BHA 10A28 ; [.2D2A.0020.0002] # KHAROSHTHI LETTER MA 10A29 ; [.2D2B.0020.0002] # KHAROSHTHI LETTER YA 10A2A ; [.2D2C.0020.0002] # KHAROSHTHI LETTER RA 10A2B ; [.2D2D.0020.0002] # KHAROSHTHI LETTER LA 10A2C ; [.2D2E.0020.0002] # KHAROSHTHI LETTER VA 10A2D ; [.2D2F.0020.0002] # KHAROSHTHI LETTER SHA 10A2E ; [.2D30.0020.0002] # KHAROSHTHI LETTER SSA 10A2F ; [.2D31.0020.0002] # KHAROSHTHI LETTER SA 10A30 ; [.2D32.0020.0002] # KHAROSHTHI LETTER ZA 10A31 ; [.2D33.0020.0002] # KHAROSHTHI LETTER HA 10A32 ; [.2D34.0020.0002] # KHAROSHTHI LETTER KKA 10A33 ; [.2D35.0020.0002] # KHAROSHTHI LETTER TTTHA 10A3F ; [.2D36.0020.0002] # KHAROSHTHI VIRAMA 11C00 ; [.2D37.0020.0002] # BHAIKSUKI LETTER A 11C01 ; [.2D38.0020.0002] # BHAIKSUKI LETTER AA 11C02 ; [.2D39.0020.0002] # BHAIKSUKI LETTER I 11C03 ; [.2D3A.0020.0002] # BHAIKSUKI LETTER II 11C04 ; [.2D3B.0020.0002] # BHAIKSUKI LETTER U 11C05 ; [.2D3C.0020.0002] # BHAIKSUKI LETTER UU 11C06 ; [.2D3D.0020.0002] # BHAIKSUKI LETTER VOCALIC R 11C07 ; [.2D3E.0020.0002] # BHAIKSUKI LETTER VOCALIC RR 11C08 ; [.2D3F.0020.0002] # BHAIKSUKI LETTER VOCALIC L 11C0A ; [.2D40.0020.0002] # BHAIKSUKI LETTER E 11C0B ; [.2D41.0020.0002] # BHAIKSUKI LETTER AI 11C0C ; [.2D42.0020.0002] # BHAIKSUKI LETTER O 11C0D ; [.2D43.0020.0002] # BHAIKSUKI LETTER AU 11C0E ; [.2D44.0020.0002] # BHAIKSUKI LETTER KA 11C0F ; [.2D45.0020.0002] # BHAIKSUKI LETTER KHA 11C10 ; [.2D46.0020.0002] # BHAIKSUKI LETTER GA 11C11 ; [.2D47.0020.0002] # BHAIKSUKI LETTER GHA 11C12 ; [.2D48.0020.0002] # BHAIKSUKI LETTER NGA 11C13 ; [.2D49.0020.0002] # BHAIKSUKI LETTER CA 11C14 ; [.2D4A.0020.0002] # BHAIKSUKI LETTER CHA 11C15 ; [.2D4B.0020.0002] # BHAIKSUKI LETTER JA 11C16 ; [.2D4C.0020.0002] # BHAIKSUKI LETTER JHA 11C17 ; [.2D4D.0020.0002] # BHAIKSUKI LETTER NYA 11C18 ; [.2D4E.0020.0002] # BHAIKSUKI LETTER TTA 11C19 ; [.2D4F.0020.0002] # BHAIKSUKI LETTER TTHA 11C1A ; [.2D50.0020.0002] # BHAIKSUKI LETTER DDA 11C1B ; [.2D51.0020.0002] # BHAIKSUKI LETTER DDHA 11C1C ; [.2D52.0020.0002] # BHAIKSUKI LETTER NNA 11C1D ; [.2D53.0020.0002] # BHAIKSUKI LETTER TA 11C1E ; [.2D54.0020.0002] # BHAIKSUKI LETTER THA 11C1F ; [.2D55.0020.0002] # BHAIKSUKI LETTER DA 11C20 ; [.2D56.0020.0002] # BHAIKSUKI LETTER DHA 11C21 ; [.2D57.0020.0002] # BHAIKSUKI LETTER NA 11C22 ; [.2D58.0020.0002] # BHAIKSUKI LETTER PA 11C23 ; [.2D59.0020.0002] # BHAIKSUKI LETTER PHA 11C24 ; [.2D5A.0020.0002] # BHAIKSUKI LETTER BA 11C25 ; [.2D5B.0020.0002] # BHAIKSUKI LETTER BHA 11C26 ; [.2D5C.0020.0002] # BHAIKSUKI LETTER MA 11C27 ; [.2D5D.0020.0002] # BHAIKSUKI LETTER YA 11C28 ; [.2D5E.0020.0002] # BHAIKSUKI LETTER RA 11C29 ; [.2D5F.0020.0002] # BHAIKSUKI LETTER LA 11C2A ; [.2D60.0020.0002] # BHAIKSUKI LETTER VA 11C2B ; [.2D61.0020.0002] # BHAIKSUKI LETTER SHA 11C2C ; [.2D62.0020.0002] # BHAIKSUKI LETTER SSA 11C2D ; [.2D63.0020.0002] # BHAIKSUKI LETTER SA 11C2E ; [.2D64.0020.0002] # BHAIKSUKI LETTER HA 11C40 ; [.2D65.0020.0002] # BHAIKSUKI SIGN AVAGRAHA 11C2F ; [.2D66.0020.0002] # BHAIKSUKI VOWEL SIGN AA 11C30 ; [.2D67.0020.0002] # BHAIKSUKI VOWEL SIGN I 11C31 ; [.2D68.0020.0002] # BHAIKSUKI VOWEL SIGN II 11C32 ; [.2D69.0020.0002] # BHAIKSUKI VOWEL SIGN U 11C33 ; [.2D6A.0020.0002] # BHAIKSUKI VOWEL SIGN UU 11C34 ; [.2D6B.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC R 11C35 ; [.2D6C.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC RR 11C36 ; [.2D6D.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC L 11C38 ; [.2D6E.0020.0002] # BHAIKSUKI VOWEL SIGN E 11C39 ; [.2D6F.0020.0002] # BHAIKSUKI VOWEL SIGN AI 11C3A ; [.2D70.0020.0002] # BHAIKSUKI VOWEL SIGN O 11C3B ; [.2D71.0020.0002] # BHAIKSUKI VOWEL SIGN AU 11C3F ; [.2D72.0020.0002] # BHAIKSUKI SIGN VIRAMA 0E01 ; [.2D73.0020.0002] # THAI CHARACTER KO KAI 0E40 0E01 ; [.2D73.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KO KAI> 0E41 0E01 ; [.2D73.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KO KAI> 0E42 0E01 ; [.2D73.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KO KAI> 0E43 0E01 ; [.2D73.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KO KAI> 0E44 0E01 ; [.2D73.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KO KAI> 0E02 ; [.2D74.0020.0002] # THAI CHARACTER KHO KHAI 0E40 0E02 ; [.2D74.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHAI> 0E41 0E02 ; [.2D74.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHAI> 0E42 0E02 ; [.2D74.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHAI> 0E43 0E02 ; [.2D74.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHAI> 0E44 0E02 ; [.2D74.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHAI> 0E03 ; [.2D75.0020.0002] # THAI CHARACTER KHO KHUAT 0E40 0E03 ; [.2D75.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHUAT> 0E41 0E03 ; [.2D75.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHUAT> 0E42 0E03 ; [.2D75.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHUAT> 0E43 0E03 ; [.2D75.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHUAT> 0E44 0E03 ; [.2D75.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHUAT> 0E04 ; [.2D76.0020.0002] # THAI CHARACTER KHO KHWAI 0E40 0E04 ; [.2D76.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHWAI> 0E41 0E04 ; [.2D76.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHWAI> 0E42 0E04 ; [.2D76.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHWAI> 0E43 0E04 ; [.2D76.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHWAI> 0E44 0E04 ; [.2D76.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHWAI> 0E05 ; [.2D77.0020.0002] # THAI CHARACTER KHO KHON 0E40 0E05 ; [.2D77.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHON> 0E41 0E05 ; [.2D77.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHON> 0E42 0E05 ; [.2D77.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHON> 0E43 0E05 ; [.2D77.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHON> 0E44 0E05 ; [.2D77.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHON> 0E06 ; [.2D78.0020.0002] # THAI CHARACTER KHO RAKHANG 0E40 0E06 ; [.2D78.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO RAKHANG> 0E41 0E06 ; [.2D78.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO RAKHANG> 0E42 0E06 ; [.2D78.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO RAKHANG> 0E43 0E06 ; [.2D78.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO RAKHANG> 0E44 0E06 ; [.2D78.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO RAKHANG> 0E07 ; [.2D79.0020.0002] # THAI CHARACTER NGO NGU 0E40 0E07 ; [.2D79.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NGO NGU> 0E41 0E07 ; [.2D79.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NGO NGU> 0E42 0E07 ; [.2D79.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NGO NGU> 0E43 0E07 ; [.2D79.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NGO NGU> 0E44 0E07 ; [.2D79.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NGO NGU> 0E08 ; [.2D7A.0020.0002] # THAI CHARACTER CHO CHAN 0E40 0E08 ; [.2D7A.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHAN> 0E41 0E08 ; [.2D7A.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHAN> 0E42 0E08 ; [.2D7A.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHAN> 0E43 0E08 ; [.2D7A.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHAN> 0E44 0E08 ; [.2D7A.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHAN> 0E09 ; [.2D7B.0020.0002] # THAI CHARACTER CHO CHING 0E40 0E09 ; [.2D7B.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHING> 0E41 0E09 ; [.2D7B.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHING> 0E42 0E09 ; [.2D7B.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHING> 0E43 0E09 ; [.2D7B.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHING> 0E44 0E09 ; [.2D7B.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHING> 0E0A ; [.2D7C.0020.0002] # THAI CHARACTER CHO CHANG 0E40 0E0A ; [.2D7C.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHANG> 0E41 0E0A ; [.2D7C.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHANG> 0E42 0E0A ; [.2D7C.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHANG> 0E43 0E0A ; [.2D7C.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHANG> 0E44 0E0A ; [.2D7C.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHANG> 0E0B ; [.2D7D.0020.0002] # THAI CHARACTER SO SO 0E40 0E0B ; [.2D7D.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SO> 0E41 0E0B ; [.2D7D.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SO> 0E42 0E0B ; [.2D7D.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SO> 0E43 0E0B ; [.2D7D.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SO> 0E44 0E0B ; [.2D7D.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SO> 0E0C ; [.2D7E.0020.0002] # THAI CHARACTER CHO CHOE 0E40 0E0C ; [.2D7E.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHOE> 0E41 0E0C ; [.2D7E.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHOE> 0E42 0E0C ; [.2D7E.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHOE> 0E43 0E0C ; [.2D7E.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHOE> 0E44 0E0C ; [.2D7E.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHOE> 0E0D ; [.2D7F.0020.0002] # THAI CHARACTER YO YING 0E40 0E0D ; [.2D7F.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER YO YING> 0E41 0E0D ; [.2D7F.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER YO YING> 0E42 0E0D ; [.2D7F.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER YO YING> 0E43 0E0D ; [.2D7F.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER YO YING> 0E44 0E0D ; [.2D7F.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER YO YING> 0E0E ; [.2D80.0020.0002] # THAI CHARACTER DO CHADA 0E40 0E0E ; [.2D80.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER DO CHADA> 0E41 0E0E ; [.2D80.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER DO CHADA> 0E42 0E0E ; [.2D80.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER DO CHADA> 0E43 0E0E ; [.2D80.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER DO CHADA> 0E44 0E0E ; [.2D80.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER DO CHADA> 0E0F ; [.2D81.0020.0002] # THAI CHARACTER TO PATAK 0E40 0E0F ; [.2D81.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER TO PATAK> 0E41 0E0F ; [.2D81.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER TO PATAK> 0E42 0E0F ; [.2D81.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER TO PATAK> 0E43 0E0F ; [.2D81.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER TO PATAK> 0E44 0E0F ; [.2D81.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER TO PATAK> 0E10 ; [.2D82.0020.0002] # THAI CHARACTER THO THAN 0E40 0E10 ; [.2D82.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THAN> 0E41 0E10 ; [.2D82.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THAN> 0E42 0E10 ; [.2D82.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THAN> 0E43 0E10 ; [.2D82.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THAN> 0E44 0E10 ; [.2D82.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THAN> 0E11 ; [.2D83.0020.0002] # THAI CHARACTER THO NANGMONTHO 0E40 0E11 ; [.2D83.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO NANGMONTHO> 0E41 0E11 ; [.2D83.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO NANGMONTHO> 0E42 0E11 ; [.2D83.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO NANGMONTHO> 0E43 0E11 ; [.2D83.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO NANGMONTHO> 0E44 0E11 ; [.2D83.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO NANGMONTHO> 0E12 ; [.2D84.0020.0002] # THAI CHARACTER THO PHUTHAO 0E40 0E12 ; [.2D84.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO PHUTHAO> 0E41 0E12 ; [.2D84.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO PHUTHAO> 0E42 0E12 ; [.2D84.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO PHUTHAO> 0E43 0E12 ; [.2D84.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO PHUTHAO> 0E44 0E12 ; [.2D84.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO PHUTHAO> 0E13 ; [.2D85.0020.0002] # THAI CHARACTER NO NEN 0E40 0E13 ; [.2D85.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NO NEN> 0E41 0E13 ; [.2D85.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NO NEN> 0E42 0E13 ; [.2D85.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NO NEN> 0E43 0E13 ; [.2D85.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NO NEN> 0E44 0E13 ; [.2D85.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NO NEN> 0E14 ; [.2D86.0020.0002] # THAI CHARACTER DO DEK 0E40 0E14 ; [.2D86.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER DO DEK> 0E41 0E14 ; [.2D86.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER DO DEK> 0E42 0E14 ; [.2D86.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER DO DEK> 0E43 0E14 ; [.2D86.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER DO DEK> 0E44 0E14 ; [.2D86.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER DO DEK> 0E15 ; [.2D87.0020.0002] # THAI CHARACTER TO TAO 0E40 0E15 ; [.2D87.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER TO TAO> 0E41 0E15 ; [.2D87.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER TO TAO> 0E42 0E15 ; [.2D87.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER TO TAO> 0E43 0E15 ; [.2D87.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER TO TAO> 0E44 0E15 ; [.2D87.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER TO TAO> 0E16 ; [.2D88.0020.0002] # THAI CHARACTER THO THUNG 0E40 0E16 ; [.2D88.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THUNG> 0E41 0E16 ; [.2D88.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THUNG> 0E42 0E16 ; [.2D88.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THUNG> 0E43 0E16 ; [.2D88.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THUNG> 0E44 0E16 ; [.2D88.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THUNG> 0E17 ; [.2D89.0020.0002] # THAI CHARACTER THO THAHAN 0E40 0E17 ; [.2D89.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THAHAN> 0E41 0E17 ; [.2D89.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THAHAN> 0E42 0E17 ; [.2D89.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THAHAN> 0E43 0E17 ; [.2D89.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THAHAN> 0E44 0E17 ; [.2D89.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THAHAN> 0E18 ; [.2D8A.0020.0002] # THAI CHARACTER THO THONG 0E40 0E18 ; [.2D8A.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THONG> 0E41 0E18 ; [.2D8A.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THONG> 0E42 0E18 ; [.2D8A.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THONG> 0E43 0E18 ; [.2D8A.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THONG> 0E44 0E18 ; [.2D8A.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THONG> 0E19 ; [.2D8B.0020.0002] # THAI CHARACTER NO NU 0E40 0E19 ; [.2D8B.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NO NU> 0E41 0E19 ; [.2D8B.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NO NU> 0E42 0E19 ; [.2D8B.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NO NU> 0E43 0E19 ; [.2D8B.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NO NU> 0E44 0E19 ; [.2D8B.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NO NU> 0E1A ; [.2D8C.0020.0002] # THAI CHARACTER BO BAIMAI 0E40 0E1A ; [.2D8C.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER BO BAIMAI> 0E41 0E1A ; [.2D8C.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER BO BAIMAI> 0E42 0E1A ; [.2D8C.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER BO BAIMAI> 0E43 0E1A ; [.2D8C.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER BO BAIMAI> 0E44 0E1A ; [.2D8C.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER BO BAIMAI> 0E1B ; [.2D8D.0020.0002] # THAI CHARACTER PO PLA 0E40 0E1B ; [.2D8D.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PO PLA> 0E41 0E1B ; [.2D8D.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PO PLA> 0E42 0E1B ; [.2D8D.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PO PLA> 0E43 0E1B ; [.2D8D.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PO PLA> 0E44 0E1B ; [.2D8D.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PO PLA> 0E1C ; [.2D8E.0020.0002] # THAI CHARACTER PHO PHUNG 0E40 0E1C ; [.2D8E.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO PHUNG> 0E41 0E1C ; [.2D8E.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO PHUNG> 0E42 0E1C ; [.2D8E.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO PHUNG> 0E43 0E1C ; [.2D8E.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO PHUNG> 0E44 0E1C ; [.2D8E.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO PHUNG> 0E1D ; [.2D8F.0020.0002] # THAI CHARACTER FO FA 0E40 0E1D ; [.2D8F.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER FO FA> 0E41 0E1D ; [.2D8F.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER FO FA> 0E42 0E1D ; [.2D8F.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER FO FA> 0E43 0E1D ; [.2D8F.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER FO FA> 0E44 0E1D ; [.2D8F.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER FO FA> 0E1E ; [.2D90.0020.0002] # THAI CHARACTER PHO PHAN 0E40 0E1E ; [.2D90.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO PHAN> 0E41 0E1E ; [.2D90.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO PHAN> 0E42 0E1E ; [.2D90.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO PHAN> 0E43 0E1E ; [.2D90.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO PHAN> 0E44 0E1E ; [.2D90.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO PHAN> 0E1F ; [.2D91.0020.0002] # THAI CHARACTER FO FAN 0E40 0E1F ; [.2D91.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER FO FAN> 0E41 0E1F ; [.2D91.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER FO FAN> 0E42 0E1F ; [.2D91.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER FO FAN> 0E43 0E1F ; [.2D91.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER FO FAN> 0E44 0E1F ; [.2D91.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER FO FAN> 0E20 ; [.2D92.0020.0002] # THAI CHARACTER PHO SAMPHAO 0E40 0E20 ; [.2D92.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO SAMPHAO> 0E41 0E20 ; [.2D92.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO SAMPHAO> 0E42 0E20 ; [.2D92.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO SAMPHAO> 0E43 0E20 ; [.2D92.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO SAMPHAO> 0E44 0E20 ; [.2D92.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO SAMPHAO> 0E21 ; [.2D93.0020.0002] # THAI CHARACTER MO MA 0E40 0E21 ; [.2D93.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER MO MA> 0E41 0E21 ; [.2D93.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER MO MA> 0E42 0E21 ; [.2D93.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER MO MA> 0E43 0E21 ; [.2D93.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER MO MA> 0E44 0E21 ; [.2D93.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER MO MA> 0E22 ; [.2D94.0020.0002] # THAI CHARACTER YO YAK 0E40 0E22 ; [.2D94.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER YO YAK> 0E41 0E22 ; [.2D94.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER YO YAK> 0E42 0E22 ; [.2D94.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER YO YAK> 0E43 0E22 ; [.2D94.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER YO YAK> 0E44 0E22 ; [.2D94.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER YO YAK> 0E23 ; [.2D95.0020.0002] # THAI CHARACTER RO RUA 0E40 0E23 ; [.2D95.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER RO RUA> 0E41 0E23 ; [.2D95.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER RO RUA> 0E42 0E23 ; [.2D95.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER RO RUA> 0E43 0E23 ; [.2D95.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER RO RUA> 0E44 0E23 ; [.2D95.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER RO RUA> 0E24 ; [.2D96.0020.0002] # THAI CHARACTER RU 0E40 0E24 ; [.2D96.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER RU> 0E41 0E24 ; [.2D96.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER RU> 0E42 0E24 ; [.2D96.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER RU> 0E43 0E24 ; [.2D96.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER RU> 0E44 0E24 ; [.2D96.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER RU> 0E25 ; [.2D97.0020.0002] # THAI CHARACTER LO LING 0E40 0E25 ; [.2D97.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LO LING> 0E41 0E25 ; [.2D97.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LO LING> 0E42 0E25 ; [.2D97.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LO LING> 0E43 0E25 ; [.2D97.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LO LING> 0E44 0E25 ; [.2D97.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LO LING> 0E26 ; [.2D98.0020.0002] # THAI CHARACTER LU 0E40 0E26 ; [.2D98.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LU> 0E41 0E26 ; [.2D98.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LU> 0E42 0E26 ; [.2D98.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LU> 0E43 0E26 ; [.2D98.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LU> 0E44 0E26 ; [.2D98.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LU> 0E27 ; [.2D99.0020.0002] # THAI CHARACTER WO WAEN 0E40 0E27 ; [.2D99.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER WO WAEN> 0E41 0E27 ; [.2D99.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER WO WAEN> 0E42 0E27 ; [.2D99.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER WO WAEN> 0E43 0E27 ; [.2D99.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER WO WAEN> 0E44 0E27 ; [.2D99.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER WO WAEN> 0E28 ; [.2D9A.0020.0002] # THAI CHARACTER SO SALA 0E40 0E28 ; [.2D9A.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SALA> 0E41 0E28 ; [.2D9A.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SALA> 0E42 0E28 ; [.2D9A.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SALA> 0E43 0E28 ; [.2D9A.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SALA> 0E44 0E28 ; [.2D9A.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SALA> 0E29 ; [.2D9B.0020.0002] # THAI CHARACTER SO RUSI 0E40 0E29 ; [.2D9B.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO RUSI> 0E41 0E29 ; [.2D9B.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO RUSI> 0E42 0E29 ; [.2D9B.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO RUSI> 0E43 0E29 ; [.2D9B.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO RUSI> 0E44 0E29 ; [.2D9B.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO RUSI> 0E2A ; [.2D9C.0020.0002] # THAI CHARACTER SO SUA 0E40 0E2A ; [.2D9C.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SUA> 0E41 0E2A ; [.2D9C.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SUA> 0E42 0E2A ; [.2D9C.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SUA> 0E43 0E2A ; [.2D9C.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SUA> 0E44 0E2A ; [.2D9C.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SUA> 0E2B ; [.2D9D.0020.0002] # THAI CHARACTER HO HIP 0E40 0E2B ; [.2D9D.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER HO HIP> 0E41 0E2B ; [.2D9D.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER HO HIP> 0E42 0E2B ; [.2D9D.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER HO HIP> 0E43 0E2B ; [.2D9D.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER HO HIP> 0E44 0E2B ; [.2D9D.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER HO HIP> 0E2C ; [.2D9E.0020.0002] # THAI CHARACTER LO CHULA 0E40 0E2C ; [.2D9E.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LO CHULA> 0E41 0E2C ; [.2D9E.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LO CHULA> 0E42 0E2C ; [.2D9E.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LO CHULA> 0E43 0E2C ; [.2D9E.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LO CHULA> 0E44 0E2C ; [.2D9E.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LO CHULA> 0E2D ; [.2D9F.0020.0002] # THAI CHARACTER O ANG 0E40 0E2D ; [.2D9F.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER O ANG> 0E41 0E2D ; [.2D9F.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER O ANG> 0E42 0E2D ; [.2D9F.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER O ANG> 0E43 0E2D ; [.2D9F.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER O ANG> 0E44 0E2D ; [.2D9F.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER O ANG> 0E2E ; [.2DA0.0020.0002] # THAI CHARACTER HO NOKHUK 0E40 0E2E ; [.2DA0.0020.0002][.2DAD.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER HO NOKHUK> 0E41 0E2E ; [.2DA0.0020.0002][.2DAE.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER HO NOKHUK> 0E42 0E2E ; [.2DA0.0020.0002][.2DAF.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER HO NOKHUK> 0E43 0E2E ; [.2DA0.0020.0002][.2DB0.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER HO NOKHUK> 0E44 0E2E ; [.2DA0.0020.0002][.2DB1.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER HO NOKHUK> 0E2F ; [.2DA1.0020.0002] # THAI CHARACTER PAIYANNOI 0E30 ; [.2DA2.0020.0002] # THAI CHARACTER SARA A 0E31 ; [.2DA3.0020.0002] # THAI CHARACTER MAI HAN-AKAT 0E32 ; [.2DA4.0020.0002] # THAI CHARACTER SARA AA 0E33 ; [.2DA5.0020.0002] # THAI CHARACTER SARA AM 0E4D 0E32 ; [.2DA5.0020.0002] # THAI CHARACTER SARA AM 0E34 ; [.2DA6.0020.0002] # THAI CHARACTER SARA I 0E35 ; [.2DA7.0020.0002] # THAI CHARACTER SARA II 0E36 ; [.2DA8.0020.0002] # THAI CHARACTER SARA UE 0E37 ; [.2DA9.0020.0002] # THAI CHARACTER SARA UEE 0E38 ; [.2DAA.0020.0002] # THAI CHARACTER SARA U 0E39 ; [.2DAB.0020.0002] # THAI CHARACTER SARA UU 0E3A ; [.2DAC.0020.0002] # THAI CHARACTER PHINTHU 0E40 ; [.2DAD.0020.0002] # THAI CHARACTER SARA E 0E41 ; [.2DAE.0020.0002] # THAI CHARACTER SARA AE 0E42 ; [.2DAF.0020.0002] # THAI CHARACTER SARA O 0E43 ; [.2DB0.0020.0002] # THAI CHARACTER SARA AI MAIMUAN 0E44 ; [.2DB1.0020.0002] # THAI CHARACTER SARA AI MAIMALAI 0E45 ; [.2DB2.0020.0002] # THAI CHARACTER LAKKHANGYAO 0EDE ; [.2DB3.0020.0002] # LAO LETTER KHMU GO 0EC0 0EDE ; [.2DB3.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHMU GO> 0EC1 0EDE ; [.2DB3.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHMU GO> 0EC2 0EDE ; [.2DB3.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHMU GO> 0EC3 0EDE ; [.2DB3.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHMU GO> 0EC4 0EDE ; [.2DB3.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHMU GO> 0E81 ; [.2DB4.0020.0002] # LAO LETTER KO 0EC0 0E81 ; [.2DB4.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KO> 0EC1 0E81 ; [.2DB4.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KO> 0EC2 0E81 ; [.2DB4.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KO> 0EC3 0E81 ; [.2DB4.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KO> 0EC4 0E81 ; [.2DB4.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KO> 0E82 ; [.2DB5.0020.0002] # LAO LETTER KHO SUNG 0EC0 0E82 ; [.2DB5.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHO SUNG> 0EC1 0E82 ; [.2DB5.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHO SUNG> 0EC2 0E82 ; [.2DB5.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHO SUNG> 0EC3 0E82 ; [.2DB5.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHO SUNG> 0EC4 0E82 ; [.2DB5.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHO SUNG> 0E84 ; [.2DB6.0020.0002] # LAO LETTER KHO TAM 0EC0 0E84 ; [.2DB6.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHO TAM> 0EC1 0E84 ; [.2DB6.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHO TAM> 0EC2 0E84 ; [.2DB6.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHO TAM> 0EC3 0E84 ; [.2DB6.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHO TAM> 0EC4 0E84 ; [.2DB6.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHO TAM> 0E87 ; [.2DB7.0020.0002] # LAO LETTER NGO 0EC0 0E87 ; [.2DB7.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NGO> 0EC1 0E87 ; [.2DB7.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NGO> 0EC2 0E87 ; [.2DB7.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NGO> 0EC3 0E87 ; [.2DB7.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NGO> 0EC4 0E87 ; [.2DB7.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NGO> 0E88 ; [.2DB8.0020.0002] # LAO LETTER CO 0EC0 0E88 ; [.2DB8.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER CO> 0EC1 0E88 ; [.2DB8.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER CO> 0EC2 0E88 ; [.2DB8.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER CO> 0EC3 0E88 ; [.2DB8.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER CO> 0EC4 0E88 ; [.2DB8.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER CO> 0EAA ; [.2DB9.0020.0002] # LAO LETTER SO SUNG 0EC0 0EAA ; [.2DB9.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SO SUNG> 0EC1 0EAA ; [.2DB9.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SO SUNG> 0EC2 0EAA ; [.2DB9.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SO SUNG> 0EC3 0EAA ; [.2DB9.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SO SUNG> 0EC4 0EAA ; [.2DB9.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SO SUNG> 0E8A ; [.2DBA.0020.0002] # LAO LETTER SO TAM 0EC0 0E8A ; [.2DBA.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SO TAM> 0EC1 0E8A ; [.2DBA.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SO TAM> 0EC2 0E8A ; [.2DBA.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SO TAM> 0EC3 0E8A ; [.2DBA.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SO TAM> 0EC4 0E8A ; [.2DBA.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SO TAM> 0EDF ; [.2DBB.0020.0002] # LAO LETTER KHMU NYO 0EC0 0EDF ; [.2DBB.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHMU NYO> 0EC1 0EDF ; [.2DBB.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHMU NYO> 0EC2 0EDF ; [.2DBB.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHMU NYO> 0EC3 0EDF ; [.2DBB.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHMU NYO> 0EC4 0EDF ; [.2DBB.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHMU NYO> 0E8D ; [.2DBC.0020.0002] # LAO LETTER NYO 0EC0 0E8D ; [.2DBC.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NYO> 0EC1 0E8D ; [.2DBC.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NYO> 0EC2 0E8D ; [.2DBC.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NYO> 0EC3 0E8D ; [.2DBC.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NYO> 0EC4 0E8D ; [.2DBC.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NYO> 0E94 ; [.2DBD.0020.0002] # LAO LETTER DO 0EC0 0E94 ; [.2DBD.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER DO> 0EC1 0E94 ; [.2DBD.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER DO> 0EC2 0E94 ; [.2DBD.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER DO> 0EC3 0E94 ; [.2DBD.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER DO> 0EC4 0E94 ; [.2DBD.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER DO> 0E95 ; [.2DBE.0020.0002] # LAO LETTER TO 0EC0 0E95 ; [.2DBE.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER TO> 0EC1 0E95 ; [.2DBE.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER TO> 0EC2 0E95 ; [.2DBE.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER TO> 0EC3 0E95 ; [.2DBE.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER TO> 0EC4 0E95 ; [.2DBE.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER TO> 0E96 ; [.2DBF.0020.0002] # LAO LETTER THO SUNG 0EC0 0E96 ; [.2DBF.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER THO SUNG> 0EC1 0E96 ; [.2DBF.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER THO SUNG> 0EC2 0E96 ; [.2DBF.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER THO SUNG> 0EC3 0E96 ; [.2DBF.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER THO SUNG> 0EC4 0E96 ; [.2DBF.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER THO SUNG> 0E97 ; [.2DC0.0020.0002] # LAO LETTER THO TAM 0EC0 0E97 ; [.2DC0.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER THO TAM> 0EC1 0E97 ; [.2DC0.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER THO TAM> 0EC2 0E97 ; [.2DC0.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER THO TAM> 0EC3 0E97 ; [.2DC0.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER THO TAM> 0EC4 0E97 ; [.2DC0.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER THO TAM> 0E99 ; [.2DC1.0020.0002] # LAO LETTER NO 0EC0 0E99 ; [.2DC1.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NO> 0EC1 0E99 ; [.2DC1.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NO> 0EC2 0E99 ; [.2DC1.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NO> 0EC3 0E99 ; [.2DC1.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NO> 0EC4 0E99 ; [.2DC1.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NO> 0E9A ; [.2DC2.0020.0002] # LAO LETTER BO 0EC0 0E9A ; [.2DC2.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER BO> 0EC1 0E9A ; [.2DC2.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER BO> 0EC2 0E9A ; [.2DC2.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER BO> 0EC3 0E9A ; [.2DC2.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER BO> 0EC4 0E9A ; [.2DC2.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER BO> 0E9B ; [.2DC3.0020.0002] # LAO LETTER PO 0EC0 0E9B ; [.2DC3.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PO> 0EC1 0E9B ; [.2DC3.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PO> 0EC2 0E9B ; [.2DC3.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PO> 0EC3 0E9B ; [.2DC3.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PO> 0EC4 0E9B ; [.2DC3.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PO> 0E9C ; [.2DC4.0020.0002] # LAO LETTER PHO SUNG 0EC0 0E9C ; [.2DC4.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PHO SUNG> 0EC1 0E9C ; [.2DC4.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PHO SUNG> 0EC2 0E9C ; [.2DC4.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PHO SUNG> 0EC3 0E9C ; [.2DC4.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PHO SUNG> 0EC4 0E9C ; [.2DC4.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PHO SUNG> 0E9D ; [.2DC5.0020.0002] # LAO LETTER FO TAM 0EC0 0E9D ; [.2DC5.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER FO TAM> 0EC1 0E9D ; [.2DC5.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER FO TAM> 0EC2 0E9D ; [.2DC5.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER FO TAM> 0EC3 0E9D ; [.2DC5.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER FO TAM> 0EC4 0E9D ; [.2DC5.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER FO TAM> 0E9E ; [.2DC6.0020.0002] # LAO LETTER PHO TAM 0EC0 0E9E ; [.2DC6.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PHO TAM> 0EC1 0E9E ; [.2DC6.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PHO TAM> 0EC2 0E9E ; [.2DC6.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PHO TAM> 0EC3 0E9E ; [.2DC6.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PHO TAM> 0EC4 0E9E ; [.2DC6.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PHO TAM> 0E9F ; [.2DC7.0020.0002] # LAO LETTER FO SUNG 0EC0 0E9F ; [.2DC7.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER FO SUNG> 0EC1 0E9F ; [.2DC7.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER FO SUNG> 0EC2 0E9F ; [.2DC7.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER FO SUNG> 0EC3 0E9F ; [.2DC7.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER FO SUNG> 0EC4 0E9F ; [.2DC7.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER FO SUNG> 0EA1 ; [.2DC8.0020.0002] # LAO LETTER MO 0EC0 0EA1 ; [.2DC8.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER MO> 0EC1 0EA1 ; [.2DC8.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER MO> 0EC2 0EA1 ; [.2DC8.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER MO> 0EC3 0EA1 ; [.2DC8.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER MO> 0EC4 0EA1 ; [.2DC8.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER MO> 0EA2 ; [.2DC9.0020.0002] # LAO LETTER YO 0EC0 0EA2 ; [.2DC9.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER YO> 0EC1 0EA2 ; [.2DC9.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER YO> 0EC2 0EA2 ; [.2DC9.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER YO> 0EC3 0EA2 ; [.2DC9.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER YO> 0EC4 0EA2 ; [.2DC9.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER YO> 0EA3 ; [.2DCA.0020.0002] # LAO LETTER LO LING 0EC0 0EA3 ; [.2DCA.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER LO LING> 0EC1 0EA3 ; [.2DCA.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER LO LING> 0EC2 0EA3 ; [.2DCA.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER LO LING> 0EC3 0EA3 ; [.2DCA.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER LO LING> 0EC4 0EA3 ; [.2DCA.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER LO LING> 0EA5 ; [.2DCB.0020.0002] # LAO LETTER LO LOOT 0EC0 0EA5 ; [.2DCB.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER LO LOOT> 0EC1 0EA5 ; [.2DCB.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER LO LOOT> 0EC2 0EA5 ; [.2DCB.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER LO LOOT> 0EC3 0EA5 ; [.2DCB.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER LO LOOT> 0EC4 0EA5 ; [.2DCB.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER LO LOOT> 0EA7 ; [.2DCC.0020.0002] # LAO LETTER WO 0EC0 0EA7 ; [.2DCC.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER WO> 0EC1 0EA7 ; [.2DCC.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER WO> 0EC2 0EA7 ; [.2DCC.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER WO> 0EC3 0EA7 ; [.2DCC.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER WO> 0EC4 0EA7 ; [.2DCC.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER WO> 0EAB ; [.2DCD.0020.0002] # LAO LETTER HO SUNG 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004] # LAO HO NO 0EC0 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO HO NO> 0EC1 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO HO NO> 0EC2 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO HO NO> 0EC3 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO HO NO> 0EC4 0EDC ; [.2DCD.0020.0004][.2DC1.0020.0004][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO HO NO> 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004] # LAO HO MO 0EC0 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO HO MO> 0EC1 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO HO MO> 0EC2 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO HO MO> 0EC3 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO HO MO> 0EC4 0EDD ; [.2DCD.0020.0004][.2DC8.0020.0004][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO HO MO> 0EC0 0EAB ; [.2DCD.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER HO SUNG> 0EC1 0EAB ; [.2DCD.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER HO SUNG> 0EC2 0EAB ; [.2DCD.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER HO SUNG> 0EC3 0EAB ; [.2DCD.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER HO SUNG> 0EC4 0EAB ; [.2DCD.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER HO SUNG> 0EAD ; [.2DCE.0020.0002] # LAO LETTER O 0EC0 0EAD ; [.2DCE.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER O> 0EC1 0EAD ; [.2DCE.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER O> 0EC2 0EAD ; [.2DCE.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER O> 0EC3 0EAD ; [.2DCE.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER O> 0EC4 0EAD ; [.2DCE.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER O> 0EAE ; [.2DCF.0020.0002] # LAO LETTER HO TAM 0EC0 0EAE ; [.2DCF.0020.0002][.2DDE.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER HO TAM> 0EC1 0EAE ; [.2DCF.0020.0002][.2DDF.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER HO TAM> 0EC2 0EAE ; [.2DCF.0020.0002][.2DE0.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER HO TAM> 0EC3 0EAE ; [.2DCF.0020.0002][.2DE1.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER HO TAM> 0EC4 0EAE ; [.2DCF.0020.0002][.2DE2.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER HO TAM> 0EAF ; [.2DD0.0020.0002] # LAO ELLIPSIS 0EB0 ; [.2DD1.0020.0002] # LAO VOWEL SIGN A 0EB1 ; [.2DD2.0020.0002] # LAO VOWEL SIGN MAI KAN 0EB2 ; [.2DD3.0020.0002] # LAO VOWEL SIGN AA 0EB3 ; [.2DD4.0020.0002] # LAO VOWEL SIGN AM 0ECD 0EB2 ; [.2DD4.0020.0002] # LAO VOWEL SIGN AM 0EB4 ; [.2DD5.0020.0002] # LAO VOWEL SIGN I 0EB5 ; [.2DD6.0020.0002] # LAO VOWEL SIGN II 0EB6 ; [.2DD7.0020.0002] # LAO VOWEL SIGN Y 0EB7 ; [.2DD8.0020.0002] # LAO VOWEL SIGN YY 0EB8 ; [.2DD9.0020.0002] # LAO VOWEL SIGN U 0EB9 ; [.2DDA.0020.0002] # LAO VOWEL SIGN UU 0EBB ; [.2DDB.0020.0002] # LAO VOWEL SIGN MAI KON 0EBC ; [.2DDC.0020.0002] # LAO SEMIVOWEL SIGN LO 0EBD ; [.2DDD.0020.0002] # LAO SEMIVOWEL SIGN NYO 0EC0 ; [.2DDE.0020.0002] # LAO VOWEL SIGN E 0EC1 ; [.2DDF.0020.0002] # LAO VOWEL SIGN EI 0EC2 ; [.2DE0.0020.0002] # LAO VOWEL SIGN O 0EC3 ; [.2DE1.0020.0002] # LAO VOWEL SIGN AY 0EC4 ; [.2DE2.0020.0002] # LAO VOWEL SIGN AI AA80 ; [.2DE3.0020.0002] # TAI VIET LETTER LOW KO AAB5 AA80 ; [.2DE3.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KO> AAB6 AA80 ; [.2DE3.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KO> AAB9 AA80 ; [.2DE3.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KO> AABB AA80 ; [.2DE3.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KO> AABC AA80 ; [.2DE3.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KO> AA81 ; [.2DE4.0020.0002] # TAI VIET LETTER HIGH KO AAB5 AA81 ; [.2DE4.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KO> AAB6 AA81 ; [.2DE4.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KO> AAB9 AA81 ; [.2DE4.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KO> AABB AA81 ; [.2DE4.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KO> AABC AA81 ; [.2DE4.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KO> AA82 ; [.2DE5.0020.0002] # TAI VIET LETTER LOW KHO AAB5 AA82 ; [.2DE5.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KHO> AAB6 AA82 ; [.2DE5.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KHO> AAB9 AA82 ; [.2DE5.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KHO> AABB AA82 ; [.2DE5.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KHO> AABC AA82 ; [.2DE5.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KHO> AA83 ; [.2DE6.0020.0002] # TAI VIET LETTER HIGH KHO AAB5 AA83 ; [.2DE6.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KHO> AAB6 AA83 ; [.2DE6.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KHO> AAB9 AA83 ; [.2DE6.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KHO> AABB AA83 ; [.2DE6.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KHO> AABC AA83 ; [.2DE6.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KHO> AA84 ; [.2DE7.0020.0002] # TAI VIET LETTER LOW KHHO AAB5 AA84 ; [.2DE7.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KHHO> AAB6 AA84 ; [.2DE7.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KHHO> AAB9 AA84 ; [.2DE7.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KHHO> AABB AA84 ; [.2DE7.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KHHO> AABC AA84 ; [.2DE7.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KHHO> AA85 ; [.2DE8.0020.0002] # TAI VIET LETTER HIGH KHHO AAB5 AA85 ; [.2DE8.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KHHO> AAB6 AA85 ; [.2DE8.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KHHO> AAB9 AA85 ; [.2DE8.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KHHO> AABB AA85 ; [.2DE8.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KHHO> AABC AA85 ; [.2DE8.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KHHO> AA86 ; [.2DE9.0020.0002] # TAI VIET LETTER LOW GO AAB5 AA86 ; [.2DE9.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW GO> AAB6 AA86 ; [.2DE9.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW GO> AAB9 AA86 ; [.2DE9.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW GO> AABB AA86 ; [.2DE9.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW GO> AABC AA86 ; [.2DE9.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW GO> AA87 ; [.2DEA.0020.0002] # TAI VIET LETTER HIGH GO AAB5 AA87 ; [.2DEA.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH GO> AAB6 AA87 ; [.2DEA.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH GO> AAB9 AA87 ; [.2DEA.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH GO> AABB AA87 ; [.2DEA.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH GO> AABC AA87 ; [.2DEA.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH GO> AA88 ; [.2DEB.0020.0002] # TAI VIET LETTER LOW NGO AAB5 AA88 ; [.2DEB.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NGO> AAB6 AA88 ; [.2DEB.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NGO> AAB9 AA88 ; [.2DEB.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NGO> AABB AA88 ; [.2DEB.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NGO> AABC AA88 ; [.2DEB.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NGO> AA89 ; [.2DEC.0020.0002] # TAI VIET LETTER HIGH NGO AAB5 AA89 ; [.2DEC.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NGO> AAB6 AA89 ; [.2DEC.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NGO> AAB9 AA89 ; [.2DEC.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NGO> AABB AA89 ; [.2DEC.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NGO> AABC AA89 ; [.2DEC.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NGO> AA8A ; [.2DED.0020.0002] # TAI VIET LETTER LOW CO AAB5 AA8A ; [.2DED.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW CO> AAB6 AA8A ; [.2DED.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW CO> AAB9 AA8A ; [.2DED.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW CO> AABB AA8A ; [.2DED.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW CO> AABC AA8A ; [.2DED.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW CO> AA8B ; [.2DEE.0020.0002] # TAI VIET LETTER HIGH CO AAB5 AA8B ; [.2DEE.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH CO> AAB6 AA8B ; [.2DEE.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH CO> AAB9 AA8B ; [.2DEE.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH CO> AABB AA8B ; [.2DEE.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH CO> AABC AA8B ; [.2DEE.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH CO> AA8C ; [.2DEF.0020.0002] # TAI VIET LETTER LOW CHO AAB5 AA8C ; [.2DEF.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW CHO> AAB6 AA8C ; [.2DEF.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW CHO> AAB9 AA8C ; [.2DEF.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW CHO> AABB AA8C ; [.2DEF.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW CHO> AABC AA8C ; [.2DEF.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW CHO> AA8D ; [.2DF0.0020.0002] # TAI VIET LETTER HIGH CHO AAB5 AA8D ; [.2DF0.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH CHO> AAB6 AA8D ; [.2DF0.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH CHO> AAB9 AA8D ; [.2DF0.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH CHO> AABB AA8D ; [.2DF0.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH CHO> AABC AA8D ; [.2DF0.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH CHO> AA8E ; [.2DF1.0020.0002] # TAI VIET LETTER LOW SO AAB5 AA8E ; [.2DF1.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW SO> AAB6 AA8E ; [.2DF1.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW SO> AAB9 AA8E ; [.2DF1.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW SO> AABB AA8E ; [.2DF1.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW SO> AABC AA8E ; [.2DF1.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW SO> AA8F ; [.2DF2.0020.0002] # TAI VIET LETTER HIGH SO AAB5 AA8F ; [.2DF2.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH SO> AAB6 AA8F ; [.2DF2.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH SO> AAB9 AA8F ; [.2DF2.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH SO> AABB AA8F ; [.2DF2.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH SO> AABC AA8F ; [.2DF2.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH SO> AA90 ; [.2DF3.0020.0002] # TAI VIET LETTER LOW NYO AAB5 AA90 ; [.2DF3.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NYO> AAB6 AA90 ; [.2DF3.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NYO> AAB9 AA90 ; [.2DF3.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NYO> AABB AA90 ; [.2DF3.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NYO> AABC AA90 ; [.2DF3.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NYO> AA91 ; [.2DF4.0020.0002] # TAI VIET LETTER HIGH NYO AAB5 AA91 ; [.2DF4.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NYO> AAB6 AA91 ; [.2DF4.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NYO> AAB9 AA91 ; [.2DF4.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NYO> AABB AA91 ; [.2DF4.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NYO> AABC AA91 ; [.2DF4.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NYO> AA92 ; [.2DF5.0020.0002] # TAI VIET LETTER LOW DO AAB5 AA92 ; [.2DF5.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW DO> AAB6 AA92 ; [.2DF5.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW DO> AAB9 AA92 ; [.2DF5.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW DO> AABB AA92 ; [.2DF5.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW DO> AABC AA92 ; [.2DF5.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW DO> AA93 ; [.2DF6.0020.0002] # TAI VIET LETTER HIGH DO AAB5 AA93 ; [.2DF6.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH DO> AAB6 AA93 ; [.2DF6.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH DO> AAB9 AA93 ; [.2DF6.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH DO> AABB AA93 ; [.2DF6.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH DO> AABC AA93 ; [.2DF6.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH DO> AA94 ; [.2DF7.0020.0002] # TAI VIET LETTER LOW TO AAB5 AA94 ; [.2DF7.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW TO> AAB6 AA94 ; [.2DF7.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW TO> AAB9 AA94 ; [.2DF7.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW TO> AABB AA94 ; [.2DF7.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW TO> AABC AA94 ; [.2DF7.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW TO> AA95 ; [.2DF8.0020.0002] # TAI VIET LETTER HIGH TO AAB5 AA95 ; [.2DF8.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH TO> AAB6 AA95 ; [.2DF8.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH TO> AAB9 AA95 ; [.2DF8.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH TO> AABB AA95 ; [.2DF8.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH TO> AABC AA95 ; [.2DF8.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH TO> AA96 ; [.2DF9.0020.0002] # TAI VIET LETTER LOW THO AAB5 AA96 ; [.2DF9.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW THO> AAB6 AA96 ; [.2DF9.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW THO> AAB9 AA96 ; [.2DF9.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW THO> AABB AA96 ; [.2DF9.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW THO> AABC AA96 ; [.2DF9.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW THO> AA97 ; [.2DFA.0020.0002] # TAI VIET LETTER HIGH THO AAB5 AA97 ; [.2DFA.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH THO> AAB6 AA97 ; [.2DFA.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH THO> AAB9 AA97 ; [.2DFA.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH THO> AABB AA97 ; [.2DFA.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH THO> AABC AA97 ; [.2DFA.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH THO> AA98 ; [.2DFB.0020.0002] # TAI VIET LETTER LOW NO AAB5 AA98 ; [.2DFB.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NO> AAB6 AA98 ; [.2DFB.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NO> AAB9 AA98 ; [.2DFB.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NO> AABB AA98 ; [.2DFB.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NO> AABC AA98 ; [.2DFB.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NO> AA99 ; [.2DFC.0020.0002] # TAI VIET LETTER HIGH NO AAB5 AA99 ; [.2DFC.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NO> AAB6 AA99 ; [.2DFC.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NO> AAB9 AA99 ; [.2DFC.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NO> AABB AA99 ; [.2DFC.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NO> AABC AA99 ; [.2DFC.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NO> AA9A ; [.2DFD.0020.0002] # TAI VIET LETTER LOW BO AAB5 AA9A ; [.2DFD.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW BO> AAB6 AA9A ; [.2DFD.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW BO> AAB9 AA9A ; [.2DFD.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW BO> AABB AA9A ; [.2DFD.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW BO> AABC AA9A ; [.2DFD.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW BO> AA9B ; [.2DFE.0020.0002] # TAI VIET LETTER HIGH BO AAB5 AA9B ; [.2DFE.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH BO> AAB6 AA9B ; [.2DFE.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH BO> AAB9 AA9B ; [.2DFE.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH BO> AABB AA9B ; [.2DFE.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH BO> AABC AA9B ; [.2DFE.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH BO> AA9C ; [.2DFF.0020.0002] # TAI VIET LETTER LOW PO AAB5 AA9C ; [.2DFF.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW PO> AAB6 AA9C ; [.2DFF.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW PO> AAB9 AA9C ; [.2DFF.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW PO> AABB AA9C ; [.2DFF.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW PO> AABC AA9C ; [.2DFF.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW PO> AA9D ; [.2E00.0020.0002] # TAI VIET LETTER HIGH PO AAB5 AA9D ; [.2E00.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH PO> AAB6 AA9D ; [.2E00.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH PO> AAB9 AA9D ; [.2E00.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH PO> AABB AA9D ; [.2E00.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH PO> AABC AA9D ; [.2E00.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH PO> AA9E ; [.2E01.0020.0002] # TAI VIET LETTER LOW PHO AAB5 AA9E ; [.2E01.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW PHO> AAB6 AA9E ; [.2E01.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW PHO> AAB9 AA9E ; [.2E01.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW PHO> AABB AA9E ; [.2E01.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW PHO> AABC AA9E ; [.2E01.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW PHO> AA9F ; [.2E02.0020.0002] # TAI VIET LETTER HIGH PHO AAB5 AA9F ; [.2E02.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH PHO> AAB6 AA9F ; [.2E02.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH PHO> AAB9 AA9F ; [.2E02.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH PHO> AABB AA9F ; [.2E02.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH PHO> AABC AA9F ; [.2E02.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH PHO> AAA0 ; [.2E03.0020.0002] # TAI VIET LETTER LOW FO AAB5 AAA0 ; [.2E03.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW FO> AAB6 AAA0 ; [.2E03.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW FO> AAB9 AAA0 ; [.2E03.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW FO> AABB AAA0 ; [.2E03.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW FO> AABC AAA0 ; [.2E03.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW FO> AAA1 ; [.2E04.0020.0002] # TAI VIET LETTER HIGH FO AAB5 AAA1 ; [.2E04.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH FO> AAB6 AAA1 ; [.2E04.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH FO> AAB9 AAA1 ; [.2E04.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH FO> AABB AAA1 ; [.2E04.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH FO> AABC AAA1 ; [.2E04.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH FO> AAA2 ; [.2E05.0020.0002] # TAI VIET LETTER LOW MO AAB5 AAA2 ; [.2E05.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW MO> AAB6 AAA2 ; [.2E05.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW MO> AAB9 AAA2 ; [.2E05.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW MO> AABB AAA2 ; [.2E05.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW MO> AABC AAA2 ; [.2E05.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW MO> AAA3 ; [.2E06.0020.0002] # TAI VIET LETTER HIGH MO AAB5 AAA3 ; [.2E06.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH MO> AAB6 AAA3 ; [.2E06.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH MO> AAB9 AAA3 ; [.2E06.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH MO> AABB AAA3 ; [.2E06.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH MO> AABC AAA3 ; [.2E06.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH MO> AAA4 ; [.2E07.0020.0002] # TAI VIET LETTER LOW YO AAB5 AAA4 ; [.2E07.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW YO> AAB6 AAA4 ; [.2E07.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW YO> AAB9 AAA4 ; [.2E07.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW YO> AABB AAA4 ; [.2E07.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW YO> AABC AAA4 ; [.2E07.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW YO> AAA5 ; [.2E08.0020.0002] # TAI VIET LETTER HIGH YO AAB5 AAA5 ; [.2E08.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH YO> AAB6 AAA5 ; [.2E08.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH YO> AAB9 AAA5 ; [.2E08.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH YO> AABB AAA5 ; [.2E08.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH YO> AABC AAA5 ; [.2E08.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH YO> AAA6 ; [.2E09.0020.0002] # TAI VIET LETTER LOW RO AAB5 AAA6 ; [.2E09.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW RO> AAB6 AAA6 ; [.2E09.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW RO> AAB9 AAA6 ; [.2E09.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW RO> AABB AAA6 ; [.2E09.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW RO> AABC AAA6 ; [.2E09.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW RO> AAA7 ; [.2E0A.0020.0002] # TAI VIET LETTER HIGH RO AAB5 AAA7 ; [.2E0A.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH RO> AAB6 AAA7 ; [.2E0A.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH RO> AAB9 AAA7 ; [.2E0A.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH RO> AABB AAA7 ; [.2E0A.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH RO> AABC AAA7 ; [.2E0A.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH RO> AAA8 ; [.2E0B.0020.0002] # TAI VIET LETTER LOW LO AAB5 AAA8 ; [.2E0B.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW LO> AAB6 AAA8 ; [.2E0B.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW LO> AAB9 AAA8 ; [.2E0B.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW LO> AABB AAA8 ; [.2E0B.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW LO> AABC AAA8 ; [.2E0B.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW LO> AAA9 ; [.2E0C.0020.0002] # TAI VIET LETTER HIGH LO AAB5 AAA9 ; [.2E0C.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH LO> AAB6 AAA9 ; [.2E0C.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH LO> AAB9 AAA9 ; [.2E0C.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH LO> AABB AAA9 ; [.2E0C.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH LO> AABC AAA9 ; [.2E0C.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH LO> AAAA ; [.2E0D.0020.0002] # TAI VIET LETTER LOW VO AAB5 AAAA ; [.2E0D.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW VO> AAB6 AAAA ; [.2E0D.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW VO> AAB9 AAAA ; [.2E0D.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW VO> AABB AAAA ; [.2E0D.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW VO> AABC AAAA ; [.2E0D.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW VO> AAAB ; [.2E0E.0020.0002] # TAI VIET LETTER HIGH VO AAB5 AAAB ; [.2E0E.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH VO> AAB6 AAAB ; [.2E0E.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH VO> AAB9 AAAB ; [.2E0E.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH VO> AABB AAAB ; [.2E0E.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH VO> AABC AAAB ; [.2E0E.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH VO> AAAC ; [.2E0F.0020.0002] # TAI VIET LETTER LOW HO AAB5 AAAC ; [.2E0F.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW HO> AAB6 AAAC ; [.2E0F.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW HO> AAB9 AAAC ; [.2E0F.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW HO> AABB AAAC ; [.2E0F.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW HO> AABC AAAC ; [.2E0F.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW HO> AAAD ; [.2E10.0020.0002] # TAI VIET LETTER HIGH HO AAB5 AAAD ; [.2E10.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH HO> AAB6 AAAD ; [.2E10.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH HO> AAB9 AAAD ; [.2E10.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH HO> AABB AAAD ; [.2E10.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH HO> AABC AAAD ; [.2E10.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH HO> AAAE ; [.2E11.0020.0002] # TAI VIET LETTER LOW O AAB5 AAAE ; [.2E11.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW O> AAB6 AAAE ; [.2E11.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW O> AAB9 AAAE ; [.2E11.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW O> AABB AAAE ; [.2E11.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW O> AABC AAAE ; [.2E11.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW O> AAAF ; [.2E12.0020.0002] # TAI VIET LETTER HIGH O AAB5 AAAF ; [.2E12.0020.0002][.2E18.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH O> AAB6 AAAF ; [.2E12.0020.0002][.2E19.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH O> AAB9 AAAF ; [.2E12.0020.0002][.2E1C.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH O> AABB AAAF ; [.2E12.0020.0002][.2E1E.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH O> AABC AAAF ; [.2E12.0020.0002][.2E1F.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH O> AAB0 ; [.2E13.0020.0002] # TAI VIET MAI KANG AAB1 ; [.2E14.0020.0002] # TAI VIET VOWEL AA AAB2 ; [.2E15.0020.0002] # TAI VIET VOWEL I AAB3 ; [.2E16.0020.0002] # TAI VIET VOWEL UE AAB4 ; [.2E17.0020.0002] # TAI VIET VOWEL U AAB5 ; [.2E18.0020.0002] # TAI VIET VOWEL E AAB6 ; [.2E19.0020.0002] # TAI VIET VOWEL O AAB7 ; [.2E1A.0020.0002] # TAI VIET MAI KHIT AAB8 ; [.2E1B.0020.0002] # TAI VIET VOWEL IA AAB9 ; [.2E1C.0020.0002] # TAI VIET VOWEL UEA AABA ; [.2E1D.0020.0002] # TAI VIET VOWEL UA AABB ; [.2E1E.0020.0002] # TAI VIET VOWEL AUE AABC ; [.2E1F.0020.0002] # TAI VIET VOWEL AY AABD ; [.2E20.0020.0002] # TAI VIET VOWEL AN AABE ; [.2E21.0020.0002] # TAI VIET VOWEL AM AAC0 ; [.2E22.0020.0002] # TAI VIET TONE MAI NUENG AAC2 ; [.2E23.0020.0002] # TAI VIET TONE MAI SONG AADB ; [.2E24.0020.0002] # TAI VIET SYMBOL KON AADC ; [.2E25.0020.0002] # TAI VIET SYMBOL NUENG 0F40 ; [.2E26.0020.0002] # TIBETAN LETTER KA 0F69 ; [.2E26.0020.0002][.2E67.0020.0002] # TIBETAN LETTER KSSA 0F90 ; [.2E27.0020.0002] # TIBETAN SUBJOINED LETTER KA 0FB9 ; [.2E27.0020.0002][.2E67.0020.0002] # TIBETAN SUBJOINED LETTER KSSA 0F6B ; [.2E28.0020.0002] # TIBETAN LETTER KKA 0F41 ; [.2E29.0020.0002] # TIBETAN LETTER KHA 0F91 ; [.2E2A.0020.0002] # TIBETAN SUBJOINED LETTER KHA 0F42 ; [.2E2B.0020.0002] # TIBETAN LETTER GA 0F43 ; [.2E2B.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER GHA 0F92 ; [.2E2C.0020.0002] # TIBETAN SUBJOINED LETTER GA 0F93 ; [.2E2C.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER GHA 0F44 ; [.2E2D.0020.0002] # TIBETAN LETTER NGA 0F94 ; [.2E2E.0020.0002] # TIBETAN SUBJOINED LETTER NGA 0F45 ; [.2E2F.0020.0002] # TIBETAN LETTER CA 0F95 ; [.2E30.0020.0002] # TIBETAN SUBJOINED LETTER CA 0F46 ; [.2E31.0020.0002] # TIBETAN LETTER CHA 0F96 ; [.2E32.0020.0002] # TIBETAN SUBJOINED LETTER CHA 0F47 ; [.2E33.0020.0002] # TIBETAN LETTER JA 0F97 ; [.2E34.0020.0002] # TIBETAN SUBJOINED LETTER JA 0F49 ; [.2E35.0020.0002] # TIBETAN LETTER NYA 0F99 ; [.2E36.0020.0002] # TIBETAN SUBJOINED LETTER NYA 0F4A ; [.2E37.0020.0002] # TIBETAN LETTER TTA 0F9A ; [.2E38.0020.0002] # TIBETAN SUBJOINED LETTER TTA 0F4B ; [.2E39.0020.0002] # TIBETAN LETTER TTHA 0F9B ; [.2E3A.0020.0002] # TIBETAN SUBJOINED LETTER TTHA 0F4C ; [.2E3B.0020.0002] # TIBETAN LETTER DDA 0F4D ; [.2E3B.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER DDHA 0F9C ; [.2E3C.0020.0002] # TIBETAN SUBJOINED LETTER DDA 0F9D ; [.2E3C.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER DDHA 0F4E ; [.2E3D.0020.0002] # TIBETAN LETTER NNA 0F9E ; [.2E3E.0020.0002] # TIBETAN SUBJOINED LETTER NNA 0F4F ; [.2E3F.0020.0002] # TIBETAN LETTER TA 0F9F ; [.2E40.0020.0002] # TIBETAN SUBJOINED LETTER TA 0F50 ; [.2E41.0020.0002] # TIBETAN LETTER THA 0FA0 ; [.2E42.0020.0002] # TIBETAN SUBJOINED LETTER THA 0F51 ; [.2E43.0020.0002] # TIBETAN LETTER DA 0F52 ; [.2E43.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER DHA 0FA1 ; [.2E44.0020.0002] # TIBETAN SUBJOINED LETTER DA 0FA2 ; [.2E44.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER DHA 0F53 ; [.2E45.0020.0002] # TIBETAN LETTER NA 0FA3 ; [.2E46.0020.0002] # TIBETAN SUBJOINED LETTER NA 0F54 ; [.2E47.0020.0002] # TIBETAN LETTER PA 0FA4 ; [.2E48.0020.0002] # TIBETAN SUBJOINED LETTER PA 0F55 ; [.2E49.0020.0002] # TIBETAN LETTER PHA 0FA5 ; [.2E4A.0020.0002] # TIBETAN SUBJOINED LETTER PHA 0F56 ; [.2E4B.0020.0002] # TIBETAN LETTER BA 0F57 ; [.2E4B.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER BHA 0FA6 ; [.2E4C.0020.0002] # TIBETAN SUBJOINED LETTER BA 0FA7 ; [.2E4C.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER BHA 0F58 ; [.2E4D.0020.0002] # TIBETAN LETTER MA 0FA8 ; [.2E4E.0020.0002] # TIBETAN SUBJOINED LETTER MA 0F59 ; [.2E4F.0020.0002] # TIBETAN LETTER TSA 0FA9 ; [.2E50.0020.0002] # TIBETAN SUBJOINED LETTER TSA 0F5A ; [.2E51.0020.0002] # TIBETAN LETTER TSHA 0FAA ; [.2E52.0020.0002] # TIBETAN SUBJOINED LETTER TSHA 0F5B ; [.2E53.0020.0002] # TIBETAN LETTER DZA 0F5C ; [.2E53.0020.0002][.2E6B.0020.0002] # TIBETAN LETTER DZHA 0FAB ; [.2E54.0020.0002] # TIBETAN SUBJOINED LETTER DZA 0FAC ; [.2E54.0020.0002][.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER DZHA 0F5D ; [.2E55.0020.0002] # TIBETAN LETTER WA 0FAD ; [.2E56.0020.0002] # TIBETAN SUBJOINED LETTER WA 0FBA ; [.2E56.0020.0004][.0000.0111.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM WA 0F5E ; [.2E57.0020.0002] # TIBETAN LETTER ZHA 0FAE ; [.2E58.0020.0002] # TIBETAN SUBJOINED LETTER ZHA 0F5F ; [.2E59.0020.0002] # TIBETAN LETTER ZA 0FAF ; [.2E5A.0020.0002] # TIBETAN SUBJOINED LETTER ZA 0F60 ; [.2E5B.0020.0002] # TIBETAN LETTER -A 0FB0 ; [.2E5C.0020.0002] # TIBETAN SUBJOINED LETTER -A 0F61 ; [.2E5D.0020.0002] # TIBETAN LETTER YA 0FB1 ; [.2E5E.0020.0002] # TIBETAN SUBJOINED LETTER YA 0FBB ; [.2E5E.0020.0004][.0000.0111.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM YA 0F62 ; [.2E5F.0020.0002] # TIBETAN LETTER RA 0F6A ; [.2E5F.0020.0004][.0000.0111.0004] # TIBETAN LETTER FIXED-FORM RA 0FB2 ; [.2E60.0020.0002] # TIBETAN SUBJOINED LETTER RA 0FBC ; [.2E60.0020.0004][.0000.0111.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM RA 0F6C ; [.2E61.0020.0002] # TIBETAN LETTER RRA 0F63 ; [.2E62.0020.0002] # TIBETAN LETTER LA 0FB3 ; [.2E63.0020.0002] # TIBETAN SUBJOINED LETTER LA 0F64 ; [.2E64.0020.0002] # TIBETAN LETTER SHA 0FB4 ; [.2E65.0020.0002] # TIBETAN SUBJOINED LETTER SHA 0F65 ; [.2E66.0020.0002] # TIBETAN LETTER SSA 0FB5 ; [.2E67.0020.0002] # TIBETAN SUBJOINED LETTER SSA 0F66 ; [.2E68.0020.0002] # TIBETAN LETTER SA 0FB6 ; [.2E69.0020.0002] # TIBETAN SUBJOINED LETTER SA 0F67 ; [.2E6A.0020.0002] # TIBETAN LETTER HA 0FB7 ; [.2E6B.0020.0002] # TIBETAN SUBJOINED LETTER HA 0F68 ; [.2E6C.0020.0002] # TIBETAN LETTER A 0F00 ; [.2E6C.0020.0004][.2E83.0020.0004][.0000.00C4.0004] # TIBETAN SYLLABLE OM 0FB8 ; [.2E6D.0020.0002] # TIBETAN SUBJOINED LETTER A 0F88 ; [.2E6E.0020.0002] # TIBETAN SIGN LCE TSA CAN 0F8D ; [.2E6F.0020.0002] # TIBETAN SUBJOINED SIGN LCE TSA CAN 0F89 ; [.2E70.0020.0002] # TIBETAN SIGN MCHU CAN 0F8E ; [.2E71.0020.0002] # TIBETAN SUBJOINED SIGN MCHU CAN 0F8C ; [.2E72.0020.0002] # TIBETAN SIGN INVERTED MCHU CAN 0F8F ; [.2E73.0020.0002] # TIBETAN SUBJOINED SIGN INVERTED MCHU CAN 0F8A ; [.2E74.0020.0002] # TIBETAN SIGN GRU CAN RGYINGS 0F8B ; [.2E75.0020.0002] # TIBETAN SIGN GRU MED RGYINGS 0F71 ; [.2E76.0020.0002] # TIBETAN VOWEL SIGN AA 0F72 ; [.2E77.0020.0002] # TIBETAN VOWEL SIGN I 0F73 ; [.2E78.0020.0002] # TIBETAN VOWEL SIGN II 0F71 0F72 ; [.2E78.0020.0002] # TIBETAN VOWEL SIGN II 0F80 ; [.2E79.0020.0002] # TIBETAN VOWEL SIGN REVERSED I 0F81 ; [.2E7A.0020.0002] # TIBETAN VOWEL SIGN REVERSED II 0F71 0F80 ; [.2E7A.0020.0002] # TIBETAN VOWEL SIGN REVERSED II 0F74 ; [.2E7B.0020.0002] # TIBETAN VOWEL SIGN U 0F75 ; [.2E7C.0020.0002] # TIBETAN VOWEL SIGN UU 0F71 0F74 ; [.2E7C.0020.0002] # TIBETAN VOWEL SIGN UU 0F76 ; [.2E7D.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R 0FB2 0F80 ; [.2E7D.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R 0F77 ; [.2E7E.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR 0FB2 0F71 0F80 ; [.2E7E.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR 0FB2 0F81 ; [.2E7E.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR 0F78 ; [.2E7F.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L 0FB3 0F80 ; [.2E7F.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L 0F79 ; [.2E80.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL 0FB3 0F71 0F80 ; [.2E80.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL 0FB3 0F81 ; [.2E80.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL 0F7A ; [.2E81.0020.0002] # TIBETAN VOWEL SIGN E 0F7B ; [.2E82.0020.0002] # TIBETAN VOWEL SIGN EE 0F7C ; [.2E83.0020.0002] # TIBETAN VOWEL SIGN O 0F7D ; [.2E84.0020.0002] # TIBETAN VOWEL SIGN OO 0F84 ; [.2E85.0020.0002] # TIBETAN MARK HALANTA 11C72 ; [.2E86.0020.0002] # MARCHEN LETTER KA 11C92 ; [.2E87.0020.0002] # MARCHEN SUBJOINED LETTER KA 11C73 ; [.2E88.0020.0002] # MARCHEN LETTER KHA 11C93 ; [.2E89.0020.0002] # MARCHEN SUBJOINED LETTER KHA 11C74 ; [.2E8A.0020.0002] # MARCHEN LETTER GA 11C94 ; [.2E8B.0020.0002] # MARCHEN SUBJOINED LETTER GA 11C75 ; [.2E8C.0020.0002] # MARCHEN LETTER NGA 11C95 ; [.2E8D.0020.0002] # MARCHEN SUBJOINED LETTER NGA 11C76 ; [.2E8E.0020.0002] # MARCHEN LETTER CA 11C96 ; [.2E8F.0020.0002] # MARCHEN SUBJOINED LETTER CA 11C77 ; [.2E90.0020.0002] # MARCHEN LETTER CHA 11C97 ; [.2E91.0020.0002] # MARCHEN SUBJOINED LETTER CHA 11C78 ; [.2E92.0020.0002] # MARCHEN LETTER JA 11C98 ; [.2E93.0020.0002] # MARCHEN SUBJOINED LETTER JA 11C79 ; [.2E94.0020.0002] # MARCHEN LETTER NYA 11C99 ; [.2E95.0020.0002] # MARCHEN SUBJOINED LETTER NYA 11C7A ; [.2E96.0020.0002] # MARCHEN LETTER TA 11C9A ; [.2E97.0020.0002] # MARCHEN SUBJOINED LETTER TA 11C7B ; [.2E98.0020.0002] # MARCHEN LETTER THA 11C9B ; [.2E99.0020.0002] # MARCHEN SUBJOINED LETTER THA 11C7C ; [.2E9A.0020.0002] # MARCHEN LETTER DA 11C9C ; [.2E9B.0020.0002] # MARCHEN SUBJOINED LETTER DA 11C7D ; [.2E9C.0020.0002] # MARCHEN LETTER NA 11C9D ; [.2E9D.0020.0002] # MARCHEN SUBJOINED LETTER NA 11C7E ; [.2E9E.0020.0002] # MARCHEN LETTER PA 11C9E ; [.2E9F.0020.0002] # MARCHEN SUBJOINED LETTER PA 11C7F ; [.2EA0.0020.0002] # MARCHEN LETTER PHA 11C9F ; [.2EA1.0020.0002] # MARCHEN SUBJOINED LETTER PHA 11C80 ; [.2EA2.0020.0002] # MARCHEN LETTER BA 11CA0 ; [.2EA3.0020.0002] # MARCHEN SUBJOINED LETTER BA 11C81 ; [.2EA4.0020.0002] # MARCHEN LETTER MA 11CA1 ; [.2EA5.0020.0002] # MARCHEN SUBJOINED LETTER MA 11C82 ; [.2EA6.0020.0002] # MARCHEN LETTER TSA 11CA2 ; [.2EA7.0020.0002] # MARCHEN SUBJOINED LETTER TSA 11C83 ; [.2EA8.0020.0002] # MARCHEN LETTER TSHA 11CA3 ; [.2EA9.0020.0002] # MARCHEN SUBJOINED LETTER TSHA 11C84 ; [.2EAA.0020.0002] # MARCHEN LETTER DZA 11CA4 ; [.2EAB.0020.0002] # MARCHEN SUBJOINED LETTER DZA 11C85 ; [.2EAC.0020.0002] # MARCHEN LETTER WA 11CA5 ; [.2EAD.0020.0002] # MARCHEN SUBJOINED LETTER WA 11C86 ; [.2EAE.0020.0002] # MARCHEN LETTER ZHA 11CA6 ; [.2EAF.0020.0002] # MARCHEN SUBJOINED LETTER ZHA 11C87 ; [.2EB0.0020.0002] # MARCHEN LETTER ZA 11CA7 ; [.2EB1.0020.0002] # MARCHEN SUBJOINED LETTER ZA 11C88 ; [.2EB2.0020.0002] # MARCHEN LETTER -A 11C89 ; [.2EB3.0020.0002] # MARCHEN LETTER YA 11CA9 ; [.2EB4.0020.0002] # MARCHEN SUBJOINED LETTER YA 11C8A ; [.2EB5.0020.0002] # MARCHEN LETTER RA 11CAA ; [.2EB6.0020.0002] # MARCHEN SUBJOINED LETTER RA 11C8B ; [.2EB7.0020.0002] # MARCHEN LETTER LA 11CAB ; [.2EB8.0020.0002] # MARCHEN SUBJOINED LETTER LA 11C8C ; [.2EB9.0020.0002] # MARCHEN LETTER SHA 11CAC ; [.2EBA.0020.0002] # MARCHEN SUBJOINED LETTER SHA 11C8D ; [.2EBB.0020.0002] # MARCHEN LETTER SA 11CAD ; [.2EBC.0020.0002] # MARCHEN SUBJOINED LETTER SA 11C8E ; [.2EBD.0020.0002] # MARCHEN LETTER HA 11CAE ; [.2EBE.0020.0002] # MARCHEN SUBJOINED LETTER HA 11C8F ; [.2EBF.0020.0002] # MARCHEN LETTER A 11CAF ; [.2EC0.0020.0002] # MARCHEN SUBJOINED LETTER A 11CB0 ; [.2EC1.0020.0002] # MARCHEN VOWEL SIGN AA 11CB1 ; [.2EC2.0020.0002] # MARCHEN VOWEL SIGN I 11CB2 ; [.2EC3.0020.0002] # MARCHEN VOWEL SIGN U 11CB3 ; [.2EC4.0020.0002] # MARCHEN VOWEL SIGN E 11CB4 ; [.2EC5.0020.0002] # MARCHEN VOWEL SIGN O 1C00 ; [.2EC6.0020.0002] # LEPCHA LETTER KA 1C01 ; [.2EC7.0020.0002] # LEPCHA LETTER KLA 1C02 ; [.2EC8.0020.0002] # LEPCHA LETTER KHA 1C03 ; [.2EC9.0020.0002] # LEPCHA LETTER GA 1C04 ; [.2ECA.0020.0002] # LEPCHA LETTER GLA 1C05 ; [.2ECB.0020.0002] # LEPCHA LETTER NGA 1C06 ; [.2ECC.0020.0002] # LEPCHA LETTER CA 1C07 ; [.2ECD.0020.0002] # LEPCHA LETTER CHA 1C08 ; [.2ECE.0020.0002] # LEPCHA LETTER JA 1C09 ; [.2ECF.0020.0002] # LEPCHA LETTER NYA 1C4D ; [.2ED0.0020.0002] # LEPCHA LETTER TTA 1C4E ; [.2ED1.0020.0002] # LEPCHA LETTER TTHA 1C4F ; [.2ED2.0020.0002] # LEPCHA LETTER DDA 1C0A ; [.2ED3.0020.0002] # LEPCHA LETTER TA 1C0B ; [.2ED4.0020.0002] # LEPCHA LETTER THA 1C0C ; [.2ED5.0020.0002] # LEPCHA LETTER DA 1C0D ; [.2ED6.0020.0002] # LEPCHA LETTER NA 1C0E ; [.2ED7.0020.0002] # LEPCHA LETTER PA 1C0F ; [.2ED8.0020.0002] # LEPCHA LETTER PLA 1C10 ; [.2ED9.0020.0002] # LEPCHA LETTER PHA 1C11 ; [.2EDA.0020.0002] # LEPCHA LETTER FA 1C12 ; [.2EDB.0020.0002] # LEPCHA LETTER FLA 1C13 ; [.2EDC.0020.0002] # LEPCHA LETTER BA 1C14 ; [.2EDD.0020.0002] # LEPCHA LETTER BLA 1C15 ; [.2EDE.0020.0002] # LEPCHA LETTER MA 1C16 ; [.2EDF.0020.0002] # LEPCHA LETTER MLA 1C17 ; [.2EE0.0020.0002] # LEPCHA LETTER TSA 1C18 ; [.2EE1.0020.0002] # LEPCHA LETTER TSHA 1C19 ; [.2EE2.0020.0002] # LEPCHA LETTER DZA 1C1A ; [.2EE3.0020.0002] # LEPCHA LETTER YA 1C24 ; [.2EE4.0020.0002] # LEPCHA SUBJOINED LETTER YA 1C1B ; [.2EE5.0020.0002] # LEPCHA LETTER RA 1C25 ; [.2EE6.0020.0002] # LEPCHA SUBJOINED LETTER RA 1C1C ; [.2EE7.0020.0002] # LEPCHA LETTER LA 1C1D ; [.2EE8.0020.0002] # LEPCHA LETTER HA 1C1E ; [.2EE9.0020.0002] # LEPCHA LETTER HLA 1C1F ; [.2EEA.0020.0002] # LEPCHA LETTER VA 1C20 ; [.2EEB.0020.0002] # LEPCHA LETTER SA 1C21 ; [.2EEC.0020.0002] # LEPCHA LETTER SHA 1C22 ; [.2EED.0020.0002] # LEPCHA LETTER WA 1C23 ; [.2EEE.0020.0002] # LEPCHA LETTER A 1C36 ; [.2EEF.0020.0002] # LEPCHA SIGN RAN 1C26 ; [.2EF0.0020.0002] # LEPCHA VOWEL SIGN AA 1C27 ; [.2EF1.0020.0002] # LEPCHA VOWEL SIGN I 1C28 ; [.2EF2.0020.0002] # LEPCHA VOWEL SIGN O 1C29 ; [.2EF3.0020.0002] # LEPCHA VOWEL SIGN OO 1C2A ; [.2EF4.0020.0002] # LEPCHA VOWEL SIGN U 1C2B ; [.2EF5.0020.0002] # LEPCHA VOWEL SIGN UU 1C2C ; [.2EF6.0020.0002] # LEPCHA VOWEL SIGN E 1C2D ; [.2EF7.0020.0002] # LEPCHA CONSONANT SIGN K 1C2E ; [.2EF8.0020.0002] # LEPCHA CONSONANT SIGN M 1C2F ; [.2EF9.0020.0002] # LEPCHA CONSONANT SIGN L 1C30 ; [.2EFA.0020.0002] # LEPCHA CONSONANT SIGN N 1C31 ; [.2EFB.0020.0002] # LEPCHA CONSONANT SIGN P 1C32 ; [.2EFC.0020.0002] # LEPCHA CONSONANT SIGN R 1C33 ; [.2EFD.0020.0002] # LEPCHA CONSONANT SIGN T 1C34 ; [.2EFE.0020.0002] # LEPCHA CONSONANT SIGN NYIN-DO 1C35 ; [.2EFF.0020.0002] # LEPCHA CONSONANT SIGN KANG A840 ; [.2F00.0020.0002] # PHAGS-PA LETTER KA A841 ; [.2F01.0020.0002] # PHAGS-PA LETTER KHA A842 ; [.2F02.0020.0002] # PHAGS-PA LETTER GA A843 ; [.2F03.0020.0002] # PHAGS-PA LETTER NGA A844 ; [.2F04.0020.0002] # PHAGS-PA LETTER CA A845 ; [.2F05.0020.0002] # PHAGS-PA LETTER CHA A846 ; [.2F06.0020.0002] # PHAGS-PA LETTER JA A847 ; [.2F07.0020.0002] # PHAGS-PA LETTER NYA A869 ; [.2F08.0020.0002] # PHAGS-PA LETTER TTA A86A ; [.2F09.0020.0002] # PHAGS-PA LETTER TTHA A86B ; [.2F0A.0020.0002] # PHAGS-PA LETTER DDA A86C ; [.2F0B.0020.0002] # PHAGS-PA LETTER NNA A848 ; [.2F0C.0020.0002] # PHAGS-PA LETTER TA A849 ; [.2F0D.0020.0002] # PHAGS-PA LETTER THA A84A ; [.2F0E.0020.0002] # PHAGS-PA LETTER DA A84B ; [.2F0F.0020.0002] # PHAGS-PA LETTER NA A84C ; [.2F10.0020.0002] # PHAGS-PA LETTER PA A84D ; [.2F11.0020.0002] # PHAGS-PA LETTER PHA A84E ; [.2F12.0020.0002] # PHAGS-PA LETTER BA A84F ; [.2F13.0020.0002] # PHAGS-PA LETTER MA A850 ; [.2F14.0020.0002] # PHAGS-PA LETTER TSA A851 ; [.2F15.0020.0002] # PHAGS-PA LETTER TSHA A852 ; [.2F16.0020.0002] # PHAGS-PA LETTER DZA A853 ; [.2F17.0020.0002] # PHAGS-PA LETTER WA A867 ; [.2F18.0020.0002] # PHAGS-PA SUBJOINED LETTER WA A854 ; [.2F19.0020.0002] # PHAGS-PA LETTER ZHA A855 ; [.2F1A.0020.0002] # PHAGS-PA LETTER ZA A856 ; [.2F1B.0020.0002] # PHAGS-PA LETTER SMALL A A857 ; [.2F1C.0020.0002] # PHAGS-PA LETTER YA A868 ; [.2F1D.0020.0002] # PHAGS-PA SUBJOINED LETTER YA A86D ; [.2F1E.0020.0002] # PHAGS-PA LETTER ALTERNATE YA A858 ; [.2F1F.0020.0002] # PHAGS-PA LETTER RA A871 ; [.2F20.0020.0002] # PHAGS-PA SUBJOINED LETTER RA A872 ; [.2F21.0020.0002] # PHAGS-PA SUPERFIXED LETTER RA A859 ; [.2F22.0020.0002] # PHAGS-PA LETTER LA A85A ; [.2F23.0020.0002] # PHAGS-PA LETTER SHA A86E ; [.2F24.0020.0002] # PHAGS-PA LETTER VOICELESS SHA A85B ; [.2F25.0020.0002] # PHAGS-PA LETTER SA A85C ; [.2F26.0020.0002] # PHAGS-PA LETTER HA A86F ; [.2F27.0020.0002] # PHAGS-PA LETTER VOICED HA A870 ; [.2F28.0020.0002] # PHAGS-PA LETTER ASPIRATED FA A85D ; [.2F29.0020.0002] # PHAGS-PA LETTER A A862 ; [.2F2A.0020.0002] # PHAGS-PA LETTER QA A863 ; [.2F2B.0020.0002] # PHAGS-PA LETTER XA A864 ; [.2F2C.0020.0002] # PHAGS-PA LETTER FA A865 ; [.2F2D.0020.0002] # PHAGS-PA LETTER GGA A85E ; [.2F2E.0020.0002] # PHAGS-PA LETTER I A85F ; [.2F2F.0020.0002] # PHAGS-PA LETTER U A860 ; [.2F30.0020.0002] # PHAGS-PA LETTER E A861 ; [.2F31.0020.0002] # PHAGS-PA LETTER O A866 ; [.2F32.0020.0002] # PHAGS-PA LETTER EE A873 ; [.2F33.0020.0002] # PHAGS-PA LETTER CANDRABINDU 1900 ; [.2F34.0020.0002] # LIMBU VOWEL-CARRIER LETTER 1901 ; [.2F35.0020.0002] # LIMBU LETTER KA 1902 ; [.2F36.0020.0002] # LIMBU LETTER KHA 1903 ; [.2F37.0020.0002] # LIMBU LETTER GA 1904 ; [.2F38.0020.0002] # LIMBU LETTER GHA 1905 ; [.2F39.0020.0002] # LIMBU LETTER NGA 1906 ; [.2F3A.0020.0002] # LIMBU LETTER CA 1907 ; [.2F3B.0020.0002] # LIMBU LETTER CHA 1908 ; [.2F3C.0020.0002] # LIMBU LETTER JA 191D ; [.2F3C.0020.0004][.2F5A.0020.0004] # LIMBU LETTER GYAN 1909 ; [.2F3D.0020.0002] # LIMBU LETTER JHA 190A ; [.2F3E.0020.0002] # LIMBU LETTER YAN 190B ; [.2F3F.0020.0002] # LIMBU LETTER TA 191E ; [.2F3F.0020.0004][.2F5B.0020.0004] # LIMBU LETTER TRA 190C ; [.2F40.0020.0002] # LIMBU LETTER THA 190D ; [.2F41.0020.0002] # LIMBU LETTER DA 190E ; [.2F42.0020.0002] # LIMBU LETTER DHA 190F ; [.2F43.0020.0002] # LIMBU LETTER NA 1910 ; [.2F44.0020.0002] # LIMBU LETTER PA 1911 ; [.2F45.0020.0002] # LIMBU LETTER PHA 1912 ; [.2F46.0020.0002] # LIMBU LETTER BA 1913 ; [.2F47.0020.0002] # LIMBU LETTER BHA 1914 ; [.2F48.0020.0002] # LIMBU LETTER MA 1915 ; [.2F49.0020.0002] # LIMBU LETTER YA 1916 ; [.2F4A.0020.0002] # LIMBU LETTER RA 1917 ; [.2F4B.0020.0002] # LIMBU LETTER LA 1918 ; [.2F4C.0020.0002] # LIMBU LETTER WA 1919 ; [.2F4D.0020.0002] # LIMBU LETTER SHA 191A ; [.2F4E.0020.0002] # LIMBU LETTER SSA 191B ; [.2F4F.0020.0002] # LIMBU LETTER SA 191C ; [.2F50.0020.0002] # LIMBU LETTER HA 1920 ; [.2F51.0020.0002] # LIMBU VOWEL SIGN A 1921 ; [.2F52.0020.0002] # LIMBU VOWEL SIGN I 1922 ; [.2F53.0020.0002] # LIMBU VOWEL SIGN U 1923 ; [.2F54.0020.0002] # LIMBU VOWEL SIGN EE 1924 ; [.2F55.0020.0002] # LIMBU VOWEL SIGN AI 1925 ; [.2F56.0020.0002] # LIMBU VOWEL SIGN OO 1926 ; [.2F57.0020.0002] # LIMBU VOWEL SIGN AU 1927 ; [.2F58.0020.0002] # LIMBU VOWEL SIGN E 1928 ; [.2F59.0020.0002] # LIMBU VOWEL SIGN O 1929 ; [.2F5A.0020.0002] # LIMBU SUBJOINED LETTER YA 192A ; [.2F5B.0020.0002] # LIMBU SUBJOINED LETTER RA 192B ; [.2F5C.0020.0002] # LIMBU SUBJOINED LETTER WA 1930 ; [.2F5D.0020.0002] # LIMBU SMALL LETTER KA 1931 ; [.2F5E.0020.0002] # LIMBU SMALL LETTER NGA 1932 ; [.2F5F.0020.0002] # LIMBU SMALL LETTER ANUSVARA 1933 ; [.2F60.0020.0002] # LIMBU SMALL LETTER TA 1934 ; [.2F61.0020.0002] # LIMBU SMALL LETTER NA 1935 ; [.2F62.0020.0002] # LIMBU SMALL LETTER PA 1936 ; [.2F63.0020.0002] # LIMBU SMALL LETTER MA 1937 ; [.2F64.0020.0002] # LIMBU SMALL LETTER RA 1938 ; [.2F65.0020.0002] # LIMBU SMALL LETTER LA 1700 ; [.2F66.0020.0002] # TAGALOG LETTER A 1701 ; [.2F67.0020.0002] # TAGALOG LETTER I 1702 ; [.2F68.0020.0002] # TAGALOG LETTER U 1703 ; [.2F69.0020.0002] # TAGALOG LETTER KA 1704 ; [.2F6A.0020.0002] # TAGALOG LETTER GA 1705 ; [.2F6B.0020.0002] # TAGALOG LETTER NGA 1706 ; [.2F6C.0020.0002] # TAGALOG LETTER TA 1707 ; [.2F6D.0020.0002] # TAGALOG LETTER DA 1708 ; [.2F6E.0020.0002] # TAGALOG LETTER NA 1709 ; [.2F6F.0020.0002] # TAGALOG LETTER PA 170A ; [.2F70.0020.0002] # TAGALOG LETTER BA 170B ; [.2F71.0020.0002] # TAGALOG LETTER MA 170C ; [.2F72.0020.0002] # TAGALOG LETTER YA 170E ; [.2F73.0020.0002] # TAGALOG LETTER LA 170F ; [.2F74.0020.0002] # TAGALOG LETTER WA 1710 ; [.2F75.0020.0002] # TAGALOG LETTER SA 1711 ; [.2F76.0020.0002] # TAGALOG LETTER HA 1712 ; [.2F77.0020.0002] # TAGALOG VOWEL SIGN I 1713 ; [.2F78.0020.0002] # TAGALOG VOWEL SIGN U 1714 ; [.2F79.0020.0002] # TAGALOG SIGN VIRAMA 1720 ; [.2F7A.0020.0002] # HANUNOO LETTER A 1721 ; [.2F7B.0020.0002] # HANUNOO LETTER I 1722 ; [.2F7C.0020.0002] # HANUNOO LETTER U 1723 ; [.2F7D.0020.0002] # HANUNOO LETTER KA 1724 ; [.2F7E.0020.0002] # HANUNOO LETTER GA 1725 ; [.2F7F.0020.0002] # HANUNOO LETTER NGA 1726 ; [.2F80.0020.0002] # HANUNOO LETTER TA 1727 ; [.2F81.0020.0002] # HANUNOO LETTER DA 1728 ; [.2F82.0020.0002] # HANUNOO LETTER NA 1729 ; [.2F83.0020.0002] # HANUNOO LETTER PA 172A ; [.2F84.0020.0002] # HANUNOO LETTER BA 172B ; [.2F85.0020.0002] # HANUNOO LETTER MA 172C ; [.2F86.0020.0002] # HANUNOO LETTER YA 172D ; [.2F87.0020.0002] # HANUNOO LETTER RA 172E ; [.2F88.0020.0002] # HANUNOO LETTER LA 172F ; [.2F89.0020.0002] # HANUNOO LETTER WA 1730 ; [.2F8A.0020.0002] # HANUNOO LETTER SA 1731 ; [.2F8B.0020.0002] # HANUNOO LETTER HA 1732 ; [.2F8C.0020.0002] # HANUNOO VOWEL SIGN I 1733 ; [.2F8D.0020.0002] # HANUNOO VOWEL SIGN U 1734 ; [.2F8E.0020.0002] # HANUNOO SIGN PAMUDPOD 1740 ; [.2F8F.0020.0002] # BUHID LETTER A 1741 ; [.2F90.0020.0002] # BUHID LETTER I 1742 ; [.2F91.0020.0002] # BUHID LETTER U 1743 ; [.2F92.0020.0002] # BUHID LETTER KA 1744 ; [.2F93.0020.0002] # BUHID LETTER GA 1745 ; [.2F94.0020.0002] # BUHID LETTER NGA 1746 ; [.2F95.0020.0002] # BUHID LETTER TA 1747 ; [.2F96.0020.0002] # BUHID LETTER DA 1748 ; [.2F97.0020.0002] # BUHID LETTER NA 1749 ; [.2F98.0020.0002] # BUHID LETTER PA 174A ; [.2F99.0020.0002] # BUHID LETTER BA 174B ; [.2F9A.0020.0002] # BUHID LETTER MA 174C ; [.2F9B.0020.0002] # BUHID LETTER YA 174D ; [.2F9C.0020.0002] # BUHID LETTER RA 174E ; [.2F9D.0020.0002] # BUHID LETTER LA 174F ; [.2F9E.0020.0002] # BUHID LETTER WA 1750 ; [.2F9F.0020.0002] # BUHID LETTER SA 1751 ; [.2FA0.0020.0002] # BUHID LETTER HA 1752 ; [.2FA1.0020.0002] # BUHID VOWEL SIGN I 1753 ; [.2FA2.0020.0002] # BUHID VOWEL SIGN U 1760 ; [.2FA3.0020.0002] # TAGBANWA LETTER A 1761 ; [.2FA4.0020.0002] # TAGBANWA LETTER I 1762 ; [.2FA5.0020.0002] # TAGBANWA LETTER U 1763 ; [.2FA6.0020.0002] # TAGBANWA LETTER KA 1764 ; [.2FA7.0020.0002] # TAGBANWA LETTER GA 1765 ; [.2FA8.0020.0002] # TAGBANWA LETTER NGA 1766 ; [.2FA9.0020.0002] # TAGBANWA LETTER TA 1767 ; [.2FAA.0020.0002] # TAGBANWA LETTER DA 1768 ; [.2FAB.0020.0002] # TAGBANWA LETTER NA 1769 ; [.2FAC.0020.0002] # TAGBANWA LETTER PA 176A ; [.2FAD.0020.0002] # TAGBANWA LETTER BA 176B ; [.2FAE.0020.0002] # TAGBANWA LETTER MA 176C ; [.2FAF.0020.0002] # TAGBANWA LETTER YA 176E ; [.2FB0.0020.0002] # TAGBANWA LETTER LA 176F ; [.2FB1.0020.0002] # TAGBANWA LETTER WA 1770 ; [.2FB2.0020.0002] # TAGBANWA LETTER SA 1772 ; [.2FB3.0020.0002] # TAGBANWA VOWEL SIGN I 1773 ; [.2FB4.0020.0002] # TAGBANWA VOWEL SIGN U 1A00 ; [.2FB5.0020.0002] # BUGINESE LETTER KA 1A01 ; [.2FB6.0020.0002] # BUGINESE LETTER GA 1A02 ; [.2FB7.0020.0002] # BUGINESE LETTER NGA 1A03 ; [.2FB8.0020.0002] # BUGINESE LETTER NGKA 1A04 ; [.2FB9.0020.0002] # BUGINESE LETTER PA 1A05 ; [.2FBA.0020.0002] # BUGINESE LETTER BA 1A06 ; [.2FBB.0020.0002] # BUGINESE LETTER MA 1A07 ; [.2FBC.0020.0002] # BUGINESE LETTER MPA 1A08 ; [.2FBD.0020.0002] # BUGINESE LETTER TA 1A09 ; [.2FBE.0020.0002] # BUGINESE LETTER DA 1A0A ; [.2FBF.0020.0002] # BUGINESE LETTER NA 1A0B ; [.2FC0.0020.0002] # BUGINESE LETTER NRA 1A0C ; [.2FC1.0020.0002] # BUGINESE LETTER CA 1A0D ; [.2FC2.0020.0002] # BUGINESE LETTER JA 1A0E ; [.2FC3.0020.0002] # BUGINESE LETTER NYA 1A0F ; [.2FC4.0020.0002] # BUGINESE LETTER NYCA 1A10 ; [.2FC5.0020.0002] # BUGINESE LETTER YA 1A11 ; [.2FC6.0020.0002] # BUGINESE LETTER RA 1A12 ; [.2FC7.0020.0002] # BUGINESE LETTER LA 1A13 ; [.2FC8.0020.0002] # BUGINESE LETTER VA 1A14 ; [.2FC9.0020.0002] # BUGINESE LETTER SA 1A15 ; [.2FCA.0020.0002] # BUGINESE LETTER A 1A16 ; [.2FCB.0020.0002] # BUGINESE LETTER HA 1A17 ; [.2FCC.0020.0002] # BUGINESE VOWEL SIGN I 1A18 ; [.2FCD.0020.0002] # BUGINESE VOWEL SIGN U 1A19 ; [.2FCE.0020.0002] # BUGINESE VOWEL SIGN E 1A1A ; [.2FCF.0020.0002] # BUGINESE VOWEL SIGN O 1A1B ; [.2FD0.0020.0002] # BUGINESE VOWEL SIGN AE 1BC0 ; [.2FD1.0020.0002] # BATAK LETTER A 1BC1 ; [.2FD1.0020.0004] # BATAK LETTER SIMALUNGUN A 1BC2 ; [.2FD2.0020.0002] # BATAK LETTER HA 1BC3 ; [.2FD2.0020.0004] # BATAK LETTER SIMALUNGUN HA 1BC4 ; [.2FD2.0020.0004] # BATAK LETTER MANDAILING HA 1BC5 ; [.2FD3.0020.0002] # BATAK LETTER BA 1BC6 ; [.2FD3.0020.0004] # BATAK LETTER KARO BA 1BC7 ; [.2FD4.0020.0002] # BATAK LETTER PA 1BC8 ; [.2FD4.0020.0004] # BATAK LETTER SIMALUNGUN PA 1BC9 ; [.2FD5.0020.0002] # BATAK LETTER NA 1BCA ; [.2FD5.0020.0004] # BATAK LETTER MANDAILING NA 1BCB ; [.2FD6.0020.0002] # BATAK LETTER WA 1BCC ; [.2FD6.0020.0004] # BATAK LETTER SIMALUNGUN WA 1BCD ; [.2FD6.0020.0004] # BATAK LETTER PAKPAK WA 1BCE ; [.2FD7.0020.0002] # BATAK LETTER GA 1BCF ; [.2FD7.0020.0004] # BATAK LETTER SIMALUNGUN GA 1BD0 ; [.2FD8.0020.0002] # BATAK LETTER JA 1BD1 ; [.2FD9.0020.0002] # BATAK LETTER DA 1BD2 ; [.2FDA.0020.0002] # BATAK LETTER RA 1BD3 ; [.2FDA.0020.0004] # BATAK LETTER SIMALUNGUN RA 1BD4 ; [.2FDB.0020.0002] # BATAK LETTER MA 1BD5 ; [.2FDB.0020.0004] # BATAK LETTER SIMALUNGUN MA 1BD6 ; [.2FDC.0020.0002] # BATAK LETTER SOUTHERN TA 1BD7 ; [.2FDC.0020.0004] # BATAK LETTER NORTHERN TA 1BD8 ; [.2FDD.0020.0002] # BATAK LETTER SA 1BD9 ; [.2FDD.0020.0004] # BATAK LETTER SIMALUNGUN SA 1BDA ; [.2FDD.0020.0004] # BATAK LETTER MANDAILING SA 1BDB ; [.2FDE.0020.0002] # BATAK LETTER YA 1BDC ; [.2FDE.0020.0004] # BATAK LETTER SIMALUNGUN YA 1BDD ; [.2FDF.0020.0002] # BATAK LETTER NGA 1BDE ; [.2FE0.0020.0002] # BATAK LETTER LA 1BDF ; [.2FE0.0020.0004] # BATAK LETTER SIMALUNGUN LA 1BE0 ; [.2FE1.0020.0002] # BATAK LETTER NYA 1BE1 ; [.2FE2.0020.0002] # BATAK LETTER CA 1BE2 ; [.2FE3.0020.0002] # BATAK LETTER NDA 1BE3 ; [.2FE4.0020.0002] # BATAK LETTER MBA 1BE4 ; [.2FE5.0020.0002] # BATAK LETTER I 1BE5 ; [.2FE6.0020.0002] # BATAK LETTER U 1BE7 ; [.2FE7.0020.0002] # BATAK VOWEL SIGN E 1BE8 ; [.2FE7.0020.0004] # BATAK VOWEL SIGN PAKPAK E 1BE9 ; [.2FE8.0020.0002] # BATAK VOWEL SIGN EE 1BEA ; [.2FE9.0020.0002] # BATAK VOWEL SIGN I 1BEB ; [.2FE9.0020.0004] # BATAK VOWEL SIGN KARO I 1BEC ; [.2FEA.0020.0002] # BATAK VOWEL SIGN O 1BED ; [.2FEA.0020.0004] # BATAK VOWEL SIGN KARO O 1BEE ; [.2FEB.0020.0002] # BATAK VOWEL SIGN U 1BEF ; [.2FEB.0020.0004] # BATAK VOWEL SIGN U FOR SIMALUNGUN SA 1BF0 ; [.2FEC.0020.0002] # BATAK CONSONANT SIGN NG 1BF1 ; [.2FED.0020.0002] # BATAK CONSONANT SIGN H 1BF2 ; [.2FEE.0020.0002] # BATAK PANGOLAT 1BF3 ; [.2FEF.0020.0002] # BATAK PANONGONAN A930 ; [.2FF0.0020.0002] # REJANG LETTER KA A931 ; [.2FF1.0020.0002] # REJANG LETTER GA A932 ; [.2FF2.0020.0002] # REJANG LETTER NGA A933 ; [.2FF3.0020.0002] # REJANG LETTER TA A934 ; [.2FF4.0020.0002] # REJANG LETTER DA A935 ; [.2FF5.0020.0002] # REJANG LETTER NA A936 ; [.2FF6.0020.0002] # REJANG LETTER PA A937 ; [.2FF7.0020.0002] # REJANG LETTER BA A938 ; [.2FF8.0020.0002] # REJANG LETTER MA A939 ; [.2FF9.0020.0002] # REJANG LETTER CA A93A ; [.2FFA.0020.0002] # REJANG LETTER JA A93B ; [.2FFB.0020.0002] # REJANG LETTER NYA A93C ; [.2FFC.0020.0002] # REJANG LETTER SA A93D ; [.2FFD.0020.0002] # REJANG LETTER RA A93E ; [.2FFE.0020.0002] # REJANG LETTER LA A93F ; [.2FFF.0020.0002] # REJANG LETTER YA A940 ; [.3000.0020.0002] # REJANG LETTER WA A941 ; [.3001.0020.0002] # REJANG LETTER HA A942 ; [.3002.0020.0002] # REJANG LETTER MBA A943 ; [.3003.0020.0002] # REJANG LETTER NGGA A944 ; [.3004.0020.0002] # REJANG LETTER NDA A945 ; [.3005.0020.0002] # REJANG LETTER NYJA A946 ; [.3006.0020.0002] # REJANG LETTER A A947 ; [.3007.0020.0002] # REJANG VOWEL SIGN I A948 ; [.3008.0020.0002] # REJANG VOWEL SIGN U A949 ; [.3009.0020.0002] # REJANG VOWEL SIGN E A94A ; [.300A.0020.0002] # REJANG VOWEL SIGN AI A94B ; [.300B.0020.0002] # REJANG VOWEL SIGN O A94C ; [.300C.0020.0002] # REJANG VOWEL SIGN AU A94D ; [.300D.0020.0002] # REJANG VOWEL SIGN EU A94E ; [.300E.0020.0002] # REJANG VOWEL SIGN EA A94F ; [.300F.0020.0002] # REJANG CONSONANT SIGN NG A950 ; [.3010.0020.0002] # REJANG CONSONANT SIGN N A951 ; [.3011.0020.0002] # REJANG CONSONANT SIGN R A952 ; [.3012.0020.0002] # REJANG CONSONANT SIGN H A953 ; [.3013.0020.0002] # REJANG VIRAMA A90A ; [.3014.0020.0002] # KAYAH LI LETTER KA A90B ; [.3015.0020.0002] # KAYAH LI LETTER KHA A90C ; [.3016.0020.0002] # KAYAH LI LETTER GA A90D ; [.3017.0020.0002] # KAYAH LI LETTER NGA A90E ; [.3018.0020.0002] # KAYAH LI LETTER SA A90F ; [.3019.0020.0002] # KAYAH LI LETTER SHA A910 ; [.301A.0020.0002] # KAYAH LI LETTER ZA A911 ; [.301B.0020.0002] # KAYAH LI LETTER NYA A912 ; [.301C.0020.0002] # KAYAH LI LETTER TA A913 ; [.301D.0020.0002] # KAYAH LI LETTER HTA A914 ; [.301E.0020.0002] # KAYAH LI LETTER NA A915 ; [.301F.0020.0002] # KAYAH LI LETTER PA A916 ; [.3020.0020.0002] # KAYAH LI LETTER PHA A917 ; [.3021.0020.0002] # KAYAH LI LETTER MA A918 ; [.3022.0020.0002] # KAYAH LI LETTER DA A919 ; [.3023.0020.0002] # KAYAH LI LETTER BA A91A ; [.3024.0020.0002] # KAYAH LI LETTER RA A91B ; [.3025.0020.0002] # KAYAH LI LETTER YA A91C ; [.3026.0020.0002] # KAYAH LI LETTER LA A91D ; [.3027.0020.0002] # KAYAH LI LETTER WA A91E ; [.3028.0020.0002] # KAYAH LI LETTER THA A91F ; [.3029.0020.0002] # KAYAH LI LETTER HA A920 ; [.302A.0020.0002] # KAYAH LI LETTER VA A921 ; [.302B.0020.0002] # KAYAH LI LETTER CA A922 ; [.302C.0020.0002] # KAYAH LI LETTER A A923 ; [.302D.0020.0002] # KAYAH LI LETTER OE A924 ; [.302E.0020.0002] # KAYAH LI LETTER I A925 ; [.302F.0020.0002] # KAYAH LI LETTER OO A926 ; [.3030.0020.0002] # KAYAH LI VOWEL UE A927 ; [.3031.0020.0002] # KAYAH LI VOWEL E A928 ; [.3032.0020.0002] # KAYAH LI VOWEL U A929 ; [.3033.0020.0002] # KAYAH LI VOWEL EE A92A ; [.3034.0020.0002] # KAYAH LI VOWEL O 1000 ; [.3035.0020.0002] # MYANMAR LETTER KA 1075 ; [.3036.0020.0002] # MYANMAR LETTER SHAN KA 1001 ; [.3037.0020.0002] # MYANMAR LETTER KHA 1076 ; [.3038.0020.0002] # MYANMAR LETTER SHAN KHA 1002 ; [.3039.0020.0002] # MYANMAR LETTER GA 1077 ; [.303A.0020.0002] # MYANMAR LETTER SHAN GA AA60 ; [.303B.0020.0002] # MYANMAR LETTER KHAMTI GA A9E9 ; [.303C.0020.0002] # MYANMAR LETTER TAI LAING GA 1003 ; [.303D.0020.0002] # MYANMAR LETTER GHA A9E0 ; [.303E.0020.0002] # MYANMAR LETTER SHAN GHA A9EA ; [.303F.0020.0002] # MYANMAR LETTER TAI LAING GHA 1004 ; [.3040.0020.0002] # MYANMAR LETTER NGA 105A ; [.3041.0020.0002] # MYANMAR LETTER MON NGA 1005 ; [.3042.0020.0002] # MYANMAR LETTER CA 1078 ; [.3043.0020.0002] # MYANMAR LETTER SHAN CA AA61 ; [.3044.0020.0002] # MYANMAR LETTER KHAMTI CA 1006 ; [.3045.0020.0002] # MYANMAR LETTER CHA A9E1 ; [.3046.0020.0002] # MYANMAR LETTER SHAN CHA AA62 ; [.3047.0020.0002] # MYANMAR LETTER KHAMTI CHA AA7E ; [.3048.0020.0002] # MYANMAR LETTER SHWE PALAUNG CHA 1007 ; [.3049.0020.0002] # MYANMAR LETTER JA AA63 ; [.304A.0020.0002] # MYANMAR LETTER KHAMTI JA A9EB ; [.304B.0020.0002] # MYANMAR LETTER TAI LAING JA 1079 ; [.304C.0020.0002] # MYANMAR LETTER SHAN ZA AA72 ; [.304D.0020.0002] # MYANMAR LETTER KHAMTI ZA 1008 ; [.304E.0020.0002] # MYANMAR LETTER JHA 105B ; [.304F.0020.0002] # MYANMAR LETTER MON JHA A9E2 ; [.3050.0020.0002] # MYANMAR LETTER SHAN JHA AA64 ; [.3051.0020.0002] # MYANMAR LETTER KHAMTI JHA A9EC ; [.3052.0020.0002] # MYANMAR LETTER TAI LAING JHA 1061 ; [.3053.0020.0002] # MYANMAR LETTER SGAW KAREN SHA AA7F ; [.3054.0020.0002] # MYANMAR LETTER SHWE PALAUNG SHA 1009 ; [.3055.0020.0002] # MYANMAR LETTER NYA 107A ; [.3056.0020.0002] # MYANMAR LETTER SHAN NYA AA65 ; [.3057.0020.0002] # MYANMAR LETTER KHAMTI NYA A9E7 ; [.3058.0020.0002] # MYANMAR LETTER TAI LAING NYA 100A ; [.3059.0020.0002] # MYANMAR LETTER NNYA 100B ; [.305A.0020.0002] # MYANMAR LETTER TTA AA66 ; [.305B.0020.0002] # MYANMAR LETTER KHAMTI TTA 100C ; [.305C.0020.0002] # MYANMAR LETTER TTHA AA67 ; [.305D.0020.0002] # MYANMAR LETTER KHAMTI TTHA 100D ; [.305E.0020.0002] # MYANMAR LETTER DDA AA68 ; [.305F.0020.0002] # MYANMAR LETTER KHAMTI DDA A9ED ; [.3060.0020.0002] # MYANMAR LETTER TAI LAING DDA 100E ; [.3061.0020.0002] # MYANMAR LETTER DDHA AA69 ; [.3062.0020.0002] # MYANMAR LETTER KHAMTI DDHA A9EE ; [.3063.0020.0002] # MYANMAR LETTER TAI LAING DDHA 100F ; [.3064.0020.0002] # MYANMAR LETTER NNA 106E ; [.3065.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN NNA A9E3 ; [.3066.0020.0002] # MYANMAR LETTER SHAN NNA A9EF ; [.3067.0020.0002] # MYANMAR LETTER TAI LAING NNA 1010 ; [.3068.0020.0002] # MYANMAR LETTER TA 1011 ; [.3069.0020.0002] # MYANMAR LETTER THA 1012 ; [.306A.0020.0002] # MYANMAR LETTER DA 107B ; [.306B.0020.0002] # MYANMAR LETTER SHAN DA A9FB ; [.306C.0020.0002] # MYANMAR LETTER TAI LAING DA 1013 ; [.306D.0020.0002] # MYANMAR LETTER DHA AA6A ; [.306E.0020.0002] # MYANMAR LETTER KHAMTI DHA A9FC ; [.306F.0020.0002] # MYANMAR LETTER TAI LAING DHA 1014 ; [.3070.0020.0002] # MYANMAR LETTER NA 107C ; [.3071.0020.0002] # MYANMAR LETTER SHAN NA AA6B ; [.3072.0020.0002] # MYANMAR LETTER KHAMTI NA 105E ; [.3073.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL NA 1015 ; [.3074.0020.0002] # MYANMAR LETTER PA 1016 ; [.3075.0020.0002] # MYANMAR LETTER PHA 107D ; [.3076.0020.0002] # MYANMAR LETTER SHAN PHA 107E ; [.3077.0020.0002] # MYANMAR LETTER SHAN FA AA6F ; [.3078.0020.0002] # MYANMAR LETTER KHAMTI FA 108E ; [.3079.0020.0002] # MYANMAR LETTER RUMAI PALAUNG FA A9E8 ; [.307A.0020.0002] # MYANMAR LETTER TAI LAING FA 1017 ; [.307B.0020.0002] # MYANMAR LETTER BA 107F ; [.307C.0020.0002] # MYANMAR LETTER SHAN BA A9FD ; [.307D.0020.0002] # MYANMAR LETTER TAI LAING BA 1018 ; [.307E.0020.0002] # MYANMAR LETTER BHA A9E4 ; [.307F.0020.0002] # MYANMAR LETTER SHAN BHA A9FE ; [.3080.0020.0002] # MYANMAR LETTER TAI LAING BHA 1019 ; [.3081.0020.0002] # MYANMAR LETTER MA 105F ; [.3082.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL MA 101A ; [.3083.0020.0002] # MYANMAR LETTER YA 103B ; [.3084.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL YA 101B ; [.3085.0020.0002] # MYANMAR LETTER RA AA73 ; [.3086.0020.0002] # MYANMAR LETTER KHAMTI RA AA7A ; [.3087.0020.0002] # MYANMAR LETTER AITON RA 103C ; [.3088.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL RA 101C ; [.3089.0020.0002] # MYANMAR LETTER LA 1060 ; [.308A.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL LA 101D ; [.308B.0020.0002] # MYANMAR LETTER WA 103D ; [.308C.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL WA 1082 ; [.308D.0020.0002] # MYANMAR CONSONANT SIGN SHAN MEDIAL WA 1080 ; [.308E.0020.0002] # MYANMAR LETTER SHAN THA 1050 ; [.308F.0020.0002] # MYANMAR LETTER SHA 1051 ; [.3090.0020.0002] # MYANMAR LETTER SSA 1065 ; [.3091.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN THA 101E ; [.3092.0020.0002] # MYANMAR LETTER SA 103F ; [.3092.0020.0004][.30CB.0020.0004][.3092.0020.0004] # MYANMAR LETTER GREAT SA AA6C ; [.3093.0020.0002] # MYANMAR LETTER KHAMTI SA 101F ; [.3094.0020.0002] # MYANMAR LETTER HA 1081 ; [.3095.0020.0002] # MYANMAR LETTER SHAN HA AA6D ; [.3096.0020.0002] # MYANMAR LETTER KHAMTI HA 103E ; [.3097.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL HA AA6E ; [.3098.0020.0002] # MYANMAR LETTER KHAMTI HHA AA71 ; [.3099.0020.0002] # MYANMAR LETTER KHAMTI XA 1020 ; [.309A.0020.0002] # MYANMAR LETTER LLA A9FA ; [.309B.0020.0002] # MYANMAR LETTER TAI LAING LLA 105C ; [.309C.0020.0002] # MYANMAR LETTER MON BBA 105D ; [.309D.0020.0002] # MYANMAR LETTER MON BBE 106F ; [.309E.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN YWA 1070 ; [.309F.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN GHWA 1066 ; [.30A0.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN PWA 1021 ; [.30A1.0020.0002] # MYANMAR LETTER A 1022 ; [.30A2.0020.0002] # MYANMAR LETTER SHAN A 1023 ; [.30A3.0020.0002] # MYANMAR LETTER I 1024 ; [.30A4.0020.0002] # MYANMAR LETTER II 1025 ; [.30A5.0020.0002] # MYANMAR LETTER U 1026 ; [.30A6.0020.0002] # MYANMAR LETTER UU 1025 102E ; [.30A6.0020.0002] # MYANMAR LETTER UU 1052 ; [.30A7.0020.0002] # MYANMAR LETTER VOCALIC R 1053 ; [.30A8.0020.0002] # MYANMAR LETTER VOCALIC RR 1054 ; [.30A9.0020.0002] # MYANMAR LETTER VOCALIC L 1055 ; [.30AA.0020.0002] # MYANMAR LETTER VOCALIC LL 1027 ; [.30AB.0020.0002] # MYANMAR LETTER E 1028 ; [.30AC.0020.0002] # MYANMAR LETTER MON E 1029 ; [.30AD.0020.0002] # MYANMAR LETTER O 102A ; [.30AE.0020.0002] # MYANMAR LETTER AU 102C ; [.30AF.0020.0002] # MYANMAR VOWEL SIGN AA 102B ; [.30AF.0020.0004] # MYANMAR VOWEL SIGN TALL AA 1083 ; [.30B0.0020.0002] # MYANMAR VOWEL SIGN SHAN AA 1072 ; [.30B1.0020.0002] # MYANMAR VOWEL SIGN KAYAH OE 109C ; [.30B2.0020.0002] # MYANMAR VOWEL SIGN AITON A 102D ; [.30B3.0020.0002] # MYANMAR VOWEL SIGN I 1071 ; [.30B4.0020.0002] # MYANMAR VOWEL SIGN GEBA KAREN I 102E ; [.30B5.0020.0002] # MYANMAR VOWEL SIGN II 1033 ; [.30B6.0020.0002] # MYANMAR VOWEL SIGN MON II 102F ; [.30B7.0020.0002] # MYANMAR VOWEL SIGN U 1073 ; [.30B8.0020.0002] # MYANMAR VOWEL SIGN KAYAH U 1074 ; [.30B9.0020.0002] # MYANMAR VOWEL SIGN KAYAH EE 1030 ; [.30BA.0020.0002] # MYANMAR VOWEL SIGN UU 1056 ; [.30BB.0020.0002] # MYANMAR VOWEL SIGN VOCALIC R 1057 ; [.30BC.0020.0002] # MYANMAR VOWEL SIGN VOCALIC RR 1058 ; [.30BD.0020.0002] # MYANMAR VOWEL SIGN VOCALIC L 1059 ; [.30BE.0020.0002] # MYANMAR VOWEL SIGN VOCALIC LL 1031 ; [.30BF.0020.0002] # MYANMAR VOWEL SIGN E 1084 ; [.30C0.0020.0002] # MYANMAR VOWEL SIGN SHAN E 1035 ; [.30C1.0020.0002] # MYANMAR VOWEL SIGN E ABOVE 1085 ; [.30C2.0020.0002] # MYANMAR VOWEL SIGN SHAN E ABOVE 1032 ; [.30C3.0020.0002] # MYANMAR VOWEL SIGN AI 109D ; [.30C4.0020.0002] # MYANMAR VOWEL SIGN AITON AI 1034 ; [.30C5.0020.0002] # MYANMAR VOWEL SIGN MON O 1062 ; [.30C6.0020.0002] # MYANMAR VOWEL SIGN SGAW KAREN EU 1067 ; [.30C7.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN EU 1068 ; [.30C8.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN UE A9E5 ; [.30C9.0020.0002] # MYANMAR SIGN SHAN SAW 1086 ; [.30CA.0020.0002] # MYANMAR VOWEL SIGN SHAN FINAL Y 1039 ; [.30CB.0020.0002] # MYANMAR SIGN VIRAMA 103A ; [.30CC.0020.0002] # MYANMAR SIGN ASAT 1063 ; [.30CD.0020.0002] # MYANMAR TONE MARK SGAW KAREN HATHI 1064 ; [.30CE.0020.0002] # MYANMAR TONE MARK SGAW KAREN KE PHO 1069 ; [.30CF.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-1 106A ; [.30D0.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-2 106B ; [.30D1.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-3 106C ; [.30D2.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-4 106D ; [.30D3.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-5 1087 ; [.30D4.0020.0002] # MYANMAR SIGN SHAN TONE-2 108B ; [.30D5.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-2 1088 ; [.30D6.0020.0002] # MYANMAR SIGN SHAN TONE-3 108C ; [.30D7.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-3 108D ; [.30D8.0020.0002] # MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE 1089 ; [.30D9.0020.0002] # MYANMAR SIGN SHAN TONE-5 108A ; [.30DA.0020.0002] # MYANMAR SIGN SHAN TONE-6 108F ; [.30DB.0020.0002] # MYANMAR SIGN RUMAI PALAUNG TONE-5 109A ; [.30DC.0020.0002] # MYANMAR SIGN KHAMTI TONE-1 109B ; [.30DD.0020.0002] # MYANMAR SIGN KHAMTI TONE-3 AA7B ; [.30DE.0020.0002] # MYANMAR SIGN PAO KAREN TONE AA7C ; [.30DF.0020.0002] # MYANMAR SIGN TAI LAING TONE-2 AA7D ; [.30E0.0020.0002] # MYANMAR SIGN TAI LAING TONE-5 AA74 ; [.30E1.0020.0002] # MYANMAR LOGOGRAM KHAMTI OAY AA75 ; [.30E2.0020.0002] # MYANMAR LOGOGRAM KHAMTI QN AA76 ; [.30E3.0020.0002] # MYANMAR LOGOGRAM KHAMTI HM 11103 ; [.30E4.0020.0002] # CHAKMA LETTER AA 11104 ; [.30E5.0020.0002] # CHAKMA LETTER I 11105 ; [.30E6.0020.0002] # CHAKMA LETTER U 11106 ; [.30E7.0020.0002] # CHAKMA LETTER E 11107 ; [.30E8.0020.0002] # CHAKMA LETTER KAA 11108 ; [.30E9.0020.0002] # CHAKMA LETTER KHAA 11109 ; [.30EA.0020.0002] # CHAKMA LETTER GAA 1110A ; [.30EB.0020.0002] # CHAKMA LETTER GHAA 1110B ; [.30EC.0020.0002] # CHAKMA LETTER NGAA 1110C ; [.30ED.0020.0002] # CHAKMA LETTER CAA 1110D ; [.30EE.0020.0002] # CHAKMA LETTER CHAA 1110E ; [.30EF.0020.0002] # CHAKMA LETTER JAA 1110F ; [.30F0.0020.0002] # CHAKMA LETTER JHAA 11110 ; [.30F1.0020.0002] # CHAKMA LETTER NYAA 11111 ; [.30F2.0020.0002] # CHAKMA LETTER TTAA 11112 ; [.30F3.0020.0002] # CHAKMA LETTER TTHAA 11113 ; [.30F4.0020.0002] # CHAKMA LETTER DDAA 11114 ; [.30F5.0020.0002] # CHAKMA LETTER DDHAA 11115 ; [.30F6.0020.0002] # CHAKMA LETTER NNAA 11116 ; [.30F7.0020.0002] # CHAKMA LETTER TAA 11117 ; [.30F8.0020.0002] # CHAKMA LETTER THAA 11118 ; [.30F9.0020.0002] # CHAKMA LETTER DAA 11119 ; [.30FA.0020.0002] # CHAKMA LETTER DHAA 1111A ; [.30FB.0020.0002] # CHAKMA LETTER NAA 1111B ; [.30FC.0020.0002] # CHAKMA LETTER PAA 1111C ; [.30FD.0020.0002] # CHAKMA LETTER PHAA 1111D ; [.30FE.0020.0002] # CHAKMA LETTER BAA 1111E ; [.30FF.0020.0002] # CHAKMA LETTER BHAA 1111F ; [.3100.0020.0002] # CHAKMA LETTER MAA 11120 ; [.3101.0020.0002] # CHAKMA LETTER YYAA 11121 ; [.3102.0020.0002] # CHAKMA LETTER YAA 11122 ; [.3103.0020.0002] # CHAKMA LETTER RAA 11123 ; [.3104.0020.0002] # CHAKMA LETTER LAA 11124 ; [.3105.0020.0002] # CHAKMA LETTER WAA 11125 ; [.3106.0020.0002] # CHAKMA LETTER SAA 11126 ; [.3107.0020.0002] # CHAKMA LETTER HAA 11127 ; [.3108.0020.0002] # CHAKMA VOWEL SIGN A 11128 ; [.3109.0020.0002] # CHAKMA VOWEL SIGN I 11129 ; [.310A.0020.0002] # CHAKMA VOWEL SIGN II 1112A ; [.310B.0020.0002] # CHAKMA VOWEL SIGN U 1112B ; [.310C.0020.0002] # CHAKMA VOWEL SIGN UU 1112C ; [.310D.0020.0002] # CHAKMA VOWEL SIGN E 1112D ; [.310E.0020.0002] # CHAKMA VOWEL SIGN AI 1112E ; [.310F.0020.0002] # CHAKMA VOWEL SIGN O 11131 11127 ; [.310F.0020.0002] # CHAKMA VOWEL SIGN O 1112F ; [.3110.0020.0002] # CHAKMA VOWEL SIGN AU 11132 11127 ; [.3110.0020.0002] # CHAKMA VOWEL SIGN AU 11130 ; [.3111.0020.0002] # CHAKMA VOWEL SIGN OI 11131 ; [.3112.0020.0002] # CHAKMA O MARK 11132 ; [.3113.0020.0002] # CHAKMA AU MARK 11133 ; [.3114.0020.0002] # CHAKMA VIRAMA 11134 ; [.3115.0020.0002] # CHAKMA MAAYYAA 1780 ; [.3116.0020.0002] # KHMER LETTER KA 1781 ; [.3117.0020.0002] # KHMER LETTER KHA 1782 ; [.3118.0020.0002] # KHMER LETTER KO 1783 ; [.3119.0020.0002] # KHMER LETTER KHO 1784 ; [.311A.0020.0002] # KHMER LETTER NGO 1785 ; [.311B.0020.0002] # KHMER LETTER CA 1786 ; [.311C.0020.0002] # KHMER LETTER CHA 1787 ; [.311D.0020.0002] # KHMER LETTER CO 1788 ; [.311E.0020.0002] # KHMER LETTER CHO 1789 ; [.311F.0020.0002] # KHMER LETTER NYO 178A ; [.3120.0020.0002] # KHMER LETTER DA 178B ; [.3121.0020.0002] # KHMER LETTER TTHA 178C ; [.3122.0020.0002] # KHMER LETTER DO 178D ; [.3123.0020.0002] # KHMER LETTER TTHO 178E ; [.3124.0020.0002] # KHMER LETTER NNO 178F ; [.3125.0020.0002] # KHMER LETTER TA 1790 ; [.3126.0020.0002] # KHMER LETTER THA 1791 ; [.3127.0020.0002] # KHMER LETTER TO 1792 ; [.3128.0020.0002] # KHMER LETTER THO 1793 ; [.3129.0020.0002] # KHMER LETTER NO 1794 ; [.312A.0020.0002] # KHMER LETTER BA 1795 ; [.312B.0020.0002] # KHMER LETTER PHA 1796 ; [.312C.0020.0002] # KHMER LETTER PO 1797 ; [.312D.0020.0002] # KHMER LETTER PHO 1798 ; [.312E.0020.0002] # KHMER LETTER MO 1799 ; [.312F.0020.0002] # KHMER LETTER YO 179A ; [.3130.0020.0002] # KHMER LETTER RO 179B ; [.3131.0020.0002] # KHMER LETTER LO 179C ; [.3132.0020.0002] # KHMER LETTER VO 179D ; [.3133.0020.0002] # KHMER LETTER SHA 179E ; [.3134.0020.0002] # KHMER LETTER SSO 179F ; [.3135.0020.0002] # KHMER LETTER SA 17A0 ; [.3136.0020.0002] # KHMER LETTER HA 17A1 ; [.3137.0020.0002] # KHMER LETTER LA 17A2 ; [.3138.0020.0002] # KHMER LETTER QA 17DC ; [.3139.0020.0002] # KHMER SIGN AVAKRAHASANYA 17A3 ; [.313A.0020.0002] # KHMER INDEPENDENT VOWEL QAQ 17A4 ; [.313B.0020.0002] # KHMER INDEPENDENT VOWEL QAA 17A5 ; [.313C.0020.0002] # KHMER INDEPENDENT VOWEL QI 17A6 ; [.313D.0020.0002] # KHMER INDEPENDENT VOWEL QII 17A7 ; [.313E.0020.0002] # KHMER INDEPENDENT VOWEL QU 17A8 ; [.313F.0020.0002] # KHMER INDEPENDENT VOWEL QUK 17A9 ; [.3140.0020.0002] # KHMER INDEPENDENT VOWEL QUU 17AA ; [.3141.0020.0002] # KHMER INDEPENDENT VOWEL QUUV 17AB ; [.3142.0020.0002] # KHMER INDEPENDENT VOWEL RY 17AC ; [.3143.0020.0002] # KHMER INDEPENDENT VOWEL RYY 17AD ; [.3144.0020.0002] # KHMER INDEPENDENT VOWEL LY 17AE ; [.3145.0020.0002] # KHMER INDEPENDENT VOWEL LYY 17AF ; [.3146.0020.0002] # KHMER INDEPENDENT VOWEL QE 17B0 ; [.3147.0020.0002] # KHMER INDEPENDENT VOWEL QAI 17B1 ; [.3148.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE ONE 17B2 ; [.3149.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE TWO 17B3 ; [.314A.0020.0002] # KHMER INDEPENDENT VOWEL QAU 17B6 ; [.314B.0020.0002] # KHMER VOWEL SIGN AA 17B7 ; [.314C.0020.0002] # KHMER VOWEL SIGN I 17B8 ; [.314D.0020.0002] # KHMER VOWEL SIGN II 17B9 ; [.314E.0020.0002] # KHMER VOWEL SIGN Y 17BA ; [.314F.0020.0002] # KHMER VOWEL SIGN YY 17BB ; [.3150.0020.0002] # KHMER VOWEL SIGN U 17BC ; [.3151.0020.0002] # KHMER VOWEL SIGN UU 17BD ; [.3152.0020.0002] # KHMER VOWEL SIGN UA 17BE ; [.3153.0020.0002] # KHMER VOWEL SIGN OE 17BF ; [.3154.0020.0002] # KHMER VOWEL SIGN YA 17C0 ; [.3155.0020.0002] # KHMER VOWEL SIGN IE 17C1 ; [.3156.0020.0002] # KHMER VOWEL SIGN E 17C2 ; [.3157.0020.0002] # KHMER VOWEL SIGN AE 17C3 ; [.3158.0020.0002] # KHMER VOWEL SIGN AI 17C4 ; [.3159.0020.0002] # KHMER VOWEL SIGN OO 17C5 ; [.315A.0020.0002] # KHMER VOWEL SIGN AU 17D2 ; [.315B.0020.0002] # KHMER SIGN COENG 1950 ; [.315C.0020.0002] # TAI LE LETTER KA 1951 ; [.315D.0020.0002] # TAI LE LETTER XA 1952 ; [.315E.0020.0002] # TAI LE LETTER NGA 1953 ; [.315F.0020.0002] # TAI LE LETTER TSA 1954 ; [.3160.0020.0002] # TAI LE LETTER SA 1955 ; [.3161.0020.0002] # TAI LE LETTER YA 1956 ; [.3162.0020.0002] # TAI LE LETTER TA 1957 ; [.3163.0020.0002] # TAI LE LETTER THA 1958 ; [.3164.0020.0002] # TAI LE LETTER LA 1959 ; [.3165.0020.0002] # TAI LE LETTER PA 195A ; [.3166.0020.0002] # TAI LE LETTER PHA 195B ; [.3167.0020.0002] # TAI LE LETTER MA 195C ; [.3168.0020.0002] # TAI LE LETTER FA 195D ; [.3169.0020.0002] # TAI LE LETTER VA 195E ; [.316A.0020.0002] # TAI LE LETTER HA 195F ; [.316B.0020.0002] # TAI LE LETTER QA 1960 ; [.316C.0020.0002] # TAI LE LETTER KHA 1961 ; [.316D.0020.0002] # TAI LE LETTER TSHA 1962 ; [.316E.0020.0002] # TAI LE LETTER NA 1963 ; [.316F.0020.0002] # TAI LE LETTER A 1964 ; [.3170.0020.0002] # TAI LE LETTER I 1965 ; [.3171.0020.0002] # TAI LE LETTER EE 1966 ; [.3172.0020.0002] # TAI LE LETTER EH 1967 ; [.3173.0020.0002] # TAI LE LETTER U 1968 ; [.3174.0020.0002] # TAI LE LETTER OO 1969 ; [.3175.0020.0002] # TAI LE LETTER O 196A ; [.3176.0020.0002] # TAI LE LETTER UE 196B ; [.3177.0020.0002] # TAI LE LETTER E 196C ; [.3178.0020.0002] # TAI LE LETTER AUE 196D ; [.3179.0020.0002] # TAI LE LETTER AI 1970 ; [.317A.0020.0002] # TAI LE LETTER TONE-2 1971 ; [.317B.0020.0002] # TAI LE LETTER TONE-3 1972 ; [.317C.0020.0002] # TAI LE LETTER TONE-4 1973 ; [.317D.0020.0002] # TAI LE LETTER TONE-5 1974 ; [.317E.0020.0002] # TAI LE LETTER TONE-6 1980 ; [.317F.0020.0002] # NEW TAI LUE LETTER HIGH QA 19B5 1980 ; [.317F.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH QA> 19B6 1980 ; [.317F.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH QA> 19B7 1980 ; [.317F.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH QA> 19BA 1980 ; [.317F.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH QA> 1981 ; [.3180.0020.0002] # NEW TAI LUE LETTER LOW QA 19B5 1981 ; [.3180.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW QA> 19B6 1981 ; [.3180.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW QA> 19B7 1981 ; [.3180.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW QA> 19BA 1981 ; [.3180.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW QA> 1982 ; [.3181.0020.0002] # NEW TAI LUE LETTER HIGH KA 19B5 1982 ; [.3181.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH KA> 19B6 1982 ; [.3181.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH KA> 19B7 1982 ; [.3181.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH KA> 19BA 1982 ; [.3181.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH KA> 1983 ; [.3182.0020.0002] # NEW TAI LUE LETTER HIGH XA 19B5 1983 ; [.3182.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH XA> 19B6 1983 ; [.3182.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH XA> 19B7 1983 ; [.3182.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH XA> 19BA 1983 ; [.3182.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH XA> 1984 ; [.3183.0020.0002] # NEW TAI LUE LETTER HIGH NGA 19B5 1984 ; [.3183.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH NGA> 19B6 1984 ; [.3183.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH NGA> 19B7 1984 ; [.3183.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH NGA> 19BA 1984 ; [.3183.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH NGA> 1985 ; [.3184.0020.0002] # NEW TAI LUE LETTER LOW KA 19B5 1985 ; [.3184.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW KA> 19B6 1985 ; [.3184.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW KA> 19B7 1985 ; [.3184.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW KA> 19BA 1985 ; [.3184.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW KA> 1986 ; [.3185.0020.0002] # NEW TAI LUE LETTER LOW XA 19B5 1986 ; [.3185.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW XA> 19B6 1986 ; [.3185.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW XA> 19B7 1986 ; [.3185.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW XA> 19BA 1986 ; [.3185.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW XA> 1987 ; [.3186.0020.0002] # NEW TAI LUE LETTER LOW NGA 19B5 1987 ; [.3186.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW NGA> 19B6 1987 ; [.3186.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW NGA> 19B7 1987 ; [.3186.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW NGA> 19BA 1987 ; [.3186.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW NGA> 1988 ; [.3187.0020.0002] # NEW TAI LUE LETTER HIGH TSA 19B5 1988 ; [.3187.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH TSA> 19B6 1988 ; [.3187.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH TSA> 19B7 1988 ; [.3187.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH TSA> 19BA 1988 ; [.3187.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH TSA> 1989 ; [.3188.0020.0002] # NEW TAI LUE LETTER HIGH SA 19B5 1989 ; [.3188.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH SA> 19B6 1989 ; [.3188.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH SA> 19B7 1989 ; [.3188.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH SA> 19BA 1989 ; [.3188.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH SA> 198A ; [.3189.0020.0002] # NEW TAI LUE LETTER HIGH YA 19B5 198A ; [.3189.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH YA> 19B6 198A ; [.3189.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH YA> 19B7 198A ; [.3189.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH YA> 19BA 198A ; [.3189.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH YA> 198B ; [.318A.0020.0002] # NEW TAI LUE LETTER LOW TSA 19B5 198B ; [.318A.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW TSA> 19B6 198B ; [.318A.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW TSA> 19B7 198B ; [.318A.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW TSA> 19BA 198B ; [.318A.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW TSA> 198C ; [.318B.0020.0002] # NEW TAI LUE LETTER LOW SA 19B5 198C ; [.318B.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW SA> 19B6 198C ; [.318B.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW SA> 19B7 198C ; [.318B.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW SA> 19BA 198C ; [.318B.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW SA> 198D ; [.318C.0020.0002] # NEW TAI LUE LETTER LOW YA 19B5 198D ; [.318C.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW YA> 19B6 198D ; [.318C.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW YA> 19B7 198D ; [.318C.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW YA> 19BA 198D ; [.318C.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW YA> 198E ; [.318D.0020.0002] # NEW TAI LUE LETTER HIGH TA 19B5 198E ; [.318D.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH TA> 19B6 198E ; [.318D.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH TA> 19B7 198E ; [.318D.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH TA> 19BA 198E ; [.318D.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH TA> 198F ; [.318E.0020.0002] # NEW TAI LUE LETTER HIGH THA 19B5 198F ; [.318E.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH THA> 19B6 198F ; [.318E.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH THA> 19B7 198F ; [.318E.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH THA> 19BA 198F ; [.318E.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH THA> 1990 ; [.318F.0020.0002] # NEW TAI LUE LETTER HIGH NA 19B5 1990 ; [.318F.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH NA> 19B6 1990 ; [.318F.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH NA> 19B7 1990 ; [.318F.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH NA> 19BA 1990 ; [.318F.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH NA> 1991 ; [.3190.0020.0002] # NEW TAI LUE LETTER LOW TA 19B5 1991 ; [.3190.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW TA> 19B6 1991 ; [.3190.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW TA> 19B7 1991 ; [.3190.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW TA> 19BA 1991 ; [.3190.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW TA> 1992 ; [.3191.0020.0002] # NEW TAI LUE LETTER LOW THA 19B5 1992 ; [.3191.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW THA> 19B6 1992 ; [.3191.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW THA> 19B7 1992 ; [.3191.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW THA> 19BA 1992 ; [.3191.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW THA> 1993 ; [.3192.0020.0002] # NEW TAI LUE LETTER LOW NA 19B5 1993 ; [.3192.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW NA> 19B6 1993 ; [.3192.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW NA> 19B7 1993 ; [.3192.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW NA> 19BA 1993 ; [.3192.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW NA> 1994 ; [.3193.0020.0002] # NEW TAI LUE LETTER HIGH PA 19B5 1994 ; [.3193.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH PA> 19B6 1994 ; [.3193.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH PA> 19B7 1994 ; [.3193.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH PA> 19BA 1994 ; [.3193.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH PA> 1995 ; [.3194.0020.0002] # NEW TAI LUE LETTER HIGH PHA 19B5 1995 ; [.3194.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH PHA> 19B6 1995 ; [.3194.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH PHA> 19B7 1995 ; [.3194.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH PHA> 19BA 1995 ; [.3194.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH PHA> 1996 ; [.3195.0020.0002] # NEW TAI LUE LETTER HIGH MA 19B5 1996 ; [.3195.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH MA> 19B6 1996 ; [.3195.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH MA> 19B7 1996 ; [.3195.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH MA> 19BA 1996 ; [.3195.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH MA> 1997 ; [.3196.0020.0002] # NEW TAI LUE LETTER LOW PA 19B5 1997 ; [.3196.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW PA> 19B6 1997 ; [.3196.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW PA> 19B7 1997 ; [.3196.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW PA> 19BA 1997 ; [.3196.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW PA> 1998 ; [.3197.0020.0002] # NEW TAI LUE LETTER LOW PHA 19B5 1998 ; [.3197.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW PHA> 19B6 1998 ; [.3197.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW PHA> 19B7 1998 ; [.3197.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW PHA> 19BA 1998 ; [.3197.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW PHA> 1999 ; [.3198.0020.0002] # NEW TAI LUE LETTER LOW MA 19B5 1999 ; [.3198.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW MA> 19B6 1999 ; [.3198.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW MA> 19B7 1999 ; [.3198.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW MA> 19BA 1999 ; [.3198.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW MA> 199A ; [.3199.0020.0002] # NEW TAI LUE LETTER HIGH FA 19B5 199A ; [.3199.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH FA> 19B6 199A ; [.3199.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH FA> 19B7 199A ; [.3199.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH FA> 19BA 199A ; [.3199.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH FA> 199B ; [.319A.0020.0002] # NEW TAI LUE LETTER HIGH VA 19B5 199B ; [.319A.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH VA> 19B6 199B ; [.319A.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH VA> 19B7 199B ; [.319A.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH VA> 19BA 199B ; [.319A.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH VA> 199C ; [.319B.0020.0002] # NEW TAI LUE LETTER HIGH LA 19B5 199C ; [.319B.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH LA> 19B6 199C ; [.319B.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH LA> 19DE ; [.319B.0020.0004][.31B1.0020.0004] # NEW TAI LUE SIGN LAE 19DF ; [.319B.0020.0004][.31B1.0020.0004][.31BC.0020.0004] # NEW TAI LUE SIGN LAEV 19B7 199C ; [.319B.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH LA> 19BA 199C ; [.319B.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH LA> 199D ; [.319C.0020.0002] # NEW TAI LUE LETTER LOW FA 19B5 199D ; [.319C.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW FA> 19B6 199D ; [.319C.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW FA> 19B7 199D ; [.319C.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW FA> 19BA 199D ; [.319C.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW FA> 199E ; [.319D.0020.0002] # NEW TAI LUE LETTER LOW VA 19B5 199E ; [.319D.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW VA> 19B6 199E ; [.319D.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW VA> 19B7 199E ; [.319D.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW VA> 19BA 199E ; [.319D.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW VA> 199F ; [.319E.0020.0002] # NEW TAI LUE LETTER LOW LA 19B5 199F ; [.319E.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW LA> 19B6 199F ; [.319E.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW LA> 19B7 199F ; [.319E.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW LA> 19BA 199F ; [.319E.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW LA> 19A0 ; [.319F.0020.0002] # NEW TAI LUE LETTER HIGH HA 19B5 19A0 ; [.319F.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH HA> 19B6 19A0 ; [.319F.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH HA> 19B7 19A0 ; [.319F.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH HA> 19BA 19A0 ; [.319F.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH HA> 19A1 ; [.31A0.0020.0002] # NEW TAI LUE LETTER HIGH DA 19B5 19A1 ; [.31A0.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH DA> 19B6 19A1 ; [.31A0.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH DA> 19B7 19A1 ; [.31A0.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH DA> 19BA 19A1 ; [.31A0.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH DA> 19A2 ; [.31A1.0020.0002] # NEW TAI LUE LETTER HIGH BA 19B5 19A2 ; [.31A1.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH BA> 19B6 19A2 ; [.31A1.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH BA> 19B7 19A2 ; [.31A1.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH BA> 19BA 19A2 ; [.31A1.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH BA> 19A3 ; [.31A2.0020.0002] # NEW TAI LUE LETTER LOW HA 19B5 19A3 ; [.31A2.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW HA> 19B6 19A3 ; [.31A2.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW HA> 19B7 19A3 ; [.31A2.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW HA> 19BA 19A3 ; [.31A2.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW HA> 19A4 ; [.31A3.0020.0002] # NEW TAI LUE LETTER LOW DA 19B5 19A4 ; [.31A3.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW DA> 19B6 19A4 ; [.31A3.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW DA> 19B7 19A4 ; [.31A3.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW DA> 19BA 19A4 ; [.31A3.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW DA> 19A5 ; [.31A4.0020.0002] # NEW TAI LUE LETTER LOW BA 19B5 19A5 ; [.31A4.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW BA> 19B6 19A5 ; [.31A4.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW BA> 19B7 19A5 ; [.31A4.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW BA> 19BA 19A5 ; [.31A4.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW BA> 19A6 ; [.31A5.0020.0002] # NEW TAI LUE LETTER HIGH KVA 19B5 19A6 ; [.31A5.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH KVA> 19B6 19A6 ; [.31A5.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH KVA> 19B7 19A6 ; [.31A5.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH KVA> 19BA 19A6 ; [.31A5.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH KVA> 19A7 ; [.31A6.0020.0002] # NEW TAI LUE LETTER HIGH XVA 19B5 19A7 ; [.31A6.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH XVA> 19B6 19A7 ; [.31A6.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH XVA> 19B7 19A7 ; [.31A6.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH XVA> 19BA 19A7 ; [.31A6.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH XVA> 19A8 ; [.31A7.0020.0002] # NEW TAI LUE LETTER LOW KVA 19B5 19A8 ; [.31A7.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW KVA> 19B6 19A8 ; [.31A7.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW KVA> 19B7 19A8 ; [.31A7.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW KVA> 19BA 19A8 ; [.31A7.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW KVA> 19A9 ; [.31A8.0020.0002] # NEW TAI LUE LETTER LOW XVA 19B5 19A9 ; [.31A8.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW XVA> 19B6 19A9 ; [.31A8.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW XVA> 19B7 19A9 ; [.31A8.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW XVA> 19BA 19A9 ; [.31A8.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW XVA> 19AA ; [.31A9.0020.0002] # NEW TAI LUE LETTER HIGH SUA 19B5 19AA ; [.31A9.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH SUA> 19B6 19AA ; [.31A9.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH SUA> 19B7 19AA ; [.31A9.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH SUA> 19BA 19AA ; [.31A9.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH SUA> 19AB ; [.31AA.0020.0002] # NEW TAI LUE LETTER LOW SUA 19B5 19AB ; [.31AA.0020.0002][.31B0.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW SUA> 19B6 19AB ; [.31AA.0020.0002][.31B1.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW SUA> 19B7 19AB ; [.31AA.0020.0002][.31B2.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW SUA> 19BA 19AB ; [.31AA.0020.0002][.31B5.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW SUA> 19B0 ; [.31AB.0020.0002] # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER 19B1 ; [.31AC.0020.0002] # NEW TAI LUE VOWEL SIGN AA 19B2 ; [.31AD.0020.0002] # NEW TAI LUE VOWEL SIGN II 19B3 ; [.31AE.0020.0002] # NEW TAI LUE VOWEL SIGN U 19B4 ; [.31AF.0020.0002] # NEW TAI LUE VOWEL SIGN UU 19B5 ; [.31B0.0020.0002] # NEW TAI LUE VOWEL SIGN E 19B6 ; [.31B1.0020.0002] # NEW TAI LUE VOWEL SIGN AE 19B7 ; [.31B2.0020.0002] # NEW TAI LUE VOWEL SIGN O 19B8 ; [.31B3.0020.0002] # NEW TAI LUE VOWEL SIGN OA 19B9 ; [.31B4.0020.0002] # NEW TAI LUE VOWEL SIGN UE 19BA ; [.31B5.0020.0002] # NEW TAI LUE VOWEL SIGN AY 19BB ; [.31B6.0020.0002] # NEW TAI LUE VOWEL SIGN AAY 19BC ; [.31B7.0020.0002] # NEW TAI LUE VOWEL SIGN UY 19BD ; [.31B8.0020.0002] # NEW TAI LUE VOWEL SIGN OY 19BE ; [.31B9.0020.0002] # NEW TAI LUE VOWEL SIGN OAY 19BF ; [.31BA.0020.0002] # NEW TAI LUE VOWEL SIGN UEY 19C0 ; [.31BB.0020.0002] # NEW TAI LUE VOWEL SIGN IY 19C1 ; [.31BC.0020.0002] # NEW TAI LUE LETTER FINAL V 19C2 ; [.31BD.0020.0002] # NEW TAI LUE LETTER FINAL NG 19C3 ; [.31BE.0020.0002] # NEW TAI LUE LETTER FINAL N 19C4 ; [.31BF.0020.0002] # NEW TAI LUE LETTER FINAL M 19C5 ; [.31C0.0020.0002] # NEW TAI LUE LETTER FINAL K 19C6 ; [.31C1.0020.0002] # NEW TAI LUE LETTER FINAL D 19C7 ; [.31C2.0020.0002] # NEW TAI LUE LETTER FINAL B 19C8 ; [.31C3.0020.0002] # NEW TAI LUE TONE MARK-1 19C9 ; [.31C4.0020.0002] # NEW TAI LUE TONE MARK-2 1A20 ; [.31C5.0020.0002] # TAI THAM LETTER HIGH KA 1A21 ; [.31C6.0020.0002] # TAI THAM LETTER HIGH KHA 1A22 ; [.31C7.0020.0002] # TAI THAM LETTER HIGH KXA 1A23 ; [.31C8.0020.0002] # TAI THAM LETTER LOW KA 1A24 ; [.31C9.0020.0002] # TAI THAM LETTER LOW KXA 1A25 ; [.31CA.0020.0002] # TAI THAM LETTER LOW KHA 1A26 ; [.31CB.0020.0002] # TAI THAM LETTER NGA 1A58 ; [.31CB.0020.0004] # TAI THAM SIGN MAI KANG LAI 1A59 ; [.31CB.0020.0004] # TAI THAM CONSONANT SIGN FINAL NGA 1A27 ; [.31CC.0020.0002] # TAI THAM LETTER HIGH CA 1A28 ; [.31CD.0020.0002] # TAI THAM LETTER HIGH CHA 1A29 ; [.31CE.0020.0002] # TAI THAM LETTER LOW CA 1A2A ; [.31CF.0020.0002] # TAI THAM LETTER LOW SA 1A2B ; [.31D0.0020.0002] # TAI THAM LETTER LOW CHA 1A2C ; [.31D1.0020.0002] # TAI THAM LETTER NYA 1A2D ; [.31D2.0020.0002] # TAI THAM LETTER RATA 1A2E ; [.31D3.0020.0002] # TAI THAM LETTER HIGH RATHA 1A2F ; [.31D4.0020.0002] # TAI THAM LETTER DA 1A30 ; [.31D5.0020.0002] # TAI THAM LETTER LOW RATHA 1A31 ; [.31D6.0020.0002] # TAI THAM LETTER RANA 1A32 ; [.31D7.0020.0002] # TAI THAM LETTER HIGH TA 1A33 ; [.31D8.0020.0002] # TAI THAM LETTER HIGH THA 1A34 ; [.31D9.0020.0002] # TAI THAM LETTER LOW TA 1A35 ; [.31DA.0020.0002] # TAI THAM LETTER LOW THA 1A36 ; [.31DB.0020.0002] # TAI THAM LETTER NA 1A37 ; [.31DC.0020.0002] # TAI THAM LETTER BA 1A38 ; [.31DD.0020.0002] # TAI THAM LETTER HIGH PA 1A39 ; [.31DE.0020.0002] # TAI THAM LETTER HIGH PHA 1A3A ; [.31DF.0020.0002] # TAI THAM LETTER HIGH FA 1A3B ; [.31E0.0020.0002] # TAI THAM LETTER LOW PA 1A5A ; [.31E0.0020.0004] # TAI THAM CONSONANT SIGN LOW PA 1A5B ; [.31E0.0020.0004] # TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA 1A3C ; [.31E1.0020.0002] # TAI THAM LETTER LOW FA 1A3D ; [.31E2.0020.0002] # TAI THAM LETTER LOW PHA 1A3E ; [.31E3.0020.0002] # TAI THAM LETTER MA 1A3F ; [.31E4.0020.0002] # TAI THAM LETTER LOW YA 1A40 ; [.31E5.0020.0002] # TAI THAM LETTER HIGH YA 1A41 ; [.31E6.0020.0002] # TAI THAM LETTER RA 1A42 ; [.31E7.0020.0002] # TAI THAM LETTER RUE 1A43 ; [.31E8.0020.0002] # TAI THAM LETTER LA 1A44 ; [.31E9.0020.0002] # TAI THAM LETTER LUE 1A45 ; [.31EA.0020.0002] # TAI THAM LETTER WA 1A46 ; [.31EB.0020.0002] # TAI THAM LETTER HIGH SHA 1A54 ; [.31EB.0020.0004][.3211.0020.0004][.31EB.0020.0004] # TAI THAM LETTER GREAT SA 1A47 ; [.31EC.0020.0002] # TAI THAM LETTER HIGH SSA 1A48 ; [.31ED.0020.0002] # TAI THAM LETTER HIGH SA 1A49 ; [.31EE.0020.0002] # TAI THAM LETTER HIGH HA 1A4A ; [.31EF.0020.0002] # TAI THAM LETTER LLA 1A4B ; [.31F0.0020.0002] # TAI THAM LETTER A 1A4C ; [.31F1.0020.0002] # TAI THAM LETTER LOW HA 1A53 ; [.31F2.0020.0002] # TAI THAM LETTER LAE 1A6B ; [.31F3.0020.0002] # TAI THAM VOWEL SIGN O 1A55 ; [.31F4.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL RA 1A56 ; [.31F5.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL LA 1A57 ; [.31F6.0020.0002] # TAI THAM CONSONANT SIGN LA TANG LAI 1A5C ; [.31F7.0020.0002] # TAI THAM CONSONANT SIGN MA 1A5D ; [.31F8.0020.0002] # TAI THAM CONSONANT SIGN BA 1A5E ; [.31F9.0020.0002] # TAI THAM CONSONANT SIGN SA 1A4D ; [.31FA.0020.0002] # TAI THAM LETTER I 1A4E ; [.31FB.0020.0002] # TAI THAM LETTER II 1A4F ; [.31FC.0020.0002] # TAI THAM LETTER U 1A50 ; [.31FD.0020.0002] # TAI THAM LETTER UU 1A51 ; [.31FE.0020.0002] # TAI THAM LETTER EE 1A52 ; [.31FF.0020.0002] # TAI THAM LETTER OO 1A61 ; [.3200.0020.0002] # TAI THAM VOWEL SIGN A 1A6C ; [.3201.0020.0002] # TAI THAM VOWEL SIGN OA BELOW 1A62 ; [.3202.0020.0002] # TAI THAM VOWEL SIGN MAI SAT 1A63 ; [.3203.0020.0002] # TAI THAM VOWEL SIGN AA 1A64 ; [.3203.0020.0004] # TAI THAM VOWEL SIGN TALL AA 1A65 ; [.3204.0020.0002] # TAI THAM VOWEL SIGN I 1A66 ; [.3205.0020.0002] # TAI THAM VOWEL SIGN II 1A67 ; [.3206.0020.0002] # TAI THAM VOWEL SIGN UE 1A68 ; [.3207.0020.0002] # TAI THAM VOWEL SIGN UUE 1A69 ; [.3208.0020.0002] # TAI THAM VOWEL SIGN U 1A6A ; [.3209.0020.0002] # TAI THAM VOWEL SIGN UU 1A6E ; [.320A.0020.0002] # TAI THAM VOWEL SIGN E 1A6F ; [.320B.0020.0002] # TAI THAM VOWEL SIGN AE 1A73 ; [.320C.0020.0002] # TAI THAM VOWEL SIGN OA ABOVE 1A70 ; [.320D.0020.0002] # TAI THAM VOWEL SIGN OO 1A71 ; [.320E.0020.0002] # TAI THAM VOWEL SIGN AI 1A72 ; [.320F.0020.0002] # TAI THAM VOWEL SIGN THAM AI 1A6D ; [.3210.0020.0002] # TAI THAM VOWEL SIGN OY 1A60 ; [.3211.0020.0002] # TAI THAM SIGN SAKOT AA00 ; [.3212.0020.0002] # CHAM LETTER A AA01 ; [.3213.0020.0002] # CHAM LETTER I AA02 ; [.3214.0020.0002] # CHAM LETTER U AA03 ; [.3215.0020.0002] # CHAM LETTER E AA04 ; [.3216.0020.0002] # CHAM LETTER AI AA05 ; [.3217.0020.0002] # CHAM LETTER O AA06 ; [.3218.0020.0002] # CHAM LETTER KA AA07 ; [.3219.0020.0002] # CHAM LETTER KHA AA08 ; [.321A.0020.0002] # CHAM LETTER GA AA09 ; [.321B.0020.0002] # CHAM LETTER GHA AA0A ; [.321C.0020.0002] # CHAM LETTER NGUE AA0B ; [.321D.0020.0002] # CHAM LETTER NGA AA0C ; [.321E.0020.0002] # CHAM LETTER CHA AA0D ; [.321F.0020.0002] # CHAM LETTER CHHA AA0E ; [.3220.0020.0002] # CHAM LETTER JA AA0F ; [.3221.0020.0002] # CHAM LETTER JHA AA10 ; [.3222.0020.0002] # CHAM LETTER NHUE AA11 ; [.3223.0020.0002] # CHAM LETTER NHA AA12 ; [.3224.0020.0002] # CHAM LETTER NHJA AA13 ; [.3225.0020.0002] # CHAM LETTER TA AA14 ; [.3226.0020.0002] # CHAM LETTER THA AA15 ; [.3227.0020.0002] # CHAM LETTER DA AA16 ; [.3228.0020.0002] # CHAM LETTER DHA AA17 ; [.3229.0020.0002] # CHAM LETTER NUE AA18 ; [.322A.0020.0002] # CHAM LETTER NA AA19 ; [.322B.0020.0002] # CHAM LETTER DDA AA1A ; [.322C.0020.0002] # CHAM LETTER PA AA1B ; [.322D.0020.0002] # CHAM LETTER PPA AA1C ; [.322E.0020.0002] # CHAM LETTER PHA AA1D ; [.322F.0020.0002] # CHAM LETTER BA AA1E ; [.3230.0020.0002] # CHAM LETTER BHA AA1F ; [.3231.0020.0002] # CHAM LETTER MUE AA20 ; [.3232.0020.0002] # CHAM LETTER MA AA21 ; [.3233.0020.0002] # CHAM LETTER BBA AA22 ; [.3234.0020.0002] # CHAM LETTER YA AA23 ; [.3235.0020.0002] # CHAM LETTER RA AA24 ; [.3236.0020.0002] # CHAM LETTER LA AA25 ; [.3237.0020.0002] # CHAM LETTER VA AA26 ; [.3238.0020.0002] # CHAM LETTER SSA AA27 ; [.3239.0020.0002] # CHAM LETTER SA AA28 ; [.323A.0020.0002] # CHAM LETTER HA AA33 ; [.323B.0020.0002] # CHAM CONSONANT SIGN YA AA34 ; [.323C.0020.0002] # CHAM CONSONANT SIGN RA AA35 ; [.323D.0020.0002] # CHAM CONSONANT SIGN LA AA36 ; [.323E.0020.0002] # CHAM CONSONANT SIGN WA AA29 ; [.323F.0020.0002] # CHAM VOWEL SIGN AA AA2A ; [.3240.0020.0002] # CHAM VOWEL SIGN I AA2B ; [.3241.0020.0002] # CHAM VOWEL SIGN II AA2C ; [.3242.0020.0002] # CHAM VOWEL SIGN EI AA2D ; [.3243.0020.0002] # CHAM VOWEL SIGN U AA2E ; [.3244.0020.0002] # CHAM VOWEL SIGN OE AA2F ; [.3245.0020.0002] # CHAM VOWEL SIGN O AA30 ; [.3246.0020.0002] # CHAM VOWEL SIGN AI AA31 ; [.3247.0020.0002] # CHAM VOWEL SIGN AU AA32 ; [.3248.0020.0002] # CHAM VOWEL SIGN UE AA40 ; [.3249.0020.0002] # CHAM LETTER FINAL K AA41 ; [.324A.0020.0002] # CHAM LETTER FINAL G AA42 ; [.324B.0020.0002] # CHAM LETTER FINAL NG AA43 ; [.324C.0020.0002] # CHAM CONSONANT SIGN FINAL NG AA44 ; [.324D.0020.0002] # CHAM LETTER FINAL CH AA45 ; [.324E.0020.0002] # CHAM LETTER FINAL T AA46 ; [.324F.0020.0002] # CHAM LETTER FINAL N AA47 ; [.3250.0020.0002] # CHAM LETTER FINAL P AA48 ; [.3251.0020.0002] # CHAM LETTER FINAL Y AA49 ; [.3252.0020.0002] # CHAM LETTER FINAL R AA4A ; [.3253.0020.0002] # CHAM LETTER FINAL L AA4B ; [.3254.0020.0002] # CHAM LETTER FINAL SS AA4C ; [.3255.0020.0002] # CHAM CONSONANT SIGN FINAL M AA4D ; [.3256.0020.0002] # CHAM CONSONANT SIGN FINAL H 1B05 ; [.3257.0020.0002] # BALINESE LETTER AKARA 1B06 ; [.3258.0020.0002] # BALINESE LETTER AKARA TEDUNG 1B05 1B35 ; [.3258.0020.0002] # BALINESE LETTER AKARA TEDUNG 1B07 ; [.3259.0020.0002] # BALINESE LETTER IKARA 1B08 ; [.325A.0020.0002] # BALINESE LETTER IKARA TEDUNG 1B07 1B35 ; [.325A.0020.0002] # BALINESE LETTER IKARA TEDUNG 1B09 ; [.325B.0020.0002] # BALINESE LETTER UKARA 1B0A ; [.325C.0020.0002] # BALINESE LETTER UKARA TEDUNG 1B09 1B35 ; [.325C.0020.0002] # BALINESE LETTER UKARA TEDUNG 1B0B ; [.325D.0020.0002] # BALINESE LETTER RA REPA 1B0C ; [.325E.0020.0002] # BALINESE LETTER RA REPA TEDUNG 1B0B 1B35 ; [.325E.0020.0002] # BALINESE LETTER RA REPA TEDUNG 1B0D ; [.325F.0020.0002] # BALINESE LETTER LA LENGA 1B0E ; [.3260.0020.0002] # BALINESE LETTER LA LENGA TEDUNG 1B0D 1B35 ; [.3260.0020.0002] # BALINESE LETTER LA LENGA TEDUNG 1B0F ; [.3261.0020.0002] # BALINESE LETTER EKARA 1B10 ; [.3262.0020.0002] # BALINESE LETTER AIKARA 1B11 ; [.3263.0020.0002] # BALINESE LETTER OKARA 1B12 ; [.3264.0020.0002] # BALINESE LETTER OKARA TEDUNG 1B11 1B35 ; [.3264.0020.0002] # BALINESE LETTER OKARA TEDUNG 1B13 ; [.3265.0020.0002] # BALINESE LETTER KA 1B45 ; [.3266.0020.0002] # BALINESE LETTER KAF SASAK 1B46 ; [.3267.0020.0002] # BALINESE LETTER KHOT SASAK 1B14 ; [.3268.0020.0002] # BALINESE LETTER KA MAHAPRANA 1B15 ; [.3269.0020.0002] # BALINESE LETTER GA 1B16 ; [.326A.0020.0002] # BALINESE LETTER GA GORA 1B17 ; [.326B.0020.0002] # BALINESE LETTER NGA 1B18 ; [.326C.0020.0002] # BALINESE LETTER CA 1B19 ; [.326D.0020.0002] # BALINESE LETTER CA LACA 1B1A ; [.326E.0020.0002] # BALINESE LETTER JA 1B1B ; [.326F.0020.0002] # BALINESE LETTER JA JERA 1B1C ; [.3270.0020.0002] # BALINESE LETTER NYA 1B1D ; [.3271.0020.0002] # BALINESE LETTER TA LATIK 1B1E ; [.3272.0020.0002] # BALINESE LETTER TA MURDA MAHAPRANA 1B1F ; [.3273.0020.0002] # BALINESE LETTER DA MURDA ALPAPRANA 1B20 ; [.3274.0020.0002] # BALINESE LETTER DA MURDA MAHAPRANA 1B21 ; [.3275.0020.0002] # BALINESE LETTER NA RAMBAT 1B22 ; [.3276.0020.0002] # BALINESE LETTER TA 1B47 ; [.3277.0020.0002] # BALINESE LETTER TZIR SASAK 1B23 ; [.3278.0020.0002] # BALINESE LETTER TA TAWA 1B24 ; [.3279.0020.0002] # BALINESE LETTER DA 1B25 ; [.327A.0020.0002] # BALINESE LETTER DA MADU 1B26 ; [.327B.0020.0002] # BALINESE LETTER NA 1B27 ; [.327C.0020.0002] # BALINESE LETTER PA 1B48 ; [.327D.0020.0002] # BALINESE LETTER EF SASAK 1B28 ; [.327E.0020.0002] # BALINESE LETTER PA KAPAL 1B29 ; [.327F.0020.0002] # BALINESE LETTER BA 1B2A ; [.3280.0020.0002] # BALINESE LETTER BA KEMBANG 1B2B ; [.3281.0020.0002] # BALINESE LETTER MA 1B2C ; [.3282.0020.0002] # BALINESE LETTER YA 1B2D ; [.3283.0020.0002] # BALINESE LETTER RA 1B2E ; [.3284.0020.0002] # BALINESE LETTER LA 1B2F ; [.3285.0020.0002] # BALINESE LETTER WA 1B49 ; [.3286.0020.0002] # BALINESE LETTER VE SASAK 1B30 ; [.3287.0020.0002] # BALINESE LETTER SA SAGA 1B31 ; [.3288.0020.0002] # BALINESE LETTER SA SAPA 1B32 ; [.3289.0020.0002] # BALINESE LETTER SA 1B4A ; [.328A.0020.0002] # BALINESE LETTER ZAL SASAK 1B4B ; [.328B.0020.0002] # BALINESE LETTER ASYURA SASAK 1B33 ; [.328C.0020.0002] # BALINESE LETTER HA 1B35 ; [.328D.0020.0002] # BALINESE VOWEL SIGN TEDUNG 1B36 ; [.328E.0020.0002] # BALINESE VOWEL SIGN ULU 1B37 ; [.328F.0020.0002] # BALINESE VOWEL SIGN ULU SARI 1B38 ; [.3290.0020.0002] # BALINESE VOWEL SIGN SUKU 1B39 ; [.3291.0020.0002] # BALINESE VOWEL SIGN SUKU ILUT 1B3A ; [.3292.0020.0002] # BALINESE VOWEL SIGN RA REPA 1B3B ; [.3293.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG 1B3A 1B35 ; [.3293.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG 1B3C ; [.3294.0020.0002] # BALINESE VOWEL SIGN LA LENGA 1B3D ; [.3295.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG 1B3C 1B35 ; [.3295.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG 1B3E ; [.3296.0020.0002] # BALINESE VOWEL SIGN TALING 1B3F ; [.3297.0020.0002] # BALINESE VOWEL SIGN TALING REPA 1B40 ; [.3298.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG 1B3E 1B35 ; [.3298.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG 1B41 ; [.3299.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG 1B3F 1B35 ; [.3299.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42 ; [.329A.0020.0002] # BALINESE VOWEL SIGN PEPET 1B43 ; [.329B.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG 1B42 1B35 ; [.329B.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG 1B44 ; [.329C.0020.0002] # BALINESE ADEG ADEG A984 ; [.329D.0020.0002] # JAVANESE LETTER A A985 ; [.329E.0020.0002] # JAVANESE LETTER I KAWI A986 ; [.329F.0020.0002] # JAVANESE LETTER I A987 ; [.32A0.0020.0002] # JAVANESE LETTER II A988 ; [.32A1.0020.0002] # JAVANESE LETTER U A989 ; [.32A2.0020.0002] # JAVANESE LETTER PA CEREK A98A ; [.32A3.0020.0002] # JAVANESE LETTER NGA LELET A98B ; [.32A4.0020.0002] # JAVANESE LETTER NGA LELET RASWADI A98C ; [.32A5.0020.0002] # JAVANESE LETTER E A98D ; [.32A6.0020.0002] # JAVANESE LETTER AI A98E ; [.32A7.0020.0002] # JAVANESE LETTER O A98F ; [.32A8.0020.0002] # JAVANESE LETTER KA A990 ; [.32A9.0020.0002] # JAVANESE LETTER KA SASAK A991 ; [.32AA.0020.0002] # JAVANESE LETTER KA MURDA A992 ; [.32AB.0020.0002] # JAVANESE LETTER GA A993 ; [.32AC.0020.0002] # JAVANESE LETTER GA MURDA A994 ; [.32AD.0020.0002] # JAVANESE LETTER NGA A995 ; [.32AE.0020.0002] # JAVANESE LETTER CA A996 ; [.32AF.0020.0002] # JAVANESE LETTER CA MURDA A997 ; [.32B0.0020.0002] # JAVANESE LETTER JA A998 ; [.32B1.0020.0002] # JAVANESE LETTER NYA MURDA A999 ; [.32B2.0020.0002] # JAVANESE LETTER JA MAHAPRANA A99A ; [.32B3.0020.0002] # JAVANESE LETTER NYA A99B ; [.32B4.0020.0002] # JAVANESE LETTER TTA A99C ; [.32B5.0020.0002] # JAVANESE LETTER TTA MAHAPRANA A99D ; [.32B6.0020.0002] # JAVANESE LETTER DDA A99E ; [.32B7.0020.0002] # JAVANESE LETTER DDA MAHAPRANA A99F ; [.32B8.0020.0002] # JAVANESE LETTER NA MURDA A9A0 ; [.32B9.0020.0002] # JAVANESE LETTER TA A9A1 ; [.32BA.0020.0002] # JAVANESE LETTER TA MURDA A9A2 ; [.32BB.0020.0002] # JAVANESE LETTER DA A9A3 ; [.32BC.0020.0002] # JAVANESE LETTER DA MAHAPRANA A9A4 ; [.32BD.0020.0002] # JAVANESE LETTER NA A9A5 ; [.32BE.0020.0002] # JAVANESE LETTER PA A9A6 ; [.32BF.0020.0002] # JAVANESE LETTER PA MURDA A9A7 ; [.32C0.0020.0002] # JAVANESE LETTER BA A9A8 ; [.32C1.0020.0002] # JAVANESE LETTER BA MURDA A9A9 ; [.32C2.0020.0002] # JAVANESE LETTER MA A9AA ; [.32C3.0020.0002] # JAVANESE LETTER YA A9BE ; [.32C4.0020.0002] # JAVANESE CONSONANT SIGN PENGKAL A9AB ; [.32C5.0020.0002] # JAVANESE LETTER RA A9AC ; [.32C5.0020.0004] # JAVANESE LETTER RA AGUNG A9BF ; [.32C6.0020.0002] # JAVANESE CONSONANT SIGN CAKRA A9AD ; [.32C7.0020.0002] # JAVANESE LETTER LA A9AE ; [.32C8.0020.0002] # JAVANESE LETTER WA A9AF ; [.32C9.0020.0002] # JAVANESE LETTER SA MURDA A9B0 ; [.32CA.0020.0002] # JAVANESE LETTER SA MAHAPRANA A9B1 ; [.32CB.0020.0002] # JAVANESE LETTER SA A9B2 ; [.32CC.0020.0002] # JAVANESE LETTER HA A9B4 ; [.32CD.0020.0002] # JAVANESE VOWEL SIGN TARUNG A9BC ; [.32CE.0020.0002] # JAVANESE VOWEL SIGN PEPET A9B6 ; [.32CF.0020.0002] # JAVANESE VOWEL SIGN WULU A9B7 ; [.32D0.0020.0002] # JAVANESE VOWEL SIGN WULU MELIK A9B8 ; [.32D1.0020.0002] # JAVANESE VOWEL SIGN SUKU A9B9 ; [.32D2.0020.0002] # JAVANESE VOWEL SIGN SUKU MENDUT A9BD ; [.32D3.0020.0002] # JAVANESE CONSONANT SIGN KERET A9BA ; [.32D4.0020.0002] # JAVANESE VOWEL SIGN TALING A9BB ; [.32D5.0020.0002] # JAVANESE VOWEL SIGN DIRGA MURE A9B5 ; [.32D6.0020.0002] # JAVANESE VOWEL SIGN TOLONG A9C0 ; [.32D7.0020.0002] # JAVANESE PANGKON 1880 ; [.32D8.0020.0002] # MONGOLIAN LETTER ALI GALI ANUSVARA ONE 1881 ; [.32D9.0020.0002] # MONGOLIAN LETTER ALI GALI VISARGA ONE 1882 ; [.32DA.0020.0002] # MONGOLIAN LETTER ALI GALI DAMARU 1883 ; [.32DB.0020.0002] # MONGOLIAN LETTER ALI GALI UBADAMA 1884 ; [.32DC.0020.0002] # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA 1885 ; [.32DD.0020.0002] # MONGOLIAN LETTER ALI GALI BALUDA 1886 ; [.32DE.0020.0002] # MONGOLIAN LETTER ALI GALI THREE BALUDA 1843 ; [.32DF.0020.0002] # MONGOLIAN LETTER TODO LONG VOWEL SIGN 1820 ; [.32E0.0020.0002] # MONGOLIAN LETTER A 1887 ; [.32E1.0020.0002] # MONGOLIAN LETTER ALI GALI A 1821 ; [.32E2.0020.0002] # MONGOLIAN LETTER E 1844 ; [.32E3.0020.0002] # MONGOLIAN LETTER TODO E 185D ; [.32E4.0020.0002] # MONGOLIAN LETTER SIBE E 1822 ; [.32E5.0020.0002] # MONGOLIAN LETTER I 1845 ; [.32E6.0020.0002] # MONGOLIAN LETTER TODO I 185E ; [.32E7.0020.0002] # MONGOLIAN LETTER SIBE I 1873 ; [.32E8.0020.0002] # MONGOLIAN LETTER MANCHU I 1888 ; [.32E9.0020.0002] # MONGOLIAN LETTER ALI GALI I 185F ; [.32EA.0020.0002] # MONGOLIAN LETTER SIBE IY 1823 ; [.32EB.0020.0002] # MONGOLIAN LETTER O 1846 ; [.32EC.0020.0002] # MONGOLIAN LETTER TODO O 1824 ; [.32ED.0020.0002] # MONGOLIAN LETTER U 1847 ; [.32EE.0020.0002] # MONGOLIAN LETTER TODO U 1861 ; [.32EF.0020.0002] # MONGOLIAN LETTER SIBE U 1825 ; [.32F0.0020.0002] # MONGOLIAN LETTER OE 1848 ; [.32F1.0020.0002] # MONGOLIAN LETTER TODO OE 1826 ; [.32F2.0020.0002] # MONGOLIAN LETTER UE 1849 ; [.32F3.0020.0002] # MONGOLIAN LETTER TODO UE 1860 ; [.32F4.0020.0002] # MONGOLIAN LETTER SIBE UE 1827 ; [.32F5.0020.0002] # MONGOLIAN LETTER EE 1828 ; [.32F6.0020.0002] # MONGOLIAN LETTER NA 1829 ; [.32F7.0020.0002] # MONGOLIAN LETTER ANG 184A ; [.32F8.0020.0002] # MONGOLIAN LETTER TODO ANG 1862 ; [.32F9.0020.0002] # MONGOLIAN LETTER SIBE ANG 188A ; [.32FA.0020.0002] # MONGOLIAN LETTER ALI GALI NGA 189B ; [.32FB.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI NGA 182A ; [.32FC.0020.0002] # MONGOLIAN LETTER BA 184B ; [.32FD.0020.0002] # MONGOLIAN LETTER TODO BA 182B ; [.32FE.0020.0002] # MONGOLIAN LETTER PA 184C ; [.32FF.0020.0002] # MONGOLIAN LETTER TODO PA 1866 ; [.3300.0020.0002] # MONGOLIAN LETTER SIBE PA 182C ; [.3301.0020.0002] # MONGOLIAN LETTER QA 184D ; [.3302.0020.0002] # MONGOLIAN LETTER TODO QA 182D ; [.3303.0020.0002] # MONGOLIAN LETTER GA 184E ; [.3304.0020.0002] # MONGOLIAN LETTER TODO GA 1864 ; [.3305.0020.0002] # MONGOLIAN LETTER SIBE GA 189A ; [.3306.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI GHA 1865 ; [.3307.0020.0002] # MONGOLIAN LETTER SIBE HA 182E ; [.3308.0020.0002] # MONGOLIAN LETTER MA 184F ; [.3309.0020.0002] # MONGOLIAN LETTER TODO MA 182F ; [.330A.0020.0002] # MONGOLIAN LETTER LA 1830 ; [.330B.0020.0002] # MONGOLIAN LETTER SA 1831 ; [.330C.0020.0002] # MONGOLIAN LETTER SHA 1867 ; [.330D.0020.0002] # MONGOLIAN LETTER SIBE SHA 189C ; [.330E.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CA 189D ; [.330F.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI JHA 18A2 ; [.3310.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI SSA 18A4 ; [.3311.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZHA 18A5 ; [.3312.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZA 1832 ; [.3313.0020.0002] # MONGOLIAN LETTER TA 1850 ; [.3314.0020.0002] # MONGOLIAN LETTER TODO TA 1868 ; [.3315.0020.0002] # MONGOLIAN LETTER SIBE TA 1833 ; [.3316.0020.0002] # MONGOLIAN LETTER DA 1851 ; [.3317.0020.0002] # MONGOLIAN LETTER TODO DA 1869 ; [.3318.0020.0002] # MONGOLIAN LETTER SIBE DA 1834 ; [.3319.0020.0002] # MONGOLIAN LETTER CHA 1852 ; [.331A.0020.0002] # MONGOLIAN LETTER TODO CHA 1871 ; [.331B.0020.0002] # MONGOLIAN LETTER SIBE CHA 185C ; [.331C.0020.0002] # MONGOLIAN LETTER TODO DZA 188B ; [.331D.0020.0002] # MONGOLIAN LETTER ALI GALI CA 1835 ; [.331E.0020.0002] # MONGOLIAN LETTER JA 1853 ; [.331F.0020.0002] # MONGOLIAN LETTER TODO JA 186A ; [.3320.0020.0002] # MONGOLIAN LETTER SIBE JA 1877 ; [.3321.0020.0002] # MONGOLIAN LETTER MANCHU ZHA 1836 ; [.3322.0020.0002] # MONGOLIAN LETTER YA 1855 ; [.3323.0020.0002] # MONGOLIAN LETTER TODO YA 1872 ; [.3324.0020.0002] # MONGOLIAN LETTER SIBE ZHA 1837 ; [.3325.0020.0002] # MONGOLIAN LETTER RA 1875 ; [.3326.0020.0002] # MONGOLIAN LETTER MANCHU RA 1838 ; [.3327.0020.0002] # MONGOLIAN LETTER WA 1856 ; [.3328.0020.0002] # MONGOLIAN LETTER TODO WA 1839 ; [.3329.0020.0002] # MONGOLIAN LETTER FA 186B ; [.332A.0020.0002] # MONGOLIAN LETTER SIBE FA 1876 ; [.332B.0020.0002] # MONGOLIAN LETTER MANCHU FA 183A ; [.332C.0020.0002] # MONGOLIAN LETTER KA 1857 ; [.332D.0020.0002] # MONGOLIAN LETTER TODO KA 1863 ; [.332E.0020.0002] # MONGOLIAN LETTER SIBE KA 1874 ; [.332F.0020.0002] # MONGOLIAN LETTER MANCHU KA 1889 ; [.3330.0020.0002] # MONGOLIAN LETTER ALI GALI KA 183B ; [.3331.0020.0002] # MONGOLIAN LETTER KHA 183C ; [.3332.0020.0002] # MONGOLIAN LETTER TSA 1854 ; [.3333.0020.0002] # MONGOLIAN LETTER TODO TSA 186E ; [.3334.0020.0002] # MONGOLIAN LETTER SIBE TSA 183D ; [.3335.0020.0002] # MONGOLIAN LETTER ZA 186F ; [.3336.0020.0002] # MONGOLIAN LETTER SIBE ZA 1858 ; [.3337.0020.0002] # MONGOLIAN LETTER TODO GAA 186C ; [.3338.0020.0002] # MONGOLIAN LETTER SIBE GAA 183E ; [.3339.0020.0002] # MONGOLIAN LETTER HAA 1859 ; [.333A.0020.0002] # MONGOLIAN LETTER TODO HAA 186D ; [.333B.0020.0002] # MONGOLIAN LETTER SIBE HAA 183F ; [.333C.0020.0002] # MONGOLIAN LETTER ZRA 1840 ; [.333D.0020.0002] # MONGOLIAN LETTER LHA 1841 ; [.333E.0020.0002] # MONGOLIAN LETTER ZHI 1842 ; [.333F.0020.0002] # MONGOLIAN LETTER CHI 185A ; [.3340.0020.0002] # MONGOLIAN LETTER TODO JIA 185B ; [.3341.0020.0002] # MONGOLIAN LETTER TODO NIA 1870 ; [.3342.0020.0002] # MONGOLIAN LETTER SIBE RAA 188C ; [.3343.0020.0002] # MONGOLIAN LETTER ALI GALI TTA 189E ; [.3344.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TTA 188D ; [.3345.0020.0002] # MONGOLIAN LETTER ALI GALI TTHA 188E ; [.3346.0020.0002] # MONGOLIAN LETTER ALI GALI DDA 189F ; [.3347.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DDHA 188F ; [.3348.0020.0002] # MONGOLIAN LETTER ALI GALI NNA 1890 ; [.3349.0020.0002] # MONGOLIAN LETTER ALI GALI TA 1898 ; [.334A.0020.0002] # MONGOLIAN LETTER TODO ALI GALI TA 18A0 ; [.334B.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TA 1891 ; [.334C.0020.0002] # MONGOLIAN LETTER ALI GALI DA 18A1 ; [.334D.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DHA 1892 ; [.334E.0020.0002] # MONGOLIAN LETTER ALI GALI PA 1893 ; [.334F.0020.0002] # MONGOLIAN LETTER ALI GALI PHA 18A8 ; [.3350.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI BHA 1894 ; [.3351.0020.0002] # MONGOLIAN LETTER ALI GALI SSA 18A3 ; [.3352.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CYA 1895 ; [.3353.0020.0002] # MONGOLIAN LETTER ALI GALI ZHA 1899 ; [.3354.0020.0002] # MONGOLIAN LETTER TODO ALI GALI ZHA 1896 ; [.3355.0020.0002] # MONGOLIAN LETTER ALI GALI ZA 1897 ; [.3356.0020.0002] # MONGOLIAN LETTER ALI GALI AH 18A6 ; [.3357.0020.0002] # MONGOLIAN LETTER ALI GALI HALF U 18A7 ; [.3358.0020.0002] # MONGOLIAN LETTER ALI GALI HALF YA 18AA ; [.3359.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI LHA 18A9 ; [.335A.0020.0002] # MONGOLIAN LETTER ALI GALI DAGALGA 1C5A ; [.335B.0020.0002] # OL CHIKI LETTER LA 1C5B ; [.335C.0020.0002] # OL CHIKI LETTER AT 1C5C ; [.335D.0020.0002] # OL CHIKI LETTER AG 1C5D ; [.335E.0020.0002] # OL CHIKI LETTER ANG 1C5E ; [.335F.0020.0002] # OL CHIKI LETTER AL 1C5F ; [.3360.0020.0002] # OL CHIKI LETTER LAA 1C60 ; [.3361.0020.0002] # OL CHIKI LETTER AAK 1C61 ; [.3362.0020.0002] # OL CHIKI LETTER AAJ 1C62 ; [.3363.0020.0002] # OL CHIKI LETTER AAM 1C63 ; [.3364.0020.0002] # OL CHIKI LETTER AAW 1C64 ; [.3365.0020.0002] # OL CHIKI LETTER LI 1C65 ; [.3366.0020.0002] # OL CHIKI LETTER IS 1C66 ; [.3367.0020.0002] # OL CHIKI LETTER IH 1C67 ; [.3368.0020.0002] # OL CHIKI LETTER INY 1C68 ; [.3369.0020.0002] # OL CHIKI LETTER IR 1C69 ; [.336A.0020.0002] # OL CHIKI LETTER LU 1C6A ; [.336B.0020.0002] # OL CHIKI LETTER UC 1C6B ; [.336C.0020.0002] # OL CHIKI LETTER UD 1C6C ; [.336D.0020.0002] # OL CHIKI LETTER UNN 1C6D ; [.336E.0020.0002] # OL CHIKI LETTER UY 1C6E ; [.336F.0020.0002] # OL CHIKI LETTER LE 1C6F ; [.3370.0020.0002] # OL CHIKI LETTER EP 1C70 ; [.3371.0020.0002] # OL CHIKI LETTER EDD 1C71 ; [.3372.0020.0002] # OL CHIKI LETTER EN 1C72 ; [.3373.0020.0002] # OL CHIKI LETTER ERR 1C73 ; [.3374.0020.0002] # OL CHIKI LETTER LO 1C74 ; [.3375.0020.0002] # OL CHIKI LETTER OTT 1C75 ; [.3376.0020.0002] # OL CHIKI LETTER OB 1C76 ; [.3377.0020.0002] # OL CHIKI LETTER OV 1C77 ; [.3378.0020.0002] # OL CHIKI LETTER OH 1C78 ; [.3379.0020.0002] # OL CHIKI MU TTUDDAG 1C79 ; [.337A.0020.0002] # OL CHIKI GAAHLAA TTUDDAAG 1C7A ; [.337B.0020.0002] # OL CHIKI MU-GAAHLAA TTUDDAAG 1C7B ; [.337C.0020.0002] # OL CHIKI RELAA 1C7C ; [.337D.0020.0002] # OL CHIKI PHAARKAA 1C7D ; [.337E.0020.0002] # OL CHIKI AHAD AB70 ; [.337F.0020.0002] # CHEROKEE SMALL LETTER A 13A0 ; [.337F.0020.0008] # CHEROKEE LETTER A AB71 ; [.3380.0020.0002] # CHEROKEE SMALL LETTER E 13A1 ; [.3380.0020.0008] # CHEROKEE LETTER E AB72 ; [.3381.0020.0002] # CHEROKEE SMALL LETTER I 13A2 ; [.3381.0020.0008] # CHEROKEE LETTER I AB73 ; [.3382.0020.0002] # CHEROKEE SMALL LETTER O 13A3 ; [.3382.0020.0008] # CHEROKEE LETTER O AB74 ; [.3383.0020.0002] # CHEROKEE SMALL LETTER U 13A4 ; [.3383.0020.0008] # CHEROKEE LETTER U AB75 ; [.3384.0020.0002] # CHEROKEE SMALL LETTER V 13A5 ; [.3384.0020.0008] # CHEROKEE LETTER V AB76 ; [.3385.0020.0002] # CHEROKEE SMALL LETTER GA 13A6 ; [.3385.0020.0008] # CHEROKEE LETTER GA AB77 ; [.3386.0020.0002] # CHEROKEE SMALL LETTER KA 13A7 ; [.3386.0020.0008] # CHEROKEE LETTER KA AB78 ; [.3387.0020.0002] # CHEROKEE SMALL LETTER GE 13A8 ; [.3387.0020.0008] # CHEROKEE LETTER GE AB79 ; [.3388.0020.0002] # CHEROKEE SMALL LETTER GI 13A9 ; [.3388.0020.0008] # CHEROKEE LETTER GI AB7A ; [.3389.0020.0002] # CHEROKEE SMALL LETTER GO 13AA ; [.3389.0020.0008] # CHEROKEE LETTER GO AB7B ; [.338A.0020.0002] # CHEROKEE SMALL LETTER GU 13AB ; [.338A.0020.0008] # CHEROKEE LETTER GU AB7C ; [.338B.0020.0002] # CHEROKEE SMALL LETTER GV 13AC ; [.338B.0020.0008] # CHEROKEE LETTER GV AB7D ; [.338C.0020.0002] # CHEROKEE SMALL LETTER HA 13AD ; [.338C.0020.0008] # CHEROKEE LETTER HA AB7E ; [.338D.0020.0002] # CHEROKEE SMALL LETTER HE 13AE ; [.338D.0020.0008] # CHEROKEE LETTER HE AB7F ; [.338E.0020.0002] # CHEROKEE SMALL LETTER HI 13AF ; [.338E.0020.0008] # CHEROKEE LETTER HI AB80 ; [.338F.0020.0002] # CHEROKEE SMALL LETTER HO 13B0 ; [.338F.0020.0008] # CHEROKEE LETTER HO AB81 ; [.3390.0020.0002] # CHEROKEE SMALL LETTER HU 13B1 ; [.3390.0020.0008] # CHEROKEE LETTER HU AB82 ; [.3391.0020.0002] # CHEROKEE SMALL LETTER HV 13B2 ; [.3391.0020.0008] # CHEROKEE LETTER HV AB83 ; [.3392.0020.0002] # CHEROKEE SMALL LETTER LA 13B3 ; [.3392.0020.0008] # CHEROKEE LETTER LA AB84 ; [.3393.0020.0002] # CHEROKEE SMALL LETTER LE 13B4 ; [.3393.0020.0008] # CHEROKEE LETTER LE AB85 ; [.3394.0020.0002] # CHEROKEE SMALL LETTER LI 13B5 ; [.3394.0020.0008] # CHEROKEE LETTER LI AB86 ; [.3395.0020.0002] # CHEROKEE SMALL LETTER LO 13B6 ; [.3395.0020.0008] # CHEROKEE LETTER LO AB87 ; [.3396.0020.0002] # CHEROKEE SMALL LETTER LU 13B7 ; [.3396.0020.0008] # CHEROKEE LETTER LU AB88 ; [.3397.0020.0002] # CHEROKEE SMALL LETTER LV 13B8 ; [.3397.0020.0008] # CHEROKEE LETTER LV AB89 ; [.3398.0020.0002] # CHEROKEE SMALL LETTER MA 13B9 ; [.3398.0020.0008] # CHEROKEE LETTER MA AB8A ; [.3399.0020.0002] # CHEROKEE SMALL LETTER ME 13BA ; [.3399.0020.0008] # CHEROKEE LETTER ME AB8B ; [.339A.0020.0002] # CHEROKEE SMALL LETTER MI 13BB ; [.339A.0020.0008] # CHEROKEE LETTER MI AB8C ; [.339B.0020.0002] # CHEROKEE SMALL LETTER MO 13BC ; [.339B.0020.0008] # CHEROKEE LETTER MO AB8D ; [.339C.0020.0002] # CHEROKEE SMALL LETTER MU 13BD ; [.339C.0020.0008] # CHEROKEE LETTER MU AB8E ; [.339D.0020.0002] # CHEROKEE SMALL LETTER NA 13BE ; [.339D.0020.0008] # CHEROKEE LETTER NA AB8F ; [.339E.0020.0002] # CHEROKEE SMALL LETTER HNA 13BF ; [.339E.0020.0008] # CHEROKEE LETTER HNA AB90 ; [.339F.0020.0002] # CHEROKEE SMALL LETTER NAH 13C0 ; [.339F.0020.0008] # CHEROKEE LETTER NAH AB91 ; [.33A0.0020.0002] # CHEROKEE SMALL LETTER NE 13C1 ; [.33A0.0020.0008] # CHEROKEE LETTER NE AB92 ; [.33A1.0020.0002] # CHEROKEE SMALL LETTER NI 13C2 ; [.33A1.0020.0008] # CHEROKEE LETTER NI AB93 ; [.33A2.0020.0002] # CHEROKEE SMALL LETTER NO 13C3 ; [.33A2.0020.0008] # CHEROKEE LETTER NO AB94 ; [.33A3.0020.0002] # CHEROKEE SMALL LETTER NU 13C4 ; [.33A3.0020.0008] # CHEROKEE LETTER NU AB95 ; [.33A4.0020.0002] # CHEROKEE SMALL LETTER NV 13C5 ; [.33A4.0020.0008] # CHEROKEE LETTER NV AB96 ; [.33A5.0020.0002] # CHEROKEE SMALL LETTER QUA 13C6 ; [.33A5.0020.0008] # CHEROKEE LETTER QUA AB97 ; [.33A6.0020.0002] # CHEROKEE SMALL LETTER QUE 13C7 ; [.33A6.0020.0008] # CHEROKEE LETTER QUE AB98 ; [.33A7.0020.0002] # CHEROKEE SMALL LETTER QUI 13C8 ; [.33A7.0020.0008] # CHEROKEE LETTER QUI AB99 ; [.33A8.0020.0002] # CHEROKEE SMALL LETTER QUO 13C9 ; [.33A8.0020.0008] # CHEROKEE LETTER QUO AB9A ; [.33A9.0020.0002] # CHEROKEE SMALL LETTER QUU 13CA ; [.33A9.0020.0008] # CHEROKEE LETTER QUU AB9B ; [.33AA.0020.0002] # CHEROKEE SMALL LETTER QUV 13CB ; [.33AA.0020.0008] # CHEROKEE LETTER QUV AB9C ; [.33AB.0020.0002] # CHEROKEE SMALL LETTER SA 13CC ; [.33AB.0020.0008] # CHEROKEE LETTER SA AB9D ; [.33AC.0020.0002] # CHEROKEE SMALL LETTER S 13CD ; [.33AC.0020.0008] # CHEROKEE LETTER S AB9E ; [.33AD.0020.0002] # CHEROKEE SMALL LETTER SE 13CE ; [.33AD.0020.0008] # CHEROKEE LETTER SE AB9F ; [.33AE.0020.0002] # CHEROKEE SMALL LETTER SI 13CF ; [.33AE.0020.0008] # CHEROKEE LETTER SI ABA0 ; [.33AF.0020.0002] # CHEROKEE SMALL LETTER SO 13D0 ; [.33AF.0020.0008] # CHEROKEE LETTER SO ABA1 ; [.33B0.0020.0002] # CHEROKEE SMALL LETTER SU 13D1 ; [.33B0.0020.0008] # CHEROKEE LETTER SU ABA2 ; [.33B1.0020.0002] # CHEROKEE SMALL LETTER SV 13D2 ; [.33B1.0020.0008] # CHEROKEE LETTER SV ABA3 ; [.33B2.0020.0002] # CHEROKEE SMALL LETTER DA 13D3 ; [.33B2.0020.0008] # CHEROKEE LETTER DA ABA4 ; [.33B3.0020.0002] # CHEROKEE SMALL LETTER TA 13D4 ; [.33B3.0020.0008] # CHEROKEE LETTER TA ABA5 ; [.33B4.0020.0002] # CHEROKEE SMALL LETTER DE 13D5 ; [.33B4.0020.0008] # CHEROKEE LETTER DE ABA6 ; [.33B5.0020.0002] # CHEROKEE SMALL LETTER TE 13D6 ; [.33B5.0020.0008] # CHEROKEE LETTER TE ABA7 ; [.33B6.0020.0002] # CHEROKEE SMALL LETTER DI 13D7 ; [.33B6.0020.0008] # CHEROKEE LETTER DI ABA8 ; [.33B7.0020.0002] # CHEROKEE SMALL LETTER TI 13D8 ; [.33B7.0020.0008] # CHEROKEE LETTER TI ABA9 ; [.33B8.0020.0002] # CHEROKEE SMALL LETTER DO 13D9 ; [.33B8.0020.0008] # CHEROKEE LETTER DO ABAA ; [.33B9.0020.0002] # CHEROKEE SMALL LETTER DU 13DA ; [.33B9.0020.0008] # CHEROKEE LETTER DU ABAB ; [.33BA.0020.0002] # CHEROKEE SMALL LETTER DV 13DB ; [.33BA.0020.0008] # CHEROKEE LETTER DV ABAC ; [.33BB.0020.0002] # CHEROKEE SMALL LETTER DLA 13DC ; [.33BB.0020.0008] # CHEROKEE LETTER DLA ABAD ; [.33BC.0020.0002] # CHEROKEE SMALL LETTER TLA 13DD ; [.33BC.0020.0008] # CHEROKEE LETTER TLA ABAE ; [.33BD.0020.0002] # CHEROKEE SMALL LETTER TLE 13DE ; [.33BD.0020.0008] # CHEROKEE LETTER TLE ABAF ; [.33BE.0020.0002] # CHEROKEE SMALL LETTER TLI 13DF ; [.33BE.0020.0008] # CHEROKEE LETTER TLI ABB0 ; [.33BF.0020.0002] # CHEROKEE SMALL LETTER TLO 13E0 ; [.33BF.0020.0008] # CHEROKEE LETTER TLO ABB1 ; [.33C0.0020.0002] # CHEROKEE SMALL LETTER TLU 13E1 ; [.33C0.0020.0008] # CHEROKEE LETTER TLU ABB2 ; [.33C1.0020.0002] # CHEROKEE SMALL LETTER TLV 13E2 ; [.33C1.0020.0008] # CHEROKEE LETTER TLV ABB3 ; [.33C2.0020.0002] # CHEROKEE SMALL LETTER TSA 13E3 ; [.33C2.0020.0008] # CHEROKEE LETTER TSA ABB4 ; [.33C3.0020.0002] # CHEROKEE SMALL LETTER TSE 13E4 ; [.33C3.0020.0008] # CHEROKEE LETTER TSE ABB5 ; [.33C4.0020.0002] # CHEROKEE SMALL LETTER TSI 13E5 ; [.33C4.0020.0008] # CHEROKEE LETTER TSI ABB6 ; [.33C5.0020.0002] # CHEROKEE SMALL LETTER TSO 13E6 ; [.33C5.0020.0008] # CHEROKEE LETTER TSO ABB7 ; [.33C6.0020.0002] # CHEROKEE SMALL LETTER TSU 13E7 ; [.33C6.0020.0008] # CHEROKEE LETTER TSU ABB8 ; [.33C7.0020.0002] # CHEROKEE SMALL LETTER TSV 13E8 ; [.33C7.0020.0008] # CHEROKEE LETTER TSV ABB9 ; [.33C8.0020.0002] # CHEROKEE SMALL LETTER WA 13E9 ; [.33C8.0020.0008] # CHEROKEE LETTER WA ABBA ; [.33C9.0020.0002] # CHEROKEE SMALL LETTER WE 13EA ; [.33C9.0020.0008] # CHEROKEE LETTER WE ABBB ; [.33CA.0020.0002] # CHEROKEE SMALL LETTER WI 13EB ; [.33CA.0020.0008] # CHEROKEE LETTER WI ABBC ; [.33CB.0020.0002] # CHEROKEE SMALL LETTER WO 13EC ; [.33CB.0020.0008] # CHEROKEE LETTER WO ABBD ; [.33CC.0020.0002] # CHEROKEE SMALL LETTER WU 13ED ; [.33CC.0020.0008] # CHEROKEE LETTER WU ABBE ; [.33CD.0020.0002] # CHEROKEE SMALL LETTER WV 13EE ; [.33CD.0020.0008] # CHEROKEE LETTER WV ABBF ; [.33CE.0020.0002] # CHEROKEE SMALL LETTER YA 13EF ; [.33CE.0020.0008] # CHEROKEE LETTER YA 13F8 ; [.33CF.0020.0002] # CHEROKEE SMALL LETTER YE 13F0 ; [.33CF.0020.0008] # CHEROKEE LETTER YE 13F9 ; [.33D0.0020.0002] # CHEROKEE SMALL LETTER YI 13F1 ; [.33D0.0020.0008] # CHEROKEE LETTER YI 13FA ; [.33D1.0020.0002] # CHEROKEE SMALL LETTER YO 13F2 ; [.33D1.0020.0008] # CHEROKEE LETTER YO 13FB ; [.33D2.0020.0002] # CHEROKEE SMALL LETTER YU 13F3 ; [.33D2.0020.0008] # CHEROKEE LETTER YU 13FC ; [.33D3.0020.0002] # CHEROKEE SMALL LETTER YV 13F4 ; [.33D3.0020.0008] # CHEROKEE LETTER YV 13FD ; [.33D4.0020.0002] # CHEROKEE SMALL LETTER MV 13F5 ; [.33D4.0020.0008] # CHEROKEE LETTER MV 104D8 ; [.33D5.0020.0002] # OSAGE SMALL LETTER A 104B0 ; [.33D5.0020.0008] # OSAGE CAPITAL LETTER A 104D9 ; [.33D6.0020.0002] # OSAGE SMALL LETTER AI 104B1 ; [.33D6.0020.0008] # OSAGE CAPITAL LETTER AI 104DA ; [.33D7.0020.0002] # OSAGE SMALL LETTER AIN 104B2 ; [.33D7.0020.0008] # OSAGE CAPITAL LETTER AIN 104DB ; [.33D8.0020.0002] # OSAGE SMALL LETTER AH 104B3 ; [.33D8.0020.0008] # OSAGE CAPITAL LETTER AH 104DC ; [.33D9.0020.0002] # OSAGE SMALL LETTER BRA 104B4 ; [.33D9.0020.0008] # OSAGE CAPITAL LETTER BRA 104DD ; [.33DA.0020.0002] # OSAGE SMALL LETTER CHA 104B5 ; [.33DA.0020.0008] # OSAGE CAPITAL LETTER CHA 104DE ; [.33DB.0020.0002] # OSAGE SMALL LETTER EHCHA 104B6 ; [.33DB.0020.0008] # OSAGE CAPITAL LETTER EHCHA 104DF ; [.33DC.0020.0002] # OSAGE SMALL LETTER E 104B7 ; [.33DC.0020.0008] # OSAGE CAPITAL LETTER E 104E0 ; [.33DD.0020.0002] # OSAGE SMALL LETTER EIN 104B8 ; [.33DD.0020.0008] # OSAGE CAPITAL LETTER EIN 104E1 ; [.33DE.0020.0002] # OSAGE SMALL LETTER HA 104B9 ; [.33DE.0020.0008] # OSAGE CAPITAL LETTER HA 104E2 ; [.33DF.0020.0002] # OSAGE SMALL LETTER HYA 104BA ; [.33DF.0020.0008] # OSAGE CAPITAL LETTER HYA 104E3 ; [.33E0.0020.0002] # OSAGE SMALL LETTER I 104BB ; [.33E0.0020.0008] # OSAGE CAPITAL LETTER I 104E4 ; [.33E1.0020.0002] # OSAGE SMALL LETTER KA 104BC ; [.33E1.0020.0008] # OSAGE CAPITAL LETTER KA 104E5 ; [.33E2.0020.0002] # OSAGE SMALL LETTER EHKA 104BD ; [.33E2.0020.0008] # OSAGE CAPITAL LETTER EHKA 104E6 ; [.33E3.0020.0002] # OSAGE SMALL LETTER KYA 104BE ; [.33E3.0020.0008] # OSAGE CAPITAL LETTER KYA 104E7 ; [.33E4.0020.0002] # OSAGE SMALL LETTER LA 104BF ; [.33E4.0020.0008] # OSAGE CAPITAL LETTER LA 104E8 ; [.33E5.0020.0002] # OSAGE SMALL LETTER MA 104C0 ; [.33E5.0020.0008] # OSAGE CAPITAL LETTER MA 104E9 ; [.33E6.0020.0002] # OSAGE SMALL LETTER NA 104C1 ; [.33E6.0020.0008] # OSAGE CAPITAL LETTER NA 104EA ; [.33E7.0020.0002] # OSAGE SMALL LETTER O 104C2 ; [.33E7.0020.0008] # OSAGE CAPITAL LETTER O 104EB ; [.33E8.0020.0002] # OSAGE SMALL LETTER OIN 104C3 ; [.33E8.0020.0008] # OSAGE CAPITAL LETTER OIN 104EC ; [.33E9.0020.0002] # OSAGE SMALL LETTER PA 104C4 ; [.33E9.0020.0008] # OSAGE CAPITAL LETTER PA 104ED ; [.33EA.0020.0002] # OSAGE SMALL LETTER EHPA 104C5 ; [.33EA.0020.0008] # OSAGE CAPITAL LETTER EHPA 104EE ; [.33EB.0020.0002] # OSAGE SMALL LETTER SA 104C6 ; [.33EB.0020.0008] # OSAGE CAPITAL LETTER SA 104EF ; [.33EC.0020.0002] # OSAGE SMALL LETTER SHA 104C7 ; [.33EC.0020.0008] # OSAGE CAPITAL LETTER SHA 104F0 ; [.33ED.0020.0002] # OSAGE SMALL LETTER TA 104C8 ; [.33ED.0020.0008] # OSAGE CAPITAL LETTER TA 104F1 ; [.33EE.0020.0002] # OSAGE SMALL LETTER EHTA 104C9 ; [.33EE.0020.0008] # OSAGE CAPITAL LETTER EHTA 104F2 ; [.33EF.0020.0002] # OSAGE SMALL LETTER TSA 104CA ; [.33EF.0020.0008] # OSAGE CAPITAL LETTER TSA 104F3 ; [.33F0.0020.0002] # OSAGE SMALL LETTER EHTSA 104CB ; [.33F0.0020.0008] # OSAGE CAPITAL LETTER EHTSA 104F4 ; [.33F1.0020.0002] # OSAGE SMALL LETTER TSHA 104CC ; [.33F1.0020.0008] # OSAGE CAPITAL LETTER TSHA 104F5 ; [.33F2.0020.0002] # OSAGE SMALL LETTER DHA 104CD ; [.33F2.0020.0008] # OSAGE CAPITAL LETTER DHA 104F6 ; [.33F3.0020.0002] # OSAGE SMALL LETTER U 104CE ; [.33F3.0020.0008] # OSAGE CAPITAL LETTER U 104F7 ; [.33F4.0020.0002] # OSAGE SMALL LETTER WA 104CF ; [.33F4.0020.0008] # OSAGE CAPITAL LETTER WA 104F8 ; [.33F5.0020.0002] # OSAGE SMALL LETTER KHA 104D0 ; [.33F5.0020.0008] # OSAGE CAPITAL LETTER KHA 104F9 ; [.33F6.0020.0002] # OSAGE SMALL LETTER GHA 104D1 ; [.33F6.0020.0008] # OSAGE CAPITAL LETTER GHA 104FA ; [.33F7.0020.0002] # OSAGE SMALL LETTER ZA 104D2 ; [.33F7.0020.0008] # OSAGE CAPITAL LETTER ZA 104FB ; [.33F8.0020.0002] # OSAGE SMALL LETTER ZHA 104D3 ; [.33F8.0020.0008] # OSAGE CAPITAL LETTER ZHA 1401 ; [.33F9.0020.0002] # CANADIAN SYLLABICS E 1402 ; [.33FA.0020.0002] # CANADIAN SYLLABICS AAI 1403 ; [.33FB.0020.0002] # CANADIAN SYLLABICS I 1404 ; [.33FC.0020.0002] # CANADIAN SYLLABICS II 1405 ; [.33FD.0020.0002] # CANADIAN SYLLABICS O 1406 ; [.33FE.0020.0002] # CANADIAN SYLLABICS OO 1407 ; [.33FF.0020.0002] # CANADIAN SYLLABICS Y-CREE OO 1408 ; [.3400.0020.0002] # CANADIAN SYLLABICS CARRIER EE 1409 ; [.3401.0020.0002] # CANADIAN SYLLABICS CARRIER I 140A ; [.3402.0020.0002] # CANADIAN SYLLABICS A 140B ; [.3403.0020.0002] # CANADIAN SYLLABICS AA 140C ; [.3404.0020.0002] # CANADIAN SYLLABICS WE 140D ; [.3405.0020.0002] # CANADIAN SYLLABICS WEST-CREE WE 140E ; [.3406.0020.0002] # CANADIAN SYLLABICS WI 140F ; [.3407.0020.0002] # CANADIAN SYLLABICS WEST-CREE WI 1410 ; [.3408.0020.0002] # CANADIAN SYLLABICS WII 1411 ; [.3409.0020.0002] # CANADIAN SYLLABICS WEST-CREE WII 1412 ; [.340A.0020.0002] # CANADIAN SYLLABICS WO 1413 ; [.340B.0020.0002] # CANADIAN SYLLABICS WEST-CREE WO 1414 ; [.340C.0020.0002] # CANADIAN SYLLABICS WOO 1415 ; [.340D.0020.0002] # CANADIAN SYLLABICS WEST-CREE WOO 1416 ; [.340E.0020.0002] # CANADIAN SYLLABICS NASKAPI WOO 1417 ; [.340F.0020.0002] # CANADIAN SYLLABICS WA 1418 ; [.3410.0020.0002] # CANADIAN SYLLABICS WEST-CREE WA 1419 ; [.3411.0020.0002] # CANADIAN SYLLABICS WAA 141A ; [.3412.0020.0002] # CANADIAN SYLLABICS WEST-CREE WAA 141B ; [.3413.0020.0002] # CANADIAN SYLLABICS NASKAPI WAA 141C ; [.3414.0020.0002] # CANADIAN SYLLABICS AI 141D ; [.3415.0020.0002] # CANADIAN SYLLABICS Y-CREE W 141E ; [.3416.0020.0002] # CANADIAN SYLLABICS GLOTTAL STOP 141F ; [.3417.0020.0002] # CANADIAN SYLLABICS FINAL ACUTE 1420 ; [.3418.0020.0002] # CANADIAN SYLLABICS FINAL GRAVE 1421 ; [.3419.0020.0002] # CANADIAN SYLLABICS FINAL BOTTOM HALF RING 1422 ; [.341A.0020.0002] # CANADIAN SYLLABICS FINAL TOP HALF RING 1423 ; [.341B.0020.0002] # CANADIAN SYLLABICS FINAL RIGHT HALF RING 1424 ; [.341C.0020.0002] # CANADIAN SYLLABICS FINAL RING 1425 ; [.341D.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE ACUTE 1426 ; [.341E.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES 1427 ; [.341F.0020.0002] # CANADIAN SYLLABICS FINAL MIDDLE DOT 1428 ; [.3420.0020.0002] # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE 1429 ; [.3421.0020.0002] # CANADIAN SYLLABICS FINAL PLUS 142A ; [.3422.0020.0002] # CANADIAN SYLLABICS FINAL DOWN TACK 142B ; [.3423.0020.0002] # CANADIAN SYLLABICS EN 142C ; [.3424.0020.0002] # CANADIAN SYLLABICS IN 142D ; [.3425.0020.0002] # CANADIAN SYLLABICS ON 142E ; [.3426.0020.0002] # CANADIAN SYLLABICS AN 142F ; [.3427.0020.0002] # CANADIAN SYLLABICS PE 1430 ; [.3428.0020.0002] # CANADIAN SYLLABICS PAAI 1431 ; [.3429.0020.0002] # CANADIAN SYLLABICS PI 1432 ; [.342A.0020.0002] # CANADIAN SYLLABICS PII 1433 ; [.342B.0020.0002] # CANADIAN SYLLABICS PO 1434 ; [.342C.0020.0002] # CANADIAN SYLLABICS POO 1435 ; [.342D.0020.0002] # CANADIAN SYLLABICS Y-CREE POO 1436 ; [.342E.0020.0002] # CANADIAN SYLLABICS CARRIER HEE 1437 ; [.342F.0020.0002] # CANADIAN SYLLABICS CARRIER HI 1438 ; [.3430.0020.0002] # CANADIAN SYLLABICS PA 1439 ; [.3431.0020.0002] # CANADIAN SYLLABICS PAA 143A ; [.3432.0020.0002] # CANADIAN SYLLABICS PWE 143B ; [.3433.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWE 143C ; [.3434.0020.0002] # CANADIAN SYLLABICS PWI 143D ; [.3435.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWI 143E ; [.3436.0020.0002] # CANADIAN SYLLABICS PWII 143F ; [.3437.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWII 1440 ; [.3438.0020.0002] # CANADIAN SYLLABICS PWO 1441 ; [.3439.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWO 1442 ; [.343A.0020.0002] # CANADIAN SYLLABICS PWOO 1443 ; [.343B.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWOO 1444 ; [.343C.0020.0002] # CANADIAN SYLLABICS PWA 1445 ; [.343D.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWA 1446 ; [.343E.0020.0002] # CANADIAN SYLLABICS PWAA 1447 ; [.343F.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWAA 1448 ; [.3440.0020.0002] # CANADIAN SYLLABICS Y-CREE PWAA 1449 ; [.3441.0020.0002] # CANADIAN SYLLABICS P 144A ; [.3442.0020.0002] # CANADIAN SYLLABICS WEST-CREE P 144B ; [.3443.0020.0002] # CANADIAN SYLLABICS CARRIER H 144C ; [.3444.0020.0002] # CANADIAN SYLLABICS TE 144D ; [.3445.0020.0002] # CANADIAN SYLLABICS TAAI 144E ; [.3446.0020.0002] # CANADIAN SYLLABICS TI 144F ; [.3447.0020.0002] # CANADIAN SYLLABICS TII 1450 ; [.3448.0020.0002] # CANADIAN SYLLABICS TO 1451 ; [.3449.0020.0002] # CANADIAN SYLLABICS TOO 1452 ; [.344A.0020.0002] # CANADIAN SYLLABICS Y-CREE TOO 1453 ; [.344B.0020.0002] # CANADIAN SYLLABICS CARRIER DEE 1454 ; [.344C.0020.0002] # CANADIAN SYLLABICS CARRIER DI 1455 ; [.344D.0020.0002] # CANADIAN SYLLABICS TA 1456 ; [.344E.0020.0002] # CANADIAN SYLLABICS TAA 1457 ; [.344F.0020.0002] # CANADIAN SYLLABICS TWE 1458 ; [.3450.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWE 1459 ; [.3451.0020.0002] # CANADIAN SYLLABICS TWI 145A ; [.3452.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWI 145B ; [.3453.0020.0002] # CANADIAN SYLLABICS TWII 145C ; [.3454.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWII 145D ; [.3455.0020.0002] # CANADIAN SYLLABICS TWO 145E ; [.3456.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWO 145F ; [.3457.0020.0002] # CANADIAN SYLLABICS TWOO 1460 ; [.3458.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWOO 1461 ; [.3459.0020.0002] # CANADIAN SYLLABICS TWA 1462 ; [.345A.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWA 1463 ; [.345B.0020.0002] # CANADIAN SYLLABICS TWAA 1464 ; [.345C.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWAA 1465 ; [.345D.0020.0002] # CANADIAN SYLLABICS NASKAPI TWAA 1466 ; [.345E.0020.0002] # CANADIAN SYLLABICS T 1467 ; [.345F.0020.0002] # CANADIAN SYLLABICS TTE 1468 ; [.3460.0020.0002] # CANADIAN SYLLABICS TTI 1469 ; [.3461.0020.0002] # CANADIAN SYLLABICS TTO 146A ; [.3462.0020.0002] # CANADIAN SYLLABICS TTA 146B ; [.3463.0020.0002] # CANADIAN SYLLABICS KE 146C ; [.3464.0020.0002] # CANADIAN SYLLABICS KAAI 146D ; [.3465.0020.0002] # CANADIAN SYLLABICS KI 146E ; [.3466.0020.0002] # CANADIAN SYLLABICS KII 146F ; [.3467.0020.0002] # CANADIAN SYLLABICS KO 1470 ; [.3468.0020.0002] # CANADIAN SYLLABICS KOO 1471 ; [.3469.0020.0002] # CANADIAN SYLLABICS Y-CREE KOO 1472 ; [.346A.0020.0002] # CANADIAN SYLLABICS KA 1473 ; [.346B.0020.0002] # CANADIAN SYLLABICS KAA 1474 ; [.346C.0020.0002] # CANADIAN SYLLABICS KWE 1475 ; [.346D.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWE 1476 ; [.346E.0020.0002] # CANADIAN SYLLABICS KWI 1477 ; [.346F.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWI 1478 ; [.3470.0020.0002] # CANADIAN SYLLABICS KWII 1479 ; [.3471.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWII 147A ; [.3472.0020.0002] # CANADIAN SYLLABICS KWO 147B ; [.3473.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWO 147C ; [.3474.0020.0002] # CANADIAN SYLLABICS KWOO 147D ; [.3475.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWOO 147E ; [.3476.0020.0002] # CANADIAN SYLLABICS KWA 147F ; [.3477.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWA 1480 ; [.3478.0020.0002] # CANADIAN SYLLABICS KWAA 1481 ; [.3479.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWAA 1482 ; [.347A.0020.0002] # CANADIAN SYLLABICS NASKAPI KWAA 1483 ; [.347B.0020.0002] # CANADIAN SYLLABICS K 1484 ; [.347C.0020.0002] # CANADIAN SYLLABICS KW 1485 ; [.347D.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KEH 1486 ; [.347E.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KIH 1487 ; [.347F.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KOH 1488 ; [.3480.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KAH 1489 ; [.3481.0020.0002] # CANADIAN SYLLABICS CE 148A ; [.3482.0020.0002] # CANADIAN SYLLABICS CAAI 148B ; [.3483.0020.0002] # CANADIAN SYLLABICS CI 148C ; [.3484.0020.0002] # CANADIAN SYLLABICS CII 148D ; [.3485.0020.0002] # CANADIAN SYLLABICS CO 148E ; [.3486.0020.0002] # CANADIAN SYLLABICS COO 148F ; [.3487.0020.0002] # CANADIAN SYLLABICS Y-CREE COO 1490 ; [.3488.0020.0002] # CANADIAN SYLLABICS CA 1491 ; [.3489.0020.0002] # CANADIAN SYLLABICS CAA 1492 ; [.348A.0020.0002] # CANADIAN SYLLABICS CWE 1493 ; [.348B.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWE 1494 ; [.348C.0020.0002] # CANADIAN SYLLABICS CWI 1495 ; [.348D.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWI 1496 ; [.348E.0020.0002] # CANADIAN SYLLABICS CWII 1497 ; [.348F.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWII 1498 ; [.3490.0020.0002] # CANADIAN SYLLABICS CWO 1499 ; [.3491.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWO 149A ; [.3492.0020.0002] # CANADIAN SYLLABICS CWOO 149B ; [.3493.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWOO 149C ; [.3494.0020.0002] # CANADIAN SYLLABICS CWA 149D ; [.3495.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWA 149E ; [.3496.0020.0002] # CANADIAN SYLLABICS CWAA 149F ; [.3497.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWAA 14A0 ; [.3498.0020.0002] # CANADIAN SYLLABICS NASKAPI CWAA 14A1 ; [.3499.0020.0002] # CANADIAN SYLLABICS C 14A2 ; [.349A.0020.0002] # CANADIAN SYLLABICS SAYISI TH 14A3 ; [.349B.0020.0002] # CANADIAN SYLLABICS ME 14A4 ; [.349C.0020.0002] # CANADIAN SYLLABICS MAAI 14A5 ; [.349D.0020.0002] # CANADIAN SYLLABICS MI 14A6 ; [.349E.0020.0002] # CANADIAN SYLLABICS MII 14A7 ; [.349F.0020.0002] # CANADIAN SYLLABICS MO 14A8 ; [.34A0.0020.0002] # CANADIAN SYLLABICS MOO 14A9 ; [.34A1.0020.0002] # CANADIAN SYLLABICS Y-CREE MOO 14AA ; [.34A2.0020.0002] # CANADIAN SYLLABICS MA 14AB ; [.34A3.0020.0002] # CANADIAN SYLLABICS MAA 14AC ; [.34A4.0020.0002] # CANADIAN SYLLABICS MWE 14AD ; [.34A5.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWE 14AE ; [.34A6.0020.0002] # CANADIAN SYLLABICS MWI 14AF ; [.34A7.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWI 14B0 ; [.34A8.0020.0002] # CANADIAN SYLLABICS MWII 14B1 ; [.34A9.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWII 14B2 ; [.34AA.0020.0002] # CANADIAN SYLLABICS MWO 14B3 ; [.34AB.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWO 14B4 ; [.34AC.0020.0002] # CANADIAN SYLLABICS MWOO 14B5 ; [.34AD.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWOO 14B6 ; [.34AE.0020.0002] # CANADIAN SYLLABICS MWA 14B7 ; [.34AF.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWA 14B8 ; [.34B0.0020.0002] # CANADIAN SYLLABICS MWAA 14B9 ; [.34B1.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWAA 14BA ; [.34B2.0020.0002] # CANADIAN SYLLABICS NASKAPI MWAA 14BB ; [.34B3.0020.0002] # CANADIAN SYLLABICS M 14BC ; [.34B4.0020.0002] # CANADIAN SYLLABICS WEST-CREE M 14BD ; [.34B5.0020.0002] # CANADIAN SYLLABICS MH 14BE ; [.34B6.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN M 14BF ; [.34B7.0020.0002] # CANADIAN SYLLABICS SAYISI M 14C0 ; [.34B8.0020.0002] # CANADIAN SYLLABICS NE 14C1 ; [.34B9.0020.0002] # CANADIAN SYLLABICS NAAI 14C2 ; [.34BA.0020.0002] # CANADIAN SYLLABICS NI 14C3 ; [.34BB.0020.0002] # CANADIAN SYLLABICS NII 14C4 ; [.34BC.0020.0002] # CANADIAN SYLLABICS NO 14C5 ; [.34BD.0020.0002] # CANADIAN SYLLABICS NOO 14C6 ; [.34BE.0020.0002] # CANADIAN SYLLABICS Y-CREE NOO 14C7 ; [.34BF.0020.0002] # CANADIAN SYLLABICS NA 14C8 ; [.34C0.0020.0002] # CANADIAN SYLLABICS NAA 14C9 ; [.34C1.0020.0002] # CANADIAN SYLLABICS NWE 14CA ; [.34C2.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWE 14CB ; [.34C3.0020.0002] # CANADIAN SYLLABICS NWA 14CC ; [.34C4.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWA 14CD ; [.34C5.0020.0002] # CANADIAN SYLLABICS NWAA 14CE ; [.34C6.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWAA 14CF ; [.34C7.0020.0002] # CANADIAN SYLLABICS NASKAPI NWAA 14D0 ; [.34C8.0020.0002] # CANADIAN SYLLABICS N 14D1 ; [.34C9.0020.0002] # CANADIAN SYLLABICS CARRIER NG 14D2 ; [.34CA.0020.0002] # CANADIAN SYLLABICS NH 14D3 ; [.34CB.0020.0002] # CANADIAN SYLLABICS LE 14D4 ; [.34CC.0020.0002] # CANADIAN SYLLABICS LAAI 14D5 ; [.34CD.0020.0002] # CANADIAN SYLLABICS LI 14D6 ; [.34CE.0020.0002] # CANADIAN SYLLABICS LII 14D7 ; [.34CF.0020.0002] # CANADIAN SYLLABICS LO 14D8 ; [.34D0.0020.0002] # CANADIAN SYLLABICS LOO 14D9 ; [.34D1.0020.0002] # CANADIAN SYLLABICS Y-CREE LOO 14DA ; [.34D2.0020.0002] # CANADIAN SYLLABICS LA 14DB ; [.34D3.0020.0002] # CANADIAN SYLLABICS LAA 14DC ; [.34D4.0020.0002] # CANADIAN SYLLABICS LWE 14DD ; [.34D5.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWE 14DE ; [.34D6.0020.0002] # CANADIAN SYLLABICS LWI 14DF ; [.34D7.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWI 14E0 ; [.34D8.0020.0002] # CANADIAN SYLLABICS LWII 14E1 ; [.34D9.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWII 14E2 ; [.34DA.0020.0002] # CANADIAN SYLLABICS LWO 14E3 ; [.34DB.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWO 14E4 ; [.34DC.0020.0002] # CANADIAN SYLLABICS LWOO 14E5 ; [.34DD.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWOO 14E6 ; [.34DE.0020.0002] # CANADIAN SYLLABICS LWA 14E7 ; [.34DF.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWA 14E8 ; [.34E0.0020.0002] # CANADIAN SYLLABICS LWAA 14E9 ; [.34E1.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWAA 14EA ; [.34E2.0020.0002] # CANADIAN SYLLABICS L 14EB ; [.34E3.0020.0002] # CANADIAN SYLLABICS WEST-CREE L 14EC ; [.34E4.0020.0002] # CANADIAN SYLLABICS MEDIAL L 14ED ; [.34E5.0020.0002] # CANADIAN SYLLABICS SE 14EE ; [.34E6.0020.0002] # CANADIAN SYLLABICS SAAI 14EF ; [.34E7.0020.0002] # CANADIAN SYLLABICS SI 14F0 ; [.34E8.0020.0002] # CANADIAN SYLLABICS SII 14F1 ; [.34E9.0020.0002] # CANADIAN SYLLABICS SO 14F2 ; [.34EA.0020.0002] # CANADIAN SYLLABICS SOO 14F3 ; [.34EB.0020.0002] # CANADIAN SYLLABICS Y-CREE SOO 14F4 ; [.34EC.0020.0002] # CANADIAN SYLLABICS SA 14F5 ; [.34ED.0020.0002] # CANADIAN SYLLABICS SAA 14F6 ; [.34EE.0020.0002] # CANADIAN SYLLABICS SWE 14F7 ; [.34EF.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWE 14F8 ; [.34F0.0020.0002] # CANADIAN SYLLABICS SWI 14F9 ; [.34F1.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWI 14FA ; [.34F2.0020.0002] # CANADIAN SYLLABICS SWII 14FB ; [.34F3.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWII 14FC ; [.34F4.0020.0002] # CANADIAN SYLLABICS SWO 14FD ; [.34F5.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWO 14FE ; [.34F6.0020.0002] # CANADIAN SYLLABICS SWOO 14FF ; [.34F7.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWOO 1500 ; [.34F8.0020.0002] # CANADIAN SYLLABICS SWA 1501 ; [.34F9.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWA 1502 ; [.34FA.0020.0002] # CANADIAN SYLLABICS SWAA 1503 ; [.34FB.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWAA 1504 ; [.34FC.0020.0002] # CANADIAN SYLLABICS NASKAPI SWAA 1505 ; [.34FD.0020.0002] # CANADIAN SYLLABICS S 1506 ; [.34FE.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN S 1507 ; [.34FF.0020.0002] # CANADIAN SYLLABICS SW 1508 ; [.3500.0020.0002] # CANADIAN SYLLABICS BLACKFOOT S 1509 ; [.3501.0020.0002] # CANADIAN SYLLABICS MOOSE-CREE SK 150A ; [.3502.0020.0002] # CANADIAN SYLLABICS NASKAPI SKW 150B ; [.3503.0020.0002] # CANADIAN SYLLABICS NASKAPI S-W 150C ; [.3504.0020.0002] # CANADIAN SYLLABICS NASKAPI SPWA 150D ; [.3505.0020.0002] # CANADIAN SYLLABICS NASKAPI STWA 150E ; [.3506.0020.0002] # CANADIAN SYLLABICS NASKAPI SKWA 150F ; [.3507.0020.0002] # CANADIAN SYLLABICS NASKAPI SCWA 1510 ; [.3508.0020.0002] # CANADIAN SYLLABICS SHE 1511 ; [.3509.0020.0002] # CANADIAN SYLLABICS SHI 1512 ; [.350A.0020.0002] # CANADIAN SYLLABICS SHII 1513 ; [.350B.0020.0002] # CANADIAN SYLLABICS SHO 1514 ; [.350C.0020.0002] # CANADIAN SYLLABICS SHOO 1515 ; [.350D.0020.0002] # CANADIAN SYLLABICS SHA 1516 ; [.350E.0020.0002] # CANADIAN SYLLABICS SHAA 1517 ; [.350F.0020.0002] # CANADIAN SYLLABICS SHWE 1518 ; [.3510.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWE 1519 ; [.3511.0020.0002] # CANADIAN SYLLABICS SHWI 151A ; [.3512.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWI 151B ; [.3513.0020.0002] # CANADIAN SYLLABICS SHWII 151C ; [.3514.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWII 151D ; [.3515.0020.0002] # CANADIAN SYLLABICS SHWO 151E ; [.3516.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWO 151F ; [.3517.0020.0002] # CANADIAN SYLLABICS SHWOO 1520 ; [.3518.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWOO 1521 ; [.3519.0020.0002] # CANADIAN SYLLABICS SHWA 1522 ; [.351A.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWA 1523 ; [.351B.0020.0002] # CANADIAN SYLLABICS SHWAA 1524 ; [.351C.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWAA 1525 ; [.351D.0020.0002] # CANADIAN SYLLABICS SH 1526 ; [.351E.0020.0002] # CANADIAN SYLLABICS YE 1527 ; [.351F.0020.0002] # CANADIAN SYLLABICS YAAI 1528 ; [.3520.0020.0002] # CANADIAN SYLLABICS YI 1529 ; [.3521.0020.0002] # CANADIAN SYLLABICS YII 152A ; [.3522.0020.0002] # CANADIAN SYLLABICS YO 152B ; [.3523.0020.0002] # CANADIAN SYLLABICS YOO 152C ; [.3524.0020.0002] # CANADIAN SYLLABICS Y-CREE YOO 152D ; [.3525.0020.0002] # CANADIAN SYLLABICS YA 152E ; [.3526.0020.0002] # CANADIAN SYLLABICS YAA 152F ; [.3527.0020.0002] # CANADIAN SYLLABICS YWE 1530 ; [.3528.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWE 1531 ; [.3529.0020.0002] # CANADIAN SYLLABICS YWI 1532 ; [.352A.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWI 1533 ; [.352B.0020.0002] # CANADIAN SYLLABICS YWII 1534 ; [.352C.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWII 1535 ; [.352D.0020.0002] # CANADIAN SYLLABICS YWO 1536 ; [.352E.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWO 1537 ; [.352F.0020.0002] # CANADIAN SYLLABICS YWOO 1538 ; [.3530.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWOO 1539 ; [.3531.0020.0002] # CANADIAN SYLLABICS YWA 153A ; [.3532.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWA 153B ; [.3533.0020.0002] # CANADIAN SYLLABICS YWAA 153C ; [.3534.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWAA 153D ; [.3535.0020.0002] # CANADIAN SYLLABICS NASKAPI YWAA 153E ; [.3536.0020.0002] # CANADIAN SYLLABICS Y 153F ; [.3537.0020.0002] # CANADIAN SYLLABICS BIBLE-CREE Y 1540 ; [.3538.0020.0002] # CANADIAN SYLLABICS WEST-CREE Y 1541 ; [.3539.0020.0002] # CANADIAN SYLLABICS SAYISI YI 1542 ; [.353A.0020.0002] # CANADIAN SYLLABICS RE 1543 ; [.353B.0020.0002] # CANADIAN SYLLABICS R-CREE RE 1544 ; [.353C.0020.0002] # CANADIAN SYLLABICS WEST-CREE LE 1545 ; [.353D.0020.0002] # CANADIAN SYLLABICS RAAI 1546 ; [.353E.0020.0002] # CANADIAN SYLLABICS RI 1547 ; [.353F.0020.0002] # CANADIAN SYLLABICS RII 1548 ; [.3540.0020.0002] # CANADIAN SYLLABICS RO 1549 ; [.3541.0020.0002] # CANADIAN SYLLABICS ROO 154A ; [.3542.0020.0002] # CANADIAN SYLLABICS WEST-CREE LO 154B ; [.3543.0020.0002] # CANADIAN SYLLABICS RA 154C ; [.3544.0020.0002] # CANADIAN SYLLABICS RAA 154D ; [.3545.0020.0002] # CANADIAN SYLLABICS WEST-CREE LA 154E ; [.3546.0020.0002] # CANADIAN SYLLABICS RWAA 154F ; [.3547.0020.0002] # CANADIAN SYLLABICS WEST-CREE RWAA 1550 ; [.3548.0020.0002] # CANADIAN SYLLABICS R 1551 ; [.3549.0020.0002] # CANADIAN SYLLABICS WEST-CREE R 1552 ; [.354A.0020.0002] # CANADIAN SYLLABICS MEDIAL R 1553 ; [.354B.0020.0002] # CANADIAN SYLLABICS FE 1554 ; [.354C.0020.0002] # CANADIAN SYLLABICS FAAI 1555 ; [.354D.0020.0002] # CANADIAN SYLLABICS FI 1556 ; [.354E.0020.0002] # CANADIAN SYLLABICS FII 1557 ; [.354F.0020.0002] # CANADIAN SYLLABICS FO 1558 ; [.3550.0020.0002] # CANADIAN SYLLABICS FOO 1559 ; [.3551.0020.0002] # CANADIAN SYLLABICS FA 155A ; [.3552.0020.0002] # CANADIAN SYLLABICS FAA 155B ; [.3553.0020.0002] # CANADIAN SYLLABICS FWAA 155C ; [.3554.0020.0002] # CANADIAN SYLLABICS WEST-CREE FWAA 155D ; [.3555.0020.0002] # CANADIAN SYLLABICS F 155E ; [.3556.0020.0002] # CANADIAN SYLLABICS THE 155F ; [.3557.0020.0002] # CANADIAN SYLLABICS N-CREE THE 1560 ; [.3558.0020.0002] # CANADIAN SYLLABICS THI 1561 ; [.3559.0020.0002] # CANADIAN SYLLABICS N-CREE THI 1562 ; [.355A.0020.0002] # CANADIAN SYLLABICS THII 1563 ; [.355B.0020.0002] # CANADIAN SYLLABICS N-CREE THII 1564 ; [.355C.0020.0002] # CANADIAN SYLLABICS THO 1565 ; [.355D.0020.0002] # CANADIAN SYLLABICS THOO 1566 ; [.355E.0020.0002] # CANADIAN SYLLABICS THA 1567 ; [.355F.0020.0002] # CANADIAN SYLLABICS THAA 1568 ; [.3560.0020.0002] # CANADIAN SYLLABICS THWAA 1569 ; [.3561.0020.0002] # CANADIAN SYLLABICS WEST-CREE THWAA 156A ; [.3562.0020.0002] # CANADIAN SYLLABICS TH 156B ; [.3563.0020.0002] # CANADIAN SYLLABICS TTHE 156C ; [.3564.0020.0002] # CANADIAN SYLLABICS TTHI 156D ; [.3565.0020.0002] # CANADIAN SYLLABICS TTHO 156E ; [.3566.0020.0002] # CANADIAN SYLLABICS TTHA 156F ; [.3567.0020.0002] # CANADIAN SYLLABICS TTH 1570 ; [.3568.0020.0002] # CANADIAN SYLLABICS TYE 1571 ; [.3569.0020.0002] # CANADIAN SYLLABICS TYI 1572 ; [.356A.0020.0002] # CANADIAN SYLLABICS TYO 1573 ; [.356B.0020.0002] # CANADIAN SYLLABICS TYA 1574 ; [.356C.0020.0002] # CANADIAN SYLLABICS NUNAVIK HE 1575 ; [.356D.0020.0002] # CANADIAN SYLLABICS NUNAVIK HI 1576 ; [.356E.0020.0002] # CANADIAN SYLLABICS NUNAVIK HII 1577 ; [.356F.0020.0002] # CANADIAN SYLLABICS NUNAVIK HO 1578 ; [.3570.0020.0002] # CANADIAN SYLLABICS NUNAVIK HOO 1579 ; [.3571.0020.0002] # CANADIAN SYLLABICS NUNAVIK HA 157A ; [.3572.0020.0002] # CANADIAN SYLLABICS NUNAVIK HAA 157B ; [.3573.0020.0002] # CANADIAN SYLLABICS NUNAVIK H 157D ; [.3574.0020.0002] # CANADIAN SYLLABICS HK 166F ; [.3575.0020.0002] # CANADIAN SYLLABICS QAI 157E ; [.3576.0020.0002] # CANADIAN SYLLABICS QAAI 157F ; [.3577.0020.0002] # CANADIAN SYLLABICS QI 1580 ; [.3578.0020.0002] # CANADIAN SYLLABICS QII 1581 ; [.3579.0020.0002] # CANADIAN SYLLABICS QO 1582 ; [.357A.0020.0002] # CANADIAN SYLLABICS QOO 1583 ; [.357B.0020.0002] # CANADIAN SYLLABICS QA 1584 ; [.357C.0020.0002] # CANADIAN SYLLABICS QAA 1585 ; [.357D.0020.0002] # CANADIAN SYLLABICS Q 1586 ; [.357E.0020.0002] # CANADIAN SYLLABICS TLHE 1587 ; [.357F.0020.0002] # CANADIAN SYLLABICS TLHI 1588 ; [.3580.0020.0002] # CANADIAN SYLLABICS TLHO 1589 ; [.3581.0020.0002] # CANADIAN SYLLABICS TLHA 158A ; [.3582.0020.0002] # CANADIAN SYLLABICS WEST-CREE RE 158B ; [.3583.0020.0002] # CANADIAN SYLLABICS WEST-CREE RI 158C ; [.3584.0020.0002] # CANADIAN SYLLABICS WEST-CREE RO 158D ; [.3585.0020.0002] # CANADIAN SYLLABICS WEST-CREE RA 1670 ; [.3586.0020.0002] # CANADIAN SYLLABICS NGAI 158E ; [.3587.0020.0002] # CANADIAN SYLLABICS NGAAI 158F ; [.3588.0020.0002] # CANADIAN SYLLABICS NGI 1590 ; [.3589.0020.0002] # CANADIAN SYLLABICS NGII 1591 ; [.358A.0020.0002] # CANADIAN SYLLABICS NGO 1592 ; [.358B.0020.0002] # CANADIAN SYLLABICS NGOO 1593 ; [.358C.0020.0002] # CANADIAN SYLLABICS NGA 1594 ; [.358D.0020.0002] # CANADIAN SYLLABICS NGAA 1595 ; [.358E.0020.0002] # CANADIAN SYLLABICS NG 1671 ; [.358F.0020.0002] # CANADIAN SYLLABICS NNGI 1672 ; [.3590.0020.0002] # CANADIAN SYLLABICS NNGII 1673 ; [.3591.0020.0002] # CANADIAN SYLLABICS NNGO 1674 ; [.3592.0020.0002] # CANADIAN SYLLABICS NNGOO 1675 ; [.3593.0020.0002] # CANADIAN SYLLABICS NNGA 1676 ; [.3594.0020.0002] # CANADIAN SYLLABICS NNGAA 1596 ; [.3595.0020.0002] # CANADIAN SYLLABICS NNG 1597 ; [.3596.0020.0002] # CANADIAN SYLLABICS SAYISI SHE 1598 ; [.3597.0020.0002] # CANADIAN SYLLABICS SAYISI SHI 1599 ; [.3598.0020.0002] # CANADIAN SYLLABICS SAYISI SHO 159A ; [.3599.0020.0002] # CANADIAN SYLLABICS SAYISI SHA 159B ; [.359A.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THE 159C ; [.359B.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THI 159D ; [.359C.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THO 159E ; [.359D.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THA 159F ; [.359E.0020.0002] # CANADIAN SYLLABICS WOODS-CREE TH 15A0 ; [.359F.0020.0002] # CANADIAN SYLLABICS LHI 15A1 ; [.35A0.0020.0002] # CANADIAN SYLLABICS LHII 15A2 ; [.35A1.0020.0002] # CANADIAN SYLLABICS LHO 15A3 ; [.35A2.0020.0002] # CANADIAN SYLLABICS LHOO 15A4 ; [.35A3.0020.0002] # CANADIAN SYLLABICS LHA 15A5 ; [.35A4.0020.0002] # CANADIAN SYLLABICS LHAA 15A6 ; [.35A5.0020.0002] # CANADIAN SYLLABICS LH 157C ; [.35A6.0020.0002] # CANADIAN SYLLABICS NUNAVUT H 15A7 ; [.35A7.0020.0002] # CANADIAN SYLLABICS TH-CREE THE 15A8 ; [.35A8.0020.0002] # CANADIAN SYLLABICS TH-CREE THI 15A9 ; [.35A9.0020.0002] # CANADIAN SYLLABICS TH-CREE THII 15AA ; [.35AA.0020.0002] # CANADIAN SYLLABICS TH-CREE THO 15AB ; [.35AB.0020.0002] # CANADIAN SYLLABICS TH-CREE THOO 15AC ; [.35AC.0020.0002] # CANADIAN SYLLABICS TH-CREE THA 15AD ; [.35AD.0020.0002] # CANADIAN SYLLABICS TH-CREE THAA 15AE ; [.35AE.0020.0002] # CANADIAN SYLLABICS TH-CREE TH 15AF ; [.35AF.0020.0002] # CANADIAN SYLLABICS AIVILIK B 15B0 ; [.35B0.0020.0002] # CANADIAN SYLLABICS BLACKFOOT E 15B1 ; [.35B1.0020.0002] # CANADIAN SYLLABICS BLACKFOOT I 15B2 ; [.35B2.0020.0002] # CANADIAN SYLLABICS BLACKFOOT O 15B3 ; [.35B3.0020.0002] # CANADIAN SYLLABICS BLACKFOOT A 15B4 ; [.35B4.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WE 15B5 ; [.35B5.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WI 15B6 ; [.35B6.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WO 15B7 ; [.35B7.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WA 15B8 ; [.35B8.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NE 15B9 ; [.35B9.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NI 15BA ; [.35BA.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NO 15BB ; [.35BB.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NA 15BC ; [.35BC.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KE 15BD ; [.35BD.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KI 15BE ; [.35BE.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KO 15BF ; [.35BF.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KA 15C0 ; [.35C0.0020.0002] # CANADIAN SYLLABICS SAYISI HE 15C1 ; [.35C1.0020.0002] # CANADIAN SYLLABICS SAYISI HI 15C2 ; [.35C2.0020.0002] # CANADIAN SYLLABICS SAYISI HO 15C3 ; [.35C3.0020.0002] # CANADIAN SYLLABICS SAYISI HA 15C4 ; [.35C4.0020.0002] # CANADIAN SYLLABICS CARRIER GHU 15C5 ; [.35C5.0020.0002] # CANADIAN SYLLABICS CARRIER GHO 15C6 ; [.35C6.0020.0002] # CANADIAN SYLLABICS CARRIER GHE 15C7 ; [.35C7.0020.0002] # CANADIAN SYLLABICS CARRIER GHEE 15C8 ; [.35C8.0020.0002] # CANADIAN SYLLABICS CARRIER GHI 15C9 ; [.35C9.0020.0002] # CANADIAN SYLLABICS CARRIER GHA 15CA ; [.35CA.0020.0002] # CANADIAN SYLLABICS CARRIER RU 15CB ; [.35CB.0020.0002] # CANADIAN SYLLABICS CARRIER RO 15CC ; [.35CC.0020.0002] # CANADIAN SYLLABICS CARRIER RE 15CD ; [.35CD.0020.0002] # CANADIAN SYLLABICS CARRIER REE 15CE ; [.35CE.0020.0002] # CANADIAN SYLLABICS CARRIER RI 15CF ; [.35CF.0020.0002] # CANADIAN SYLLABICS CARRIER RA 15D0 ; [.35D0.0020.0002] # CANADIAN SYLLABICS CARRIER WU 15D1 ; [.35D1.0020.0002] # CANADIAN SYLLABICS CARRIER WO 15D2 ; [.35D2.0020.0002] # CANADIAN SYLLABICS CARRIER WE 15D3 ; [.35D3.0020.0002] # CANADIAN SYLLABICS CARRIER WEE 15D4 ; [.35D4.0020.0002] # CANADIAN SYLLABICS CARRIER WI 15D5 ; [.35D5.0020.0002] # CANADIAN SYLLABICS CARRIER WA 15D6 ; [.35D6.0020.0002] # CANADIAN SYLLABICS CARRIER HWU 15D7 ; [.35D7.0020.0002] # CANADIAN SYLLABICS CARRIER HWO 15D8 ; [.35D8.0020.0002] # CANADIAN SYLLABICS CARRIER HWE 15D9 ; [.35D9.0020.0002] # CANADIAN SYLLABICS CARRIER HWEE 15DA ; [.35DA.0020.0002] # CANADIAN SYLLABICS CARRIER HWI 15DB ; [.35DB.0020.0002] # CANADIAN SYLLABICS CARRIER HWA 15DC ; [.35DC.0020.0002] # CANADIAN SYLLABICS CARRIER THU 15DD ; [.35DD.0020.0002] # CANADIAN SYLLABICS CARRIER THO 15DE ; [.35DE.0020.0002] # CANADIAN SYLLABICS CARRIER THE 15DF ; [.35DF.0020.0002] # CANADIAN SYLLABICS CARRIER THEE 15E0 ; [.35E0.0020.0002] # CANADIAN SYLLABICS CARRIER THI 15E1 ; [.35E1.0020.0002] # CANADIAN SYLLABICS CARRIER THA 15E2 ; [.35E2.0020.0002] # CANADIAN SYLLABICS CARRIER TTU 15E3 ; [.35E3.0020.0002] # CANADIAN SYLLABICS CARRIER TTO 15E4 ; [.35E4.0020.0002] # CANADIAN SYLLABICS CARRIER TTE 15E5 ; [.35E5.0020.0002] # CANADIAN SYLLABICS CARRIER TTEE 15E6 ; [.35E6.0020.0002] # CANADIAN SYLLABICS CARRIER TTI 15E7 ; [.35E7.0020.0002] # CANADIAN SYLLABICS CARRIER TTA 15E8 ; [.35E8.0020.0002] # CANADIAN SYLLABICS CARRIER PU 15E9 ; [.35E9.0020.0002] # CANADIAN SYLLABICS CARRIER PO 15EA ; [.35EA.0020.0002] # CANADIAN SYLLABICS CARRIER PE 15EB ; [.35EB.0020.0002] # CANADIAN SYLLABICS CARRIER PEE 15EC ; [.35EC.0020.0002] # CANADIAN SYLLABICS CARRIER PI 15ED ; [.35ED.0020.0002] # CANADIAN SYLLABICS CARRIER PA 15EE ; [.35EE.0020.0002] # CANADIAN SYLLABICS CARRIER P 15EF ; [.35EF.0020.0002] # CANADIAN SYLLABICS CARRIER GU 15F0 ; [.35F0.0020.0002] # CANADIAN SYLLABICS CARRIER GO 15F1 ; [.35F1.0020.0002] # CANADIAN SYLLABICS CARRIER GE 15F2 ; [.35F2.0020.0002] # CANADIAN SYLLABICS CARRIER GEE 15F3 ; [.35F3.0020.0002] # CANADIAN SYLLABICS CARRIER GI 15F4 ; [.35F4.0020.0002] # CANADIAN SYLLABICS CARRIER GA 15F5 ; [.35F5.0020.0002] # CANADIAN SYLLABICS CARRIER KHU 15F6 ; [.35F6.0020.0002] # CANADIAN SYLLABICS CARRIER KHO 15F7 ; [.35F7.0020.0002] # CANADIAN SYLLABICS CARRIER KHE 15F8 ; [.35F8.0020.0002] # CANADIAN SYLLABICS CARRIER KHEE 15F9 ; [.35F9.0020.0002] # CANADIAN SYLLABICS CARRIER KHI 15FA ; [.35FA.0020.0002] # CANADIAN SYLLABICS CARRIER KHA 15FB ; [.35FB.0020.0002] # CANADIAN SYLLABICS CARRIER KKU 15FC ; [.35FC.0020.0002] # CANADIAN SYLLABICS CARRIER KKO 15FD ; [.35FD.0020.0002] # CANADIAN SYLLABICS CARRIER KKE 15FE ; [.35FE.0020.0002] # CANADIAN SYLLABICS CARRIER KKEE 15FF ; [.35FF.0020.0002] # CANADIAN SYLLABICS CARRIER KKI 1600 ; [.3600.0020.0002] # CANADIAN SYLLABICS CARRIER KKA 1601 ; [.3601.0020.0002] # CANADIAN SYLLABICS CARRIER KK 1602 ; [.3602.0020.0002] # CANADIAN SYLLABICS CARRIER NU 1603 ; [.3603.0020.0002] # CANADIAN SYLLABICS CARRIER NO 1604 ; [.3604.0020.0002] # CANADIAN SYLLABICS CARRIER NE 1605 ; [.3605.0020.0002] # CANADIAN SYLLABICS CARRIER NEE 1606 ; [.3606.0020.0002] # CANADIAN SYLLABICS CARRIER NI 1607 ; [.3607.0020.0002] # CANADIAN SYLLABICS CARRIER NA 1608 ; [.3608.0020.0002] # CANADIAN SYLLABICS CARRIER MU 1609 ; [.3609.0020.0002] # CANADIAN SYLLABICS CARRIER MO 160A ; [.360A.0020.0002] # CANADIAN SYLLABICS CARRIER ME 160B ; [.360B.0020.0002] # CANADIAN SYLLABICS CARRIER MEE 160C ; [.360C.0020.0002] # CANADIAN SYLLABICS CARRIER MI 160D ; [.360D.0020.0002] # CANADIAN SYLLABICS CARRIER MA 160E ; [.360E.0020.0002] # CANADIAN SYLLABICS CARRIER YU 160F ; [.360F.0020.0002] # CANADIAN SYLLABICS CARRIER YO 1610 ; [.3610.0020.0002] # CANADIAN SYLLABICS CARRIER YE 1611 ; [.3611.0020.0002] # CANADIAN SYLLABICS CARRIER YEE 1612 ; [.3612.0020.0002] # CANADIAN SYLLABICS CARRIER YI 1613 ; [.3613.0020.0002] # CANADIAN SYLLABICS CARRIER YA 1614 ; [.3614.0020.0002] # CANADIAN SYLLABICS CARRIER JU 1615 ; [.3615.0020.0002] # CANADIAN SYLLABICS SAYISI JU 1616 ; [.3616.0020.0002] # CANADIAN SYLLABICS CARRIER JO 1617 ; [.3617.0020.0002] # CANADIAN SYLLABICS CARRIER JE 1618 ; [.3618.0020.0002] # CANADIAN SYLLABICS CARRIER JEE 1619 ; [.3619.0020.0002] # CANADIAN SYLLABICS CARRIER JI 161A ; [.361A.0020.0002] # CANADIAN SYLLABICS SAYISI JI 161B ; [.361B.0020.0002] # CANADIAN SYLLABICS CARRIER JA 161C ; [.361C.0020.0002] # CANADIAN SYLLABICS CARRIER JJU 161D ; [.361D.0020.0002] # CANADIAN SYLLABICS CARRIER JJO 161E ; [.361E.0020.0002] # CANADIAN SYLLABICS CARRIER JJE 161F ; [.361F.0020.0002] # CANADIAN SYLLABICS CARRIER JJEE 1620 ; [.3620.0020.0002] # CANADIAN SYLLABICS CARRIER JJI 1621 ; [.3621.0020.0002] # CANADIAN SYLLABICS CARRIER JJA 1622 ; [.3622.0020.0002] # CANADIAN SYLLABICS CARRIER LU 1623 ; [.3623.0020.0002] # CANADIAN SYLLABICS CARRIER LO 1624 ; [.3624.0020.0002] # CANADIAN SYLLABICS CARRIER LE 1625 ; [.3625.0020.0002] # CANADIAN SYLLABICS CARRIER LEE 1626 ; [.3626.0020.0002] # CANADIAN SYLLABICS CARRIER LI 1627 ; [.3627.0020.0002] # CANADIAN SYLLABICS CARRIER LA 1628 ; [.3628.0020.0002] # CANADIAN SYLLABICS CARRIER DLU 1629 ; [.3629.0020.0002] # CANADIAN SYLLABICS CARRIER DLO 162A ; [.362A.0020.0002] # CANADIAN SYLLABICS CARRIER DLE 162B ; [.362B.0020.0002] # CANADIAN SYLLABICS CARRIER DLEE 162C ; [.362C.0020.0002] # CANADIAN SYLLABICS CARRIER DLI 162D ; [.362D.0020.0002] # CANADIAN SYLLABICS CARRIER DLA 162E ; [.362E.0020.0002] # CANADIAN SYLLABICS CARRIER LHU 162F ; [.362F.0020.0002] # CANADIAN SYLLABICS CARRIER LHO 1630 ; [.3630.0020.0002] # CANADIAN SYLLABICS CARRIER LHE 1631 ; [.3631.0020.0002] # CANADIAN SYLLABICS CARRIER LHEE 1632 ; [.3632.0020.0002] # CANADIAN SYLLABICS CARRIER LHI 1633 ; [.3633.0020.0002] # CANADIAN SYLLABICS CARRIER LHA 1634 ; [.3634.0020.0002] # CANADIAN SYLLABICS CARRIER TLHU 1635 ; [.3635.0020.0002] # CANADIAN SYLLABICS CARRIER TLHO 1636 ; [.3636.0020.0002] # CANADIAN SYLLABICS CARRIER TLHE 1637 ; [.3637.0020.0002] # CANADIAN SYLLABICS CARRIER TLHEE 1638 ; [.3638.0020.0002] # CANADIAN SYLLABICS CARRIER TLHI 1639 ; [.3639.0020.0002] # CANADIAN SYLLABICS CARRIER TLHA 163A ; [.363A.0020.0002] # CANADIAN SYLLABICS CARRIER TLU 163B ; [.363B.0020.0002] # CANADIAN SYLLABICS CARRIER TLO 163C ; [.363C.0020.0002] # CANADIAN SYLLABICS CARRIER TLE 163D ; [.363D.0020.0002] # CANADIAN SYLLABICS CARRIER TLEE 163E ; [.363E.0020.0002] # CANADIAN SYLLABICS CARRIER TLI 163F ; [.363F.0020.0002] # CANADIAN SYLLABICS CARRIER TLA 1640 ; [.3640.0020.0002] # CANADIAN SYLLABICS CARRIER ZU 1641 ; [.3641.0020.0002] # CANADIAN SYLLABICS CARRIER ZO 1642 ; [.3642.0020.0002] # CANADIAN SYLLABICS CARRIER ZE 1643 ; [.3643.0020.0002] # CANADIAN SYLLABICS CARRIER ZEE 1644 ; [.3644.0020.0002] # CANADIAN SYLLABICS CARRIER ZI 1645 ; [.3645.0020.0002] # CANADIAN SYLLABICS CARRIER ZA 1646 ; [.3646.0020.0002] # CANADIAN SYLLABICS CARRIER Z 1647 ; [.3647.0020.0002] # CANADIAN SYLLABICS CARRIER INITIAL Z 1648 ; [.3648.0020.0002] # CANADIAN SYLLABICS CARRIER DZU 1649 ; [.3649.0020.0002] # CANADIAN SYLLABICS CARRIER DZO 164A ; [.364A.0020.0002] # CANADIAN SYLLABICS CARRIER DZE 164B ; [.364B.0020.0002] # CANADIAN SYLLABICS CARRIER DZEE 164C ; [.364C.0020.0002] # CANADIAN SYLLABICS CARRIER DZI 164D ; [.364D.0020.0002] # CANADIAN SYLLABICS CARRIER DZA 164E ; [.364E.0020.0002] # CANADIAN SYLLABICS CARRIER SU 164F ; [.364F.0020.0002] # CANADIAN SYLLABICS CARRIER SO 1650 ; [.3650.0020.0002] # CANADIAN SYLLABICS CARRIER SE 1651 ; [.3651.0020.0002] # CANADIAN SYLLABICS CARRIER SEE 1652 ; [.3652.0020.0002] # CANADIAN SYLLABICS CARRIER SI 1653 ; [.3653.0020.0002] # CANADIAN SYLLABICS CARRIER SA 1654 ; [.3654.0020.0002] # CANADIAN SYLLABICS CARRIER SHU 1655 ; [.3655.0020.0002] # CANADIAN SYLLABICS CARRIER SHO 1656 ; [.3656.0020.0002] # CANADIAN SYLLABICS CARRIER SHE 1657 ; [.3657.0020.0002] # CANADIAN SYLLABICS CARRIER SHEE 1658 ; [.3658.0020.0002] # CANADIAN SYLLABICS CARRIER SHI 1659 ; [.3659.0020.0002] # CANADIAN SYLLABICS CARRIER SHA 165A ; [.365A.0020.0002] # CANADIAN SYLLABICS CARRIER SH 165B ; [.365B.0020.0002] # CANADIAN SYLLABICS CARRIER TSU 165C ; [.365C.0020.0002] # CANADIAN SYLLABICS CARRIER TSO 165D ; [.365D.0020.0002] # CANADIAN SYLLABICS CARRIER TSE 165E ; [.365E.0020.0002] # CANADIAN SYLLABICS CARRIER TSEE 165F ; [.365F.0020.0002] # CANADIAN SYLLABICS CARRIER TSI 1660 ; [.3660.0020.0002] # CANADIAN SYLLABICS CARRIER TSA 1661 ; [.3661.0020.0002] # CANADIAN SYLLABICS CARRIER CHU 1662 ; [.3662.0020.0002] # CANADIAN SYLLABICS CARRIER CHO 1663 ; [.3663.0020.0002] # CANADIAN SYLLABICS CARRIER CHE 1664 ; [.3664.0020.0002] # CANADIAN SYLLABICS CARRIER CHEE 1665 ; [.3665.0020.0002] # CANADIAN SYLLABICS CARRIER CHI 1666 ; [.3666.0020.0002] # CANADIAN SYLLABICS CARRIER CHA 1667 ; [.3667.0020.0002] # CANADIAN SYLLABICS CARRIER TTSU 1668 ; [.3668.0020.0002] # CANADIAN SYLLABICS CARRIER TTSO 1669 ; [.3669.0020.0002] # CANADIAN SYLLABICS CARRIER TTSE 166A ; [.366A.0020.0002] # CANADIAN SYLLABICS CARRIER TTSEE 166B ; [.366B.0020.0002] # CANADIAN SYLLABICS CARRIER TTSI 166C ; [.366C.0020.0002] # CANADIAN SYLLABICS CARRIER TTSA 1677 ; [.366D.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWEE 1678 ; [.366E.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWI 1679 ; [.366F.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWII 167A ; [.3670.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWO 167B ; [.3671.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWOO 167C ; [.3672.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWA 167D ; [.3673.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWAA 167E ; [.3674.0020.0002] # CANADIAN SYLLABICS WOODS-CREE FINAL TH 167F ; [.3675.0020.0002] # CANADIAN SYLLABICS BLACKFOOT W 18B0 ; [.3676.0020.0002] # CANADIAN SYLLABICS OY 18B1 ; [.3677.0020.0002] # CANADIAN SYLLABICS AY 18B2 ; [.3678.0020.0002] # CANADIAN SYLLABICS AAY 18B3 ; [.3679.0020.0002] # CANADIAN SYLLABICS WAY 18B4 ; [.367A.0020.0002] # CANADIAN SYLLABICS POY 18B5 ; [.367B.0020.0002] # CANADIAN SYLLABICS PAY 18B6 ; [.367C.0020.0002] # CANADIAN SYLLABICS PWOY 18B7 ; [.367D.0020.0002] # CANADIAN SYLLABICS TAY 18B8 ; [.367E.0020.0002] # CANADIAN SYLLABICS KAY 18B9 ; [.367F.0020.0002] # CANADIAN SYLLABICS KWAY 18BA ; [.3680.0020.0002] # CANADIAN SYLLABICS MAY 18BB ; [.3681.0020.0002] # CANADIAN SYLLABICS NOY 18BC ; [.3682.0020.0002] # CANADIAN SYLLABICS NAY 18BD ; [.3683.0020.0002] # CANADIAN SYLLABICS LAY 18BE ; [.3684.0020.0002] # CANADIAN SYLLABICS SOY 18BF ; [.3685.0020.0002] # CANADIAN SYLLABICS SAY 18C0 ; [.3686.0020.0002] # CANADIAN SYLLABICS SHOY 18C1 ; [.3687.0020.0002] # CANADIAN SYLLABICS SHAY 18C2 ; [.3688.0020.0002] # CANADIAN SYLLABICS SHWOY 18C3 ; [.3689.0020.0002] # CANADIAN SYLLABICS YOY 18C4 ; [.368A.0020.0002] # CANADIAN SYLLABICS YAY 18C5 ; [.368B.0020.0002] # CANADIAN SYLLABICS RAY 18C6 ; [.368C.0020.0002] # CANADIAN SYLLABICS NWI 18C7 ; [.368D.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWI 18C8 ; [.368E.0020.0002] # CANADIAN SYLLABICS NWII 18C9 ; [.368F.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWII 18CA ; [.3690.0020.0002] # CANADIAN SYLLABICS NWO 18CB ; [.3691.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWO 18CC ; [.3692.0020.0002] # CANADIAN SYLLABICS NWOO 18CD ; [.3693.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWOO 18CE ; [.3694.0020.0002] # CANADIAN SYLLABICS RWEE 18CF ; [.3695.0020.0002] # CANADIAN SYLLABICS RWI 18D0 ; [.3696.0020.0002] # CANADIAN SYLLABICS RWII 18D1 ; [.3697.0020.0002] # CANADIAN SYLLABICS RWO 18D2 ; [.3698.0020.0002] # CANADIAN SYLLABICS RWOO 18D3 ; [.3699.0020.0002] # CANADIAN SYLLABICS RWA 18D4 ; [.369A.0020.0002] # CANADIAN SYLLABICS OJIBWAY P 18D5 ; [.369B.0020.0002] # CANADIAN SYLLABICS OJIBWAY T 18D6 ; [.369C.0020.0002] # CANADIAN SYLLABICS OJIBWAY K 18D7 ; [.369D.0020.0002] # CANADIAN SYLLABICS OJIBWAY C 18D8 ; [.369E.0020.0002] # CANADIAN SYLLABICS OJIBWAY M 18D9 ; [.369F.0020.0002] # CANADIAN SYLLABICS OJIBWAY N 18DA ; [.36A0.0020.0002] # CANADIAN SYLLABICS OJIBWAY S 18DB ; [.36A1.0020.0002] # CANADIAN SYLLABICS OJIBWAY SH 18DC ; [.36A2.0020.0002] # CANADIAN SYLLABICS EASTERN W 18DD ; [.36A3.0020.0002] # CANADIAN SYLLABICS WESTERN W 18DE ; [.36A4.0020.0002] # CANADIAN SYLLABICS FINAL SMALL RING 18DF ; [.36A5.0020.0002] # CANADIAN SYLLABICS FINAL RAISED DOT 18E0 ; [.36A6.0020.0002] # CANADIAN SYLLABICS R-CREE RWE 18E1 ; [.36A7.0020.0002] # CANADIAN SYLLABICS WEST-CREE LOO 18E2 ; [.36A8.0020.0002] # CANADIAN SYLLABICS WEST-CREE LAA 18E3 ; [.36A9.0020.0002] # CANADIAN SYLLABICS THWE 18E4 ; [.36AA.0020.0002] # CANADIAN SYLLABICS THWA 18E5 ; [.36AB.0020.0002] # CANADIAN SYLLABICS TTHWE 18E6 ; [.36AC.0020.0002] # CANADIAN SYLLABICS TTHOO 18E7 ; [.36AD.0020.0002] # CANADIAN SYLLABICS TTHAA 18E8 ; [.36AE.0020.0002] # CANADIAN SYLLABICS TLHWE 18E9 ; [.36AF.0020.0002] # CANADIAN SYLLABICS TLHOO 18EA ; [.36B0.0020.0002] # CANADIAN SYLLABICS SAYISI SHWE 18EB ; [.36B1.0020.0002] # CANADIAN SYLLABICS SAYISI SHOO 18EC ; [.36B2.0020.0002] # CANADIAN SYLLABICS SAYISI HOO 18ED ; [.36B3.0020.0002] # CANADIAN SYLLABICS CARRIER GWU 18EE ; [.36B4.0020.0002] # CANADIAN SYLLABICS CARRIER DENE GEE 18EF ; [.36B5.0020.0002] # CANADIAN SYLLABICS CARRIER GAA 18F0 ; [.36B6.0020.0002] # CANADIAN SYLLABICS CARRIER GWA 18F1 ; [.36B7.0020.0002] # CANADIAN SYLLABICS SAYISI JUU 18F2 ; [.36B8.0020.0002] # CANADIAN SYLLABICS CARRIER JWA 18F3 ; [.36B9.0020.0002] # CANADIAN SYLLABICS BEAVER DENE L 18F4 ; [.36BA.0020.0002] # CANADIAN SYLLABICS BEAVER DENE R 18F5 ; [.36BB.0020.0002] # CANADIAN SYLLABICS CARRIER DENTAL S 1681 ; [.36BC.0020.0002] # OGHAM LETTER BEITH 1682 ; [.36BD.0020.0002] # OGHAM LETTER LUIS 1683 ; [.36BE.0020.0002] # OGHAM LETTER FEARN 1684 ; [.36BF.0020.0002] # OGHAM LETTER SAIL 1685 ; [.36C0.0020.0002] # OGHAM LETTER NION 1686 ; [.36C1.0020.0002] # OGHAM LETTER UATH 1687 ; [.36C2.0020.0002] # OGHAM LETTER DAIR 1688 ; [.36C3.0020.0002] # OGHAM LETTER TINNE 1689 ; [.36C4.0020.0002] # OGHAM LETTER COLL 168A ; [.36C5.0020.0002] # OGHAM LETTER CEIRT 168B ; [.36C6.0020.0002] # OGHAM LETTER MUIN 168C ; [.36C7.0020.0002] # OGHAM LETTER GORT 168D ; [.36C8.0020.0002] # OGHAM LETTER NGEADAL 168E ; [.36C9.0020.0002] # OGHAM LETTER STRAIF 168F ; [.36CA.0020.0002] # OGHAM LETTER RUIS 1690 ; [.36CB.0020.0002] # OGHAM LETTER AILM 1691 ; [.36CC.0020.0002] # OGHAM LETTER ONN 1692 ; [.36CD.0020.0002] # OGHAM LETTER UR 1693 ; [.36CE.0020.0002] # OGHAM LETTER EADHADH 1694 ; [.36CF.0020.0002] # OGHAM LETTER IODHADH 1695 ; [.36D0.0020.0002] # OGHAM LETTER EABHADH 1696 ; [.36D1.0020.0002] # OGHAM LETTER OR 1697 ; [.36D2.0020.0002] # OGHAM LETTER UILLEANN 1698 ; [.36D3.0020.0002] # OGHAM LETTER IFIN 1699 ; [.36D4.0020.0002] # OGHAM LETTER EAMHANCHOLL 169A ; [.36D5.0020.0002] # OGHAM LETTER PEITH 16A0 ; [.36D6.0020.0002] # RUNIC LETTER FEHU FEOH FE F 16A1 ; [.36D6.0020.0004][.0000.0110.0004] # RUNIC LETTER V 16A2 ; [.36D7.0020.0002] # RUNIC LETTER URUZ UR U 16A4 ; [.36D7.0020.0004][.0000.0110.0004] # RUNIC LETTER Y 16A5 ; [.36D7.0020.0004][.0000.0111.0004] # RUNIC LETTER W 16A6 ; [.36D8.0020.0002] # RUNIC LETTER THURISAZ THURS THORN 16A7 ; [.36D8.0020.0004][.0000.0110.0004] # RUNIC LETTER ETH 16F0 ; [.36D8.0020.0004][.36D8.0020.0004] # RUNIC BELGTHOR SYMBOL 16A8 ; [.36D9.0020.0002] # RUNIC LETTER ANSUZ A 16A9 ; [.36D9.0020.0004][.0000.0110.0004] # RUNIC LETTER OS O 16AC ; [.36D9.0020.0004][.0000.0111.0004] # RUNIC LETTER LONG-BRANCH-OSS O 16AD ; [.36D9.0020.0004][.0000.0112.0004] # RUNIC LETTER SHORT-TWIG-OSS O 16AE ; [.36D9.0020.0004][.0000.0113.0004] # RUNIC LETTER O 16F4 ; [.36DA.0020.0002] # RUNIC LETTER FRANKS CASKET OS 16AF ; [.36DB.0020.0002] # RUNIC LETTER OE 16B0 ; [.36DC.0020.0002] # RUNIC LETTER ON 16B1 ; [.36DD.0020.0002] # RUNIC LETTER RAIDO RAD REID R 16B2 ; [.36DE.0020.0002] # RUNIC LETTER KAUNA 16B3 ; [.36DE.0020.0004][.0000.0110.0004] # RUNIC LETTER CEN 16B4 ; [.36DE.0020.0004][.0000.0111.0004] # RUNIC LETTER KAUN K 16B5 ; [.36DE.0020.0004][.0000.0112.0004] # RUNIC LETTER G 16B6 ; [.36DE.0020.0004][.0000.0113.0004] # RUNIC LETTER ENG 16F1 ; [.36DF.0020.0002] # RUNIC LETTER K 16B7 ; [.36E0.0020.0002] # RUNIC LETTER GEBO GYFU G 16B9 ; [.36E1.0020.0002] # RUNIC LETTER WUNJO WYNN W 16E9 ; [.36E1.0020.0004][.0000.0110.0004] # RUNIC LETTER Q 16BA ; [.36E2.0020.0002] # RUNIC LETTER HAGLAZ H 16BB ; [.36E2.0020.0004][.0000.0110.0004] # RUNIC LETTER HAEGL H 16BC ; [.36E2.0020.0004][.0000.0111.0004] # RUNIC LETTER LONG-BRANCH-HAGALL H 16BD ; [.36E2.0020.0004][.0000.0112.0004] # RUNIC LETTER SHORT-TWIG-HAGALL H 16BE ; [.36E3.0020.0002] # RUNIC LETTER NAUDIZ NYD NAUD N 16BF ; [.36E3.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-NAUD N 16C0 ; [.36E3.0020.0004][.0000.0111.0004] # RUNIC LETTER DOTTED-N 16C1 ; [.36E4.0020.0002] # RUNIC LETTER ISAZ IS ISS I 16C2 ; [.36E4.0020.0004][.0000.0110.0004] # RUNIC LETTER E 16F5 ; [.36E5.0020.0002] # RUNIC LETTER FRANKS CASKET IS 16C3 ; [.36E6.0020.0002] # RUNIC LETTER JERAN J 16C4 ; [.36E6.0020.0004][.0000.0110.0004] # RUNIC LETTER GER 16C5 ; [.36E7.0020.0002] # RUNIC LETTER LONG-BRANCH-AR AE 16C6 ; [.36E7.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-AR A 16EE ; [.36E7.0020.0004][.36F2.0020.0004] # RUNIC ARLAUG SYMBOL 16C7 ; [.36E8.0020.0002] # RUNIC LETTER IWAZ EOH 16C8 ; [.36E9.0020.0002] # RUNIC LETTER PERTHO PEORTH P 16D5 ; [.36E9.0020.0004][.0000.0110.0004] # RUNIC LETTER OPEN-P 16C9 ; [.36EA.0020.0002] # RUNIC LETTER ALGIZ EOLHX 16CA ; [.36EB.0020.0002] # RUNIC LETTER SOWILO S 16CB ; [.36EB.0020.0004][.0000.0110.0004] # RUNIC LETTER SIGEL LONG-BRANCH-SOL S 16EA ; [.36EB.0020.0004][.0000.0111.0004] # RUNIC LETTER X 16CC ; [.36EB.0020.0004][.0000.0112.0004] # RUNIC LETTER SHORT-TWIG-SOL S 16CD ; [.36EB.0020.0004][.0000.0113.0004] # RUNIC LETTER C 16CE ; [.36EB.0020.0004][.0000.0114.0004] # RUNIC LETTER Z 16F2 ; [.36EC.0020.0002] # RUNIC LETTER SH 16CF ; [.36ED.0020.0002] # RUNIC LETTER TIWAZ TIR TYR T 16D0 ; [.36ED.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-TYR T 16D1 ; [.36ED.0020.0004][.0000.0111.0004] # RUNIC LETTER D 16D2 ; [.36EE.0020.0002] # RUNIC LETTER BERKANAN BEORC BJARKAN B 16D3 ; [.36EE.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-BJARKAN B 16D4 ; [.36EE.0020.0004][.0000.0111.0004] # RUNIC LETTER DOTTED-P 16D6 ; [.36EF.0020.0002] # RUNIC LETTER EHWAZ EH E 16F6 ; [.36F0.0020.0002] # RUNIC LETTER FRANKS CASKET EH 16D7 ; [.36F1.0020.0002] # RUNIC LETTER MANNAZ MAN M 16D8 ; [.36F1.0020.0004][.0000.0110.0004] # RUNIC LETTER LONG-BRANCH-MADR M 16D9 ; [.36F1.0020.0004][.0000.0111.0004] # RUNIC LETTER SHORT-TWIG-MADR M 16EF ; [.36F1.0020.0004][.0000.0110.0004][.36F1.0020.0004][.0000.0110.0004] # RUNIC TVIMADUR SYMBOL 16DA ; [.36F2.0020.0002] # RUNIC LETTER LAUKAZ LAGU LOGR L 16DB ; [.36F2.0020.0004][.0000.0110.0004] # RUNIC LETTER DOTTED-L 16DC ; [.36F3.0020.0002] # RUNIC LETTER INGWAZ 16DD ; [.36F3.0020.0004][.0000.0110.0004] # RUNIC LETTER ING 16DE ; [.36F4.0020.0002] # RUNIC LETTER DAGAZ DAEG D 16DF ; [.36F5.0020.0002] # RUNIC LETTER OTHALAN ETHEL O 16F3 ; [.36F6.0020.0002] # RUNIC LETTER OO 16AA ; [.36F7.0020.0002] # RUNIC LETTER AC A 16F7 ; [.36F8.0020.0002] # RUNIC LETTER FRANKS CASKET AC 16AB ; [.36F9.0020.0002] # RUNIC LETTER AESC 16F8 ; [.36FA.0020.0002] # RUNIC LETTER FRANKS CASKET AESC 16A3 ; [.36FB.0020.0002] # RUNIC LETTER YR 16E0 ; [.36FC.0020.0002] # RUNIC LETTER EAR 16E3 ; [.36FD.0020.0002] # RUNIC LETTER CALC 16B8 ; [.36FE.0020.0002] # RUNIC LETTER GAR 16E4 ; [.36FF.0020.0002] # RUNIC LETTER CEALC 16E1 ; [.3700.0020.0002] # RUNIC LETTER IOR 16E2 ; [.3701.0020.0002] # RUNIC LETTER CWEORTH 16E5 ; [.3702.0020.0002] # RUNIC LETTER STAN 16E6 ; [.3703.0020.0002] # RUNIC LETTER LONG-BRANCH-YR 16E7 ; [.3703.0020.0004][.0000.0110.0004] # RUNIC LETTER SHORT-TWIG-YR 16E8 ; [.3703.0020.0004][.0000.0111.0004] # RUNIC LETTER ICELANDIC-YR 10CC0 ; [.3704.0020.0002] # OLD HUNGARIAN SMALL LETTER A 10C80 ; [.3704.0020.0008] # OLD HUNGARIAN CAPITAL LETTER A 10CC1 ; [.3704.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER AA 10C81 ; [.3704.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER AA 10CC2 ; [.3705.0020.0002] # OLD HUNGARIAN SMALL LETTER EB 10C82 ; [.3705.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EB 10CC3 ; [.3706.0020.0002] # OLD HUNGARIAN SMALL LETTER AMB 10C83 ; [.3706.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AMB 10CC4 ; [.3707.0020.0002] # OLD HUNGARIAN SMALL LETTER EC 10C84 ; [.3707.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EC 10CC5 ; [.3708.0020.0002] # OLD HUNGARIAN SMALL LETTER ENC 10C85 ; [.3708.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENC 10CC6 ; [.3709.0020.0002] # OLD HUNGARIAN SMALL LETTER ECS 10C86 ; [.3709.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECS 10CC7 ; [.370A.0020.0002] # OLD HUNGARIAN SMALL LETTER ED 10C87 ; [.370A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ED 10CC8 ; [.370B.0020.0002] # OLD HUNGARIAN SMALL LETTER AND 10C88 ; [.370B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AND 10CC9 ; [.370C.0020.0002] # OLD HUNGARIAN SMALL LETTER E 10C89 ; [.370C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER E 10CCA ; [.370C.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER CLOSE E 10C8A ; [.370C.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER CLOSE E 10CCB ; [.370C.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER EE 10C8B ; [.370C.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER EE 10CCC ; [.370D.0020.0002] # OLD HUNGARIAN SMALL LETTER EF 10C8C ; [.370D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EF 10CCD ; [.370E.0020.0002] # OLD HUNGARIAN SMALL LETTER EG 10C8D ; [.370E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EG 10CCE ; [.370F.0020.0002] # OLD HUNGARIAN SMALL LETTER EGY 10C8E ; [.370F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EGY 10CCF ; [.3710.0020.0002] # OLD HUNGARIAN SMALL LETTER EH 10C8F ; [.3710.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EH 10CD0 ; [.3711.0020.0002] # OLD HUNGARIAN SMALL LETTER I 10C90 ; [.3711.0020.0008] # OLD HUNGARIAN CAPITAL LETTER I 10CD1 ; [.3711.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER II 10C91 ; [.3711.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER II 10CD2 ; [.3712.0020.0002] # OLD HUNGARIAN SMALL LETTER EJ 10C92 ; [.3712.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EJ 10CD3 ; [.3713.0020.0002] # OLD HUNGARIAN SMALL LETTER EK 10C93 ; [.3713.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EK 10CD4 ; [.3714.0020.0002] # OLD HUNGARIAN SMALL LETTER AK 10C94 ; [.3714.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AK 10CD5 ; [.3715.0020.0002] # OLD HUNGARIAN SMALL LETTER UNK 10C95 ; [.3715.0020.0008] # OLD HUNGARIAN CAPITAL LETTER UNK 10CD6 ; [.3716.0020.0002] # OLD HUNGARIAN SMALL LETTER EL 10C96 ; [.3716.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EL 10CD7 ; [.3717.0020.0002] # OLD HUNGARIAN SMALL LETTER ELY 10C97 ; [.3717.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ELY 10CD8 ; [.3718.0020.0002] # OLD HUNGARIAN SMALL LETTER EM 10C98 ; [.3718.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EM 10CD9 ; [.3719.0020.0002] # OLD HUNGARIAN SMALL LETTER EN 10C99 ; [.3719.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EN 10CDA ; [.371A.0020.0002] # OLD HUNGARIAN SMALL LETTER ENY 10C9A ; [.371A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENY 10CDB ; [.371B.0020.0002] # OLD HUNGARIAN SMALL LETTER O 10C9B ; [.371B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER O 10CDC ; [.371B.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER OO 10C9C ; [.371B.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER OO 10CDD ; [.371C.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE 10C9D ; [.371C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE 10CDE ; [.371C.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA OE 10C9E ; [.371C.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE 10CDF ; [.371C.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER OEE 10C9F ; [.371C.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER OEE 10CE0 ; [.371D.0020.0002] # OLD HUNGARIAN SMALL LETTER EP 10CA0 ; [.371D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EP 10CE1 ; [.371E.0020.0002] # OLD HUNGARIAN SMALL LETTER EMP 10CA1 ; [.371E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EMP 10CE2 ; [.371F.0020.0002] # OLD HUNGARIAN SMALL LETTER ER 10CA2 ; [.371F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ER 10CE3 ; [.371F.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER SHORT ER 10CA3 ; [.371F.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER SHORT ER 10CE4 ; [.3720.0020.0002] # OLD HUNGARIAN SMALL LETTER ES 10CA4 ; [.3720.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ES 10CE5 ; [.3721.0020.0002] # OLD HUNGARIAN SMALL LETTER ESZ 10CA5 ; [.3721.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ESZ 10CE6 ; [.3722.0020.0002] # OLD HUNGARIAN SMALL LETTER ET 10CA6 ; [.3722.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ET 10CE7 ; [.3723.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT 10CA7 ; [.3723.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT 10CE8 ; [.3724.0020.0002] # OLD HUNGARIAN SMALL LETTER ETY 10CA8 ; [.3724.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ETY 10CE9 ; [.3725.0020.0002] # OLD HUNGARIAN SMALL LETTER ECH 10CA9 ; [.3725.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECH 10CEA ; [.3726.0020.0002] # OLD HUNGARIAN SMALL LETTER U 10CAA ; [.3726.0020.0008] # OLD HUNGARIAN CAPITAL LETTER U 10CEB ; [.3726.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER UU 10CAB ; [.3726.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER UU 10CEC ; [.3727.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE 10CAC ; [.3727.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE 10CED ; [.3727.0020.0004][.0000.0110.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA UE 10CAD ; [.3727.0020.000A][.0000.0110.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE 10CEE ; [.3728.0020.0002] # OLD HUNGARIAN SMALL LETTER EV 10CAE ; [.3728.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EV 10CEF ; [.3729.0020.0002] # OLD HUNGARIAN SMALL LETTER EZ 10CAF ; [.3729.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZ 10CF0 ; [.372A.0020.0002] # OLD HUNGARIAN SMALL LETTER EZS 10CB0 ; [.372A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZS 10CF1 ; [.372B.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN 10CB1 ; [.372B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN 10CF2 ; [.372C.0020.0002] # OLD HUNGARIAN SMALL LETTER US 10CB2 ; [.372C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER US 10C00 ; [.372D.0020.0002] # OLD TURKIC LETTER ORKHON A 10C01 ; [.372D.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI A 10C02 ; [.372E.0020.0002] # OLD TURKIC LETTER YENISEI AE 10C03 ; [.372F.0020.0002] # OLD TURKIC LETTER ORKHON I 10C04 ; [.372F.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI I 10C05 ; [.3730.0020.0002] # OLD TURKIC LETTER YENISEI E 10C06 ; [.3731.0020.0002] # OLD TURKIC LETTER ORKHON O 10C07 ; [.3732.0020.0002] # OLD TURKIC LETTER ORKHON OE 10C08 ; [.3732.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI OE 10C09 ; [.3733.0020.0002] # OLD TURKIC LETTER ORKHON AB 10C0A ; [.3733.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AB 10C0B ; [.3734.0020.0002] # OLD TURKIC LETTER ORKHON AEB 10C0C ; [.3734.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEB 10C0D ; [.3735.0020.0002] # OLD TURKIC LETTER ORKHON AG 10C0E ; [.3735.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AG 10C0F ; [.3736.0020.0002] # OLD TURKIC LETTER ORKHON AEG 10C10 ; [.3736.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEG 10C11 ; [.3737.0020.0002] # OLD TURKIC LETTER ORKHON AD 10C12 ; [.3737.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AD 10C13 ; [.3738.0020.0002] # OLD TURKIC LETTER ORKHON AED 10C14 ; [.3739.0020.0002] # OLD TURKIC LETTER ORKHON EZ 10C15 ; [.3739.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI EZ 10C16 ; [.373A.0020.0002] # OLD TURKIC LETTER ORKHON AY 10C17 ; [.373A.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AY 10C18 ; [.373B.0020.0002] # OLD TURKIC LETTER ORKHON AEY 10C19 ; [.373B.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEY 10C1A ; [.373C.0020.0002] # OLD TURKIC LETTER ORKHON AEK 10C1B ; [.373C.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEK 10C1C ; [.373D.0020.0002] # OLD TURKIC LETTER ORKHON OEK 10C1D ; [.373D.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI OEK 10C1E ; [.373E.0020.0002] # OLD TURKIC LETTER ORKHON AL 10C1F ; [.373E.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AL 10C20 ; [.373F.0020.0002] # OLD TURKIC LETTER ORKHON AEL 10C21 ; [.3740.0020.0002] # OLD TURKIC LETTER ORKHON ELT 10C22 ; [.3741.0020.0002] # OLD TURKIC LETTER ORKHON EM 10C23 ; [.3742.0020.0002] # OLD TURKIC LETTER ORKHON AN 10C24 ; [.3743.0020.0002] # OLD TURKIC LETTER ORKHON AEN 10C25 ; [.3743.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AEN 10C26 ; [.3744.0020.0002] # OLD TURKIC LETTER ORKHON ENT 10C27 ; [.3744.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ENT 10C28 ; [.3745.0020.0002] # OLD TURKIC LETTER ORKHON ENC 10C29 ; [.3745.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ENC 10C2A ; [.3746.0020.0002] # OLD TURKIC LETTER ORKHON ENY 10C2B ; [.3746.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ENY 10C2C ; [.3747.0020.0002] # OLD TURKIC LETTER YENISEI ANG 10C2D ; [.3748.0020.0002] # OLD TURKIC LETTER ORKHON ENG 10C2E ; [.3748.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AENG 10C2F ; [.3749.0020.0002] # OLD TURKIC LETTER ORKHON EP 10C30 ; [.374A.0020.0002] # OLD TURKIC LETTER ORKHON OP 10C31 ; [.374B.0020.0002] # OLD TURKIC LETTER ORKHON IC 10C32 ; [.374C.0020.0002] # OLD TURKIC LETTER ORKHON EC 10C33 ; [.374C.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI EC 10C34 ; [.374D.0020.0002] # OLD TURKIC LETTER ORKHON AQ 10C35 ; [.374D.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AQ 10C36 ; [.374E.0020.0002] # OLD TURKIC LETTER ORKHON IQ 10C37 ; [.374E.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI IQ 10C38 ; [.374F.0020.0002] # OLD TURKIC LETTER ORKHON OQ 10C39 ; [.374F.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI OQ 10C3A ; [.3750.0020.0002] # OLD TURKIC LETTER ORKHON AR 10C3B ; [.3750.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AR 10C3C ; [.3751.0020.0002] # OLD TURKIC LETTER ORKHON AER 10C3D ; [.3752.0020.0002] # OLD TURKIC LETTER ORKHON AS 10C3E ; [.3753.0020.0002] # OLD TURKIC LETTER ORKHON AES 10C3F ; [.3754.0020.0002] # OLD TURKIC LETTER ORKHON ASH 10C40 ; [.3754.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ASH 10C41 ; [.3755.0020.0002] # OLD TURKIC LETTER ORKHON ESH 10C42 ; [.3755.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI ESH 10C43 ; [.3756.0020.0002] # OLD TURKIC LETTER ORKHON AT 10C44 ; [.3756.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AT 10C45 ; [.3757.0020.0002] # OLD TURKIC LETTER ORKHON AET 10C46 ; [.3757.0020.0004][.0000.0110.0004] # OLD TURKIC LETTER YENISEI AET 10C47 ; [.3758.0020.0002] # OLD TURKIC LETTER ORKHON OT 10C48 ; [.3759.0020.0002] # OLD TURKIC LETTER ORKHON BASH A500 ; [.375A.0020.0002] # VAI SYLLABLE EE A501 ; [.375B.0020.0002] # VAI SYLLABLE EEN A502 ; [.375C.0020.0002] # VAI SYLLABLE HEE A503 ; [.375D.0020.0002] # VAI SYLLABLE WEE A504 ; [.375E.0020.0002] # VAI SYLLABLE WEEN A505 ; [.375F.0020.0002] # VAI SYLLABLE PEE A506 ; [.3760.0020.0002] # VAI SYLLABLE BHEE A507 ; [.3761.0020.0002] # VAI SYLLABLE BEE A508 ; [.3762.0020.0002] # VAI SYLLABLE MBEE A509 ; [.3763.0020.0002] # VAI SYLLABLE KPEE A50A ; [.3764.0020.0002] # VAI SYLLABLE MGBEE A50B ; [.3765.0020.0002] # VAI SYLLABLE GBEE A50C ; [.3766.0020.0002] # VAI SYLLABLE FEE A613 ; [.3766.0020.0004][.3865.0020.0004] # VAI SYMBOL FEENG A50D ; [.3767.0020.0002] # VAI SYLLABLE VEE A50E ; [.3768.0020.0002] # VAI SYLLABLE TEE A50F ; [.3769.0020.0002] # VAI SYLLABLE THEE A510 ; [.376A.0020.0002] # VAI SYLLABLE DHEE A511 ; [.376B.0020.0002] # VAI SYLLABLE DHHEE A512 ; [.376C.0020.0002] # VAI SYLLABLE LEE A513 ; [.376D.0020.0002] # VAI SYLLABLE REE A514 ; [.376E.0020.0002] # VAI SYLLABLE DEE A515 ; [.376F.0020.0002] # VAI SYLLABLE NDEE A516 ; [.3770.0020.0002] # VAI SYLLABLE SEE A517 ; [.3771.0020.0002] # VAI SYLLABLE SHEE A518 ; [.3772.0020.0002] # VAI SYLLABLE ZEE A519 ; [.3773.0020.0002] # VAI SYLLABLE ZHEE A51A ; [.3774.0020.0002] # VAI SYLLABLE CEE A51B ; [.3775.0020.0002] # VAI SYLLABLE JEE A51C ; [.3776.0020.0002] # VAI SYLLABLE NJEE A51D ; [.3777.0020.0002] # VAI SYLLABLE YEE A51E ; [.3778.0020.0002] # VAI SYLLABLE KEE A614 ; [.3778.0020.0004][.3865.0020.0004] # VAI SYMBOL KEENG A51F ; [.3779.0020.0002] # VAI SYLLABLE NGGEE A520 ; [.377A.0020.0002] # VAI SYLLABLE GEE A521 ; [.377B.0020.0002] # VAI SYLLABLE MEE A522 ; [.377C.0020.0002] # VAI SYLLABLE NEE A523 ; [.377D.0020.0002] # VAI SYLLABLE NYEE A524 ; [.377E.0020.0002] # VAI SYLLABLE I A525 ; [.377F.0020.0002] # VAI SYLLABLE IN A526 ; [.3780.0020.0002] # VAI SYLLABLE HI A527 ; [.3781.0020.0002] # VAI SYLLABLE HIN A528 ; [.3782.0020.0002] # VAI SYLLABLE WI A529 ; [.3783.0020.0002] # VAI SYLLABLE WIN A52A ; [.3784.0020.0002] # VAI SYLLABLE PI A52B ; [.3785.0020.0002] # VAI SYLLABLE BHI A52C ; [.3786.0020.0002] # VAI SYLLABLE BI A52D ; [.3787.0020.0002] # VAI SYLLABLE MBI A52E ; [.3788.0020.0002] # VAI SYLLABLE KPI A52F ; [.3789.0020.0002] # VAI SYLLABLE MGBI A530 ; [.378A.0020.0002] # VAI SYLLABLE GBI A531 ; [.378B.0020.0002] # VAI SYLLABLE FI A532 ; [.378C.0020.0002] # VAI SYLLABLE VI A533 ; [.378D.0020.0002] # VAI SYLLABLE TI A615 ; [.378D.0020.0004][.3865.0020.0004] # VAI SYMBOL TING A534 ; [.378E.0020.0002] # VAI SYLLABLE THI A535 ; [.378F.0020.0002] # VAI SYLLABLE DHI A536 ; [.3790.0020.0002] # VAI SYLLABLE DHHI A537 ; [.3791.0020.0002] # VAI SYLLABLE LI A538 ; [.3792.0020.0002] # VAI SYLLABLE RI A539 ; [.3793.0020.0002] # VAI SYLLABLE DI A53A ; [.3794.0020.0002] # VAI SYLLABLE NDI A53B ; [.3795.0020.0002] # VAI SYLLABLE SI A53C ; [.3796.0020.0002] # VAI SYLLABLE SHI A53D ; [.3797.0020.0002] # VAI SYLLABLE ZI A53E ; [.3798.0020.0002] # VAI SYLLABLE ZHI A53F ; [.3799.0020.0002] # VAI SYLLABLE CI A540 ; [.379A.0020.0002] # VAI SYLLABLE JI A541 ; [.379B.0020.0002] # VAI SYLLABLE NJI A542 ; [.379C.0020.0002] # VAI SYLLABLE YI A543 ; [.379D.0020.0002] # VAI SYLLABLE KI A544 ; [.379E.0020.0002] # VAI SYLLABLE NGGI A545 ; [.379F.0020.0002] # VAI SYLLABLE GI A546 ; [.37A0.0020.0002] # VAI SYLLABLE MI A547 ; [.37A1.0020.0002] # VAI SYLLABLE NI A616 ; [.37A1.0020.0004][.3866.0020.0004] # VAI SYMBOL NII A548 ; [.37A2.0020.0002] # VAI SYLLABLE NYI A549 ; [.37A3.0020.0002] # VAI SYLLABLE A A54A ; [.37A4.0020.0002] # VAI SYLLABLE AN A54B ; [.37A5.0020.0002] # VAI SYLLABLE NGAN A54C ; [.37A6.0020.0002] # VAI SYLLABLE HA A54D ; [.37A7.0020.0002] # VAI SYLLABLE HAN A54E ; [.37A8.0020.0002] # VAI SYLLABLE WA A54F ; [.37A9.0020.0002] # VAI SYLLABLE WAN A550 ; [.37AA.0020.0002] # VAI SYLLABLE PA A551 ; [.37AB.0020.0002] # VAI SYLLABLE BHA A552 ; [.37AC.0020.0002] # VAI SYLLABLE BA A617 ; [.37AC.0020.0004][.3865.0020.0004] # VAI SYMBOL BANG A553 ; [.37AD.0020.0002] # VAI SYLLABLE MBA A554 ; [.37AE.0020.0002] # VAI SYLLABLE KPA A555 ; [.37AF.0020.0002] # VAI SYLLABLE KPAN A556 ; [.37B0.0020.0002] # VAI SYLLABLE MGBA A557 ; [.37B1.0020.0002] # VAI SYLLABLE GBA A558 ; [.37B2.0020.0002] # VAI SYLLABLE FA A610 ; [.37B2.0020.0004] # VAI SYLLABLE NDOLE FA A618 ; [.37B2.0020.0004][.3866.0020.0004] # VAI SYMBOL FAA A559 ; [.37B3.0020.0002] # VAI SYLLABLE VA A55A ; [.37B4.0020.0002] # VAI SYLLABLE TA A619 ; [.37B4.0020.0004][.3866.0020.0004] # VAI SYMBOL TAA A55B ; [.37B5.0020.0002] # VAI SYLLABLE THA A55C ; [.37B6.0020.0002] # VAI SYLLABLE DHA A55D ; [.37B7.0020.0002] # VAI SYLLABLE DHHA A55E ; [.37B8.0020.0002] # VAI SYLLABLE LA A55F ; [.37B9.0020.0002] # VAI SYLLABLE RA A560 ; [.37BA.0020.0002] # VAI SYLLABLE DA A61A ; [.37BA.0020.0004][.3865.0020.0004] # VAI SYMBOL DANG A561 ; [.37BB.0020.0002] # VAI SYLLABLE NDA A562 ; [.37BC.0020.0002] # VAI SYLLABLE SA A563 ; [.37BD.0020.0002] # VAI SYLLABLE SHA A564 ; [.37BE.0020.0002] # VAI SYLLABLE ZA A565 ; [.37BF.0020.0002] # VAI SYLLABLE ZHA A566 ; [.37C0.0020.0002] # VAI SYLLABLE CA A567 ; [.37C1.0020.0002] # VAI SYLLABLE JA A568 ; [.37C2.0020.0002] # VAI SYLLABLE NJA A569 ; [.37C3.0020.0002] # VAI SYLLABLE YA A56A ; [.37C4.0020.0002] # VAI SYLLABLE KA A611 ; [.37C4.0020.0004] # VAI SYLLABLE NDOLE KA A56B ; [.37C5.0020.0002] # VAI SYLLABLE KAN A56C ; [.37C6.0020.0002] # VAI SYLLABLE NGGA A56D ; [.37C7.0020.0002] # VAI SYLLABLE GA A56E ; [.37C8.0020.0002] # VAI SYLLABLE MA A62A ; [.37C8.0020.0004] # VAI SYLLABLE NDOLE MA A56F ; [.37C9.0020.0002] # VAI SYLLABLE NA A570 ; [.37CA.0020.0002] # VAI SYLLABLE NYA A571 ; [.37CB.0020.0002] # VAI SYLLABLE OO A572 ; [.37CC.0020.0002] # VAI SYLLABLE OON A573 ; [.37CD.0020.0002] # VAI SYLLABLE HOO A574 ; [.37CE.0020.0002] # VAI SYLLABLE WOO A575 ; [.37CF.0020.0002] # VAI SYLLABLE WOON A576 ; [.37D0.0020.0002] # VAI SYLLABLE POO A577 ; [.37D1.0020.0002] # VAI SYLLABLE BHOO A578 ; [.37D2.0020.0002] # VAI SYLLABLE BOO A579 ; [.37D3.0020.0002] # VAI SYLLABLE MBOO A57A ; [.37D4.0020.0002] # VAI SYLLABLE KPOO A57B ; [.37D5.0020.0002] # VAI SYLLABLE MGBOO A57C ; [.37D6.0020.0002] # VAI SYLLABLE GBOO A57D ; [.37D7.0020.0002] # VAI SYLLABLE FOO A57E ; [.37D8.0020.0002] # VAI SYLLABLE VOO A57F ; [.37D9.0020.0002] # VAI SYLLABLE TOO A580 ; [.37DA.0020.0002] # VAI SYLLABLE THOO A581 ; [.37DB.0020.0002] # VAI SYLLABLE DHOO A582 ; [.37DC.0020.0002] # VAI SYLLABLE DHHOO A583 ; [.37DD.0020.0002] # VAI SYLLABLE LOO A584 ; [.37DE.0020.0002] # VAI SYLLABLE ROO A585 ; [.37DF.0020.0002] # VAI SYLLABLE DOO A61B ; [.37DF.0020.0004][.3865.0020.0004] # VAI SYMBOL DOONG A586 ; [.37E0.0020.0002] # VAI SYLLABLE NDOO A587 ; [.37E1.0020.0002] # VAI SYLLABLE SOO A612 ; [.37E1.0020.0004] # VAI SYLLABLE NDOLE SOO A588 ; [.37E2.0020.0002] # VAI SYLLABLE SHOO A589 ; [.37E3.0020.0002] # VAI SYLLABLE ZOO A58A ; [.37E4.0020.0002] # VAI SYLLABLE ZHOO A58B ; [.37E5.0020.0002] # VAI SYLLABLE COO A58C ; [.37E6.0020.0002] # VAI SYLLABLE JOO A58D ; [.37E7.0020.0002] # VAI SYLLABLE NJOO A58E ; [.37E8.0020.0002] # VAI SYLLABLE YOO A58F ; [.37E9.0020.0002] # VAI SYLLABLE KOO A590 ; [.37EA.0020.0002] # VAI SYLLABLE NGGOO A591 ; [.37EB.0020.0002] # VAI SYLLABLE GOO A592 ; [.37EC.0020.0002] # VAI SYLLABLE MOO A593 ; [.37ED.0020.0002] # VAI SYLLABLE NOO A594 ; [.37EE.0020.0002] # VAI SYLLABLE NYOO A595 ; [.37EF.0020.0002] # VAI SYLLABLE U A596 ; [.37F0.0020.0002] # VAI SYLLABLE UN A597 ; [.37F1.0020.0002] # VAI SYLLABLE HU A598 ; [.37F2.0020.0002] # VAI SYLLABLE HUN A599 ; [.37F3.0020.0002] # VAI SYLLABLE WU A59A ; [.37F4.0020.0002] # VAI SYLLABLE WUN A59B ; [.37F5.0020.0002] # VAI SYLLABLE PU A59C ; [.37F6.0020.0002] # VAI SYLLABLE BHU A59D ; [.37F7.0020.0002] # VAI SYLLABLE BU A59E ; [.37F8.0020.0002] # VAI SYLLABLE MBU A59F ; [.37F9.0020.0002] # VAI SYLLABLE KPU A5A0 ; [.37FA.0020.0002] # VAI SYLLABLE MGBU A5A1 ; [.37FB.0020.0002] # VAI SYLLABLE GBU A5A2 ; [.37FC.0020.0002] # VAI SYLLABLE FU A5A3 ; [.37FD.0020.0002] # VAI SYLLABLE VU A5A4 ; [.37FE.0020.0002] # VAI SYLLABLE TU A5A5 ; [.37FF.0020.0002] # VAI SYLLABLE THU A5A6 ; [.3800.0020.0002] # VAI SYLLABLE DHU A5A7 ; [.3801.0020.0002] # VAI SYLLABLE DHHU A5A8 ; [.3802.0020.0002] # VAI SYLLABLE LU A5A9 ; [.3803.0020.0002] # VAI SYLLABLE RU A5AA ; [.3804.0020.0002] # VAI SYLLABLE DU A5AB ; [.3805.0020.0002] # VAI SYLLABLE NDU A5AC ; [.3806.0020.0002] # VAI SYLLABLE SU A5AD ; [.3807.0020.0002] # VAI SYLLABLE SHU A5AE ; [.3808.0020.0002] # VAI SYLLABLE ZU A5AF ; [.3809.0020.0002] # VAI SYLLABLE ZHU A5B0 ; [.380A.0020.0002] # VAI SYLLABLE CU A5B1 ; [.380B.0020.0002] # VAI SYLLABLE JU A5B2 ; [.380C.0020.0002] # VAI SYLLABLE NJU A5B3 ; [.380D.0020.0002] # VAI SYLLABLE YU A5B4 ; [.380E.0020.0002] # VAI SYLLABLE KU A61C ; [.380E.0020.0004][.3865.0020.0004] # VAI SYMBOL KUNG A5B5 ; [.380F.0020.0002] # VAI SYLLABLE NGGU A5B6 ; [.3810.0020.0002] # VAI SYLLABLE GU A5B7 ; [.3811.0020.0002] # VAI SYLLABLE MU A5B8 ; [.3812.0020.0002] # VAI SYLLABLE NU A5B9 ; [.3813.0020.0002] # VAI SYLLABLE NYU A5BA ; [.3814.0020.0002] # VAI SYLLABLE O A5BB ; [.3815.0020.0002] # VAI SYLLABLE ON A5BC ; [.3816.0020.0002] # VAI SYLLABLE NGON A5BD ; [.3817.0020.0002] # VAI SYLLABLE HO A5BE ; [.3818.0020.0002] # VAI SYLLABLE HON A5BF ; [.3819.0020.0002] # VAI SYLLABLE WO A5C0 ; [.381A.0020.0002] # VAI SYLLABLE WON A5C1 ; [.381B.0020.0002] # VAI SYLLABLE PO A5C2 ; [.381C.0020.0002] # VAI SYLLABLE BHO A5C3 ; [.381D.0020.0002] # VAI SYLLABLE BO A5C4 ; [.381E.0020.0002] # VAI SYLLABLE MBO A5C5 ; [.381F.0020.0002] # VAI SYLLABLE KPO A5C6 ; [.3820.0020.0002] # VAI SYLLABLE MGBO A5C7 ; [.3821.0020.0002] # VAI SYLLABLE GBO A5C8 ; [.3822.0020.0002] # VAI SYLLABLE GBON A5C9 ; [.3823.0020.0002] # VAI SYLLABLE FO A5CA ; [.3824.0020.0002] # VAI SYLLABLE VO A5CB ; [.3825.0020.0002] # VAI SYLLABLE TO A61D ; [.3825.0020.0004][.3865.0020.0004] # VAI SYMBOL TONG A5CC ; [.3826.0020.0002] # VAI SYLLABLE THO A5CD ; [.3827.0020.0002] # VAI SYLLABLE DHO A5CE ; [.3828.0020.0002] # VAI SYLLABLE DHHO A5CF ; [.3829.0020.0002] # VAI SYLLABLE LO A5D0 ; [.382A.0020.0002] # VAI SYLLABLE RO A5D1 ; [.382B.0020.0002] # VAI SYLLABLE DO A62B ; [.382B.0020.0004] # VAI SYLLABLE NDOLE DO A61E ; [.382B.0020.0004][.3866.0020.0004] # VAI SYMBOL DO-O A5D2 ; [.382C.0020.0002] # VAI SYLLABLE NDO A5D3 ; [.382D.0020.0002] # VAI SYLLABLE SO A5D4 ; [.382E.0020.0002] # VAI SYLLABLE SHO A5D5 ; [.382F.0020.0002] # VAI SYLLABLE ZO A5D6 ; [.3830.0020.0002] # VAI SYLLABLE ZHO A5D7 ; [.3831.0020.0002] # VAI SYLLABLE CO A5D8 ; [.3832.0020.0002] # VAI SYLLABLE JO A61F ; [.3832.0020.0004][.3865.0020.0004] # VAI SYMBOL JONG A5D9 ; [.3833.0020.0002] # VAI SYLLABLE NJO A5DA ; [.3834.0020.0002] # VAI SYLLABLE YO A5DB ; [.3835.0020.0002] # VAI SYLLABLE KO A5DC ; [.3836.0020.0002] # VAI SYLLABLE NGGO A5DD ; [.3837.0020.0002] # VAI SYLLABLE GO A5DE ; [.3838.0020.0002] # VAI SYLLABLE MO A5DF ; [.3839.0020.0002] # VAI SYLLABLE NO A5E0 ; [.383A.0020.0002] # VAI SYLLABLE NYO A5E1 ; [.383B.0020.0002] # VAI SYLLABLE E A5E2 ; [.383C.0020.0002] # VAI SYLLABLE EN A5E3 ; [.383D.0020.0002] # VAI SYLLABLE NGEN A5E4 ; [.383E.0020.0002] # VAI SYLLABLE HE A5E5 ; [.383F.0020.0002] # VAI SYLLABLE HEN A5E6 ; [.3840.0020.0002] # VAI SYLLABLE WE A5E7 ; [.3841.0020.0002] # VAI SYLLABLE WEN A5E8 ; [.3842.0020.0002] # VAI SYLLABLE PE A5E9 ; [.3843.0020.0002] # VAI SYLLABLE BHE A5EA ; [.3844.0020.0002] # VAI SYLLABLE BE A5EB ; [.3845.0020.0002] # VAI SYLLABLE MBE A5EC ; [.3846.0020.0002] # VAI SYLLABLE KPE A5ED ; [.3847.0020.0002] # VAI SYLLABLE KPEN A5EE ; [.3848.0020.0002] # VAI SYLLABLE MGBE A5EF ; [.3849.0020.0002] # VAI SYLLABLE GBE A5F0 ; [.384A.0020.0002] # VAI SYLLABLE GBEN A5F1 ; [.384B.0020.0002] # VAI SYLLABLE FE A5F2 ; [.384C.0020.0002] # VAI SYLLABLE VE A5F3 ; [.384D.0020.0002] # VAI SYLLABLE TE A5F4 ; [.384E.0020.0002] # VAI SYLLABLE THE A5F5 ; [.384F.0020.0002] # VAI SYLLABLE DHE A5F6 ; [.3850.0020.0002] # VAI SYLLABLE DHHE A5F7 ; [.3851.0020.0002] # VAI SYLLABLE LE A5F8 ; [.3852.0020.0002] # VAI SYLLABLE RE A5F9 ; [.3853.0020.0002] # VAI SYLLABLE DE A5FA ; [.3854.0020.0002] # VAI SYLLABLE NDE A5FB ; [.3855.0020.0002] # VAI SYLLABLE SE A5FC ; [.3856.0020.0002] # VAI SYLLABLE SHE A5FD ; [.3857.0020.0002] # VAI SYLLABLE ZE A5FE ; [.3858.0020.0002] # VAI SYLLABLE ZHE A5FF ; [.3859.0020.0002] # VAI SYLLABLE CE A600 ; [.385A.0020.0002] # VAI SYLLABLE JE A601 ; [.385B.0020.0002] # VAI SYLLABLE NJE A602 ; [.385C.0020.0002] # VAI SYLLABLE YE A603 ; [.385D.0020.0002] # VAI SYLLABLE KE A604 ; [.385E.0020.0002] # VAI SYLLABLE NGGE A605 ; [.385F.0020.0002] # VAI SYLLABLE NGGEN A606 ; [.3860.0020.0002] # VAI SYLLABLE GE A607 ; [.3861.0020.0002] # VAI SYLLABLE GEN A608 ; [.3862.0020.0002] # VAI SYLLABLE ME A609 ; [.3863.0020.0002] # VAI SYLLABLE NE A60A ; [.3864.0020.0002] # VAI SYLLABLE NYE A60B ; [.3865.0020.0002] # VAI SYLLABLE NG A60C ; [.3866.0020.0002] # VAI SYLLABLE LENGTHENER A6A0 ; [.3867.0020.0002] # BAMUM LETTER A A6A1 ; [.3868.0020.0002] # BAMUM LETTER KA A6A2 ; [.3869.0020.0002] # BAMUM LETTER U A6A3 ; [.386A.0020.0002] # BAMUM LETTER KU A6A4 ; [.386B.0020.0002] # BAMUM LETTER EE A6A5 ; [.386C.0020.0002] # BAMUM LETTER REE A6A6 ; [.386D.0020.0002] # BAMUM LETTER TAE A6A7 ; [.386E.0020.0002] # BAMUM LETTER O A6A8 ; [.386F.0020.0002] # BAMUM LETTER NYI A6A9 ; [.3870.0020.0002] # BAMUM LETTER I A6AA ; [.3871.0020.0002] # BAMUM LETTER LA A6AB ; [.3872.0020.0002] # BAMUM LETTER PA A6AC ; [.3873.0020.0002] # BAMUM LETTER RII A6AD ; [.3874.0020.0002] # BAMUM LETTER RIEE A6AE ; [.3875.0020.0002] # BAMUM LETTER LEEEE A6AF ; [.3876.0020.0002] # BAMUM LETTER MEEEE A6B0 ; [.3877.0020.0002] # BAMUM LETTER TAA A6B1 ; [.3878.0020.0002] # BAMUM LETTER NDAA A6B2 ; [.3879.0020.0002] # BAMUM LETTER NJAEM A6B3 ; [.387A.0020.0002] # BAMUM LETTER M A6B4 ; [.387B.0020.0002] # BAMUM LETTER SUU A6B5 ; [.387C.0020.0002] # BAMUM LETTER MU A6B6 ; [.387D.0020.0002] # BAMUM LETTER SHII A6B7 ; [.387E.0020.0002] # BAMUM LETTER SI A6B8 ; [.387F.0020.0002] # BAMUM LETTER SHEUX A6B9 ; [.3880.0020.0002] # BAMUM LETTER SEUX A6BA ; [.3881.0020.0002] # BAMUM LETTER KYEE A6BB ; [.3882.0020.0002] # BAMUM LETTER KET A6BC ; [.3883.0020.0002] # BAMUM LETTER NUAE A6BD ; [.3884.0020.0002] # BAMUM LETTER NU A6BE ; [.3885.0020.0002] # BAMUM LETTER NJUAE A6BF ; [.3886.0020.0002] # BAMUM LETTER YOQ A6C0 ; [.3887.0020.0002] # BAMUM LETTER SHU A6C1 ; [.3888.0020.0002] # BAMUM LETTER YUQ A6C2 ; [.3889.0020.0002] # BAMUM LETTER YA A6C3 ; [.388A.0020.0002] # BAMUM LETTER NSHA A6C4 ; [.388B.0020.0002] # BAMUM LETTER KEUX A6C5 ; [.388C.0020.0002] # BAMUM LETTER PEUX A6C6 ; [.388D.0020.0002] # BAMUM LETTER NJEE A6C7 ; [.388E.0020.0002] # BAMUM LETTER NTEE A6C8 ; [.388F.0020.0002] # BAMUM LETTER PUE A6C9 ; [.3890.0020.0002] # BAMUM LETTER WUE A6CA ; [.3891.0020.0002] # BAMUM LETTER PEE A6CB ; [.3892.0020.0002] # BAMUM LETTER FEE A6CC ; [.3893.0020.0002] # BAMUM LETTER RU A6CD ; [.3894.0020.0002] # BAMUM LETTER LU A6CE ; [.3895.0020.0002] # BAMUM LETTER MI A6CF ; [.3896.0020.0002] # BAMUM LETTER NI A6D0 ; [.3897.0020.0002] # BAMUM LETTER REUX A6D1 ; [.3898.0020.0002] # BAMUM LETTER RAE A6D2 ; [.3899.0020.0002] # BAMUM LETTER KEN A6D3 ; [.389A.0020.0002] # BAMUM LETTER NGKWAEN A6D4 ; [.389B.0020.0002] # BAMUM LETTER NGGA A6D5 ; [.389C.0020.0002] # BAMUM LETTER NGA A6D6 ; [.389D.0020.0002] # BAMUM LETTER SHO A6D7 ; [.389E.0020.0002] # BAMUM LETTER PUAE A6D8 ; [.389F.0020.0002] # BAMUM LETTER FU A6D9 ; [.38A0.0020.0002] # BAMUM LETTER FOM A6DA ; [.38A1.0020.0002] # BAMUM LETTER WA A6DB ; [.38A2.0020.0002] # BAMUM LETTER NA A6DC ; [.38A3.0020.0002] # BAMUM LETTER LI A6DD ; [.38A4.0020.0002] # BAMUM LETTER PI A6DE ; [.38A5.0020.0002] # BAMUM LETTER LOQ A6DF ; [.38A6.0020.0002] # BAMUM LETTER KO A6E0 ; [.38A7.0020.0002] # BAMUM LETTER MBEN A6E1 ; [.38A8.0020.0002] # BAMUM LETTER REN A6E2 ; [.38A9.0020.0002] # BAMUM LETTER MEN A6E3 ; [.38AA.0020.0002] # BAMUM LETTER MA A6E4 ; [.38AB.0020.0002] # BAMUM LETTER TI A6E5 ; [.38AC.0020.0002] # BAMUM LETTER KI A6E6 ; [.38AD.0020.0002] # BAMUM LETTER MO A6E7 ; [.38AE.0020.0002] # BAMUM LETTER MBAA A6E8 ; [.38AF.0020.0002] # BAMUM LETTER TET A6E9 ; [.38B0.0020.0002] # BAMUM LETTER KPA A6EA ; [.38B1.0020.0002] # BAMUM LETTER TEN A6EB ; [.38B2.0020.0002] # BAMUM LETTER NTUU A6EC ; [.38B3.0020.0002] # BAMUM LETTER SAMBA A6ED ; [.38B4.0020.0002] # BAMUM LETTER FAAMAE A6EE ; [.38B5.0020.0002] # BAMUM LETTER KOVUU A6EF ; [.38B6.0020.0002] # BAMUM LETTER KOGHOM 16800 ; [.38B7.0020.0002] # BAMUM LETTER PHASE-A NGKUE MFON 16801 ; [.38B8.0020.0002] # BAMUM LETTER PHASE-A GBIEE FON 16802 ; [.38B9.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE 16803 ; [.38BA.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMBA 16804 ; [.38BB.0020.0002] # BAMUM LETTER PHASE-A NAA MFON 16805 ; [.38BC.0020.0002] # BAMUM LETTER PHASE-A SHUENSHUET 16806 ; [.38BD.0020.0002] # BAMUM LETTER PHASE-A TITA MFON 16807 ; [.38BE.0020.0002] # BAMUM LETTER PHASE-A NZA MFON 16808 ; [.38BF.0020.0002] # BAMUM LETTER PHASE-A SHINDA PA NJI 16809 ; [.38C0.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE 1680A ; [.38C1.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA 1680B ; [.38C2.0020.0002] # BAMUM LETTER PHASE-A MAEMBGBIEE 1680C ; [.38C3.0020.0002] # BAMUM LETTER PHASE-A TU MAEMBA 1680D ; [.38C4.0020.0002] # BAMUM LETTER PHASE-A NGANGU 1680E ; [.38C5.0020.0002] # BAMUM LETTER PHASE-A MAEMVEUX 1680F ; [.38C6.0020.0002] # BAMUM LETTER PHASE-A MANSUAE 16810 ; [.38C7.0020.0002] # BAMUM LETTER PHASE-A MVEUAENGAM 16811 ; [.38C8.0020.0002] # BAMUM LETTER PHASE-A SEUNYAM 16812 ; [.38C9.0020.0002] # BAMUM LETTER PHASE-A NTOQPEN 16813 ; [.38CA.0020.0002] # BAMUM LETTER PHASE-A KEUKEUTNDA 16814 ; [.38CB.0020.0002] # BAMUM LETTER PHASE-A NKINDI 16815 ; [.38CC.0020.0002] # BAMUM LETTER PHASE-A SUU 16816 ; [.38CD.0020.0002] # BAMUM LETTER PHASE-A NGKUENZEUM 16817 ; [.38CE.0020.0002] # BAMUM LETTER PHASE-A LAPAQ 16818 ; [.38CF.0020.0002] # BAMUM LETTER PHASE-A LET KUT 16819 ; [.38D0.0020.0002] # BAMUM LETTER PHASE-A NTAP MFAA 1681A ; [.38D1.0020.0002] # BAMUM LETTER PHASE-A MAEKEUP 1681B ; [.38D2.0020.0002] # BAMUM LETTER PHASE-A PASHAE 1681C ; [.38D3.0020.0002] # BAMUM LETTER PHASE-A GHEUAERAE 1681D ; [.38D4.0020.0002] # BAMUM LETTER PHASE-A PAMSHAE 1681E ; [.38D5.0020.0002] # BAMUM LETTER PHASE-A MON NGGEUAET 1681F ; [.38D6.0020.0002] # BAMUM LETTER PHASE-A NZUN MEUT 16820 ; [.38D7.0020.0002] # BAMUM LETTER PHASE-A U YUQ NAE 16821 ; [.38D8.0020.0002] # BAMUM LETTER PHASE-A GHEUAEGHEUAE 16822 ; [.38D9.0020.0002] # BAMUM LETTER PHASE-A NTAP NTAA 16823 ; [.38DA.0020.0002] # BAMUM LETTER PHASE-A SISA 16824 ; [.38DB.0020.0002] # BAMUM LETTER PHASE-A MGBASA 16825 ; [.38DC.0020.0002] # BAMUM LETTER PHASE-A MEUNJOMNDEUQ 16826 ; [.38DD.0020.0002] # BAMUM LETTER PHASE-A MOOMPUQ 16827 ; [.38DE.0020.0002] # BAMUM LETTER PHASE-A KAFA 16828 ; [.38DF.0020.0002] # BAMUM LETTER PHASE-A PA LEERAEWA 16829 ; [.38E0.0020.0002] # BAMUM LETTER PHASE-A NDA LEERAEWA 1682A ; [.38E1.0020.0002] # BAMUM LETTER PHASE-A PET 1682B ; [.38E2.0020.0002] # BAMUM LETTER PHASE-A MAEMKPEN 1682C ; [.38E3.0020.0002] # BAMUM LETTER PHASE-A NIKA 1682D ; [.38E4.0020.0002] # BAMUM LETTER PHASE-A PUP 1682E ; [.38E5.0020.0002] # BAMUM LETTER PHASE-A TUAEP 1682F ; [.38E6.0020.0002] # BAMUM LETTER PHASE-A LUAEP 16830 ; [.38E7.0020.0002] # BAMUM LETTER PHASE-A SONJAM 16831 ; [.38E8.0020.0002] # BAMUM LETTER PHASE-A TEUTEUWEN 16832 ; [.38E9.0020.0002] # BAMUM LETTER PHASE-A MAENYI 16833 ; [.38EA.0020.0002] # BAMUM LETTER PHASE-A KET 16834 ; [.38EB.0020.0002] # BAMUM LETTER PHASE-A NDAANGGEUAET 16835 ; [.38EC.0020.0002] # BAMUM LETTER PHASE-A KUOQ 16836 ; [.38ED.0020.0002] # BAMUM LETTER PHASE-A MOOMEUT 16837 ; [.38EE.0020.0002] # BAMUM LETTER PHASE-A SHUM 16838 ; [.38EF.0020.0002] # BAMUM LETTER PHASE-A LOMMAE 16839 ; [.38F0.0020.0002] # BAMUM LETTER PHASE-A FIRI 1683A ; [.38F1.0020.0002] # BAMUM LETTER PHASE-A ROM 1683B ; [.38F2.0020.0002] # BAMUM LETTER PHASE-A KPOQ 1683C ; [.38F3.0020.0002] # BAMUM LETTER PHASE-A SOQ 1683D ; [.38F4.0020.0002] # BAMUM LETTER PHASE-A MAP PIEET 1683E ; [.38F5.0020.0002] # BAMUM LETTER PHASE-A SHIRAE 1683F ; [.38F6.0020.0002] # BAMUM LETTER PHASE-A NTAP 16840 ; [.38F7.0020.0002] # BAMUM LETTER PHASE-A SHOQ NSHUT YUM 16841 ; [.38F8.0020.0002] # BAMUM LETTER PHASE-A NYIT MONGKEUAEQ 16842 ; [.38F9.0020.0002] # BAMUM LETTER PHASE-A PAARAE 16843 ; [.38FA.0020.0002] # BAMUM LETTER PHASE-A NKAARAE 16844 ; [.38FB.0020.0002] # BAMUM LETTER PHASE-A UNKNOWN 16845 ; [.38FC.0020.0002] # BAMUM LETTER PHASE-A NGGEN 16846 ; [.38FD.0020.0002] # BAMUM LETTER PHASE-A MAESI 16847 ; [.38FE.0020.0002] # BAMUM LETTER PHASE-A NJAM 16848 ; [.38FF.0020.0002] # BAMUM LETTER PHASE-A MBANYI 16849 ; [.3900.0020.0002] # BAMUM LETTER PHASE-A NYET 1684A ; [.3901.0020.0002] # BAMUM LETTER PHASE-A TEUAEN 1684B ; [.3902.0020.0002] # BAMUM LETTER PHASE-A SOT 1684C ; [.3903.0020.0002] # BAMUM LETTER PHASE-A PAAM 1684D ; [.3904.0020.0002] # BAMUM LETTER PHASE-A NSHIEE 1684E ; [.3905.0020.0002] # BAMUM LETTER PHASE-A MAEM 1684F ; [.3906.0020.0002] # BAMUM LETTER PHASE-A NYI 16850 ; [.3907.0020.0002] # BAMUM LETTER PHASE-A KAQ 16851 ; [.3908.0020.0002] # BAMUM LETTER PHASE-A NSHA 16852 ; [.3909.0020.0002] # BAMUM LETTER PHASE-A VEE 16853 ; [.390A.0020.0002] # BAMUM LETTER PHASE-A LU 16854 ; [.390B.0020.0002] # BAMUM LETTER PHASE-A NEN 16855 ; [.390C.0020.0002] # BAMUM LETTER PHASE-A NAQ 16856 ; [.390D.0020.0002] # BAMUM LETTER PHASE-A MBAQ 16857 ; [.390E.0020.0002] # BAMUM LETTER PHASE-B NSHUET 16858 ; [.390F.0020.0002] # BAMUM LETTER PHASE-B TU MAEMGBIEE 16859 ; [.3910.0020.0002] # BAMUM LETTER PHASE-B SIEE 1685A ; [.3911.0020.0002] # BAMUM LETTER PHASE-B SET TU 1685B ; [.3912.0020.0002] # BAMUM LETTER PHASE-B LOM NTEUM 1685C ; [.3913.0020.0002] # BAMUM LETTER PHASE-B MBA MAELEE 1685D ; [.3914.0020.0002] # BAMUM LETTER PHASE-B KIEEM 1685E ; [.3915.0020.0002] # BAMUM LETTER PHASE-B YEURAE 1685F ; [.3916.0020.0002] # BAMUM LETTER PHASE-B MBAARAE 16860 ; [.3917.0020.0002] # BAMUM LETTER PHASE-B KAM 16861 ; [.3918.0020.0002] # BAMUM LETTER PHASE-B PEESHI 16862 ; [.3919.0020.0002] # BAMUM LETTER PHASE-B YAFU LEERAEWA 16863 ; [.391A.0020.0002] # BAMUM LETTER PHASE-B LAM NSHUT NYAM 16864 ; [.391B.0020.0002] # BAMUM LETTER PHASE-B NTIEE SHEUOQ 16865 ; [.391C.0020.0002] # BAMUM LETTER PHASE-B NDU NJAA 16866 ; [.391D.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEUAEM 16867 ; [.391E.0020.0002] # BAMUM LETTER PHASE-B PIT 16868 ; [.391F.0020.0002] # BAMUM LETTER PHASE-B TU NSIEE 16869 ; [.3920.0020.0002] # BAMUM LETTER PHASE-B SHET NJAQ 1686A ; [.3921.0020.0002] # BAMUM LETTER PHASE-B SHEUAEQTU 1686B ; [.3922.0020.0002] # BAMUM LETTER PHASE-B MFON TEUAEQ 1686C ; [.3923.0020.0002] # BAMUM LETTER PHASE-B MBIT MBAAKET 1686D ; [.3924.0020.0002] # BAMUM LETTER PHASE-B NYI NTEUM 1686E ; [.3925.0020.0002] # BAMUM LETTER PHASE-B KEUPUQ 1686F ; [.3926.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEN 16870 ; [.3927.0020.0002] # BAMUM LETTER PHASE-B KEUYEUX 16871 ; [.3928.0020.0002] # BAMUM LETTER PHASE-B LAANAE 16872 ; [.3929.0020.0002] # BAMUM LETTER PHASE-B PARUM 16873 ; [.392A.0020.0002] # BAMUM LETTER PHASE-B VEUM 16874 ; [.392B.0020.0002] # BAMUM LETTER PHASE-B NGKINDI MVOP 16875 ; [.392C.0020.0002] # BAMUM LETTER PHASE-B NGGEU MBU 16876 ; [.392D.0020.0002] # BAMUM LETTER PHASE-B WUAET 16877 ; [.392E.0020.0002] # BAMUM LETTER PHASE-B SAKEUAE 16878 ; [.392F.0020.0002] # BAMUM LETTER PHASE-B TAAM 16879 ; [.3930.0020.0002] # BAMUM LETTER PHASE-B MEUQ 1687A ; [.3931.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ 1687B ; [.3932.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ LARGE 1687C ; [.3933.0020.0002] # BAMUM LETTER PHASE-B MFIYAQ 1687D ; [.3934.0020.0002] # BAMUM LETTER PHASE-B SUE 1687E ; [.3935.0020.0002] # BAMUM LETTER PHASE-B MBEURI 1687F ; [.3936.0020.0002] # BAMUM LETTER PHASE-B MONTIEEN 16880 ; [.3937.0020.0002] # BAMUM LETTER PHASE-B NYAEMAE 16881 ; [.3938.0020.0002] # BAMUM LETTER PHASE-B PUNGAAM 16882 ; [.3939.0020.0002] # BAMUM LETTER PHASE-B MEUT NGGEET 16883 ; [.393A.0020.0002] # BAMUM LETTER PHASE-B FEUX 16884 ; [.393B.0020.0002] # BAMUM LETTER PHASE-B MBUOQ 16885 ; [.393C.0020.0002] # BAMUM LETTER PHASE-B FEE 16886 ; [.393D.0020.0002] # BAMUM LETTER PHASE-B KEUAEM 16887 ; [.393E.0020.0002] # BAMUM LETTER PHASE-B MA NJEUAENA 16888 ; [.393F.0020.0002] # BAMUM LETTER PHASE-B MA NJUQA 16889 ; [.3940.0020.0002] # BAMUM LETTER PHASE-B LET 1688A ; [.3941.0020.0002] # BAMUM LETTER PHASE-B NGGAAM 1688B ; [.3942.0020.0002] # BAMUM LETTER PHASE-B NSEN 1688C ; [.3943.0020.0002] # BAMUM LETTER PHASE-B MA 1688D ; [.3944.0020.0002] # BAMUM LETTER PHASE-B KIQ 1688E ; [.3945.0020.0002] # BAMUM LETTER PHASE-B NGOM 1688F ; [.3946.0020.0002] # BAMUM LETTER PHASE-C NGKUE MAEMBA 16890 ; [.3947.0020.0002] # BAMUM LETTER PHASE-C NZA 16891 ; [.3948.0020.0002] # BAMUM LETTER PHASE-C YUM 16892 ; [.3949.0020.0002] # BAMUM LETTER PHASE-C WANGKUOQ 16893 ; [.394A.0020.0002] # BAMUM LETTER PHASE-C NGGEN 16894 ; [.394B.0020.0002] # BAMUM LETTER PHASE-C NDEUAEREE 16895 ; [.394C.0020.0002] # BAMUM LETTER PHASE-C NGKAQ 16896 ; [.394D.0020.0002] # BAMUM LETTER PHASE-C GHARAE 16897 ; [.394E.0020.0002] # BAMUM LETTER PHASE-C MBEEKEET 16898 ; [.394F.0020.0002] # BAMUM LETTER PHASE-C GBAYI 16899 ; [.3950.0020.0002] # BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN 1689A ; [.3951.0020.0002] # BAMUM LETTER PHASE-C NTU MBIT 1689B ; [.3952.0020.0002] # BAMUM LETTER PHASE-C MBEUM 1689C ; [.3953.0020.0002] # BAMUM LETTER PHASE-C PIRIEEN 1689D ; [.3954.0020.0002] # BAMUM LETTER PHASE-C NDOMBU 1689E ; [.3955.0020.0002] # BAMUM LETTER PHASE-C MBAA CABBAGE-TREE 1689F ; [.3956.0020.0002] # BAMUM LETTER PHASE-C KEUSHEUAEP 168A0 ; [.3957.0020.0002] # BAMUM LETTER PHASE-C GHAP 168A1 ; [.3958.0020.0002] # BAMUM LETTER PHASE-C KEUKAQ 168A2 ; [.3959.0020.0002] # BAMUM LETTER PHASE-C YU MUOMAE 168A3 ; [.395A.0020.0002] # BAMUM LETTER PHASE-C NZEUM 168A4 ; [.395B.0020.0002] # BAMUM LETTER PHASE-C MBUE 168A5 ; [.395C.0020.0002] # BAMUM LETTER PHASE-C NSEUAEN 168A6 ; [.395D.0020.0002] # BAMUM LETTER PHASE-C MBIT 168A7 ; [.395E.0020.0002] # BAMUM LETTER PHASE-C YEUQ 168A8 ; [.395F.0020.0002] # BAMUM LETTER PHASE-C KPARAQ 168A9 ; [.3960.0020.0002] # BAMUM LETTER PHASE-C KAA 168AA ; [.3961.0020.0002] # BAMUM LETTER PHASE-C SEUX 168AB ; [.3962.0020.0002] # BAMUM LETTER PHASE-C NDIDA 168AC ; [.3963.0020.0002] # BAMUM LETTER PHASE-C TAASHAE 168AD ; [.3964.0020.0002] # BAMUM LETTER PHASE-C NJUEQ 168AE ; [.3965.0020.0002] # BAMUM LETTER PHASE-C TITA YUE 168AF ; [.3966.0020.0002] # BAMUM LETTER PHASE-C SUAET 168B0 ; [.3967.0020.0002] # BAMUM LETTER PHASE-C NGGUAEN NYAM 168B1 ; [.3968.0020.0002] # BAMUM LETTER PHASE-C VEUX 168B2 ; [.3969.0020.0002] # BAMUM LETTER PHASE-C NANSANAQ 168B3 ; [.396A.0020.0002] # BAMUM LETTER PHASE-C MA KEUAERI 168B4 ; [.396B.0020.0002] # BAMUM LETTER PHASE-C NTAA 168B5 ; [.396C.0020.0002] # BAMUM LETTER PHASE-C NGGUON 168B6 ; [.396D.0020.0002] # BAMUM LETTER PHASE-C LAP 168B7 ; [.396E.0020.0002] # BAMUM LETTER PHASE-C MBIRIEEN 168B8 ; [.396F.0020.0002] # BAMUM LETTER PHASE-C MGBASAQ 168B9 ; [.3970.0020.0002] # BAMUM LETTER PHASE-C NTEUNGBA 168BA ; [.3971.0020.0002] # BAMUM LETTER PHASE-C TEUTEUX 168BB ; [.3972.0020.0002] # BAMUM LETTER PHASE-C NGGUM 168BC ; [.3973.0020.0002] # BAMUM LETTER PHASE-C FUE 168BD ; [.3974.0020.0002] # BAMUM LETTER PHASE-C NDEUT 168BE ; [.3975.0020.0002] # BAMUM LETTER PHASE-C NSA 168BF ; [.3976.0020.0002] # BAMUM LETTER PHASE-C NSHAQ 168C0 ; [.3977.0020.0002] # BAMUM LETTER PHASE-C BUNG 168C1 ; [.3978.0020.0002] # BAMUM LETTER PHASE-C VEUAEPEN 168C2 ; [.3979.0020.0002] # BAMUM LETTER PHASE-C MBERAE 168C3 ; [.397A.0020.0002] # BAMUM LETTER PHASE-C RU 168C4 ; [.397B.0020.0002] # BAMUM LETTER PHASE-C NJAEM 168C5 ; [.397C.0020.0002] # BAMUM LETTER PHASE-C LAM 168C6 ; [.397D.0020.0002] # BAMUM LETTER PHASE-C TITUAEP 168C7 ; [.397E.0020.0002] # BAMUM LETTER PHASE-C NSUOT NGOM 168C8 ; [.397F.0020.0002] # BAMUM LETTER PHASE-C NJEEEE 168C9 ; [.3980.0020.0002] # BAMUM LETTER PHASE-C KET 168CA ; [.3981.0020.0002] # BAMUM LETTER PHASE-C NGGU 168CB ; [.3982.0020.0002] # BAMUM LETTER PHASE-C MAESI 168CC ; [.3983.0020.0002] # BAMUM LETTER PHASE-C MBUAEM 168CD ; [.3984.0020.0002] # BAMUM LETTER PHASE-C LU 168CE ; [.3985.0020.0002] # BAMUM LETTER PHASE-C KUT 168CF ; [.3986.0020.0002] # BAMUM LETTER PHASE-C NJAM 168D0 ; [.3987.0020.0002] # BAMUM LETTER PHASE-C NGOM 168D1 ; [.3988.0020.0002] # BAMUM LETTER PHASE-C WUP 168D2 ; [.3989.0020.0002] # BAMUM LETTER PHASE-C NGGUEET 168D3 ; [.398A.0020.0002] # BAMUM LETTER PHASE-C NSOM 168D4 ; [.398B.0020.0002] # BAMUM LETTER PHASE-C NTEN 168D5 ; [.398C.0020.0002] # BAMUM LETTER PHASE-C KUOP NKAARAE 168D6 ; [.398D.0020.0002] # BAMUM LETTER PHASE-C NSUN 168D7 ; [.398E.0020.0002] # BAMUM LETTER PHASE-C NDAM 168D8 ; [.398F.0020.0002] # BAMUM LETTER PHASE-C MA NSIEE 168D9 ; [.3990.0020.0002] # BAMUM LETTER PHASE-C YAA 168DA ; [.3991.0020.0002] # BAMUM LETTER PHASE-C NDAP 168DB ; [.3992.0020.0002] # BAMUM LETTER PHASE-C SHUEQ 168DC ; [.3993.0020.0002] # BAMUM LETTER PHASE-C SETFON 168DD ; [.3994.0020.0002] # BAMUM LETTER PHASE-C MBI 168DE ; [.3995.0020.0002] # BAMUM LETTER PHASE-C MAEMBA 168DF ; [.3996.0020.0002] # BAMUM LETTER PHASE-C MBANYI 168E0 ; [.3997.0020.0002] # BAMUM LETTER PHASE-C KEUSEUX 168E1 ; [.3998.0020.0002] # BAMUM LETTER PHASE-C MBEUX 168E2 ; [.3999.0020.0002] # BAMUM LETTER PHASE-C KEUM 168E3 ; [.399A.0020.0002] # BAMUM LETTER PHASE-C MBAA PICKET 168E4 ; [.399B.0020.0002] # BAMUM LETTER PHASE-C YUWOQ 168E5 ; [.399C.0020.0002] # BAMUM LETTER PHASE-C NJEUX 168E6 ; [.399D.0020.0002] # BAMUM LETTER PHASE-C MIEE 168E7 ; [.399E.0020.0002] # BAMUM LETTER PHASE-C MUAE 168E8 ; [.399F.0020.0002] # BAMUM LETTER PHASE-C SHIQ 168E9 ; [.39A0.0020.0002] # BAMUM LETTER PHASE-C KEN LAW 168EA ; [.39A1.0020.0002] # BAMUM LETTER PHASE-C KEN FATIGUE 168EB ; [.39A2.0020.0002] # BAMUM LETTER PHASE-C NGAQ 168EC ; [.39A3.0020.0002] # BAMUM LETTER PHASE-C NAQ 168ED ; [.39A4.0020.0002] # BAMUM LETTER PHASE-C LIQ 168EE ; [.39A5.0020.0002] # BAMUM LETTER PHASE-C PIN 168EF ; [.39A6.0020.0002] # BAMUM LETTER PHASE-C PEN 168F0 ; [.39A7.0020.0002] # BAMUM LETTER PHASE-C TET 168F1 ; [.39A8.0020.0002] # BAMUM LETTER PHASE-D MBUO 168F2 ; [.39A9.0020.0002] # BAMUM LETTER PHASE-D WAP 168F3 ; [.39AA.0020.0002] # BAMUM LETTER PHASE-D NJI 168F4 ; [.39AB.0020.0002] # BAMUM LETTER PHASE-D MFON 168F5 ; [.39AC.0020.0002] # BAMUM LETTER PHASE-D NJIEE 168F6 ; [.39AD.0020.0002] # BAMUM LETTER PHASE-D LIEE 168F7 ; [.39AE.0020.0002] # BAMUM LETTER PHASE-D NJEUT 168F8 ; [.39AF.0020.0002] # BAMUM LETTER PHASE-D NSHEE 168F9 ; [.39B0.0020.0002] # BAMUM LETTER PHASE-D NGGAAMAE 168FA ; [.39B1.0020.0002] # BAMUM LETTER PHASE-D NYAM 168FB ; [.39B2.0020.0002] # BAMUM LETTER PHASE-D WUAEN 168FC ; [.39B3.0020.0002] # BAMUM LETTER PHASE-D NGKUN 168FD ; [.39B4.0020.0002] # BAMUM LETTER PHASE-D SHEE 168FE ; [.39B5.0020.0002] # BAMUM LETTER PHASE-D NGKAP 168FF ; [.39B6.0020.0002] # BAMUM LETTER PHASE-D KEUAETMEUN 16900 ; [.39B7.0020.0002] # BAMUM LETTER PHASE-D TEUT 16901 ; [.39B8.0020.0002] # BAMUM LETTER PHASE-D SHEUAE 16902 ; [.39B9.0020.0002] # BAMUM LETTER PHASE-D NJAP 16903 ; [.39BA.0020.0002] # BAMUM LETTER PHASE-D SUE 16904 ; [.39BB.0020.0002] # BAMUM LETTER PHASE-D KET 16905 ; [.39BC.0020.0002] # BAMUM LETTER PHASE-D YAEMMAE 16906 ; [.39BD.0020.0002] # BAMUM LETTER PHASE-D KUOM 16907 ; [.39BE.0020.0002] # BAMUM LETTER PHASE-D SAP 16908 ; [.39BF.0020.0002] # BAMUM LETTER PHASE-D MFEUT 16909 ; [.39C0.0020.0002] # BAMUM LETTER PHASE-D NDEUX 1690A ; [.39C1.0020.0002] # BAMUM LETTER PHASE-D MALEERI 1690B ; [.39C2.0020.0002] # BAMUM LETTER PHASE-D MEUT 1690C ; [.39C3.0020.0002] # BAMUM LETTER PHASE-D SEUAEQ 1690D ; [.39C4.0020.0002] # BAMUM LETTER PHASE-D YEN 1690E ; [.39C5.0020.0002] # BAMUM LETTER PHASE-D NJEUAEM 1690F ; [.39C6.0020.0002] # BAMUM LETTER PHASE-D KEUOT MBUAE 16910 ; [.39C7.0020.0002] # BAMUM LETTER PHASE-D NGKEURI 16911 ; [.39C8.0020.0002] # BAMUM LETTER PHASE-D TU 16912 ; [.39C9.0020.0002] # BAMUM LETTER PHASE-D GHAA 16913 ; [.39CA.0020.0002] # BAMUM LETTER PHASE-D NGKYEE 16914 ; [.39CB.0020.0002] # BAMUM LETTER PHASE-D FEUFEUAET 16915 ; [.39CC.0020.0002] # BAMUM LETTER PHASE-D NDEE 16916 ; [.39CD.0020.0002] # BAMUM LETTER PHASE-D MGBOFUM 16917 ; [.39CE.0020.0002] # BAMUM LETTER PHASE-D LEUAEP 16918 ; [.39CF.0020.0002] # BAMUM LETTER PHASE-D NDON 16919 ; [.39D0.0020.0002] # BAMUM LETTER PHASE-D MONI 1691A ; [.39D1.0020.0002] # BAMUM LETTER PHASE-D MGBEUN 1691B ; [.39D2.0020.0002] # BAMUM LETTER PHASE-D PUUT 1691C ; [.39D3.0020.0002] # BAMUM LETTER PHASE-D MGBIEE 1691D ; [.39D4.0020.0002] # BAMUM LETTER PHASE-D MFO 1691E ; [.39D5.0020.0002] # BAMUM LETTER PHASE-D LUM 1691F ; [.39D6.0020.0002] # BAMUM LETTER PHASE-D NSIEEP 16920 ; [.39D7.0020.0002] # BAMUM LETTER PHASE-D MBAA 16921 ; [.39D8.0020.0002] # BAMUM LETTER PHASE-D KWAET 16922 ; [.39D9.0020.0002] # BAMUM LETTER PHASE-D NYET 16923 ; [.39DA.0020.0002] # BAMUM LETTER PHASE-D TEUAEN 16924 ; [.39DB.0020.0002] # BAMUM LETTER PHASE-D SOT 16925 ; [.39DC.0020.0002] # BAMUM LETTER PHASE-D YUWOQ 16926 ; [.39DD.0020.0002] # BAMUM LETTER PHASE-D KEUM 16927 ; [.39DE.0020.0002] # BAMUM LETTER PHASE-D RAEM 16928 ; [.39DF.0020.0002] # BAMUM LETTER PHASE-D TEEEE 16929 ; [.39E0.0020.0002] # BAMUM LETTER PHASE-D NGKEUAEQ 1692A ; [.39E1.0020.0002] # BAMUM LETTER PHASE-D MFEUAE 1692B ; [.39E2.0020.0002] # BAMUM LETTER PHASE-D NSIEET 1692C ; [.39E3.0020.0002] # BAMUM LETTER PHASE-D KEUP 1692D ; [.39E4.0020.0002] # BAMUM LETTER PHASE-D PIP 1692E ; [.39E5.0020.0002] # BAMUM LETTER PHASE-D PEUTAE 1692F ; [.39E6.0020.0002] # BAMUM LETTER PHASE-D NYUE 16930 ; [.39E7.0020.0002] # BAMUM LETTER PHASE-D LET 16931 ; [.39E8.0020.0002] # BAMUM LETTER PHASE-D NGGAAM 16932 ; [.39E9.0020.0002] # BAMUM LETTER PHASE-D MFIEE 16933 ; [.39EA.0020.0002] # BAMUM LETTER PHASE-D NGGWAEN 16934 ; [.39EB.0020.0002] # BAMUM LETTER PHASE-D YUOM 16935 ; [.39EC.0020.0002] # BAMUM LETTER PHASE-D PAP 16936 ; [.39ED.0020.0002] # BAMUM LETTER PHASE-D YUOP 16937 ; [.39EE.0020.0002] # BAMUM LETTER PHASE-D NDAM 16938 ; [.39EF.0020.0002] # BAMUM LETTER PHASE-D NTEUM 16939 ; [.39F0.0020.0002] # BAMUM LETTER PHASE-D SUAE 1693A ; [.39F1.0020.0002] # BAMUM LETTER PHASE-D KUN 1693B ; [.39F2.0020.0002] # BAMUM LETTER PHASE-D NGGEUX 1693C ; [.39F3.0020.0002] # BAMUM LETTER PHASE-D NGKIEE 1693D ; [.39F4.0020.0002] # BAMUM LETTER PHASE-D TUOT 1693E ; [.39F5.0020.0002] # BAMUM LETTER PHASE-D MEUN 1693F ; [.39F6.0020.0002] # BAMUM LETTER PHASE-D KUQ 16940 ; [.39F7.0020.0002] # BAMUM LETTER PHASE-D NSUM 16941 ; [.39F8.0020.0002] # BAMUM LETTER PHASE-D TEUN 16942 ; [.39F9.0020.0002] # BAMUM LETTER PHASE-D MAENJET 16943 ; [.39FA.0020.0002] # BAMUM LETTER PHASE-D NGGAP 16944 ; [.39FB.0020.0002] # BAMUM LETTER PHASE-D LEUM 16945 ; [.39FC.0020.0002] # BAMUM LETTER PHASE-D NGGUOM 16946 ; [.39FD.0020.0002] # BAMUM LETTER PHASE-D NSHUT 16947 ; [.39FE.0020.0002] # BAMUM LETTER PHASE-D NJUEQ 16948 ; [.39FF.0020.0002] # BAMUM LETTER PHASE-D GHEUAE 16949 ; [.3A00.0020.0002] # BAMUM LETTER PHASE-D KU 1694A ; [.3A01.0020.0002] # BAMUM LETTER PHASE-D REN OLD 1694B ; [.3A02.0020.0002] # BAMUM LETTER PHASE-D TAE 1694C ; [.3A03.0020.0002] # BAMUM LETTER PHASE-D TOQ 1694D ; [.3A04.0020.0002] # BAMUM LETTER PHASE-D NYI 1694E ; [.3A05.0020.0002] # BAMUM LETTER PHASE-D RII 1694F ; [.3A06.0020.0002] # BAMUM LETTER PHASE-D LEEEE 16950 ; [.3A07.0020.0002] # BAMUM LETTER PHASE-D MEEEE 16951 ; [.3A08.0020.0002] # BAMUM LETTER PHASE-D M 16952 ; [.3A09.0020.0002] # BAMUM LETTER PHASE-D SUU 16953 ; [.3A0A.0020.0002] # BAMUM LETTER PHASE-D MU 16954 ; [.3A0B.0020.0002] # BAMUM LETTER PHASE-D SHII 16955 ; [.3A0C.0020.0002] # BAMUM LETTER PHASE-D SHEUX 16956 ; [.3A0D.0020.0002] # BAMUM LETTER PHASE-D KYEE 16957 ; [.3A0E.0020.0002] # BAMUM LETTER PHASE-D NU 16958 ; [.3A0F.0020.0002] # BAMUM LETTER PHASE-D SHU 16959 ; [.3A10.0020.0002] # BAMUM LETTER PHASE-D NTEE 1695A ; [.3A11.0020.0002] # BAMUM LETTER PHASE-D PEE 1695B ; [.3A12.0020.0002] # BAMUM LETTER PHASE-D NI 1695C ; [.3A13.0020.0002] # BAMUM LETTER PHASE-D SHOQ 1695D ; [.3A14.0020.0002] # BAMUM LETTER PHASE-D PUQ 1695E ; [.3A15.0020.0002] # BAMUM LETTER PHASE-D MVOP 1695F ; [.3A16.0020.0002] # BAMUM LETTER PHASE-D LOQ 16960 ; [.3A17.0020.0002] # BAMUM LETTER PHASE-D REN MUCH 16961 ; [.3A18.0020.0002] # BAMUM LETTER PHASE-D TI 16962 ; [.3A19.0020.0002] # BAMUM LETTER PHASE-D NTUU 16963 ; [.3A1A.0020.0002] # BAMUM LETTER PHASE-D MBAA SEVEN 16964 ; [.3A1B.0020.0002] # BAMUM LETTER PHASE-D SAQ 16965 ; [.3A1C.0020.0002] # BAMUM LETTER PHASE-D FAA 16966 ; [.3A1D.0020.0002] # BAMUM LETTER PHASE-E NDAP 16967 ; [.3A1E.0020.0002] # BAMUM LETTER PHASE-E TOON 16968 ; [.3A1F.0020.0002] # BAMUM LETTER PHASE-E MBEUM 16969 ; [.3A20.0020.0002] # BAMUM LETTER PHASE-E LAP 1696A ; [.3A21.0020.0002] # BAMUM LETTER PHASE-E VOM 1696B ; [.3A22.0020.0002] # BAMUM LETTER PHASE-E LOON 1696C ; [.3A23.0020.0002] # BAMUM LETTER PHASE-E PAA 1696D ; [.3A24.0020.0002] # BAMUM LETTER PHASE-E SOM 1696E ; [.3A25.0020.0002] # BAMUM LETTER PHASE-E RAQ 1696F ; [.3A26.0020.0002] # BAMUM LETTER PHASE-E NSHUOP 16970 ; [.3A27.0020.0002] # BAMUM LETTER PHASE-E NDUN 16971 ; [.3A28.0020.0002] # BAMUM LETTER PHASE-E PUAE 16972 ; [.3A29.0020.0002] # BAMUM LETTER PHASE-E TAM 16973 ; [.3A2A.0020.0002] # BAMUM LETTER PHASE-E NGKA 16974 ; [.3A2B.0020.0002] # BAMUM LETTER PHASE-E KPEUX 16975 ; [.3A2C.0020.0002] # BAMUM LETTER PHASE-E WUO 16976 ; [.3A2D.0020.0002] # BAMUM LETTER PHASE-E SEE 16977 ; [.3A2E.0020.0002] # BAMUM LETTER PHASE-E NGGEUAET 16978 ; [.3A2F.0020.0002] # BAMUM LETTER PHASE-E PAAM 16979 ; [.3A30.0020.0002] # BAMUM LETTER PHASE-E TOO 1697A ; [.3A31.0020.0002] # BAMUM LETTER PHASE-E KUOP 1697B ; [.3A32.0020.0002] # BAMUM LETTER PHASE-E LOM 1697C ; [.3A33.0020.0002] # BAMUM LETTER PHASE-E NSHIEE 1697D ; [.3A34.0020.0002] # BAMUM LETTER PHASE-E NGOP 1697E ; [.3A35.0020.0002] # BAMUM LETTER PHASE-E MAEM 1697F ; [.3A36.0020.0002] # BAMUM LETTER PHASE-E NGKEUX 16980 ; [.3A37.0020.0002] # BAMUM LETTER PHASE-E NGOQ 16981 ; [.3A38.0020.0002] # BAMUM LETTER PHASE-E NSHUE 16982 ; [.3A39.0020.0002] # BAMUM LETTER PHASE-E RIMGBA 16983 ; [.3A3A.0020.0002] # BAMUM LETTER PHASE-E NJEUX 16984 ; [.3A3B.0020.0002] # BAMUM LETTER PHASE-E PEEM 16985 ; [.3A3C.0020.0002] # BAMUM LETTER PHASE-E SAA 16986 ; [.3A3D.0020.0002] # BAMUM LETTER PHASE-E NGGURAE 16987 ; [.3A3E.0020.0002] # BAMUM LETTER PHASE-E MGBA 16988 ; [.3A3F.0020.0002] # BAMUM LETTER PHASE-E GHEUX 16989 ; [.3A40.0020.0002] # BAMUM LETTER PHASE-E NGKEUAEM 1698A ; [.3A41.0020.0002] # BAMUM LETTER PHASE-E NJAEMLI 1698B ; [.3A42.0020.0002] # BAMUM LETTER PHASE-E MAP 1698C ; [.3A43.0020.0002] # BAMUM LETTER PHASE-E LOOT 1698D ; [.3A44.0020.0002] # BAMUM LETTER PHASE-E NGGEEEE 1698E ; [.3A45.0020.0002] # BAMUM LETTER PHASE-E NDIQ 1698F ; [.3A46.0020.0002] # BAMUM LETTER PHASE-E TAEN NTEUM 16990 ; [.3A47.0020.0002] # BAMUM LETTER PHASE-E SET 16991 ; [.3A48.0020.0002] # BAMUM LETTER PHASE-E PUM 16992 ; [.3A49.0020.0002] # BAMUM LETTER PHASE-E NDAA SOFTNESS 16993 ; [.3A4A.0020.0002] # BAMUM LETTER PHASE-E NGGUAESHAE NYAM 16994 ; [.3A4B.0020.0002] # BAMUM LETTER PHASE-E YIEE 16995 ; [.3A4C.0020.0002] # BAMUM LETTER PHASE-E GHEUN 16996 ; [.3A4D.0020.0002] # BAMUM LETTER PHASE-E TUAE 16997 ; [.3A4E.0020.0002] # BAMUM LETTER PHASE-E YEUAE 16998 ; [.3A4F.0020.0002] # BAMUM LETTER PHASE-E PO 16999 ; [.3A50.0020.0002] # BAMUM LETTER PHASE-E TUMAE 1699A ; [.3A51.0020.0002] # BAMUM LETTER PHASE-E KEUAE 1699B ; [.3A52.0020.0002] # BAMUM LETTER PHASE-E SUAEN 1699C ; [.3A53.0020.0002] # BAMUM LETTER PHASE-E TEUAEQ 1699D ; [.3A54.0020.0002] # BAMUM LETTER PHASE-E VEUAE 1699E ; [.3A55.0020.0002] # BAMUM LETTER PHASE-E WEUX 1699F ; [.3A56.0020.0002] # BAMUM LETTER PHASE-E LAAM 169A0 ; [.3A57.0020.0002] # BAMUM LETTER PHASE-E PU 169A1 ; [.3A58.0020.0002] # BAMUM LETTER PHASE-E TAAQ 169A2 ; [.3A59.0020.0002] # BAMUM LETTER PHASE-E GHAAMAE 169A3 ; [.3A5A.0020.0002] # BAMUM LETTER PHASE-E NGEUREUT 169A4 ; [.3A5B.0020.0002] # BAMUM LETTER PHASE-E SHEUAEQ 169A5 ; [.3A5C.0020.0002] # BAMUM LETTER PHASE-E MGBEN 169A6 ; [.3A5D.0020.0002] # BAMUM LETTER PHASE-E MBEE 169A7 ; [.3A5E.0020.0002] # BAMUM LETTER PHASE-E NZAQ 169A8 ; [.3A5F.0020.0002] # BAMUM LETTER PHASE-E NKOM 169A9 ; [.3A60.0020.0002] # BAMUM LETTER PHASE-E GBET 169AA ; [.3A61.0020.0002] # BAMUM LETTER PHASE-E TUM 169AB ; [.3A62.0020.0002] # BAMUM LETTER PHASE-E KUET 169AC ; [.3A63.0020.0002] # BAMUM LETTER PHASE-E YAP 169AD ; [.3A64.0020.0002] # BAMUM LETTER PHASE-E NYI CLEAVER 169AE ; [.3A65.0020.0002] # BAMUM LETTER PHASE-E YIT 169AF ; [.3A66.0020.0002] # BAMUM LETTER PHASE-E MFEUQ 169B0 ; [.3A67.0020.0002] # BAMUM LETTER PHASE-E NDIAQ 169B1 ; [.3A68.0020.0002] # BAMUM LETTER PHASE-E PIEEQ 169B2 ; [.3A69.0020.0002] # BAMUM LETTER PHASE-E YUEQ 169B3 ; [.3A6A.0020.0002] # BAMUM LETTER PHASE-E LEUAEM 169B4 ; [.3A6B.0020.0002] # BAMUM LETTER PHASE-E FUE 169B5 ; [.3A6C.0020.0002] # BAMUM LETTER PHASE-E GBEUX 169B6 ; [.3A6D.0020.0002] # BAMUM LETTER PHASE-E NGKUP 169B7 ; [.3A6E.0020.0002] # BAMUM LETTER PHASE-E KET 169B8 ; [.3A6F.0020.0002] # BAMUM LETTER PHASE-E MAE 169B9 ; [.3A70.0020.0002] # BAMUM LETTER PHASE-E NGKAAMI 169BA ; [.3A71.0020.0002] # BAMUM LETTER PHASE-E GHET 169BB ; [.3A72.0020.0002] # BAMUM LETTER PHASE-E FA 169BC ; [.3A73.0020.0002] # BAMUM LETTER PHASE-E NTUM 169BD ; [.3A74.0020.0002] # BAMUM LETTER PHASE-E PEUT 169BE ; [.3A75.0020.0002] # BAMUM LETTER PHASE-E YEUM 169BF ; [.3A76.0020.0002] # BAMUM LETTER PHASE-E NGGEUAE 169C0 ; [.3A77.0020.0002] # BAMUM LETTER PHASE-E NYI BETWEEN 169C1 ; [.3A78.0020.0002] # BAMUM LETTER PHASE-E NZUQ 169C2 ; [.3A79.0020.0002] # BAMUM LETTER PHASE-E POON 169C3 ; [.3A7A.0020.0002] # BAMUM LETTER PHASE-E MIEE 169C4 ; [.3A7B.0020.0002] # BAMUM LETTER PHASE-E FUET 169C5 ; [.3A7C.0020.0002] # BAMUM LETTER PHASE-E NAE 169C6 ; [.3A7D.0020.0002] # BAMUM LETTER PHASE-E MUAE 169C7 ; [.3A7E.0020.0002] # BAMUM LETTER PHASE-E GHEUAE 169C8 ; [.3A7F.0020.0002] # BAMUM LETTER PHASE-E FU I 169C9 ; [.3A80.0020.0002] # BAMUM LETTER PHASE-E MVI 169CA ; [.3A81.0020.0002] # BAMUM LETTER PHASE-E PUAQ 169CB ; [.3A82.0020.0002] # BAMUM LETTER PHASE-E NGKUM 169CC ; [.3A83.0020.0002] # BAMUM LETTER PHASE-E KUT 169CD ; [.3A84.0020.0002] # BAMUM LETTER PHASE-E PIET 169CE ; [.3A85.0020.0002] # BAMUM LETTER PHASE-E NTAP 169CF ; [.3A86.0020.0002] # BAMUM LETTER PHASE-E YEUAET 169D0 ; [.3A87.0020.0002] # BAMUM LETTER PHASE-E NGGUP 169D1 ; [.3A88.0020.0002] # BAMUM LETTER PHASE-E PA PEOPLE 169D2 ; [.3A89.0020.0002] # BAMUM LETTER PHASE-E FU CALL 169D3 ; [.3A8A.0020.0002] # BAMUM LETTER PHASE-E FOM 169D4 ; [.3A8B.0020.0002] # BAMUM LETTER PHASE-E NJEE 169D5 ; [.3A8C.0020.0002] # BAMUM LETTER PHASE-E A 169D6 ; [.3A8D.0020.0002] # BAMUM LETTER PHASE-E TOQ 169D7 ; [.3A8E.0020.0002] # BAMUM LETTER PHASE-E O 169D8 ; [.3A8F.0020.0002] # BAMUM LETTER PHASE-E I 169D9 ; [.3A90.0020.0002] # BAMUM LETTER PHASE-E LAQ 169DA ; [.3A91.0020.0002] # BAMUM LETTER PHASE-E PA PLURAL 169DB ; [.3A92.0020.0002] # BAMUM LETTER PHASE-E TAA 169DC ; [.3A93.0020.0002] # BAMUM LETTER PHASE-E TAQ 169DD ; [.3A94.0020.0002] # BAMUM LETTER PHASE-E NDAA MY HOUSE 169DE ; [.3A95.0020.0002] # BAMUM LETTER PHASE-E SHIQ 169DF ; [.3A96.0020.0002] # BAMUM LETTER PHASE-E YEUX 169E0 ; [.3A97.0020.0002] # BAMUM LETTER PHASE-E NGUAE 169E1 ; [.3A98.0020.0002] # BAMUM LETTER PHASE-E YUAEN 169E2 ; [.3A99.0020.0002] # BAMUM LETTER PHASE-E YOQ SWIMMING 169E3 ; [.3A9A.0020.0002] # BAMUM LETTER PHASE-E YOQ COVER 169E4 ; [.3A9B.0020.0002] # BAMUM LETTER PHASE-E YUQ 169E5 ; [.3A9C.0020.0002] # BAMUM LETTER PHASE-E YUN 169E6 ; [.3A9D.0020.0002] # BAMUM LETTER PHASE-E KEUX 169E7 ; [.3A9E.0020.0002] # BAMUM LETTER PHASE-E PEUX 169E8 ; [.3A9F.0020.0002] # BAMUM LETTER PHASE-E NJEE EPOCH 169E9 ; [.3AA0.0020.0002] # BAMUM LETTER PHASE-E PUE 169EA ; [.3AA1.0020.0002] # BAMUM LETTER PHASE-E WUE 169EB ; [.3AA2.0020.0002] # BAMUM LETTER PHASE-E FEE 169EC ; [.3AA3.0020.0002] # BAMUM LETTER PHASE-E VEE 169ED ; [.3AA4.0020.0002] # BAMUM LETTER PHASE-E LU 169EE ; [.3AA5.0020.0002] # BAMUM LETTER PHASE-E MI 169EF ; [.3AA6.0020.0002] # BAMUM LETTER PHASE-E REUX 169F0 ; [.3AA7.0020.0002] # BAMUM LETTER PHASE-E RAE 169F1 ; [.3AA8.0020.0002] # BAMUM LETTER PHASE-E NGUAET 169F2 ; [.3AA9.0020.0002] # BAMUM LETTER PHASE-E NGA 169F3 ; [.3AAA.0020.0002] # BAMUM LETTER PHASE-E SHO 169F4 ; [.3AAB.0020.0002] # BAMUM LETTER PHASE-E SHOQ 169F5 ; [.3AAC.0020.0002] # BAMUM LETTER PHASE-E FU REMEDY 169F6 ; [.3AAD.0020.0002] # BAMUM LETTER PHASE-E NA 169F7 ; [.3AAE.0020.0002] # BAMUM LETTER PHASE-E PI 169F8 ; [.3AAF.0020.0002] # BAMUM LETTER PHASE-E LOQ 169F9 ; [.3AB0.0020.0002] # BAMUM LETTER PHASE-E KO 169FA ; [.3AB1.0020.0002] # BAMUM LETTER PHASE-E MEN 169FB ; [.3AB2.0020.0002] # BAMUM LETTER PHASE-E MA 169FC ; [.3AB3.0020.0002] # BAMUM LETTER PHASE-E MAQ 169FD ; [.3AB4.0020.0002] # BAMUM LETTER PHASE-E TEU 169FE ; [.3AB5.0020.0002] # BAMUM LETTER PHASE-E KI 169FF ; [.3AB6.0020.0002] # BAMUM LETTER PHASE-E MON 16A00 ; [.3AB7.0020.0002] # BAMUM LETTER PHASE-E TEN 16A01 ; [.3AB8.0020.0002] # BAMUM LETTER PHASE-E FAQ 16A02 ; [.3AB9.0020.0002] # BAMUM LETTER PHASE-E GHOM 16A03 ; [.3ABA.0020.0002] # BAMUM LETTER PHASE-F KA 16A04 ; [.3ABB.0020.0002] # BAMUM LETTER PHASE-F U 16A05 ; [.3ABC.0020.0002] # BAMUM LETTER PHASE-F KU 16A06 ; [.3ABD.0020.0002] # BAMUM LETTER PHASE-F EE 16A07 ; [.3ABE.0020.0002] # BAMUM LETTER PHASE-F REE 16A08 ; [.3ABF.0020.0002] # BAMUM LETTER PHASE-F TAE 16A09 ; [.3AC0.0020.0002] # BAMUM LETTER PHASE-F NYI 16A0A ; [.3AC1.0020.0002] # BAMUM LETTER PHASE-F LA 16A0B ; [.3AC2.0020.0002] # BAMUM LETTER PHASE-F RII 16A0C ; [.3AC3.0020.0002] # BAMUM LETTER PHASE-F RIEE 16A0D ; [.3AC4.0020.0002] # BAMUM LETTER PHASE-F MEEEE 16A0E ; [.3AC5.0020.0002] # BAMUM LETTER PHASE-F TAA 16A0F ; [.3AC6.0020.0002] # BAMUM LETTER PHASE-F NDAA 16A10 ; [.3AC7.0020.0002] # BAMUM LETTER PHASE-F NJAEM 16A11 ; [.3AC8.0020.0002] # BAMUM LETTER PHASE-F M 16A12 ; [.3AC9.0020.0002] # BAMUM LETTER PHASE-F SUU 16A13 ; [.3ACA.0020.0002] # BAMUM LETTER PHASE-F SHII 16A14 ; [.3ACB.0020.0002] # BAMUM LETTER PHASE-F SI 16A15 ; [.3ACC.0020.0002] # BAMUM LETTER PHASE-F SEUX 16A16 ; [.3ACD.0020.0002] # BAMUM LETTER PHASE-F KYEE 16A17 ; [.3ACE.0020.0002] # BAMUM LETTER PHASE-F KET 16A18 ; [.3ACF.0020.0002] # BAMUM LETTER PHASE-F NUAE 16A19 ; [.3AD0.0020.0002] # BAMUM LETTER PHASE-F NU 16A1A ; [.3AD1.0020.0002] # BAMUM LETTER PHASE-F NJUAE 16A1B ; [.3AD2.0020.0002] # BAMUM LETTER PHASE-F YOQ 16A1C ; [.3AD3.0020.0002] # BAMUM LETTER PHASE-F SHU 16A1D ; [.3AD4.0020.0002] # BAMUM LETTER PHASE-F YA 16A1E ; [.3AD5.0020.0002] # BAMUM LETTER PHASE-F NSHA 16A1F ; [.3AD6.0020.0002] # BAMUM LETTER PHASE-F PEUX 16A20 ; [.3AD7.0020.0002] # BAMUM LETTER PHASE-F NTEE 16A21 ; [.3AD8.0020.0002] # BAMUM LETTER PHASE-F WUE 16A22 ; [.3AD9.0020.0002] # BAMUM LETTER PHASE-F PEE 16A23 ; [.3ADA.0020.0002] # BAMUM LETTER PHASE-F RU 16A24 ; [.3ADB.0020.0002] # BAMUM LETTER PHASE-F NI 16A25 ; [.3ADC.0020.0002] # BAMUM LETTER PHASE-F REUX 16A26 ; [.3ADD.0020.0002] # BAMUM LETTER PHASE-F KEN 16A27 ; [.3ADE.0020.0002] # BAMUM LETTER PHASE-F NGKWAEN 16A28 ; [.3ADF.0020.0002] # BAMUM LETTER PHASE-F NGGA 16A29 ; [.3AE0.0020.0002] # BAMUM LETTER PHASE-F SHO 16A2A ; [.3AE1.0020.0002] # BAMUM LETTER PHASE-F PUAE 16A2B ; [.3AE2.0020.0002] # BAMUM LETTER PHASE-F FOM 16A2C ; [.3AE3.0020.0002] # BAMUM LETTER PHASE-F WA 16A2D ; [.3AE4.0020.0002] # BAMUM LETTER PHASE-F LI 16A2E ; [.3AE5.0020.0002] # BAMUM LETTER PHASE-F LOQ 16A2F ; [.3AE6.0020.0002] # BAMUM LETTER PHASE-F KO 16A30 ; [.3AE7.0020.0002] # BAMUM LETTER PHASE-F MBEN 16A31 ; [.3AE8.0020.0002] # BAMUM LETTER PHASE-F REN 16A32 ; [.3AE9.0020.0002] # BAMUM LETTER PHASE-F MA 16A33 ; [.3AEA.0020.0002] # BAMUM LETTER PHASE-F MO 16A34 ; [.3AEB.0020.0002] # BAMUM LETTER PHASE-F MBAA 16A35 ; [.3AEC.0020.0002] # BAMUM LETTER PHASE-F TET 16A36 ; [.3AED.0020.0002] # BAMUM LETTER PHASE-F KPA 16A37 ; [.3AEE.0020.0002] # BAMUM LETTER PHASE-F SAMBA 16A38 ; [.3AEF.0020.0002] # BAMUM LETTER PHASE-F VUEQ 16AD0 ; [.3AF0.0020.0002] # BASSA VAH LETTER ENNI 16AD1 ; [.3AF1.0020.0002] # BASSA VAH LETTER KA 16AD2 ; [.3AF2.0020.0002] # BASSA VAH LETTER SE 16AD3 ; [.3AF3.0020.0002] # BASSA VAH LETTER FA 16AD4 ; [.3AF4.0020.0002] # BASSA VAH LETTER MBE 16AD5 ; [.3AF5.0020.0002] # BASSA VAH LETTER YIE 16AD6 ; [.3AF6.0020.0002] # BASSA VAH LETTER GAH 16AD7 ; [.3AF7.0020.0002] # BASSA VAH LETTER DHII 16AD8 ; [.3AF8.0020.0002] # BASSA VAH LETTER KPAH 16AD9 ; [.3AF9.0020.0002] # BASSA VAH LETTER JO 16ADA ; [.3AFA.0020.0002] # BASSA VAH LETTER HWAH 16ADB ; [.3AFB.0020.0002] # BASSA VAH LETTER WA 16ADC ; [.3AFC.0020.0002] # BASSA VAH LETTER ZO 16ADD ; [.3AFD.0020.0002] # BASSA VAH LETTER GBU 16ADE ; [.3AFE.0020.0002] # BASSA VAH LETTER DO 16ADF ; [.3AFF.0020.0002] # BASSA VAH LETTER CE 16AE0 ; [.3B00.0020.0002] # BASSA VAH LETTER UWU 16AE1 ; [.3B01.0020.0002] # BASSA VAH LETTER TO 16AE2 ; [.3B02.0020.0002] # BASSA VAH LETTER BA 16AE3 ; [.3B03.0020.0002] # BASSA VAH LETTER VU 16AE4 ; [.3B04.0020.0002] # BASSA VAH LETTER YEIN 16AE5 ; [.3B05.0020.0002] # BASSA VAH LETTER PA 16AE6 ; [.3B06.0020.0002] # BASSA VAH LETTER WADDA 16AE7 ; [.3B07.0020.0002] # BASSA VAH LETTER A 16AE8 ; [.3B08.0020.0002] # BASSA VAH LETTER O 16AE9 ; [.3B09.0020.0002] # BASSA VAH LETTER OO 16AEA ; [.3B0A.0020.0002] # BASSA VAH LETTER U 16AEB ; [.3B0B.0020.0002] # BASSA VAH LETTER EE 16AEC ; [.3B0C.0020.0002] # BASSA VAH LETTER E 16AED ; [.3B0D.0020.0002] # BASSA VAH LETTER I 1E800 ; [.3B0E.0020.0002] # MENDE KIKAKUI SYLLABLE M001 KI 1E801 ; [.3B0F.0020.0002] # MENDE KIKAKUI SYLLABLE M002 KA 1E802 ; [.3B10.0020.0002] # MENDE KIKAKUI SYLLABLE M003 KU 1E803 ; [.3B11.0020.0002] # MENDE KIKAKUI SYLLABLE M065 KEE 1E804 ; [.3B12.0020.0002] # MENDE KIKAKUI SYLLABLE M095 KE 1E805 ; [.3B13.0020.0002] # MENDE KIKAKUI SYLLABLE M076 KOO 1E806 ; [.3B14.0020.0002] # MENDE KIKAKUI SYLLABLE M048 KO 1E807 ; [.3B15.0020.0002] # MENDE KIKAKUI SYLLABLE M179 KUA 1E808 ; [.3B16.0020.0002] # MENDE KIKAKUI SYLLABLE M004 WI 1E809 ; [.3B17.0020.0002] # MENDE KIKAKUI SYLLABLE M005 WA 1E80A ; [.3B18.0020.0002] # MENDE KIKAKUI SYLLABLE M006 WU 1E80B ; [.3B19.0020.0002] # MENDE KIKAKUI SYLLABLE M126 WEE 1E80C ; [.3B1A.0020.0002] # MENDE KIKAKUI SYLLABLE M118 WE 1E80D ; [.3B1B.0020.0002] # MENDE KIKAKUI SYLLABLE M114 WOO 1E80E ; [.3B1C.0020.0002] # MENDE KIKAKUI SYLLABLE M045 WO 1E80F ; [.3B1D.0020.0002] # MENDE KIKAKUI SYLLABLE M194 WUI 1E810 ; [.3B1E.0020.0002] # MENDE KIKAKUI SYLLABLE M143 WEI 1E811 ; [.3B1F.0020.0002] # MENDE KIKAKUI SYLLABLE M061 WVI 1E812 ; [.3B20.0020.0002] # MENDE KIKAKUI SYLLABLE M049 WVA 1E813 ; [.3B21.0020.0002] # MENDE KIKAKUI SYLLABLE M139 WVE 1E814 ; [.3B22.0020.0002] # MENDE KIKAKUI SYLLABLE M007 MIN 1E815 ; [.3B23.0020.0002] # MENDE KIKAKUI SYLLABLE M008 MAN 1E816 ; [.3B24.0020.0002] # MENDE KIKAKUI SYLLABLE M009 MUN 1E817 ; [.3B25.0020.0002] # MENDE KIKAKUI SYLLABLE M059 MEN 1E818 ; [.3B26.0020.0002] # MENDE KIKAKUI SYLLABLE M094 MON 1E819 ; [.3B27.0020.0002] # MENDE KIKAKUI SYLLABLE M154 MUAN 1E81A ; [.3B28.0020.0002] # MENDE KIKAKUI SYLLABLE M189 MUEN 1E81B ; [.3B29.0020.0002] # MENDE KIKAKUI SYLLABLE M010 BI 1E81C ; [.3B2A.0020.0002] # MENDE KIKAKUI SYLLABLE M011 BA 1E81D ; [.3B2B.0020.0002] # MENDE KIKAKUI SYLLABLE M012 BU 1E81E ; [.3B2C.0020.0002] # MENDE KIKAKUI SYLLABLE M150 BEE 1E81F ; [.3B2D.0020.0002] # MENDE KIKAKUI SYLLABLE M097 BE 1E820 ; [.3B2E.0020.0002] # MENDE KIKAKUI SYLLABLE M103 BOO 1E821 ; [.3B2F.0020.0002] # MENDE KIKAKUI SYLLABLE M138 BO 1E822 ; [.3B30.0020.0002] # MENDE KIKAKUI SYLLABLE M013 I 1E823 ; [.3B31.0020.0002] # MENDE KIKAKUI SYLLABLE M014 A 1E824 ; [.3B32.0020.0002] # MENDE KIKAKUI SYLLABLE M015 U 1E825 ; [.3B33.0020.0002] # MENDE KIKAKUI SYLLABLE M163 EE 1E826 ; [.3B34.0020.0002] # MENDE KIKAKUI SYLLABLE M100 E 1E827 ; [.3B35.0020.0002] # MENDE KIKAKUI SYLLABLE M165 OO 1E828 ; [.3B36.0020.0002] # MENDE KIKAKUI SYLLABLE M147 O 1E829 ; [.3B37.0020.0002] # MENDE KIKAKUI SYLLABLE M137 EI 1E82A ; [.3B38.0020.0002] # MENDE KIKAKUI SYLLABLE M131 IN 1E82B ; [.3B39.0020.0002] # MENDE KIKAKUI SYLLABLE M135 IN 1E82C ; [.3B3A.0020.0002] # MENDE KIKAKUI SYLLABLE M195 AN 1E82D ; [.3B3B.0020.0002] # MENDE KIKAKUI SYLLABLE M178 EN 1E82E ; [.3B3C.0020.0002] # MENDE KIKAKUI SYLLABLE M019 SI 1E82F ; [.3B3D.0020.0002] # MENDE KIKAKUI SYLLABLE M020 SA 1E830 ; [.3B3E.0020.0002] # MENDE KIKAKUI SYLLABLE M021 SU 1E831 ; [.3B3F.0020.0002] # MENDE KIKAKUI SYLLABLE M162 SEE 1E832 ; [.3B40.0020.0002] # MENDE KIKAKUI SYLLABLE M116 SE 1E833 ; [.3B41.0020.0002] # MENDE KIKAKUI SYLLABLE M136 SOO 1E834 ; [.3B42.0020.0002] # MENDE KIKAKUI SYLLABLE M079 SO 1E835 ; [.3B43.0020.0002] # MENDE KIKAKUI SYLLABLE M196 SIA 1E836 ; [.3B44.0020.0002] # MENDE KIKAKUI SYLLABLE M025 LI 1E837 ; [.3B45.0020.0002] # MENDE KIKAKUI SYLLABLE M026 LA 1E838 ; [.3B46.0020.0002] # MENDE KIKAKUI SYLLABLE M027 LU 1E839 ; [.3B47.0020.0002] # MENDE KIKAKUI SYLLABLE M084 LEE 1E83A ; [.3B48.0020.0002] # MENDE KIKAKUI SYLLABLE M073 LE 1E83B ; [.3B49.0020.0002] # MENDE KIKAKUI SYLLABLE M054 LOO 1E83C ; [.3B4A.0020.0002] # MENDE KIKAKUI SYLLABLE M153 LO 1E83D ; [.3B4B.0020.0002] # MENDE KIKAKUI SYLLABLE M110 LONG LE 1E83E ; [.3B4C.0020.0002] # MENDE KIKAKUI SYLLABLE M016 DI 1E83F ; [.3B4D.0020.0002] # MENDE KIKAKUI SYLLABLE M017 DA 1E840 ; [.3B4E.0020.0002] # MENDE KIKAKUI SYLLABLE M018 DU 1E841 ; [.3B4F.0020.0002] # MENDE KIKAKUI SYLLABLE M089 DEE 1E842 ; [.3B50.0020.0002] # MENDE KIKAKUI SYLLABLE M180 DOO 1E843 ; [.3B51.0020.0002] # MENDE KIKAKUI SYLLABLE M181 DO 1E844 ; [.3B52.0020.0002] # MENDE KIKAKUI SYLLABLE M022 TI 1E845 ; [.3B53.0020.0002] # MENDE KIKAKUI SYLLABLE M023 TA 1E846 ; [.3B54.0020.0002] # MENDE KIKAKUI SYLLABLE M024 TU 1E847 ; [.3B55.0020.0002] # MENDE KIKAKUI SYLLABLE M091 TEE 1E848 ; [.3B56.0020.0002] # MENDE KIKAKUI SYLLABLE M055 TE 1E849 ; [.3B57.0020.0002] # MENDE KIKAKUI SYLLABLE M104 TOO 1E84A ; [.3B58.0020.0002] # MENDE KIKAKUI SYLLABLE M069 TO 1E84B ; [.3B59.0020.0002] # MENDE KIKAKUI SYLLABLE M028 JI 1E84C ; [.3B5A.0020.0002] # MENDE KIKAKUI SYLLABLE M029 JA 1E84D ; [.3B5B.0020.0002] # MENDE KIKAKUI SYLLABLE M030 JU 1E84E ; [.3B5C.0020.0002] # MENDE KIKAKUI SYLLABLE M157 JEE 1E84F ; [.3B5D.0020.0002] # MENDE KIKAKUI SYLLABLE M113 JE 1E850 ; [.3B5E.0020.0002] # MENDE KIKAKUI SYLLABLE M160 JOO 1E851 ; [.3B5F.0020.0002] # MENDE KIKAKUI SYLLABLE M063 JO 1E852 ; [.3B60.0020.0002] # MENDE KIKAKUI SYLLABLE M175 LONG JO 1E853 ; [.3B61.0020.0002] # MENDE KIKAKUI SYLLABLE M031 YI 1E854 ; [.3B62.0020.0002] # MENDE KIKAKUI SYLLABLE M032 YA 1E855 ; [.3B63.0020.0002] # MENDE KIKAKUI SYLLABLE M033 YU 1E856 ; [.3B64.0020.0002] # MENDE KIKAKUI SYLLABLE M109 YEE 1E857 ; [.3B65.0020.0002] # MENDE KIKAKUI SYLLABLE M080 YE 1E858 ; [.3B66.0020.0002] # MENDE KIKAKUI SYLLABLE M141 YOO 1E859 ; [.3B67.0020.0002] # MENDE KIKAKUI SYLLABLE M121 YO 1E85A ; [.3B68.0020.0002] # MENDE KIKAKUI SYLLABLE M034 FI 1E85B ; [.3B69.0020.0002] # MENDE KIKAKUI SYLLABLE M035 FA 1E85C ; [.3B6A.0020.0002] # MENDE KIKAKUI SYLLABLE M036 FU 1E85D ; [.3B6B.0020.0002] # MENDE KIKAKUI SYLLABLE M078 FEE 1E85E ; [.3B6C.0020.0002] # MENDE KIKAKUI SYLLABLE M075 FE 1E85F ; [.3B6D.0020.0002] # MENDE KIKAKUI SYLLABLE M133 FOO 1E860 ; [.3B6E.0020.0002] # MENDE KIKAKUI SYLLABLE M088 FO 1E861 ; [.3B6F.0020.0002] # MENDE KIKAKUI SYLLABLE M197 FUA 1E862 ; [.3B70.0020.0002] # MENDE KIKAKUI SYLLABLE M101 FAN 1E863 ; [.3B71.0020.0002] # MENDE KIKAKUI SYLLABLE M037 NIN 1E864 ; [.3B72.0020.0002] # MENDE KIKAKUI SYLLABLE M038 NAN 1E865 ; [.3B73.0020.0002] # MENDE KIKAKUI SYLLABLE M039 NUN 1E866 ; [.3B74.0020.0002] # MENDE KIKAKUI SYLLABLE M117 NEN 1E867 ; [.3B75.0020.0002] # MENDE KIKAKUI SYLLABLE M169 NON 1E868 ; [.3B76.0020.0002] # MENDE KIKAKUI SYLLABLE M176 HI 1E869 ; [.3B77.0020.0002] # MENDE KIKAKUI SYLLABLE M041 HA 1E86A ; [.3B78.0020.0002] # MENDE KIKAKUI SYLLABLE M186 HU 1E86B ; [.3B79.0020.0002] # MENDE KIKAKUI SYLLABLE M040 HEE 1E86C ; [.3B7A.0020.0002] # MENDE KIKAKUI SYLLABLE M096 HE 1E86D ; [.3B7B.0020.0002] # MENDE KIKAKUI SYLLABLE M042 HOO 1E86E ; [.3B7C.0020.0002] # MENDE KIKAKUI SYLLABLE M140 HO 1E86F ; [.3B7D.0020.0002] # MENDE KIKAKUI SYLLABLE M083 HEEI 1E870 ; [.3B7E.0020.0002] # MENDE KIKAKUI SYLLABLE M128 HOOU 1E871 ; [.3B7F.0020.0002] # MENDE KIKAKUI SYLLABLE M053 HIN 1E872 ; [.3B80.0020.0002] # MENDE KIKAKUI SYLLABLE M130 HAN 1E873 ; [.3B81.0020.0002] # MENDE KIKAKUI SYLLABLE M087 HUN 1E874 ; [.3B82.0020.0002] # MENDE KIKAKUI SYLLABLE M052 HEN 1E875 ; [.3B83.0020.0002] # MENDE KIKAKUI SYLLABLE M193 HON 1E876 ; [.3B84.0020.0002] # MENDE KIKAKUI SYLLABLE M046 HUAN 1E877 ; [.3B85.0020.0002] # MENDE KIKAKUI SYLLABLE M090 NGGI 1E878 ; [.3B86.0020.0002] # MENDE KIKAKUI SYLLABLE M043 NGGA 1E879 ; [.3B87.0020.0002] # MENDE KIKAKUI SYLLABLE M082 NGGU 1E87A ; [.3B88.0020.0002] # MENDE KIKAKUI SYLLABLE M115 NGGEE 1E87B ; [.3B89.0020.0002] # MENDE KIKAKUI SYLLABLE M146 NGGE 1E87C ; [.3B8A.0020.0002] # MENDE KIKAKUI SYLLABLE M156 NGGOO 1E87D ; [.3B8B.0020.0002] # MENDE KIKAKUI SYLLABLE M120 NGGO 1E87E ; [.3B8C.0020.0002] # MENDE KIKAKUI SYLLABLE M159 NGGAA 1E87F ; [.3B8D.0020.0002] # MENDE KIKAKUI SYLLABLE M127 NGGUA 1E880 ; [.3B8E.0020.0002] # MENDE KIKAKUI SYLLABLE M086 LONG NGGE 1E881 ; [.3B8F.0020.0002] # MENDE KIKAKUI SYLLABLE M106 LONG NGGOO 1E882 ; [.3B90.0020.0002] # MENDE KIKAKUI SYLLABLE M183 LONG NGGO 1E883 ; [.3B91.0020.0002] # MENDE KIKAKUI SYLLABLE M155 GI 1E884 ; [.3B92.0020.0002] # MENDE KIKAKUI SYLLABLE M111 GA 1E885 ; [.3B93.0020.0002] # MENDE KIKAKUI SYLLABLE M168 GU 1E886 ; [.3B94.0020.0002] # MENDE KIKAKUI SYLLABLE M190 GEE 1E887 ; [.3B95.0020.0002] # MENDE KIKAKUI SYLLABLE M166 GUEI 1E888 ; [.3B96.0020.0002] # MENDE KIKAKUI SYLLABLE M167 GUAN 1E889 ; [.3B97.0020.0002] # MENDE KIKAKUI SYLLABLE M184 NGEN 1E88A ; [.3B98.0020.0002] # MENDE KIKAKUI SYLLABLE M057 NGON 1E88B ; [.3B99.0020.0002] # MENDE KIKAKUI SYLLABLE M177 NGUAN 1E88C ; [.3B9A.0020.0002] # MENDE KIKAKUI SYLLABLE M068 PI 1E88D ; [.3B9B.0020.0002] # MENDE KIKAKUI SYLLABLE M099 PA 1E88E ; [.3B9C.0020.0002] # MENDE KIKAKUI SYLLABLE M050 PU 1E88F ; [.3B9D.0020.0002] # MENDE KIKAKUI SYLLABLE M081 PEE 1E890 ; [.3B9E.0020.0002] # MENDE KIKAKUI SYLLABLE M051 PE 1E891 ; [.3B9F.0020.0002] # MENDE KIKAKUI SYLLABLE M102 POO 1E892 ; [.3BA0.0020.0002] # MENDE KIKAKUI SYLLABLE M066 PO 1E893 ; [.3BA1.0020.0002] # MENDE KIKAKUI SYLLABLE M145 MBI 1E894 ; [.3BA2.0020.0002] # MENDE KIKAKUI SYLLABLE M062 MBA 1E895 ; [.3BA3.0020.0002] # MENDE KIKAKUI SYLLABLE M122 MBU 1E896 ; [.3BA4.0020.0002] # MENDE KIKAKUI SYLLABLE M047 MBEE 1E897 ; [.3BA5.0020.0002] # MENDE KIKAKUI SYLLABLE M188 MBEE 1E898 ; [.3BA6.0020.0002] # MENDE KIKAKUI SYLLABLE M072 MBE 1E899 ; [.3BA7.0020.0002] # MENDE KIKAKUI SYLLABLE M172 MBOO 1E89A ; [.3BA8.0020.0002] # MENDE KIKAKUI SYLLABLE M174 MBO 1E89B ; [.3BA9.0020.0002] # MENDE KIKAKUI SYLLABLE M187 MBUU 1E89C ; [.3BAA.0020.0002] # MENDE KIKAKUI SYLLABLE M161 LONG MBE 1E89D ; [.3BAB.0020.0002] # MENDE KIKAKUI SYLLABLE M105 LONG MBOO 1E89E ; [.3BAC.0020.0002] # MENDE KIKAKUI SYLLABLE M142 LONG MBO 1E89F ; [.3BAD.0020.0002] # MENDE KIKAKUI SYLLABLE M132 KPI 1E8A0 ; [.3BAE.0020.0002] # MENDE KIKAKUI SYLLABLE M092 KPA 1E8A1 ; [.3BAF.0020.0002] # MENDE KIKAKUI SYLLABLE M074 KPU 1E8A2 ; [.3BB0.0020.0002] # MENDE KIKAKUI SYLLABLE M044 KPEE 1E8A3 ; [.3BB1.0020.0002] # MENDE KIKAKUI SYLLABLE M108 KPE 1E8A4 ; [.3BB2.0020.0002] # MENDE KIKAKUI SYLLABLE M112 KPOO 1E8A5 ; [.3BB3.0020.0002] # MENDE KIKAKUI SYLLABLE M158 KPO 1E8A6 ; [.3BB4.0020.0002] # MENDE KIKAKUI SYLLABLE M124 GBI 1E8A7 ; [.3BB5.0020.0002] # MENDE KIKAKUI SYLLABLE M056 GBA 1E8A8 ; [.3BB6.0020.0002] # MENDE KIKAKUI SYLLABLE M148 GBU 1E8A9 ; [.3BB7.0020.0002] # MENDE KIKAKUI SYLLABLE M093 GBEE 1E8AA ; [.3BB8.0020.0002] # MENDE KIKAKUI SYLLABLE M107 GBE 1E8AB ; [.3BB9.0020.0002] # MENDE KIKAKUI SYLLABLE M071 GBOO 1E8AC ; [.3BBA.0020.0002] # MENDE KIKAKUI SYLLABLE M070 GBO 1E8AD ; [.3BBB.0020.0002] # MENDE KIKAKUI SYLLABLE M171 RA 1E8AE ; [.3BBC.0020.0002] # MENDE KIKAKUI SYLLABLE M123 NDI 1E8AF ; [.3BBD.0020.0002] # MENDE KIKAKUI SYLLABLE M129 NDA 1E8B0 ; [.3BBE.0020.0002] # MENDE KIKAKUI SYLLABLE M125 NDU 1E8B1 ; [.3BBF.0020.0002] # MENDE KIKAKUI SYLLABLE M191 NDEE 1E8B2 ; [.3BC0.0020.0002] # MENDE KIKAKUI SYLLABLE M119 NDE 1E8B3 ; [.3BC1.0020.0002] # MENDE KIKAKUI SYLLABLE M067 NDOO 1E8B4 ; [.3BC2.0020.0002] # MENDE KIKAKUI SYLLABLE M064 NDO 1E8B5 ; [.3BC3.0020.0002] # MENDE KIKAKUI SYLLABLE M152 NJA 1E8B6 ; [.3BC4.0020.0002] # MENDE KIKAKUI SYLLABLE M192 NJU 1E8B7 ; [.3BC5.0020.0002] # MENDE KIKAKUI SYLLABLE M149 NJEE 1E8B8 ; [.3BC6.0020.0002] # MENDE KIKAKUI SYLLABLE M134 NJOO 1E8B9 ; [.3BC7.0020.0002] # MENDE KIKAKUI SYLLABLE M182 VI 1E8BA ; [.3BC8.0020.0002] # MENDE KIKAKUI SYLLABLE M185 VA 1E8BB ; [.3BC9.0020.0002] # MENDE KIKAKUI SYLLABLE M151 VU 1E8BC ; [.3BCA.0020.0002] # MENDE KIKAKUI SYLLABLE M173 VEE 1E8BD ; [.3BCB.0020.0002] # MENDE KIKAKUI SYLLABLE M085 VE 1E8BE ; [.3BCC.0020.0002] # MENDE KIKAKUI SYLLABLE M144 VOO 1E8BF ; [.3BCD.0020.0002] # MENDE KIKAKUI SYLLABLE M077 VO 1E8C0 ; [.3BCE.0020.0002] # MENDE KIKAKUI SYLLABLE M164 NYIN 1E8C1 ; [.3BCF.0020.0002] # MENDE KIKAKUI SYLLABLE M058 NYAN 1E8C2 ; [.3BD0.0020.0002] # MENDE KIKAKUI SYLLABLE M170 NYUN 1E8C3 ; [.3BD1.0020.0002] # MENDE KIKAKUI SYLLABLE M098 NYEN 1E8C4 ; [.3BD2.0020.0002] # MENDE KIKAKUI SYLLABLE M060 NYON 1E922 ; [.3BD3.0020.0002] # ADLAM SMALL LETTER ALIF 1E900 ; [.3BD3.0020.0008] # ADLAM CAPITAL LETTER ALIF 1E923 ; [.3BD4.0020.0002] # ADLAM SMALL LETTER DAALI 1E901 ; [.3BD4.0020.0008] # ADLAM CAPITAL LETTER DAALI 1E924 ; [.3BD5.0020.0002] # ADLAM SMALL LETTER LAAM 1E902 ; [.3BD5.0020.0008] # ADLAM CAPITAL LETTER LAAM 1E925 ; [.3BD6.0020.0002] # ADLAM SMALL LETTER MIIM 1E903 ; [.3BD6.0020.0008] # ADLAM CAPITAL LETTER MIIM 1E926 ; [.3BD7.0020.0002] # ADLAM SMALL LETTER BA 1E904 ; [.3BD7.0020.0008] # ADLAM CAPITAL LETTER BA 1E927 ; [.3BD8.0020.0002] # ADLAM SMALL LETTER SINNYIIYHE 1E905 ; [.3BD8.0020.0008] # ADLAM CAPITAL LETTER SINNYIIYHE 1E928 ; [.3BD9.0020.0002] # ADLAM SMALL LETTER PE 1E906 ; [.3BD9.0020.0008] # ADLAM CAPITAL LETTER PE 1E929 ; [.3BDA.0020.0002] # ADLAM SMALL LETTER BHE 1E907 ; [.3BDA.0020.0008] # ADLAM CAPITAL LETTER BHE 1E92A ; [.3BDB.0020.0002] # ADLAM SMALL LETTER RA 1E908 ; [.3BDB.0020.0008] # ADLAM CAPITAL LETTER RA 1E92B ; [.3BDC.0020.0002] # ADLAM SMALL LETTER E 1E909 ; [.3BDC.0020.0008] # ADLAM CAPITAL LETTER E 1E92C ; [.3BDD.0020.0002] # ADLAM SMALL LETTER FA 1E90A ; [.3BDD.0020.0008] # ADLAM CAPITAL LETTER FA 1E92D ; [.3BDE.0020.0002] # ADLAM SMALL LETTER I 1E90B ; [.3BDE.0020.0008] # ADLAM CAPITAL LETTER I 1E92E ; [.3BDF.0020.0002] # ADLAM SMALL LETTER O 1E90C ; [.3BDF.0020.0008] # ADLAM CAPITAL LETTER O 1E92F ; [.3BE0.0020.0002] # ADLAM SMALL LETTER DHA 1E90D ; [.3BE0.0020.0008] # ADLAM CAPITAL LETTER DHA 1E930 ; [.3BE1.0020.0002] # ADLAM SMALL LETTER YHE 1E90E ; [.3BE1.0020.0008] # ADLAM CAPITAL LETTER YHE 1E931 ; [.3BE2.0020.0002] # ADLAM SMALL LETTER WAW 1E90F ; [.3BE2.0020.0008] # ADLAM CAPITAL LETTER WAW 1E932 ; [.3BE3.0020.0002] # ADLAM SMALL LETTER NUN 1E910 ; [.3BE3.0020.0008] # ADLAM CAPITAL LETTER NUN 1E933 ; [.3BE4.0020.0002] # ADLAM SMALL LETTER KAF 1E911 ; [.3BE4.0020.0008] # ADLAM CAPITAL LETTER KAF 1E934 ; [.3BE5.0020.0002] # ADLAM SMALL LETTER YA 1E912 ; [.3BE5.0020.0008] # ADLAM CAPITAL LETTER YA 1E935 ; [.3BE6.0020.0002] # ADLAM SMALL LETTER U 1E913 ; [.3BE6.0020.0008] # ADLAM CAPITAL LETTER U 1E936 ; [.3BE7.0020.0002] # ADLAM SMALL LETTER JIIM 1E914 ; [.3BE7.0020.0008] # ADLAM CAPITAL LETTER JIIM 1E937 ; [.3BE8.0020.0002] # ADLAM SMALL LETTER CHI 1E915 ; [.3BE8.0020.0008] # ADLAM CAPITAL LETTER CHI 1E938 ; [.3BE9.0020.0002] # ADLAM SMALL LETTER HA 1E916 ; [.3BE9.0020.0008] # ADLAM CAPITAL LETTER HA 1E939 ; [.3BEA.0020.0002] # ADLAM SMALL LETTER QAAF 1E917 ; [.3BEA.0020.0008] # ADLAM CAPITAL LETTER QAAF 1E93A ; [.3BEB.0020.0002] # ADLAM SMALL LETTER GA 1E918 ; [.3BEB.0020.0008] # ADLAM CAPITAL LETTER GA 1E93B ; [.3BEC.0020.0002] # ADLAM SMALL LETTER NYA 1E919 ; [.3BEC.0020.0008] # ADLAM CAPITAL LETTER NYA 1E93C ; [.3BED.0020.0002] # ADLAM SMALL LETTER TU 1E91A ; [.3BED.0020.0008] # ADLAM CAPITAL LETTER TU 1E93D ; [.3BEE.0020.0002] # ADLAM SMALL LETTER NHA 1E91B ; [.3BEE.0020.0008] # ADLAM CAPITAL LETTER NHA 1E93E ; [.3BEF.0020.0002] # ADLAM SMALL LETTER VA 1E91C ; [.3BEF.0020.0008] # ADLAM CAPITAL LETTER VA 1E93F ; [.3BF0.0020.0002] # ADLAM SMALL LETTER KHA 1E91D ; [.3BF0.0020.0008] # ADLAM CAPITAL LETTER KHA 1E940 ; [.3BF1.0020.0002] # ADLAM SMALL LETTER GBE 1E91E ; [.3BF1.0020.0008] # ADLAM CAPITAL LETTER GBE 1E941 ; [.3BF2.0020.0002] # ADLAM SMALL LETTER ZAL 1E91F ; [.3BF2.0020.0008] # ADLAM CAPITAL LETTER ZAL 1E942 ; [.3BF3.0020.0002] # ADLAM SMALL LETTER KPO 1E920 ; [.3BF3.0020.0008] # ADLAM CAPITAL LETTER KPO 1E943 ; [.3BF4.0020.0002] # ADLAM SMALL LETTER SHA 1E921 ; [.3BF4.0020.0008] # ADLAM CAPITAL LETTER SHA 1100 ; [.3BF5.0020.0002] # HANGUL CHOSEONG KIYEOK 3131 ; [.3BF5.0020.0004] # HANGUL LETTER KIYEOK 3200 ; [*0317.0020.0004][.3BF5.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KIYEOK 3260 ; [.3BF5.0020.0006] # CIRCLED HANGUL KIYEOK FFA1 ; [.3BF5.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK 320E ; [*0317.0020.0004][.3BF5.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KIYEOK A 326E ; [.3BF5.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL KIYEOK A 1101 ; [.3BF6.0020.0002] # HANGUL CHOSEONG SSANGKIYEOK 3132 ; [.3BF6.0020.0004] # HANGUL LETTER SSANGKIYEOK FFA2 ; [.3BF6.0020.0012] # HALFWIDTH HANGUL LETTER SSANGKIYEOK 1102 ; [.3BF7.0020.0002] # HANGUL CHOSEONG NIEUN 3134 ; [.3BF7.0020.0004] # HANGUL LETTER NIEUN 3201 ; [*0317.0020.0004][.3BF7.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL NIEUN 3261 ; [.3BF7.0020.0006] # CIRCLED HANGUL NIEUN FFA4 ; [.3BF7.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN 320F ; [*0317.0020.0004][.3BF7.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL NIEUN A 326F ; [.3BF7.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL NIEUN A 1103 ; [.3BF8.0020.0002] # HANGUL CHOSEONG TIKEUT 3137 ; [.3BF8.0020.0004] # HANGUL LETTER TIKEUT 3202 ; [*0317.0020.0004][.3BF8.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL TIKEUT 3262 ; [.3BF8.0020.0006] # CIRCLED HANGUL TIKEUT FFA7 ; [.3BF8.0020.0012] # HALFWIDTH HANGUL LETTER TIKEUT 3210 ; [*0317.0020.0004][.3BF8.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL TIKEUT A 3270 ; [.3BF8.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL TIKEUT A 1104 ; [.3BF9.0020.0002] # HANGUL CHOSEONG SSANGTIKEUT 3138 ; [.3BF9.0020.0004] # HANGUL LETTER SSANGTIKEUT FFA8 ; [.3BF9.0020.0012] # HALFWIDTH HANGUL LETTER SSANGTIKEUT 1105 ; [.3BFA.0020.0002] # HANGUL CHOSEONG RIEUL 3139 ; [.3BFA.0020.0004] # HANGUL LETTER RIEUL 3203 ; [*0317.0020.0004][.3BFA.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL RIEUL 3263 ; [.3BFA.0020.0006] # CIRCLED HANGUL RIEUL FFA9 ; [.3BFA.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL 3211 ; [*0317.0020.0004][.3BFA.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL RIEUL A 3271 ; [.3BFA.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL RIEUL A 1106 ; [.3BFB.0020.0002] # HANGUL CHOSEONG MIEUM 3141 ; [.3BFB.0020.0004] # HANGUL LETTER MIEUM 3204 ; [*0317.0020.0004][.3BFB.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL MIEUM 3264 ; [.3BFB.0020.0006] # CIRCLED HANGUL MIEUM FFB1 ; [.3BFB.0020.0012] # HALFWIDTH HANGUL LETTER MIEUM 3212 ; [*0317.0020.0004][.3BFB.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL MIEUM A 3272 ; [.3BFB.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL MIEUM A 1107 ; [.3BFC.0020.0002] # HANGUL CHOSEONG PIEUP 3142 ; [.3BFC.0020.0004] # HANGUL LETTER PIEUP 3205 ; [*0317.0020.0004][.3BFC.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PIEUP 3265 ; [.3BFC.0020.0006] # CIRCLED HANGUL PIEUP FFB2 ; [.3BFC.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP 3213 ; [*0317.0020.0004][.3BFC.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PIEUP A 3273 ; [.3BFC.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL PIEUP A 1108 ; [.3BFD.0020.0002] # HANGUL CHOSEONG SSANGPIEUP 3143 ; [.3BFD.0020.0004] # HANGUL LETTER SSANGPIEUP FFB3 ; [.3BFD.0020.0012] # HALFWIDTH HANGUL LETTER SSANGPIEUP 1109 ; [.3BFE.0020.0002] # HANGUL CHOSEONG SIOS 3145 ; [.3BFE.0020.0004] # HANGUL LETTER SIOS 3206 ; [*0317.0020.0004][.3BFE.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL SIOS 3266 ; [.3BFE.0020.0006] # CIRCLED HANGUL SIOS FFB5 ; [.3BFE.0020.0012] # HALFWIDTH HANGUL LETTER SIOS 3214 ; [*0317.0020.0004][.3BFE.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL SIOS A 3274 ; [.3BFE.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL SIOS A 110A ; [.3BFF.0020.0002] # HANGUL CHOSEONG SSANGSIOS 3146 ; [.3BFF.0020.0004] # HANGUL LETTER SSANGSIOS FFB6 ; [.3BFF.0020.0012] # HALFWIDTH HANGUL LETTER SSANGSIOS 110B ; [.3C00.0020.0002] # HANGUL CHOSEONG IEUNG 3147 ; [.3C00.0020.0004] # HANGUL LETTER IEUNG 3207 ; [*0317.0020.0004][.3C00.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL IEUNG 3267 ; [.3C00.0020.0006] # CIRCLED HANGUL IEUNG FFB7 ; [.3C00.0020.0012] # HALFWIDTH HANGUL LETTER IEUNG 3215 ; [*0317.0020.0004][.3C00.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL IEUNG A 3275 ; [.3C00.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL IEUNG A 321D ; [*0317.0020.0004][.3C00.0020.0004][.3C7B.0020.0004][.3C01.0020.0004][.3C77.0020.0004][.3CD4.0020.0004][*0318.0020.0004] # PARENTHESIZED KOREAN CHARACTER OJEON 321E ; [*0317.0020.0004][.3C00.0020.0004][.3C7B.0020.0004][.3C07.0020.0004][.3C80.0020.0004][*0318.0020.0004] # PARENTHESIZED KOREAN CHARACTER O HU 327E ; [.3C00.0020.0006][.3C80.0020.0006] # CIRCLED HANGUL IEUNG U 110C ; [.3C01.0020.0002] # HANGUL CHOSEONG CIEUC 3148 ; [.3C01.0020.0004] # HANGUL LETTER CIEUC 3208 ; [*0317.0020.0004][.3C01.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CIEUC 3268 ; [.3C01.0020.0006] # CIRCLED HANGUL CIEUC FFB8 ; [.3C01.0020.0012] # HALFWIDTH HANGUL LETTER CIEUC 3216 ; [*0317.0020.0004][.3C01.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CIEUC A 3276 ; [.3C01.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL CIEUC A 321C ; [*0317.0020.0004][.3C01.0020.0004][.3C80.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CIEUC U 327D ; [.3C01.0020.0006][.3C80.0020.0006][.3C00.0020.0006][.3C86.0020.0006] # CIRCLED KOREAN CHARACTER JUEUI 110D ; [.3C02.0020.0002] # HANGUL CHOSEONG SSANGCIEUC 3149 ; [.3C02.0020.0004] # HANGUL LETTER SSANGCIEUC FFB9 ; [.3C02.0020.0012] # HALFWIDTH HANGUL LETTER SSANGCIEUC 110E ; [.3C03.0020.0002] # HANGUL CHOSEONG CHIEUCH 314A ; [.3C03.0020.0004] # HANGUL LETTER CHIEUCH 3209 ; [*0317.0020.0004][.3C03.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CHIEUCH 3269 ; [.3C03.0020.0006] # CIRCLED HANGUL CHIEUCH FFBA ; [.3C03.0020.0012] # HALFWIDTH HANGUL LETTER CHIEUCH 3217 ; [*0317.0020.0004][.3C03.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL CHIEUCH A 3277 ; [.3C03.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL CHIEUCH A 327C ; [.3C03.0020.0006][.3C73.0020.0006][.3CE0.0020.0006][.3BF5.0020.0006][.3C7B.0020.0006] # CIRCLED KOREAN CHARACTER CHAMKO 110F ; [.3C04.0020.0002] # HANGUL CHOSEONG KHIEUKH 314B ; [.3C04.0020.0004] # HANGUL LETTER KHIEUKH 320A ; [*0317.0020.0004][.3C04.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KHIEUKH 326A ; [.3C04.0020.0006] # CIRCLED HANGUL KHIEUKH FFBB ; [.3C04.0020.0012] # HALFWIDTH HANGUL LETTER KHIEUKH 3218 ; [*0317.0020.0004][.3C04.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL KHIEUKH A 3278 ; [.3C04.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL KHIEUKH A 1110 ; [.3C05.0020.0002] # HANGUL CHOSEONG THIEUTH 314C ; [.3C05.0020.0004] # HANGUL LETTER THIEUTH 320B ; [*0317.0020.0004][.3C05.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL THIEUTH 326B ; [.3C05.0020.0006] # CIRCLED HANGUL THIEUTH FFBC ; [.3C05.0020.0012] # HALFWIDTH HANGUL LETTER THIEUTH 3219 ; [*0317.0020.0004][.3C05.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL THIEUTH A 3279 ; [.3C05.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL THIEUTH A 1111 ; [.3C06.0020.0002] # HANGUL CHOSEONG PHIEUPH 314D ; [.3C06.0020.0004] # HANGUL LETTER PHIEUPH 320C ; [*0317.0020.0004][.3C06.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PHIEUPH 326C ; [.3C06.0020.0006] # CIRCLED HANGUL PHIEUPH FFBD ; [.3C06.0020.0012] # HALFWIDTH HANGUL LETTER PHIEUPH 321A ; [*0317.0020.0004][.3C06.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL PHIEUPH A 327A ; [.3C06.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL PHIEUPH A 1112 ; [.3C07.0020.0002] # HANGUL CHOSEONG HIEUH 314E ; [.3C07.0020.0004] # HANGUL LETTER HIEUH 320D ; [*0317.0020.0004][.3C07.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL HIEUH 326D ; [.3C07.0020.0006] # CIRCLED HANGUL HIEUH FFBE ; [.3C07.0020.0012] # HALFWIDTH HANGUL LETTER HIEUH 321B ; [*0317.0020.0004][.3C07.0020.0004][.3C73.0020.0004][*0318.0020.0004] # PARENTHESIZED HANGUL HIEUH A 327B ; [.3C07.0020.0006][.3C73.0020.0006] # CIRCLED HANGUL HIEUH A 1113 ; [.3C08.0020.0002] # HANGUL CHOSEONG NIEUN-KIYEOK 1114 ; [.3C09.0020.0002] # HANGUL CHOSEONG SSANGNIEUN 3165 ; [.3C09.0020.0004] # HANGUL LETTER SSANGNIEUN 1115 ; [.3C0A.0020.0002] # HANGUL CHOSEONG NIEUN-TIKEUT 3166 ; [.3C0A.0020.0004] # HANGUL LETTER NIEUN-TIKEUT 1116 ; [.3C0B.0020.0002] # HANGUL CHOSEONG NIEUN-PIEUP 1117 ; [.3C0C.0020.0002] # HANGUL CHOSEONG TIKEUT-KIYEOK 1118 ; [.3C0D.0020.0002] # HANGUL CHOSEONG RIEUL-NIEUN 1119 ; [.3C0E.0020.0002] # HANGUL CHOSEONG SSANGRIEUL 111A ; [.3C0F.0020.0002] # HANGUL CHOSEONG RIEUL-HIEUH 3140 ; [.3C0F.0020.0004] # HANGUL LETTER RIEUL-HIEUH FFB0 ; [.3C0F.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-HIEUH 111B ; [.3C10.0020.0002] # HANGUL CHOSEONG KAPYEOUNRIEUL 111C ; [.3C11.0020.0002] # HANGUL CHOSEONG MIEUM-PIEUP 316E ; [.3C11.0020.0004] # HANGUL LETTER MIEUM-PIEUP 111D ; [.3C12.0020.0002] # HANGUL CHOSEONG KAPYEOUNMIEUM 3171 ; [.3C12.0020.0004] # HANGUL LETTER KAPYEOUNMIEUM 111E ; [.3C13.0020.0002] # HANGUL CHOSEONG PIEUP-KIYEOK 3172 ; [.3C13.0020.0004] # HANGUL LETTER PIEUP-KIYEOK 111F ; [.3C14.0020.0002] # HANGUL CHOSEONG PIEUP-NIEUN 1120 ; [.3C15.0020.0002] # HANGUL CHOSEONG PIEUP-TIKEUT 3173 ; [.3C15.0020.0004] # HANGUL LETTER PIEUP-TIKEUT 1121 ; [.3C16.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS 3144 ; [.3C16.0020.0004] # HANGUL LETTER PIEUP-SIOS FFB4 ; [.3C16.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP-SIOS 1122 ; [.3C17.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK 3174 ; [.3C17.0020.0004] # HANGUL LETTER PIEUP-SIOS-KIYEOK 1123 ; [.3C18.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT 3175 ; [.3C18.0020.0004] # HANGUL LETTER PIEUP-SIOS-TIKEUT 1124 ; [.3C19.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-PIEUP 1125 ; [.3C1A.0020.0002] # HANGUL CHOSEONG PIEUP-SSANGSIOS 1126 ; [.3C1B.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-CIEUC 1127 ; [.3C1C.0020.0002] # HANGUL CHOSEONG PIEUP-CIEUC 3176 ; [.3C1C.0020.0004] # HANGUL LETTER PIEUP-CIEUC 1128 ; [.3C1D.0020.0002] # HANGUL CHOSEONG PIEUP-CHIEUCH 1129 ; [.3C1E.0020.0002] # HANGUL CHOSEONG PIEUP-THIEUTH 3177 ; [.3C1E.0020.0004] # HANGUL LETTER PIEUP-THIEUTH 112A ; [.3C1F.0020.0002] # HANGUL CHOSEONG PIEUP-PHIEUPH 112B ; [.3C20.0020.0002] # HANGUL CHOSEONG KAPYEOUNPIEUP 3178 ; [.3C20.0020.0004] # HANGUL LETTER KAPYEOUNPIEUP 112C ; [.3C21.0020.0002] # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP 3179 ; [.3C21.0020.0004] # HANGUL LETTER KAPYEOUNSSANGPIEUP 112D ; [.3C22.0020.0002] # HANGUL CHOSEONG SIOS-KIYEOK 317A ; [.3C22.0020.0004] # HANGUL LETTER SIOS-KIYEOK 112E ; [.3C23.0020.0002] # HANGUL CHOSEONG SIOS-NIEUN 317B ; [.3C23.0020.0004] # HANGUL LETTER SIOS-NIEUN 112F ; [.3C24.0020.0002] # HANGUL CHOSEONG SIOS-TIKEUT 317C ; [.3C24.0020.0004] # HANGUL LETTER SIOS-TIKEUT 1130 ; [.3C25.0020.0002] # HANGUL CHOSEONG SIOS-RIEUL 1131 ; [.3C26.0020.0002] # HANGUL CHOSEONG SIOS-MIEUM 1132 ; [.3C27.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP 317D ; [.3C27.0020.0004] # HANGUL LETTER SIOS-PIEUP 1133 ; [.3C28.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK 1134 ; [.3C29.0020.0002] # HANGUL CHOSEONG SIOS-SSANGSIOS 1135 ; [.3C2A.0020.0002] # HANGUL CHOSEONG SIOS-IEUNG 1136 ; [.3C2B.0020.0002] # HANGUL CHOSEONG SIOS-CIEUC 317E ; [.3C2B.0020.0004] # HANGUL LETTER SIOS-CIEUC 1137 ; [.3C2C.0020.0002] # HANGUL CHOSEONG SIOS-CHIEUCH 1138 ; [.3C2D.0020.0002] # HANGUL CHOSEONG SIOS-KHIEUKH 1139 ; [.3C2E.0020.0002] # HANGUL CHOSEONG SIOS-THIEUTH 113A ; [.3C2F.0020.0002] # HANGUL CHOSEONG SIOS-PHIEUPH 113B ; [.3C30.0020.0002] # HANGUL CHOSEONG SIOS-HIEUH 113C ; [.3C31.0020.0002] # HANGUL CHOSEONG CHITUEUMSIOS 113D ; [.3C32.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGSIOS 113E ; [.3C33.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSIOS 113F ; [.3C34.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS 1140 ; [.3C35.0020.0002] # HANGUL CHOSEONG PANSIOS 317F ; [.3C35.0020.0004] # HANGUL LETTER PANSIOS 1141 ; [.3C36.0020.0002] # HANGUL CHOSEONG IEUNG-KIYEOK 1142 ; [.3C37.0020.0002] # HANGUL CHOSEONG IEUNG-TIKEUT 1143 ; [.3C38.0020.0002] # HANGUL CHOSEONG IEUNG-MIEUM 1144 ; [.3C39.0020.0002] # HANGUL CHOSEONG IEUNG-PIEUP 1145 ; [.3C3A.0020.0002] # HANGUL CHOSEONG IEUNG-SIOS 1146 ; [.3C3B.0020.0002] # HANGUL CHOSEONG IEUNG-PANSIOS 1147 ; [.3C3C.0020.0002] # HANGUL CHOSEONG SSANGIEUNG 3180 ; [.3C3C.0020.0004] # HANGUL LETTER SSANGIEUNG 1148 ; [.3C3D.0020.0002] # HANGUL CHOSEONG IEUNG-CIEUC 1149 ; [.3C3E.0020.0002] # HANGUL CHOSEONG IEUNG-CHIEUCH 114A ; [.3C3F.0020.0002] # HANGUL CHOSEONG IEUNG-THIEUTH 114B ; [.3C40.0020.0002] # HANGUL CHOSEONG IEUNG-PHIEUPH 114C ; [.3C41.0020.0002] # HANGUL CHOSEONG YESIEUNG 3181 ; [.3C41.0020.0004] # HANGUL LETTER YESIEUNG 114D ; [.3C42.0020.0002] # HANGUL CHOSEONG CIEUC-IEUNG 114E ; [.3C43.0020.0002] # HANGUL CHOSEONG CHITUEUMCIEUC 114F ; [.3C44.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGCIEUC 1150 ; [.3C45.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCIEUC 1151 ; [.3C46.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC 1152 ; [.3C47.0020.0002] # HANGUL CHOSEONG CHIEUCH-KHIEUKH 1153 ; [.3C48.0020.0002] # HANGUL CHOSEONG CHIEUCH-HIEUH 1154 ; [.3C49.0020.0002] # HANGUL CHOSEONG CHITUEUMCHIEUCH 1155 ; [.3C4A.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH 1156 ; [.3C4B.0020.0002] # HANGUL CHOSEONG PHIEUPH-PIEUP 1157 ; [.3C4C.0020.0002] # HANGUL CHOSEONG KAPYEOUNPHIEUPH 3184 ; [.3C4C.0020.0004] # HANGUL LETTER KAPYEOUNPHIEUPH 1158 ; [.3C4D.0020.0002] # HANGUL CHOSEONG SSANGHIEUH 3185 ; [.3C4D.0020.0004] # HANGUL LETTER SSANGHIEUH 1159 ; [.3C4E.0020.0002] # HANGUL CHOSEONG YEORINHIEUH 3186 ; [.3C4E.0020.0004] # HANGUL LETTER YEORINHIEUH 115A ; [.3C4F.0020.0002] # HANGUL CHOSEONG KIYEOK-TIKEUT 115B ; [.3C50.0020.0002] # HANGUL CHOSEONG NIEUN-SIOS 115C ; [.3C51.0020.0002] # HANGUL CHOSEONG NIEUN-CIEUC 115D ; [.3C52.0020.0002] # HANGUL CHOSEONG NIEUN-HIEUH 115E ; [.3C53.0020.0002] # HANGUL CHOSEONG TIKEUT-RIEUL A960 ; [.3C54.0020.0002] # HANGUL CHOSEONG TIKEUT-MIEUM A961 ; [.3C55.0020.0002] # HANGUL CHOSEONG TIKEUT-PIEUP A962 ; [.3C56.0020.0002] # HANGUL CHOSEONG TIKEUT-SIOS A963 ; [.3C57.0020.0002] # HANGUL CHOSEONG TIKEUT-CIEUC A964 ; [.3C58.0020.0002] # HANGUL CHOSEONG RIEUL-KIYEOK A965 ; [.3C59.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGKIYEOK A966 ; [.3C5A.0020.0002] # HANGUL CHOSEONG RIEUL-TIKEUT A967 ; [.3C5B.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGTIKEUT A968 ; [.3C5C.0020.0002] # HANGUL CHOSEONG RIEUL-MIEUM A969 ; [.3C5D.0020.0002] # HANGUL CHOSEONG RIEUL-PIEUP A96A ; [.3C5E.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGPIEUP A96B ; [.3C5F.0020.0002] # HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP A96C ; [.3C60.0020.0002] # HANGUL CHOSEONG RIEUL-SIOS A96D ; [.3C61.0020.0002] # HANGUL CHOSEONG RIEUL-CIEUC A96E ; [.3C62.0020.0002] # HANGUL CHOSEONG RIEUL-KHIEUKH A96F ; [.3C63.0020.0002] # HANGUL CHOSEONG MIEUM-KIYEOK A970 ; [.3C64.0020.0002] # HANGUL CHOSEONG MIEUM-TIKEUT A971 ; [.3C65.0020.0002] # HANGUL CHOSEONG MIEUM-SIOS A972 ; [.3C66.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-THIEUTH A973 ; [.3C67.0020.0002] # HANGUL CHOSEONG PIEUP-KHIEUKH A974 ; [.3C68.0020.0002] # HANGUL CHOSEONG PIEUP-HIEUH A975 ; [.3C69.0020.0002] # HANGUL CHOSEONG SSANGSIOS-PIEUP A976 ; [.3C6A.0020.0002] # HANGUL CHOSEONG IEUNG-RIEUL A977 ; [.3C6B.0020.0002] # HANGUL CHOSEONG IEUNG-HIEUH A978 ; [.3C6C.0020.0002] # HANGUL CHOSEONG SSANGCIEUC-HIEUH A979 ; [.3C6D.0020.0002] # HANGUL CHOSEONG SSANGTHIEUTH A97A ; [.3C6E.0020.0002] # HANGUL CHOSEONG PHIEUPH-HIEUH A97B ; [.3C6F.0020.0002] # HANGUL CHOSEONG HIEUH-SIOS A97C ; [.3C70.0020.0002] # HANGUL CHOSEONG SSANGYEORINHIEUH 115F ; [.3C71.0020.0002] # HANGUL CHOSEONG FILLER 1160 ; [.3C72.0020.0002] # HANGUL JUNGSEONG FILLER 3164 ; [.3C72.0020.0004] # HANGUL FILLER FFA0 ; [.3C72.0020.0012] # HALFWIDTH HANGUL FILLER 1161 ; [.3C73.0020.0002] # HANGUL JUNGSEONG A 314F ; [.3C73.0020.0004] # HANGUL LETTER A FFC2 ; [.3C73.0020.0012] # HALFWIDTH HANGUL LETTER A 1162 ; [.3C74.0020.0002] # HANGUL JUNGSEONG AE 3150 ; [.3C74.0020.0004] # HANGUL LETTER AE FFC3 ; [.3C74.0020.0012] # HALFWIDTH HANGUL LETTER AE 1163 ; [.3C75.0020.0002] # HANGUL JUNGSEONG YA 3151 ; [.3C75.0020.0004] # HANGUL LETTER YA FFC4 ; [.3C75.0020.0012] # HALFWIDTH HANGUL LETTER YA 1164 ; [.3C76.0020.0002] # HANGUL JUNGSEONG YAE 3152 ; [.3C76.0020.0004] # HANGUL LETTER YAE FFC5 ; [.3C76.0020.0012] # HALFWIDTH HANGUL LETTER YAE 1165 ; [.3C77.0020.0002] # HANGUL JUNGSEONG EO 3153 ; [.3C77.0020.0004] # HANGUL LETTER EO FFC6 ; [.3C77.0020.0012] # HALFWIDTH HANGUL LETTER EO 1166 ; [.3C78.0020.0002] # HANGUL JUNGSEONG E 3154 ; [.3C78.0020.0004] # HANGUL LETTER E FFC7 ; [.3C78.0020.0012] # HALFWIDTH HANGUL LETTER E 1167 ; [.3C79.0020.0002] # HANGUL JUNGSEONG YEO 3155 ; [.3C79.0020.0004] # HANGUL LETTER YEO FFCA ; [.3C79.0020.0012] # HALFWIDTH HANGUL LETTER YEO 1168 ; [.3C7A.0020.0002] # HANGUL JUNGSEONG YE 3156 ; [.3C7A.0020.0004] # HANGUL LETTER YE FFCB ; [.3C7A.0020.0012] # HALFWIDTH HANGUL LETTER YE 1169 ; [.3C7B.0020.0002] # HANGUL JUNGSEONG O 3157 ; [.3C7B.0020.0004] # HANGUL LETTER O FFCC ; [.3C7B.0020.0012] # HALFWIDTH HANGUL LETTER O 116A ; [.3C7C.0020.0002] # HANGUL JUNGSEONG WA 3158 ; [.3C7C.0020.0004] # HANGUL LETTER WA FFCD ; [.3C7C.0020.0012] # HALFWIDTH HANGUL LETTER WA 116B ; [.3C7D.0020.0002] # HANGUL JUNGSEONG WAE 3159 ; [.3C7D.0020.0004] # HANGUL LETTER WAE FFCE ; [.3C7D.0020.0012] # HALFWIDTH HANGUL LETTER WAE 116C ; [.3C7E.0020.0002] # HANGUL JUNGSEONG OE 315A ; [.3C7E.0020.0004] # HANGUL LETTER OE FFCF ; [.3C7E.0020.0012] # HALFWIDTH HANGUL LETTER OE 116D ; [.3C7F.0020.0002] # HANGUL JUNGSEONG YO 315B ; [.3C7F.0020.0004] # HANGUL LETTER YO FFD2 ; [.3C7F.0020.0012] # HALFWIDTH HANGUL LETTER YO 116E ; [.3C80.0020.0002] # HANGUL JUNGSEONG U 315C ; [.3C80.0020.0004] # HANGUL LETTER U FFD3 ; [.3C80.0020.0012] # HALFWIDTH HANGUL LETTER U 116F ; [.3C81.0020.0002] # HANGUL JUNGSEONG WEO 315D ; [.3C81.0020.0004] # HANGUL LETTER WEO FFD4 ; [.3C81.0020.0012] # HALFWIDTH HANGUL LETTER WEO 1170 ; [.3C82.0020.0002] # HANGUL JUNGSEONG WE 315E ; [.3C82.0020.0004] # HANGUL LETTER WE FFD5 ; [.3C82.0020.0012] # HALFWIDTH HANGUL LETTER WE 1171 ; [.3C83.0020.0002] # HANGUL JUNGSEONG WI 315F ; [.3C83.0020.0004] # HANGUL LETTER WI FFD6 ; [.3C83.0020.0012] # HALFWIDTH HANGUL LETTER WI 1172 ; [.3C84.0020.0002] # HANGUL JUNGSEONG YU 3160 ; [.3C84.0020.0004] # HANGUL LETTER YU FFD7 ; [.3C84.0020.0012] # HALFWIDTH HANGUL LETTER YU 1173 ; [.3C85.0020.0002] # HANGUL JUNGSEONG EU 3161 ; [.3C85.0020.0004] # HANGUL LETTER EU FFDA ; [.3C85.0020.0012] # HALFWIDTH HANGUL LETTER EU 1174 ; [.3C86.0020.0002] # HANGUL JUNGSEONG YI 3162 ; [.3C86.0020.0004] # HANGUL LETTER YI FFDB ; [.3C86.0020.0012] # HALFWIDTH HANGUL LETTER YI 1175 ; [.3C87.0020.0002] # HANGUL JUNGSEONG I 3163 ; [.3C87.0020.0004] # HANGUL LETTER I FFDC ; [.3C87.0020.0012] # HALFWIDTH HANGUL LETTER I 1176 ; [.3C88.0020.0002] # HANGUL JUNGSEONG A-O 1177 ; [.3C89.0020.0002] # HANGUL JUNGSEONG A-U 1178 ; [.3C8A.0020.0002] # HANGUL JUNGSEONG YA-O 1179 ; [.3C8B.0020.0002] # HANGUL JUNGSEONG YA-YO 117A ; [.3C8C.0020.0002] # HANGUL JUNGSEONG EO-O 117B ; [.3C8D.0020.0002] # HANGUL JUNGSEONG EO-U 117C ; [.3C8E.0020.0002] # HANGUL JUNGSEONG EO-EU 117D ; [.3C8F.0020.0002] # HANGUL JUNGSEONG YEO-O 117E ; [.3C90.0020.0002] # HANGUL JUNGSEONG YEO-U 117F ; [.3C91.0020.0002] # HANGUL JUNGSEONG O-EO 1180 ; [.3C92.0020.0002] # HANGUL JUNGSEONG O-E 1181 ; [.3C93.0020.0002] # HANGUL JUNGSEONG O-YE 1182 ; [.3C94.0020.0002] # HANGUL JUNGSEONG O-O 1183 ; [.3C95.0020.0002] # HANGUL JUNGSEONG O-U 1184 ; [.3C96.0020.0002] # HANGUL JUNGSEONG YO-YA 3187 ; [.3C96.0020.0004] # HANGUL LETTER YO-YA 1185 ; [.3C97.0020.0002] # HANGUL JUNGSEONG YO-YAE 3188 ; [.3C97.0020.0004] # HANGUL LETTER YO-YAE 1186 ; [.3C98.0020.0002] # HANGUL JUNGSEONG YO-YEO 1187 ; [.3C99.0020.0002] # HANGUL JUNGSEONG YO-O 1188 ; [.3C9A.0020.0002] # HANGUL JUNGSEONG YO-I 3189 ; [.3C9A.0020.0004] # HANGUL LETTER YO-I 1189 ; [.3C9B.0020.0002] # HANGUL JUNGSEONG U-A 118A ; [.3C9C.0020.0002] # HANGUL JUNGSEONG U-AE 118B ; [.3C9D.0020.0002] # HANGUL JUNGSEONG U-EO-EU 118C ; [.3C9E.0020.0002] # HANGUL JUNGSEONG U-YE 118D ; [.3C9F.0020.0002] # HANGUL JUNGSEONG U-U 118E ; [.3CA0.0020.0002] # HANGUL JUNGSEONG YU-A 118F ; [.3CA1.0020.0002] # HANGUL JUNGSEONG YU-EO 1190 ; [.3CA2.0020.0002] # HANGUL JUNGSEONG YU-E 1191 ; [.3CA3.0020.0002] # HANGUL JUNGSEONG YU-YEO 318A ; [.3CA3.0020.0004] # HANGUL LETTER YU-YEO 1192 ; [.3CA4.0020.0002] # HANGUL JUNGSEONG YU-YE 318B ; [.3CA4.0020.0004] # HANGUL LETTER YU-YE 1193 ; [.3CA5.0020.0002] # HANGUL JUNGSEONG YU-U 1194 ; [.3CA6.0020.0002] # HANGUL JUNGSEONG YU-I 318C ; [.3CA6.0020.0004] # HANGUL LETTER YU-I 1195 ; [.3CA7.0020.0002] # HANGUL JUNGSEONG EU-U 1196 ; [.3CA8.0020.0002] # HANGUL JUNGSEONG EU-EU 1197 ; [.3CA9.0020.0002] # HANGUL JUNGSEONG YI-U 1198 ; [.3CAA.0020.0002] # HANGUL JUNGSEONG I-A 1199 ; [.3CAB.0020.0002] # HANGUL JUNGSEONG I-YA 119A ; [.3CAC.0020.0002] # HANGUL JUNGSEONG I-O 119B ; [.3CAD.0020.0002] # HANGUL JUNGSEONG I-U 119C ; [.3CAE.0020.0002] # HANGUL JUNGSEONG I-EU 119D ; [.3CAF.0020.0002] # HANGUL JUNGSEONG I-ARAEA 119E ; [.3CB0.0020.0002] # HANGUL JUNGSEONG ARAEA 318D ; [.3CB0.0020.0004] # HANGUL LETTER ARAEA 119F ; [.3CB1.0020.0002] # HANGUL JUNGSEONG ARAEA-EO 11A0 ; [.3CB2.0020.0002] # HANGUL JUNGSEONG ARAEA-U 11A1 ; [.3CB3.0020.0002] # HANGUL JUNGSEONG ARAEA-I 318E ; [.3CB3.0020.0004] # HANGUL LETTER ARAEAE 11A2 ; [.3CB4.0020.0002] # HANGUL JUNGSEONG SSANGARAEA 11A3 ; [.3CB5.0020.0002] # HANGUL JUNGSEONG A-EU 11A4 ; [.3CB6.0020.0002] # HANGUL JUNGSEONG YA-U 11A5 ; [.3CB7.0020.0002] # HANGUL JUNGSEONG YEO-YA 11A6 ; [.3CB8.0020.0002] # HANGUL JUNGSEONG O-YA 11A7 ; [.3CB9.0020.0002] # HANGUL JUNGSEONG O-YAE D7B0 ; [.3CBA.0020.0002] # HANGUL JUNGSEONG O-YEO D7B1 ; [.3CBB.0020.0002] # HANGUL JUNGSEONG O-O-I D7B2 ; [.3CBC.0020.0002] # HANGUL JUNGSEONG YO-A D7B3 ; [.3CBD.0020.0002] # HANGUL JUNGSEONG YO-AE D7B4 ; [.3CBE.0020.0002] # HANGUL JUNGSEONG YO-EO D7B5 ; [.3CBF.0020.0002] # HANGUL JUNGSEONG U-YEO D7B6 ; [.3CC0.0020.0002] # HANGUL JUNGSEONG U-I-I D7B7 ; [.3CC1.0020.0002] # HANGUL JUNGSEONG YU-AE D7B8 ; [.3CC2.0020.0002] # HANGUL JUNGSEONG YU-O D7B9 ; [.3CC3.0020.0002] # HANGUL JUNGSEONG EU-A D7BA ; [.3CC4.0020.0002] # HANGUL JUNGSEONG EU-EO D7BB ; [.3CC5.0020.0002] # HANGUL JUNGSEONG EU-E D7BC ; [.3CC6.0020.0002] # HANGUL JUNGSEONG EU-O D7BD ; [.3CC7.0020.0002] # HANGUL JUNGSEONG I-YA-O D7BE ; [.3CC8.0020.0002] # HANGUL JUNGSEONG I-YAE D7BF ; [.3CC9.0020.0002] # HANGUL JUNGSEONG I-YEO D7C0 ; [.3CCA.0020.0002] # HANGUL JUNGSEONG I-YE D7C1 ; [.3CCB.0020.0002] # HANGUL JUNGSEONG I-O-I D7C2 ; [.3CCC.0020.0002] # HANGUL JUNGSEONG I-YO D7C3 ; [.3CCD.0020.0002] # HANGUL JUNGSEONG I-YU D7C4 ; [.3CCE.0020.0002] # HANGUL JUNGSEONG I-I D7C5 ; [.3CCF.0020.0002] # HANGUL JUNGSEONG ARAEA-A D7C6 ; [.3CD0.0020.0002] # HANGUL JUNGSEONG ARAEA-E 11A8 ; [.3CD1.0020.0002] # HANGUL JONGSEONG KIYEOK 11A9 ; [.3CD2.0020.0002] # HANGUL JONGSEONG SSANGKIYEOK 11AA ; [.3CD3.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS 3133 ; [.3CD3.0020.0004] # HANGUL LETTER KIYEOK-SIOS FFA3 ; [.3CD3.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK-SIOS 11AB ; [.3CD4.0020.0002] # HANGUL JONGSEONG NIEUN 11AC ; [.3CD5.0020.0002] # HANGUL JONGSEONG NIEUN-CIEUC 3135 ; [.3CD5.0020.0004] # HANGUL LETTER NIEUN-CIEUC FFA5 ; [.3CD5.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-CIEUC 11AD ; [.3CD6.0020.0002] # HANGUL JONGSEONG NIEUN-HIEUH 3136 ; [.3CD6.0020.0004] # HANGUL LETTER NIEUN-HIEUH FFA6 ; [.3CD6.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-HIEUH 11AE ; [.3CD7.0020.0002] # HANGUL JONGSEONG TIKEUT 11AF ; [.3CD8.0020.0002] # HANGUL JONGSEONG RIEUL 11B0 ; [.3CD9.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK 313A ; [.3CD9.0020.0004] # HANGUL LETTER RIEUL-KIYEOK FFAA ; [.3CD9.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK 11B1 ; [.3CDA.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM 313B ; [.3CDA.0020.0004] # HANGUL LETTER RIEUL-MIEUM FFAB ; [.3CDA.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-MIEUM 11B2 ; [.3CDB.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP 313C ; [.3CDB.0020.0004] # HANGUL LETTER RIEUL-PIEUP FFAC ; [.3CDB.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PIEUP 11B3 ; [.3CDC.0020.0002] # HANGUL JONGSEONG RIEUL-SIOS 313D ; [.3CDC.0020.0004] # HANGUL LETTER RIEUL-SIOS FFAD ; [.3CDC.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-SIOS 11B4 ; [.3CDD.0020.0002] # HANGUL JONGSEONG RIEUL-THIEUTH 313E ; [.3CDD.0020.0004] # HANGUL LETTER RIEUL-THIEUTH FFAE ; [.3CDD.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH 11B5 ; [.3CDE.0020.0002] # HANGUL JONGSEONG RIEUL-PHIEUPH 313F ; [.3CDE.0020.0004] # HANGUL LETTER RIEUL-PHIEUPH FFAF ; [.3CDE.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH 11B6 ; [.3CDF.0020.0002] # HANGUL JONGSEONG RIEUL-HIEUH 11B7 ; [.3CE0.0020.0002] # HANGUL JONGSEONG MIEUM 11B8 ; [.3CE1.0020.0002] # HANGUL JONGSEONG PIEUP 11B9 ; [.3CE2.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS 11BA ; [.3CE3.0020.0002] # HANGUL JONGSEONG SIOS 11BB ; [.3CE4.0020.0002] # HANGUL JONGSEONG SSANGSIOS 11BC ; [.3CE5.0020.0002] # HANGUL JONGSEONG IEUNG 11BD ; [.3CE6.0020.0002] # HANGUL JONGSEONG CIEUC 11BE ; [.3CE7.0020.0002] # HANGUL JONGSEONG CHIEUCH 11BF ; [.3CE8.0020.0002] # HANGUL JONGSEONG KHIEUKH 11C0 ; [.3CE9.0020.0002] # HANGUL JONGSEONG THIEUTH 11C1 ; [.3CEA.0020.0002] # HANGUL JONGSEONG PHIEUPH 11C2 ; [.3CEB.0020.0002] # HANGUL JONGSEONG HIEUH 11C3 ; [.3CEC.0020.0002] # HANGUL JONGSEONG KIYEOK-RIEUL 11C4 ; [.3CED.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK 11C5 ; [.3CEE.0020.0002] # HANGUL JONGSEONG NIEUN-KIYEOK 11C6 ; [.3CEF.0020.0002] # HANGUL JONGSEONG NIEUN-TIKEUT 11C7 ; [.3CF0.0020.0002] # HANGUL JONGSEONG NIEUN-SIOS 3167 ; [.3CF0.0020.0004] # HANGUL LETTER NIEUN-SIOS 11C8 ; [.3CF1.0020.0002] # HANGUL JONGSEONG NIEUN-PANSIOS 3168 ; [.3CF1.0020.0004] # HANGUL LETTER NIEUN-PANSIOS 11C9 ; [.3CF2.0020.0002] # HANGUL JONGSEONG NIEUN-THIEUTH 11CA ; [.3CF3.0020.0002] # HANGUL JONGSEONG TIKEUT-KIYEOK 11CB ; [.3CF4.0020.0002] # HANGUL JONGSEONG TIKEUT-RIEUL 11CC ; [.3CF5.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS 3169 ; [.3CF5.0020.0004] # HANGUL LETTER RIEUL-KIYEOK-SIOS 11CD ; [.3CF6.0020.0002] # HANGUL JONGSEONG RIEUL-NIEUN 11CE ; [.3CF7.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT 316A ; [.3CF7.0020.0004] # HANGUL LETTER RIEUL-TIKEUT 11CF ; [.3CF8.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH 11D0 ; [.3CF9.0020.0002] # HANGUL JONGSEONG SSANGRIEUL 11D1 ; [.3CFA.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK 11D2 ; [.3CFB.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-SIOS 11D3 ; [.3CFC.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-SIOS 316B ; [.3CFC.0020.0004] # HANGUL LETTER RIEUL-PIEUP-SIOS 11D4 ; [.3CFD.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH 11D5 ; [.3CFE.0020.0002] # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP 11D6 ; [.3CFF.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGSIOS 11D7 ; [.3D00.0020.0002] # HANGUL JONGSEONG RIEUL-PANSIOS 316C ; [.3D00.0020.0004] # HANGUL LETTER RIEUL-PANSIOS 11D8 ; [.3D01.0020.0002] # HANGUL JONGSEONG RIEUL-KHIEUKH 11D9 ; [.3D02.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH 316D ; [.3D02.0020.0004] # HANGUL LETTER RIEUL-YEORINHIEUH 11DA ; [.3D03.0020.0002] # HANGUL JONGSEONG MIEUM-KIYEOK 11DB ; [.3D04.0020.0002] # HANGUL JONGSEONG MIEUM-RIEUL 11DC ; [.3D05.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP 11DD ; [.3D06.0020.0002] # HANGUL JONGSEONG MIEUM-SIOS 316F ; [.3D06.0020.0004] # HANGUL LETTER MIEUM-SIOS 11DE ; [.3D07.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGSIOS 11DF ; [.3D08.0020.0002] # HANGUL JONGSEONG MIEUM-PANSIOS 3170 ; [.3D08.0020.0004] # HANGUL LETTER MIEUM-PANSIOS 11E0 ; [.3D09.0020.0002] # HANGUL JONGSEONG MIEUM-CHIEUCH 11E1 ; [.3D0A.0020.0002] # HANGUL JONGSEONG MIEUM-HIEUH 11E2 ; [.3D0B.0020.0002] # HANGUL JONGSEONG KAPYEOUNMIEUM 11E3 ; [.3D0C.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL 11E4 ; [.3D0D.0020.0002] # HANGUL JONGSEONG PIEUP-PHIEUPH 11E5 ; [.3D0E.0020.0002] # HANGUL JONGSEONG PIEUP-HIEUH 11E6 ; [.3D0F.0020.0002] # HANGUL JONGSEONG KAPYEOUNPIEUP 11E7 ; [.3D10.0020.0002] # HANGUL JONGSEONG SIOS-KIYEOK 11E8 ; [.3D11.0020.0002] # HANGUL JONGSEONG SIOS-TIKEUT 11E9 ; [.3D12.0020.0002] # HANGUL JONGSEONG SIOS-RIEUL 11EA ; [.3D13.0020.0002] # HANGUL JONGSEONG SIOS-PIEUP 11EB ; [.3D14.0020.0002] # HANGUL JONGSEONG PANSIOS 11EC ; [.3D15.0020.0002] # HANGUL JONGSEONG IEUNG-KIYEOK 11ED ; [.3D16.0020.0002] # HANGUL JONGSEONG IEUNG-SSANGKIYEOK 11EE ; [.3D17.0020.0002] # HANGUL JONGSEONG SSANGIEUNG 11EF ; [.3D18.0020.0002] # HANGUL JONGSEONG IEUNG-KHIEUKH 11F0 ; [.3D19.0020.0002] # HANGUL JONGSEONG YESIEUNG 11F1 ; [.3D1A.0020.0002] # HANGUL JONGSEONG YESIEUNG-SIOS 3182 ; [.3D1A.0020.0004] # HANGUL LETTER YESIEUNG-SIOS 11F2 ; [.3D1B.0020.0002] # HANGUL JONGSEONG YESIEUNG-PANSIOS 3183 ; [.3D1B.0020.0004] # HANGUL LETTER YESIEUNG-PANSIOS 11F3 ; [.3D1C.0020.0002] # HANGUL JONGSEONG PHIEUPH-PIEUP 11F4 ; [.3D1D.0020.0002] # HANGUL JONGSEONG KAPYEOUNPHIEUPH 11F5 ; [.3D1E.0020.0002] # HANGUL JONGSEONG HIEUH-NIEUN 11F6 ; [.3D1F.0020.0002] # HANGUL JONGSEONG HIEUH-RIEUL 11F7 ; [.3D20.0020.0002] # HANGUL JONGSEONG HIEUH-MIEUM 11F8 ; [.3D21.0020.0002] # HANGUL JONGSEONG HIEUH-PIEUP 11F9 ; [.3D22.0020.0002] # HANGUL JONGSEONG YEORINHIEUH 11FA ; [.3D23.0020.0002] # HANGUL JONGSEONG KIYEOK-NIEUN 11FB ; [.3D24.0020.0002] # HANGUL JONGSEONG KIYEOK-PIEUP 11FC ; [.3D25.0020.0002] # HANGUL JONGSEONG KIYEOK-CHIEUCH 11FD ; [.3D26.0020.0002] # HANGUL JONGSEONG KIYEOK-KHIEUKH 11FE ; [.3D27.0020.0002] # HANGUL JONGSEONG KIYEOK-HIEUH 11FF ; [.3D28.0020.0002] # HANGUL JONGSEONG SSANGNIEUN D7CB ; [.3D29.0020.0002] # HANGUL JONGSEONG NIEUN-RIEUL D7CC ; [.3D2A.0020.0002] # HANGUL JONGSEONG NIEUN-CHIEUCH D7CD ; [.3D2B.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT D7CE ; [.3D2C.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT-PIEUP D7CF ; [.3D2D.0020.0002] # HANGUL JONGSEONG TIKEUT-PIEUP D7D0 ; [.3D2E.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS D7D1 ; [.3D2F.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK D7D2 ; [.3D30.0020.0002] # HANGUL JONGSEONG TIKEUT-CIEUC D7D3 ; [.3D31.0020.0002] # HANGUL JONGSEONG TIKEUT-CHIEUCH D7D4 ; [.3D32.0020.0002] # HANGUL JONGSEONG TIKEUT-THIEUTH D7D5 ; [.3D33.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGKIYEOK D7D6 ; [.3D34.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH D7D7 ; [.3D35.0020.0002] # HANGUL JONGSEONG SSANGRIEUL-KHIEUKH D7D8 ; [.3D36.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-HIEUH D7D9 ; [.3D37.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT D7DA ; [.3D38.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH D7DB ; [.3D39.0020.0002] # HANGUL JONGSEONG RIEUL-YESIEUNG D7DC ; [.3D3A.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH D7DD ; [.3D3B.0020.0002] # HANGUL JONGSEONG KAPYEOUNRIEUL D7DE ; [.3D3C.0020.0002] # HANGUL JONGSEONG MIEUM-NIEUN D7DF ; [.3D3D.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGNIEUN D7E0 ; [.3D3E.0020.0002] # HANGUL JONGSEONG SSANGMIEUM D7E1 ; [.3D3F.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP-SIOS D7E2 ; [.3D40.0020.0002] # HANGUL JONGSEONG MIEUM-CIEUC D7E3 ; [.3D41.0020.0002] # HANGUL JONGSEONG PIEUP-TIKEUT D7E4 ; [.3D42.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH D7E5 ; [.3D43.0020.0002] # HANGUL JONGSEONG PIEUP-MIEUM D7E6 ; [.3D44.0020.0002] # HANGUL JONGSEONG SSANGPIEUP D7E7 ; [.3D45.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS-TIKEUT D7E8 ; [.3D46.0020.0002] # HANGUL JONGSEONG PIEUP-CIEUC D7E9 ; [.3D47.0020.0002] # HANGUL JONGSEONG PIEUP-CHIEUCH D7EA ; [.3D48.0020.0002] # HANGUL JONGSEONG SIOS-MIEUM D7EB ; [.3D49.0020.0002] # HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP D7EC ; [.3D4A.0020.0002] # HANGUL JONGSEONG SSANGSIOS-KIYEOK D7ED ; [.3D4B.0020.0002] # HANGUL JONGSEONG SSANGSIOS-TIKEUT D7EE ; [.3D4C.0020.0002] # HANGUL JONGSEONG SIOS-PANSIOS D7EF ; [.3D4D.0020.0002] # HANGUL JONGSEONG SIOS-CIEUC D7F0 ; [.3D4E.0020.0002] # HANGUL JONGSEONG SIOS-CHIEUCH D7F1 ; [.3D4F.0020.0002] # HANGUL JONGSEONG SIOS-THIEUTH D7F2 ; [.3D50.0020.0002] # HANGUL JONGSEONG SIOS-HIEUH D7F3 ; [.3D51.0020.0002] # HANGUL JONGSEONG PANSIOS-PIEUP D7F4 ; [.3D52.0020.0002] # HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP D7F5 ; [.3D53.0020.0002] # HANGUL JONGSEONG YESIEUNG-MIEUM D7F6 ; [.3D54.0020.0002] # HANGUL JONGSEONG YESIEUNG-HIEUH D7F7 ; [.3D55.0020.0002] # HANGUL JONGSEONG CIEUC-PIEUP D7F8 ; [.3D56.0020.0002] # HANGUL JONGSEONG CIEUC-SSANGPIEUP D7F9 ; [.3D57.0020.0002] # HANGUL JONGSEONG SSANGCIEUC D7FA ; [.3D58.0020.0002] # HANGUL JONGSEONG PHIEUPH-SIOS D7FB ; [.3D59.0020.0002] # HANGUL JONGSEONG PHIEUPH-THIEUTH 3041 ; [.3D5A.0020.000D] # HIRAGANA LETTER SMALL A 3042 ; [.3D5A.0020.000E] # HIRAGANA LETTER A 30A1 ; [.3D5A.0020.000F] # KATAKANA LETTER SMALL A FF67 ; [.3D5A.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL A 30A2 ; [.3D5A.0020.0011] # KATAKANA LETTER A FF71 ; [.3D5A.0020.0012] # HALFWIDTH KATAKANA LETTER A 32D0 ; [.3D5A.0020.0013] # CIRCLED KATAKANA A 3303 ; [.3D5A.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE AARU 3300 ; [.3D5A.0020.001C][.3D74.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D6E.0020.001C] # SQUARE APAATO 3301 ; [.3D5A.0020.001C][.3D84.0020.001C][.3D76.0020.001C][.3D5A.0020.001C] # SQUARE ARUHUA 3302 ; [.3D5A.0020.001C][.3D8B.0020.001C][.3D77.0020.001C][.0000.0038.001C][.3D5A.0020.001C] # SQUARE ANPEA 3043 ; [.3D5B.0020.000D] # HIRAGANA LETTER SMALL I 3044 ; [.3D5B.0020.000E] # HIRAGANA LETTER I 30A3 ; [.3D5B.0020.000F] # KATAKANA LETTER SMALL I FF68 ; [.3D5B.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL I 30A4 ; [.3D5B.0020.0011] # KATAKANA LETTER I FF72 ; [.3D5B.0020.0012] # HALFWIDTH KATAKANA LETTER I 32D1 ; [.3D5B.0020.0013] # CIRCLED KATAKANA I 3304 ; [.3D5B.0020.001C][.3D70.0020.001C][.3D8B.0020.001C][.3D62.0020.001C][.0000.0037.001C] # SQUARE ININGU 3305 ; [.3D5B.0020.001C][.3D8B.0020.001C][.3D6B.0020.001C] # SQUARE INTI 3045 ; [.3D5C.0020.000D] # HIRAGANA LETTER SMALL U 3046 ; [.3D5C.0020.000E] # HIRAGANA LETTER U 30A5 ; [.3D5C.0020.000F] # KATAKANA LETTER SMALL U FF69 ; [.3D5C.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL U 30A6 ; [.3D5C.0020.0011] # KATAKANA LETTER U FF73 ; [.3D5C.0020.0012] # HALFWIDTH KATAKANA LETTER U 32D2 ; [.3D5C.0020.0013] # CIRCLED KATAKANA U 3094 ; [.3D5C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER VU 30F4 ; [.3D5C.0020.0011][.0000.0037.0002] # KATAKANA LETTER VU 3306 ; [.3D5C.0020.001C][.3D5F.0020.001C][.3D8B.0020.001C] # SQUARE UON 1B000 ; [.3D5D.0020.0011] # KATAKANA LETTER ARCHAIC E 3047 ; [.3D5E.0020.000D] # HIRAGANA LETTER SMALL E 3048 ; [.3D5E.0020.000E] # HIRAGANA LETTER E 30A7 ; [.3D5E.0020.000F] # KATAKANA LETTER SMALL E FF6A ; [.3D5E.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL E 30A8 ; [.3D5E.0020.0011] # KATAKANA LETTER E FF74 ; [.3D5E.0020.0012] # HALFWIDTH KATAKANA LETTER E 32D3 ; [.3D5E.0020.0013] # CIRCLED KATAKANA E 3308 ; [.3D5E.0020.001C][.1C0E.0020.001C][.3D60.0020.001C][.1C0E.0020.001C] # SQUARE EEKAA 3307 ; [.3D5E.0020.001C][.3D67.0020.001C][.3D62.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE ESUKUUDO 3049 ; [.3D5F.0020.000D] # HIRAGANA LETTER SMALL O 304A ; [.3D5F.0020.000E] # HIRAGANA LETTER O 30A9 ; [.3D5F.0020.000F] # KATAKANA LETTER SMALL O FF6B ; [.3D5F.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL O 30AA ; [.3D5F.0020.0011] # KATAKANA LETTER O FF75 ; [.3D5F.0020.0012] # HALFWIDTH KATAKANA LETTER O 32D4 ; [.3D5F.0020.0013] # CIRCLED KATAKANA O 330A ; [.3D5F.0020.001C][.1C0E.0020.001C][.3D7B.0020.001C] # SQUARE OOMU 3309 ; [.3D5F.0020.001C][.3D8B.0020.001C][.3D67.0020.001C] # SQUARE ONSU 3095 ; [.3D60.0020.000D] # HIRAGANA LETTER SMALL KA 304B ; [.3D60.0020.000E] # HIRAGANA LETTER KA 30F5 ; [.3D60.0020.000F] # KATAKANA LETTER SMALL KA 30AB ; [.3D60.0020.0011] # KATAKANA LETTER KA FF76 ; [.3D60.0020.0012] # HALFWIDTH KATAKANA LETTER KA 32D5 ; [.3D60.0020.0013] # CIRCLED KATAKANA KA 304C ; [.3D60.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GA 30AC ; [.3D60.0020.0011][.0000.0037.0002] # KATAKANA LETTER GA 330B ; [.3D60.0020.001C][.3D5B.0020.001C][.3D83.0020.001C] # SQUARE KAIRI 330C ; [.3D60.0020.001C][.3D82.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE KARATTO 330D ; [.3D60.0020.001C][.3D86.0020.001C][.3D83.0020.001C][.1C0E.0020.001C] # SQUARE KARORII 330E ; [.3D60.0020.001C][.0000.0037.001C][.3D86.0020.001C][.3D8B.0020.001C] # SQUARE GARON 330F ; [.3D60.0020.001C][.0000.0037.001C][.3D8B.0020.001C][.3D79.0020.001C] # SQUARE GANMA 304D ; [.3D61.0020.000E] # HIRAGANA LETTER KI 30AD ; [.3D61.0020.0011] # KATAKANA LETTER KI FF77 ; [.3D61.0020.0012] # HALFWIDTH KATAKANA LETTER KI 32D6 ; [.3D61.0020.0013] # CIRCLED KATAKANA KI 304E ; [.3D61.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GI 30AE ; [.3D61.0020.0011][.0000.0037.0002] # KATAKANA LETTER GI 3310 ; [.3D61.0020.001C][.0000.0037.001C][.3D60.0020.001C][.0000.0037.001C] # SQUARE GIGA 3311 ; [.3D61.0020.001C][.0000.0037.001C][.3D70.0020.001C][.1C0E.0020.001C] # SQUARE GINII 3312 ; [.3D61.0020.001C][.3D7F.0020.001C][.3D83.0020.001C][.1C0E.0020.001C] # SQUARE KYURII 3313 ; [.3D61.0020.001C][.0000.0037.001C][.3D84.0020.001C][.3D6A.0020.001C][.0000.0037.001C][.1C0E.0020.001C] # SQUARE GIRUDAA 3314 ; [.3D61.0020.001C][.3D86.0020.001C] # SQUARE KIRO 3315 ; [.3D61.0020.001C][.3D86.0020.001C][.3D62.0020.001C][.0000.0037.001C][.3D82.0020.001C][.3D7B.0020.001C] # SQUARE KIROGURAMU 3316 ; [.3D61.0020.001C][.3D86.0020.001C][.3D7C.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE KIROMEETORU 3317 ; [.3D61.0020.001C][.3D86.0020.001C][.3D87.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE KIROWATTO 304F ; [.3D62.0020.000E] # HIRAGANA LETTER KU 31F0 ; [.3D62.0020.000F] # KATAKANA LETTER SMALL KU 30AF ; [.3D62.0020.0011] # KATAKANA LETTER KU FF78 ; [.3D62.0020.0012] # HALFWIDTH KATAKANA LETTER KU 32D7 ; [.3D62.0020.0013] # CIRCLED KATAKANA KU 3050 ; [.3D62.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GU 30B0 ; [.3D62.0020.0011][.0000.0037.0002] # KATAKANA LETTER GU 3318 ; [.3D62.0020.001C][.0000.0037.001C][.3D82.0020.001C][.3D7B.0020.001C] # SQUARE GURAMU 3319 ; [.3D62.0020.001C][.0000.0037.001C][.3D82.0020.001C][.3D7B.0020.001C][.3D6E.0020.001C][.3D8B.0020.001C] # SQUARE GURAMUTON 331A ; [.3D62.0020.001C][.3D84.0020.001C][.3D68.0020.001C][.0000.0037.001C][.3D5B.0020.001C][.3D86.0020.001C] # SQUARE KURUZEIRO 331B ; [.3D62.0020.001C][.3D86.0020.001C][.1C0E.0020.001C][.3D72.0020.001C] # SQUARE KUROONE 3096 ; [.3D63.0020.000D] # HIRAGANA LETTER SMALL KE 3051 ; [.3D63.0020.000E] # HIRAGANA LETTER KE 30F6 ; [.3D63.0020.000F] # KATAKANA LETTER SMALL KE 30B1 ; [.3D63.0020.0011] # KATAKANA LETTER KE FF79 ; [.3D63.0020.0012] # HALFWIDTH KATAKANA LETTER KE 32D8 ; [.3D63.0020.0013] # CIRCLED KATAKANA KE 3052 ; [.3D63.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GE 30B2 ; [.3D63.0020.0011][.0000.0037.0002] # KATAKANA LETTER GE 331C ; [.3D63.0020.001C][.1C0E.0020.001C][.3D67.0020.001C] # SQUARE KEESU 3053 ; [.3D64.0020.000E] # HIRAGANA LETTER KO 30B3 ; [.3D64.0020.0011] # KATAKANA LETTER KO FF7A ; [.3D64.0020.0012] # HALFWIDTH KATAKANA LETTER KO 32D9 ; [.3D64.0020.0013] # CIRCLED KATAKANA KO 3054 ; [.3D64.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GO 30B4 ; [.3D64.0020.0011][.0000.0037.0002] # KATAKANA LETTER GO 331E ; [.3D64.0020.001C][.1C0E.0020.001C][.3D78.0020.001C][.0000.0038.001C] # SQUARE KOOPO 1F201 ; [.3D64.0020.001C][.3D64.0020.001C] # SQUARED KATAKANA KOKO 30FF ; [.3D64.0020.0016][.3D6E.0020.0016] # KATAKANA DIGRAPH KOTO 331D ; [.3D64.0020.001C][.3D84.0020.001C][.3D6F.0020.001C] # SQUARE KORUNA 3055 ; [.3D65.0020.000E] # HIRAGANA LETTER SA 30B5 ; [.3D65.0020.0011] # KATAKANA LETTER SA FF7B ; [.3D65.0020.0012] # HALFWIDTH KATAKANA LETTER SA 32DA ; [.3D65.0020.0013] # CIRCLED KATAKANA SA 1F202 ; [.3D65.0020.001C] # SQUARED KATAKANA SA 3056 ; [.3D65.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZA 30B6 ; [.3D65.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZA 331F ; [.3D65.0020.001C][.3D5B.0020.001C][.3D62.0020.001C][.3D84.0020.001C] # SQUARE SAIKURU 3320 ; [.3D65.0020.001C][.3D8B.0020.001C][.3D6B.0020.001C][.1C0E.0020.001C][.3D7B.0020.001C] # SQUARE SANTIIMU 3057 ; [.3D66.0020.000E] # HIRAGANA LETTER SI 31F1 ; [.3D66.0020.000F] # KATAKANA LETTER SMALL SI 30B7 ; [.3D66.0020.0011] # KATAKANA LETTER SI FF7C ; [.3D66.0020.0012] # HALFWIDTH KATAKANA LETTER SI 32DB ; [.3D66.0020.0013] # CIRCLED KATAKANA SI 3058 ; [.3D66.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZI 30B8 ; [.3D66.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZI 3006 ; [.3D66.0020.0004][.3D7C.0020.0004] # IDEOGRAPHIC CLOSING MARK 3321 ; [.3D66.0020.001C][.3D83.0020.001C][.3D8B.0020.001C][.3D62.0020.001C][.0000.0037.001C] # SQUARE SIRINGU 3059 ; [.3D67.0020.000E] # HIRAGANA LETTER SU 31F2 ; [.3D67.0020.000F] # KATAKANA LETTER SMALL SU 30B9 ; [.3D67.0020.0011] # KATAKANA LETTER SU FF7D ; [.3D67.0020.0012] # HALFWIDTH KATAKANA LETTER SU 32DC ; [.3D67.0020.0013] # CIRCLED KATAKANA SU 305A ; [.3D67.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZU 30BA ; [.3D67.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZU 305B ; [.3D68.0020.000E] # HIRAGANA LETTER SE 30BB ; [.3D68.0020.0011] # KATAKANA LETTER SE FF7E ; [.3D68.0020.0012] # HALFWIDTH KATAKANA LETTER SE 32DD ; [.3D68.0020.0013] # CIRCLED KATAKANA SE 305C ; [.3D68.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZE 30BC ; [.3D68.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZE 3322 ; [.3D68.0020.001C][.3D8B.0020.001C][.3D6B.0020.001C] # SQUARE SENTI 3323 ; [.3D68.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C] # SQUARE SENTO 305D ; [.3D69.0020.000E] # HIRAGANA LETTER SO 30BD ; [.3D69.0020.0011] # KATAKANA LETTER SO FF7F ; [.3D69.0020.0012] # HALFWIDTH KATAKANA LETTER SO 32DE ; [.3D69.0020.0013] # CIRCLED KATAKANA SO 305E ; [.3D69.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZO 30BE ; [.3D69.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZO 305F ; [.3D6A.0020.000E] # HIRAGANA LETTER TA 30BF ; [.3D6A.0020.0011] # KATAKANA LETTER TA FF80 ; [.3D6A.0020.0012] # HALFWIDTH KATAKANA LETTER TA 32DF ; [.3D6A.0020.0013] # CIRCLED KATAKANA TA 3060 ; [.3D6A.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DA 30C0 ; [.3D6A.0020.0011][.0000.0037.0002] # KATAKANA LETTER DA 3324 ; [.3D6A.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D67.0020.001C] # SQUARE DAASU 3061 ; [.3D6B.0020.000E] # HIRAGANA LETTER TI 30C1 ; [.3D6B.0020.0011] # KATAKANA LETTER TI FF81 ; [.3D6B.0020.0012] # HALFWIDTH KATAKANA LETTER TI 32E0 ; [.3D6B.0020.0013] # CIRCLED KATAKANA TI 3062 ; [.3D6B.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DI 30C2 ; [.3D6B.0020.0011][.0000.0037.0002] # KATAKANA LETTER DI 3063 ; [.3D6C.0020.000D] # HIRAGANA LETTER SMALL TU 3064 ; [.3D6C.0020.000E] # HIRAGANA LETTER TU 30C3 ; [.3D6C.0020.000F] # KATAKANA LETTER SMALL TU FF6F ; [.3D6C.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL TU 30C4 ; [.3D6C.0020.0011] # KATAKANA LETTER TU FF82 ; [.3D6C.0020.0012] # HALFWIDTH KATAKANA LETTER TU 32E1 ; [.3D6C.0020.0013] # CIRCLED KATAKANA TU 3065 ; [.3D6C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DU 30C5 ; [.3D6C.0020.0011][.0000.0037.0002] # KATAKANA LETTER DU 3066 ; [.3D6D.0020.000E] # HIRAGANA LETTER TE 30C6 ; [.3D6D.0020.0011] # KATAKANA LETTER TE FF83 ; [.3D6D.0020.0012] # HALFWIDTH KATAKANA LETTER TE 32E2 ; [.3D6D.0020.0013] # CIRCLED KATAKANA TE 3067 ; [.3D6D.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DE 30C7 ; [.3D6D.0020.0011][.0000.0037.0002] # KATAKANA LETTER DE 1F213 ; [.3D6D.0020.001C][.0000.0037.001C] # SQUARED KATAKANA DE 3325 ; [.3D6D.0020.001C][.0000.0037.001C][.3D66.0020.001C] # SQUARE DESI 3068 ; [.3D6E.0020.000E] # HIRAGANA LETTER TO 31F3 ; [.3D6E.0020.000F] # KATAKANA LETTER SMALL TO 30C8 ; [.3D6E.0020.0011] # KATAKANA LETTER TO FF84 ; [.3D6E.0020.0012] # HALFWIDTH KATAKANA LETTER TO 32E3 ; [.3D6E.0020.0013] # CIRCLED KATAKANA TO 3069 ; [.3D6E.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DO 30C9 ; [.3D6E.0020.0011][.0000.0037.0002] # KATAKANA LETTER DO 3326 ; [.3D6E.0020.001C][.0000.0037.001C][.3D84.0020.001C] # SQUARE DORU 3327 ; [.3D6E.0020.001C][.3D8B.0020.001C] # SQUARE TON 306A ; [.3D6F.0020.000E] # HIRAGANA LETTER NA 30CA ; [.3D6F.0020.0011] # KATAKANA LETTER NA FF85 ; [.3D6F.0020.0012] # HALFWIDTH KATAKANA LETTER NA 32E4 ; [.3D6F.0020.0013] # CIRCLED KATAKANA NA 3328 ; [.3D6F.0020.001C][.3D73.0020.001C] # SQUARE NANO 306B ; [.3D70.0020.000E] # HIRAGANA LETTER NI 30CB ; [.3D70.0020.0011] # KATAKANA LETTER NI FF86 ; [.3D70.0020.0012] # HALFWIDTH KATAKANA LETTER NI 32E5 ; [.3D70.0020.0013] # CIRCLED KATAKANA NI 306C ; [.3D71.0020.000E] # HIRAGANA LETTER NU 31F4 ; [.3D71.0020.000F] # KATAKANA LETTER SMALL NU 30CC ; [.3D71.0020.0011] # KATAKANA LETTER NU FF87 ; [.3D71.0020.0012] # HALFWIDTH KATAKANA LETTER NU 32E6 ; [.3D71.0020.0013] # CIRCLED KATAKANA NU 306D ; [.3D72.0020.000E] # HIRAGANA LETTER NE 30CD ; [.3D72.0020.0011] # KATAKANA LETTER NE FF88 ; [.3D72.0020.0012] # HALFWIDTH KATAKANA LETTER NE 32E7 ; [.3D72.0020.0013] # CIRCLED KATAKANA NE 306E ; [.3D73.0020.000E] # HIRAGANA LETTER NO 30CE ; [.3D73.0020.0011] # KATAKANA LETTER NO FF89 ; [.3D73.0020.0012] # HALFWIDTH KATAKANA LETTER NO 32E8 ; [.3D73.0020.0013] # CIRCLED KATAKANA NO 3329 ; [.3D73.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE NOTTO 306F ; [.3D74.0020.000E] # HIRAGANA LETTER HA 31F5 ; [.3D74.0020.000F] # KATAKANA LETTER SMALL HA 30CF ; [.3D74.0020.0011] # KATAKANA LETTER HA FF8A ; [.3D74.0020.0012] # HALFWIDTH KATAKANA LETTER HA 32E9 ; [.3D74.0020.0013] # CIRCLED KATAKANA HA 3070 ; [.3D74.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BA 30D0 ; [.3D74.0020.0011][.0000.0037.0002] # KATAKANA LETTER BA 3071 ; [.3D74.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PA 30D1 ; [.3D74.0020.0011][.0000.0038.0002] # KATAKANA LETTER PA 332B ; [.3D74.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D68.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C] # SQUARE PAASENTO 332C ; [.3D74.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D6C.0020.001C] # SQUARE PAATU 332D ; [.3D74.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D85.0020.001C][.3D84.0020.001C] # SQUARE BAARERU 332A ; [.3D74.0020.001C][.3D5B.0020.001C][.3D6C.0020.001C] # SQUARE HAITU 3072 ; [.3D75.0020.000E] # HIRAGANA LETTER HI 31F6 ; [.3D75.0020.000F] # KATAKANA LETTER SMALL HI 30D2 ; [.3D75.0020.0011] # KATAKANA LETTER HI FF8B ; [.3D75.0020.0012] # HALFWIDTH KATAKANA LETTER HI 32EA ; [.3D75.0020.0013] # CIRCLED KATAKANA HI 3073 ; [.3D75.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BI 30D3 ; [.3D75.0020.0011][.0000.0037.0002] # KATAKANA LETTER BI 3074 ; [.3D75.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PI 30D4 ; [.3D75.0020.0011][.0000.0038.0002] # KATAKANA LETTER PI 332E ; [.3D75.0020.001C][.0000.0038.001C][.3D5A.0020.001C][.3D67.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE PIASUTORU 332F ; [.3D75.0020.001C][.0000.0038.001C][.3D62.0020.001C][.3D84.0020.001C] # SQUARE PIKURU 3330 ; [.3D75.0020.001C][.0000.0038.001C][.3D64.0020.001C] # SQUARE PIKO 3331 ; [.3D75.0020.001C][.0000.0037.001C][.3D84.0020.001C] # SQUARE BIRU 3075 ; [.3D76.0020.000E] # HIRAGANA LETTER HU 31F7 ; [.3D76.0020.000F] # KATAKANA LETTER SMALL HU 30D5 ; [.3D76.0020.0011] # KATAKANA LETTER HU FF8C ; [.3D76.0020.0012] # HALFWIDTH KATAKANA LETTER HU 32EB ; [.3D76.0020.0013] # CIRCLED KATAKANA HU 3076 ; [.3D76.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BU 30D6 ; [.3D76.0020.0011][.0000.0037.0002] # KATAKANA LETTER BU 3077 ; [.3D76.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PU 30D7 ; [.3D76.0020.0011][.0000.0038.0002] # KATAKANA LETTER PU 3332 ; [.3D76.0020.001C][.3D5A.0020.001C][.3D82.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE HUARADDO 3333 ; [.3D76.0020.001C][.3D5B.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C] # SQUARE HUIITO 3334 ; [.3D76.0020.001C][.0000.0037.001C][.3D6C.0020.001C][.3D66.0020.001C][.3D5E.0020.001C][.3D84.0020.001C] # SQUARE BUSSYERU 3335 ; [.3D76.0020.001C][.3D82.0020.001C][.3D8B.0020.001C] # SQUARE HURAN 3078 ; [.3D77.0020.000E] # HIRAGANA LETTER HE 31F8 ; [.3D77.0020.000F] # KATAKANA LETTER SMALL HE 30D8 ; [.3D77.0020.0011] # KATAKANA LETTER HE FF8D ; [.3D77.0020.0012] # HALFWIDTH KATAKANA LETTER HE 32EC ; [.3D77.0020.0013] # CIRCLED KATAKANA HE 3079 ; [.3D77.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BE 30D9 ; [.3D77.0020.0011][.0000.0037.0002] # KATAKANA LETTER BE 307A ; [.3D77.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PE 30DA ; [.3D77.0020.0011][.0000.0038.0002] # KATAKANA LETTER PE 333B ; [.3D77.0020.001C][.0000.0038.001C][.1C0E.0020.001C][.3D66.0020.001C][.0000.0037.001C] # SQUARE PEEZI 333C ; [.3D77.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D6A.0020.001C] # SQUARE BEETA 3336 ; [.3D77.0020.001C][.3D62.0020.001C][.3D6A.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE HEKUTAARU 3337 ; [.3D77.0020.001C][.0000.0038.001C][.3D69.0020.001C] # SQUARE PESO 3338 ; [.3D77.0020.001C][.0000.0038.001C][.3D70.0020.001C][.3D75.0020.001C] # SQUARE PENIHI 3339 ; [.3D77.0020.001C][.3D84.0020.001C][.3D6C.0020.001C] # SQUARE HERUTU 333A ; [.3D77.0020.001C][.0000.0038.001C][.3D8B.0020.001C][.3D67.0020.001C] # SQUARE PENSU 307B ; [.3D78.0020.000E] # HIRAGANA LETTER HO 31F9 ; [.3D78.0020.000F] # KATAKANA LETTER SMALL HO 30DB ; [.3D78.0020.0011] # KATAKANA LETTER HO FF8E ; [.3D78.0020.0012] # HALFWIDTH KATAKANA LETTER HO 32ED ; [.3D78.0020.0013] # CIRCLED KATAKANA HO 307C ; [.3D78.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BO 30DC ; [.3D78.0020.0011][.0000.0037.0002] # KATAKANA LETTER BO 307D ; [.3D78.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PO 30DD ; [.3D78.0020.0011][.0000.0038.0002] # KATAKANA LETTER PO 3341 ; [.3D78.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE HOORU 3342 ; [.3D78.0020.001C][.1C0E.0020.001C][.3D8B.0020.001C] # SQUARE HOON 333D ; [.3D78.0020.001C][.0000.0038.001C][.3D5B.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C] # SQUARE POINTO 1F200 ; [.3D78.0020.001C][.3D60.0020.001C] # SQUARE HIRAGANA HOKA 333E ; [.3D78.0020.001C][.0000.0037.001C][.3D84.0020.001C][.3D6E.0020.001C] # SQUARE BORUTO 333F ; [.3D78.0020.001C][.3D8B.0020.001C] # SQUARE HON 3340 ; [.3D78.0020.001C][.0000.0038.001C][.3D8B.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE PONDO 307E ; [.3D79.0020.000E] # HIRAGANA LETTER MA 30DE ; [.3D79.0020.0011] # KATAKANA LETTER MA FF8F ; [.3D79.0020.0012] # HALFWIDTH KATAKANA LETTER MA 32EE ; [.3D79.0020.0013] # CIRCLED KATAKANA MA 3343 ; [.3D79.0020.001C][.3D5B.0020.001C][.3D62.0020.001C][.3D86.0020.001C] # SQUARE MAIKURO 3344 ; [.3D79.0020.001C][.3D5B.0020.001C][.3D84.0020.001C] # SQUARE MAIRU 303C ; [.3D79.0020.0004][.3D67.0020.0004] # MASU MARK 3345 ; [.3D79.0020.001C][.3D6C.0020.001C][.3D74.0020.001C] # SQUARE MAHHA 3346 ; [.3D79.0020.001C][.3D84.0020.001C][.3D62.0020.001C] # SQUARE MARUKU 3347 ; [.3D79.0020.001C][.3D8B.0020.001C][.3D66.0020.001C][.3D81.0020.001C][.3D8B.0020.001C] # SQUARE MANSYON 307F ; [.3D7A.0020.000E] # HIRAGANA LETTER MI 30DF ; [.3D7A.0020.0011] # KATAKANA LETTER MI FF90 ; [.3D7A.0020.0012] # HALFWIDTH KATAKANA LETTER MI 32EF ; [.3D7A.0020.0013] # CIRCLED KATAKANA MI 3348 ; [.3D7A.0020.001C][.3D62.0020.001C][.3D86.0020.001C][.3D8B.0020.001C] # SQUARE MIKURON 3349 ; [.3D7A.0020.001C][.3D83.0020.001C] # SQUARE MIRI 334A ; [.3D7A.0020.001C][.3D83.0020.001C][.3D74.0020.001C][.0000.0037.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE MIRIBAARU 3080 ; [.3D7B.0020.000E] # HIRAGANA LETTER MU 31FA ; [.3D7B.0020.000F] # KATAKANA LETTER SMALL MU 30E0 ; [.3D7B.0020.0011] # KATAKANA LETTER MU FF91 ; [.3D7B.0020.0012] # HALFWIDTH KATAKANA LETTER MU 32F0 ; [.3D7B.0020.0013] # CIRCLED KATAKANA MU 3081 ; [.3D7C.0020.000E] # HIRAGANA LETTER ME 30E1 ; [.3D7C.0020.0011] # KATAKANA LETTER ME FF92 ; [.3D7C.0020.0012] # HALFWIDTH KATAKANA LETTER ME 32F1 ; [.3D7C.0020.0013] # CIRCLED KATAKANA ME 334D ; [.3D7C.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE MEETORU 334B ; [.3D7C.0020.001C][.3D60.0020.001C][.0000.0037.001C] # SQUARE MEGA 334C ; [.3D7C.0020.001C][.3D60.0020.001C][.0000.0037.001C][.3D6E.0020.001C][.3D8B.0020.001C] # SQUARE MEGATON 3082 ; [.3D7D.0020.000E] # HIRAGANA LETTER MO 30E2 ; [.3D7D.0020.0011] # KATAKANA LETTER MO FF93 ; [.3D7D.0020.0012] # HALFWIDTH KATAKANA LETTER MO 32F2 ; [.3D7D.0020.0013] # CIRCLED KATAKANA MO 3083 ; [.3D7E.0020.000D] # HIRAGANA LETTER SMALL YA 3084 ; [.3D7E.0020.000E] # HIRAGANA LETTER YA 30E3 ; [.3D7E.0020.000F] # KATAKANA LETTER SMALL YA FF6C ; [.3D7E.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YA 30E4 ; [.3D7E.0020.0011] # KATAKANA LETTER YA FF94 ; [.3D7E.0020.0012] # HALFWIDTH KATAKANA LETTER YA 32F3 ; [.3D7E.0020.0013] # CIRCLED KATAKANA YA 334E ; [.3D7E.0020.001C][.1C0E.0020.001C][.3D6E.0020.001C][.0000.0037.001C] # SQUARE YAADO 334F ; [.3D7E.0020.001C][.1C0E.0020.001C][.3D84.0020.001C] # SQUARE YAARU 3085 ; [.3D7F.0020.000D] # HIRAGANA LETTER SMALL YU 3086 ; [.3D7F.0020.000E] # HIRAGANA LETTER YU 30E5 ; [.3D7F.0020.000F] # KATAKANA LETTER SMALL YU FF6D ; [.3D7F.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YU 30E6 ; [.3D7F.0020.0011] # KATAKANA LETTER YU FF95 ; [.3D7F.0020.0012] # HALFWIDTH KATAKANA LETTER YU 32F4 ; [.3D7F.0020.0013] # CIRCLED KATAKANA YU 3350 ; [.3D7F.0020.001C][.3D5A.0020.001C][.3D8B.0020.001C] # SQUARE YUAN 1B001 ; [.3D80.0020.000E] # HIRAGANA LETTER ARCHAIC YE 3087 ; [.3D81.0020.000D] # HIRAGANA LETTER SMALL YO 3088 ; [.3D81.0020.000E] # HIRAGANA LETTER YO 30E7 ; [.3D81.0020.000F] # KATAKANA LETTER SMALL YO FF6E ; [.3D81.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YO 30E8 ; [.3D81.0020.0011] # KATAKANA LETTER YO FF96 ; [.3D81.0020.0012] # HALFWIDTH KATAKANA LETTER YO 32F5 ; [.3D81.0020.0013] # CIRCLED KATAKANA YO 309F ; [.3D81.0020.0016][.3D83.0020.0016] # HIRAGANA DIGRAPH YORI 3089 ; [.3D82.0020.000E] # HIRAGANA LETTER RA 31FB ; [.3D82.0020.000F] # KATAKANA LETTER SMALL RA 30E9 ; [.3D82.0020.0011] # KATAKANA LETTER RA FF97 ; [.3D82.0020.0012] # HALFWIDTH KATAKANA LETTER RA 32F6 ; [.3D82.0020.0013] # CIRCLED KATAKANA RA 308A ; [.3D83.0020.000E] # HIRAGANA LETTER RI 31FC ; [.3D83.0020.000F] # KATAKANA LETTER SMALL RI 30EA ; [.3D83.0020.0011] # KATAKANA LETTER RI FF98 ; [.3D83.0020.0012] # HALFWIDTH KATAKANA LETTER RI 32F7 ; [.3D83.0020.0013] # CIRCLED KATAKANA RI 3351 ; [.3D83.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C][.3D84.0020.001C] # SQUARE RITTORU 3352 ; [.3D83.0020.001C][.3D82.0020.001C] # SQUARE RIRA 308B ; [.3D84.0020.000E] # HIRAGANA LETTER RU 31FD ; [.3D84.0020.000F] # KATAKANA LETTER SMALL RU 30EB ; [.3D84.0020.0011] # KATAKANA LETTER RU FF99 ; [.3D84.0020.0012] # HALFWIDTH KATAKANA LETTER RU 32F8 ; [.3D84.0020.0013] # CIRCLED KATAKANA RU 3354 ; [.3D84.0020.001C][.1C0E.0020.001C][.3D76.0020.001C][.0000.0037.001C][.3D84.0020.001C] # SQUARE RUUBURU 3353 ; [.3D84.0020.001C][.3D75.0020.001C][.0000.0038.001C][.1C0E.0020.001C] # SQUARE RUPII 308C ; [.3D85.0020.000E] # HIRAGANA LETTER RE 31FE ; [.3D85.0020.000F] # KATAKANA LETTER SMALL RE 30EC ; [.3D85.0020.0011] # KATAKANA LETTER RE FF9A ; [.3D85.0020.0012] # HALFWIDTH KATAKANA LETTER RE 32F9 ; [.3D85.0020.0013] # CIRCLED KATAKANA RE 3355 ; [.3D85.0020.001C][.3D7B.0020.001C] # SQUARE REMU 3356 ; [.3D85.0020.001C][.3D8B.0020.001C][.3D6E.0020.001C][.3D63.0020.001C][.0000.0037.001C][.3D8B.0020.001C] # SQUARE RENTOGEN 308D ; [.3D86.0020.000E] # HIRAGANA LETTER RO 31FF ; [.3D86.0020.000F] # KATAKANA LETTER SMALL RO 30ED ; [.3D86.0020.0011] # KATAKANA LETTER RO FF9B ; [.3D86.0020.0012] # HALFWIDTH KATAKANA LETTER RO 32FA ; [.3D86.0020.0013] # CIRCLED KATAKANA RO 308E ; [.3D87.0020.000D] # HIRAGANA LETTER SMALL WA 308F ; [.3D87.0020.000E] # HIRAGANA LETTER WA 30EE ; [.3D87.0020.000F] # KATAKANA LETTER SMALL WA 30EF ; [.3D87.0020.0011] # KATAKANA LETTER WA FF9C ; [.3D87.0020.0012] # HALFWIDTH KATAKANA LETTER WA 32FB ; [.3D87.0020.0013] # CIRCLED KATAKANA WA 30F7 ; [.3D87.0020.0011][.0000.0037.0002] # KATAKANA LETTER VA 3357 ; [.3D87.0020.001C][.3D6C.0020.001C][.3D6E.0020.001C] # SQUARE WATTO 3090 ; [.3D88.0020.000E] # HIRAGANA LETTER WI 30F0 ; [.3D88.0020.0011] # KATAKANA LETTER WI 32FC ; [.3D88.0020.0013] # CIRCLED KATAKANA WI 30F8 ; [.3D88.0020.0011][.0000.0037.0002] # KATAKANA LETTER VI 3091 ; [.3D89.0020.000E] # HIRAGANA LETTER WE 30F1 ; [.3D89.0020.0011] # KATAKANA LETTER WE 32FD ; [.3D89.0020.0013] # CIRCLED KATAKANA WE 30F9 ; [.3D89.0020.0011][.0000.0037.0002] # KATAKANA LETTER VE 3092 ; [.3D8A.0020.000E] # HIRAGANA LETTER WO 30F2 ; [.3D8A.0020.0011] # KATAKANA LETTER WO FF66 ; [.3D8A.0020.0012] # HALFWIDTH KATAKANA LETTER WO 32FE ; [.3D8A.0020.0013] # CIRCLED KATAKANA WO 30FA ; [.3D8A.0020.0011][.0000.0037.0002] # KATAKANA LETTER VO 3093 ; [.3D8B.0020.000E] # HIRAGANA LETTER N 30F3 ; [.3D8B.0020.0011] # KATAKANA LETTER N FF9D ; [.3D8B.0020.0012] # HALFWIDTH KATAKANA LETTER N 3105 ; [.3D8C.0020.0002] # BOPOMOFO LETTER B 31A0 ; [.3D8C.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER BU 3106 ; [.3D8D.0020.0002] # BOPOMOFO LETTER P 31B4 ; [.3D8D.0020.0019] # BOPOMOFO FINAL LETTER P 3107 ; [.3D8E.0020.0002] # BOPOMOFO LETTER M 3108 ; [.3D8F.0020.0002] # BOPOMOFO LETTER F 312A ; [.3D90.0020.0002] # BOPOMOFO LETTER V 3109 ; [.3D91.0020.0002] # BOPOMOFO LETTER D 310A ; [.3D92.0020.0002] # BOPOMOFO LETTER T 31B5 ; [.3D92.0020.0019] # BOPOMOFO FINAL LETTER T 310B ; [.3D93.0020.0002] # BOPOMOFO LETTER N 310C ; [.3D94.0020.0002] # BOPOMOFO LETTER L 310D ; [.3D95.0020.0002] # BOPOMOFO LETTER G 31A3 ; [.3D95.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER GU 310E ; [.3D96.0020.0002] # BOPOMOFO LETTER K 31B6 ; [.3D96.0020.0019] # BOPOMOFO FINAL LETTER K 312B ; [.3D97.0020.0002] # BOPOMOFO LETTER NG 31AD ; [.3D98.0020.0002] # BOPOMOFO LETTER NGG 310F ; [.3D99.0020.0002] # BOPOMOFO LETTER H 31B7 ; [.3D99.0020.0019] # BOPOMOFO FINAL LETTER H 3110 ; [.3D9A.0020.0002] # BOPOMOFO LETTER J 31A2 ; [.3D9A.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER JI 3111 ; [.3D9B.0020.0002] # BOPOMOFO LETTER Q 3112 ; [.3D9C.0020.0002] # BOPOMOFO LETTER X 312C ; [.3D9D.0020.0002] # BOPOMOFO LETTER GN 3113 ; [.3D9E.0020.0002] # BOPOMOFO LETTER ZH 3114 ; [.3D9F.0020.0002] # BOPOMOFO LETTER CH 3115 ; [.3DA0.0020.0002] # BOPOMOFO LETTER SH 3116 ; [.3DA1.0020.0002] # BOPOMOFO LETTER R 3117 ; [.3DA2.0020.0002] # BOPOMOFO LETTER Z 31A1 ; [.3DA2.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ZI 3118 ; [.3DA3.0020.0002] # BOPOMOFO LETTER C 3119 ; [.3DA4.0020.0002] # BOPOMOFO LETTER S 31B8 ; [.3DA5.0020.0002] # BOPOMOFO LETTER GH 31B9 ; [.3DA6.0020.0002] # BOPOMOFO LETTER LH 31BA ; [.3DA7.0020.0002] # BOPOMOFO LETTER ZY 311A ; [.3DA8.0020.0002] # BOPOMOFO LETTER A 31A9 ; [.3DA8.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ANN 311B ; [.3DA9.0020.0002] # BOPOMOFO LETTER O 31A7 ; [.3DA9.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ONN 31A6 ; [.3DAA.0020.0002] # BOPOMOFO LETTER OO 311C ; [.3DAB.0020.0002] # BOPOMOFO LETTER E 311D ; [.3DAC.0020.0002] # BOPOMOFO LETTER EH 31A4 ; [.3DAD.0020.0002] # BOPOMOFO LETTER EE 31A5 ; [.3DAD.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER ENN 311E ; [.3DAE.0020.0002] # BOPOMOFO LETTER AI 31AE ; [.3DAE.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER AINN 311F ; [.3DAF.0020.0002] # BOPOMOFO LETTER EI 3120 ; [.3DB0.0020.0002] # BOPOMOFO LETTER AU 31AF ; [.3DB0.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER AUNN 3121 ; [.3DB1.0020.0002] # BOPOMOFO LETTER OU 3122 ; [.3DB2.0020.0002] # BOPOMOFO LETTER AN 3123 ; [.3DB3.0020.0002] # BOPOMOFO LETTER EN 3124 ; [.3DB4.0020.0002] # BOPOMOFO LETTER ANG 31B2 ; [.3DB5.0020.0002] # BOPOMOFO LETTER ONG 3125 ; [.3DB6.0020.0002] # BOPOMOFO LETTER ENG 31B0 ; [.3DB7.0020.0002] # BOPOMOFO LETTER AM 31B1 ; [.3DB8.0020.0002] # BOPOMOFO LETTER OM 31AC ; [.3DB9.0020.0002] # BOPOMOFO LETTER IM 3126 ; [.3DBA.0020.0002] # BOPOMOFO LETTER ER 3127 ; [.3DBB.0020.0002] # BOPOMOFO LETTER I 31AA ; [.3DBB.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER INN 31B3 ; [.3DBB.0020.0016][.0000.0111.0016] # BOPOMOFO LETTER INNN 3128 ; [.3DBC.0020.0002] # BOPOMOFO LETTER U 31AB ; [.3DBC.0020.0004][.0000.0111.0004] # BOPOMOFO LETTER UNN 31A8 ; [.3DBC.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER IR 3129 ; [.3DBD.0020.0002] # BOPOMOFO LETTER IU 312D ; [.3DBE.0020.0002] # BOPOMOFO LETTER IH A000 ; [.3DBF.0020.0002] # YI SYLLABLE IT A001 ; [.3DC0.0020.0002] # YI SYLLABLE IX A002 ; [.3DC1.0020.0002] # YI SYLLABLE I A003 ; [.3DC2.0020.0002] # YI SYLLABLE IP A004 ; [.3DC3.0020.0002] # YI SYLLABLE IET A005 ; [.3DC4.0020.0002] # YI SYLLABLE IEX A006 ; [.3DC5.0020.0002] # YI SYLLABLE IE A007 ; [.3DC6.0020.0002] # YI SYLLABLE IEP A008 ; [.3DC7.0020.0002] # YI SYLLABLE AT A009 ; [.3DC8.0020.0002] # YI SYLLABLE AX A00A ; [.3DC9.0020.0002] # YI SYLLABLE A A00B ; [.3DCA.0020.0002] # YI SYLLABLE AP A00C ; [.3DCB.0020.0002] # YI SYLLABLE UOX A00D ; [.3DCC.0020.0002] # YI SYLLABLE UO A00E ; [.3DCD.0020.0002] # YI SYLLABLE UOP A00F ; [.3DCE.0020.0002] # YI SYLLABLE OT A010 ; [.3DCF.0020.0002] # YI SYLLABLE OX A011 ; [.3DD0.0020.0002] # YI SYLLABLE O A012 ; [.3DD1.0020.0002] # YI SYLLABLE OP A013 ; [.3DD2.0020.0002] # YI SYLLABLE EX A014 ; [.3DD3.0020.0002] # YI SYLLABLE E A015 ; [.3DD4.0020.0002] # YI SYLLABLE WU A016 ; [.3DD5.0020.0002] # YI SYLLABLE BIT A017 ; [.3DD6.0020.0002] # YI SYLLABLE BIX A018 ; [.3DD7.0020.0002] # YI SYLLABLE BI A019 ; [.3DD8.0020.0002] # YI SYLLABLE BIP A01A ; [.3DD9.0020.0002] # YI SYLLABLE BIET A01B ; [.3DDA.0020.0002] # YI SYLLABLE BIEX A01C ; [.3DDB.0020.0002] # YI SYLLABLE BIE A01D ; [.3DDC.0020.0002] # YI SYLLABLE BIEP A01E ; [.3DDD.0020.0002] # YI SYLLABLE BAT A01F ; [.3DDE.0020.0002] # YI SYLLABLE BAX A020 ; [.3DDF.0020.0002] # YI SYLLABLE BA A021 ; [.3DE0.0020.0002] # YI SYLLABLE BAP A022 ; [.3DE1.0020.0002] # YI SYLLABLE BUOX A023 ; [.3DE2.0020.0002] # YI SYLLABLE BUO A024 ; [.3DE3.0020.0002] # YI SYLLABLE BUOP A025 ; [.3DE4.0020.0002] # YI SYLLABLE BOT A026 ; [.3DE5.0020.0002] # YI SYLLABLE BOX A027 ; [.3DE6.0020.0002] # YI SYLLABLE BO A028 ; [.3DE7.0020.0002] # YI SYLLABLE BOP A029 ; [.3DE8.0020.0002] # YI SYLLABLE BEX A02A ; [.3DE9.0020.0002] # YI SYLLABLE BE A02B ; [.3DEA.0020.0002] # YI SYLLABLE BEP A02C ; [.3DEB.0020.0002] # YI SYLLABLE BUT A02D ; [.3DEC.0020.0002] # YI SYLLABLE BUX A02E ; [.3DED.0020.0002] # YI SYLLABLE BU A02F ; [.3DEE.0020.0002] # YI SYLLABLE BUP A030 ; [.3DEF.0020.0002] # YI SYLLABLE BURX A031 ; [.3DF0.0020.0002] # YI SYLLABLE BUR A032 ; [.3DF1.0020.0002] # YI SYLLABLE BYT A033 ; [.3DF2.0020.0002] # YI SYLLABLE BYX A034 ; [.3DF3.0020.0002] # YI SYLLABLE BY A035 ; [.3DF4.0020.0002] # YI SYLLABLE BYP A036 ; [.3DF5.0020.0002] # YI SYLLABLE BYRX A037 ; [.3DF6.0020.0002] # YI SYLLABLE BYR A038 ; [.3DF7.0020.0002] # YI SYLLABLE PIT A039 ; [.3DF8.0020.0002] # YI SYLLABLE PIX A03A ; [.3DF9.0020.0002] # YI SYLLABLE PI A03B ; [.3DFA.0020.0002] # YI SYLLABLE PIP A03C ; [.3DFB.0020.0002] # YI SYLLABLE PIEX A03D ; [.3DFC.0020.0002] # YI SYLLABLE PIE A03E ; [.3DFD.0020.0002] # YI SYLLABLE PIEP A03F ; [.3DFE.0020.0002] # YI SYLLABLE PAT A040 ; [.3DFF.0020.0002] # YI SYLLABLE PAX A041 ; [.3E00.0020.0002] # YI SYLLABLE PA A042 ; [.3E01.0020.0002] # YI SYLLABLE PAP A043 ; [.3E02.0020.0002] # YI SYLLABLE PUOX A044 ; [.3E03.0020.0002] # YI SYLLABLE PUO A045 ; [.3E04.0020.0002] # YI SYLLABLE PUOP A046 ; [.3E05.0020.0002] # YI SYLLABLE POT A047 ; [.3E06.0020.0002] # YI SYLLABLE POX A048 ; [.3E07.0020.0002] # YI SYLLABLE PO A049 ; [.3E08.0020.0002] # YI SYLLABLE POP A04A ; [.3E09.0020.0002] # YI SYLLABLE PUT A04B ; [.3E0A.0020.0002] # YI SYLLABLE PUX A04C ; [.3E0B.0020.0002] # YI SYLLABLE PU A04D ; [.3E0C.0020.0002] # YI SYLLABLE PUP A04E ; [.3E0D.0020.0002] # YI SYLLABLE PURX A04F ; [.3E0E.0020.0002] # YI SYLLABLE PUR A050 ; [.3E0F.0020.0002] # YI SYLLABLE PYT A051 ; [.3E10.0020.0002] # YI SYLLABLE PYX A052 ; [.3E11.0020.0002] # YI SYLLABLE PY A053 ; [.3E12.0020.0002] # YI SYLLABLE PYP A054 ; [.3E13.0020.0002] # YI SYLLABLE PYRX A055 ; [.3E14.0020.0002] # YI SYLLABLE PYR A056 ; [.3E15.0020.0002] # YI SYLLABLE BBIT A057 ; [.3E16.0020.0002] # YI SYLLABLE BBIX A058 ; [.3E17.0020.0002] # YI SYLLABLE BBI A059 ; [.3E18.0020.0002] # YI SYLLABLE BBIP A05A ; [.3E19.0020.0002] # YI SYLLABLE BBIET A05B ; [.3E1A.0020.0002] # YI SYLLABLE BBIEX A05C ; [.3E1B.0020.0002] # YI SYLLABLE BBIE A05D ; [.3E1C.0020.0002] # YI SYLLABLE BBIEP A05E ; [.3E1D.0020.0002] # YI SYLLABLE BBAT A05F ; [.3E1E.0020.0002] # YI SYLLABLE BBAX A060 ; [.3E1F.0020.0002] # YI SYLLABLE BBA A061 ; [.3E20.0020.0002] # YI SYLLABLE BBAP A062 ; [.3E21.0020.0002] # YI SYLLABLE BBUOX A063 ; [.3E22.0020.0002] # YI SYLLABLE BBUO A064 ; [.3E23.0020.0002] # YI SYLLABLE BBUOP A065 ; [.3E24.0020.0002] # YI SYLLABLE BBOT A066 ; [.3E25.0020.0002] # YI SYLLABLE BBOX A067 ; [.3E26.0020.0002] # YI SYLLABLE BBO A068 ; [.3E27.0020.0002] # YI SYLLABLE BBOP A069 ; [.3E28.0020.0002] # YI SYLLABLE BBEX A06A ; [.3E29.0020.0002] # YI SYLLABLE BBE A06B ; [.3E2A.0020.0002] # YI SYLLABLE BBEP A06C ; [.3E2B.0020.0002] # YI SYLLABLE BBUT A06D ; [.3E2C.0020.0002] # YI SYLLABLE BBUX A06E ; [.3E2D.0020.0002] # YI SYLLABLE BBU A06F ; [.3E2E.0020.0002] # YI SYLLABLE BBUP A070 ; [.3E2F.0020.0002] # YI SYLLABLE BBURX A071 ; [.3E30.0020.0002] # YI SYLLABLE BBUR A072 ; [.3E31.0020.0002] # YI SYLLABLE BBYT A073 ; [.3E32.0020.0002] # YI SYLLABLE BBYX A074 ; [.3E33.0020.0002] # YI SYLLABLE BBY A075 ; [.3E34.0020.0002] # YI SYLLABLE BBYP A076 ; [.3E35.0020.0002] # YI SYLLABLE NBIT A077 ; [.3E36.0020.0002] # YI SYLLABLE NBIX A078 ; [.3E37.0020.0002] # YI SYLLABLE NBI A079 ; [.3E38.0020.0002] # YI SYLLABLE NBIP A07A ; [.3E39.0020.0002] # YI SYLLABLE NBIEX A07B ; [.3E3A.0020.0002] # YI SYLLABLE NBIE A07C ; [.3E3B.0020.0002] # YI SYLLABLE NBIEP A07D ; [.3E3C.0020.0002] # YI SYLLABLE NBAT A07E ; [.3E3D.0020.0002] # YI SYLLABLE NBAX A07F ; [.3E3E.0020.0002] # YI SYLLABLE NBA A080 ; [.3E3F.0020.0002] # YI SYLLABLE NBAP A081 ; [.3E40.0020.0002] # YI SYLLABLE NBOT A082 ; [.3E41.0020.0002] # YI SYLLABLE NBOX A083 ; [.3E42.0020.0002] # YI SYLLABLE NBO A084 ; [.3E43.0020.0002] # YI SYLLABLE NBOP A085 ; [.3E44.0020.0002] # YI SYLLABLE NBUT A086 ; [.3E45.0020.0002] # YI SYLLABLE NBUX A087 ; [.3E46.0020.0002] # YI SYLLABLE NBU A088 ; [.3E47.0020.0002] # YI SYLLABLE NBUP A089 ; [.3E48.0020.0002] # YI SYLLABLE NBURX A08A ; [.3E49.0020.0002] # YI SYLLABLE NBUR A08B ; [.3E4A.0020.0002] # YI SYLLABLE NBYT A08C ; [.3E4B.0020.0002] # YI SYLLABLE NBYX A08D ; [.3E4C.0020.0002] # YI SYLLABLE NBY A08E ; [.3E4D.0020.0002] # YI SYLLABLE NBYP A08F ; [.3E4E.0020.0002] # YI SYLLABLE NBYRX A090 ; [.3E4F.0020.0002] # YI SYLLABLE NBYR A091 ; [.3E50.0020.0002] # YI SYLLABLE HMIT A092 ; [.3E51.0020.0002] # YI SYLLABLE HMIX A093 ; [.3E52.0020.0002] # YI SYLLABLE HMI A094 ; [.3E53.0020.0002] # YI SYLLABLE HMIP A095 ; [.3E54.0020.0002] # YI SYLLABLE HMIEX A096 ; [.3E55.0020.0002] # YI SYLLABLE HMIE A097 ; [.3E56.0020.0002] # YI SYLLABLE HMIEP A098 ; [.3E57.0020.0002] # YI SYLLABLE HMAT A099 ; [.3E58.0020.0002] # YI SYLLABLE HMAX A09A ; [.3E59.0020.0002] # YI SYLLABLE HMA A09B ; [.3E5A.0020.0002] # YI SYLLABLE HMAP A09C ; [.3E5B.0020.0002] # YI SYLLABLE HMUOX A09D ; [.3E5C.0020.0002] # YI SYLLABLE HMUO A09E ; [.3E5D.0020.0002] # YI SYLLABLE HMUOP A09F ; [.3E5E.0020.0002] # YI SYLLABLE HMOT A0A0 ; [.3E5F.0020.0002] # YI SYLLABLE HMOX A0A1 ; [.3E60.0020.0002] # YI SYLLABLE HMO A0A2 ; [.3E61.0020.0002] # YI SYLLABLE HMOP A0A3 ; [.3E62.0020.0002] # YI SYLLABLE HMUT A0A4 ; [.3E63.0020.0002] # YI SYLLABLE HMUX A0A5 ; [.3E64.0020.0002] # YI SYLLABLE HMU A0A6 ; [.3E65.0020.0002] # YI SYLLABLE HMUP A0A7 ; [.3E66.0020.0002] # YI SYLLABLE HMURX A0A8 ; [.3E67.0020.0002] # YI SYLLABLE HMUR A0A9 ; [.3E68.0020.0002] # YI SYLLABLE HMYX A0AA ; [.3E69.0020.0002] # YI SYLLABLE HMY A0AB ; [.3E6A.0020.0002] # YI SYLLABLE HMYP A0AC ; [.3E6B.0020.0002] # YI SYLLABLE HMYRX A0AD ; [.3E6C.0020.0002] # YI SYLLABLE HMYR A0AE ; [.3E6D.0020.0002] # YI SYLLABLE MIT A0AF ; [.3E6E.0020.0002] # YI SYLLABLE MIX A0B0 ; [.3E6F.0020.0002] # YI SYLLABLE MI A0B1 ; [.3E70.0020.0002] # YI SYLLABLE MIP A0B2 ; [.3E71.0020.0002] # YI SYLLABLE MIEX A0B3 ; [.3E72.0020.0002] # YI SYLLABLE MIE A0B4 ; [.3E73.0020.0002] # YI SYLLABLE MIEP A0B5 ; [.3E74.0020.0002] # YI SYLLABLE MAT A0B6 ; [.3E75.0020.0002] # YI SYLLABLE MAX A0B7 ; [.3E76.0020.0002] # YI SYLLABLE MA A0B8 ; [.3E77.0020.0002] # YI SYLLABLE MAP A0B9 ; [.3E78.0020.0002] # YI SYLLABLE MUOT A0BA ; [.3E79.0020.0002] # YI SYLLABLE MUOX A0BB ; [.3E7A.0020.0002] # YI SYLLABLE MUO A0BC ; [.3E7B.0020.0002] # YI SYLLABLE MUOP A0BD ; [.3E7C.0020.0002] # YI SYLLABLE MOT A0BE ; [.3E7D.0020.0002] # YI SYLLABLE MOX A0BF ; [.3E7E.0020.0002] # YI SYLLABLE MO A0C0 ; [.3E7F.0020.0002] # YI SYLLABLE MOP A0C1 ; [.3E80.0020.0002] # YI SYLLABLE MEX A0C2 ; [.3E81.0020.0002] # YI SYLLABLE ME A0C3 ; [.3E82.0020.0002] # YI SYLLABLE MUT A0C4 ; [.3E83.0020.0002] # YI SYLLABLE MUX A0C5 ; [.3E84.0020.0002] # YI SYLLABLE MU A0C6 ; [.3E85.0020.0002] # YI SYLLABLE MUP A0C7 ; [.3E86.0020.0002] # YI SYLLABLE MURX A0C8 ; [.3E87.0020.0002] # YI SYLLABLE MUR A0C9 ; [.3E88.0020.0002] # YI SYLLABLE MYT A0CA ; [.3E89.0020.0002] # YI SYLLABLE MYX A0CB ; [.3E8A.0020.0002] # YI SYLLABLE MY A0CC ; [.3E8B.0020.0002] # YI SYLLABLE MYP A0CD ; [.3E8C.0020.0002] # YI SYLLABLE FIT A0CE ; [.3E8D.0020.0002] # YI SYLLABLE FIX A0CF ; [.3E8E.0020.0002] # YI SYLLABLE FI A0D0 ; [.3E8F.0020.0002] # YI SYLLABLE FIP A0D1 ; [.3E90.0020.0002] # YI SYLLABLE FAT A0D2 ; [.3E91.0020.0002] # YI SYLLABLE FAX A0D3 ; [.3E92.0020.0002] # YI SYLLABLE FA A0D4 ; [.3E93.0020.0002] # YI SYLLABLE FAP A0D5 ; [.3E94.0020.0002] # YI SYLLABLE FOX A0D6 ; [.3E95.0020.0002] # YI SYLLABLE FO A0D7 ; [.3E96.0020.0002] # YI SYLLABLE FOP A0D8 ; [.3E97.0020.0002] # YI SYLLABLE FUT A0D9 ; [.3E98.0020.0002] # YI SYLLABLE FUX A0DA ; [.3E99.0020.0002] # YI SYLLABLE FU A0DB ; [.3E9A.0020.0002] # YI SYLLABLE FUP A0DC ; [.3E9B.0020.0002] # YI SYLLABLE FURX A0DD ; [.3E9C.0020.0002] # YI SYLLABLE FUR A0DE ; [.3E9D.0020.0002] # YI SYLLABLE FYT A0DF ; [.3E9E.0020.0002] # YI SYLLABLE FYX A0E0 ; [.3E9F.0020.0002] # YI SYLLABLE FY A0E1 ; [.3EA0.0020.0002] # YI SYLLABLE FYP A0E2 ; [.3EA1.0020.0002] # YI SYLLABLE VIT A0E3 ; [.3EA2.0020.0002] # YI SYLLABLE VIX A0E4 ; [.3EA3.0020.0002] # YI SYLLABLE VI A0E5 ; [.3EA4.0020.0002] # YI SYLLABLE VIP A0E6 ; [.3EA5.0020.0002] # YI SYLLABLE VIET A0E7 ; [.3EA6.0020.0002] # YI SYLLABLE VIEX A0E8 ; [.3EA7.0020.0002] # YI SYLLABLE VIE A0E9 ; [.3EA8.0020.0002] # YI SYLLABLE VIEP A0EA ; [.3EA9.0020.0002] # YI SYLLABLE VAT A0EB ; [.3EAA.0020.0002] # YI SYLLABLE VAX A0EC ; [.3EAB.0020.0002] # YI SYLLABLE VA A0ED ; [.3EAC.0020.0002] # YI SYLLABLE VAP A0EE ; [.3EAD.0020.0002] # YI SYLLABLE VOT A0EF ; [.3EAE.0020.0002] # YI SYLLABLE VOX A0F0 ; [.3EAF.0020.0002] # YI SYLLABLE VO A0F1 ; [.3EB0.0020.0002] # YI SYLLABLE VOP A0F2 ; [.3EB1.0020.0002] # YI SYLLABLE VEX A0F3 ; [.3EB2.0020.0002] # YI SYLLABLE VEP A0F4 ; [.3EB3.0020.0002] # YI SYLLABLE VUT A0F5 ; [.3EB4.0020.0002] # YI SYLLABLE VUX A0F6 ; [.3EB5.0020.0002] # YI SYLLABLE VU A0F7 ; [.3EB6.0020.0002] # YI SYLLABLE VUP A0F8 ; [.3EB7.0020.0002] # YI SYLLABLE VURX A0F9 ; [.3EB8.0020.0002] # YI SYLLABLE VUR A0FA ; [.3EB9.0020.0002] # YI SYLLABLE VYT A0FB ; [.3EBA.0020.0002] # YI SYLLABLE VYX A0FC ; [.3EBB.0020.0002] # YI SYLLABLE VY A0FD ; [.3EBC.0020.0002] # YI SYLLABLE VYP A0FE ; [.3EBD.0020.0002] # YI SYLLABLE VYRX A0FF ; [.3EBE.0020.0002] # YI SYLLABLE VYR A100 ; [.3EBF.0020.0002] # YI SYLLABLE DIT A101 ; [.3EC0.0020.0002] # YI SYLLABLE DIX A102 ; [.3EC1.0020.0002] # YI SYLLABLE DI A103 ; [.3EC2.0020.0002] # YI SYLLABLE DIP A104 ; [.3EC3.0020.0002] # YI SYLLABLE DIEX A105 ; [.3EC4.0020.0002] # YI SYLLABLE DIE A106 ; [.3EC5.0020.0002] # YI SYLLABLE DIEP A107 ; [.3EC6.0020.0002] # YI SYLLABLE DAT A108 ; [.3EC7.0020.0002] # YI SYLLABLE DAX A109 ; [.3EC8.0020.0002] # YI SYLLABLE DA A10A ; [.3EC9.0020.0002] # YI SYLLABLE DAP A10B ; [.3ECA.0020.0002] # YI SYLLABLE DUOX A10C ; [.3ECB.0020.0002] # YI SYLLABLE DUO A10D ; [.3ECC.0020.0002] # YI SYLLABLE DOT A10E ; [.3ECD.0020.0002] # YI SYLLABLE DOX A10F ; [.3ECE.0020.0002] # YI SYLLABLE DO A110 ; [.3ECF.0020.0002] # YI SYLLABLE DOP A111 ; [.3ED0.0020.0002] # YI SYLLABLE DEX A112 ; [.3ED1.0020.0002] # YI SYLLABLE DE A113 ; [.3ED2.0020.0002] # YI SYLLABLE DEP A114 ; [.3ED3.0020.0002] # YI SYLLABLE DUT A115 ; [.3ED4.0020.0002] # YI SYLLABLE DUX A116 ; [.3ED5.0020.0002] # YI SYLLABLE DU A117 ; [.3ED6.0020.0002] # YI SYLLABLE DUP A118 ; [.3ED7.0020.0002] # YI SYLLABLE DURX A119 ; [.3ED8.0020.0002] # YI SYLLABLE DUR A11A ; [.3ED9.0020.0002] # YI SYLLABLE TIT A11B ; [.3EDA.0020.0002] # YI SYLLABLE TIX A11C ; [.3EDB.0020.0002] # YI SYLLABLE TI A11D ; [.3EDC.0020.0002] # YI SYLLABLE TIP A11E ; [.3EDD.0020.0002] # YI SYLLABLE TIEX A11F ; [.3EDE.0020.0002] # YI SYLLABLE TIE A120 ; [.3EDF.0020.0002] # YI SYLLABLE TIEP A121 ; [.3EE0.0020.0002] # YI SYLLABLE TAT A122 ; [.3EE1.0020.0002] # YI SYLLABLE TAX A123 ; [.3EE2.0020.0002] # YI SYLLABLE TA A124 ; [.3EE3.0020.0002] # YI SYLLABLE TAP A125 ; [.3EE4.0020.0002] # YI SYLLABLE TUOT A126 ; [.3EE5.0020.0002] # YI SYLLABLE TUOX A127 ; [.3EE6.0020.0002] # YI SYLLABLE TUO A128 ; [.3EE7.0020.0002] # YI SYLLABLE TUOP A129 ; [.3EE8.0020.0002] # YI SYLLABLE TOT A12A ; [.3EE9.0020.0002] # YI SYLLABLE TOX A12B ; [.3EEA.0020.0002] # YI SYLLABLE TO A12C ; [.3EEB.0020.0002] # YI SYLLABLE TOP A12D ; [.3EEC.0020.0002] # YI SYLLABLE TEX A12E ; [.3EED.0020.0002] # YI SYLLABLE TE A12F ; [.3EEE.0020.0002] # YI SYLLABLE TEP A130 ; [.3EEF.0020.0002] # YI SYLLABLE TUT A131 ; [.3EF0.0020.0002] # YI SYLLABLE TUX A132 ; [.3EF1.0020.0002] # YI SYLLABLE TU A133 ; [.3EF2.0020.0002] # YI SYLLABLE TUP A134 ; [.3EF3.0020.0002] # YI SYLLABLE TURX A135 ; [.3EF4.0020.0002] # YI SYLLABLE TUR A136 ; [.3EF5.0020.0002] # YI SYLLABLE DDIT A137 ; [.3EF6.0020.0002] # YI SYLLABLE DDIX A138 ; [.3EF7.0020.0002] # YI SYLLABLE DDI A139 ; [.3EF8.0020.0002] # YI SYLLABLE DDIP A13A ; [.3EF9.0020.0002] # YI SYLLABLE DDIEX A13B ; [.3EFA.0020.0002] # YI SYLLABLE DDIE A13C ; [.3EFB.0020.0002] # YI SYLLABLE DDIEP A13D ; [.3EFC.0020.0002] # YI SYLLABLE DDAT A13E ; [.3EFD.0020.0002] # YI SYLLABLE DDAX A13F ; [.3EFE.0020.0002] # YI SYLLABLE DDA A140 ; [.3EFF.0020.0002] # YI SYLLABLE DDAP A141 ; [.3F00.0020.0002] # YI SYLLABLE DDUOX A142 ; [.3F01.0020.0002] # YI SYLLABLE DDUO A143 ; [.3F02.0020.0002] # YI SYLLABLE DDUOP A144 ; [.3F03.0020.0002] # YI SYLLABLE DDOT A145 ; [.3F04.0020.0002] # YI SYLLABLE DDOX A146 ; [.3F05.0020.0002] # YI SYLLABLE DDO A147 ; [.3F06.0020.0002] # YI SYLLABLE DDOP A148 ; [.3F07.0020.0002] # YI SYLLABLE DDEX A149 ; [.3F08.0020.0002] # YI SYLLABLE DDE A14A ; [.3F09.0020.0002] # YI SYLLABLE DDEP A14B ; [.3F0A.0020.0002] # YI SYLLABLE DDUT A14C ; [.3F0B.0020.0002] # YI SYLLABLE DDUX A14D ; [.3F0C.0020.0002] # YI SYLLABLE DDU A14E ; [.3F0D.0020.0002] # YI SYLLABLE DDUP A14F ; [.3F0E.0020.0002] # YI SYLLABLE DDURX A150 ; [.3F0F.0020.0002] # YI SYLLABLE DDUR A151 ; [.3F10.0020.0002] # YI SYLLABLE NDIT A152 ; [.3F11.0020.0002] # YI SYLLABLE NDIX A153 ; [.3F12.0020.0002] # YI SYLLABLE NDI A154 ; [.3F13.0020.0002] # YI SYLLABLE NDIP A155 ; [.3F14.0020.0002] # YI SYLLABLE NDIEX A156 ; [.3F15.0020.0002] # YI SYLLABLE NDIE A157 ; [.3F16.0020.0002] # YI SYLLABLE NDAT A158 ; [.3F17.0020.0002] # YI SYLLABLE NDAX A159 ; [.3F18.0020.0002] # YI SYLLABLE NDA A15A ; [.3F19.0020.0002] # YI SYLLABLE NDAP A15B ; [.3F1A.0020.0002] # YI SYLLABLE NDOT A15C ; [.3F1B.0020.0002] # YI SYLLABLE NDOX A15D ; [.3F1C.0020.0002] # YI SYLLABLE NDO A15E ; [.3F1D.0020.0002] # YI SYLLABLE NDOP A15F ; [.3F1E.0020.0002] # YI SYLLABLE NDEX A160 ; [.3F1F.0020.0002] # YI SYLLABLE NDE A161 ; [.3F20.0020.0002] # YI SYLLABLE NDEP A162 ; [.3F21.0020.0002] # YI SYLLABLE NDUT A163 ; [.3F22.0020.0002] # YI SYLLABLE NDUX A164 ; [.3F23.0020.0002] # YI SYLLABLE NDU A165 ; [.3F24.0020.0002] # YI SYLLABLE NDUP A166 ; [.3F25.0020.0002] # YI SYLLABLE NDURX A167 ; [.3F26.0020.0002] # YI SYLLABLE NDUR A168 ; [.3F27.0020.0002] # YI SYLLABLE HNIT A169 ; [.3F28.0020.0002] # YI SYLLABLE HNIX A16A ; [.3F29.0020.0002] # YI SYLLABLE HNI A16B ; [.3F2A.0020.0002] # YI SYLLABLE HNIP A16C ; [.3F2B.0020.0002] # YI SYLLABLE HNIET A16D ; [.3F2C.0020.0002] # YI SYLLABLE HNIEX A16E ; [.3F2D.0020.0002] # YI SYLLABLE HNIE A16F ; [.3F2E.0020.0002] # YI SYLLABLE HNIEP A170 ; [.3F2F.0020.0002] # YI SYLLABLE HNAT A171 ; [.3F30.0020.0002] # YI SYLLABLE HNAX A172 ; [.3F31.0020.0002] # YI SYLLABLE HNA A173 ; [.3F32.0020.0002] # YI SYLLABLE HNAP A174 ; [.3F33.0020.0002] # YI SYLLABLE HNUOX A175 ; [.3F34.0020.0002] # YI SYLLABLE HNUO A176 ; [.3F35.0020.0002] # YI SYLLABLE HNOT A177 ; [.3F36.0020.0002] # YI SYLLABLE HNOX A178 ; [.3F37.0020.0002] # YI SYLLABLE HNOP A179 ; [.3F38.0020.0002] # YI SYLLABLE HNEX A17A ; [.3F39.0020.0002] # YI SYLLABLE HNE A17B ; [.3F3A.0020.0002] # YI SYLLABLE HNEP A17C ; [.3F3B.0020.0002] # YI SYLLABLE HNUT A17D ; [.3F3C.0020.0002] # YI SYLLABLE NIT A17E ; [.3F3D.0020.0002] # YI SYLLABLE NIX A17F ; [.3F3E.0020.0002] # YI SYLLABLE NI A180 ; [.3F3F.0020.0002] # YI SYLLABLE NIP A181 ; [.3F40.0020.0002] # YI SYLLABLE NIEX A182 ; [.3F41.0020.0002] # YI SYLLABLE NIE A183 ; [.3F42.0020.0002] # YI SYLLABLE NIEP A184 ; [.3F43.0020.0002] # YI SYLLABLE NAX A185 ; [.3F44.0020.0002] # YI SYLLABLE NA A186 ; [.3F45.0020.0002] # YI SYLLABLE NAP A187 ; [.3F46.0020.0002] # YI SYLLABLE NUOX A188 ; [.3F47.0020.0002] # YI SYLLABLE NUO A189 ; [.3F48.0020.0002] # YI SYLLABLE NUOP A18A ; [.3F49.0020.0002] # YI SYLLABLE NOT A18B ; [.3F4A.0020.0002] # YI SYLLABLE NOX A18C ; [.3F4B.0020.0002] # YI SYLLABLE NO A18D ; [.3F4C.0020.0002] # YI SYLLABLE NOP A18E ; [.3F4D.0020.0002] # YI SYLLABLE NEX A18F ; [.3F4E.0020.0002] # YI SYLLABLE NE A190 ; [.3F4F.0020.0002] # YI SYLLABLE NEP A191 ; [.3F50.0020.0002] # YI SYLLABLE NUT A192 ; [.3F51.0020.0002] # YI SYLLABLE NUX A193 ; [.3F52.0020.0002] # YI SYLLABLE NU A194 ; [.3F53.0020.0002] # YI SYLLABLE NUP A195 ; [.3F54.0020.0002] # YI SYLLABLE NURX A196 ; [.3F55.0020.0002] # YI SYLLABLE NUR A197 ; [.3F56.0020.0002] # YI SYLLABLE HLIT A198 ; [.3F57.0020.0002] # YI SYLLABLE HLIX A199 ; [.3F58.0020.0002] # YI SYLLABLE HLI A19A ; [.3F59.0020.0002] # YI SYLLABLE HLIP A19B ; [.3F5A.0020.0002] # YI SYLLABLE HLIEX A19C ; [.3F5B.0020.0002] # YI SYLLABLE HLIE A19D ; [.3F5C.0020.0002] # YI SYLLABLE HLIEP A19E ; [.3F5D.0020.0002] # YI SYLLABLE HLAT A19F ; [.3F5E.0020.0002] # YI SYLLABLE HLAX A1A0 ; [.3F5F.0020.0002] # YI SYLLABLE HLA A1A1 ; [.3F60.0020.0002] # YI SYLLABLE HLAP A1A2 ; [.3F61.0020.0002] # YI SYLLABLE HLUOX A1A3 ; [.3F62.0020.0002] # YI SYLLABLE HLUO A1A4 ; [.3F63.0020.0002] # YI SYLLABLE HLUOP A1A5 ; [.3F64.0020.0002] # YI SYLLABLE HLOX A1A6 ; [.3F65.0020.0002] # YI SYLLABLE HLO A1A7 ; [.3F66.0020.0002] # YI SYLLABLE HLOP A1A8 ; [.3F67.0020.0002] # YI SYLLABLE HLEX A1A9 ; [.3F68.0020.0002] # YI SYLLABLE HLE A1AA ; [.3F69.0020.0002] # YI SYLLABLE HLEP A1AB ; [.3F6A.0020.0002] # YI SYLLABLE HLUT A1AC ; [.3F6B.0020.0002] # YI SYLLABLE HLUX A1AD ; [.3F6C.0020.0002] # YI SYLLABLE HLU A1AE ; [.3F6D.0020.0002] # YI SYLLABLE HLUP A1AF ; [.3F6E.0020.0002] # YI SYLLABLE HLURX A1B0 ; [.3F6F.0020.0002] # YI SYLLABLE HLUR A1B1 ; [.3F70.0020.0002] # YI SYLLABLE HLYT A1B2 ; [.3F71.0020.0002] # YI SYLLABLE HLYX A1B3 ; [.3F72.0020.0002] # YI SYLLABLE HLY A1B4 ; [.3F73.0020.0002] # YI SYLLABLE HLYP A1B5 ; [.3F74.0020.0002] # YI SYLLABLE HLYRX A1B6 ; [.3F75.0020.0002] # YI SYLLABLE HLYR A1B7 ; [.3F76.0020.0002] # YI SYLLABLE LIT A1B8 ; [.3F77.0020.0002] # YI SYLLABLE LIX A1B9 ; [.3F78.0020.0002] # YI SYLLABLE LI A1BA ; [.3F79.0020.0002] # YI SYLLABLE LIP A1BB ; [.3F7A.0020.0002] # YI SYLLABLE LIET A1BC ; [.3F7B.0020.0002] # YI SYLLABLE LIEX A1BD ; [.3F7C.0020.0002] # YI SYLLABLE LIE A1BE ; [.3F7D.0020.0002] # YI SYLLABLE LIEP A1BF ; [.3F7E.0020.0002] # YI SYLLABLE LAT A1C0 ; [.3F7F.0020.0002] # YI SYLLABLE LAX A1C1 ; [.3F80.0020.0002] # YI SYLLABLE LA A1C2 ; [.3F81.0020.0002] # YI SYLLABLE LAP A1C3 ; [.3F82.0020.0002] # YI SYLLABLE LUOT A1C4 ; [.3F83.0020.0002] # YI SYLLABLE LUOX A1C5 ; [.3F84.0020.0002] # YI SYLLABLE LUO A1C6 ; [.3F85.0020.0002] # YI SYLLABLE LUOP A1C7 ; [.3F86.0020.0002] # YI SYLLABLE LOT A1C8 ; [.3F87.0020.0002] # YI SYLLABLE LOX A1C9 ; [.3F88.0020.0002] # YI SYLLABLE LO A1CA ; [.3F89.0020.0002] # YI SYLLABLE LOP A1CB ; [.3F8A.0020.0002] # YI SYLLABLE LEX A1CC ; [.3F8B.0020.0002] # YI SYLLABLE LE A1CD ; [.3F8C.0020.0002] # YI SYLLABLE LEP A1CE ; [.3F8D.0020.0002] # YI SYLLABLE LUT A1CF ; [.3F8E.0020.0002] # YI SYLLABLE LUX A1D0 ; [.3F8F.0020.0002] # YI SYLLABLE LU A1D1 ; [.3F90.0020.0002] # YI SYLLABLE LUP A1D2 ; [.3F91.0020.0002] # YI SYLLABLE LURX A1D3 ; [.3F92.0020.0002] # YI SYLLABLE LUR A1D4 ; [.3F93.0020.0002] # YI SYLLABLE LYT A1D5 ; [.3F94.0020.0002] # YI SYLLABLE LYX A1D6 ; [.3F95.0020.0002] # YI SYLLABLE LY A1D7 ; [.3F96.0020.0002] # YI SYLLABLE LYP A1D8 ; [.3F97.0020.0002] # YI SYLLABLE LYRX A1D9 ; [.3F98.0020.0002] # YI SYLLABLE LYR A1DA ; [.3F99.0020.0002] # YI SYLLABLE GIT A1DB ; [.3F9A.0020.0002] # YI SYLLABLE GIX A1DC ; [.3F9B.0020.0002] # YI SYLLABLE GI A1DD ; [.3F9C.0020.0002] # YI SYLLABLE GIP A1DE ; [.3F9D.0020.0002] # YI SYLLABLE GIET A1DF ; [.3F9E.0020.0002] # YI SYLLABLE GIEX A1E0 ; [.3F9F.0020.0002] # YI SYLLABLE GIE A1E1 ; [.3FA0.0020.0002] # YI SYLLABLE GIEP A1E2 ; [.3FA1.0020.0002] # YI SYLLABLE GAT A1E3 ; [.3FA2.0020.0002] # YI SYLLABLE GAX A1E4 ; [.3FA3.0020.0002] # YI SYLLABLE GA A1E5 ; [.3FA4.0020.0002] # YI SYLLABLE GAP A1E6 ; [.3FA5.0020.0002] # YI SYLLABLE GUOT A1E7 ; [.3FA6.0020.0002] # YI SYLLABLE GUOX A1E8 ; [.3FA7.0020.0002] # YI SYLLABLE GUO A1E9 ; [.3FA8.0020.0002] # YI SYLLABLE GUOP A1EA ; [.3FA9.0020.0002] # YI SYLLABLE GOT A1EB ; [.3FAA.0020.0002] # YI SYLLABLE GOX A1EC ; [.3FAB.0020.0002] # YI SYLLABLE GO A1ED ; [.3FAC.0020.0002] # YI SYLLABLE GOP A1EE ; [.3FAD.0020.0002] # YI SYLLABLE GET A1EF ; [.3FAE.0020.0002] # YI SYLLABLE GEX A1F0 ; [.3FAF.0020.0002] # YI SYLLABLE GE A1F1 ; [.3FB0.0020.0002] # YI SYLLABLE GEP A1F2 ; [.3FB1.0020.0002] # YI SYLLABLE GUT A1F3 ; [.3FB2.0020.0002] # YI SYLLABLE GUX A1F4 ; [.3FB3.0020.0002] # YI SYLLABLE GU A1F5 ; [.3FB4.0020.0002] # YI SYLLABLE GUP A1F6 ; [.3FB5.0020.0002] # YI SYLLABLE GURX A1F7 ; [.3FB6.0020.0002] # YI SYLLABLE GUR A1F8 ; [.3FB7.0020.0002] # YI SYLLABLE KIT A1F9 ; [.3FB8.0020.0002] # YI SYLLABLE KIX A1FA ; [.3FB9.0020.0002] # YI SYLLABLE KI A1FB ; [.3FBA.0020.0002] # YI SYLLABLE KIP A1FC ; [.3FBB.0020.0002] # YI SYLLABLE KIEX A1FD ; [.3FBC.0020.0002] # YI SYLLABLE KIE A1FE ; [.3FBD.0020.0002] # YI SYLLABLE KIEP A1FF ; [.3FBE.0020.0002] # YI SYLLABLE KAT A200 ; [.3FBF.0020.0002] # YI SYLLABLE KAX A201 ; [.3FC0.0020.0002] # YI SYLLABLE KA A202 ; [.3FC1.0020.0002] # YI SYLLABLE KAP A203 ; [.3FC2.0020.0002] # YI SYLLABLE KUOX A204 ; [.3FC3.0020.0002] # YI SYLLABLE KUO A205 ; [.3FC4.0020.0002] # YI SYLLABLE KUOP A206 ; [.3FC5.0020.0002] # YI SYLLABLE KOT A207 ; [.3FC6.0020.0002] # YI SYLLABLE KOX A208 ; [.3FC7.0020.0002] # YI SYLLABLE KO A209 ; [.3FC8.0020.0002] # YI SYLLABLE KOP A20A ; [.3FC9.0020.0002] # YI SYLLABLE KET A20B ; [.3FCA.0020.0002] # YI SYLLABLE KEX A20C ; [.3FCB.0020.0002] # YI SYLLABLE KE A20D ; [.3FCC.0020.0002] # YI SYLLABLE KEP A20E ; [.3FCD.0020.0002] # YI SYLLABLE KUT A20F ; [.3FCE.0020.0002] # YI SYLLABLE KUX A210 ; [.3FCF.0020.0002] # YI SYLLABLE KU A211 ; [.3FD0.0020.0002] # YI SYLLABLE KUP A212 ; [.3FD1.0020.0002] # YI SYLLABLE KURX A213 ; [.3FD2.0020.0002] # YI SYLLABLE KUR A214 ; [.3FD3.0020.0002] # YI SYLLABLE GGIT A215 ; [.3FD4.0020.0002] # YI SYLLABLE GGIX A216 ; [.3FD5.0020.0002] # YI SYLLABLE GGI A217 ; [.3FD6.0020.0002] # YI SYLLABLE GGIEX A218 ; [.3FD7.0020.0002] # YI SYLLABLE GGIE A219 ; [.3FD8.0020.0002] # YI SYLLABLE GGIEP A21A ; [.3FD9.0020.0002] # YI SYLLABLE GGAT A21B ; [.3FDA.0020.0002] # YI SYLLABLE GGAX A21C ; [.3FDB.0020.0002] # YI SYLLABLE GGA A21D ; [.3FDC.0020.0002] # YI SYLLABLE GGAP A21E ; [.3FDD.0020.0002] # YI SYLLABLE GGUOT A21F ; [.3FDE.0020.0002] # YI SYLLABLE GGUOX A220 ; [.3FDF.0020.0002] # YI SYLLABLE GGUO A221 ; [.3FE0.0020.0002] # YI SYLLABLE GGUOP A222 ; [.3FE1.0020.0002] # YI SYLLABLE GGOT A223 ; [.3FE2.0020.0002] # YI SYLLABLE GGOX A224 ; [.3FE3.0020.0002] # YI SYLLABLE GGO A225 ; [.3FE4.0020.0002] # YI SYLLABLE GGOP A226 ; [.3FE5.0020.0002] # YI SYLLABLE GGET A227 ; [.3FE6.0020.0002] # YI SYLLABLE GGEX A228 ; [.3FE7.0020.0002] # YI SYLLABLE GGE A229 ; [.3FE8.0020.0002] # YI SYLLABLE GGEP A22A ; [.3FE9.0020.0002] # YI SYLLABLE GGUT A22B ; [.3FEA.0020.0002] # YI SYLLABLE GGUX A22C ; [.3FEB.0020.0002] # YI SYLLABLE GGU A22D ; [.3FEC.0020.0002] # YI SYLLABLE GGUP A22E ; [.3FED.0020.0002] # YI SYLLABLE GGURX A22F ; [.3FEE.0020.0002] # YI SYLLABLE GGUR A230 ; [.3FEF.0020.0002] # YI SYLLABLE MGIEX A231 ; [.3FF0.0020.0002] # YI SYLLABLE MGIE A232 ; [.3FF1.0020.0002] # YI SYLLABLE MGAT A233 ; [.3FF2.0020.0002] # YI SYLLABLE MGAX A234 ; [.3FF3.0020.0002] # YI SYLLABLE MGA A235 ; [.3FF4.0020.0002] # YI SYLLABLE MGAP A236 ; [.3FF5.0020.0002] # YI SYLLABLE MGUOX A237 ; [.3FF6.0020.0002] # YI SYLLABLE MGUO A238 ; [.3FF7.0020.0002] # YI SYLLABLE MGUOP A239 ; [.3FF8.0020.0002] # YI SYLLABLE MGOT A23A ; [.3FF9.0020.0002] # YI SYLLABLE MGOX A23B ; [.3FFA.0020.0002] # YI SYLLABLE MGO A23C ; [.3FFB.0020.0002] # YI SYLLABLE MGOP A23D ; [.3FFC.0020.0002] # YI SYLLABLE MGEX A23E ; [.3FFD.0020.0002] # YI SYLLABLE MGE A23F ; [.3FFE.0020.0002] # YI SYLLABLE MGEP A240 ; [.3FFF.0020.0002] # YI SYLLABLE MGUT A241 ; [.4000.0020.0002] # YI SYLLABLE MGUX A242 ; [.4001.0020.0002] # YI SYLLABLE MGU A243 ; [.4002.0020.0002] # YI SYLLABLE MGUP A244 ; [.4003.0020.0002] # YI SYLLABLE MGURX A245 ; [.4004.0020.0002] # YI SYLLABLE MGUR A246 ; [.4005.0020.0002] # YI SYLLABLE HXIT A247 ; [.4006.0020.0002] # YI SYLLABLE HXIX A248 ; [.4007.0020.0002] # YI SYLLABLE HXI A249 ; [.4008.0020.0002] # YI SYLLABLE HXIP A24A ; [.4009.0020.0002] # YI SYLLABLE HXIET A24B ; [.400A.0020.0002] # YI SYLLABLE HXIEX A24C ; [.400B.0020.0002] # YI SYLLABLE HXIE A24D ; [.400C.0020.0002] # YI SYLLABLE HXIEP A24E ; [.400D.0020.0002] # YI SYLLABLE HXAT A24F ; [.400E.0020.0002] # YI SYLLABLE HXAX A250 ; [.400F.0020.0002] # YI SYLLABLE HXA A251 ; [.4010.0020.0002] # YI SYLLABLE HXAP A252 ; [.4011.0020.0002] # YI SYLLABLE HXUOT A253 ; [.4012.0020.0002] # YI SYLLABLE HXUOX A254 ; [.4013.0020.0002] # YI SYLLABLE HXUO A255 ; [.4014.0020.0002] # YI SYLLABLE HXUOP A256 ; [.4015.0020.0002] # YI SYLLABLE HXOT A257 ; [.4016.0020.0002] # YI SYLLABLE HXOX A258 ; [.4017.0020.0002] # YI SYLLABLE HXO A259 ; [.4018.0020.0002] # YI SYLLABLE HXOP A25A ; [.4019.0020.0002] # YI SYLLABLE HXEX A25B ; [.401A.0020.0002] # YI SYLLABLE HXE A25C ; [.401B.0020.0002] # YI SYLLABLE HXEP A25D ; [.401C.0020.0002] # YI SYLLABLE NGIEX A25E ; [.401D.0020.0002] # YI SYLLABLE NGIE A25F ; [.401E.0020.0002] # YI SYLLABLE NGIEP A260 ; [.401F.0020.0002] # YI SYLLABLE NGAT A261 ; [.4020.0020.0002] # YI SYLLABLE NGAX A262 ; [.4021.0020.0002] # YI SYLLABLE NGA A263 ; [.4022.0020.0002] # YI SYLLABLE NGAP A264 ; [.4023.0020.0002] # YI SYLLABLE NGUOT A265 ; [.4024.0020.0002] # YI SYLLABLE NGUOX A266 ; [.4025.0020.0002] # YI SYLLABLE NGUO A267 ; [.4026.0020.0002] # YI SYLLABLE NGOT A268 ; [.4027.0020.0002] # YI SYLLABLE NGOX A269 ; [.4028.0020.0002] # YI SYLLABLE NGO A26A ; [.4029.0020.0002] # YI SYLLABLE NGOP A26B ; [.402A.0020.0002] # YI SYLLABLE NGEX A26C ; [.402B.0020.0002] # YI SYLLABLE NGE A26D ; [.402C.0020.0002] # YI SYLLABLE NGEP A26E ; [.402D.0020.0002] # YI SYLLABLE HIT A26F ; [.402E.0020.0002] # YI SYLLABLE HIEX A270 ; [.402F.0020.0002] # YI SYLLABLE HIE A271 ; [.4030.0020.0002] # YI SYLLABLE HAT A272 ; [.4031.0020.0002] # YI SYLLABLE HAX A273 ; [.4032.0020.0002] # YI SYLLABLE HA A274 ; [.4033.0020.0002] # YI SYLLABLE HAP A275 ; [.4034.0020.0002] # YI SYLLABLE HUOT A276 ; [.4035.0020.0002] # YI SYLLABLE HUOX A277 ; [.4036.0020.0002] # YI SYLLABLE HUO A278 ; [.4037.0020.0002] # YI SYLLABLE HUOP A279 ; [.4038.0020.0002] # YI SYLLABLE HOT A27A ; [.4039.0020.0002] # YI SYLLABLE HOX A27B ; [.403A.0020.0002] # YI SYLLABLE HO A27C ; [.403B.0020.0002] # YI SYLLABLE HOP A27D ; [.403C.0020.0002] # YI SYLLABLE HEX A27E ; [.403D.0020.0002] # YI SYLLABLE HE A27F ; [.403E.0020.0002] # YI SYLLABLE HEP A280 ; [.403F.0020.0002] # YI SYLLABLE WAT A281 ; [.4040.0020.0002] # YI SYLLABLE WAX A282 ; [.4041.0020.0002] # YI SYLLABLE WA A283 ; [.4042.0020.0002] # YI SYLLABLE WAP A284 ; [.4043.0020.0002] # YI SYLLABLE WUOX A285 ; [.4044.0020.0002] # YI SYLLABLE WUO A286 ; [.4045.0020.0002] # YI SYLLABLE WUOP A287 ; [.4046.0020.0002] # YI SYLLABLE WOX A288 ; [.4047.0020.0002] # YI SYLLABLE WO A289 ; [.4048.0020.0002] # YI SYLLABLE WOP A28A ; [.4049.0020.0002] # YI SYLLABLE WEX A28B ; [.404A.0020.0002] # YI SYLLABLE WE A28C ; [.404B.0020.0002] # YI SYLLABLE WEP A28D ; [.404C.0020.0002] # YI SYLLABLE ZIT A28E ; [.404D.0020.0002] # YI SYLLABLE ZIX A28F ; [.404E.0020.0002] # YI SYLLABLE ZI A290 ; [.404F.0020.0002] # YI SYLLABLE ZIP A291 ; [.4050.0020.0002] # YI SYLLABLE ZIEX A292 ; [.4051.0020.0002] # YI SYLLABLE ZIE A293 ; [.4052.0020.0002] # YI SYLLABLE ZIEP A294 ; [.4053.0020.0002] # YI SYLLABLE ZAT A295 ; [.4054.0020.0002] # YI SYLLABLE ZAX A296 ; [.4055.0020.0002] # YI SYLLABLE ZA A297 ; [.4056.0020.0002] # YI SYLLABLE ZAP A298 ; [.4057.0020.0002] # YI SYLLABLE ZUOX A299 ; [.4058.0020.0002] # YI SYLLABLE ZUO A29A ; [.4059.0020.0002] # YI SYLLABLE ZUOP A29B ; [.405A.0020.0002] # YI SYLLABLE ZOT A29C ; [.405B.0020.0002] # YI SYLLABLE ZOX A29D ; [.405C.0020.0002] # YI SYLLABLE ZO A29E ; [.405D.0020.0002] # YI SYLLABLE ZOP A29F ; [.405E.0020.0002] # YI SYLLABLE ZEX A2A0 ; [.405F.0020.0002] # YI SYLLABLE ZE A2A1 ; [.4060.0020.0002] # YI SYLLABLE ZEP A2A2 ; [.4061.0020.0002] # YI SYLLABLE ZUT A2A3 ; [.4062.0020.0002] # YI SYLLABLE ZUX A2A4 ; [.4063.0020.0002] # YI SYLLABLE ZU A2A5 ; [.4064.0020.0002] # YI SYLLABLE ZUP A2A6 ; [.4065.0020.0002] # YI SYLLABLE ZURX A2A7 ; [.4066.0020.0002] # YI SYLLABLE ZUR A2A8 ; [.4067.0020.0002] # YI SYLLABLE ZYT A2A9 ; [.4068.0020.0002] # YI SYLLABLE ZYX A2AA ; [.4069.0020.0002] # YI SYLLABLE ZY A2AB ; [.406A.0020.0002] # YI SYLLABLE ZYP A2AC ; [.406B.0020.0002] # YI SYLLABLE ZYRX A2AD ; [.406C.0020.0002] # YI SYLLABLE ZYR A2AE ; [.406D.0020.0002] # YI SYLLABLE CIT A2AF ; [.406E.0020.0002] # YI SYLLABLE CIX A2B0 ; [.406F.0020.0002] # YI SYLLABLE CI A2B1 ; [.4070.0020.0002] # YI SYLLABLE CIP A2B2 ; [.4071.0020.0002] # YI SYLLABLE CIET A2B3 ; [.4072.0020.0002] # YI SYLLABLE CIEX A2B4 ; [.4073.0020.0002] # YI SYLLABLE CIE A2B5 ; [.4074.0020.0002] # YI SYLLABLE CIEP A2B6 ; [.4075.0020.0002] # YI SYLLABLE CAT A2B7 ; [.4076.0020.0002] # YI SYLLABLE CAX A2B8 ; [.4077.0020.0002] # YI SYLLABLE CA A2B9 ; [.4078.0020.0002] # YI SYLLABLE CAP A2BA ; [.4079.0020.0002] # YI SYLLABLE CUOX A2BB ; [.407A.0020.0002] # YI SYLLABLE CUO A2BC ; [.407B.0020.0002] # YI SYLLABLE CUOP A2BD ; [.407C.0020.0002] # YI SYLLABLE COT A2BE ; [.407D.0020.0002] # YI SYLLABLE COX A2BF ; [.407E.0020.0002] # YI SYLLABLE CO A2C0 ; [.407F.0020.0002] # YI SYLLABLE COP A2C1 ; [.4080.0020.0002] # YI SYLLABLE CEX A2C2 ; [.4081.0020.0002] # YI SYLLABLE CE A2C3 ; [.4082.0020.0002] # YI SYLLABLE CEP A2C4 ; [.4083.0020.0002] # YI SYLLABLE CUT A2C5 ; [.4084.0020.0002] # YI SYLLABLE CUX A2C6 ; [.4085.0020.0002] # YI SYLLABLE CU A2C7 ; [.4086.0020.0002] # YI SYLLABLE CUP A2C8 ; [.4087.0020.0002] # YI SYLLABLE CURX A2C9 ; [.4088.0020.0002] # YI SYLLABLE CUR A2CA ; [.4089.0020.0002] # YI SYLLABLE CYT A2CB ; [.408A.0020.0002] # YI SYLLABLE CYX A2CC ; [.408B.0020.0002] # YI SYLLABLE CY A2CD ; [.408C.0020.0002] # YI SYLLABLE CYP A2CE ; [.408D.0020.0002] # YI SYLLABLE CYRX A2CF ; [.408E.0020.0002] # YI SYLLABLE CYR A2D0 ; [.408F.0020.0002] # YI SYLLABLE ZZIT A2D1 ; [.4090.0020.0002] # YI SYLLABLE ZZIX A2D2 ; [.4091.0020.0002] # YI SYLLABLE ZZI A2D3 ; [.4092.0020.0002] # YI SYLLABLE ZZIP A2D4 ; [.4093.0020.0002] # YI SYLLABLE ZZIET A2D5 ; [.4094.0020.0002] # YI SYLLABLE ZZIEX A2D6 ; [.4095.0020.0002] # YI SYLLABLE ZZIE A2D7 ; [.4096.0020.0002] # YI SYLLABLE ZZIEP A2D8 ; [.4097.0020.0002] # YI SYLLABLE ZZAT A2D9 ; [.4098.0020.0002] # YI SYLLABLE ZZAX A2DA ; [.4099.0020.0002] # YI SYLLABLE ZZA A2DB ; [.409A.0020.0002] # YI SYLLABLE ZZAP A2DC ; [.409B.0020.0002] # YI SYLLABLE ZZOX A2DD ; [.409C.0020.0002] # YI SYLLABLE ZZO A2DE ; [.409D.0020.0002] # YI SYLLABLE ZZOP A2DF ; [.409E.0020.0002] # YI SYLLABLE ZZEX A2E0 ; [.409F.0020.0002] # YI SYLLABLE ZZE A2E1 ; [.40A0.0020.0002] # YI SYLLABLE ZZEP A2E2 ; [.40A1.0020.0002] # YI SYLLABLE ZZUX A2E3 ; [.40A2.0020.0002] # YI SYLLABLE ZZU A2E4 ; [.40A3.0020.0002] # YI SYLLABLE ZZUP A2E5 ; [.40A4.0020.0002] # YI SYLLABLE ZZURX A2E6 ; [.40A5.0020.0002] # YI SYLLABLE ZZUR A2E7 ; [.40A6.0020.0002] # YI SYLLABLE ZZYT A2E8 ; [.40A7.0020.0002] # YI SYLLABLE ZZYX A2E9 ; [.40A8.0020.0002] # YI SYLLABLE ZZY A2EA ; [.40A9.0020.0002] # YI SYLLABLE ZZYP A2EB ; [.40AA.0020.0002] # YI SYLLABLE ZZYRX A2EC ; [.40AB.0020.0002] # YI SYLLABLE ZZYR A2ED ; [.40AC.0020.0002] # YI SYLLABLE NZIT A2EE ; [.40AD.0020.0002] # YI SYLLABLE NZIX A2EF ; [.40AE.0020.0002] # YI SYLLABLE NZI A2F0 ; [.40AF.0020.0002] # YI SYLLABLE NZIP A2F1 ; [.40B0.0020.0002] # YI SYLLABLE NZIEX A2F2 ; [.40B1.0020.0002] # YI SYLLABLE NZIE A2F3 ; [.40B2.0020.0002] # YI SYLLABLE NZIEP A2F4 ; [.40B3.0020.0002] # YI SYLLABLE NZAT A2F5 ; [.40B4.0020.0002] # YI SYLLABLE NZAX A2F6 ; [.40B5.0020.0002] # YI SYLLABLE NZA A2F7 ; [.40B6.0020.0002] # YI SYLLABLE NZAP A2F8 ; [.40B7.0020.0002] # YI SYLLABLE NZUOX A2F9 ; [.40B8.0020.0002] # YI SYLLABLE NZUO A2FA ; [.40B9.0020.0002] # YI SYLLABLE NZOX A2FB ; [.40BA.0020.0002] # YI SYLLABLE NZOP A2FC ; [.40BB.0020.0002] # YI SYLLABLE NZEX A2FD ; [.40BC.0020.0002] # YI SYLLABLE NZE A2FE ; [.40BD.0020.0002] # YI SYLLABLE NZUX A2FF ; [.40BE.0020.0002] # YI SYLLABLE NZU A300 ; [.40BF.0020.0002] # YI SYLLABLE NZUP A301 ; [.40C0.0020.0002] # YI SYLLABLE NZURX A302 ; [.40C1.0020.0002] # YI SYLLABLE NZUR A303 ; [.40C2.0020.0002] # YI SYLLABLE NZYT A304 ; [.40C3.0020.0002] # YI SYLLABLE NZYX A305 ; [.40C4.0020.0002] # YI SYLLABLE NZY A306 ; [.40C5.0020.0002] # YI SYLLABLE NZYP A307 ; [.40C6.0020.0002] # YI SYLLABLE NZYRX A308 ; [.40C7.0020.0002] # YI SYLLABLE NZYR A309 ; [.40C8.0020.0002] # YI SYLLABLE SIT A30A ; [.40C9.0020.0002] # YI SYLLABLE SIX A30B ; [.40CA.0020.0002] # YI SYLLABLE SI A30C ; [.40CB.0020.0002] # YI SYLLABLE SIP A30D ; [.40CC.0020.0002] # YI SYLLABLE SIEX A30E ; [.40CD.0020.0002] # YI SYLLABLE SIE A30F ; [.40CE.0020.0002] # YI SYLLABLE SIEP A310 ; [.40CF.0020.0002] # YI SYLLABLE SAT A311 ; [.40D0.0020.0002] # YI SYLLABLE SAX A312 ; [.40D1.0020.0002] # YI SYLLABLE SA A313 ; [.40D2.0020.0002] # YI SYLLABLE SAP A314 ; [.40D3.0020.0002] # YI SYLLABLE SUOX A315 ; [.40D4.0020.0002] # YI SYLLABLE SUO A316 ; [.40D5.0020.0002] # YI SYLLABLE SUOP A317 ; [.40D6.0020.0002] # YI SYLLABLE SOT A318 ; [.40D7.0020.0002] # YI SYLLABLE SOX A319 ; [.40D8.0020.0002] # YI SYLLABLE SO A31A ; [.40D9.0020.0002] # YI SYLLABLE SOP A31B ; [.40DA.0020.0002] # YI SYLLABLE SEX A31C ; [.40DB.0020.0002] # YI SYLLABLE SE A31D ; [.40DC.0020.0002] # YI SYLLABLE SEP A31E ; [.40DD.0020.0002] # YI SYLLABLE SUT A31F ; [.40DE.0020.0002] # YI SYLLABLE SUX A320 ; [.40DF.0020.0002] # YI SYLLABLE SU A321 ; [.40E0.0020.0002] # YI SYLLABLE SUP A322 ; [.40E1.0020.0002] # YI SYLLABLE SURX A323 ; [.40E2.0020.0002] # YI SYLLABLE SUR A324 ; [.40E3.0020.0002] # YI SYLLABLE SYT A325 ; [.40E4.0020.0002] # YI SYLLABLE SYX A326 ; [.40E5.0020.0002] # YI SYLLABLE SY A327 ; [.40E6.0020.0002] # YI SYLLABLE SYP A328 ; [.40E7.0020.0002] # YI SYLLABLE SYRX A329 ; [.40E8.0020.0002] # YI SYLLABLE SYR A32A ; [.40E9.0020.0002] # YI SYLLABLE SSIT A32B ; [.40EA.0020.0002] # YI SYLLABLE SSIX A32C ; [.40EB.0020.0002] # YI SYLLABLE SSI A32D ; [.40EC.0020.0002] # YI SYLLABLE SSIP A32E ; [.40ED.0020.0002] # YI SYLLABLE SSIEX A32F ; [.40EE.0020.0002] # YI SYLLABLE SSIE A330 ; [.40EF.0020.0002] # YI SYLLABLE SSIEP A331 ; [.40F0.0020.0002] # YI SYLLABLE SSAT A332 ; [.40F1.0020.0002] # YI SYLLABLE SSAX A333 ; [.40F2.0020.0002] # YI SYLLABLE SSA A334 ; [.40F3.0020.0002] # YI SYLLABLE SSAP A335 ; [.40F4.0020.0002] # YI SYLLABLE SSOT A336 ; [.40F5.0020.0002] # YI SYLLABLE SSOX A337 ; [.40F6.0020.0002] # YI SYLLABLE SSO A338 ; [.40F7.0020.0002] # YI SYLLABLE SSOP A339 ; [.40F8.0020.0002] # YI SYLLABLE SSEX A33A ; [.40F9.0020.0002] # YI SYLLABLE SSE A33B ; [.40FA.0020.0002] # YI SYLLABLE SSEP A33C ; [.40FB.0020.0002] # YI SYLLABLE SSUT A33D ; [.40FC.0020.0002] # YI SYLLABLE SSUX A33E ; [.40FD.0020.0002] # YI SYLLABLE SSU A33F ; [.40FE.0020.0002] # YI SYLLABLE SSUP A340 ; [.40FF.0020.0002] # YI SYLLABLE SSYT A341 ; [.4100.0020.0002] # YI SYLLABLE SSYX A342 ; [.4101.0020.0002] # YI SYLLABLE SSY A343 ; [.4102.0020.0002] # YI SYLLABLE SSYP A344 ; [.4103.0020.0002] # YI SYLLABLE SSYRX A345 ; [.4104.0020.0002] # YI SYLLABLE SSYR A346 ; [.4105.0020.0002] # YI SYLLABLE ZHAT A347 ; [.4106.0020.0002] # YI SYLLABLE ZHAX A348 ; [.4107.0020.0002] # YI SYLLABLE ZHA A349 ; [.4108.0020.0002] # YI SYLLABLE ZHAP A34A ; [.4109.0020.0002] # YI SYLLABLE ZHUOX A34B ; [.410A.0020.0002] # YI SYLLABLE ZHUO A34C ; [.410B.0020.0002] # YI SYLLABLE ZHUOP A34D ; [.410C.0020.0002] # YI SYLLABLE ZHOT A34E ; [.410D.0020.0002] # YI SYLLABLE ZHOX A34F ; [.410E.0020.0002] # YI SYLLABLE ZHO A350 ; [.410F.0020.0002] # YI SYLLABLE ZHOP A351 ; [.4110.0020.0002] # YI SYLLABLE ZHET A352 ; [.4111.0020.0002] # YI SYLLABLE ZHEX A353 ; [.4112.0020.0002] # YI SYLLABLE ZHE A354 ; [.4113.0020.0002] # YI SYLLABLE ZHEP A355 ; [.4114.0020.0002] # YI SYLLABLE ZHUT A356 ; [.4115.0020.0002] # YI SYLLABLE ZHUX A357 ; [.4116.0020.0002] # YI SYLLABLE ZHU A358 ; [.4117.0020.0002] # YI SYLLABLE ZHUP A359 ; [.4118.0020.0002] # YI SYLLABLE ZHURX A35A ; [.4119.0020.0002] # YI SYLLABLE ZHUR A35B ; [.411A.0020.0002] # YI SYLLABLE ZHYT A35C ; [.411B.0020.0002] # YI SYLLABLE ZHYX A35D ; [.411C.0020.0002] # YI SYLLABLE ZHY A35E ; [.411D.0020.0002] # YI SYLLABLE ZHYP A35F ; [.411E.0020.0002] # YI SYLLABLE ZHYRX A360 ; [.411F.0020.0002] # YI SYLLABLE ZHYR A361 ; [.4120.0020.0002] # YI SYLLABLE CHAT A362 ; [.4121.0020.0002] # YI SYLLABLE CHAX A363 ; [.4122.0020.0002] # YI SYLLABLE CHA A364 ; [.4123.0020.0002] # YI SYLLABLE CHAP A365 ; [.4124.0020.0002] # YI SYLLABLE CHUOT A366 ; [.4125.0020.0002] # YI SYLLABLE CHUOX A367 ; [.4126.0020.0002] # YI SYLLABLE CHUO A368 ; [.4127.0020.0002] # YI SYLLABLE CHUOP A369 ; [.4128.0020.0002] # YI SYLLABLE CHOT A36A ; [.4129.0020.0002] # YI SYLLABLE CHOX A36B ; [.412A.0020.0002] # YI SYLLABLE CHO A36C ; [.412B.0020.0002] # YI SYLLABLE CHOP A36D ; [.412C.0020.0002] # YI SYLLABLE CHET A36E ; [.412D.0020.0002] # YI SYLLABLE CHEX A36F ; [.412E.0020.0002] # YI SYLLABLE CHE A370 ; [.412F.0020.0002] # YI SYLLABLE CHEP A371 ; [.4130.0020.0002] # YI SYLLABLE CHUX A372 ; [.4131.0020.0002] # YI SYLLABLE CHU A373 ; [.4132.0020.0002] # YI SYLLABLE CHUP A374 ; [.4133.0020.0002] # YI SYLLABLE CHURX A375 ; [.4134.0020.0002] # YI SYLLABLE CHUR A376 ; [.4135.0020.0002] # YI SYLLABLE CHYT A377 ; [.4136.0020.0002] # YI SYLLABLE CHYX A378 ; [.4137.0020.0002] # YI SYLLABLE CHY A379 ; [.4138.0020.0002] # YI SYLLABLE CHYP A37A ; [.4139.0020.0002] # YI SYLLABLE CHYRX A37B ; [.413A.0020.0002] # YI SYLLABLE CHYR A37C ; [.413B.0020.0002] # YI SYLLABLE RRAX A37D ; [.413C.0020.0002] # YI SYLLABLE RRA A37E ; [.413D.0020.0002] # YI SYLLABLE RRUOX A37F ; [.413E.0020.0002] # YI SYLLABLE RRUO A380 ; [.413F.0020.0002] # YI SYLLABLE RROT A381 ; [.4140.0020.0002] # YI SYLLABLE RROX A382 ; [.4141.0020.0002] # YI SYLLABLE RRO A383 ; [.4142.0020.0002] # YI SYLLABLE RROP A384 ; [.4143.0020.0002] # YI SYLLABLE RRET A385 ; [.4144.0020.0002] # YI SYLLABLE RREX A386 ; [.4145.0020.0002] # YI SYLLABLE RRE A387 ; [.4146.0020.0002] # YI SYLLABLE RREP A388 ; [.4147.0020.0002] # YI SYLLABLE RRUT A389 ; [.4148.0020.0002] # YI SYLLABLE RRUX A38A ; [.4149.0020.0002] # YI SYLLABLE RRU A38B ; [.414A.0020.0002] # YI SYLLABLE RRUP A38C ; [.414B.0020.0002] # YI SYLLABLE RRURX A38D ; [.414C.0020.0002] # YI SYLLABLE RRUR A38E ; [.414D.0020.0002] # YI SYLLABLE RRYT A38F ; [.414E.0020.0002] # YI SYLLABLE RRYX A390 ; [.414F.0020.0002] # YI SYLLABLE RRY A391 ; [.4150.0020.0002] # YI SYLLABLE RRYP A392 ; [.4151.0020.0002] # YI SYLLABLE RRYRX A393 ; [.4152.0020.0002] # YI SYLLABLE RRYR A394 ; [.4153.0020.0002] # YI SYLLABLE NRAT A395 ; [.4154.0020.0002] # YI SYLLABLE NRAX A396 ; [.4155.0020.0002] # YI SYLLABLE NRA A397 ; [.4156.0020.0002] # YI SYLLABLE NRAP A398 ; [.4157.0020.0002] # YI SYLLABLE NROX A399 ; [.4158.0020.0002] # YI SYLLABLE NRO A39A ; [.4159.0020.0002] # YI SYLLABLE NROP A39B ; [.415A.0020.0002] # YI SYLLABLE NRET A39C ; [.415B.0020.0002] # YI SYLLABLE NREX A39D ; [.415C.0020.0002] # YI SYLLABLE NRE A39E ; [.415D.0020.0002] # YI SYLLABLE NREP A39F ; [.415E.0020.0002] # YI SYLLABLE NRUT A3A0 ; [.415F.0020.0002] # YI SYLLABLE NRUX A3A1 ; [.4160.0020.0002] # YI SYLLABLE NRU A3A2 ; [.4161.0020.0002] # YI SYLLABLE NRUP A3A3 ; [.4162.0020.0002] # YI SYLLABLE NRURX A3A4 ; [.4163.0020.0002] # YI SYLLABLE NRUR A3A5 ; [.4164.0020.0002] # YI SYLLABLE NRYT A3A6 ; [.4165.0020.0002] # YI SYLLABLE NRYX A3A7 ; [.4166.0020.0002] # YI SYLLABLE NRY A3A8 ; [.4167.0020.0002] # YI SYLLABLE NRYP A3A9 ; [.4168.0020.0002] # YI SYLLABLE NRYRX A3AA ; [.4169.0020.0002] # YI SYLLABLE NRYR A3AB ; [.416A.0020.0002] # YI SYLLABLE SHAT A3AC ; [.416B.0020.0002] # YI SYLLABLE SHAX A3AD ; [.416C.0020.0002] # YI SYLLABLE SHA A3AE ; [.416D.0020.0002] # YI SYLLABLE SHAP A3AF ; [.416E.0020.0002] # YI SYLLABLE SHUOX A3B0 ; [.416F.0020.0002] # YI SYLLABLE SHUO A3B1 ; [.4170.0020.0002] # YI SYLLABLE SHUOP A3B2 ; [.4171.0020.0002] # YI SYLLABLE SHOT A3B3 ; [.4172.0020.0002] # YI SYLLABLE SHOX A3B4 ; [.4173.0020.0002] # YI SYLLABLE SHO A3B5 ; [.4174.0020.0002] # YI SYLLABLE SHOP A3B6 ; [.4175.0020.0002] # YI SYLLABLE SHET A3B7 ; [.4176.0020.0002] # YI SYLLABLE SHEX A3B8 ; [.4177.0020.0002] # YI SYLLABLE SHE A3B9 ; [.4178.0020.0002] # YI SYLLABLE SHEP A3BA ; [.4179.0020.0002] # YI SYLLABLE SHUT A3BB ; [.417A.0020.0002] # YI SYLLABLE SHUX A3BC ; [.417B.0020.0002] # YI SYLLABLE SHU A3BD ; [.417C.0020.0002] # YI SYLLABLE SHUP A3BE ; [.417D.0020.0002] # YI SYLLABLE SHURX A3BF ; [.417E.0020.0002] # YI SYLLABLE SHUR A3C0 ; [.417F.0020.0002] # YI SYLLABLE SHYT A3C1 ; [.4180.0020.0002] # YI SYLLABLE SHYX A3C2 ; [.4181.0020.0002] # YI SYLLABLE SHY A3C3 ; [.4182.0020.0002] # YI SYLLABLE SHYP A3C4 ; [.4183.0020.0002] # YI SYLLABLE SHYRX A3C5 ; [.4184.0020.0002] # YI SYLLABLE SHYR A3C6 ; [.4185.0020.0002] # YI SYLLABLE RAT A3C7 ; [.4186.0020.0002] # YI SYLLABLE RAX A3C8 ; [.4187.0020.0002] # YI SYLLABLE RA A3C9 ; [.4188.0020.0002] # YI SYLLABLE RAP A3CA ; [.4189.0020.0002] # YI SYLLABLE RUOX A3CB ; [.418A.0020.0002] # YI SYLLABLE RUO A3CC ; [.418B.0020.0002] # YI SYLLABLE RUOP A3CD ; [.418C.0020.0002] # YI SYLLABLE ROT A3CE ; [.418D.0020.0002] # YI SYLLABLE ROX A3CF ; [.418E.0020.0002] # YI SYLLABLE RO A3D0 ; [.418F.0020.0002] # YI SYLLABLE ROP A3D1 ; [.4190.0020.0002] # YI SYLLABLE REX A3D2 ; [.4191.0020.0002] # YI SYLLABLE RE A3D3 ; [.4192.0020.0002] # YI SYLLABLE REP A3D4 ; [.4193.0020.0002] # YI SYLLABLE RUT A3D5 ; [.4194.0020.0002] # YI SYLLABLE RUX A3D6 ; [.4195.0020.0002] # YI SYLLABLE RU A3D7 ; [.4196.0020.0002] # YI SYLLABLE RUP A3D8 ; [.4197.0020.0002] # YI SYLLABLE RURX A3D9 ; [.4198.0020.0002] # YI SYLLABLE RUR A3DA ; [.4199.0020.0002] # YI SYLLABLE RYT A3DB ; [.419A.0020.0002] # YI SYLLABLE RYX A3DC ; [.419B.0020.0002] # YI SYLLABLE RY A3DD ; [.419C.0020.0002] # YI SYLLABLE RYP A3DE ; [.419D.0020.0002] # YI SYLLABLE RYRX A3DF ; [.419E.0020.0002] # YI SYLLABLE RYR A3E0 ; [.419F.0020.0002] # YI SYLLABLE JIT A3E1 ; [.41A0.0020.0002] # YI SYLLABLE JIX A3E2 ; [.41A1.0020.0002] # YI SYLLABLE JI A3E3 ; [.41A2.0020.0002] # YI SYLLABLE JIP A3E4 ; [.41A3.0020.0002] # YI SYLLABLE JIET A3E5 ; [.41A4.0020.0002] # YI SYLLABLE JIEX A3E6 ; [.41A5.0020.0002] # YI SYLLABLE JIE A3E7 ; [.41A6.0020.0002] # YI SYLLABLE JIEP A3E8 ; [.41A7.0020.0002] # YI SYLLABLE JUOT A3E9 ; [.41A8.0020.0002] # YI SYLLABLE JUOX A3EA ; [.41A9.0020.0002] # YI SYLLABLE JUO A3EB ; [.41AA.0020.0002] # YI SYLLABLE JUOP A3EC ; [.41AB.0020.0002] # YI SYLLABLE JOT A3ED ; [.41AC.0020.0002] # YI SYLLABLE JOX A3EE ; [.41AD.0020.0002] # YI SYLLABLE JO A3EF ; [.41AE.0020.0002] # YI SYLLABLE JOP A3F0 ; [.41AF.0020.0002] # YI SYLLABLE JUT A3F1 ; [.41B0.0020.0002] # YI SYLLABLE JUX A3F2 ; [.41B1.0020.0002] # YI SYLLABLE JU A3F3 ; [.41B2.0020.0002] # YI SYLLABLE JUP A3F4 ; [.41B3.0020.0002] # YI SYLLABLE JURX A3F5 ; [.41B4.0020.0002] # YI SYLLABLE JUR A3F6 ; [.41B5.0020.0002] # YI SYLLABLE JYT A3F7 ; [.41B6.0020.0002] # YI SYLLABLE JYX A3F8 ; [.41B7.0020.0002] # YI SYLLABLE JY A3F9 ; [.41B8.0020.0002] # YI SYLLABLE JYP A3FA ; [.41B9.0020.0002] # YI SYLLABLE JYRX A3FB ; [.41BA.0020.0002] # YI SYLLABLE JYR A3FC ; [.41BB.0020.0002] # YI SYLLABLE QIT A3FD ; [.41BC.0020.0002] # YI SYLLABLE QIX A3FE ; [.41BD.0020.0002] # YI SYLLABLE QI A3FF ; [.41BE.0020.0002] # YI SYLLABLE QIP A400 ; [.41BF.0020.0002] # YI SYLLABLE QIET A401 ; [.41C0.0020.0002] # YI SYLLABLE QIEX A402 ; [.41C1.0020.0002] # YI SYLLABLE QIE A403 ; [.41C2.0020.0002] # YI SYLLABLE QIEP A404 ; [.41C3.0020.0002] # YI SYLLABLE QUOT A405 ; [.41C4.0020.0002] # YI SYLLABLE QUOX A406 ; [.41C5.0020.0002] # YI SYLLABLE QUO A407 ; [.41C6.0020.0002] # YI SYLLABLE QUOP A408 ; [.41C7.0020.0002] # YI SYLLABLE QOT A409 ; [.41C8.0020.0002] # YI SYLLABLE QOX A40A ; [.41C9.0020.0002] # YI SYLLABLE QO A40B ; [.41CA.0020.0002] # YI SYLLABLE QOP A40C ; [.41CB.0020.0002] # YI SYLLABLE QUT A40D ; [.41CC.0020.0002] # YI SYLLABLE QUX A40E ; [.41CD.0020.0002] # YI SYLLABLE QU A40F ; [.41CE.0020.0002] # YI SYLLABLE QUP A410 ; [.41CF.0020.0002] # YI SYLLABLE QURX A411 ; [.41D0.0020.0002] # YI SYLLABLE QUR A412 ; [.41D1.0020.0002] # YI SYLLABLE QYT A413 ; [.41D2.0020.0002] # YI SYLLABLE QYX A414 ; [.41D3.0020.0002] # YI SYLLABLE QY A415 ; [.41D4.0020.0002] # YI SYLLABLE QYP A416 ; [.41D5.0020.0002] # YI SYLLABLE QYRX A417 ; [.41D6.0020.0002] # YI SYLLABLE QYR A418 ; [.41D7.0020.0002] # YI SYLLABLE JJIT A419 ; [.41D8.0020.0002] # YI SYLLABLE JJIX A41A ; [.41D9.0020.0002] # YI SYLLABLE JJI A41B ; [.41DA.0020.0002] # YI SYLLABLE JJIP A41C ; [.41DB.0020.0002] # YI SYLLABLE JJIET A41D ; [.41DC.0020.0002] # YI SYLLABLE JJIEX A41E ; [.41DD.0020.0002] # YI SYLLABLE JJIE A41F ; [.41DE.0020.0002] # YI SYLLABLE JJIEP A420 ; [.41DF.0020.0002] # YI SYLLABLE JJUOX A421 ; [.41E0.0020.0002] # YI SYLLABLE JJUO A422 ; [.41E1.0020.0002] # YI SYLLABLE JJUOP A423 ; [.41E2.0020.0002] # YI SYLLABLE JJOT A424 ; [.41E3.0020.0002] # YI SYLLABLE JJOX A425 ; [.41E4.0020.0002] # YI SYLLABLE JJO A426 ; [.41E5.0020.0002] # YI SYLLABLE JJOP A427 ; [.41E6.0020.0002] # YI SYLLABLE JJUT A428 ; [.41E7.0020.0002] # YI SYLLABLE JJUX A429 ; [.41E8.0020.0002] # YI SYLLABLE JJU A42A ; [.41E9.0020.0002] # YI SYLLABLE JJUP A42B ; [.41EA.0020.0002] # YI SYLLABLE JJURX A42C ; [.41EB.0020.0002] # YI SYLLABLE JJUR A42D ; [.41EC.0020.0002] # YI SYLLABLE JJYT A42E ; [.41ED.0020.0002] # YI SYLLABLE JJYX A42F ; [.41EE.0020.0002] # YI SYLLABLE JJY A430 ; [.41EF.0020.0002] # YI SYLLABLE JJYP A431 ; [.41F0.0020.0002] # YI SYLLABLE NJIT A432 ; [.41F1.0020.0002] # YI SYLLABLE NJIX A433 ; [.41F2.0020.0002] # YI SYLLABLE NJI A434 ; [.41F3.0020.0002] # YI SYLLABLE NJIP A435 ; [.41F4.0020.0002] # YI SYLLABLE NJIET A436 ; [.41F5.0020.0002] # YI SYLLABLE NJIEX A437 ; [.41F6.0020.0002] # YI SYLLABLE NJIE A438 ; [.41F7.0020.0002] # YI SYLLABLE NJIEP A439 ; [.41F8.0020.0002] # YI SYLLABLE NJUOX A43A ; [.41F9.0020.0002] # YI SYLLABLE NJUO A43B ; [.41FA.0020.0002] # YI SYLLABLE NJOT A43C ; [.41FB.0020.0002] # YI SYLLABLE NJOX A43D ; [.41FC.0020.0002] # YI SYLLABLE NJO A43E ; [.41FD.0020.0002] # YI SYLLABLE NJOP A43F ; [.41FE.0020.0002] # YI SYLLABLE NJUX A440 ; [.41FF.0020.0002] # YI SYLLABLE NJU A441 ; [.4200.0020.0002] # YI SYLLABLE NJUP A442 ; [.4201.0020.0002] # YI SYLLABLE NJURX A443 ; [.4202.0020.0002] # YI SYLLABLE NJUR A444 ; [.4203.0020.0002] # YI SYLLABLE NJYT A445 ; [.4204.0020.0002] # YI SYLLABLE NJYX A446 ; [.4205.0020.0002] # YI SYLLABLE NJY A447 ; [.4206.0020.0002] # YI SYLLABLE NJYP A448 ; [.4207.0020.0002] # YI SYLLABLE NJYRX A449 ; [.4208.0020.0002] # YI SYLLABLE NJYR A44A ; [.4209.0020.0002] # YI SYLLABLE NYIT A44B ; [.420A.0020.0002] # YI SYLLABLE NYIX A44C ; [.420B.0020.0002] # YI SYLLABLE NYI A44D ; [.420C.0020.0002] # YI SYLLABLE NYIP A44E ; [.420D.0020.0002] # YI SYLLABLE NYIET A44F ; [.420E.0020.0002] # YI SYLLABLE NYIEX A450 ; [.420F.0020.0002] # YI SYLLABLE NYIE A451 ; [.4210.0020.0002] # YI SYLLABLE NYIEP A452 ; [.4211.0020.0002] # YI SYLLABLE NYUOX A453 ; [.4212.0020.0002] # YI SYLLABLE NYUO A454 ; [.4213.0020.0002] # YI SYLLABLE NYUOP A455 ; [.4214.0020.0002] # YI SYLLABLE NYOT A456 ; [.4215.0020.0002] # YI SYLLABLE NYOX A457 ; [.4216.0020.0002] # YI SYLLABLE NYO A458 ; [.4217.0020.0002] # YI SYLLABLE NYOP A459 ; [.4218.0020.0002] # YI SYLLABLE NYUT A45A ; [.4219.0020.0002] # YI SYLLABLE NYUX A45B ; [.421A.0020.0002] # YI SYLLABLE NYU A45C ; [.421B.0020.0002] # YI SYLLABLE NYUP A45D ; [.421C.0020.0002] # YI SYLLABLE XIT A45E ; [.421D.0020.0002] # YI SYLLABLE XIX A45F ; [.421E.0020.0002] # YI SYLLABLE XI A460 ; [.421F.0020.0002] # YI SYLLABLE XIP A461 ; [.4220.0020.0002] # YI SYLLABLE XIET A462 ; [.4221.0020.0002] # YI SYLLABLE XIEX A463 ; [.4222.0020.0002] # YI SYLLABLE XIE A464 ; [.4223.0020.0002] # YI SYLLABLE XIEP A465 ; [.4224.0020.0002] # YI SYLLABLE XUOX A466 ; [.4225.0020.0002] # YI SYLLABLE XUO A467 ; [.4226.0020.0002] # YI SYLLABLE XOT A468 ; [.4227.0020.0002] # YI SYLLABLE XOX A469 ; [.4228.0020.0002] # YI SYLLABLE XO A46A ; [.4229.0020.0002] # YI SYLLABLE XOP A46B ; [.422A.0020.0002] # YI SYLLABLE XYT A46C ; [.422B.0020.0002] # YI SYLLABLE XYX A46D ; [.422C.0020.0002] # YI SYLLABLE XY A46E ; [.422D.0020.0002] # YI SYLLABLE XYP A46F ; [.422E.0020.0002] # YI SYLLABLE XYRX A470 ; [.422F.0020.0002] # YI SYLLABLE XYR A471 ; [.4230.0020.0002] # YI SYLLABLE YIT A472 ; [.4231.0020.0002] # YI SYLLABLE YIX A473 ; [.4232.0020.0002] # YI SYLLABLE YI A474 ; [.4233.0020.0002] # YI SYLLABLE YIP A475 ; [.4234.0020.0002] # YI SYLLABLE YIET A476 ; [.4235.0020.0002] # YI SYLLABLE YIEX A477 ; [.4236.0020.0002] # YI SYLLABLE YIE A478 ; [.4237.0020.0002] # YI SYLLABLE YIEP A479 ; [.4238.0020.0002] # YI SYLLABLE YUOT A47A ; [.4239.0020.0002] # YI SYLLABLE YUOX A47B ; [.423A.0020.0002] # YI SYLLABLE YUO A47C ; [.423B.0020.0002] # YI SYLLABLE YUOP A47D ; [.423C.0020.0002] # YI SYLLABLE YOT A47E ; [.423D.0020.0002] # YI SYLLABLE YOX A47F ; [.423E.0020.0002] # YI SYLLABLE YO A480 ; [.423F.0020.0002] # YI SYLLABLE YOP A481 ; [.4240.0020.0002] # YI SYLLABLE YUT A482 ; [.4241.0020.0002] # YI SYLLABLE YUX A483 ; [.4242.0020.0002] # YI SYLLABLE YU A484 ; [.4243.0020.0002] # YI SYLLABLE YUP A485 ; [.4244.0020.0002] # YI SYLLABLE YURX A486 ; [.4245.0020.0002] # YI SYLLABLE YUR A487 ; [.4246.0020.0002] # YI SYLLABLE YYT A488 ; [.4247.0020.0002] # YI SYLLABLE YYX A489 ; [.4248.0020.0002] # YI SYLLABLE YY A48A ; [.4249.0020.0002] # YI SYLLABLE YYP A48B ; [.424A.0020.0002] # YI SYLLABLE YYRX A48C ; [.424B.0020.0002] # YI SYLLABLE YYR A4F8 ; [.424C.0020.0002] # LISU LETTER TONE MYA TI A4F9 ; [.424D.0020.0002] # LISU LETTER TONE NA PO A4FA ; [.424E.0020.0002] # LISU LETTER TONE MYA CYA A4FB ; [.424F.0020.0002] # LISU LETTER TONE MYA BO A4FD ; [.4250.0020.0002] # LISU LETTER TONE MYA JEU A4FC ; [.4251.0020.0002] # LISU LETTER TONE MYA NA A4D0 ; [.4252.0020.0002] # LISU LETTER BA A4D1 ; [.4253.0020.0002] # LISU LETTER PA A4D2 ; [.4254.0020.0002] # LISU LETTER PHA A4D3 ; [.4255.0020.0002] # LISU LETTER DA A4D4 ; [.4256.0020.0002] # LISU LETTER TA A4D5 ; [.4257.0020.0002] # LISU LETTER THA A4D6 ; [.4258.0020.0002] # LISU LETTER GA A4D7 ; [.4259.0020.0002] # LISU LETTER KA A4D8 ; [.425A.0020.0002] # LISU LETTER KHA A4D9 ; [.425B.0020.0002] # LISU LETTER JA A4DA ; [.425C.0020.0002] # LISU LETTER CA A4DB ; [.425D.0020.0002] # LISU LETTER CHA A4DC ; [.425E.0020.0002] # LISU LETTER DZA A4DD ; [.425F.0020.0002] # LISU LETTER TSA A4DE ; [.4260.0020.0002] # LISU LETTER TSHA A4DF ; [.4261.0020.0002] # LISU LETTER MA A4E0 ; [.4262.0020.0002] # LISU LETTER NA A4E1 ; [.4263.0020.0002] # LISU LETTER LA A4E2 ; [.4264.0020.0002] # LISU LETTER SA A4E3 ; [.4265.0020.0002] # LISU LETTER ZHA A4E4 ; [.4266.0020.0002] # LISU LETTER ZA A4E5 ; [.4267.0020.0002] # LISU LETTER NGA A4E6 ; [.4268.0020.0002] # LISU LETTER HA A4E7 ; [.4269.0020.0002] # LISU LETTER XA A4E8 ; [.426A.0020.0002] # LISU LETTER HHA A4E9 ; [.426B.0020.0002] # LISU LETTER FA A4EB ; [.426C.0020.0002] # LISU LETTER SHA A4ED ; [.426D.0020.0002] # LISU LETTER GHA A4EA ; [.426E.0020.0002] # LISU LETTER WA A4EC ; [.426F.0020.0002] # LISU LETTER YA A4EE ; [.4270.0020.0002] # LISU LETTER A A4EF ; [.4271.0020.0002] # LISU LETTER AE A4F0 ; [.4272.0020.0002] # LISU LETTER E A4F1 ; [.4273.0020.0002] # LISU LETTER EU A4F2 ; [.4274.0020.0002] # LISU LETTER I A4F3 ; [.4275.0020.0002] # LISU LETTER O A4F4 ; [.4276.0020.0002] # LISU LETTER U A4F5 ; [.4277.0020.0002] # LISU LETTER UE A4F6 ; [.4278.0020.0002] # LISU LETTER UH A4F7 ; [.4279.0020.0002] # LISU LETTER OE 16F00 ; [.427A.0020.0002] # MIAO LETTER PA 16F01 ; [.427B.0020.0002] # MIAO LETTER BA 16F02 ; [.427C.0020.0002] # MIAO LETTER YI PA 16F03 ; [.427D.0020.0002] # MIAO LETTER PLA 16F04 ; [.427E.0020.0002] # MIAO LETTER MA 16F06 ; [.427E.0020.0004] # MIAO LETTER ARCHAIC MA 16F05 ; [.427F.0020.0002] # MIAO LETTER MHA 16F07 ; [.4280.0020.0002] # MIAO LETTER FA 16F08 ; [.4281.0020.0002] # MIAO LETTER VA 16F09 ; [.4282.0020.0002] # MIAO LETTER VFA 16F0A ; [.4283.0020.0002] # MIAO LETTER TA 16F0B ; [.4284.0020.0002] # MIAO LETTER DA 16F0C ; [.4285.0020.0002] # MIAO LETTER YI TTA 16F0D ; [.4286.0020.0002] # MIAO LETTER YI TA 16F0E ; [.4287.0020.0002] # MIAO LETTER TTA 16F0F ; [.4288.0020.0002] # MIAO LETTER DDA 16F10 ; [.4289.0020.0002] # MIAO LETTER NA 16F13 ; [.4289.0020.0004] # MIAO LETTER ARCHAIC NA 16F11 ; [.428A.0020.0002] # MIAO LETTER NHA 16F12 ; [.428B.0020.0002] # MIAO LETTER YI NNA 16F14 ; [.428C.0020.0002] # MIAO LETTER NNA 16F15 ; [.428D.0020.0002] # MIAO LETTER NNHA 16F16 ; [.428E.0020.0002] # MIAO LETTER LA 16F17 ; [.428F.0020.0002] # MIAO LETTER LYA 16F18 ; [.4290.0020.0002] # MIAO LETTER LHA 16F19 ; [.4291.0020.0002] # MIAO LETTER LHYA 16F1A ; [.4292.0020.0002] # MIAO LETTER TLHA 16F1B ; [.4293.0020.0002] # MIAO LETTER DLHA 16F1C ; [.4294.0020.0002] # MIAO LETTER TLHYA 16F1D ; [.4295.0020.0002] # MIAO LETTER DLHYA 16F1E ; [.4296.0020.0002] # MIAO LETTER KA 16F1F ; [.4297.0020.0002] # MIAO LETTER GA 16F20 ; [.4298.0020.0002] # MIAO LETTER YI KA 16F21 ; [.4299.0020.0002] # MIAO LETTER QA 16F22 ; [.429A.0020.0002] # MIAO LETTER QGA 16F23 ; [.429B.0020.0002] # MIAO LETTER NGA 16F25 ; [.429B.0020.0004] # MIAO LETTER ARCHAIC NGA 16F24 ; [.429C.0020.0002] # MIAO LETTER NGHA 16F26 ; [.429D.0020.0002] # MIAO LETTER HA 16F27 ; [.429E.0020.0002] # MIAO LETTER XA 16F28 ; [.429F.0020.0002] # MIAO LETTER GHA 16F29 ; [.42A0.0020.0002] # MIAO LETTER GHHA 16F2A ; [.42A1.0020.0002] # MIAO LETTER TSSA 16F2B ; [.42A2.0020.0002] # MIAO LETTER DZZA 16F2C ; [.42A3.0020.0002] # MIAO LETTER NYA 16F2D ; [.42A4.0020.0002] # MIAO LETTER NYHA 16F2E ; [.42A5.0020.0002] # MIAO LETTER TSHA 16F2F ; [.42A6.0020.0002] # MIAO LETTER DZHA 16F30 ; [.42A7.0020.0002] # MIAO LETTER YI TSHA 16F31 ; [.42A8.0020.0002] # MIAO LETTER YI DZHA 16F32 ; [.42A9.0020.0002] # MIAO LETTER REFORMED TSHA 16F33 ; [.42AA.0020.0002] # MIAO LETTER SHA 16F34 ; [.42AB.0020.0002] # MIAO LETTER SSA 16F35 ; [.42AC.0020.0002] # MIAO LETTER ZHA 16F36 ; [.42AD.0020.0002] # MIAO LETTER ZSHA 16F37 ; [.42AE.0020.0002] # MIAO LETTER TSA 16F38 ; [.42AF.0020.0002] # MIAO LETTER DZA 16F39 ; [.42B0.0020.0002] # MIAO LETTER YI TSA 16F3A ; [.42B1.0020.0002] # MIAO LETTER SA 16F3B ; [.42B2.0020.0002] # MIAO LETTER ZA 16F3C ; [.42B3.0020.0002] # MIAO LETTER ZSA 16F3D ; [.42B4.0020.0002] # MIAO LETTER ZZA 16F3F ; [.42B4.0020.0004] # MIAO LETTER ARCHAIC ZZA 16F3E ; [.42B5.0020.0002] # MIAO LETTER ZZSA 16F40 ; [.42B6.0020.0002] # MIAO LETTER ZZYA 16F41 ; [.42B7.0020.0002] # MIAO LETTER ZZSYA 16F42 ; [.42B8.0020.0002] # MIAO LETTER WA 16F43 ; [.42B9.0020.0002] # MIAO LETTER AH 16F44 ; [.42BA.0020.0002] # MIAO LETTER HHA 16F50 ; [.42BB.0020.0002] # MIAO LETTER NASALIZATION 16F51 ; [.42BC.0020.0002] # MIAO SIGN ASPIRATION 16F52 ; [.42BD.0020.0002] # MIAO SIGN REFORMED VOICING 16F53 ; [.42BE.0020.0002] # MIAO SIGN REFORMED ASPIRATION 16F54 ; [.42BF.0020.0002] # MIAO VOWEL SIGN A 16F55 ; [.42C0.0020.0002] # MIAO VOWEL SIGN AA 16F56 ; [.42C1.0020.0002] # MIAO VOWEL SIGN AHH 16F57 ; [.42C2.0020.0002] # MIAO VOWEL SIGN AN 16F58 ; [.42C3.0020.0002] # MIAO VOWEL SIGN ANG 16F59 ; [.42C4.0020.0002] # MIAO VOWEL SIGN O 16F5A ; [.42C5.0020.0002] # MIAO VOWEL SIGN OO 16F5B ; [.42C6.0020.0002] # MIAO VOWEL SIGN WO 16F5C ; [.42C7.0020.0002] # MIAO VOWEL SIGN W 16F5D ; [.42C8.0020.0002] # MIAO VOWEL SIGN E 16F5E ; [.42C9.0020.0002] # MIAO VOWEL SIGN EN 16F5F ; [.42CA.0020.0002] # MIAO VOWEL SIGN ENG 16F60 ; [.42CB.0020.0002] # MIAO VOWEL SIGN OEY 16F61 ; [.42CC.0020.0002] # MIAO VOWEL SIGN I 16F62 ; [.42CD.0020.0002] # MIAO VOWEL SIGN IA 16F63 ; [.42CE.0020.0002] # MIAO VOWEL SIGN IAN 16F64 ; [.42CF.0020.0002] # MIAO VOWEL SIGN IANG 16F65 ; [.42D0.0020.0002] # MIAO VOWEL SIGN IO 16F66 ; [.42D1.0020.0002] # MIAO VOWEL SIGN IE 16F67 ; [.42D2.0020.0002] # MIAO VOWEL SIGN II 16F68 ; [.42D3.0020.0002] # MIAO VOWEL SIGN IU 16F69 ; [.42D4.0020.0002] # MIAO VOWEL SIGN ING 16F6A ; [.42D5.0020.0002] # MIAO VOWEL SIGN U 16F6B ; [.42D6.0020.0002] # MIAO VOWEL SIGN UA 16F6C ; [.42D7.0020.0002] # MIAO VOWEL SIGN UAN 16F6D ; [.42D8.0020.0002] # MIAO VOWEL SIGN UANG 16F6E ; [.42D9.0020.0002] # MIAO VOWEL SIGN UU 16F6F ; [.42DA.0020.0002] # MIAO VOWEL SIGN UEI 16F70 ; [.42DB.0020.0002] # MIAO VOWEL SIGN UNG 16F71 ; [.42DC.0020.0002] # MIAO VOWEL SIGN Y 16F72 ; [.42DD.0020.0002] # MIAO VOWEL SIGN YI 16F73 ; [.42DE.0020.0002] # MIAO VOWEL SIGN AE 16F74 ; [.42DF.0020.0002] # MIAO VOWEL SIGN AEE 16F75 ; [.42E0.0020.0002] # MIAO VOWEL SIGN ERR 16F76 ; [.42E1.0020.0002] # MIAO VOWEL SIGN ROUNDED ERR 16F77 ; [.42E2.0020.0002] # MIAO VOWEL SIGN ER 16F78 ; [.42E3.0020.0002] # MIAO VOWEL SIGN ROUNDED ER 16F79 ; [.42E4.0020.0002] # MIAO VOWEL SIGN AI 16F7A ; [.42E5.0020.0002] # MIAO VOWEL SIGN EI 16F7B ; [.42E6.0020.0002] # MIAO VOWEL SIGN AU 16F7C ; [.42E7.0020.0002] # MIAO VOWEL SIGN OU 16F7D ; [.42E8.0020.0002] # MIAO VOWEL SIGN N 16F7E ; [.42E9.0020.0002] # MIAO VOWEL SIGN NG 16F8F ; [.42EA.0020.0002] # MIAO TONE RIGHT 16F90 ; [.42EB.0020.0002] # MIAO TONE TOP RIGHT 16F91 ; [.42EC.0020.0002] # MIAO TONE ABOVE 16F92 ; [.42ED.0020.0002] # MIAO TONE BELOW 16F93 ; [.42EE.0020.0002] # MIAO LETTER TONE-2 16F94 ; [.42EF.0020.0002] # MIAO LETTER TONE-3 16F95 ; [.42F0.0020.0002] # MIAO LETTER TONE-4 16F96 ; [.42F1.0020.0002] # MIAO LETTER TONE-5 16F97 ; [.42F2.0020.0002] # MIAO LETTER TONE-6 16F98 ; [.42F3.0020.0002] # MIAO LETTER TONE-7 16F99 ; [.42F4.0020.0002] # MIAO LETTER TONE-8 16F9A ; [.42F5.0020.0002] # MIAO LETTER REFORMED TONE-1 16F9B ; [.42F6.0020.0002] # MIAO LETTER REFORMED TONE-2 16F9C ; [.42F7.0020.0002] # MIAO LETTER REFORMED TONE-4 16F9D ; [.42F8.0020.0002] # MIAO LETTER REFORMED TONE-5 16F9E ; [.42F9.0020.0002] # MIAO LETTER REFORMED TONE-6 16F9F ; [.42FA.0020.0002] # MIAO LETTER REFORMED TONE-8 118FF ; [.42FB.0020.0002] # WARANG CITI OM 118C0 ; [.42FC.0020.0002] # WARANG CITI SMALL LETTER NGAA 118A0 ; [.42FC.0020.0008] # WARANG CITI CAPITAL LETTER NGAA 118C1 ; [.42FD.0020.0002] # WARANG CITI SMALL LETTER A 118A1 ; [.42FD.0020.0008] # WARANG CITI CAPITAL LETTER A 118C2 ; [.42FE.0020.0002] # WARANG CITI SMALL LETTER WI 118A2 ; [.42FE.0020.0008] # WARANG CITI CAPITAL LETTER WI 118C3 ; [.42FF.0020.0002] # WARANG CITI SMALL LETTER YU 118A3 ; [.42FF.0020.0008] # WARANG CITI CAPITAL LETTER YU 118C4 ; [.4300.0020.0002] # WARANG CITI SMALL LETTER YA 118A4 ; [.4300.0020.0008] # WARANG CITI CAPITAL LETTER YA 118C5 ; [.4301.0020.0002] # WARANG CITI SMALL LETTER YO 118A5 ; [.4301.0020.0008] # WARANG CITI CAPITAL LETTER YO 118C6 ; [.4302.0020.0002] # WARANG CITI SMALL LETTER II 118A6 ; [.4302.0020.0008] # WARANG CITI CAPITAL LETTER II 118C7 ; [.4303.0020.0002] # WARANG CITI SMALL LETTER UU 118A7 ; [.4303.0020.0008] # WARANG CITI CAPITAL LETTER UU 118C8 ; [.4304.0020.0002] # WARANG CITI SMALL LETTER E 118A8 ; [.4304.0020.0008] # WARANG CITI CAPITAL LETTER E 118C9 ; [.4305.0020.0002] # WARANG CITI SMALL LETTER O 118A9 ; [.4305.0020.0008] # WARANG CITI CAPITAL LETTER O 118CA ; [.4306.0020.0002] # WARANG CITI SMALL LETTER ANG 118AA ; [.4306.0020.0008] # WARANG CITI CAPITAL LETTER ANG 118CB ; [.4307.0020.0002] # WARANG CITI SMALL LETTER GA 118AB ; [.4307.0020.0008] # WARANG CITI CAPITAL LETTER GA 118CC ; [.4308.0020.0002] # WARANG CITI SMALL LETTER KO 118AC ; [.4308.0020.0008] # WARANG CITI CAPITAL LETTER KO 118CD ; [.4309.0020.0002] # WARANG CITI SMALL LETTER ENY 118AD ; [.4309.0020.0008] # WARANG CITI CAPITAL LETTER ENY 118CE ; [.430A.0020.0002] # WARANG CITI SMALL LETTER YUJ 118AE ; [.430A.0020.0008] # WARANG CITI CAPITAL LETTER YUJ 118CF ; [.430B.0020.0002] # WARANG CITI SMALL LETTER UC 118AF ; [.430B.0020.0008] # WARANG CITI CAPITAL LETTER UC 118D0 ; [.430C.0020.0002] # WARANG CITI SMALL LETTER ENN 118B0 ; [.430C.0020.0008] # WARANG CITI CAPITAL LETTER ENN 118D1 ; [.430D.0020.0002] # WARANG CITI SMALL LETTER ODD 118B1 ; [.430D.0020.0008] # WARANG CITI CAPITAL LETTER ODD 118D2 ; [.430E.0020.0002] # WARANG CITI SMALL LETTER TTE 118B2 ; [.430E.0020.0008] # WARANG CITI CAPITAL LETTER TTE 118D3 ; [.430F.0020.0002] # WARANG CITI SMALL LETTER NUNG 118B3 ; [.430F.0020.0008] # WARANG CITI CAPITAL LETTER NUNG 118D4 ; [.4310.0020.0002] # WARANG CITI SMALL LETTER DA 118B4 ; [.4310.0020.0008] # WARANG CITI CAPITAL LETTER DA 118D5 ; [.4311.0020.0002] # WARANG CITI SMALL LETTER AT 118B5 ; [.4311.0020.0008] # WARANG CITI CAPITAL LETTER AT 118D6 ; [.4312.0020.0002] # WARANG CITI SMALL LETTER AM 118B6 ; [.4312.0020.0008] # WARANG CITI CAPITAL LETTER AM 118D7 ; [.4313.0020.0002] # WARANG CITI SMALL LETTER BU 118B7 ; [.4313.0020.0008] # WARANG CITI CAPITAL LETTER BU 118D8 ; [.4314.0020.0002] # WARANG CITI SMALL LETTER PU 118B8 ; [.4314.0020.0008] # WARANG CITI CAPITAL LETTER PU 118D9 ; [.4315.0020.0002] # WARANG CITI SMALL LETTER HIYO 118B9 ; [.4315.0020.0008] # WARANG CITI CAPITAL LETTER HIYO 118DA ; [.4316.0020.0002] # WARANG CITI SMALL LETTER HOLO 118BA ; [.4316.0020.0008] # WARANG CITI CAPITAL LETTER HOLO 118DB ; [.4317.0020.0002] # WARANG CITI SMALL LETTER HORR 118BB ; [.4317.0020.0008] # WARANG CITI CAPITAL LETTER HORR 118DC ; [.4318.0020.0002] # WARANG CITI SMALL LETTER HAR 118BC ; [.4318.0020.0008] # WARANG CITI CAPITAL LETTER HAR 118DD ; [.4319.0020.0002] # WARANG CITI SMALL LETTER SSUU 118BD ; [.4319.0020.0008] # WARANG CITI CAPITAL LETTER SSUU 118DE ; [.431A.0020.0002] # WARANG CITI SMALL LETTER SII 118BE ; [.431A.0020.0008] # WARANG CITI CAPITAL LETTER SII 118DF ; [.431B.0020.0002] # WARANG CITI SMALL LETTER VIYO 118BF ; [.431B.0020.0008] # WARANG CITI CAPITAL LETTER VIYO 11AD5 ; [.431C.0020.0002] # PAU CIN HAU LETTER A 11AD6 ; [.431D.0020.0002] # PAU CIN HAU LETTER E 11AD7 ; [.431E.0020.0002] # PAU CIN HAU LETTER I 11AD8 ; [.431F.0020.0002] # PAU CIN HAU LETTER O 11AD9 ; [.4320.0020.0002] # PAU CIN HAU LETTER U 11ADA ; [.4321.0020.0002] # PAU CIN HAU LETTER UA 11ADB ; [.4322.0020.0002] # PAU CIN HAU LETTER IA 11AC0 ; [.4323.0020.0002] # PAU CIN HAU LETTER PA 11AC1 ; [.4324.0020.0002] # PAU CIN HAU LETTER KA 11AC2 ; [.4325.0020.0002] # PAU CIN HAU LETTER LA 11AC3 ; [.4326.0020.0002] # PAU CIN HAU LETTER MA 11AC4 ; [.4327.0020.0002] # PAU CIN HAU LETTER DA 11AC5 ; [.4328.0020.0002] # PAU CIN HAU LETTER ZA 11AC6 ; [.4329.0020.0002] # PAU CIN HAU LETTER VA 11AC7 ; [.432A.0020.0002] # PAU CIN HAU LETTER NGA 11AC8 ; [.432B.0020.0002] # PAU CIN HAU LETTER HA 11AC9 ; [.432C.0020.0002] # PAU CIN HAU LETTER GA 11ACA ; [.432D.0020.0002] # PAU CIN HAU LETTER KHA 11ACB ; [.432E.0020.0002] # PAU CIN HAU LETTER SA 11ACC ; [.432F.0020.0002] # PAU CIN HAU LETTER BA 11ACD ; [.4330.0020.0002] # PAU CIN HAU LETTER CA 11ACE ; [.4331.0020.0002] # PAU CIN HAU LETTER TA 11ACF ; [.4332.0020.0002] # PAU CIN HAU LETTER THA 11AD0 ; [.4333.0020.0002] # PAU CIN HAU LETTER NA 11AD1 ; [.4334.0020.0002] # PAU CIN HAU LETTER PHA 11AD2 ; [.4335.0020.0002] # PAU CIN HAU LETTER RA 11AD3 ; [.4336.0020.0002] # PAU CIN HAU LETTER FA 11AD4 ; [.4337.0020.0002] # PAU CIN HAU LETTER CHA 11ADC ; [.4338.0020.0002] # PAU CIN HAU LETTER FINAL P 11ADD ; [.4339.0020.0002] # PAU CIN HAU LETTER FINAL K 11ADF ; [.433A.0020.0002] # PAU CIN HAU LETTER FINAL M 11AE0 ; [.433B.0020.0002] # PAU CIN HAU LETTER FINAL N 11AE1 ; [.433C.0020.0002] # PAU CIN HAU LETTER FINAL L 11AE2 ; [.433D.0020.0002] # PAU CIN HAU LETTER FINAL W 11AE3 ; [.433E.0020.0002] # PAU CIN HAU LETTER FINAL NG 11ADE ; [.433F.0020.0002] # PAU CIN HAU LETTER FINAL T 11AE4 ; [.4340.0020.0002] # PAU CIN HAU LETTER FINAL Y 11AEF ; [.4341.0020.0002] # PAU CIN HAU MID-LEVEL TONE 11AF2 ; [.4342.0020.0002] # PAU CIN HAU MID-LEVEL TONE FINAL 11AF1 ; [.4343.0020.0002] # PAU CIN HAU MID-LEVEL TONE LONG FINAL 11AE6 ; [.4344.0020.0002] # PAU CIN HAU RISING TONE 11AE9 ; [.4345.0020.0002] # PAU CIN HAU RISING TONE FINAL 11AE5 ; [.4346.0020.0002] # PAU CIN HAU RISING TONE LONG 11AE8 ; [.4347.0020.0002] # PAU CIN HAU RISING TONE LONG FINAL 11AF4 ; [.4348.0020.0002] # PAU CIN HAU LOW-FALLING TONE 11AF7 ; [.4349.0020.0002] # PAU CIN HAU LOW-FALLING TONE FINAL 11AF3 ; [.434A.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG 11AF6 ; [.434B.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG FINAL 11AEC ; [.434C.0020.0002] # PAU CIN HAU SANDHI TONE 11AEE ; [.434D.0020.0002] # PAU CIN HAU SANDHI TONE FINAL 11AEB ; [.434E.0020.0002] # PAU CIN HAU SANDHI TONE LONG 11AED ; [.434F.0020.0002] # PAU CIN HAU SANDHI TONE LONG FINAL 11AF5 ; [.4350.0020.0002] # PAU CIN HAU GLOTTAL STOP 11AF8 ; [.4351.0020.0002] # PAU CIN HAU GLOTTAL STOP FINAL 11AE7 ; [.4352.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP 11AEA ; [.4353.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP FINAL 11AF0 ; [.4354.0020.0002] # PAU CIN HAU GLOTTAL STOP VARIANT 16B00 ; [.4355.0020.0002] # PAHAWH HMONG VOWEL KEEB 16B01 ; [.4356.0020.0002] # PAHAWH HMONG VOWEL KEEV 16B02 ; [.4357.0020.0002] # PAHAWH HMONG VOWEL KIB 16B03 ; [.4358.0020.0002] # PAHAWH HMONG VOWEL KIV 16B04 ; [.4359.0020.0002] # PAHAWH HMONG VOWEL KAUB 16B05 ; [.435A.0020.0002] # PAHAWH HMONG VOWEL KAUV 16B06 ; [.435B.0020.0002] # PAHAWH HMONG VOWEL KUB 16B07 ; [.435C.0020.0002] # PAHAWH HMONG VOWEL KUV 16B08 ; [.435D.0020.0002] # PAHAWH HMONG VOWEL KEB 16B09 ; [.435E.0020.0002] # PAHAWH HMONG VOWEL KEV 16B0A ; [.435F.0020.0002] # PAHAWH HMONG VOWEL KAIB 16B0B ; [.4360.0020.0002] # PAHAWH HMONG VOWEL KAIV 16B0C ; [.4361.0020.0002] # PAHAWH HMONG VOWEL KOOB 16B0D ; [.4362.0020.0002] # PAHAWH HMONG VOWEL KOOV 16B0E ; [.4363.0020.0002] # PAHAWH HMONG VOWEL KAWB 16B0F ; [.4364.0020.0002] # PAHAWH HMONG VOWEL KAWV 16B10 ; [.4365.0020.0002] # PAHAWH HMONG VOWEL KUAB 16B11 ; [.4366.0020.0002] # PAHAWH HMONG VOWEL KUAV 16B12 ; [.4367.0020.0002] # PAHAWH HMONG VOWEL KOB 16B13 ; [.4368.0020.0002] # PAHAWH HMONG VOWEL KOV 16B14 ; [.4369.0020.0002] # PAHAWH HMONG VOWEL KIAB 16B15 ; [.436A.0020.0002] # PAHAWH HMONG VOWEL KIAV 16B16 ; [.436B.0020.0002] # PAHAWH HMONG VOWEL KAB 16B17 ; [.436C.0020.0002] # PAHAWH HMONG VOWEL KAV 16B18 ; [.436D.0020.0002] # PAHAWH HMONG VOWEL KWB 16B19 ; [.436E.0020.0002] # PAHAWH HMONG VOWEL KWV 16B1A ; [.436F.0020.0002] # PAHAWH HMONG VOWEL KAAB 16B1B ; [.4370.0020.0002] # PAHAWH HMONG VOWEL KAAV 16B1C ; [.4371.0020.0002] # PAHAWH HMONG CONSONANT VAU 16B1D ; [.4372.0020.0002] # PAHAWH HMONG CONSONANT NTSAU 16B1E ; [.4373.0020.0002] # PAHAWH HMONG CONSONANT LAU 16B1F ; [.4374.0020.0002] # PAHAWH HMONG CONSONANT HAU 16B20 ; [.4375.0020.0002] # PAHAWH HMONG CONSONANT NLAU 16B21 ; [.4376.0020.0002] # PAHAWH HMONG CONSONANT RAU 16B22 ; [.4377.0020.0002] # PAHAWH HMONG CONSONANT NKAU 16B23 ; [.4378.0020.0002] # PAHAWH HMONG CONSONANT QHAU 16B24 ; [.4379.0020.0002] # PAHAWH HMONG CONSONANT YAU 16B25 ; [.437A.0020.0002] # PAHAWH HMONG CONSONANT HLAU 16B26 ; [.437B.0020.0002] # PAHAWH HMONG CONSONANT MAU 16B27 ; [.437C.0020.0002] # PAHAWH HMONG CONSONANT CHAU 16B28 ; [.437D.0020.0002] # PAHAWH HMONG CONSONANT NCHAU 16B29 ; [.437E.0020.0002] # PAHAWH HMONG CONSONANT HNAU 16B2A ; [.437F.0020.0002] # PAHAWH HMONG CONSONANT PLHAU 16B2B ; [.4380.0020.0002] # PAHAWH HMONG CONSONANT NTHAU 16B2C ; [.4381.0020.0002] # PAHAWH HMONG CONSONANT NAU 16B2D ; [.4382.0020.0002] # PAHAWH HMONG CONSONANT AU 16B2E ; [.4383.0020.0002] # PAHAWH HMONG CONSONANT XAU 16B2F ; [.4384.0020.0002] # PAHAWH HMONG CONSONANT CAU 16B40 ; [.4385.0020.0002] # PAHAWH HMONG SIGN VOS SEEV 16B41 ; [.4386.0020.0002] # PAHAWH HMONG SIGN MEEJ SUAB 16B63 ; [.4387.0020.0002] # PAHAWH HMONG SIGN VOS LUB 16B64 ; [.4388.0020.0002] # PAHAWH HMONG SIGN XYOO 16B65 ; [.4389.0020.0002] # PAHAWH HMONG SIGN HLI 16B66 ; [.438A.0020.0002] # PAHAWH HMONG SIGN THIRD-STAGE HLI 16B67 ; [.438B.0020.0002] # PAHAWH HMONG SIGN ZWJ THAJ 16B68 ; [.438C.0020.0002] # PAHAWH HMONG SIGN HNUB 16B69 ; [.438D.0020.0002] # PAHAWH HMONG SIGN NQIG 16B6A ; [.438E.0020.0002] # PAHAWH HMONG SIGN XIAB 16B6B ; [.438F.0020.0002] # PAHAWH HMONG SIGN NTUJ 16B6C ; [.4390.0020.0002] # PAHAWH HMONG SIGN AV 16B6D ; [.4391.0020.0002] # PAHAWH HMONG SIGN TXHEEJ CEEV 16B6E ; [.4392.0020.0002] # PAHAWH HMONG SIGN MEEJ TSEEB 16B6F ; [.4393.0020.0002] # PAHAWH HMONG SIGN TAU 16B70 ; [.4394.0020.0002] # PAHAWH HMONG SIGN LOS 16B71 ; [.4395.0020.0002] # PAHAWH HMONG SIGN MUS 16B72 ; [.4396.0020.0002] # PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG 16B73 ; [.4397.0020.0002] # PAHAWH HMONG SIGN CIM CUAM TSHOOJ 16B74 ; [.4398.0020.0002] # PAHAWH HMONG SIGN CIM TXWV 16B75 ; [.4399.0020.0002] # PAHAWH HMONG SIGN CIM TXWV CHWV 16B76 ; [.439A.0020.0002] # PAHAWH HMONG SIGN CIM PUB DAWB 16B77 ; [.439B.0020.0002] # PAHAWH HMONG SIGN CIM NRES TOS 16B7D ; [.439C.0020.0002] # PAHAWH HMONG CLAN SIGN TSHEEJ 16B7E ; [.439D.0020.0002] # PAHAWH HMONG CLAN SIGN YEEG 16B7F ; [.439E.0020.0002] # PAHAWH HMONG CLAN SIGN LIS 16B80 ; [.439F.0020.0002] # PAHAWH HMONG CLAN SIGN LAUJ 16B81 ; [.43A0.0020.0002] # PAHAWH HMONG CLAN SIGN XYOOJ 16B82 ; [.43A1.0020.0002] # PAHAWH HMONG CLAN SIGN KOO 16B83 ; [.43A2.0020.0002] # PAHAWH HMONG CLAN SIGN HAWJ 16B84 ; [.43A3.0020.0002] # PAHAWH HMONG CLAN SIGN MUAS 16B85 ; [.43A4.0020.0002] # PAHAWH HMONG CLAN SIGN THOJ 16B86 ; [.43A5.0020.0002] # PAHAWH HMONG CLAN SIGN TSAB 16B87 ; [.43A6.0020.0002] # PAHAWH HMONG CLAN SIGN PHAB 16B88 ; [.43A7.0020.0002] # PAHAWH HMONG CLAN SIGN KHAB 16B89 ; [.43A8.0020.0002] # PAHAWH HMONG CLAN SIGN HAM 16B8A ; [.43A9.0020.0002] # PAHAWH HMONG CLAN SIGN VAJ 16B8B ; [.43AA.0020.0002] # PAHAWH HMONG CLAN SIGN FAJ 16B8C ; [.43AB.0020.0002] # PAHAWH HMONG CLAN SIGN YAJ 16B8D ; [.43AC.0020.0002] # PAHAWH HMONG CLAN SIGN TSWB 16B8E ; [.43AD.0020.0002] # PAHAWH HMONG CLAN SIGN KWM 16B8F ; [.43AE.0020.0002] # PAHAWH HMONG CLAN SIGN VWJ 10280 ; [.43AF.0020.0002] # LYCIAN LETTER A 10281 ; [.43B0.0020.0002] # LYCIAN LETTER E 10282 ; [.43B1.0020.0002] # LYCIAN LETTER B 10283 ; [.43B2.0020.0002] # LYCIAN LETTER BH 10284 ; [.43B3.0020.0002] # LYCIAN LETTER G 10285 ; [.43B4.0020.0002] # LYCIAN LETTER D 10286 ; [.43B5.0020.0002] # LYCIAN LETTER I 10287 ; [.43B6.0020.0002] # LYCIAN LETTER W 10288 ; [.43B7.0020.0002] # LYCIAN LETTER Z 10289 ; [.43B8.0020.0002] # LYCIAN LETTER TH 1028A ; [.43B9.0020.0002] # LYCIAN LETTER J 1028B ; [.43BA.0020.0002] # LYCIAN LETTER K 1028C ; [.43BB.0020.0002] # LYCIAN LETTER Q 1028D ; [.43BC.0020.0002] # LYCIAN LETTER L 1028E ; [.43BD.0020.0002] # LYCIAN LETTER M 1028F ; [.43BE.0020.0002] # LYCIAN LETTER N 10290 ; [.43BF.0020.0002] # LYCIAN LETTER MM 10291 ; [.43C0.0020.0002] # LYCIAN LETTER NN 10292 ; [.43C1.0020.0002] # LYCIAN LETTER U 10293 ; [.43C2.0020.0002] # LYCIAN LETTER P 10294 ; [.43C3.0020.0002] # LYCIAN LETTER KK 10295 ; [.43C4.0020.0002] # LYCIAN LETTER R 10296 ; [.43C5.0020.0002] # LYCIAN LETTER S 10297 ; [.43C6.0020.0002] # LYCIAN LETTER T 10298 ; [.43C7.0020.0002] # LYCIAN LETTER TT 10299 ; [.43C8.0020.0002] # LYCIAN LETTER AN 1029A ; [.43C9.0020.0002] # LYCIAN LETTER EN 1029B ; [.43CA.0020.0002] # LYCIAN LETTER H 1029C ; [.43CB.0020.0002] # LYCIAN LETTER X 102A0 ; [.43CC.0020.0002] # CARIAN LETTER A 102A1 ; [.43CD.0020.0002] # CARIAN LETTER P2 102A2 ; [.43CE.0020.0002] # CARIAN LETTER D 102A3 ; [.43CF.0020.0002] # CARIAN LETTER L 102A4 ; [.43D0.0020.0002] # CARIAN LETTER UUU 102A5 ; [.43D1.0020.0002] # CARIAN LETTER R 102A6 ; [.43D2.0020.0002] # CARIAN LETTER LD 102A7 ; [.43D3.0020.0002] # CARIAN LETTER A2 102A8 ; [.43D4.0020.0002] # CARIAN LETTER Q 102A9 ; [.43D5.0020.0002] # CARIAN LETTER B 102AA ; [.43D6.0020.0002] # CARIAN LETTER M 102AB ; [.43D7.0020.0002] # CARIAN LETTER O 102AC ; [.43D8.0020.0002] # CARIAN LETTER D2 102AD ; [.43D9.0020.0002] # CARIAN LETTER T 102AE ; [.43DA.0020.0002] # CARIAN LETTER SH 102AF ; [.43DB.0020.0002] # CARIAN LETTER SH2 102B0 ; [.43DC.0020.0002] # CARIAN LETTER S 102B1 ; [.43DD.0020.0002] # CARIAN LETTER C-18 102B2 ; [.43DE.0020.0002] # CARIAN LETTER U 102B3 ; [.43DF.0020.0002] # CARIAN LETTER NN 102B4 ; [.43E0.0020.0002] # CARIAN LETTER X 102B5 ; [.43E1.0020.0002] # CARIAN LETTER N 102B6 ; [.43E2.0020.0002] # CARIAN LETTER TT2 102B7 ; [.43E3.0020.0002] # CARIAN LETTER P 102B8 ; [.43E4.0020.0002] # CARIAN LETTER SS 102B9 ; [.43E5.0020.0002] # CARIAN LETTER I 102BA ; [.43E6.0020.0002] # CARIAN LETTER E 102BB ; [.43E7.0020.0002] # CARIAN LETTER UUUU 102BC ; [.43E8.0020.0002] # CARIAN LETTER K 102BD ; [.43E9.0020.0002] # CARIAN LETTER K2 102BE ; [.43EA.0020.0002] # CARIAN LETTER ND 102BF ; [.43EB.0020.0002] # CARIAN LETTER UU 102C0 ; [.43EC.0020.0002] # CARIAN LETTER G 102C1 ; [.43ED.0020.0002] # CARIAN LETTER G2 102C2 ; [.43EE.0020.0002] # CARIAN LETTER ST 102C3 ; [.43EF.0020.0002] # CARIAN LETTER ST2 102C4 ; [.43F0.0020.0002] # CARIAN LETTER NG 102C5 ; [.43F1.0020.0002] # CARIAN LETTER II 102C6 ; [.43F2.0020.0002] # CARIAN LETTER C-39 102C7 ; [.43F3.0020.0002] # CARIAN LETTER TT 102C8 ; [.43F4.0020.0002] # CARIAN LETTER UUU2 102C9 ; [.43F5.0020.0002] # CARIAN LETTER RR 102CA ; [.43F6.0020.0002] # CARIAN LETTER MB 102CB ; [.43F7.0020.0002] # CARIAN LETTER MB2 102CC ; [.43F8.0020.0002] # CARIAN LETTER MB3 102CD ; [.43F9.0020.0002] # CARIAN LETTER MB4 102CE ; [.43FA.0020.0002] # CARIAN LETTER LD2 102CF ; [.43FB.0020.0002] # CARIAN LETTER E2 102D0 ; [.43FC.0020.0002] # CARIAN LETTER UUU3 10920 ; [.43FD.0020.0002] # LYDIAN LETTER A 10921 ; [.43FE.0020.0002] # LYDIAN LETTER B 10922 ; [.43FF.0020.0002] # LYDIAN LETTER G 10923 ; [.4400.0020.0002] # LYDIAN LETTER D 10924 ; [.4401.0020.0002] # LYDIAN LETTER E 10925 ; [.4402.0020.0002] # LYDIAN LETTER V 10926 ; [.4403.0020.0002] # LYDIAN LETTER I 10927 ; [.4404.0020.0002] # LYDIAN LETTER Y 10928 ; [.4405.0020.0002] # LYDIAN LETTER K 10929 ; [.4406.0020.0002] # LYDIAN LETTER L 1092A ; [.4407.0020.0002] # LYDIAN LETTER M 1092B ; [.4408.0020.0002] # LYDIAN LETTER N 1092C ; [.4409.0020.0002] # LYDIAN LETTER O 1092D ; [.440A.0020.0002] # LYDIAN LETTER R 1092E ; [.440B.0020.0002] # LYDIAN LETTER SS 1092F ; [.440C.0020.0002] # LYDIAN LETTER T 10930 ; [.440D.0020.0002] # LYDIAN LETTER U 10931 ; [.440E.0020.0002] # LYDIAN LETTER F 10932 ; [.440F.0020.0002] # LYDIAN LETTER Q 10933 ; [.4410.0020.0002] # LYDIAN LETTER S 10934 ; [.4411.0020.0002] # LYDIAN LETTER TT 10935 ; [.4412.0020.0002] # LYDIAN LETTER AN 10936 ; [.4413.0020.0002] # LYDIAN LETTER EN 10937 ; [.4414.0020.0002] # LYDIAN LETTER LY 10938 ; [.4415.0020.0002] # LYDIAN LETTER NN 10939 ; [.4416.0020.0002] # LYDIAN LETTER C 10300 ; [.4417.0020.0002] # OLD ITALIC LETTER A 10301 ; [.4418.0020.0002] # OLD ITALIC LETTER BE 10302 ; [.4419.0020.0002] # OLD ITALIC LETTER KE 10303 ; [.441A.0020.0002] # OLD ITALIC LETTER DE 10304 ; [.441B.0020.0002] # OLD ITALIC LETTER E 10305 ; [.441C.0020.0002] # OLD ITALIC LETTER VE 10306 ; [.441D.0020.0002] # OLD ITALIC LETTER ZE 10307 ; [.441E.0020.0002] # OLD ITALIC LETTER HE 10308 ; [.441F.0020.0002] # OLD ITALIC LETTER THE 10309 ; [.4420.0020.0002] # OLD ITALIC LETTER I 1030A ; [.4421.0020.0002] # OLD ITALIC LETTER KA 1030B ; [.4422.0020.0002] # OLD ITALIC LETTER EL 1030C ; [.4423.0020.0002] # OLD ITALIC LETTER EM 1030D ; [.4424.0020.0002] # OLD ITALIC LETTER EN 1030E ; [.4425.0020.0002] # OLD ITALIC LETTER ESH 1031F ; [.4426.0020.0002] # OLD ITALIC LETTER ESS 1030F ; [.4427.0020.0002] # OLD ITALIC LETTER O 10310 ; [.4428.0020.0002] # OLD ITALIC LETTER PE 10311 ; [.4429.0020.0002] # OLD ITALIC LETTER SHE 10312 ; [.442A.0020.0002] # OLD ITALIC LETTER KU 10313 ; [.442B.0020.0002] # OLD ITALIC LETTER ER 10314 ; [.442C.0020.0002] # OLD ITALIC LETTER ES 10315 ; [.442D.0020.0002] # OLD ITALIC LETTER TE 10316 ; [.442E.0020.0002] # OLD ITALIC LETTER U 10317 ; [.442F.0020.0002] # OLD ITALIC LETTER EKS 10318 ; [.4430.0020.0002] # OLD ITALIC LETTER PHE 10319 ; [.4431.0020.0002] # OLD ITALIC LETTER KHE 1031A ; [.4432.0020.0002] # OLD ITALIC LETTER EF 1031B ; [.4433.0020.0002] # OLD ITALIC LETTER ERS 1031C ; [.4434.0020.0002] # OLD ITALIC LETTER CHE 1031D ; [.4435.0020.0002] # OLD ITALIC LETTER II 1031E ; [.4436.0020.0002] # OLD ITALIC LETTER UU 10330 ; [.4437.0020.0002] # GOTHIC LETTER AHSA 10331 ; [.4438.0020.0002] # GOTHIC LETTER BAIRKAN 10332 ; [.4439.0020.0002] # GOTHIC LETTER GIBA 10333 ; [.443A.0020.0002] # GOTHIC LETTER DAGS 10334 ; [.443B.0020.0002] # GOTHIC LETTER AIHVUS 10335 ; [.443C.0020.0002] # GOTHIC LETTER QAIRTHRA 10336 ; [.443D.0020.0002] # GOTHIC LETTER IUJA 10337 ; [.443E.0020.0002] # GOTHIC LETTER HAGL 10338 ; [.443F.0020.0002] # GOTHIC LETTER THIUTH 10339 ; [.4440.0020.0002] # GOTHIC LETTER EIS 1033A ; [.4441.0020.0002] # GOTHIC LETTER KUSMA 1033B ; [.4442.0020.0002] # GOTHIC LETTER LAGUS 1033C ; [.4443.0020.0002] # GOTHIC LETTER MANNA 1033D ; [.4444.0020.0002] # GOTHIC LETTER NAUTHS 1033E ; [.4445.0020.0002] # GOTHIC LETTER JER 1033F ; [.4446.0020.0002] # GOTHIC LETTER URUS 10340 ; [.4447.0020.0002] # GOTHIC LETTER PAIRTHRA 10341 ; [.4448.0020.0002] # GOTHIC LETTER NINETY 10342 ; [.4449.0020.0002] # GOTHIC LETTER RAIDA 10343 ; [.444A.0020.0002] # GOTHIC LETTER SAUIL 10344 ; [.444B.0020.0002] # GOTHIC LETTER TEIWS 10345 ; [.444C.0020.0002] # GOTHIC LETTER WINJA 10346 ; [.444D.0020.0002] # GOTHIC LETTER FAIHU 10347 ; [.444E.0020.0002] # GOTHIC LETTER IGGWS 10348 ; [.444F.0020.0002] # GOTHIC LETTER HWAIR 10349 ; [.4450.0020.0002] # GOTHIC LETTER OTHAL 1034A ; [.4451.0020.0002] # GOTHIC LETTER NINE HUNDRED 10428 ; [.4452.0020.0002] # DESERET SMALL LETTER LONG I 10400 ; [.4452.0020.0008] # DESERET CAPITAL LETTER LONG I 10429 ; [.4453.0020.0002] # DESERET SMALL LETTER LONG E 10401 ; [.4453.0020.0008] # DESERET CAPITAL LETTER LONG E 1042A ; [.4454.0020.0002] # DESERET SMALL LETTER LONG A 10402 ; [.4454.0020.0008] # DESERET CAPITAL LETTER LONG A 1042B ; [.4455.0020.0002] # DESERET SMALL LETTER LONG AH 10403 ; [.4455.0020.0008] # DESERET CAPITAL LETTER LONG AH 1042C ; [.4456.0020.0002] # DESERET SMALL LETTER LONG O 10404 ; [.4456.0020.0008] # DESERET CAPITAL LETTER LONG O 1042D ; [.4457.0020.0002] # DESERET SMALL LETTER LONG OO 10405 ; [.4457.0020.0008] # DESERET CAPITAL LETTER LONG OO 1042E ; [.4458.0020.0002] # DESERET SMALL LETTER SHORT I 10406 ; [.4458.0020.0008] # DESERET CAPITAL LETTER SHORT I 1042F ; [.4459.0020.0002] # DESERET SMALL LETTER SHORT E 10407 ; [.4459.0020.0008] # DESERET CAPITAL LETTER SHORT E 10430 ; [.445A.0020.0002] # DESERET SMALL LETTER SHORT A 10408 ; [.445A.0020.0008] # DESERET CAPITAL LETTER SHORT A 10431 ; [.445B.0020.0002] # DESERET SMALL LETTER SHORT AH 10409 ; [.445B.0020.0008] # DESERET CAPITAL LETTER SHORT AH 10432 ; [.445C.0020.0002] # DESERET SMALL LETTER SHORT O 1040A ; [.445C.0020.0008] # DESERET CAPITAL LETTER SHORT O 10433 ; [.445D.0020.0002] # DESERET SMALL LETTER SHORT OO 1040B ; [.445D.0020.0008] # DESERET CAPITAL LETTER SHORT OO 10434 ; [.445E.0020.0002] # DESERET SMALL LETTER AY 1040C ; [.445E.0020.0008] # DESERET CAPITAL LETTER AY 10435 ; [.445F.0020.0002] # DESERET SMALL LETTER OW 1040D ; [.445F.0020.0008] # DESERET CAPITAL LETTER OW 10436 ; [.4460.0020.0002] # DESERET SMALL LETTER WU 1040E ; [.4460.0020.0008] # DESERET CAPITAL LETTER WU 10437 ; [.4461.0020.0002] # DESERET SMALL LETTER YEE 1040F ; [.4461.0020.0008] # DESERET CAPITAL LETTER YEE 10438 ; [.4462.0020.0002] # DESERET SMALL LETTER H 10410 ; [.4462.0020.0008] # DESERET CAPITAL LETTER H 10439 ; [.4463.0020.0002] # DESERET SMALL LETTER PEE 10411 ; [.4463.0020.0008] # DESERET CAPITAL LETTER PEE 1043A ; [.4464.0020.0002] # DESERET SMALL LETTER BEE 10412 ; [.4464.0020.0008] # DESERET CAPITAL LETTER BEE 1043B ; [.4465.0020.0002] # DESERET SMALL LETTER TEE 10413 ; [.4465.0020.0008] # DESERET CAPITAL LETTER TEE 1043C ; [.4466.0020.0002] # DESERET SMALL LETTER DEE 10414 ; [.4466.0020.0008] # DESERET CAPITAL LETTER DEE 1043D ; [.4467.0020.0002] # DESERET SMALL LETTER CHEE 10415 ; [.4467.0020.0008] # DESERET CAPITAL LETTER CHEE 1043E ; [.4468.0020.0002] # DESERET SMALL LETTER JEE 10416 ; [.4468.0020.0008] # DESERET CAPITAL LETTER JEE 1043F ; [.4469.0020.0002] # DESERET SMALL LETTER KAY 10417 ; [.4469.0020.0008] # DESERET CAPITAL LETTER KAY 10440 ; [.446A.0020.0002] # DESERET SMALL LETTER GAY 10418 ; [.446A.0020.0008] # DESERET CAPITAL LETTER GAY 10441 ; [.446B.0020.0002] # DESERET SMALL LETTER EF 10419 ; [.446B.0020.0008] # DESERET CAPITAL LETTER EF 10442 ; [.446C.0020.0002] # DESERET SMALL LETTER VEE 1041A ; [.446C.0020.0008] # DESERET CAPITAL LETTER VEE 10443 ; [.446D.0020.0002] # DESERET SMALL LETTER ETH 1041B ; [.446D.0020.0008] # DESERET CAPITAL LETTER ETH 10444 ; [.446E.0020.0002] # DESERET SMALL LETTER THEE 1041C ; [.446E.0020.0008] # DESERET CAPITAL LETTER THEE 10445 ; [.446F.0020.0002] # DESERET SMALL LETTER ES 1041D ; [.446F.0020.0008] # DESERET CAPITAL LETTER ES 10446 ; [.4470.0020.0002] # DESERET SMALL LETTER ZEE 1041E ; [.4470.0020.0008] # DESERET CAPITAL LETTER ZEE 10447 ; [.4471.0020.0002] # DESERET SMALL LETTER ESH 1041F ; [.4471.0020.0008] # DESERET CAPITAL LETTER ESH 10448 ; [.4472.0020.0002] # DESERET SMALL LETTER ZHEE 10420 ; [.4472.0020.0008] # DESERET CAPITAL LETTER ZHEE 10449 ; [.4473.0020.0002] # DESERET SMALL LETTER ER 10421 ; [.4473.0020.0008] # DESERET CAPITAL LETTER ER 1044A ; [.4474.0020.0002] # DESERET SMALL LETTER EL 10422 ; [.4474.0020.0008] # DESERET CAPITAL LETTER EL 1044B ; [.4475.0020.0002] # DESERET SMALL LETTER EM 10423 ; [.4475.0020.0008] # DESERET CAPITAL LETTER EM 1044C ; [.4476.0020.0002] # DESERET SMALL LETTER EN 10424 ; [.4476.0020.0008] # DESERET CAPITAL LETTER EN 1044D ; [.4477.0020.0002] # DESERET SMALL LETTER ENG 10425 ; [.4477.0020.0008] # DESERET CAPITAL LETTER ENG 1044E ; [.4478.0020.0002] # DESERET SMALL LETTER OI 10426 ; [.4478.0020.0008] # DESERET CAPITAL LETTER OI 1044F ; [.4479.0020.0002] # DESERET SMALL LETTER EW 10427 ; [.4479.0020.0008] # DESERET CAPITAL LETTER EW 10450 ; [.447A.0020.0002] # SHAVIAN LETTER PEEP 10451 ; [.447B.0020.0002] # SHAVIAN LETTER TOT 10452 ; [.447C.0020.0002] # SHAVIAN LETTER KICK 10453 ; [.447D.0020.0002] # SHAVIAN LETTER FEE 10454 ; [.447E.0020.0002] # SHAVIAN LETTER THIGH 10455 ; [.447F.0020.0002] # SHAVIAN LETTER SO 10456 ; [.4480.0020.0002] # SHAVIAN LETTER SURE 10457 ; [.4481.0020.0002] # SHAVIAN LETTER CHURCH 10458 ; [.4482.0020.0002] # SHAVIAN LETTER YEA 10459 ; [.4483.0020.0002] # SHAVIAN LETTER HUNG 1045A ; [.4484.0020.0002] # SHAVIAN LETTER BIB 1045B ; [.4485.0020.0002] # SHAVIAN LETTER DEAD 1045C ; [.4486.0020.0002] # SHAVIAN LETTER GAG 1045D ; [.4487.0020.0002] # SHAVIAN LETTER VOW 1045E ; [.4488.0020.0002] # SHAVIAN LETTER THEY 1045F ; [.4489.0020.0002] # SHAVIAN LETTER ZOO 10460 ; [.448A.0020.0002] # SHAVIAN LETTER MEASURE 10461 ; [.448B.0020.0002] # SHAVIAN LETTER JUDGE 10462 ; [.448C.0020.0002] # SHAVIAN LETTER WOE 10463 ; [.448D.0020.0002] # SHAVIAN LETTER HA-HA 10464 ; [.448E.0020.0002] # SHAVIAN LETTER LOLL 10465 ; [.448F.0020.0002] # SHAVIAN LETTER MIME 10466 ; [.4490.0020.0002] # SHAVIAN LETTER IF 10467 ; [.4491.0020.0002] # SHAVIAN LETTER EGG 10468 ; [.4492.0020.0002] # SHAVIAN LETTER ASH 10469 ; [.4493.0020.0002] # SHAVIAN LETTER ADO 1046A ; [.4494.0020.0002] # SHAVIAN LETTER ON 1046B ; [.4495.0020.0002] # SHAVIAN LETTER WOOL 1046C ; [.4496.0020.0002] # SHAVIAN LETTER OUT 1046D ; [.4497.0020.0002] # SHAVIAN LETTER AH 1046E ; [.4498.0020.0002] # SHAVIAN LETTER ROAR 1046F ; [.4499.0020.0002] # SHAVIAN LETTER NUN 10470 ; [.449A.0020.0002] # SHAVIAN LETTER EAT 10471 ; [.449B.0020.0002] # SHAVIAN LETTER AGE 10472 ; [.449C.0020.0002] # SHAVIAN LETTER ICE 10473 ; [.449D.0020.0002] # SHAVIAN LETTER UP 10474 ; [.449E.0020.0002] # SHAVIAN LETTER OAK 10475 ; [.449F.0020.0002] # SHAVIAN LETTER OOZE 10476 ; [.44A0.0020.0002] # SHAVIAN LETTER OIL 10477 ; [.44A1.0020.0002] # SHAVIAN LETTER AWE 10478 ; [.44A2.0020.0002] # SHAVIAN LETTER ARE 10479 ; [.44A3.0020.0002] # SHAVIAN LETTER OR 1047A ; [.44A4.0020.0002] # SHAVIAN LETTER AIR 1047B ; [.44A5.0020.0002] # SHAVIAN LETTER ERR 1047C ; [.44A6.0020.0002] # SHAVIAN LETTER ARRAY 1047D ; [.44A7.0020.0002] # SHAVIAN LETTER EAR 1047E ; [.44A8.0020.0002] # SHAVIAN LETTER IAN 1047F ; [.44A9.0020.0002] # SHAVIAN LETTER YEW 1BC00 ; [.44AA.0020.0002] # DUPLOYAN LETTER H 1BC01 ; [.44AB.0020.0002] # DUPLOYAN LETTER X 1BC02 ; [.44AC.0020.0002] # DUPLOYAN LETTER P 1BC03 ; [.44AD.0020.0002] # DUPLOYAN LETTER T 1BC04 ; [.44AE.0020.0002] # DUPLOYAN LETTER F 1BC05 ; [.44AF.0020.0002] # DUPLOYAN LETTER K 1BC06 ; [.44B0.0020.0002] # DUPLOYAN LETTER L 1BC07 ; [.44B1.0020.0002] # DUPLOYAN LETTER B 1BC08 ; [.44B2.0020.0002] # DUPLOYAN LETTER D 1BC09 ; [.44B3.0020.0002] # DUPLOYAN LETTER V 1BC0A ; [.44B4.0020.0002] # DUPLOYAN LETTER G 1BC0B ; [.44B5.0020.0002] # DUPLOYAN LETTER R 1BC0C ; [.44B6.0020.0002] # DUPLOYAN LETTER P N 1BC0D ; [.44B7.0020.0002] # DUPLOYAN LETTER D S 1BC0E ; [.44B8.0020.0002] # DUPLOYAN LETTER F N 1BC0F ; [.44B9.0020.0002] # DUPLOYAN LETTER K M 1BC10 ; [.44BA.0020.0002] # DUPLOYAN LETTER R S 1BC11 ; [.44BB.0020.0002] # DUPLOYAN LETTER TH 1BC12 ; [.44BC.0020.0002] # DUPLOYAN LETTER SLOAN DH 1BC13 ; [.44BD.0020.0002] # DUPLOYAN LETTER DH 1BC14 ; [.44BE.0020.0002] # DUPLOYAN LETTER KK 1BC15 ; [.44BF.0020.0002] # DUPLOYAN LETTER SLOAN J 1BC16 ; [.44C0.0020.0002] # DUPLOYAN LETTER HL 1BC17 ; [.44C1.0020.0002] # DUPLOYAN LETTER LH 1BC18 ; [.44C2.0020.0002] # DUPLOYAN LETTER RH 1BC19 ; [.44C3.0020.0002] # DUPLOYAN LETTER M 1BC1A ; [.44C4.0020.0002] # DUPLOYAN LETTER N 1BC1B ; [.44C5.0020.0002] # DUPLOYAN LETTER J 1BC1C ; [.44C6.0020.0002] # DUPLOYAN LETTER S 1BC1D ; [.44C7.0020.0002] # DUPLOYAN LETTER M N 1BC1E ; [.44C8.0020.0002] # DUPLOYAN LETTER N M 1BC1F ; [.44C9.0020.0002] # DUPLOYAN LETTER J M 1BC20 ; [.44CA.0020.0002] # DUPLOYAN LETTER S J 1BC21 ; [.44CB.0020.0002] # DUPLOYAN LETTER M WITH DOT 1BC22 ; [.44CC.0020.0002] # DUPLOYAN LETTER N WITH DOT 1BC23 ; [.44CD.0020.0002] # DUPLOYAN LETTER J WITH DOT 1BC24 ; [.44CE.0020.0002] # DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE 1BC25 ; [.44CF.0020.0002] # DUPLOYAN LETTER S WITH DOT 1BC26 ; [.44D0.0020.0002] # DUPLOYAN LETTER S WITH DOT BELOW 1BC27 ; [.44D1.0020.0002] # DUPLOYAN LETTER M S 1BC28 ; [.44D2.0020.0002] # DUPLOYAN LETTER N S 1BC29 ; [.44D3.0020.0002] # DUPLOYAN LETTER J S 1BC2A ; [.44D4.0020.0002] # DUPLOYAN LETTER S S 1BC2B ; [.44D5.0020.0002] # DUPLOYAN LETTER M N S 1BC2C ; [.44D6.0020.0002] # DUPLOYAN LETTER N M S 1BC2D ; [.44D7.0020.0002] # DUPLOYAN LETTER J M S 1BC2E ; [.44D8.0020.0002] # DUPLOYAN LETTER S J S 1BC2F ; [.44D9.0020.0002] # DUPLOYAN LETTER J S WITH DOT 1BC30 ; [.44DA.0020.0002] # DUPLOYAN LETTER J N 1BC31 ; [.44DB.0020.0002] # DUPLOYAN LETTER J N S 1BC32 ; [.44DC.0020.0002] # DUPLOYAN LETTER S T 1BC33 ; [.44DD.0020.0002] # DUPLOYAN LETTER S T R 1BC34 ; [.44DE.0020.0002] # DUPLOYAN LETTER S P 1BC35 ; [.44DF.0020.0002] # DUPLOYAN LETTER S P R 1BC36 ; [.44E0.0020.0002] # DUPLOYAN LETTER T S 1BC37 ; [.44E1.0020.0002] # DUPLOYAN LETTER T R S 1BC38 ; [.44E2.0020.0002] # DUPLOYAN LETTER W 1BC39 ; [.44E3.0020.0002] # DUPLOYAN LETTER WH 1BC3A ; [.44E4.0020.0002] # DUPLOYAN LETTER W R 1BC3B ; [.44E5.0020.0002] # DUPLOYAN LETTER S N 1BC3C ; [.44E6.0020.0002] # DUPLOYAN LETTER S M 1BC3D ; [.44E7.0020.0002] # DUPLOYAN LETTER K R S 1BC3E ; [.44E8.0020.0002] # DUPLOYAN LETTER G R S 1BC3F ; [.44E9.0020.0002] # DUPLOYAN LETTER S K 1BC40 ; [.44EA.0020.0002] # DUPLOYAN LETTER S K R 1BC41 ; [.44EB.0020.0002] # DUPLOYAN LETTER A 1BC42 ; [.44EC.0020.0002] # DUPLOYAN LETTER SLOAN OW 1BC43 ; [.44ED.0020.0002] # DUPLOYAN LETTER OA 1BC44 ; [.44EE.0020.0002] # DUPLOYAN LETTER O 1BC45 ; [.44EF.0020.0002] # DUPLOYAN LETTER AOU 1BC46 ; [.44F0.0020.0002] # DUPLOYAN LETTER I 1BC47 ; [.44F1.0020.0002] # DUPLOYAN LETTER E 1BC48 ; [.44F2.0020.0002] # DUPLOYAN LETTER IE 1BC49 ; [.44F3.0020.0002] # DUPLOYAN LETTER SHORT I 1BC4A ; [.44F4.0020.0002] # DUPLOYAN LETTER UI 1BC4B ; [.44F5.0020.0002] # DUPLOYAN LETTER EE 1BC4C ; [.44F6.0020.0002] # DUPLOYAN LETTER SLOAN EH 1BC4D ; [.44F7.0020.0002] # DUPLOYAN LETTER ROMANIAN I 1BC4E ; [.44F8.0020.0002] # DUPLOYAN LETTER SLOAN EE 1BC4F ; [.44F9.0020.0002] # DUPLOYAN LETTER LONG I 1BC50 ; [.44FA.0020.0002] # DUPLOYAN LETTER YE 1BC51 ; [.44FB.0020.0002] # DUPLOYAN LETTER U 1BC52 ; [.44FC.0020.0002] # DUPLOYAN LETTER EU 1BC53 ; [.44FD.0020.0002] # DUPLOYAN LETTER XW 1BC54 ; [.44FE.0020.0002] # DUPLOYAN LETTER U N 1BC55 ; [.44FF.0020.0002] # DUPLOYAN LETTER LONG U 1BC56 ; [.4500.0020.0002] # DUPLOYAN LETTER ROMANIAN U 1BC57 ; [.4501.0020.0002] # DUPLOYAN LETTER UH 1BC58 ; [.4502.0020.0002] # DUPLOYAN LETTER SLOAN U 1BC59 ; [.4503.0020.0002] # DUPLOYAN LETTER OOH 1BC5A ; [.4504.0020.0002] # DUPLOYAN LETTER OW 1BC5B ; [.4505.0020.0002] # DUPLOYAN LETTER OU 1BC5C ; [.4506.0020.0002] # DUPLOYAN LETTER WA 1BC5D ; [.4507.0020.0002] # DUPLOYAN LETTER WO 1BC5E ; [.4508.0020.0002] # DUPLOYAN LETTER WI 1BC5F ; [.4509.0020.0002] # DUPLOYAN LETTER WEI 1BC60 ; [.450A.0020.0002] # DUPLOYAN LETTER WOW 1BC61 ; [.450B.0020.0002] # DUPLOYAN LETTER NASAL U 1BC62 ; [.450C.0020.0002] # DUPLOYAN LETTER NASAL O 1BC63 ; [.450D.0020.0002] # DUPLOYAN LETTER NASAL I 1BC64 ; [.450E.0020.0002] # DUPLOYAN LETTER NASAL A 1BC65 ; [.450F.0020.0002] # DUPLOYAN LETTER PERNIN AN 1BC66 ; [.4510.0020.0002] # DUPLOYAN LETTER PERNIN AM 1BC67 ; [.4511.0020.0002] # DUPLOYAN LETTER SLOAN EN 1BC68 ; [.4512.0020.0002] # DUPLOYAN LETTER SLOAN AN 1BC69 ; [.4513.0020.0002] # DUPLOYAN LETTER SLOAN ON 1BC6A ; [.4514.0020.0002] # DUPLOYAN LETTER VOCALIC M 1BC70 ; [.4515.0020.0002] # DUPLOYAN AFFIX LEFT HORIZONTAL SECANT 1BC71 ; [.4516.0020.0002] # DUPLOYAN AFFIX MID HORIZONTAL SECANT 1BC72 ; [.4517.0020.0002] # DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT 1BC73 ; [.4518.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL SECANT 1BC74 ; [.4519.0020.0002] # DUPLOYAN AFFIX MID VERTICAL SECANT 1BC75 ; [.451A.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL SECANT 1BC76 ; [.451B.0020.0002] # DUPLOYAN AFFIX ATTACHED SECANT 1BC77 ; [.451C.0020.0002] # DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT 1BC78 ; [.451D.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT 1BC79 ; [.451E.0020.0002] # DUPLOYAN AFFIX ATTACHED TAIL 1BC7A ; [.451F.0020.0002] # DUPLOYAN AFFIX ATTACHED E HOOK 1BC7B ; [.4520.0020.0002] # DUPLOYAN AFFIX ATTACHED I HOOK 1BC7C ; [.4521.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT HOOK 1BC80 ; [.4522.0020.0002] # DUPLOYAN AFFIX HIGH ACUTE 1BC81 ; [.4523.0020.0002] # DUPLOYAN AFFIX HIGH TIGHT ACUTE 1BC82 ; [.4524.0020.0002] # DUPLOYAN AFFIX HIGH GRAVE 1BC83 ; [.4525.0020.0002] # DUPLOYAN AFFIX HIGH LONG GRAVE 1BC84 ; [.4526.0020.0002] # DUPLOYAN AFFIX HIGH DOT 1BC85 ; [.4527.0020.0002] # DUPLOYAN AFFIX HIGH CIRCLE 1BC86 ; [.4528.0020.0002] # DUPLOYAN AFFIX HIGH LINE 1BC87 ; [.4529.0020.0002] # DUPLOYAN AFFIX HIGH WAVE 1BC88 ; [.452A.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL 1BC90 ; [.452B.0020.0002] # DUPLOYAN AFFIX LOW ACUTE 1BC91 ; [.452C.0020.0002] # DUPLOYAN AFFIX LOW TIGHT ACUTE 1BC92 ; [.452D.0020.0002] # DUPLOYAN AFFIX LOW GRAVE 1BC93 ; [.452E.0020.0002] # DUPLOYAN AFFIX LOW LONG GRAVE 1BC94 ; [.452F.0020.0002] # DUPLOYAN AFFIX LOW DOT 1BC95 ; [.4530.0020.0002] # DUPLOYAN AFFIX LOW CIRCLE 1BC96 ; [.4531.0020.0002] # DUPLOYAN AFFIX LOW LINE 1BC97 ; [.4532.0020.0002] # DUPLOYAN AFFIX LOW WAVE 1BC98 ; [.4533.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL 1BC99 ; [.4534.0020.0002] # DUPLOYAN AFFIX LOW ARROW 10480 ; [.4535.0020.0002] # OSMANYA LETTER ALEF 10481 ; [.4536.0020.0002] # OSMANYA LETTER BA 10482 ; [.4537.0020.0002] # OSMANYA LETTER TA 10483 ; [.4538.0020.0002] # OSMANYA LETTER JA 10484 ; [.4539.0020.0002] # OSMANYA LETTER XA 10485 ; [.453A.0020.0002] # OSMANYA LETTER KHA 10486 ; [.453B.0020.0002] # OSMANYA LETTER DEEL 10487 ; [.453C.0020.0002] # OSMANYA LETTER RA 10488 ; [.453D.0020.0002] # OSMANYA LETTER SA 10489 ; [.453E.0020.0002] # OSMANYA LETTER SHIIN 1048A ; [.453F.0020.0002] # OSMANYA LETTER DHA 1048B ; [.4540.0020.0002] # OSMANYA LETTER CAYN 1048C ; [.4541.0020.0002] # OSMANYA LETTER GA 1048D ; [.4542.0020.0002] # OSMANYA LETTER FA 1048E ; [.4543.0020.0002] # OSMANYA LETTER QAAF 1048F ; [.4544.0020.0002] # OSMANYA LETTER KAAF 10490 ; [.4545.0020.0002] # OSMANYA LETTER LAAN 10491 ; [.4546.0020.0002] # OSMANYA LETTER MIIN 10492 ; [.4547.0020.0002] # OSMANYA LETTER NUUN 10493 ; [.4548.0020.0002] # OSMANYA LETTER WAW 10494 ; [.4549.0020.0002] # OSMANYA LETTER HA 10495 ; [.454A.0020.0002] # OSMANYA LETTER YA 10496 ; [.454B.0020.0002] # OSMANYA LETTER A 10497 ; [.454C.0020.0002] # OSMANYA LETTER E 10498 ; [.454D.0020.0002] # OSMANYA LETTER I 10499 ; [.454E.0020.0002] # OSMANYA LETTER O 1049A ; [.454F.0020.0002] # OSMANYA LETTER U 1049B ; [.4550.0020.0002] # OSMANYA LETTER AA 1049C ; [.4551.0020.0002] # OSMANYA LETTER EE 1049D ; [.4552.0020.0002] # OSMANYA LETTER OO 10500 ; [.4553.0020.0002] # ELBASAN LETTER A 10501 ; [.4554.0020.0002] # ELBASAN LETTER BE 10502 ; [.4555.0020.0002] # ELBASAN LETTER CE 10503 ; [.4556.0020.0002] # ELBASAN LETTER CHE 10504 ; [.4557.0020.0002] # ELBASAN LETTER DE 10505 ; [.4558.0020.0002] # ELBASAN LETTER NDE 10506 ; [.4559.0020.0002] # ELBASAN LETTER DHE 10507 ; [.455A.0020.0002] # ELBASAN LETTER EI 10508 ; [.455B.0020.0002] # ELBASAN LETTER E 10509 ; [.455C.0020.0002] # ELBASAN LETTER FE 1050A ; [.455D.0020.0002] # ELBASAN LETTER GE 1050B ; [.455E.0020.0002] # ELBASAN LETTER GJE 1050C ; [.455F.0020.0002] # ELBASAN LETTER HE 1050D ; [.4560.0020.0002] # ELBASAN LETTER I 1050E ; [.4561.0020.0002] # ELBASAN LETTER JE 1050F ; [.4562.0020.0002] # ELBASAN LETTER KE 10510 ; [.4563.0020.0002] # ELBASAN LETTER LE 10511 ; [.4564.0020.0002] # ELBASAN LETTER LLE 10512 ; [.4565.0020.0002] # ELBASAN LETTER ME 10513 ; [.4566.0020.0002] # ELBASAN LETTER NE 10514 ; [.4567.0020.0002] # ELBASAN LETTER NA 10515 ; [.4568.0020.0002] # ELBASAN LETTER NJE 10516 ; [.4569.0020.0002] # ELBASAN LETTER O 10517 ; [.456A.0020.0002] # ELBASAN LETTER PE 10518 ; [.456B.0020.0002] # ELBASAN LETTER QE 10519 ; [.456C.0020.0002] # ELBASAN LETTER RE 1051A ; [.456D.0020.0002] # ELBASAN LETTER RRE 1051B ; [.456E.0020.0002] # ELBASAN LETTER SE 1051C ; [.456F.0020.0002] # ELBASAN LETTER SHE 1051D ; [.4570.0020.0002] # ELBASAN LETTER TE 1051E ; [.4571.0020.0002] # ELBASAN LETTER THE 1051F ; [.4572.0020.0002] # ELBASAN LETTER U 10520 ; [.4573.0020.0002] # ELBASAN LETTER VE 10521 ; [.4574.0020.0002] # ELBASAN LETTER XE 10522 ; [.4575.0020.0002] # ELBASAN LETTER Y 10523 ; [.4576.0020.0002] # ELBASAN LETTER ZE 10524 ; [.4577.0020.0002] # ELBASAN LETTER ZHE 10525 ; [.4578.0020.0002] # ELBASAN LETTER GHE 10526 ; [.4579.0020.0002] # ELBASAN LETTER GHAMMA 10527 ; [.457A.0020.0002] # ELBASAN LETTER KHE 10530 ; [.457B.0020.0002] # CAUCASIAN ALBANIAN LETTER ALT 10531 ; [.457C.0020.0002] # CAUCASIAN ALBANIAN LETTER BET 10532 ; [.457D.0020.0002] # CAUCASIAN ALBANIAN LETTER GIM 10533 ; [.457E.0020.0002] # CAUCASIAN ALBANIAN LETTER DAT 10534 ; [.457F.0020.0002] # CAUCASIAN ALBANIAN LETTER EB 10535 ; [.4580.0020.0002] # CAUCASIAN ALBANIAN LETTER ZARL 10536 ; [.4581.0020.0002] # CAUCASIAN ALBANIAN LETTER EYN 10537 ; [.4582.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHIL 10538 ; [.4583.0020.0002] # CAUCASIAN ALBANIAN LETTER TAS 10539 ; [.4584.0020.0002] # CAUCASIAN ALBANIAN LETTER CHA 1053A ; [.4585.0020.0002] # CAUCASIAN ALBANIAN LETTER YOWD 1053B ; [.4586.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHA 1053C ; [.4587.0020.0002] # CAUCASIAN ALBANIAN LETTER IRB 1053D ; [.4588.0020.0002] # CAUCASIAN ALBANIAN LETTER SHA 1053E ; [.4589.0020.0002] # CAUCASIAN ALBANIAN LETTER LAN 1053F ; [.458A.0020.0002] # CAUCASIAN ALBANIAN LETTER INYA 10540 ; [.458B.0020.0002] # CAUCASIAN ALBANIAN LETTER XEYN 10541 ; [.458C.0020.0002] # CAUCASIAN ALBANIAN LETTER DYAN 10542 ; [.458D.0020.0002] # CAUCASIAN ALBANIAN LETTER CAR 10543 ; [.458E.0020.0002] # CAUCASIAN ALBANIAN LETTER JHOX 10544 ; [.458F.0020.0002] # CAUCASIAN ALBANIAN LETTER KAR 10545 ; [.4590.0020.0002] # CAUCASIAN ALBANIAN LETTER LYIT 10546 ; [.4591.0020.0002] # CAUCASIAN ALBANIAN LETTER HEYT 10547 ; [.4592.0020.0002] # CAUCASIAN ALBANIAN LETTER QAY 10548 ; [.4593.0020.0002] # CAUCASIAN ALBANIAN LETTER AOR 10549 ; [.4594.0020.0002] # CAUCASIAN ALBANIAN LETTER CHOY 1054A ; [.4595.0020.0002] # CAUCASIAN ALBANIAN LETTER CHI 1054B ; [.4596.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAY 1054C ; [.4597.0020.0002] # CAUCASIAN ALBANIAN LETTER MAQ 1054D ; [.4598.0020.0002] # CAUCASIAN ALBANIAN LETTER QAR 1054E ; [.4599.0020.0002] # CAUCASIAN ALBANIAN LETTER NOWC 1054F ; [.459A.0020.0002] # CAUCASIAN ALBANIAN LETTER DZYAY 10550 ; [.459B.0020.0002] # CAUCASIAN ALBANIAN LETTER SHAK 10551 ; [.459C.0020.0002] # CAUCASIAN ALBANIAN LETTER JAYN 10552 ; [.459D.0020.0002] # CAUCASIAN ALBANIAN LETTER ON 10553 ; [.459E.0020.0002] # CAUCASIAN ALBANIAN LETTER TYAY 10554 ; [.459F.0020.0002] # CAUCASIAN ALBANIAN LETTER FAM 10555 ; [.45A0.0020.0002] # CAUCASIAN ALBANIAN LETTER DZAY 10556 ; [.45A1.0020.0002] # CAUCASIAN ALBANIAN LETTER CHAT 10557 ; [.45A2.0020.0002] # CAUCASIAN ALBANIAN LETTER PEN 10558 ; [.45A3.0020.0002] # CAUCASIAN ALBANIAN LETTER GHEYS 10559 ; [.45A4.0020.0002] # CAUCASIAN ALBANIAN LETTER RAT 1055A ; [.45A5.0020.0002] # CAUCASIAN ALBANIAN LETTER SEYK 1055B ; [.45A6.0020.0002] # CAUCASIAN ALBANIAN LETTER VEYZ 1055C ; [.45A7.0020.0002] # CAUCASIAN ALBANIAN LETTER TIWR 1055D ; [.45A8.0020.0002] # CAUCASIAN ALBANIAN LETTER SHOY 1055E ; [.45A9.0020.0002] # CAUCASIAN ALBANIAN LETTER IWN 1055F ; [.45AA.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAW 10560 ; [.45AB.0020.0002] # CAUCASIAN ALBANIAN LETTER CAYN 10561 ; [.45AC.0020.0002] # CAUCASIAN ALBANIAN LETTER YAYD 10562 ; [.45AD.0020.0002] # CAUCASIAN ALBANIAN LETTER PIWR 10563 ; [.45AE.0020.0002] # CAUCASIAN ALBANIAN LETTER KIW 110D0 ; [.45AF.0020.0002] # SORA SOMPENG LETTER SAH 110D1 ; [.45B0.0020.0002] # SORA SOMPENG LETTER TAH 110D2 ; [.45B1.0020.0002] # SORA SOMPENG LETTER BAH 110D3 ; [.45B2.0020.0002] # SORA SOMPENG LETTER CAH 110D4 ; [.45B3.0020.0002] # SORA SOMPENG LETTER DAH 110D5 ; [.45B4.0020.0002] # SORA SOMPENG LETTER GAH 110D6 ; [.45B5.0020.0002] # SORA SOMPENG LETTER MAH 110D7 ; [.45B6.0020.0002] # SORA SOMPENG LETTER NGAH 110D8 ; [.45B7.0020.0002] # SORA SOMPENG LETTER LAH 110D9 ; [.45B8.0020.0002] # SORA SOMPENG LETTER NAH 110DA ; [.45B9.0020.0002] # SORA SOMPENG LETTER VAH 110DB ; [.45BA.0020.0002] # SORA SOMPENG LETTER PAH 110DC ; [.45BB.0020.0002] # SORA SOMPENG LETTER YAH 110DD ; [.45BC.0020.0002] # SORA SOMPENG LETTER RAH 110DE ; [.45BD.0020.0002] # SORA SOMPENG LETTER HAH 110DF ; [.45BE.0020.0002] # SORA SOMPENG LETTER KAH 110E0 ; [.45BF.0020.0002] # SORA SOMPENG LETTER JAH 110E1 ; [.45C0.0020.0002] # SORA SOMPENG LETTER NYAH 110E2 ; [.45C1.0020.0002] # SORA SOMPENG LETTER AH 110E3 ; [.45C2.0020.0002] # SORA SOMPENG LETTER EEH 110E4 ; [.45C3.0020.0002] # SORA SOMPENG LETTER IH 110E5 ; [.45C4.0020.0002] # SORA SOMPENG LETTER UH 110E6 ; [.45C5.0020.0002] # SORA SOMPENG LETTER OH 110E7 ; [.45C6.0020.0002] # SORA SOMPENG LETTER EH 110E8 ; [.45C7.0020.0002] # SORA SOMPENG LETTER MAE 16A40 ; [.45C8.0020.0002] # MRO LETTER TA 16A41 ; [.45C9.0020.0002] # MRO LETTER NGI 16A42 ; [.45CA.0020.0002] # MRO LETTER YO 16A43 ; [.45CB.0020.0002] # MRO LETTER MIM 16A44 ; [.45CC.0020.0002] # MRO LETTER BA 16A45 ; [.45CD.0020.0002] # MRO LETTER DA 16A46 ; [.45CE.0020.0002] # MRO LETTER A 16A47 ; [.45CF.0020.0002] # MRO LETTER PHI 16A48 ; [.45D0.0020.0002] # MRO LETTER KHAI 16A49 ; [.45D1.0020.0002] # MRO LETTER HAO 16A4A ; [.45D2.0020.0002] # MRO LETTER DAI 16A4B ; [.45D3.0020.0002] # MRO LETTER CHU 16A4C ; [.45D4.0020.0002] # MRO LETTER KEAAE 16A4D ; [.45D5.0020.0002] # MRO LETTER OL 16A4E ; [.45D6.0020.0002] # MRO LETTER MAEM 16A4F ; [.45D7.0020.0002] # MRO LETTER NIN 16A50 ; [.45D8.0020.0002] # MRO LETTER PA 16A51 ; [.45D9.0020.0002] # MRO LETTER OO 16A52 ; [.45DA.0020.0002] # MRO LETTER O 16A53 ; [.45DB.0020.0002] # MRO LETTER RO 16A54 ; [.45DC.0020.0002] # MRO LETTER SHI 16A55 ; [.45DD.0020.0002] # MRO LETTER THEA 16A56 ; [.45DE.0020.0002] # MRO LETTER EA 16A57 ; [.45DF.0020.0002] # MRO LETTER WA 16A58 ; [.45E0.0020.0002] # MRO LETTER E 16A59 ; [.45E1.0020.0002] # MRO LETTER KO 16A5A ; [.45E2.0020.0002] # MRO LETTER LAN 16A5B ; [.45E3.0020.0002] # MRO LETTER LA 16A5C ; [.45E4.0020.0002] # MRO LETTER HAI 16A5D ; [.45E5.0020.0002] # MRO LETTER RI 16A5E ; [.45E6.0020.0002] # MRO LETTER TEK 10000 ; [.45E7.0020.0002] # LINEAR B SYLLABLE B008 A 10001 ; [.45E8.0020.0002] # LINEAR B SYLLABLE B038 E 10002 ; [.45E9.0020.0002] # LINEAR B SYLLABLE B028 I 10003 ; [.45EA.0020.0002] # LINEAR B SYLLABLE B061 O 10004 ; [.45EB.0020.0002] # LINEAR B SYLLABLE B010 U 10005 ; [.45EC.0020.0002] # LINEAR B SYLLABLE B001 DA 10006 ; [.45ED.0020.0002] # LINEAR B SYLLABLE B045 DE 10007 ; [.45EE.0020.0002] # LINEAR B SYLLABLE B007 DI 10008 ; [.45EF.0020.0002] # LINEAR B SYLLABLE B014 DO 10009 ; [.45F0.0020.0002] # LINEAR B SYLLABLE B051 DU 1000A ; [.45F1.0020.0002] # LINEAR B SYLLABLE B057 JA 1000B ; [.45F2.0020.0002] # LINEAR B SYLLABLE B046 JE 1000D ; [.45F3.0020.0002] # LINEAR B SYLLABLE B036 JO 1000E ; [.45F4.0020.0002] # LINEAR B SYLLABLE B065 JU 1000F ; [.45F5.0020.0002] # LINEAR B SYLLABLE B077 KA 10010 ; [.45F6.0020.0002] # LINEAR B SYLLABLE B044 KE 10011 ; [.45F7.0020.0002] # LINEAR B SYLLABLE B067 KI 10012 ; [.45F8.0020.0002] # LINEAR B SYLLABLE B070 KO 10013 ; [.45F9.0020.0002] # LINEAR B SYLLABLE B081 KU 10014 ; [.45FA.0020.0002] # LINEAR B SYLLABLE B080 MA 10015 ; [.45FB.0020.0002] # LINEAR B SYLLABLE B013 ME 10016 ; [.45FC.0020.0002] # LINEAR B SYLLABLE B073 MI 10017 ; [.45FD.0020.0002] # LINEAR B SYLLABLE B015 MO 10018 ; [.45FE.0020.0002] # LINEAR B SYLLABLE B023 MU 10019 ; [.45FF.0020.0002] # LINEAR B SYLLABLE B006 NA 1001A ; [.4600.0020.0002] # LINEAR B SYLLABLE B024 NE 1001B ; [.4601.0020.0002] # LINEAR B SYLLABLE B030 NI 1001C ; [.4602.0020.0002] # LINEAR B SYLLABLE B052 NO 1001D ; [.4603.0020.0002] # LINEAR B SYLLABLE B055 NU 1001E ; [.4604.0020.0002] # LINEAR B SYLLABLE B003 PA 1001F ; [.4605.0020.0002] # LINEAR B SYLLABLE B072 PE 10020 ; [.4606.0020.0002] # LINEAR B SYLLABLE B039 PI 10021 ; [.4607.0020.0002] # LINEAR B SYLLABLE B011 PO 10022 ; [.4608.0020.0002] # LINEAR B SYLLABLE B050 PU 10023 ; [.4609.0020.0002] # LINEAR B SYLLABLE B016 QA 10024 ; [.460A.0020.0002] # LINEAR B SYLLABLE B078 QE 10025 ; [.460B.0020.0002] # LINEAR B SYLLABLE B021 QI 10026 ; [.460C.0020.0002] # LINEAR B SYLLABLE B032 QO 10028 ; [.460D.0020.0002] # LINEAR B SYLLABLE B060 RA 10029 ; [.460E.0020.0002] # LINEAR B SYLLABLE B027 RE 1002A ; [.460F.0020.0002] # LINEAR B SYLLABLE B053 RI 1002B ; [.4610.0020.0002] # LINEAR B SYLLABLE B002 RO 1002C ; [.4611.0020.0002] # LINEAR B SYLLABLE B026 RU 1002D ; [.4612.0020.0002] # LINEAR B SYLLABLE B031 SA 1002E ; [.4613.0020.0002] # LINEAR B SYLLABLE B009 SE 1002F ; [.4614.0020.0002] # LINEAR B SYLLABLE B041 SI 10030 ; [.4615.0020.0002] # LINEAR B SYLLABLE B012 SO 10031 ; [.4616.0020.0002] # LINEAR B SYLLABLE B058 SU 10032 ; [.4617.0020.0002] # LINEAR B SYLLABLE B059 TA 10033 ; [.4618.0020.0002] # LINEAR B SYLLABLE B004 TE 10034 ; [.4619.0020.0002] # LINEAR B SYLLABLE B037 TI 10035 ; [.461A.0020.0002] # LINEAR B SYLLABLE B005 TO 10036 ; [.461B.0020.0002] # LINEAR B SYLLABLE B069 TU 10037 ; [.461C.0020.0002] # LINEAR B SYLLABLE B054 WA 10038 ; [.461D.0020.0002] # LINEAR B SYLLABLE B075 WE 10039 ; [.461E.0020.0002] # LINEAR B SYLLABLE B040 WI 1003A ; [.461F.0020.0002] # LINEAR B SYLLABLE B042 WO 1003C ; [.4620.0020.0002] # LINEAR B SYLLABLE B017 ZA 1003D ; [.4621.0020.0002] # LINEAR B SYLLABLE B074 ZE 1003F ; [.4622.0020.0002] # LINEAR B SYLLABLE B020 ZO 10040 ; [.4623.0020.0002] # LINEAR B SYLLABLE B025 A2 10041 ; [.4624.0020.0002] # LINEAR B SYLLABLE B043 A3 10042 ; [.4625.0020.0002] # LINEAR B SYLLABLE B085 AU 10043 ; [.4626.0020.0002] # LINEAR B SYLLABLE B071 DWE 10044 ; [.4627.0020.0002] # LINEAR B SYLLABLE B090 DWO 10045 ; [.4628.0020.0002] # LINEAR B SYLLABLE B048 NWA 10046 ; [.4629.0020.0002] # LINEAR B SYLLABLE B029 PU2 10047 ; [.462A.0020.0002] # LINEAR B SYLLABLE B062 PTE 10048 ; [.462B.0020.0002] # LINEAR B SYLLABLE B076 RA2 10049 ; [.462C.0020.0002] # LINEAR B SYLLABLE B033 RA3 1004A ; [.462D.0020.0002] # LINEAR B SYLLABLE B068 RO2 1004B ; [.462E.0020.0002] # LINEAR B SYLLABLE B066 TA2 1004C ; [.462F.0020.0002] # LINEAR B SYLLABLE B087 TWE 1004D ; [.4630.0020.0002] # LINEAR B SYLLABLE B091 TWO 10050 ; [.4631.0020.0002] # LINEAR B SYMBOL B018 10051 ; [.4632.0020.0002] # LINEAR B SYMBOL B019 10052 ; [.4633.0020.0002] # LINEAR B SYMBOL B022 10053 ; [.4634.0020.0002] # LINEAR B SYMBOL B034 10054 ; [.4635.0020.0002] # LINEAR B SYMBOL B047 10055 ; [.4636.0020.0002] # LINEAR B SYMBOL B049 10056 ; [.4637.0020.0002] # LINEAR B SYMBOL B056 10057 ; [.4638.0020.0002] # LINEAR B SYMBOL B063 10058 ; [.4639.0020.0002] # LINEAR B SYMBOL B064 10059 ; [.463A.0020.0002] # LINEAR B SYMBOL B079 1005A ; [.463B.0020.0002] # LINEAR B SYMBOL B082 1005B ; [.463C.0020.0002] # LINEAR B SYMBOL B083 1005C ; [.463D.0020.0002] # LINEAR B SYMBOL B086 1005D ; [.463E.0020.0002] # LINEAR B SYMBOL B089 10080 ; [.463F.0020.0002] # LINEAR B IDEOGRAM B100 MAN 10081 ; [.4640.0020.0002] # LINEAR B IDEOGRAM B102 WOMAN 10082 ; [.4641.0020.0002] # LINEAR B IDEOGRAM B104 DEER 10083 ; [.4642.0020.0002] # LINEAR B IDEOGRAM B105 EQUID 10084 ; [.4643.0020.0002] # LINEAR B IDEOGRAM B105F MARE 10085 ; [.4644.0020.0002] # LINEAR B IDEOGRAM B105M STALLION 10086 ; [.4645.0020.0002] # LINEAR B IDEOGRAM B106F EWE 10087 ; [.4646.0020.0002] # LINEAR B IDEOGRAM B106M RAM 10088 ; [.4647.0020.0002] # LINEAR B IDEOGRAM B107F SHE-GOAT 10089 ; [.4648.0020.0002] # LINEAR B IDEOGRAM B107M HE-GOAT 1008A ; [.4649.0020.0002] # LINEAR B IDEOGRAM B108F SOW 1008B ; [.464A.0020.0002] # LINEAR B IDEOGRAM B108M BOAR 1008C ; [.464B.0020.0002] # LINEAR B IDEOGRAM B109F COW 1008D ; [.464C.0020.0002] # LINEAR B IDEOGRAM B109M BULL 1008E ; [.464D.0020.0002] # LINEAR B IDEOGRAM B120 WHEAT 1008F ; [.464E.0020.0002] # LINEAR B IDEOGRAM B121 BARLEY 10090 ; [.464F.0020.0002] # LINEAR B IDEOGRAM B122 OLIVE 10091 ; [.4650.0020.0002] # LINEAR B IDEOGRAM B123 SPICE 10092 ; [.4651.0020.0002] # LINEAR B IDEOGRAM B125 CYPERUS 10093 ; [.4652.0020.0002] # LINEAR B MONOGRAM B127 KAPO 10094 ; [.4653.0020.0002] # LINEAR B MONOGRAM B128 KANAKO 10095 ; [.4654.0020.0002] # LINEAR B IDEOGRAM B130 OIL 10096 ; [.4655.0020.0002] # LINEAR B IDEOGRAM B131 WINE 10097 ; [.4656.0020.0002] # LINEAR B IDEOGRAM B132 10098 ; [.4657.0020.0002] # LINEAR B MONOGRAM B133 AREPA 10099 ; [.4658.0020.0002] # LINEAR B MONOGRAM B135 MERI 1009A ; [.4659.0020.0002] # LINEAR B IDEOGRAM B140 BRONZE 1009B ; [.465A.0020.0002] # LINEAR B IDEOGRAM B141 GOLD 1009C ; [.465B.0020.0002] # LINEAR B IDEOGRAM B142 1009D ; [.465C.0020.0002] # LINEAR B IDEOGRAM B145 WOOL 1009E ; [.465D.0020.0002] # LINEAR B IDEOGRAM B146 1009F ; [.465E.0020.0002] # LINEAR B IDEOGRAM B150 100A0 ; [.465F.0020.0002] # LINEAR B IDEOGRAM B151 HORN 100A1 ; [.4660.0020.0002] # LINEAR B IDEOGRAM B152 100A2 ; [.4661.0020.0002] # LINEAR B IDEOGRAM B153 100A3 ; [.4662.0020.0002] # LINEAR B IDEOGRAM B154 100A4 ; [.4663.0020.0002] # LINEAR B MONOGRAM B156 TURO2 100A5 ; [.4664.0020.0002] # LINEAR B IDEOGRAM B157 100A6 ; [.4665.0020.0002] # LINEAR B IDEOGRAM B158 100A7 ; [.4666.0020.0002] # LINEAR B IDEOGRAM B159 CLOTH 100A8 ; [.4667.0020.0002] # LINEAR B IDEOGRAM B160 100A9 ; [.4668.0020.0002] # LINEAR B IDEOGRAM B161 100AA ; [.4669.0020.0002] # LINEAR B IDEOGRAM B162 GARMENT 100AB ; [.466A.0020.0002] # LINEAR B IDEOGRAM B163 ARMOUR 100AC ; [.466B.0020.0002] # LINEAR B IDEOGRAM B164 100AD ; [.466C.0020.0002] # LINEAR B IDEOGRAM B165 100AE ; [.466D.0020.0002] # LINEAR B IDEOGRAM B166 100AF ; [.466E.0020.0002] # LINEAR B IDEOGRAM B167 100B0 ; [.466F.0020.0002] # LINEAR B IDEOGRAM B168 100B1 ; [.4670.0020.0002] # LINEAR B IDEOGRAM B169 100B2 ; [.4671.0020.0002] # LINEAR B IDEOGRAM B170 100B3 ; [.4672.0020.0002] # LINEAR B IDEOGRAM B171 100B4 ; [.4673.0020.0002] # LINEAR B IDEOGRAM B172 100B5 ; [.4674.0020.0002] # LINEAR B IDEOGRAM B173 MONTH 100B6 ; [.4675.0020.0002] # LINEAR B IDEOGRAM B174 100B7 ; [.4676.0020.0002] # LINEAR B IDEOGRAM B176 TREE 100B8 ; [.4677.0020.0002] # LINEAR B IDEOGRAM B177 100B9 ; [.4678.0020.0002] # LINEAR B IDEOGRAM B178 100BA ; [.4679.0020.0002] # LINEAR B IDEOGRAM B179 100BB ; [.467A.0020.0002] # LINEAR B IDEOGRAM B180 100BC ; [.467B.0020.0002] # LINEAR B IDEOGRAM B181 100BD ; [.467C.0020.0002] # LINEAR B IDEOGRAM B182 100BE ; [.467D.0020.0002] # LINEAR B IDEOGRAM B183 100BF ; [.467E.0020.0002] # LINEAR B IDEOGRAM B184 100C0 ; [.467F.0020.0002] # LINEAR B IDEOGRAM B185 100C1 ; [.4680.0020.0002] # LINEAR B IDEOGRAM B189 100C2 ; [.4681.0020.0002] # LINEAR B IDEOGRAM B190 100C3 ; [.4682.0020.0002] # LINEAR B IDEOGRAM B191 HELMET 100C4 ; [.4683.0020.0002] # LINEAR B IDEOGRAM B220 FOOTSTOOL 100C5 ; [.4684.0020.0002] # LINEAR B IDEOGRAM B225 BATHTUB 100C6 ; [.4685.0020.0002] # LINEAR B IDEOGRAM B230 SPEAR 100C7 ; [.4686.0020.0002] # LINEAR B IDEOGRAM B231 ARROW 100C8 ; [.4687.0020.0002] # LINEAR B IDEOGRAM B232 100C9 ; [.4688.0020.0002] # LINEAR B IDEOGRAM B233 SWORD 100CA ; [.4689.0020.0002] # LINEAR B IDEOGRAM B234 100CB ; [.468A.0020.0002] # LINEAR B IDEOGRAM B236 100CC ; [.468B.0020.0002] # LINEAR B IDEOGRAM B240 WHEELED CHARIOT 100CD ; [.468C.0020.0002] # LINEAR B IDEOGRAM B241 CHARIOT 100CE ; [.468D.0020.0002] # LINEAR B IDEOGRAM B242 CHARIOT FRAME 100CF ; [.468E.0020.0002] # LINEAR B IDEOGRAM B243 WHEEL 100D0 ; [.468F.0020.0002] # LINEAR B IDEOGRAM B245 100D1 ; [.4690.0020.0002] # LINEAR B IDEOGRAM B246 100D2 ; [.4691.0020.0002] # LINEAR B MONOGRAM B247 DIPTE 100D3 ; [.4692.0020.0002] # LINEAR B IDEOGRAM B248 100D4 ; [.4693.0020.0002] # LINEAR B IDEOGRAM B249 100D5 ; [.4694.0020.0002] # LINEAR B IDEOGRAM B251 100D6 ; [.4695.0020.0002] # LINEAR B IDEOGRAM B252 100D7 ; [.4696.0020.0002] # LINEAR B IDEOGRAM B253 100D8 ; [.4697.0020.0002] # LINEAR B IDEOGRAM B254 DART 100D9 ; [.4698.0020.0002] # LINEAR B IDEOGRAM B255 100DA ; [.4699.0020.0002] # LINEAR B IDEOGRAM B256 100DB ; [.469A.0020.0002] # LINEAR B IDEOGRAM B257 100DC ; [.469B.0020.0002] # LINEAR B IDEOGRAM B258 100DD ; [.469C.0020.0002] # LINEAR B IDEOGRAM B259 100DE ; [.469D.0020.0002] # LINEAR B IDEOGRAM VESSEL B155 100DF ; [.469E.0020.0002] # LINEAR B IDEOGRAM VESSEL B200 100E0 ; [.469F.0020.0002] # LINEAR B IDEOGRAM VESSEL B201 100E1 ; [.46A0.0020.0002] # LINEAR B IDEOGRAM VESSEL B202 100E2 ; [.46A1.0020.0002] # LINEAR B IDEOGRAM VESSEL B203 100E3 ; [.46A2.0020.0002] # LINEAR B IDEOGRAM VESSEL B204 100E4 ; [.46A3.0020.0002] # LINEAR B IDEOGRAM VESSEL B205 100E5 ; [.46A4.0020.0002] # LINEAR B IDEOGRAM VESSEL B206 100E6 ; [.46A5.0020.0002] # LINEAR B IDEOGRAM VESSEL B207 100E7 ; [.46A6.0020.0002] # LINEAR B IDEOGRAM VESSEL B208 100E8 ; [.46A7.0020.0002] # LINEAR B IDEOGRAM VESSEL B209 100E9 ; [.46A8.0020.0002] # LINEAR B IDEOGRAM VESSEL B210 100EA ; [.46A9.0020.0002] # LINEAR B IDEOGRAM VESSEL B211 100EB ; [.46AA.0020.0002] # LINEAR B IDEOGRAM VESSEL B212 100EC ; [.46AB.0020.0002] # LINEAR B IDEOGRAM VESSEL B213 100ED ; [.46AC.0020.0002] # LINEAR B IDEOGRAM VESSEL B214 100EE ; [.46AD.0020.0002] # LINEAR B IDEOGRAM VESSEL B215 100EF ; [.46AE.0020.0002] # LINEAR B IDEOGRAM VESSEL B216 100F0 ; [.46AF.0020.0002] # LINEAR B IDEOGRAM VESSEL B217 100F1 ; [.46B0.0020.0002] # LINEAR B IDEOGRAM VESSEL B218 100F2 ; [.46B1.0020.0002] # LINEAR B IDEOGRAM VESSEL B219 100F3 ; [.46B2.0020.0002] # LINEAR B IDEOGRAM VESSEL B221 100F4 ; [.46B3.0020.0002] # LINEAR B IDEOGRAM VESSEL B222 100F5 ; [.46B4.0020.0002] # LINEAR B IDEOGRAM VESSEL B226 100F6 ; [.46B5.0020.0002] # LINEAR B IDEOGRAM VESSEL B227 100F7 ; [.46B6.0020.0002] # LINEAR B IDEOGRAM VESSEL B228 100F8 ; [.46B7.0020.0002] # LINEAR B IDEOGRAM VESSEL B229 100F9 ; [.46B8.0020.0002] # LINEAR B IDEOGRAM VESSEL B250 100FA ; [.46B9.0020.0002] # LINEAR B IDEOGRAM VESSEL B305 10600 ; [.46BA.0020.0002] # LINEAR A SIGN AB001 10601 ; [.46BB.0020.0002] # LINEAR A SIGN AB002 10602 ; [.46BC.0020.0002] # LINEAR A SIGN AB003 10603 ; [.46BD.0020.0002] # LINEAR A SIGN AB004 10604 ; [.46BE.0020.0002] # LINEAR A SIGN AB005 10605 ; [.46BF.0020.0002] # LINEAR A SIGN AB006 10606 ; [.46C0.0020.0002] # LINEAR A SIGN AB007 10607 ; [.46C1.0020.0002] # LINEAR A SIGN AB008 10608 ; [.46C2.0020.0002] # LINEAR A SIGN AB009 10609 ; [.46C3.0020.0002] # LINEAR A SIGN AB010 1060A ; [.46C4.0020.0002] # LINEAR A SIGN AB011 1060B ; [.46C5.0020.0002] # LINEAR A SIGN AB013 1060C ; [.46C6.0020.0002] # LINEAR A SIGN AB016 1060D ; [.46C7.0020.0002] # LINEAR A SIGN AB017 1060E ; [.46C8.0020.0002] # LINEAR A SIGN AB020 1060F ; [.46C9.0020.0002] # LINEAR A SIGN AB021 10610 ; [.46CA.0020.0002] # LINEAR A SIGN AB021F 10611 ; [.46CB.0020.0002] # LINEAR A SIGN AB021M 10612 ; [.46CC.0020.0002] # LINEAR A SIGN AB022 10613 ; [.46CD.0020.0002] # LINEAR A SIGN AB022F 10614 ; [.46CE.0020.0002] # LINEAR A SIGN AB022M 10615 ; [.46CF.0020.0002] # LINEAR A SIGN AB023 10616 ; [.46D0.0020.0002] # LINEAR A SIGN AB023M 10617 ; [.46D1.0020.0002] # LINEAR A SIGN AB024 10618 ; [.46D2.0020.0002] # LINEAR A SIGN AB026 10619 ; [.46D3.0020.0002] # LINEAR A SIGN AB027 1061A ; [.46D4.0020.0002] # LINEAR A SIGN AB028 1061B ; [.46D5.0020.0002] # LINEAR A SIGN A028B 1061C ; [.46D6.0020.0002] # LINEAR A SIGN AB029 1061D ; [.46D7.0020.0002] # LINEAR A SIGN AB030 1061E ; [.46D8.0020.0002] # LINEAR A SIGN AB031 1061F ; [.46D9.0020.0002] # LINEAR A SIGN AB034 10620 ; [.46DA.0020.0002] # LINEAR A SIGN AB037 10621 ; [.46DB.0020.0002] # LINEAR A SIGN AB038 10622 ; [.46DC.0020.0002] # LINEAR A SIGN AB039 10623 ; [.46DD.0020.0002] # LINEAR A SIGN AB040 10624 ; [.46DE.0020.0002] # LINEAR A SIGN AB041 10625 ; [.46DF.0020.0002] # LINEAR A SIGN AB044 10626 ; [.46E0.0020.0002] # LINEAR A SIGN AB045 10627 ; [.46E1.0020.0002] # LINEAR A SIGN AB046 10628 ; [.46E2.0020.0002] # LINEAR A SIGN AB047 10629 ; [.46E3.0020.0002] # LINEAR A SIGN AB048 1062A ; [.46E4.0020.0002] # LINEAR A SIGN AB049 1062B ; [.46E5.0020.0002] # LINEAR A SIGN AB050 1062C ; [.46E6.0020.0002] # LINEAR A SIGN AB051 1062D ; [.46E7.0020.0002] # LINEAR A SIGN AB053 1062E ; [.46E8.0020.0002] # LINEAR A SIGN AB054 1062F ; [.46E9.0020.0002] # LINEAR A SIGN AB055 10630 ; [.46EA.0020.0002] # LINEAR A SIGN AB056 10631 ; [.46EB.0020.0002] # LINEAR A SIGN AB057 10632 ; [.46EC.0020.0002] # LINEAR A SIGN AB058 10633 ; [.46ED.0020.0002] # LINEAR A SIGN AB059 10634 ; [.46EE.0020.0002] # LINEAR A SIGN AB060 10635 ; [.46EF.0020.0002] # LINEAR A SIGN AB061 10636 ; [.46F0.0020.0002] # LINEAR A SIGN AB065 10637 ; [.46F1.0020.0002] # LINEAR A SIGN AB066 10638 ; [.46F2.0020.0002] # LINEAR A SIGN AB067 10639 ; [.46F3.0020.0002] # LINEAR A SIGN AB069 1063A ; [.46F4.0020.0002] # LINEAR A SIGN AB070 1063B ; [.46F5.0020.0002] # LINEAR A SIGN AB073 1063C ; [.46F6.0020.0002] # LINEAR A SIGN AB074 1063D ; [.46F7.0020.0002] # LINEAR A SIGN AB076 1063E ; [.46F8.0020.0002] # LINEAR A SIGN AB077 1063F ; [.46F9.0020.0002] # LINEAR A SIGN AB078 10640 ; [.46FA.0020.0002] # LINEAR A SIGN AB079 10641 ; [.46FB.0020.0002] # LINEAR A SIGN AB080 10642 ; [.46FC.0020.0002] # LINEAR A SIGN AB081 10643 ; [.46FD.0020.0002] # LINEAR A SIGN AB082 10644 ; [.46FE.0020.0002] # LINEAR A SIGN AB085 10645 ; [.46FF.0020.0002] # LINEAR A SIGN AB086 10646 ; [.4700.0020.0002] # LINEAR A SIGN AB087 10647 ; [.4701.0020.0002] # LINEAR A SIGN A100-102 10648 ; [.4702.0020.0002] # LINEAR A SIGN AB118 10649 ; [.4703.0020.0002] # LINEAR A SIGN AB120 1064A ; [.4704.0020.0002] # LINEAR A SIGN A120B 1064B ; [.4705.0020.0002] # LINEAR A SIGN AB122 1064C ; [.4706.0020.0002] # LINEAR A SIGN AB123 1064D ; [.4707.0020.0002] # LINEAR A SIGN AB131A 1064E ; [.4708.0020.0002] # LINEAR A SIGN AB131B 1064F ; [.4709.0020.0002] # LINEAR A SIGN A131C 10650 ; [.470A.0020.0002] # LINEAR A SIGN AB164 10651 ; [.470B.0020.0002] # LINEAR A SIGN AB171 10652 ; [.470C.0020.0002] # LINEAR A SIGN AB180 10653 ; [.470D.0020.0002] # LINEAR A SIGN AB188 10654 ; [.470E.0020.0002] # LINEAR A SIGN AB191 10655 ; [.470F.0020.0002] # LINEAR A SIGN A301 10656 ; [.4710.0020.0002] # LINEAR A SIGN A302 10657 ; [.4711.0020.0002] # LINEAR A SIGN A303 10658 ; [.4712.0020.0002] # LINEAR A SIGN A304 10659 ; [.4713.0020.0002] # LINEAR A SIGN A305 1065A ; [.4714.0020.0002] # LINEAR A SIGN A306 1065B ; [.4715.0020.0002] # LINEAR A SIGN A307 1065C ; [.4716.0020.0002] # LINEAR A SIGN A308 1065D ; [.4717.0020.0002] # LINEAR A SIGN A309A 1065E ; [.4718.0020.0002] # LINEAR A SIGN A309B 1065F ; [.4719.0020.0002] # LINEAR A SIGN A309C 10660 ; [.471A.0020.0002] # LINEAR A SIGN A310 10661 ; [.471B.0020.0002] # LINEAR A SIGN A311 10662 ; [.471C.0020.0002] # LINEAR A SIGN A312 10663 ; [.471D.0020.0002] # LINEAR A SIGN A313A 10664 ; [.471E.0020.0002] # LINEAR A SIGN A313B 10665 ; [.471F.0020.0002] # LINEAR A SIGN A313C 10666 ; [.4720.0020.0002] # LINEAR A SIGN A314 10667 ; [.4721.0020.0002] # LINEAR A SIGN A315 10668 ; [.4722.0020.0002] # LINEAR A SIGN A316 10669 ; [.4723.0020.0002] # LINEAR A SIGN A317 1066A ; [.4724.0020.0002] # LINEAR A SIGN A318 1066B ; [.4725.0020.0002] # LINEAR A SIGN A319 1066C ; [.4726.0020.0002] # LINEAR A SIGN A320 1066D ; [.4727.0020.0002] # LINEAR A SIGN A321 1066E ; [.4728.0020.0002] # LINEAR A SIGN A322 1066F ; [.4729.0020.0002] # LINEAR A SIGN A323 10670 ; [.472A.0020.0002] # LINEAR A SIGN A324 10671 ; [.472B.0020.0002] # LINEAR A SIGN A325 10672 ; [.472C.0020.0002] # LINEAR A SIGN A326 10673 ; [.472D.0020.0002] # LINEAR A SIGN A327 10674 ; [.472E.0020.0002] # LINEAR A SIGN A328 10675 ; [.472F.0020.0002] # LINEAR A SIGN A329 10676 ; [.4730.0020.0002] # LINEAR A SIGN A330 10677 ; [.4731.0020.0002] # LINEAR A SIGN A331 10678 ; [.4732.0020.0002] # LINEAR A SIGN A332 10679 ; [.4733.0020.0002] # LINEAR A SIGN A333 1067A ; [.4734.0020.0002] # LINEAR A SIGN A334 1067B ; [.4735.0020.0002] # LINEAR A SIGN A335 1067C ; [.4736.0020.0002] # LINEAR A SIGN A336 1067D ; [.4737.0020.0002] # LINEAR A SIGN A337 1067E ; [.4738.0020.0002] # LINEAR A SIGN A338 1067F ; [.4739.0020.0002] # LINEAR A SIGN A339 10680 ; [.473A.0020.0002] # LINEAR A SIGN A340 10681 ; [.473B.0020.0002] # LINEAR A SIGN A341 10682 ; [.473C.0020.0002] # LINEAR A SIGN A342 10683 ; [.473D.0020.0002] # LINEAR A SIGN A343 10684 ; [.473E.0020.0002] # LINEAR A SIGN A344 10685 ; [.473F.0020.0002] # LINEAR A SIGN A345 10686 ; [.4740.0020.0002] # LINEAR A SIGN A346 10687 ; [.4741.0020.0002] # LINEAR A SIGN A347 10688 ; [.4742.0020.0002] # LINEAR A SIGN A348 10689 ; [.4743.0020.0002] # LINEAR A SIGN A349 1068A ; [.4744.0020.0002] # LINEAR A SIGN A350 1068B ; [.4745.0020.0002] # LINEAR A SIGN A351 1068C ; [.4746.0020.0002] # LINEAR A SIGN A352 1068D ; [.4747.0020.0002] # LINEAR A SIGN A353 1068E ; [.4748.0020.0002] # LINEAR A SIGN A354 1068F ; [.4749.0020.0002] # LINEAR A SIGN A355 10690 ; [.474A.0020.0002] # LINEAR A SIGN A356 10691 ; [.474B.0020.0002] # LINEAR A SIGN A357 10692 ; [.474C.0020.0002] # LINEAR A SIGN A358 10693 ; [.474D.0020.0002] # LINEAR A SIGN A359 10694 ; [.474E.0020.0002] # LINEAR A SIGN A360 10695 ; [.474F.0020.0002] # LINEAR A SIGN A361 10696 ; [.4750.0020.0002] # LINEAR A SIGN A362 10697 ; [.4751.0020.0002] # LINEAR A SIGN A363 10698 ; [.4752.0020.0002] # LINEAR A SIGN A364 10699 ; [.4753.0020.0002] # LINEAR A SIGN A365 1069A ; [.4754.0020.0002] # LINEAR A SIGN A366 1069B ; [.4755.0020.0002] # LINEAR A SIGN A367 1069C ; [.4756.0020.0002] # LINEAR A SIGN A368 1069D ; [.4757.0020.0002] # LINEAR A SIGN A369 1069E ; [.4758.0020.0002] # LINEAR A SIGN A370 1069F ; [.4759.0020.0002] # LINEAR A SIGN A371 106A0 ; [.475A.0020.0002] # LINEAR A SIGN A400-VAS 106A1 ; [.475B.0020.0002] # LINEAR A SIGN A401-VAS 106A2 ; [.475C.0020.0002] # LINEAR A SIGN A402-VAS 106A3 ; [.475D.0020.0002] # LINEAR A SIGN A403-VAS 106A4 ; [.475E.0020.0002] # LINEAR A SIGN A404-VAS 106A5 ; [.475F.0020.0002] # LINEAR A SIGN A405-VAS 106A6 ; [.4760.0020.0002] # LINEAR A SIGN A406-VAS 106A7 ; [.4761.0020.0002] # LINEAR A SIGN A407-VAS 106A8 ; [.4762.0020.0002] # LINEAR A SIGN A408-VAS 106A9 ; [.4763.0020.0002] # LINEAR A SIGN A409-VAS 106AA ; [.4764.0020.0002] # LINEAR A SIGN A410-VAS 106AB ; [.4765.0020.0002] # LINEAR A SIGN A411-VAS 106AC ; [.4766.0020.0002] # LINEAR A SIGN A412-VAS 106AD ; [.4767.0020.0002] # LINEAR A SIGN A413-VAS 106AE ; [.4768.0020.0002] # LINEAR A SIGN A414-VAS 106AF ; [.4769.0020.0002] # LINEAR A SIGN A415-VAS 106B0 ; [.476A.0020.0002] # LINEAR A SIGN A416-VAS 106B1 ; [.476B.0020.0002] # LINEAR A SIGN A417-VAS 106B2 ; [.476C.0020.0002] # LINEAR A SIGN A418-VAS 106B3 ; [.476D.0020.0002] # LINEAR A SIGN A501 106B4 ; [.476E.0020.0002] # LINEAR A SIGN A502 106B5 ; [.476F.0020.0002] # LINEAR A SIGN A503 106B6 ; [.4770.0020.0002] # LINEAR A SIGN A504 106B7 ; [.4771.0020.0002] # LINEAR A SIGN A505 106B8 ; [.4772.0020.0002] # LINEAR A SIGN A506 106B9 ; [.4773.0020.0002] # LINEAR A SIGN A508 106BA ; [.4774.0020.0002] # LINEAR A SIGN A509 106BB ; [.4775.0020.0002] # LINEAR A SIGN A510 106BC ; [.4776.0020.0002] # LINEAR A SIGN A511 106BD ; [.4777.0020.0002] # LINEAR A SIGN A512 106BE ; [.4778.0020.0002] # LINEAR A SIGN A513 106BF ; [.4779.0020.0002] # LINEAR A SIGN A515 106C0 ; [.477A.0020.0002] # LINEAR A SIGN A516 106C1 ; [.477B.0020.0002] # LINEAR A SIGN A520 106C2 ; [.477C.0020.0002] # LINEAR A SIGN A521 106C3 ; [.477D.0020.0002] # LINEAR A SIGN A523 106C4 ; [.477E.0020.0002] # LINEAR A SIGN A524 106C5 ; [.477F.0020.0002] # LINEAR A SIGN A525 106C6 ; [.4780.0020.0002] # LINEAR A SIGN A526 106C7 ; [.4781.0020.0002] # LINEAR A SIGN A527 106C8 ; [.4782.0020.0002] # LINEAR A SIGN A528 106C9 ; [.4783.0020.0002] # LINEAR A SIGN A529 106CA ; [.4784.0020.0002] # LINEAR A SIGN A530 106CB ; [.4785.0020.0002] # LINEAR A SIGN A531 106CC ; [.4786.0020.0002] # LINEAR A SIGN A532 106CD ; [.4787.0020.0002] # LINEAR A SIGN A534 106CE ; [.4788.0020.0002] # LINEAR A SIGN A535 106CF ; [.4789.0020.0002] # LINEAR A SIGN A536 106D0 ; [.478A.0020.0002] # LINEAR A SIGN A537 106D1 ; [.478B.0020.0002] # LINEAR A SIGN A538 106D2 ; [.478C.0020.0002] # LINEAR A SIGN A539 106D3 ; [.478D.0020.0002] # LINEAR A SIGN A540 106D4 ; [.478E.0020.0002] # LINEAR A SIGN A541 106D5 ; [.478F.0020.0002] # LINEAR A SIGN A542 106D6 ; [.4790.0020.0002] # LINEAR A SIGN A545 106D7 ; [.4791.0020.0002] # LINEAR A SIGN A547 106D8 ; [.4792.0020.0002] # LINEAR A SIGN A548 106D9 ; [.4793.0020.0002] # LINEAR A SIGN A549 106DA ; [.4794.0020.0002] # LINEAR A SIGN A550 106DB ; [.4795.0020.0002] # LINEAR A SIGN A551 106DC ; [.4796.0020.0002] # LINEAR A SIGN A552 106DD ; [.4797.0020.0002] # LINEAR A SIGN A553 106DE ; [.4798.0020.0002] # LINEAR A SIGN A554 106DF ; [.4799.0020.0002] # LINEAR A SIGN A555 106E0 ; [.479A.0020.0002] # LINEAR A SIGN A556 106E1 ; [.479B.0020.0002] # LINEAR A SIGN A557 106E2 ; [.479C.0020.0002] # LINEAR A SIGN A559 106E3 ; [.479D.0020.0002] # LINEAR A SIGN A563 106E4 ; [.479E.0020.0002] # LINEAR A SIGN A564 106E5 ; [.479F.0020.0002] # LINEAR A SIGN A565 106E6 ; [.47A0.0020.0002] # LINEAR A SIGN A566 106E7 ; [.47A1.0020.0002] # LINEAR A SIGN A568 106E8 ; [.47A2.0020.0002] # LINEAR A SIGN A569 106E9 ; [.47A3.0020.0002] # LINEAR A SIGN A570 106EA ; [.47A4.0020.0002] # LINEAR A SIGN A571 106EB ; [.47A5.0020.0002] # LINEAR A SIGN A572 106EC ; [.47A6.0020.0002] # LINEAR A SIGN A573 106ED ; [.47A7.0020.0002] # LINEAR A SIGN A574 106EE ; [.47A8.0020.0002] # LINEAR A SIGN A575 106EF ; [.47A9.0020.0002] # LINEAR A SIGN A576 106F0 ; [.47AA.0020.0002] # LINEAR A SIGN A577 106F1 ; [.47AB.0020.0002] # LINEAR A SIGN A578 106F2 ; [.47AC.0020.0002] # LINEAR A SIGN A579 106F3 ; [.47AD.0020.0002] # LINEAR A SIGN A580 106F4 ; [.47AE.0020.0002] # LINEAR A SIGN A581 106F5 ; [.47AF.0020.0002] # LINEAR A SIGN A582 106F6 ; [.47B0.0020.0002] # LINEAR A SIGN A583 106F7 ; [.47B1.0020.0002] # LINEAR A SIGN A584 106F8 ; [.47B2.0020.0002] # LINEAR A SIGN A585 106F9 ; [.47B3.0020.0002] # LINEAR A SIGN A586 106FA ; [.47B4.0020.0002] # LINEAR A SIGN A587 106FB ; [.47B5.0020.0002] # LINEAR A SIGN A588 106FC ; [.47B6.0020.0002] # LINEAR A SIGN A589 106FD ; [.47B7.0020.0002] # LINEAR A SIGN A591 106FE ; [.47B8.0020.0002] # LINEAR A SIGN A592 106FF ; [.47B9.0020.0002] # LINEAR A SIGN A594 10700 ; [.47BA.0020.0002] # LINEAR A SIGN A595 10701 ; [.47BB.0020.0002] # LINEAR A SIGN A596 10702 ; [.47BC.0020.0002] # LINEAR A SIGN A598 10703 ; [.47BD.0020.0002] # LINEAR A SIGN A600 10704 ; [.47BE.0020.0002] # LINEAR A SIGN A601 10705 ; [.47BF.0020.0002] # LINEAR A SIGN A602 10706 ; [.47C0.0020.0002] # LINEAR A SIGN A603 10707 ; [.47C1.0020.0002] # LINEAR A SIGN A604 10708 ; [.47C2.0020.0002] # LINEAR A SIGN A606 10709 ; [.47C3.0020.0002] # LINEAR A SIGN A608 1070A ; [.47C4.0020.0002] # LINEAR A SIGN A609 1070B ; [.47C5.0020.0002] # LINEAR A SIGN A610 1070C ; [.47C6.0020.0002] # LINEAR A SIGN A611 1070D ; [.47C7.0020.0002] # LINEAR A SIGN A612 1070E ; [.47C8.0020.0002] # LINEAR A SIGN A613 1070F ; [.47C9.0020.0002] # LINEAR A SIGN A614 10710 ; [.47CA.0020.0002] # LINEAR A SIGN A615 10711 ; [.47CB.0020.0002] # LINEAR A SIGN A616 10712 ; [.47CC.0020.0002] # LINEAR A SIGN A617 10713 ; [.47CD.0020.0002] # LINEAR A SIGN A618 10714 ; [.47CE.0020.0002] # LINEAR A SIGN A619 10715 ; [.47CF.0020.0002] # LINEAR A SIGN A620 10716 ; [.47D0.0020.0002] # LINEAR A SIGN A621 10717 ; [.47D1.0020.0002] # LINEAR A SIGN A622 10718 ; [.47D2.0020.0002] # LINEAR A SIGN A623 10719 ; [.47D3.0020.0002] # LINEAR A SIGN A624 1071A ; [.47D4.0020.0002] # LINEAR A SIGN A626 1071B ; [.47D5.0020.0002] # LINEAR A SIGN A627 1071C ; [.47D6.0020.0002] # LINEAR A SIGN A628 1071D ; [.47D7.0020.0002] # LINEAR A SIGN A629 1071E ; [.47D8.0020.0002] # LINEAR A SIGN A634 1071F ; [.47D9.0020.0002] # LINEAR A SIGN A637 10720 ; [.47DA.0020.0002] # LINEAR A SIGN A638 10721 ; [.47DB.0020.0002] # LINEAR A SIGN A640 10722 ; [.47DC.0020.0002] # LINEAR A SIGN A642 10723 ; [.47DD.0020.0002] # LINEAR A SIGN A643 10724 ; [.47DE.0020.0002] # LINEAR A SIGN A644 10725 ; [.47DF.0020.0002] # LINEAR A SIGN A645 10726 ; [.47E0.0020.0002] # LINEAR A SIGN A646 10727 ; [.47E1.0020.0002] # LINEAR A SIGN A648 10728 ; [.47E2.0020.0002] # LINEAR A SIGN A649 10729 ; [.47E3.0020.0002] # LINEAR A SIGN A651 1072A ; [.47E4.0020.0002] # LINEAR A SIGN A652 1072B ; [.47E5.0020.0002] # LINEAR A SIGN A653 1072C ; [.47E6.0020.0002] # LINEAR A SIGN A654 1072D ; [.47E7.0020.0002] # LINEAR A SIGN A655 1072E ; [.47E8.0020.0002] # LINEAR A SIGN A656 1072F ; [.47E9.0020.0002] # LINEAR A SIGN A657 10730 ; [.47EA.0020.0002] # LINEAR A SIGN A658 10731 ; [.47EB.0020.0002] # LINEAR A SIGN A659 10732 ; [.47EC.0020.0002] # LINEAR A SIGN A660 10733 ; [.47ED.0020.0002] # LINEAR A SIGN A661 10734 ; [.47EE.0020.0002] # LINEAR A SIGN A662 10735 ; [.47EF.0020.0002] # LINEAR A SIGN A663 10736 ; [.47F0.0020.0002] # LINEAR A SIGN A664 10740 ; [.47F1.0020.0002] # LINEAR A SIGN A701 A 10741 ; [.47F2.0020.0002] # LINEAR A SIGN A702 B 10742 ; [.47F3.0020.0002] # LINEAR A SIGN A703 D 10743 ; [.47F4.0020.0002] # LINEAR A SIGN A704 E 10744 ; [.47F5.0020.0002] # LINEAR A SIGN A705 F 10745 ; [.47F6.0020.0002] # LINEAR A SIGN A706 H 10746 ; [.47F7.0020.0002] # LINEAR A SIGN A707 J 10747 ; [.47F8.0020.0002] # LINEAR A SIGN A708 K 10748 ; [.47F9.0020.0002] # LINEAR A SIGN A709 L 10749 ; [.47FA.0020.0002] # LINEAR A SIGN A709-2 L2 1074A ; [.47FB.0020.0002] # LINEAR A SIGN A709-3 L3 1074B ; [.47FC.0020.0002] # LINEAR A SIGN A709-4 L4 1074C ; [.47FD.0020.0002] # LINEAR A SIGN A709-6 L6 1074D ; [.47FE.0020.0002] # LINEAR A SIGN A710 W 1074E ; [.47FF.0020.0002] # LINEAR A SIGN A711 X 1074F ; [.4800.0020.0002] # LINEAR A SIGN A712 Y 10750 ; [.4801.0020.0002] # LINEAR A SIGN A713 OMEGA 10751 ; [.4802.0020.0002] # LINEAR A SIGN A714 ABB 10752 ; [.4803.0020.0002] # LINEAR A SIGN A715 BB 10753 ; [.4804.0020.0002] # LINEAR A SIGN A717 DD 10754 ; [.4805.0020.0002] # LINEAR A SIGN A726 EYYY 10755 ; [.4806.0020.0002] # LINEAR A SIGN A732 JE 10760 ; [.4807.0020.0002] # LINEAR A SIGN A800 10761 ; [.4808.0020.0002] # LINEAR A SIGN A801 10762 ; [.4809.0020.0002] # LINEAR A SIGN A802 10763 ; [.480A.0020.0002] # LINEAR A SIGN A803 10764 ; [.480B.0020.0002] # LINEAR A SIGN A804 10765 ; [.480C.0020.0002] # LINEAR A SIGN A805 10766 ; [.480D.0020.0002] # LINEAR A SIGN A806 10767 ; [.480E.0020.0002] # LINEAR A SIGN A807 10800 ; [.480F.0020.0002] # CYPRIOT SYLLABLE A 10801 ; [.4810.0020.0002] # CYPRIOT SYLLABLE E 10802 ; [.4811.0020.0002] # CYPRIOT SYLLABLE I 10803 ; [.4812.0020.0002] # CYPRIOT SYLLABLE O 10804 ; [.4813.0020.0002] # CYPRIOT SYLLABLE U 10805 ; [.4814.0020.0002] # CYPRIOT SYLLABLE JA 10808 ; [.4815.0020.0002] # CYPRIOT SYLLABLE JO 1080A ; [.4816.0020.0002] # CYPRIOT SYLLABLE KA 1080B ; [.4817.0020.0002] # CYPRIOT SYLLABLE KE 1080C ; [.4818.0020.0002] # CYPRIOT SYLLABLE KI 1080D ; [.4819.0020.0002] # CYPRIOT SYLLABLE KO 1080E ; [.481A.0020.0002] # CYPRIOT SYLLABLE KU 1080F ; [.481B.0020.0002] # CYPRIOT SYLLABLE LA 10810 ; [.481C.0020.0002] # CYPRIOT SYLLABLE LE 10811 ; [.481D.0020.0002] # CYPRIOT SYLLABLE LI 10812 ; [.481E.0020.0002] # CYPRIOT SYLLABLE LO 10813 ; [.481F.0020.0002] # CYPRIOT SYLLABLE LU 10814 ; [.4820.0020.0002] # CYPRIOT SYLLABLE MA 10815 ; [.4821.0020.0002] # CYPRIOT SYLLABLE ME 10816 ; [.4822.0020.0002] # CYPRIOT SYLLABLE MI 10817 ; [.4823.0020.0002] # CYPRIOT SYLLABLE MO 10818 ; [.4824.0020.0002] # CYPRIOT SYLLABLE MU 10819 ; [.4825.0020.0002] # CYPRIOT SYLLABLE NA 1081A ; [.4826.0020.0002] # CYPRIOT SYLLABLE NE 1081B ; [.4827.0020.0002] # CYPRIOT SYLLABLE NI 1081C ; [.4828.0020.0002] # CYPRIOT SYLLABLE NO 1081D ; [.4829.0020.0002] # CYPRIOT SYLLABLE NU 1081E ; [.482A.0020.0002] # CYPRIOT SYLLABLE PA 1081F ; [.482B.0020.0002] # CYPRIOT SYLLABLE PE 10820 ; [.482C.0020.0002] # CYPRIOT SYLLABLE PI 10821 ; [.482D.0020.0002] # CYPRIOT SYLLABLE PO 10822 ; [.482E.0020.0002] # CYPRIOT SYLLABLE PU 10823 ; [.482F.0020.0002] # CYPRIOT SYLLABLE RA 10824 ; [.4830.0020.0002] # CYPRIOT SYLLABLE RE 10825 ; [.4831.0020.0002] # CYPRIOT SYLLABLE RI 10826 ; [.4832.0020.0002] # CYPRIOT SYLLABLE RO 10827 ; [.4833.0020.0002] # CYPRIOT SYLLABLE RU 10828 ; [.4834.0020.0002] # CYPRIOT SYLLABLE SA 10829 ; [.4835.0020.0002] # CYPRIOT SYLLABLE SE 1082A ; [.4836.0020.0002] # CYPRIOT SYLLABLE SI 1082B ; [.4837.0020.0002] # CYPRIOT SYLLABLE SO 1082C ; [.4838.0020.0002] # CYPRIOT SYLLABLE SU 1082D ; [.4839.0020.0002] # CYPRIOT SYLLABLE TA 1082E ; [.483A.0020.0002] # CYPRIOT SYLLABLE TE 1082F ; [.483B.0020.0002] # CYPRIOT SYLLABLE TI 10830 ; [.483C.0020.0002] # CYPRIOT SYLLABLE TO 10831 ; [.483D.0020.0002] # CYPRIOT SYLLABLE TU 10832 ; [.483E.0020.0002] # CYPRIOT SYLLABLE WA 10833 ; [.483F.0020.0002] # CYPRIOT SYLLABLE WE 10834 ; [.4840.0020.0002] # CYPRIOT SYLLABLE WI 10835 ; [.4841.0020.0002] # CYPRIOT SYLLABLE WO 10837 ; [.4842.0020.0002] # CYPRIOT SYLLABLE XA 10838 ; [.4843.0020.0002] # CYPRIOT SYLLABLE XE 1083C ; [.4844.0020.0002] # CYPRIOT SYLLABLE ZA 1083F ; [.4845.0020.0002] # CYPRIOT SYLLABLE ZO 10A60 ; [.4846.0020.0002] # OLD SOUTH ARABIAN LETTER HE 10A61 ; [.4847.0020.0002] # OLD SOUTH ARABIAN LETTER LAMEDH 10A62 ; [.4848.0020.0002] # OLD SOUTH ARABIAN LETTER HETH 10A63 ; [.4849.0020.0002] # OLD SOUTH ARABIAN LETTER MEM 10A64 ; [.484A.0020.0002] # OLD SOUTH ARABIAN LETTER QOPH 10A65 ; [.484B.0020.0002] # OLD SOUTH ARABIAN LETTER WAW 10A66 ; [.484C.0020.0002] # OLD SOUTH ARABIAN LETTER SHIN 10A67 ; [.484D.0020.0002] # OLD SOUTH ARABIAN LETTER RESH 10A68 ; [.484E.0020.0002] # OLD SOUTH ARABIAN LETTER BETH 10A69 ; [.484F.0020.0002] # OLD SOUTH ARABIAN LETTER TAW 10A6A ; [.4850.0020.0002] # OLD SOUTH ARABIAN LETTER SAT 10A6B ; [.4851.0020.0002] # OLD SOUTH ARABIAN LETTER KAPH 10A6C ; [.4852.0020.0002] # OLD SOUTH ARABIAN LETTER NUN 10A6D ; [.4853.0020.0002] # OLD SOUTH ARABIAN LETTER KHETH 10A6E ; [.4854.0020.0002] # OLD SOUTH ARABIAN LETTER SADHE 10A6F ; [.4855.0020.0002] # OLD SOUTH ARABIAN LETTER SAMEKH 10A70 ; [.4856.0020.0002] # OLD SOUTH ARABIAN LETTER FE 10A71 ; [.4857.0020.0002] # OLD SOUTH ARABIAN LETTER ALEF 10A72 ; [.4858.0020.0002] # OLD SOUTH ARABIAN LETTER AYN 10A73 ; [.4859.0020.0002] # OLD SOUTH ARABIAN LETTER DHADHE 10A74 ; [.485A.0020.0002] # OLD SOUTH ARABIAN LETTER GIMEL 10A75 ; [.485B.0020.0002] # OLD SOUTH ARABIAN LETTER DALETH 10A76 ; [.485C.0020.0002] # OLD SOUTH ARABIAN LETTER GHAYN 10A77 ; [.485D.0020.0002] # OLD SOUTH ARABIAN LETTER TETH 10A78 ; [.485E.0020.0002] # OLD SOUTH ARABIAN LETTER ZAYN 10A79 ; [.485F.0020.0002] # OLD SOUTH ARABIAN LETTER DHALETH 10A7A ; [.4860.0020.0002] # OLD SOUTH ARABIAN LETTER YODH 10A7B ; [.4861.0020.0002] # OLD SOUTH ARABIAN LETTER THAW 10A7C ; [.4862.0020.0002] # OLD SOUTH ARABIAN LETTER THETH 10A80 ; [.4863.0020.0002] # OLD NORTH ARABIAN LETTER HEH 10A81 ; [.4864.0020.0002] # OLD NORTH ARABIAN LETTER LAM 10A82 ; [.4865.0020.0002] # OLD NORTH ARABIAN LETTER HAH 10A83 ; [.4866.0020.0002] # OLD NORTH ARABIAN LETTER MEEM 10A84 ; [.4867.0020.0002] # OLD NORTH ARABIAN LETTER QAF 10A85 ; [.4868.0020.0002] # OLD NORTH ARABIAN LETTER WAW 10A86 ; [.4869.0020.0002] # OLD NORTH ARABIAN LETTER ES-2 10A87 ; [.486A.0020.0002] # OLD NORTH ARABIAN LETTER REH 10A88 ; [.486B.0020.0002] # OLD NORTH ARABIAN LETTER BEH 10A89 ; [.486C.0020.0002] # OLD NORTH ARABIAN LETTER TEH 10A8A ; [.486D.0020.0002] # OLD NORTH ARABIAN LETTER ES-1 10A8B ; [.486E.0020.0002] # OLD NORTH ARABIAN LETTER KAF 10A8C ; [.486F.0020.0002] # OLD NORTH ARABIAN LETTER NOON 10A8D ; [.4870.0020.0002] # OLD NORTH ARABIAN LETTER KHAH 10A8E ; [.4871.0020.0002] # OLD NORTH ARABIAN LETTER SAD 10A8F ; [.4872.0020.0002] # OLD NORTH ARABIAN LETTER ES-3 10A90 ; [.4873.0020.0002] # OLD NORTH ARABIAN LETTER FEH 10A91 ; [.4874.0020.0002] # OLD NORTH ARABIAN LETTER ALEF 10A92 ; [.4875.0020.0002] # OLD NORTH ARABIAN LETTER AIN 10A93 ; [.4876.0020.0002] # OLD NORTH ARABIAN LETTER DAD 10A94 ; [.4877.0020.0002] # OLD NORTH ARABIAN LETTER GEEM 10A95 ; [.4878.0020.0002] # OLD NORTH ARABIAN LETTER DAL 10A96 ; [.4879.0020.0002] # OLD NORTH ARABIAN LETTER GHAIN 10A97 ; [.487A.0020.0002] # OLD NORTH ARABIAN LETTER TAH 10A98 ; [.487B.0020.0002] # OLD NORTH ARABIAN LETTER ZAIN 10A99 ; [.487C.0020.0002] # OLD NORTH ARABIAN LETTER THAL 10A9A ; [.487D.0020.0002] # OLD NORTH ARABIAN LETTER YEH 10A9B ; [.487E.0020.0002] # OLD NORTH ARABIAN LETTER THEH 10A9C ; [.487F.0020.0002] # OLD NORTH ARABIAN LETTER ZAH 10B00 ; [.4880.0020.0002] # AVESTAN LETTER A 10B01 ; [.4881.0020.0002] # AVESTAN LETTER AA 10B02 ; [.4882.0020.0002] # AVESTAN LETTER AO 10B03 ; [.4883.0020.0002] # AVESTAN LETTER AAO 10B04 ; [.4884.0020.0002] # AVESTAN LETTER AN 10B05 ; [.4885.0020.0002] # AVESTAN LETTER AAN 10B06 ; [.4886.0020.0002] # AVESTAN LETTER AE 10B07 ; [.4887.0020.0002] # AVESTAN LETTER AEE 10B08 ; [.4888.0020.0002] # AVESTAN LETTER E 10B09 ; [.4889.0020.0002] # AVESTAN LETTER EE 10B0A ; [.488A.0020.0002] # AVESTAN LETTER O 10B0B ; [.488B.0020.0002] # AVESTAN LETTER OO 10B0C ; [.488C.0020.0002] # AVESTAN LETTER I 10B0D ; [.488D.0020.0002] # AVESTAN LETTER II 10B0E ; [.488E.0020.0002] # AVESTAN LETTER U 10B0F ; [.488F.0020.0002] # AVESTAN LETTER UU 10B10 ; [.4890.0020.0002] # AVESTAN LETTER KE 10B11 ; [.4891.0020.0002] # AVESTAN LETTER XE 10B12 ; [.4892.0020.0002] # AVESTAN LETTER XYE 10B13 ; [.4893.0020.0002] # AVESTAN LETTER XVE 10B14 ; [.4894.0020.0002] # AVESTAN LETTER GE 10B15 ; [.4895.0020.0002] # AVESTAN LETTER GGE 10B16 ; [.4896.0020.0002] # AVESTAN LETTER GHE 10B17 ; [.4897.0020.0002] # AVESTAN LETTER CE 10B18 ; [.4898.0020.0002] # AVESTAN LETTER JE 10B19 ; [.4899.0020.0002] # AVESTAN LETTER TE 10B1A ; [.489A.0020.0002] # AVESTAN LETTER THE 10B1B ; [.489B.0020.0002] # AVESTAN LETTER DE 10B1C ; [.489C.0020.0002] # AVESTAN LETTER DHE 10B1D ; [.489D.0020.0002] # AVESTAN LETTER TTE 10B1E ; [.489E.0020.0002] # AVESTAN LETTER PE 10B1F ; [.489F.0020.0002] # AVESTAN LETTER FE 10B20 ; [.48A0.0020.0002] # AVESTAN LETTER BE 10B21 ; [.48A1.0020.0002] # AVESTAN LETTER BHE 10B22 ; [.48A2.0020.0002] # AVESTAN LETTER NGE 10B23 ; [.48A3.0020.0002] # AVESTAN LETTER NGYE 10B24 ; [.48A4.0020.0002] # AVESTAN LETTER NGVE 10B25 ; [.48A5.0020.0002] # AVESTAN LETTER NE 10B26 ; [.48A6.0020.0002] # AVESTAN LETTER NYE 10B27 ; [.48A7.0020.0002] # AVESTAN LETTER NNE 10B28 ; [.48A8.0020.0002] # AVESTAN LETTER ME 10B29 ; [.48A9.0020.0002] # AVESTAN LETTER HME 10B2A ; [.48AA.0020.0002] # AVESTAN LETTER YYE 10B2B ; [.48AB.0020.0002] # AVESTAN LETTER YE 10B2C ; [.48AC.0020.0002] # AVESTAN LETTER VE 10B2D ; [.48AD.0020.0002] # AVESTAN LETTER RE 10B2E ; [.48AD.0020.0004][.0000.0110.0004] # AVESTAN LETTER LE 10B2F ; [.48AE.0020.0002] # AVESTAN LETTER SE 10B30 ; [.48AF.0020.0002] # AVESTAN LETTER ZE 10B31 ; [.48B0.0020.0002] # AVESTAN LETTER SHE 10B32 ; [.48B1.0020.0002] # AVESTAN LETTER ZHE 10B33 ; [.48B2.0020.0002] # AVESTAN LETTER SHYE 10B34 ; [.48B3.0020.0002] # AVESTAN LETTER SSHE 10B35 ; [.48B4.0020.0002] # AVESTAN LETTER HE 10860 ; [.48B5.0020.0002] # PALMYRENE LETTER ALEPH 10861 ; [.48B6.0020.0002] # PALMYRENE LETTER BETH 10862 ; [.48B7.0020.0002] # PALMYRENE LETTER GIMEL 10863 ; [.48B8.0020.0002] # PALMYRENE LETTER DALETH 10864 ; [.48B9.0020.0002] # PALMYRENE LETTER HE 10865 ; [.48BA.0020.0002] # PALMYRENE LETTER WAW 10866 ; [.48BB.0020.0002] # PALMYRENE LETTER ZAYIN 10867 ; [.48BC.0020.0002] # PALMYRENE LETTER HETH 10868 ; [.48BD.0020.0002] # PALMYRENE LETTER TETH 10869 ; [.48BE.0020.0002] # PALMYRENE LETTER YODH 1086A ; [.48BF.0020.0002] # PALMYRENE LETTER KAPH 1086B ; [.48C0.0020.0002] # PALMYRENE LETTER LAMEDH 1086C ; [.48C1.0020.0002] # PALMYRENE LETTER MEM 1086E ; [.48C2.0020.0002] # PALMYRENE LETTER NUN 1086D ; [.48C2.0020.0019] # PALMYRENE LETTER FINAL NUN 1086F ; [.48C3.0020.0002] # PALMYRENE LETTER SAMEKH 10870 ; [.48C4.0020.0002] # PALMYRENE LETTER AYIN 10871 ; [.48C5.0020.0002] # PALMYRENE LETTER PE 10872 ; [.48C6.0020.0002] # PALMYRENE LETTER SADHE 10873 ; [.48C7.0020.0002] # PALMYRENE LETTER QOPH 10874 ; [.48C8.0020.0002] # PALMYRENE LETTER RESH 10875 ; [.48C9.0020.0002] # PALMYRENE LETTER SHIN 10876 ; [.48CA.0020.0002] # PALMYRENE LETTER TAW 10881 ; [.48CB.0020.0002] # NABATAEAN LETTER ALEPH 10880 ; [.48CB.0020.0019] # NABATAEAN LETTER FINAL ALEPH 10883 ; [.48CC.0020.0002] # NABATAEAN LETTER BETH 10882 ; [.48CC.0020.0019] # NABATAEAN LETTER FINAL BETH 10884 ; [.48CD.0020.0002] # NABATAEAN LETTER GIMEL 10885 ; [.48CE.0020.0002] # NABATAEAN LETTER DALETH 10887 ; [.48CF.0020.0002] # NABATAEAN LETTER HE 10886 ; [.48CF.0020.0019] # NABATAEAN LETTER FINAL HE 10888 ; [.48D0.0020.0002] # NABATAEAN LETTER WAW 10889 ; [.48D1.0020.0002] # NABATAEAN LETTER ZAYIN 1088A ; [.48D2.0020.0002] # NABATAEAN LETTER HETH 1088B ; [.48D3.0020.0002] # NABATAEAN LETTER TETH 1088D ; [.48D4.0020.0002] # NABATAEAN LETTER YODH 1088C ; [.48D4.0020.0019] # NABATAEAN LETTER FINAL YODH 1088F ; [.48D5.0020.0002] # NABATAEAN LETTER KAPH 1088E ; [.48D5.0020.0019] # NABATAEAN LETTER FINAL KAPH 10891 ; [.48D6.0020.0002] # NABATAEAN LETTER LAMEDH 10890 ; [.48D6.0020.0019] # NABATAEAN LETTER FINAL LAMEDH 10893 ; [.48D7.0020.0002] # NABATAEAN LETTER MEM 10892 ; [.48D7.0020.0019] # NABATAEAN LETTER FINAL MEM 10895 ; [.48D8.0020.0002] # NABATAEAN LETTER NUN 10894 ; [.48D8.0020.0019] # NABATAEAN LETTER FINAL NUN 10896 ; [.48D9.0020.0002] # NABATAEAN LETTER SAMEKH 10897 ; [.48DA.0020.0002] # NABATAEAN LETTER AYIN 10898 ; [.48DB.0020.0002] # NABATAEAN LETTER PE 10899 ; [.48DC.0020.0002] # NABATAEAN LETTER SADHE 1089A ; [.48DD.0020.0002] # NABATAEAN LETTER QOPH 1089B ; [.48DE.0020.0002] # NABATAEAN LETTER RESH 1089D ; [.48DF.0020.0002] # NABATAEAN LETTER SHIN 1089C ; [.48DF.0020.0019] # NABATAEAN LETTER FINAL SHIN 1089E ; [.48E0.0020.0002] # NABATAEAN LETTER TAW 108E0 ; [.48E1.0020.0002] # HATRAN LETTER ALEPH 108E1 ; [.48E2.0020.0002] # HATRAN LETTER BETH 108E2 ; [.48E3.0020.0002] # HATRAN LETTER GIMEL 108E3 ; [.48E4.0020.0002] # HATRAN LETTER DALETH-RESH 108E4 ; [.48E5.0020.0002] # HATRAN LETTER HE 108E5 ; [.48E6.0020.0002] # HATRAN LETTER WAW 108E6 ; [.48E7.0020.0002] # HATRAN LETTER ZAYN 108E7 ; [.48E8.0020.0002] # HATRAN LETTER HETH 108E8 ; [.48E9.0020.0002] # HATRAN LETTER TETH 108E9 ; [.48EA.0020.0002] # HATRAN LETTER YODH 108EA ; [.48EB.0020.0002] # HATRAN LETTER KAPH 108EB ; [.48EC.0020.0002] # HATRAN LETTER LAMEDH 108EC ; [.48ED.0020.0002] # HATRAN LETTER MEM 108ED ; [.48EE.0020.0002] # HATRAN LETTER NUN 108EE ; [.48EF.0020.0002] # HATRAN LETTER SAMEKH 108EF ; [.48F0.0020.0002] # HATRAN LETTER AYN 108F0 ; [.48F1.0020.0002] # HATRAN LETTER PE 108F1 ; [.48F2.0020.0002] # HATRAN LETTER SADHE 108F2 ; [.48F3.0020.0002] # HATRAN LETTER QOPH 108F4 ; [.48F4.0020.0002] # HATRAN LETTER SHIN 108F5 ; [.48F5.0020.0002] # HATRAN LETTER TAW 10840 ; [.48F6.0020.0002] # IMPERIAL ARAMAIC LETTER ALEPH 10841 ; [.48F7.0020.0002] # IMPERIAL ARAMAIC LETTER BETH 10842 ; [.48F8.0020.0002] # IMPERIAL ARAMAIC LETTER GIMEL 10843 ; [.48F9.0020.0002] # IMPERIAL ARAMAIC LETTER DALETH 10844 ; [.48FA.0020.0002] # IMPERIAL ARAMAIC LETTER HE 10845 ; [.48FB.0020.0002] # IMPERIAL ARAMAIC LETTER WAW 10846 ; [.48FC.0020.0002] # IMPERIAL ARAMAIC LETTER ZAYIN 10847 ; [.48FD.0020.0002] # IMPERIAL ARAMAIC LETTER HETH 10848 ; [.48FE.0020.0002] # IMPERIAL ARAMAIC LETTER TETH 10849 ; [.48FF.0020.0002] # IMPERIAL ARAMAIC LETTER YODH 1084A ; [.4900.0020.0002] # IMPERIAL ARAMAIC LETTER KAPH 1084B ; [.4901.0020.0002] # IMPERIAL ARAMAIC LETTER LAMEDH 1084C ; [.4902.0020.0002] # IMPERIAL ARAMAIC LETTER MEM 1084D ; [.4903.0020.0002] # IMPERIAL ARAMAIC LETTER NUN 1084E ; [.4904.0020.0002] # IMPERIAL ARAMAIC LETTER SAMEKH 1084F ; [.4905.0020.0002] # IMPERIAL ARAMAIC LETTER AYIN 10850 ; [.4906.0020.0002] # IMPERIAL ARAMAIC LETTER PE 10851 ; [.4907.0020.0002] # IMPERIAL ARAMAIC LETTER SADHE 10852 ; [.4908.0020.0002] # IMPERIAL ARAMAIC LETTER QOPH 10853 ; [.4909.0020.0002] # IMPERIAL ARAMAIC LETTER RESH 10854 ; [.490A.0020.0002] # IMPERIAL ARAMAIC LETTER SHIN 10855 ; [.490B.0020.0002] # IMPERIAL ARAMAIC LETTER TAW 10B40 ; [.490C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ALEPH 10B41 ; [.490D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER BETH 10B42 ; [.490E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER GIMEL 10B43 ; [.490F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER DALETH 10B44 ; [.4910.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HE 10B45 ; [.4911.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER WAW 10B46 ; [.4912.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ZAYIN 10B47 ; [.4913.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HETH 10B48 ; [.4914.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TETH 10B49 ; [.4915.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER YODH 10B4A ; [.4916.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER KAPH 10B4B ; [.4917.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER LAMEDH 10B4C ; [.4918.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER MEM 10B4D ; [.4919.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER NUN 10B4E ; [.491A.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SAMEKH 10B4F ; [.491B.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER AYIN 10B50 ; [.491C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER PE 10B51 ; [.491D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SADHE 10B52 ; [.491E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER QOPH 10B53 ; [.491F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER RESH 10B54 ; [.4920.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SHIN 10B55 ; [.4921.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TAW 10B60 ; [.4922.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ALEPH 10B61 ; [.4923.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER BETH 10B62 ; [.4924.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER GIMEL 10B63 ; [.4925.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER DALETH 10B64 ; [.4926.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HE 10B65 ; [.4927.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH 10B66 ; [.4928.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ZAYIN 10B67 ; [.4929.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HETH 10B68 ; [.492A.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TETH 10B69 ; [.492B.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER YODH 10B6A ; [.492C.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER KAPH 10B6B ; [.492D.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER LAMEDH 10B6C ; [.492E.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH 10B6D ; [.492F.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER NUN 10B6E ; [.4930.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SAMEKH 10B6F ; [.4931.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER PE 10B70 ; [.4932.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SADHE 10B71 ; [.4933.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SHIN 10B72 ; [.4934.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TAW 10B80 ; [.4935.0020.0002] # PSALTER PAHLAVI LETTER ALEPH 10B81 ; [.4936.0020.0002] # PSALTER PAHLAVI LETTER BETH 10B82 ; [.4937.0020.0002] # PSALTER PAHLAVI LETTER GIMEL 10B83 ; [.4938.0020.0002] # PSALTER PAHLAVI LETTER DALETH 10B84 ; [.4939.0020.0002] # PSALTER PAHLAVI LETTER HE 10B85 ; [.493A.0020.0002] # PSALTER PAHLAVI LETTER WAW-AYIN-RESH 10B86 ; [.493B.0020.0002] # PSALTER PAHLAVI LETTER ZAYIN 10B87 ; [.493C.0020.0002] # PSALTER PAHLAVI LETTER HETH 10B88 ; [.493D.0020.0002] # PSALTER PAHLAVI LETTER YODH 10B89 ; [.493E.0020.0002] # PSALTER PAHLAVI LETTER KAPH 10B8A ; [.493F.0020.0002] # PSALTER PAHLAVI LETTER LAMEDH 10B8B ; [.4940.0020.0002] # PSALTER PAHLAVI LETTER MEM-QOPH 10B8C ; [.4941.0020.0002] # PSALTER PAHLAVI LETTER NUN 10B8D ; [.4942.0020.0002] # PSALTER PAHLAVI LETTER SAMEKH 10B8E ; [.4943.0020.0002] # PSALTER PAHLAVI LETTER PE 10B8F ; [.4944.0020.0002] # PSALTER PAHLAVI LETTER SADHE 10B90 ; [.4945.0020.0002] # PSALTER PAHLAVI LETTER SHIN 10B91 ; [.4946.0020.0002] # PSALTER PAHLAVI LETTER TAW 10AC0 ; [.4947.0020.0002] # MANICHAEAN LETTER ALEPH 10AC1 ; [.4948.0020.0002] # MANICHAEAN LETTER BETH 10AC2 ; [.4949.0020.0002] # MANICHAEAN LETTER BHETH 10AC3 ; [.494A.0020.0002] # MANICHAEAN LETTER GIMEL 10AC4 ; [.494B.0020.0002] # MANICHAEAN LETTER GHIMEL 10AC5 ; [.494C.0020.0002] # MANICHAEAN LETTER DALETH 10AC6 ; [.494D.0020.0002] # MANICHAEAN LETTER HE 10AC7 ; [.494E.0020.0002] # MANICHAEAN LETTER WAW 10AC8 ; [.494E.0020.0004][.0000.0111.0004] # MANICHAEAN SIGN UD 10AC9 ; [.494F.0020.0002] # MANICHAEAN LETTER ZAYIN 10ACA ; [.4950.0020.0002] # MANICHAEAN LETTER ZHAYIN 10ACB ; [.4951.0020.0002] # MANICHAEAN LETTER JAYIN 10ACC ; [.4952.0020.0002] # MANICHAEAN LETTER JHAYIN 10ACD ; [.4953.0020.0002] # MANICHAEAN LETTER HETH 10ACE ; [.4954.0020.0002] # MANICHAEAN LETTER TETH 10ACF ; [.4955.0020.0002] # MANICHAEAN LETTER YODH 10AD0 ; [.4956.0020.0002] # MANICHAEAN LETTER KAPH 10AD1 ; [.4957.0020.0002] # MANICHAEAN LETTER XAPH 10AD2 ; [.4958.0020.0002] # MANICHAEAN LETTER KHAPH 10AD3 ; [.4959.0020.0002] # MANICHAEAN LETTER LAMEDH 10AD4 ; [.495A.0020.0002] # MANICHAEAN LETTER DHAMEDH 10AD5 ; [.495B.0020.0002] # MANICHAEAN LETTER THAMEDH 10AD6 ; [.495C.0020.0002] # MANICHAEAN LETTER MEM 10AD7 ; [.495D.0020.0002] # MANICHAEAN LETTER NUN 10AD8 ; [.495E.0020.0002] # MANICHAEAN LETTER SAMEKH 10AD9 ; [.495F.0020.0002] # MANICHAEAN LETTER AYIN 10ADA ; [.4960.0020.0002] # MANICHAEAN LETTER AAYIN 10ADB ; [.4961.0020.0002] # MANICHAEAN LETTER PE 10ADC ; [.4962.0020.0002] # MANICHAEAN LETTER FE 10ADD ; [.4963.0020.0002] # MANICHAEAN LETTER SADHE 10ADE ; [.4964.0020.0002] # MANICHAEAN LETTER QOPH 10ADF ; [.4965.0020.0002] # MANICHAEAN LETTER XOPH 10AE0 ; [.4966.0020.0002] # MANICHAEAN LETTER QHOPH 10AE1 ; [.4967.0020.0002] # MANICHAEAN LETTER RESH 10AE2 ; [.4968.0020.0002] # MANICHAEAN LETTER SHIN 10AE3 ; [.4969.0020.0002] # MANICHAEAN LETTER SSHIN 10AE4 ; [.496A.0020.0002] # MANICHAEAN LETTER TAW 10380 ; [.496B.0020.0002] # UGARITIC LETTER ALPA 10381 ; [.496C.0020.0002] # UGARITIC LETTER BETA 10382 ; [.496D.0020.0002] # UGARITIC LETTER GAMLA 10383 ; [.496E.0020.0002] # UGARITIC LETTER KHA 10384 ; [.496F.0020.0002] # UGARITIC LETTER DELTA 10385 ; [.4970.0020.0002] # UGARITIC LETTER HO 10386 ; [.4971.0020.0002] # UGARITIC LETTER WO 10387 ; [.4972.0020.0002] # UGARITIC LETTER ZETA 10388 ; [.4973.0020.0002] # UGARITIC LETTER HOTA 10389 ; [.4974.0020.0002] # UGARITIC LETTER TET 1038A ; [.4975.0020.0002] # UGARITIC LETTER YOD 1038B ; [.4976.0020.0002] # UGARITIC LETTER KAF 1038C ; [.4977.0020.0002] # UGARITIC LETTER SHIN 1038D ; [.4978.0020.0002] # UGARITIC LETTER LAMDA 1038E ; [.4979.0020.0002] # UGARITIC LETTER MEM 1038F ; [.497A.0020.0002] # UGARITIC LETTER DHAL 10390 ; [.497B.0020.0002] # UGARITIC LETTER NUN 10391 ; [.497C.0020.0002] # UGARITIC LETTER ZU 10392 ; [.497D.0020.0002] # UGARITIC LETTER SAMKA 10393 ; [.497E.0020.0002] # UGARITIC LETTER AIN 10394 ; [.497F.0020.0002] # UGARITIC LETTER PU 10395 ; [.4980.0020.0002] # UGARITIC LETTER SADE 10396 ; [.4981.0020.0002] # UGARITIC LETTER QOPA 10397 ; [.4982.0020.0002] # UGARITIC LETTER RASHA 10398 ; [.4983.0020.0002] # UGARITIC LETTER THANNA 10399 ; [.4984.0020.0002] # UGARITIC LETTER GHAIN 1039A ; [.4985.0020.0002] # UGARITIC LETTER TO 1039B ; [.4986.0020.0002] # UGARITIC LETTER I 1039C ; [.4987.0020.0002] # UGARITIC LETTER U 1039D ; [.4988.0020.0002] # UGARITIC LETTER SSU 103A0 ; [.4989.0020.0002] # OLD PERSIAN SIGN A 103A1 ; [.498A.0020.0002] # OLD PERSIAN SIGN I 103A2 ; [.498B.0020.0002] # OLD PERSIAN SIGN U 103A3 ; [.498C.0020.0002] # OLD PERSIAN SIGN KA 103A4 ; [.498D.0020.0002] # OLD PERSIAN SIGN KU 103A5 ; [.498E.0020.0002] # OLD PERSIAN SIGN GA 103A6 ; [.498F.0020.0002] # OLD PERSIAN SIGN GU 103A7 ; [.4990.0020.0002] # OLD PERSIAN SIGN XA 103A8 ; [.4991.0020.0002] # OLD PERSIAN SIGN CA 103A9 ; [.4992.0020.0002] # OLD PERSIAN SIGN JA 103AA ; [.4993.0020.0002] # OLD PERSIAN SIGN JI 103AB ; [.4994.0020.0002] # OLD PERSIAN SIGN TA 103AC ; [.4995.0020.0002] # OLD PERSIAN SIGN TU 103AD ; [.4996.0020.0002] # OLD PERSIAN SIGN DA 103AE ; [.4997.0020.0002] # OLD PERSIAN SIGN DI 103AF ; [.4998.0020.0002] # OLD PERSIAN SIGN DU 103B0 ; [.4999.0020.0002] # OLD PERSIAN SIGN THA 103B1 ; [.499A.0020.0002] # OLD PERSIAN SIGN PA 103B2 ; [.499B.0020.0002] # OLD PERSIAN SIGN BA 103B3 ; [.499C.0020.0002] # OLD PERSIAN SIGN FA 103B4 ; [.499D.0020.0002] # OLD PERSIAN SIGN NA 103B5 ; [.499E.0020.0002] # OLD PERSIAN SIGN NU 103B6 ; [.499F.0020.0002] # OLD PERSIAN SIGN MA 103B7 ; [.49A0.0020.0002] # OLD PERSIAN SIGN MI 103B8 ; [.49A1.0020.0002] # OLD PERSIAN SIGN MU 103B9 ; [.49A2.0020.0002] # OLD PERSIAN SIGN YA 103BA ; [.49A3.0020.0002] # OLD PERSIAN SIGN VA 103BB ; [.49A4.0020.0002] # OLD PERSIAN SIGN VI 103BC ; [.49A5.0020.0002] # OLD PERSIAN SIGN RA 103BD ; [.49A6.0020.0002] # OLD PERSIAN SIGN RU 103BE ; [.49A7.0020.0002] # OLD PERSIAN SIGN LA 103BF ; [.49A8.0020.0002] # OLD PERSIAN SIGN SA 103C0 ; [.49A9.0020.0002] # OLD PERSIAN SIGN ZA 103C1 ; [.49AA.0020.0002] # OLD PERSIAN SIGN SHA 103C2 ; [.49AB.0020.0002] # OLD PERSIAN SIGN SSA 103C3 ; [.49AC.0020.0002] # OLD PERSIAN SIGN HA 103C8 ; [.49AD.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA 103C9 ; [.49AE.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA-2 103CA ; [.49AF.0020.0002] # OLD PERSIAN SIGN AURAMAZDAAHA 103CB ; [.49B0.0020.0002] # OLD PERSIAN SIGN XSHAAYATHIYA 103CC ; [.49B1.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH 103CD ; [.49B2.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH-2 103CE ; [.49B3.0020.0002] # OLD PERSIAN SIGN BAGA 103CF ; [.49B4.0020.0002] # OLD PERSIAN SIGN BUUMISH 12000 ; [.49B5.0020.0002] # CUNEIFORM SIGN A 12001 ; [.49B6.0020.0002] # CUNEIFORM SIGN A TIMES A 12002 ; [.49B7.0020.0002] # CUNEIFORM SIGN A TIMES BAD 12003 ; [.49B8.0020.0002] # CUNEIFORM SIGN A TIMES GAN2 TENU 12004 ; [.49B9.0020.0002] # CUNEIFORM SIGN A TIMES HA 12005 ; [.49BA.0020.0002] # CUNEIFORM SIGN A TIMES IGI 12006 ; [.49BB.0020.0002] # CUNEIFORM SIGN A TIMES LAGAR GUNU 12007 ; [.49BC.0020.0002] # CUNEIFORM SIGN A TIMES MUSH 12008 ; [.49BD.0020.0002] # CUNEIFORM SIGN A TIMES SAG 12009 ; [.49BE.0020.0002] # CUNEIFORM SIGN A2 1200A ; [.49BF.0020.0002] # CUNEIFORM SIGN AB 1200B ; [.49C0.0020.0002] # CUNEIFORM SIGN AB TIMES ASH2 1200C ; [.49C1.0020.0002] # CUNEIFORM SIGN AB TIMES DUN3 GUNU 1200D ; [.49C2.0020.0002] # CUNEIFORM SIGN AB TIMES GAL 1200E ; [.49C3.0020.0002] # CUNEIFORM SIGN AB TIMES GAN2 TENU 1200F ; [.49C4.0020.0002] # CUNEIFORM SIGN AB TIMES HA 12010 ; [.49C5.0020.0002] # CUNEIFORM SIGN AB TIMES IGI GUNU 12011 ; [.49C6.0020.0002] # CUNEIFORM SIGN AB TIMES IMIN 12012 ; [.49C7.0020.0002] # CUNEIFORM SIGN AB TIMES LAGAB 12013 ; [.49C8.0020.0002] # CUNEIFORM SIGN AB TIMES SHESH 12014 ; [.49C9.0020.0002] # CUNEIFORM SIGN AB TIMES U PLUS U PLUS U 12015 ; [.49CA.0020.0002] # CUNEIFORM SIGN AB GUNU 12016 ; [.49CB.0020.0002] # CUNEIFORM SIGN AB2 12017 ; [.49CC.0020.0002] # CUNEIFORM SIGN AB2 TIMES BALAG 12018 ; [.49CD.0020.0002] # CUNEIFORM SIGN AB2 TIMES GAN2 TENU 12019 ; [.49CE.0020.0002] # CUNEIFORM SIGN AB2 TIMES ME PLUS EN 1201A ; [.49CF.0020.0002] # CUNEIFORM SIGN AB2 TIMES SHA3 1201B ; [.49D0.0020.0002] # CUNEIFORM SIGN AB2 TIMES TAK4 1201C ; [.49D1.0020.0002] # CUNEIFORM SIGN AD 1201D ; [.49D2.0020.0002] # CUNEIFORM SIGN AK 1201E ; [.49D3.0020.0002] # CUNEIFORM SIGN AK TIMES ERIN2 1201F ; [.49D4.0020.0002] # CUNEIFORM SIGN AK TIMES SHITA PLUS GISH 12020 ; [.49D5.0020.0002] # CUNEIFORM SIGN AL 12021 ; [.49D6.0020.0002] # CUNEIFORM SIGN AL TIMES AL 12022 ; [.49D7.0020.0002] # CUNEIFORM SIGN AL TIMES DIM2 12023 ; [.49D8.0020.0002] # CUNEIFORM SIGN AL TIMES GISH 12024 ; [.49D9.0020.0002] # CUNEIFORM SIGN AL TIMES HA 12025 ; [.49DA.0020.0002] # CUNEIFORM SIGN AL TIMES KAD3 12026 ; [.49DB.0020.0002] # CUNEIFORM SIGN AL TIMES KI 12027 ; [.49DC.0020.0002] # CUNEIFORM SIGN AL TIMES SHE 12028 ; [.49DD.0020.0002] # CUNEIFORM SIGN AL TIMES USH 12029 ; [.49DE.0020.0002] # CUNEIFORM SIGN ALAN 1202A ; [.49DF.0020.0002] # CUNEIFORM SIGN ALEPH 1202B ; [.49E0.0020.0002] # CUNEIFORM SIGN AMAR 1202C ; [.49E1.0020.0002] # CUNEIFORM SIGN AMAR TIMES SHE 1202D ; [.49E2.0020.0002] # CUNEIFORM SIGN AN 1202E ; [.49E3.0020.0002] # CUNEIFORM SIGN AN OVER AN 1202F ; [.49E4.0020.0002] # CUNEIFORM SIGN AN THREE TIMES 12030 ; [.49E5.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA 12031 ; [.49E6.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA SQUARED 12032 ; [.49E7.0020.0002] # CUNEIFORM SIGN ANSHE 12033 ; [.49E8.0020.0002] # CUNEIFORM SIGN APIN 12034 ; [.49E9.0020.0002] # CUNEIFORM SIGN ARAD 12035 ; [.49EA.0020.0002] # CUNEIFORM SIGN ARAD TIMES KUR 12036 ; [.49EB.0020.0002] # CUNEIFORM SIGN ARKAB 12037 ; [.49EC.0020.0002] # CUNEIFORM SIGN ASAL2 12038 ; [.49ED.0020.0002] # CUNEIFORM SIGN ASH 12039 ; [.49EE.0020.0002] # CUNEIFORM SIGN ASH ZIDA TENU 1203A ; [.49EF.0020.0002] # CUNEIFORM SIGN ASH KABA TENU 1203B ; [.49F0.0020.0002] # CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP 1203C ; [.49F1.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH 1203D ; [.49F2.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH 1203E ; [.49F3.0020.0002] # CUNEIFORM SIGN ASH2 1203F ; [.49F4.0020.0002] # CUNEIFORM SIGN ASHGAB 12040 ; [.49F5.0020.0002] # CUNEIFORM SIGN BA 12041 ; [.49F6.0020.0002] # CUNEIFORM SIGN BAD 12042 ; [.49F7.0020.0002] # CUNEIFORM SIGN BAG3 12043 ; [.49F8.0020.0002] # CUNEIFORM SIGN BAHAR2 12044 ; [.49F9.0020.0002] # CUNEIFORM SIGN BAL 12045 ; [.49FA.0020.0002] # CUNEIFORM SIGN BAL OVER BAL 12046 ; [.49FB.0020.0002] # CUNEIFORM SIGN BALAG 12047 ; [.49FC.0020.0002] # CUNEIFORM SIGN BAR 12048 ; [.49FD.0020.0002] # CUNEIFORM SIGN BARA2 12049 ; [.49FE.0020.0002] # CUNEIFORM SIGN BI 1204A ; [.49FF.0020.0002] # CUNEIFORM SIGN BI TIMES A 1204B ; [.4A00.0020.0002] # CUNEIFORM SIGN BI TIMES GAR 1204C ; [.4A01.0020.0002] # CUNEIFORM SIGN BI TIMES IGI GUNU 1204D ; [.4A02.0020.0002] # CUNEIFORM SIGN BU 1204E ; [.4A03.0020.0002] # CUNEIFORM SIGN BU OVER BU AB 1204F ; [.4A04.0020.0002] # CUNEIFORM SIGN BU OVER BU UN 12050 ; [.4A05.0020.0002] # CUNEIFORM SIGN BU CROSSING BU 12051 ; [.4A06.0020.0002] # CUNEIFORM SIGN BULUG 12052 ; [.4A07.0020.0002] # CUNEIFORM SIGN BULUG OVER BULUG 12053 ; [.4A08.0020.0002] # CUNEIFORM SIGN BUR 12054 ; [.4A09.0020.0002] # CUNEIFORM SIGN BUR2 12055 ; [.4A0A.0020.0002] # CUNEIFORM SIGN DA 12056 ; [.4A0B.0020.0002] # CUNEIFORM SIGN DAG 12057 ; [.4A0C.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH 12058 ; [.4A0D.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES AMAR 12059 ; [.4A0E.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BALAG 1205A ; [.4A0F.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BI 1205B ; [.4A10.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA 1205C ; [.4A11.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH 1205D ; [.4A12.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GI 1205E ; [.4A13.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GIR2 1205F ; [.4A14.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GUD 12060 ; [.4A15.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES HA 12061 ; [.4A16.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR 12062 ; [.4A17.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU 12063 ; [.4A18.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES KAK 12064 ; [.4A19.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LA 12065 ; [.4A1A.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU 12066 ; [.4A1B.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2 12067 ; [.4A1C.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LUM 12068 ; [.4A1D.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES NE 12069 ; [.4A1E.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP 1206A ; [.4A1F.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES SI 1206B ; [.4A20.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES TAK4 1206C ; [.4A21.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2 1206D ; [.4A22.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES USH 1206E ; [.4A23.0020.0002] # CUNEIFORM SIGN DAM 1206F ; [.4A24.0020.0002] # CUNEIFORM SIGN DAR 12070 ; [.4A25.0020.0002] # CUNEIFORM SIGN DARA3 12071 ; [.4A26.0020.0002] # CUNEIFORM SIGN DARA4 12072 ; [.4A27.0020.0002] # CUNEIFORM SIGN DI 12073 ; [.4A28.0020.0002] # CUNEIFORM SIGN DIB 12074 ; [.4A29.0020.0002] # CUNEIFORM SIGN DIM 12075 ; [.4A2A.0020.0002] # CUNEIFORM SIGN DIM TIMES SHE 12076 ; [.4A2B.0020.0002] # CUNEIFORM SIGN DIM2 12077 ; [.4A2C.0020.0002] # CUNEIFORM SIGN DIN 12078 ; [.4A2D.0020.0002] # CUNEIFORM SIGN DIN KASKAL U GUNU DISH 12079 ; [.4A2E.0020.0002] # CUNEIFORM SIGN DISH 1207A ; [.4A2F.0020.0002] # CUNEIFORM SIGN DU 1207B ; [.4A30.0020.0002] # CUNEIFORM SIGN DU OVER DU 1207C ; [.4A31.0020.0002] # CUNEIFORM SIGN DU GUNU 1207D ; [.4A32.0020.0002] # CUNEIFORM SIGN DU SHESHIG 1207E ; [.4A33.0020.0002] # CUNEIFORM SIGN DUB 1207F ; [.4A34.0020.0002] # CUNEIFORM SIGN DUB TIMES ESH2 12080 ; [.4A35.0020.0002] # CUNEIFORM SIGN DUB2 12081 ; [.4A36.0020.0002] # CUNEIFORM SIGN DUG 12082 ; [.4A37.0020.0002] # CUNEIFORM SIGN DUGUD 12083 ; [.4A38.0020.0002] # CUNEIFORM SIGN DUH 12084 ; [.4A39.0020.0002] # CUNEIFORM SIGN DUN 12085 ; [.4A3A.0020.0002] # CUNEIFORM SIGN DUN3 12086 ; [.4A3B.0020.0002] # CUNEIFORM SIGN DUN3 GUNU 12087 ; [.4A3C.0020.0002] # CUNEIFORM SIGN DUN3 GUNU GUNU 12088 ; [.4A3D.0020.0002] # CUNEIFORM SIGN DUN4 12089 ; [.4A3E.0020.0002] # CUNEIFORM SIGN DUR2 1208A ; [.4A3F.0020.0002] # CUNEIFORM SIGN E 1208B ; [.4A40.0020.0002] # CUNEIFORM SIGN E TIMES PAP 1208C ; [.4A41.0020.0002] # CUNEIFORM SIGN E OVER E NUN OVER NUN 1208D ; [.4A42.0020.0002] # CUNEIFORM SIGN E2 1208E ; [.4A43.0020.0002] # CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA 1208F ; [.4A44.0020.0002] # CUNEIFORM SIGN E2 TIMES GAR 12090 ; [.4A45.0020.0002] # CUNEIFORM SIGN E2 TIMES MI 12091 ; [.4A46.0020.0002] # CUNEIFORM SIGN E2 TIMES SAL 12092 ; [.4A47.0020.0002] # CUNEIFORM SIGN E2 TIMES SHE 12093 ; [.4A48.0020.0002] # CUNEIFORM SIGN E2 TIMES U 12094 ; [.4A49.0020.0002] # CUNEIFORM SIGN EDIN 12095 ; [.4A4A.0020.0002] # CUNEIFORM SIGN EGIR 12096 ; [.4A4B.0020.0002] # CUNEIFORM SIGN EL 12097 ; [.4A4C.0020.0002] # CUNEIFORM SIGN EN 12098 ; [.4A4D.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 12099 ; [.4A4E.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 TENU 1209A ; [.4A4F.0020.0002] # CUNEIFORM SIGN EN TIMES ME 1209B ; [.4A50.0020.0002] # CUNEIFORM SIGN EN CROSSING EN 1209C ; [.4A51.0020.0002] # CUNEIFORM SIGN EN OPPOSING EN 1209D ; [.4A52.0020.0002] # CUNEIFORM SIGN EN SQUARED 1209E ; [.4A53.0020.0002] # CUNEIFORM SIGN EREN 1209F ; [.4A54.0020.0002] # CUNEIFORM SIGN ERIN2 120A0 ; [.4A55.0020.0002] # CUNEIFORM SIGN ESH2 120A1 ; [.4A56.0020.0002] # CUNEIFORM SIGN EZEN 120A2 ; [.4A57.0020.0002] # CUNEIFORM SIGN EZEN TIMES A 120A3 ; [.4A58.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL 120A4 ; [.4A59.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL 120A5 ; [.4A5A.0020.0002] # CUNEIFORM SIGN EZEN TIMES AN 120A6 ; [.4A5B.0020.0002] # CUNEIFORM SIGN EZEN TIMES BAD 120A7 ; [.4A5C.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU 120A8 ; [.4A5D.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU 120A9 ; [.4A5E.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA 120AA ; [.4A5F.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA GUNU 120AB ; [.4A60.0020.0002] # CUNEIFORM SIGN EZEN TIMES IGI GUNU 120AC ; [.4A61.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL 120AD ; [.4A62.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED 120AE ; [.4A63.0020.0002] # CUNEIFORM SIGN EZEN TIMES KU3 120AF ; [.4A64.0020.0002] # CUNEIFORM SIGN EZEN TIMES LA 120B0 ; [.4A65.0020.0002] # CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL 120B1 ; [.4A66.0020.0002] # CUNEIFORM SIGN EZEN TIMES LI 120B2 ; [.4A67.0020.0002] # CUNEIFORM SIGN EZEN TIMES LU 120B3 ; [.4A68.0020.0002] # CUNEIFORM SIGN EZEN TIMES U2 120B4 ; [.4A69.0020.0002] # CUNEIFORM SIGN EZEN TIMES UD 120B5 ; [.4A6A.0020.0002] # CUNEIFORM SIGN GA 120B6 ; [.4A6B.0020.0002] # CUNEIFORM SIGN GA GUNU 120B7 ; [.4A6C.0020.0002] # CUNEIFORM SIGN GA2 120B8 ; [.4A6D.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA 120B9 ; [.4A6E.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS HA 120BA ; [.4A6F.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS IGI 120BB ; [.4A70.0020.0002] # CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB 120BC ; [.4A71.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN 120BD ; [.4A72.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH 120BE ; [.4A73.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL 120BF ; [.4A74.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAD 120C0 ; [.4A75.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAR PLUS RA 120C1 ; [.4A76.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR 120C2 ; [.4A77.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR PLUS RA 120C3 ; [.4A78.0020.0002] # CUNEIFORM SIGN GA2 TIMES DA 120C4 ; [.4A79.0020.0002] # CUNEIFORM SIGN GA2 TIMES DI 120C5 ; [.4A7A.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE 120C6 ; [.4A7B.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUB 120C7 ; [.4A7C.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL 120C8 ; [.4A7D.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL PLUS LA 120C9 ; [.4A7E.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN 120CA ; [.4A7F.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU 120CB ; [.4A80.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAN2 TENU 120CC ; [.4A81.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR 120CD ; [.4A82.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI 120CE ; [.4A83.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 120CF ; [.4A84.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 PLUS A 120D0 ; [.4A85.0020.0002] # CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU 120D1 ; [.4A86.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2 120D2 ; [.4A87.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL 120D3 ; [.4A88.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL PLUS LA 120D4 ; [.4A89.0020.0002] # CUNEIFORM SIGN GA2 TIMES HI PLUS LI 120D5 ; [.4A8A.0020.0002] # CUNEIFORM SIGN GA2 TIMES HUB2 120D6 ; [.4A8B.0020.0002] # CUNEIFORM SIGN GA2 TIMES IGI GUNU 120D7 ; [.4A8C.0020.0002] # CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH 120D8 ; [.4A8D.0020.0002] # CUNEIFORM SIGN GA2 TIMES KAK 120D9 ; [.4A8E.0020.0002] # CUNEIFORM SIGN GA2 TIMES KASKAL 120DA ; [.4A8F.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID 120DB ; [.4A90.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID PLUS LAL 120DC ; [.4A91.0020.0002] # CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN 120DD ; [.4A92.0020.0002] # CUNEIFORM SIGN GA2 TIMES LA 120DE ; [.4A93.0020.0002] # CUNEIFORM SIGN GA2 TIMES ME PLUS EN 120DF ; [.4A94.0020.0002] # CUNEIFORM SIGN GA2 TIMES MI 120E0 ; [.4A95.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN 120E1 ; [.4A96.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN OVER NUN 120E2 ; [.4A97.0020.0002] # CUNEIFORM SIGN GA2 TIMES PA 120E3 ; [.4A98.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAL 120E4 ; [.4A99.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAR 120E5 ; [.4A9A.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE 120E6 ; [.4A9B.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR 120E7 ; [.4A9C.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHID 120E8 ; [.4A9D.0020.0002] # CUNEIFORM SIGN GA2 TIMES SUM 120E9 ; [.4A9E.0020.0002] # CUNEIFORM SIGN GA2 TIMES TAK4 120EA ; [.4A9F.0020.0002] # CUNEIFORM SIGN GA2 TIMES U 120EB ; [.4AA0.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD 120EC ; [.4AA1.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD PLUS DU 120ED ; [.4AA2.0020.0002] # CUNEIFORM SIGN GA2 OVER GA2 120EE ; [.4AA3.0020.0002] # CUNEIFORM SIGN GABA 120EF ; [.4AA4.0020.0002] # CUNEIFORM SIGN GABA CROSSING GABA 120F0 ; [.4AA5.0020.0002] # CUNEIFORM SIGN GAD 120F1 ; [.4AA6.0020.0002] # CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR 120F2 ; [.4AA7.0020.0002] # CUNEIFORM SIGN GAL 120F3 ; [.4AA8.0020.0002] # CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR 120F4 ; [.4AA9.0020.0002] # CUNEIFORM SIGN GALAM 120F5 ; [.4AAA.0020.0002] # CUNEIFORM SIGN GAM 120F6 ; [.4AAB.0020.0002] # CUNEIFORM SIGN GAN 120F7 ; [.4AAC.0020.0002] # CUNEIFORM SIGN GAN2 120F8 ; [.4AAD.0020.0002] # CUNEIFORM SIGN GAN2 TENU 120F9 ; [.4AAE.0020.0002] # CUNEIFORM SIGN GAN2 OVER GAN2 120FA ; [.4AAF.0020.0002] # CUNEIFORM SIGN GAN2 CROSSING GAN2 120FB ; [.4AB0.0020.0002] # CUNEIFORM SIGN GAR 120FC ; [.4AB1.0020.0002] # CUNEIFORM SIGN GAR3 120FD ; [.4AB2.0020.0002] # CUNEIFORM SIGN GASHAN 120FE ; [.4AB3.0020.0002] # CUNEIFORM SIGN GESHTIN 120FF ; [.4AB4.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES KUR 12100 ; [.4AB5.0020.0002] # CUNEIFORM SIGN GI 12101 ; [.4AB6.0020.0002] # CUNEIFORM SIGN GI TIMES E 12102 ; [.4AB7.0020.0002] # CUNEIFORM SIGN GI TIMES U 12103 ; [.4AB8.0020.0002] # CUNEIFORM SIGN GI CROSSING GI 12104 ; [.4AB9.0020.0002] # CUNEIFORM SIGN GI4 12105 ; [.4ABA.0020.0002] # CUNEIFORM SIGN GI4 OVER GI4 12106 ; [.4ABB.0020.0002] # CUNEIFORM SIGN GI4 CROSSING GI4 12107 ; [.4ABC.0020.0002] # CUNEIFORM SIGN GIDIM 12108 ; [.4ABD.0020.0002] # CUNEIFORM SIGN GIR2 12109 ; [.4ABE.0020.0002] # CUNEIFORM SIGN GIR2 GUNU 1210A ; [.4ABF.0020.0002] # CUNEIFORM SIGN GIR3 1210B ; [.4AC0.0020.0002] # CUNEIFORM SIGN GIR3 TIMES A PLUS IGI 1210C ; [.4AC1.0020.0002] # CUNEIFORM SIGN GIR3 TIMES GAN2 TENU 1210D ; [.4AC2.0020.0002] # CUNEIFORM SIGN GIR3 TIMES IGI 1210E ; [.4AC3.0020.0002] # CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI 1210F ; [.4AC4.0020.0002] # CUNEIFORM SIGN GIR3 TIMES PA 12110 ; [.4AC5.0020.0002] # CUNEIFORM SIGN GISAL 12111 ; [.4AC6.0020.0002] # CUNEIFORM SIGN GISH 12112 ; [.4AC7.0020.0002] # CUNEIFORM SIGN GISH CROSSING GISH 12113 ; [.4AC8.0020.0002] # CUNEIFORM SIGN GISH TIMES BAD 12114 ; [.4AC9.0020.0002] # CUNEIFORM SIGN GISH TIMES TAK4 12115 ; [.4ACA.0020.0002] # CUNEIFORM SIGN GISH TENU 12116 ; [.4ACB.0020.0002] # CUNEIFORM SIGN GU 12117 ; [.4ACC.0020.0002] # CUNEIFORM SIGN GU CROSSING GU 12118 ; [.4ACD.0020.0002] # CUNEIFORM SIGN GU2 12119 ; [.4ACE.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK 1211A ; [.4ACF.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU 1211B ; [.4AD0.0020.0002] # CUNEIFORM SIGN GU2 TIMES NUN 1211C ; [.4AD1.0020.0002] # CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2 1211D ; [.4AD2.0020.0002] # CUNEIFORM SIGN GU2 GUNU 1211E ; [.4AD3.0020.0002] # CUNEIFORM SIGN GUD 1211F ; [.4AD4.0020.0002] # CUNEIFORM SIGN GUD TIMES A PLUS KUR 12120 ; [.4AD5.0020.0002] # CUNEIFORM SIGN GUD TIMES KUR 12121 ; [.4AD6.0020.0002] # CUNEIFORM SIGN GUD OVER GUD LUGAL 12122 ; [.4AD7.0020.0002] # CUNEIFORM SIGN GUL 12123 ; [.4AD8.0020.0002] # CUNEIFORM SIGN GUM 12124 ; [.4AD9.0020.0002] # CUNEIFORM SIGN GUM TIMES SHE 12125 ; [.4ADA.0020.0002] # CUNEIFORM SIGN GUR 12126 ; [.4ADB.0020.0002] # CUNEIFORM SIGN GUR7 12127 ; [.4ADC.0020.0002] # CUNEIFORM SIGN GURUN 12128 ; [.4ADD.0020.0002] # CUNEIFORM SIGN GURUSH 12129 ; [.4ADE.0020.0002] # CUNEIFORM SIGN HA 1212A ; [.4ADF.0020.0002] # CUNEIFORM SIGN HA TENU 1212B ; [.4AE0.0020.0002] # CUNEIFORM SIGN HA GUNU 1212C ; [.4AE1.0020.0002] # CUNEIFORM SIGN HAL 1212D ; [.4AE2.0020.0002] # CUNEIFORM SIGN HI 1212E ; [.4AE3.0020.0002] # CUNEIFORM SIGN HI TIMES ASH 1212F ; [.4AE4.0020.0002] # CUNEIFORM SIGN HI TIMES ASH2 12130 ; [.4AE5.0020.0002] # CUNEIFORM SIGN HI TIMES BAD 12131 ; [.4AE6.0020.0002] # CUNEIFORM SIGN HI TIMES DISH 12132 ; [.4AE7.0020.0002] # CUNEIFORM SIGN HI TIMES GAD 12133 ; [.4AE8.0020.0002] # CUNEIFORM SIGN HI TIMES KIN 12134 ; [.4AE9.0020.0002] # CUNEIFORM SIGN HI TIMES NUN 12135 ; [.4AEA.0020.0002] # CUNEIFORM SIGN HI TIMES SHE 12136 ; [.4AEB.0020.0002] # CUNEIFORM SIGN HI TIMES U 12137 ; [.4AEC.0020.0002] # CUNEIFORM SIGN HU 12138 ; [.4AED.0020.0002] # CUNEIFORM SIGN HUB2 12139 ; [.4AEE.0020.0002] # CUNEIFORM SIGN HUB2 TIMES AN 1213A ; [.4AEF.0020.0002] # CUNEIFORM SIGN HUB2 TIMES HAL 1213B ; [.4AF0.0020.0002] # CUNEIFORM SIGN HUB2 TIMES KASKAL 1213C ; [.4AF1.0020.0002] # CUNEIFORM SIGN HUB2 TIMES LISH 1213D ; [.4AF2.0020.0002] # CUNEIFORM SIGN HUB2 TIMES UD 1213E ; [.4AF3.0020.0002] # CUNEIFORM SIGN HUL2 1213F ; [.4AF4.0020.0002] # CUNEIFORM SIGN I 12140 ; [.4AF5.0020.0002] # CUNEIFORM SIGN I A 12141 ; [.4AF6.0020.0002] # CUNEIFORM SIGN IB 12142 ; [.4AF7.0020.0002] # CUNEIFORM SIGN IDIM 12143 ; [.4AF8.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM BUR 12144 ; [.4AF9.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM SQUARED 12145 ; [.4AFA.0020.0002] # CUNEIFORM SIGN IG 12146 ; [.4AFB.0020.0002] # CUNEIFORM SIGN IGI 12147 ; [.4AFC.0020.0002] # CUNEIFORM SIGN IGI DIB 12148 ; [.4AFD.0020.0002] # CUNEIFORM SIGN IGI RI 12149 ; [.4AFE.0020.0002] # CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD 1214A ; [.4AFF.0020.0002] # CUNEIFORM SIGN IGI GUNU 1214B ; [.4B00.0020.0002] # CUNEIFORM SIGN IL 1214C ; [.4B01.0020.0002] # CUNEIFORM SIGN IL TIMES GAN2 TENU 1214D ; [.4B02.0020.0002] # CUNEIFORM SIGN IL2 1214E ; [.4B03.0020.0002] # CUNEIFORM SIGN IM 1214F ; [.4B04.0020.0002] # CUNEIFORM SIGN IM TIMES TAK4 12150 ; [.4B05.0020.0002] # CUNEIFORM SIGN IM CROSSING IM 12151 ; [.4B06.0020.0002] # CUNEIFORM SIGN IM OPPOSING IM 12152 ; [.4B07.0020.0002] # CUNEIFORM SIGN IM SQUARED 12153 ; [.4B08.0020.0002] # CUNEIFORM SIGN IMIN 12154 ; [.4B09.0020.0002] # CUNEIFORM SIGN IN 12155 ; [.4B0A.0020.0002] # CUNEIFORM SIGN IR 12156 ; [.4B0B.0020.0002] # CUNEIFORM SIGN ISH 12157 ; [.4B0C.0020.0002] # CUNEIFORM SIGN KA 12158 ; [.4B0D.0020.0002] # CUNEIFORM SIGN KA TIMES A 12159 ; [.4B0E.0020.0002] # CUNEIFORM SIGN KA TIMES AD 1215A ; [.4B0F.0020.0002] # CUNEIFORM SIGN KA TIMES AD PLUS KU3 1215B ; [.4B10.0020.0002] # CUNEIFORM SIGN KA TIMES ASH2 1215C ; [.4B11.0020.0002] # CUNEIFORM SIGN KA TIMES BAD 1215D ; [.4B12.0020.0002] # CUNEIFORM SIGN KA TIMES BALAG 1215E ; [.4B13.0020.0002] # CUNEIFORM SIGN KA TIMES BAR 1215F ; [.4B14.0020.0002] # CUNEIFORM SIGN KA TIMES BI 12160 ; [.4B15.0020.0002] # CUNEIFORM SIGN KA TIMES ERIN2 12161 ; [.4B16.0020.0002] # CUNEIFORM SIGN KA TIMES ESH2 12162 ; [.4B17.0020.0002] # CUNEIFORM SIGN KA TIMES GA 12163 ; [.4B18.0020.0002] # CUNEIFORM SIGN KA TIMES GAL 12164 ; [.4B19.0020.0002] # CUNEIFORM SIGN KA TIMES GAN2 TENU 12165 ; [.4B1A.0020.0002] # CUNEIFORM SIGN KA TIMES GAR 12166 ; [.4B1B.0020.0002] # CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A 12167 ; [.4B1C.0020.0002] # CUNEIFORM SIGN KA TIMES GI 12168 ; [.4B1D.0020.0002] # CUNEIFORM SIGN KA TIMES GIR2 12169 ; [.4B1E.0020.0002] # CUNEIFORM SIGN KA TIMES GISH PLUS SAR 1216A ; [.4B1F.0020.0002] # CUNEIFORM SIGN KA TIMES GISH CROSSING GISH 1216B ; [.4B20.0020.0002] # CUNEIFORM SIGN KA TIMES GU 1216C ; [.4B21.0020.0002] # CUNEIFORM SIGN KA TIMES GUR7 1216D ; [.4B22.0020.0002] # CUNEIFORM SIGN KA TIMES IGI 1216E ; [.4B23.0020.0002] # CUNEIFORM SIGN KA TIMES IM 1216F ; [.4B24.0020.0002] # CUNEIFORM SIGN KA TIMES KAK 12170 ; [.4B25.0020.0002] # CUNEIFORM SIGN KA TIMES KI 12171 ; [.4B26.0020.0002] # CUNEIFORM SIGN KA TIMES KID 12172 ; [.4B27.0020.0002] # CUNEIFORM SIGN KA TIMES LI 12173 ; [.4B28.0020.0002] # CUNEIFORM SIGN KA TIMES LU 12174 ; [.4B29.0020.0002] # CUNEIFORM SIGN KA TIMES ME 12175 ; [.4B2A.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS DU 12176 ; [.4B2B.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS GI 12177 ; [.4B2C.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS TE 12178 ; [.4B2D.0020.0002] # CUNEIFORM SIGN KA TIMES MI 12179 ; [.4B2E.0020.0002] # CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ 1217A ; [.4B2F.0020.0002] # CUNEIFORM SIGN KA TIMES NE 1217B ; [.4B30.0020.0002] # CUNEIFORM SIGN KA TIMES NUN 1217C ; [.4B31.0020.0002] # CUNEIFORM SIGN KA TIMES PI 1217D ; [.4B32.0020.0002] # CUNEIFORM SIGN KA TIMES RU 1217E ; [.4B33.0020.0002] # CUNEIFORM SIGN KA TIMES SA 1217F ; [.4B34.0020.0002] # CUNEIFORM SIGN KA TIMES SAR 12180 ; [.4B35.0020.0002] # CUNEIFORM SIGN KA TIMES SHA 12181 ; [.4B36.0020.0002] # CUNEIFORM SIGN KA TIMES SHE 12182 ; [.4B37.0020.0002] # CUNEIFORM SIGN KA TIMES SHID 12183 ; [.4B38.0020.0002] # CUNEIFORM SIGN KA TIMES SHU 12184 ; [.4B39.0020.0002] # CUNEIFORM SIGN KA TIMES SIG 12185 ; [.4B3A.0020.0002] # CUNEIFORM SIGN KA TIMES SUHUR 12186 ; [.4B3B.0020.0002] # CUNEIFORM SIGN KA TIMES TAR 12187 ; [.4B3C.0020.0002] # CUNEIFORM SIGN KA TIMES U 12188 ; [.4B3D.0020.0002] # CUNEIFORM SIGN KA TIMES U2 12189 ; [.4B3E.0020.0002] # CUNEIFORM SIGN KA TIMES UD 1218A ; [.4B3F.0020.0002] # CUNEIFORM SIGN KA TIMES UMUM TIMES PA 1218B ; [.4B40.0020.0002] # CUNEIFORM SIGN KA TIMES USH 1218C ; [.4B41.0020.0002] # CUNEIFORM SIGN KA TIMES ZI 1218D ; [.4B42.0020.0002] # CUNEIFORM SIGN KA2 1218E ; [.4B43.0020.0002] # CUNEIFORM SIGN KA2 CROSSING KA2 1218F ; [.4B44.0020.0002] # CUNEIFORM SIGN KAB 12190 ; [.4B45.0020.0002] # CUNEIFORM SIGN KAD2 12191 ; [.4B46.0020.0002] # CUNEIFORM SIGN KAD3 12192 ; [.4B47.0020.0002] # CUNEIFORM SIGN KAD4 12193 ; [.4B48.0020.0002] # CUNEIFORM SIGN KAD5 12194 ; [.4B49.0020.0002] # CUNEIFORM SIGN KAD5 OVER KAD5 12195 ; [.4B4A.0020.0002] # CUNEIFORM SIGN KAK 12196 ; [.4B4B.0020.0002] # CUNEIFORM SIGN KAK TIMES IGI GUNU 12197 ; [.4B4C.0020.0002] # CUNEIFORM SIGN KAL 12198 ; [.4B4D.0020.0002] # CUNEIFORM SIGN KAL TIMES BAD 12199 ; [.4B4E.0020.0002] # CUNEIFORM SIGN KAL CROSSING KAL 1219A ; [.4B4F.0020.0002] # CUNEIFORM SIGN KAM2 1219B ; [.4B50.0020.0002] # CUNEIFORM SIGN KAM4 1219C ; [.4B51.0020.0002] # CUNEIFORM SIGN KASKAL 1219D ; [.4B52.0020.0002] # CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U 1219E ; [.4B53.0020.0002] # CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U 1219F ; [.4B54.0020.0002] # CUNEIFORM SIGN KESH2 121A0 ; [.4B55.0020.0002] # CUNEIFORM SIGN KI 121A1 ; [.4B56.0020.0002] # CUNEIFORM SIGN KI TIMES BAD 121A2 ; [.4B57.0020.0002] # CUNEIFORM SIGN KI TIMES U 121A3 ; [.4B58.0020.0002] # CUNEIFORM SIGN KI TIMES UD 121A4 ; [.4B59.0020.0002] # CUNEIFORM SIGN KID 121A5 ; [.4B5A.0020.0002] # CUNEIFORM SIGN KIN 121A6 ; [.4B5B.0020.0002] # CUNEIFORM SIGN KISAL 121A7 ; [.4B5C.0020.0002] # CUNEIFORM SIGN KISH 121A8 ; [.4B5D.0020.0002] # CUNEIFORM SIGN KISIM5 121A9 ; [.4B5E.0020.0002] # CUNEIFORM SIGN KISIM5 OVER KISIM5 121AA ; [.4B5F.0020.0002] # CUNEIFORM SIGN KU 121AB ; [.4B60.0020.0002] # CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2 121AC ; [.4B61.0020.0002] # CUNEIFORM SIGN KU3 121AD ; [.4B62.0020.0002] # CUNEIFORM SIGN KU4 121AE ; [.4B63.0020.0002] # CUNEIFORM SIGN KU4 VARIANT FORM 121AF ; [.4B64.0020.0002] # CUNEIFORM SIGN KU7 121B0 ; [.4B65.0020.0002] # CUNEIFORM SIGN KUL 121B1 ; [.4B66.0020.0002] # CUNEIFORM SIGN KUL GUNU 121B2 ; [.4B67.0020.0002] # CUNEIFORM SIGN KUN 121B3 ; [.4B68.0020.0002] # CUNEIFORM SIGN KUR 121B4 ; [.4B69.0020.0002] # CUNEIFORM SIGN KUR OPPOSING KUR 121B5 ; [.4B6A.0020.0002] # CUNEIFORM SIGN KUSHU2 121B6 ; [.4B6B.0020.0002] # CUNEIFORM SIGN KWU318 121B7 ; [.4B6C.0020.0002] # CUNEIFORM SIGN LA 121B8 ; [.4B6D.0020.0002] # CUNEIFORM SIGN LAGAB 121B9 ; [.4B6E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A 121BA ; [.4B6F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA 121BB ; [.4B70.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS GAR 121BC ; [.4B71.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS LAL 121BD ; [.4B72.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AL 121BE ; [.4B73.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AN 121BF ; [.4B74.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU 121C0 ; [.4B75.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BAD 121C1 ; [.4B76.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BI 121C2 ; [.4B77.0020.0002] # CUNEIFORM SIGN LAGAB TIMES DAR 121C3 ; [.4B78.0020.0002] # CUNEIFORM SIGN LAGAB TIMES EN 121C4 ; [.4B79.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GA 121C5 ; [.4B7A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GAR 121C6 ; [.4B7B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD 121C7 ; [.4B7C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD 121C8 ; [.4B7D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HA 121C9 ; [.4B7E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HAL 121CA ; [.4B7F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN 121CB ; [.4B80.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IGI GUNU 121CC ; [.4B81.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM 121CD ; [.4B82.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS HA 121CE ; [.4B83.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS LU 121CF ; [.4B84.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KI 121D0 ; [.4B85.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KIN 121D1 ; [.4B86.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KU3 121D2 ; [.4B87.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL 121D3 ; [.4B88.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A 121D4 ; [.4B89.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LAGAB 121D5 ; [.4B8A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LISH 121D6 ; [.4B8B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LU 121D7 ; [.4B8C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LUL 121D8 ; [.4B8D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME 121D9 ; [.4B8E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME PLUS EN 121DA ; [.4B8F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES MUSH 121DB ; [.4B90.0020.0002] # CUNEIFORM SIGN LAGAB TIMES NE 121DC ; [.4B91.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM 121DD ; [.4B92.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2 121DE ; [.4B93.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU 121DF ; [.4B94.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 121E0 ; [.4B95.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2 121E1 ; [.4B96.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SUM 121E2 ; [.4B97.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAG 121E3 ; [.4B98.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAK4 121E4 ; [.4B99.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA 121E5 ; [.4B9A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U 121E6 ; [.4B9B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS A 121E7 ; [.4B9C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U 121E8 ; [.4B9D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH 121E9 ; [.4B9E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES UD 121EA ; [.4B9F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES USH 121EB ; [.4BA0.0020.0002] # CUNEIFORM SIGN LAGAB SQUARED 121EC ; [.4BA1.0020.0002] # CUNEIFORM SIGN LAGAR 121ED ; [.4BA2.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE 121EE ; [.4BA3.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM 121EF ; [.4BA4.0020.0002] # CUNEIFORM SIGN LAGAR GUNU 121F0 ; [.4BA5.0020.0002] # CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE 121F1 ; [.4BA6.0020.0002] # CUNEIFORM SIGN LAHSHU 121F2 ; [.4BA7.0020.0002] # CUNEIFORM SIGN LAL 121F3 ; [.4BA8.0020.0002] # CUNEIFORM SIGN LAL TIMES LAL 121F4 ; [.4BA9.0020.0002] # CUNEIFORM SIGN LAM 121F5 ; [.4BAA.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR 121F6 ; [.4BAB.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR PLUS RU 121F7 ; [.4BAC.0020.0002] # CUNEIFORM SIGN LI 121F8 ; [.4BAD.0020.0002] # CUNEIFORM SIGN LIL 121F9 ; [.4BAE.0020.0002] # CUNEIFORM SIGN LIMMU2 121FA ; [.4BAF.0020.0002] # CUNEIFORM SIGN LISH 121FB ; [.4BB0.0020.0002] # CUNEIFORM SIGN LU 121FC ; [.4BB1.0020.0002] # CUNEIFORM SIGN LU TIMES BAD 121FD ; [.4BB2.0020.0002] # CUNEIFORM SIGN LU2 121FE ; [.4BB3.0020.0002] # CUNEIFORM SIGN LU2 TIMES AL 121FF ; [.4BB4.0020.0002] # CUNEIFORM SIGN LU2 TIMES BAD 12200 ; [.4BB5.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 12201 ; [.4BB6.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 TENU 12202 ; [.4BB7.0020.0002] # CUNEIFORM SIGN LU2 TIMES GAN2 TENU 12203 ; [.4BB8.0020.0002] # CUNEIFORM SIGN LU2 TIMES HI TIMES BAD 12204 ; [.4BB9.0020.0002] # CUNEIFORM SIGN LU2 TIMES IM 12205 ; [.4BBA.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD2 12206 ; [.4BBB.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 12207 ; [.4BBC.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH 12208 ; [.4BBD.0020.0002] # CUNEIFORM SIGN LU2 TIMES KI 12209 ; [.4BBE.0020.0002] # CUNEIFORM SIGN LU2 TIMES LA PLUS ASH 1220A ; [.4BBF.0020.0002] # CUNEIFORM SIGN LU2 TIMES LAGAB 1220B ; [.4BC0.0020.0002] # CUNEIFORM SIGN LU2 TIMES ME PLUS EN 1220C ; [.4BC1.0020.0002] # CUNEIFORM SIGN LU2 TIMES NE 1220D ; [.4BC2.0020.0002] # CUNEIFORM SIGN LU2 TIMES NU 1220E ; [.4BC3.0020.0002] # CUNEIFORM SIGN LU2 TIMES SI PLUS ASH 1220F ; [.4BC4.0020.0002] # CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU 12210 ; [.4BC5.0020.0002] # CUNEIFORM SIGN LU2 TIMES TUG2 12211 ; [.4BC6.0020.0002] # CUNEIFORM SIGN LU2 TENU 12212 ; [.4BC7.0020.0002] # CUNEIFORM SIGN LU2 CROSSING LU2 12213 ; [.4BC8.0020.0002] # CUNEIFORM SIGN LU2 OPPOSING LU2 12214 ; [.4BC9.0020.0002] # CUNEIFORM SIGN LU2 SQUARED 12215 ; [.4BCA.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG 12216 ; [.4BCB.0020.0002] # CUNEIFORM SIGN LU3 12217 ; [.4BCC.0020.0002] # CUNEIFORM SIGN LUGAL 12218 ; [.4BCD.0020.0002] # CUNEIFORM SIGN LUGAL OVER LUGAL 12219 ; [.4BCE.0020.0002] # CUNEIFORM SIGN LUGAL OPPOSING LUGAL 1221A ; [.4BCF.0020.0002] # CUNEIFORM SIGN LUGAL SHESHIG 1221B ; [.4BD0.0020.0002] # CUNEIFORM SIGN LUH 1221C ; [.4BD1.0020.0002] # CUNEIFORM SIGN LUL 1221D ; [.4BD2.0020.0002] # CUNEIFORM SIGN LUM 1221E ; [.4BD3.0020.0002] # CUNEIFORM SIGN LUM OVER LUM 1221F ; [.4BD4.0020.0002] # CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR 12220 ; [.4BD5.0020.0002] # CUNEIFORM SIGN MA 12221 ; [.4BD6.0020.0002] # CUNEIFORM SIGN MA TIMES TAK4 12222 ; [.4BD7.0020.0002] # CUNEIFORM SIGN MA GUNU 12223 ; [.4BD8.0020.0002] # CUNEIFORM SIGN MA2 12224 ; [.4BD9.0020.0002] # CUNEIFORM SIGN MAH 12225 ; [.4BDA.0020.0002] # CUNEIFORM SIGN MAR 12226 ; [.4BDB.0020.0002] # CUNEIFORM SIGN MASH 12227 ; [.4BDC.0020.0002] # CUNEIFORM SIGN MASH2 12228 ; [.4BDD.0020.0002] # CUNEIFORM SIGN ME 12229 ; [.4BDE.0020.0002] # CUNEIFORM SIGN MES 1222A ; [.4BDF.0020.0002] # CUNEIFORM SIGN MI 1222B ; [.4BE0.0020.0002] # CUNEIFORM SIGN MIN 1222C ; [.4BE1.0020.0002] # CUNEIFORM SIGN MU 1222D ; [.4BE2.0020.0002] # CUNEIFORM SIGN MU OVER MU 1222E ; [.4BE3.0020.0002] # CUNEIFORM SIGN MUG 1222F ; [.4BE4.0020.0002] # CUNEIFORM SIGN MUG GUNU 12230 ; [.4BE5.0020.0002] # CUNEIFORM SIGN MUNSUB 12231 ; [.4BE6.0020.0002] # CUNEIFORM SIGN MURGU2 12232 ; [.4BE7.0020.0002] # CUNEIFORM SIGN MUSH 12233 ; [.4BE8.0020.0002] # CUNEIFORM SIGN MUSH TIMES A 12234 ; [.4BE9.0020.0002] # CUNEIFORM SIGN MUSH TIMES KUR 12235 ; [.4BEA.0020.0002] # CUNEIFORM SIGN MUSH TIMES ZA 12236 ; [.4BEB.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH 12237 ; [.4BEC.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA 12238 ; [.4BED.0020.0002] # CUNEIFORM SIGN MUSH CROSSING MUSH 12239 ; [.4BEE.0020.0002] # CUNEIFORM SIGN MUSH3 1223A ; [.4BEF.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A 1223B ; [.4BF0.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A PLUS DI 1223C ; [.4BF1.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES DI 1223D ; [.4BF2.0020.0002] # CUNEIFORM SIGN MUSH3 GUNU 1223E ; [.4BF3.0020.0002] # CUNEIFORM SIGN NA 1223F ; [.4BF4.0020.0002] # CUNEIFORM SIGN NA2 12240 ; [.4BF5.0020.0002] # CUNEIFORM SIGN NAGA 12241 ; [.4BF6.0020.0002] # CUNEIFORM SIGN NAGA INVERTED 12242 ; [.4BF7.0020.0002] # CUNEIFORM SIGN NAGA TIMES SHU TENU 12243 ; [.4BF8.0020.0002] # CUNEIFORM SIGN NAGA OPPOSING NAGA 12244 ; [.4BF9.0020.0002] # CUNEIFORM SIGN NAGAR 12245 ; [.4BFA.0020.0002] # CUNEIFORM SIGN NAM NUTILLU 12246 ; [.4BFB.0020.0002] # CUNEIFORM SIGN NAM 12247 ; [.4BFC.0020.0002] # CUNEIFORM SIGN NAM2 12248 ; [.4BFD.0020.0002] # CUNEIFORM SIGN NE 12249 ; [.4BFE.0020.0002] # CUNEIFORM SIGN NE TIMES A 1224A ; [.4BFF.0020.0002] # CUNEIFORM SIGN NE TIMES UD 1224B ; [.4C00.0020.0002] # CUNEIFORM SIGN NE SHESHIG 1224C ; [.4C01.0020.0002] # CUNEIFORM SIGN NI 1224D ; [.4C02.0020.0002] # CUNEIFORM SIGN NI TIMES E 1224E ; [.4C03.0020.0002] # CUNEIFORM SIGN NI2 1224F ; [.4C04.0020.0002] # CUNEIFORM SIGN NIM 12250 ; [.4C05.0020.0002] # CUNEIFORM SIGN NIM TIMES GAN2 TENU 12251 ; [.4C06.0020.0002] # CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU 12252 ; [.4C07.0020.0002] # CUNEIFORM SIGN NINDA2 12253 ; [.4C08.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES AN 12254 ; [.4C09.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH 12255 ; [.4C0A.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH 12256 ; [.4C0B.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUD 12257 ; [.4C0C.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU 12258 ; [.4C0D.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NE 12259 ; [.4C0E.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NUN 1225A ; [.4C0F.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE 1225B ; [.4C10.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN 1225C ; [.4C11.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH 1225D ; [.4C12.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH 1225E ; [.4C13.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH 1225F ; [.4C14.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES USH 12260 ; [.4C15.0020.0002] # CUNEIFORM SIGN NISAG 12261 ; [.4C16.0020.0002] # CUNEIFORM SIGN NU 12262 ; [.4C17.0020.0002] # CUNEIFORM SIGN NU11 122D4 ; [.4C18.0020.0002] # CUNEIFORM SIGN SHIR TENU 122D5 ; [.4C19.0020.0002] # CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR 12263 ; [.4C1A.0020.0002] # CUNEIFORM SIGN NUN 12264 ; [.4C1B.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES GAR 12265 ; [.4C1C.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES MASH 12266 ; [.4C1D.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL 12267 ; [.4C1E.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL 12268 ; [.4C1F.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES USH 12269 ; [.4C20.0020.0002] # CUNEIFORM SIGN NUN TENU 1226A ; [.4C21.0020.0002] # CUNEIFORM SIGN NUN OVER NUN 1226B ; [.4C22.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN 1226C ; [.4C23.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR 1226D ; [.4C24.0020.0002] # CUNEIFORM SIGN NUNUZ 1226E ; [.4C25.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB 1226F ; [.4C26.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES BI 12270 ; [.4C27.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES DUG 12271 ; [.4C28.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES GUD 12272 ; [.4C29.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU 12273 ; [.4C2A.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3 12274 ; [.4C2B.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES LA 12275 ; [.4C2C.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES NE 12276 ; [.4C2D.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3 12277 ; [.4C2E.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES U2 12278 ; [.4C2F.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI 12279 ; [.4C30.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U 1227A ; [.4C31.0020.0002] # CUNEIFORM SIGN PA 1227B ; [.4C32.0020.0002] # CUNEIFORM SIGN PAD 1227C ; [.4C33.0020.0002] # CUNEIFORM SIGN PAN 1227D ; [.4C34.0020.0002] # CUNEIFORM SIGN PAP 1227E ; [.4C35.0020.0002] # CUNEIFORM SIGN PESH2 1227F ; [.4C36.0020.0002] # CUNEIFORM SIGN PI 12280 ; [.4C37.0020.0002] # CUNEIFORM SIGN PI TIMES A 12281 ; [.4C38.0020.0002] # CUNEIFORM SIGN PI TIMES AB 12282 ; [.4C39.0020.0002] # CUNEIFORM SIGN PI TIMES BI 12283 ; [.4C3A.0020.0002] # CUNEIFORM SIGN PI TIMES BU 12284 ; [.4C3B.0020.0002] # CUNEIFORM SIGN PI TIMES E 12285 ; [.4C3C.0020.0002] # CUNEIFORM SIGN PI TIMES I 12286 ; [.4C3D.0020.0002] # CUNEIFORM SIGN PI TIMES IB 12287 ; [.4C3E.0020.0002] # CUNEIFORM SIGN PI TIMES U 12288 ; [.4C3F.0020.0002] # CUNEIFORM SIGN PI TIMES U2 12289 ; [.4C40.0020.0002] # CUNEIFORM SIGN PI CROSSING PI 1228A ; [.4C41.0020.0002] # CUNEIFORM SIGN PIRIG 1228B ; [.4C42.0020.0002] # CUNEIFORM SIGN PIRIG TIMES KAL 1228C ; [.4C43.0020.0002] # CUNEIFORM SIGN PIRIG TIMES UD 1228D ; [.4C44.0020.0002] # CUNEIFORM SIGN PIRIG TIMES ZA 1228E ; [.4C45.0020.0002] # CUNEIFORM SIGN PIRIG OPPOSING PIRIG 1228F ; [.4C46.0020.0002] # CUNEIFORM SIGN RA 12290 ; [.4C47.0020.0002] # CUNEIFORM SIGN RAB 12291 ; [.4C48.0020.0002] # CUNEIFORM SIGN RI 12292 ; [.4C49.0020.0002] # CUNEIFORM SIGN RU 12293 ; [.4C4A.0020.0002] # CUNEIFORM SIGN SA 12294 ; [.4C4B.0020.0002] # CUNEIFORM SIGN SAG NUTILLU 12295 ; [.4C4C.0020.0002] # CUNEIFORM SIGN SAG 12296 ; [.4C4D.0020.0002] # CUNEIFORM SIGN SAG TIMES A 12297 ; [.4C4E.0020.0002] # CUNEIFORM SIGN SAG TIMES DU 12298 ; [.4C4F.0020.0002] # CUNEIFORM SIGN SAG TIMES DUB 12299 ; [.4C50.0020.0002] # CUNEIFORM SIGN SAG TIMES HA 1229A ; [.4C51.0020.0002] # CUNEIFORM SIGN SAG TIMES KAK 1229B ; [.4C52.0020.0002] # CUNEIFORM SIGN SAG TIMES KUR 1229C ; [.4C53.0020.0002] # CUNEIFORM SIGN SAG TIMES LUM 1229D ; [.4C54.0020.0002] # CUNEIFORM SIGN SAG TIMES MI 1229E ; [.4C55.0020.0002] # CUNEIFORM SIGN SAG TIMES NUN 1229F ; [.4C56.0020.0002] # CUNEIFORM SIGN SAG TIMES SAL 122A0 ; [.4C57.0020.0002] # CUNEIFORM SIGN SAG TIMES SHID 122A1 ; [.4C58.0020.0002] # CUNEIFORM SIGN SAG TIMES TAB 122A2 ; [.4C59.0020.0002] # CUNEIFORM SIGN SAG TIMES U2 122A3 ; [.4C5A.0020.0002] # CUNEIFORM SIGN SAG TIMES UB 122A4 ; [.4C5B.0020.0002] # CUNEIFORM SIGN SAG TIMES UM 122A5 ; [.4C5C.0020.0002] # CUNEIFORM SIGN SAG TIMES UR 122A6 ; [.4C5D.0020.0002] # CUNEIFORM SIGN SAG TIMES USH 122A7 ; [.4C5E.0020.0002] # CUNEIFORM SIGN SAG OVER SAG 122A8 ; [.4C5F.0020.0002] # CUNEIFORM SIGN SAG GUNU 122A9 ; [.4C60.0020.0002] # CUNEIFORM SIGN SAL 122AA ; [.4C61.0020.0002] # CUNEIFORM SIGN SAL LAGAB TIMES ASH2 122AB ; [.4C62.0020.0002] # CUNEIFORM SIGN SANGA2 122AC ; [.4C63.0020.0002] # CUNEIFORM SIGN SAR 122AD ; [.4C64.0020.0002] # CUNEIFORM SIGN SHA 122AE ; [.4C65.0020.0002] # CUNEIFORM SIGN SHA3 122AF ; [.4C66.0020.0002] # CUNEIFORM SIGN SHA3 TIMES A 122B0 ; [.4C67.0020.0002] # CUNEIFORM SIGN SHA3 TIMES BAD 122B1 ; [.4C68.0020.0002] # CUNEIFORM SIGN SHA3 TIMES GISH 122B2 ; [.4C69.0020.0002] # CUNEIFORM SIGN SHA3 TIMES NE 122B3 ; [.4C6A.0020.0002] # CUNEIFORM SIGN SHA3 TIMES SHU2 122B4 ; [.4C6B.0020.0002] # CUNEIFORM SIGN SHA3 TIMES TUR 122B5 ; [.4C6C.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U 122B6 ; [.4C6D.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U PLUS A 122B7 ; [.4C6E.0020.0002] # CUNEIFORM SIGN SHA6 122B8 ; [.4C6F.0020.0002] # CUNEIFORM SIGN SHAB6 122B9 ; [.4C70.0020.0002] # CUNEIFORM SIGN SHAR2 122BA ; [.4C71.0020.0002] # CUNEIFORM SIGN SHE 122BB ; [.4C72.0020.0002] # CUNEIFORM SIGN SHE HU 122BC ; [.4C73.0020.0002] # CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR 122BD ; [.4C74.0020.0002] # CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR 122BE ; [.4C75.0020.0002] # CUNEIFORM SIGN SHEG9 122BF ; [.4C76.0020.0002] # CUNEIFORM SIGN SHEN 122C0 ; [.4C77.0020.0002] # CUNEIFORM SIGN SHESH 122C1 ; [.4C78.0020.0002] # CUNEIFORM SIGN SHESH2 122C2 ; [.4C79.0020.0002] # CUNEIFORM SIGN SHESHLAM 122C3 ; [.4C7A.0020.0002] # CUNEIFORM SIGN SHID 122C4 ; [.4C7B.0020.0002] # CUNEIFORM SIGN SHID TIMES A 122C5 ; [.4C7C.0020.0002] # CUNEIFORM SIGN SHID TIMES IM 122C6 ; [.4C7D.0020.0002] # CUNEIFORM SIGN SHIM 122C7 ; [.4C7E.0020.0002] # CUNEIFORM SIGN SHIM TIMES A 122C8 ; [.4C7F.0020.0002] # CUNEIFORM SIGN SHIM TIMES BAL 122C9 ; [.4C80.0020.0002] # CUNEIFORM SIGN SHIM TIMES BULUG 122CA ; [.4C81.0020.0002] # CUNEIFORM SIGN SHIM TIMES DIN 122CB ; [.4C82.0020.0002] # CUNEIFORM SIGN SHIM TIMES GAR 122CC ; [.4C83.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI 122CD ; [.4C84.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI GUNU 122CE ; [.4C85.0020.0002] # CUNEIFORM SIGN SHIM TIMES KUSHU2 122CF ; [.4C86.0020.0002] # CUNEIFORM SIGN SHIM TIMES LUL 122D0 ; [.4C87.0020.0002] # CUNEIFORM SIGN SHIM TIMES MUG 122D1 ; [.4C88.0020.0002] # CUNEIFORM SIGN SHIM TIMES SAL 122D2 ; [.4C89.0020.0002] # CUNEIFORM SIGN SHINIG 122D3 ; [.4C8A.0020.0002] # CUNEIFORM SIGN SHIR 122D6 ; [.4C8B.0020.0002] # CUNEIFORM SIGN SHITA 122D7 ; [.4C8C.0020.0002] # CUNEIFORM SIGN SHU 122D8 ; [.4C8D.0020.0002] # CUNEIFORM SIGN SHU OVER INVERTED SHU 122D9 ; [.4C8E.0020.0002] # CUNEIFORM SIGN SHU2 122DA ; [.4C8F.0020.0002] # CUNEIFORM SIGN SHUBUR 122DB ; [.4C90.0020.0002] # CUNEIFORM SIGN SI 122DC ; [.4C91.0020.0002] # CUNEIFORM SIGN SI GUNU 122DD ; [.4C92.0020.0002] # CUNEIFORM SIGN SIG 122DE ; [.4C93.0020.0002] # CUNEIFORM SIGN SIG4 122DF ; [.4C94.0020.0002] # CUNEIFORM SIGN SIG4 OVER SIG4 SHU2 122E0 ; [.4C95.0020.0002] # CUNEIFORM SIGN SIK2 122E1 ; [.4C96.0020.0002] # CUNEIFORM SIGN SILA3 122E2 ; [.4C97.0020.0002] # CUNEIFORM SIGN SU 122E3 ; [.4C98.0020.0002] # CUNEIFORM SIGN SU OVER SU 122E4 ; [.4C99.0020.0002] # CUNEIFORM SIGN SUD 122E5 ; [.4C9A.0020.0002] # CUNEIFORM SIGN SUD2 122E6 ; [.4C9B.0020.0002] # CUNEIFORM SIGN SUHUR 122E7 ; [.4C9C.0020.0002] # CUNEIFORM SIGN SUM 122E8 ; [.4C9D.0020.0002] # CUNEIFORM SIGN SUMASH 122E9 ; [.4C9E.0020.0002] # CUNEIFORM SIGN SUR 122EA ; [.4C9F.0020.0002] # CUNEIFORM SIGN SUR9 122EB ; [.4CA0.0020.0002] # CUNEIFORM SIGN TA 122EC ; [.4CA1.0020.0002] # CUNEIFORM SIGN TA ASTERISK 122ED ; [.4CA2.0020.0002] # CUNEIFORM SIGN TA TIMES HI 122EE ; [.4CA3.0020.0002] # CUNEIFORM SIGN TA TIMES MI 122EF ; [.4CA4.0020.0002] # CUNEIFORM SIGN TA GUNU 122F0 ; [.4CA5.0020.0002] # CUNEIFORM SIGN TAB 122F1 ; [.4CA6.0020.0002] # CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH 122F2 ; [.4CA7.0020.0002] # CUNEIFORM SIGN TAB SQUARED 122F3 ; [.4CA8.0020.0002] # CUNEIFORM SIGN TAG 122F4 ; [.4CA9.0020.0002] # CUNEIFORM SIGN TAG TIMES BI 122F5 ; [.4CAA.0020.0002] # CUNEIFORM SIGN TAG TIMES GUD 122F6 ; [.4CAB.0020.0002] # CUNEIFORM SIGN TAG TIMES SHE 122F7 ; [.4CAC.0020.0002] # CUNEIFORM SIGN TAG TIMES SHU 122F8 ; [.4CAD.0020.0002] # CUNEIFORM SIGN TAG TIMES TUG2 122F9 ; [.4CAE.0020.0002] # CUNEIFORM SIGN TAG TIMES UD 122FA ; [.4CAF.0020.0002] # CUNEIFORM SIGN TAK4 122FB ; [.4CB0.0020.0002] # CUNEIFORM SIGN TAR 122FC ; [.4CB1.0020.0002] # CUNEIFORM SIGN TE 122FD ; [.4CB2.0020.0002] # CUNEIFORM SIGN TE GUNU 122FE ; [.4CB3.0020.0002] # CUNEIFORM SIGN TI 122FF ; [.4CB4.0020.0002] # CUNEIFORM SIGN TI TENU 12300 ; [.4CB5.0020.0002] # CUNEIFORM SIGN TIL 12301 ; [.4CB6.0020.0002] # CUNEIFORM SIGN TIR 12302 ; [.4CB7.0020.0002] # CUNEIFORM SIGN TIR TIMES TAK4 12303 ; [.4CB8.0020.0002] # CUNEIFORM SIGN TIR OVER TIR 12304 ; [.4CB9.0020.0002] # CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR 12305 ; [.4CBA.0020.0002] # CUNEIFORM SIGN TU 12306 ; [.4CBB.0020.0002] # CUNEIFORM SIGN TUG2 12307 ; [.4CBC.0020.0002] # CUNEIFORM SIGN TUK 12308 ; [.4CBD.0020.0002] # CUNEIFORM SIGN TUM 12309 ; [.4CBE.0020.0002] # CUNEIFORM SIGN TUR 1230A ; [.4CBF.0020.0002] # CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA 1230B ; [.4CC0.0020.0002] # CUNEIFORM SIGN U 1230C ; [.4CC1.0020.0002] # CUNEIFORM SIGN U GUD 1230D ; [.4CC2.0020.0002] # CUNEIFORM SIGN U U U 1230E ; [.4CC3.0020.0002] # CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR 1230F ; [.4CC4.0020.0002] # CUNEIFORM SIGN U OVER U SUR OVER SUR 12310 ; [.4CC5.0020.0002] # CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED 12311 ; [.4CC6.0020.0002] # CUNEIFORM SIGN U2 12312 ; [.4CC7.0020.0002] # CUNEIFORM SIGN UB 12313 ; [.4CC8.0020.0002] # CUNEIFORM SIGN UD 12314 ; [.4CC9.0020.0002] # CUNEIFORM SIGN UD KUSHU2 12315 ; [.4CCA.0020.0002] # CUNEIFORM SIGN UD TIMES BAD 12316 ; [.4CCB.0020.0002] # CUNEIFORM SIGN UD TIMES MI 12317 ; [.4CCC.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U 12318 ; [.4CCD.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU 12319 ; [.4CCE.0020.0002] # CUNEIFORM SIGN UD GUNU 1231A ; [.4CCF.0020.0002] # CUNEIFORM SIGN UD SHESHIG 1231B ; [.4CD0.0020.0002] # CUNEIFORM SIGN UD SHESHIG TIMES BAD 1231C ; [.4CD1.0020.0002] # CUNEIFORM SIGN UDUG 1231D ; [.4CD2.0020.0002] # CUNEIFORM SIGN UM 1231E ; [.4CD3.0020.0002] # CUNEIFORM SIGN UM TIMES LAGAB 1231F ; [.4CD4.0020.0002] # CUNEIFORM SIGN UM TIMES ME PLUS DA 12320 ; [.4CD5.0020.0002] # CUNEIFORM SIGN UM TIMES SHA3 12321 ; [.4CD6.0020.0002] # CUNEIFORM SIGN UM TIMES U 12322 ; [.4CD7.0020.0002] # CUNEIFORM SIGN UMBIN 12323 ; [.4CD8.0020.0002] # CUNEIFORM SIGN UMUM 12324 ; [.4CD9.0020.0002] # CUNEIFORM SIGN UMUM TIMES KASKAL 12325 ; [.4CDA.0020.0002] # CUNEIFORM SIGN UMUM TIMES PA 12326 ; [.4CDB.0020.0002] # CUNEIFORM SIGN UN 12327 ; [.4CDC.0020.0002] # CUNEIFORM SIGN UN GUNU 12328 ; [.4CDD.0020.0002] # CUNEIFORM SIGN UR 12329 ; [.4CDE.0020.0002] # CUNEIFORM SIGN UR CROSSING UR 1232A ; [.4CDF.0020.0002] # CUNEIFORM SIGN UR SHESHIG 1232B ; [.4CE0.0020.0002] # CUNEIFORM SIGN UR2 1232C ; [.4CE1.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS HA 1232D ; [.4CE2.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS NA 1232E ; [.4CE3.0020.0002] # CUNEIFORM SIGN UR2 TIMES AL 1232F ; [.4CE4.0020.0002] # CUNEIFORM SIGN UR2 TIMES HA 12330 ; [.4CE5.0020.0002] # CUNEIFORM SIGN UR2 TIMES NUN 12331 ; [.4CE6.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 12332 ; [.4CE7.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH 12333 ; [.4CE8.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS BI 12334 ; [.4CE9.0020.0002] # CUNEIFORM SIGN UR4 12335 ; [.4CEA.0020.0002] # CUNEIFORM SIGN URI 12336 ; [.4CEB.0020.0002] # CUNEIFORM SIGN URI3 12337 ; [.4CEC.0020.0002] # CUNEIFORM SIGN URU 12338 ; [.4CED.0020.0002] # CUNEIFORM SIGN URU TIMES A 12339 ; [.4CEE.0020.0002] # CUNEIFORM SIGN URU TIMES ASHGAB 1233A ; [.4CEF.0020.0002] # CUNEIFORM SIGN URU TIMES BAR 1233B ; [.4CF0.0020.0002] # CUNEIFORM SIGN URU TIMES DUN 1233C ; [.4CF1.0020.0002] # CUNEIFORM SIGN URU TIMES GA 1233D ; [.4CF2.0020.0002] # CUNEIFORM SIGN URU TIMES GAL 1233E ; [.4CF3.0020.0002] # CUNEIFORM SIGN URU TIMES GAN2 TENU 1233F ; [.4CF4.0020.0002] # CUNEIFORM SIGN URU TIMES GAR 12340 ; [.4CF5.0020.0002] # CUNEIFORM SIGN URU TIMES GU 12341 ; [.4CF6.0020.0002] # CUNEIFORM SIGN URU TIMES HA 12342 ; [.4CF7.0020.0002] # CUNEIFORM SIGN URU TIMES IGI 12343 ; [.4CF8.0020.0002] # CUNEIFORM SIGN URU TIMES IM 12344 ; [.4CF9.0020.0002] # CUNEIFORM SIGN URU TIMES ISH 12345 ; [.4CFA.0020.0002] # CUNEIFORM SIGN URU TIMES KI 12346 ; [.4CFB.0020.0002] # CUNEIFORM SIGN URU TIMES LUM 12347 ; [.4CFC.0020.0002] # CUNEIFORM SIGN URU TIMES MIN 12348 ; [.4CFD.0020.0002] # CUNEIFORM SIGN URU TIMES PA 12349 ; [.4CFE.0020.0002] # CUNEIFORM SIGN URU TIMES SHE 1234A ; [.4CFF.0020.0002] # CUNEIFORM SIGN URU TIMES SIG4 1234B ; [.4D00.0020.0002] # CUNEIFORM SIGN URU TIMES TU 1234C ; [.4D01.0020.0002] # CUNEIFORM SIGN URU TIMES U PLUS GUD 1234D ; [.4D02.0020.0002] # CUNEIFORM SIGN URU TIMES UD 1234E ; [.4D03.0020.0002] # CUNEIFORM SIGN URU TIMES URUDA 1234F ; [.4D04.0020.0002] # CUNEIFORM SIGN URUDA 12350 ; [.4D05.0020.0002] # CUNEIFORM SIGN URUDA TIMES U 12351 ; [.4D06.0020.0002] # CUNEIFORM SIGN USH 12352 ; [.4D07.0020.0002] # CUNEIFORM SIGN USH TIMES A 12353 ; [.4D08.0020.0002] # CUNEIFORM SIGN USH TIMES KU 12354 ; [.4D09.0020.0002] # CUNEIFORM SIGN USH TIMES KUR 12355 ; [.4D0A.0020.0002] # CUNEIFORM SIGN USH TIMES TAK4 12356 ; [.4D0B.0020.0002] # CUNEIFORM SIGN USHX 12357 ; [.4D0C.0020.0002] # CUNEIFORM SIGN USH2 12358 ; [.4D0D.0020.0002] # CUNEIFORM SIGN USHUMX 12359 ; [.4D0E.0020.0002] # CUNEIFORM SIGN UTUKI 1235A ; [.4D0F.0020.0002] # CUNEIFORM SIGN UZ3 1235B ; [.4D10.0020.0002] # CUNEIFORM SIGN UZ3 TIMES KASKAL 1235C ; [.4D11.0020.0002] # CUNEIFORM SIGN UZU 1235D ; [.4D12.0020.0002] # CUNEIFORM SIGN ZA 1235E ; [.4D13.0020.0002] # CUNEIFORM SIGN ZA TENU 1235F ; [.4D14.0020.0002] # CUNEIFORM SIGN ZA SQUARED TIMES KUR 12360 ; [.4D15.0020.0002] # CUNEIFORM SIGN ZAG 12361 ; [.4D16.0020.0002] # CUNEIFORM SIGN ZAMX 12362 ; [.4D17.0020.0002] # CUNEIFORM SIGN ZE2 12363 ; [.4D18.0020.0002] # CUNEIFORM SIGN ZI 12364 ; [.4D19.0020.0002] # CUNEIFORM SIGN ZI OVER ZI 12365 ; [.4D1A.0020.0002] # CUNEIFORM SIGN ZI3 12366 ; [.4D1B.0020.0002] # CUNEIFORM SIGN ZIB 12367 ; [.4D1C.0020.0002] # CUNEIFORM SIGN ZIB KABA TENU 12368 ; [.4D1D.0020.0002] # CUNEIFORM SIGN ZIG 12369 ; [.4D1E.0020.0002] # CUNEIFORM SIGN ZIZ2 1236A ; [.4D1F.0020.0002] # CUNEIFORM SIGN ZU 1236B ; [.4D20.0020.0002] # CUNEIFORM SIGN ZU5 1236C ; [.4D21.0020.0002] # CUNEIFORM SIGN ZU5 TIMES A 1236D ; [.4D22.0020.0002] # CUNEIFORM SIGN ZUBUR 1236E ; [.4D23.0020.0002] # CUNEIFORM SIGN ZUM 1236F ; [.4D24.0020.0002] # CUNEIFORM SIGN KAP ELAMITE 12370 ; [.4D25.0020.0002] # CUNEIFORM SIGN AB TIMES NUN 12371 ; [.4D26.0020.0002] # CUNEIFORM SIGN AB2 TIMES A 12372 ; [.4D27.0020.0002] # CUNEIFORM SIGN AMAR TIMES KUG 12373 ; [.4D28.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH 12374 ; [.4D29.0020.0002] # CUNEIFORM SIGN DAG3 12375 ; [.4D2A.0020.0002] # CUNEIFORM SIGN DISH PLUS SHU 12376 ; [.4D2B.0020.0002] # CUNEIFORM SIGN DUB TIMES SHE 12377 ; [.4D2C.0020.0002] # CUNEIFORM SIGN EZEN TIMES GUD 12378 ; [.4D2D.0020.0002] # CUNEIFORM SIGN EZEN TIMES SHE 12379 ; [.4D2E.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A 1237A ; [.4D2F.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 1237B ; [.4D30.0020.0002] # CUNEIFORM SIGN GE22 1237C ; [.4D31.0020.0002] # CUNEIFORM SIGN GIG 1237D ; [.4D32.0020.0002] # CUNEIFORM SIGN HUSH 1237E ; [.4D33.0020.0002] # CUNEIFORM SIGN KA TIMES ANSHE 1237F ; [.4D34.0020.0002] # CUNEIFORM SIGN KA TIMES ASH3 12380 ; [.4D35.0020.0002] # CUNEIFORM SIGN KA TIMES GISH 12381 ; [.4D36.0020.0002] # CUNEIFORM SIGN KA TIMES GUD 12382 ; [.4D37.0020.0002] # CUNEIFORM SIGN KA TIMES HI TIMES ASH2 12383 ; [.4D38.0020.0002] # CUNEIFORM SIGN KA TIMES LUM 12384 ; [.4D39.0020.0002] # CUNEIFORM SIGN KA TIMES PA 12385 ; [.4D3A.0020.0002] # CUNEIFORM SIGN KA TIMES SHUL 12386 ; [.4D3B.0020.0002] # CUNEIFORM SIGN KA TIMES TU 12387 ; [.4D3C.0020.0002] # CUNEIFORM SIGN KA TIMES UR2 12388 ; [.4D3D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GI 12389 ; [.4D3E.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG TIMES BAD 1238A ; [.4D3F.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL 1238B ; [.4D40.0020.0002] # CUNEIFORM SIGN LU2 TIMES SHU 1238C ; [.4D41.0020.0002] # CUNEIFORM SIGN MESH 1238D ; [.4D42.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES ZA 1238E ; [.4D43.0020.0002] # CUNEIFORM SIGN NA4 1238F ; [.4D44.0020.0002] # CUNEIFORM SIGN NIN 12390 ; [.4D45.0020.0002] # CUNEIFORM SIGN NIN9 12391 ; [.4D46.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES BAL 12392 ; [.4D47.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GI 12393 ; [.4D48.0020.0002] # CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES 12394 ; [.4D49.0020.0002] # CUNEIFORM SIGN PESH2 ASTERISK 12395 ; [.4D4A.0020.0002] # CUNEIFORM SIGN PIR2 12396 ; [.4D4B.0020.0002] # CUNEIFORM SIGN SAG TIMES IGI GUNU 12397 ; [.4D4C.0020.0002] # CUNEIFORM SIGN TI2 12398 ; [.4D4D.0020.0002] # CUNEIFORM SIGN UM TIMES ME 12399 ; [.4D4E.0020.0002] # CUNEIFORM SIGN U U 12480 ; [.4D4F.0020.0002] # CUNEIFORM SIGN AB TIMES NUN TENU 12481 ; [.4D50.0020.0002] # CUNEIFORM SIGN AB TIMES SHU2 12482 ; [.4D51.0020.0002] # CUNEIFORM SIGN AD TIMES ESH2 12483 ; [.4D52.0020.0002] # CUNEIFORM SIGN BAD TIMES DISH TENU 12484 ; [.4D53.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES AB2 12485 ; [.4D54.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES NI 12486 ; [.4D55.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES ZA 12487 ; [.4D56.0020.0002] # CUNEIFORM SIGN BU OVER BU TIMES NA2 12488 ; [.4D57.0020.0002] # CUNEIFORM SIGN DA TIMES TAK4 12489 ; [.4D58.0020.0002] # CUNEIFORM SIGN DAG TIMES KUR 1248A ; [.4D59.0020.0002] # CUNEIFORM SIGN DIM TIMES IGI 1248B ; [.4D5A.0020.0002] # CUNEIFORM SIGN DIM TIMES U U U 1248C ; [.4D5B.0020.0002] # CUNEIFORM SIGN DIM2 TIMES UD 1248D ; [.4D5C.0020.0002] # CUNEIFORM SIGN DUG TIMES ANSHE 1248E ; [.4D5D.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH 1248F ; [.4D5E.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH AT LEFT 12490 ; [.4D5F.0020.0002] # CUNEIFORM SIGN DUG TIMES DIN 12491 ; [.4D60.0020.0002] # CUNEIFORM SIGN DUG TIMES DUN 12492 ; [.4D61.0020.0002] # CUNEIFORM SIGN DUG TIMES ERIN2 12493 ; [.4D62.0020.0002] # CUNEIFORM SIGN DUG TIMES GA 12494 ; [.4D63.0020.0002] # CUNEIFORM SIGN DUG TIMES GI 12495 ; [.4D64.0020.0002] # CUNEIFORM SIGN DUG TIMES GIR2 GUNU 12496 ; [.4D65.0020.0002] # CUNEIFORM SIGN DUG TIMES GISH 12497 ; [.4D66.0020.0002] # CUNEIFORM SIGN DUG TIMES HA 12498 ; [.4D67.0020.0002] # CUNEIFORM SIGN DUG TIMES HI 12499 ; [.4D68.0020.0002] # CUNEIFORM SIGN DUG TIMES IGI GUNU 1249A ; [.4D69.0020.0002] # CUNEIFORM SIGN DUG TIMES KASKAL 1249B ; [.4D6A.0020.0002] # CUNEIFORM SIGN DUG TIMES KUR 1249C ; [.4D6B.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 1249D ; [.4D6C.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL 1249E ; [.4D6D.0020.0002] # CUNEIFORM SIGN DUG TIMES LAK-020 1249F ; [.4D6E.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM 124A0 ; [.4D6F.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM TIMES KUR 124A1 ; [.4D70.0020.0002] # CUNEIFORM SIGN DUG TIMES LUH PLUS GISH 124A2 ; [.4D71.0020.0002] # CUNEIFORM SIGN DUG TIMES MASH 124A3 ; [.4D72.0020.0002] # CUNEIFORM SIGN DUG TIMES MES 124A4 ; [.4D73.0020.0002] # CUNEIFORM SIGN DUG TIMES MI 124A5 ; [.4D74.0020.0002] # CUNEIFORM SIGN DUG TIMES NI 124A6 ; [.4D75.0020.0002] # CUNEIFORM SIGN DUG TIMES PI 124A7 ; [.4D76.0020.0002] # CUNEIFORM SIGN DUG TIMES SHE 124A8 ; [.4D77.0020.0002] # CUNEIFORM SIGN DUG TIMES SI GUNU 124A9 ; [.4D78.0020.0002] # CUNEIFORM SIGN E2 TIMES KUR 124AA ; [.4D79.0020.0002] # CUNEIFORM SIGN E2 TIMES PAP 124AB ; [.4D7A.0020.0002] # CUNEIFORM SIGN ERIN2 X 124AC ; [.4D7B.0020.0002] # CUNEIFORM SIGN ESH2 CROSSING ESH2 124AD ; [.4D7C.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ASH 124AE ; [.4D7D.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES HI 124AF ; [.4D7E.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU 124B0 ; [.4D7F.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LA 124B1 ; [.4D80.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LAL 124B2 ; [.4D81.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ME 124B3 ; [.4D82.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES MES 124B4 ; [.4D83.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES SU 124B5 ; [.4D84.0020.0002] # CUNEIFORM SIGN EZEN TIMES SU 124B6 ; [.4D85.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAHAR2 124B7 ; [.4D86.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM GUNU 124B8 ; [.4D87.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU 124B9 ; [.4D88.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL 124BA ; [.4D89.0020.0002] # CUNEIFORM SIGN GA2 TIMES EREN 124BB ; [.4D8A.0020.0002] # CUNEIFORM SIGN GA2 TIMES GA 124BC ; [.4D8B.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS DI 124BD ; [.4D8C.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS NE 124BE ; [.4D8D.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS A 124BF ; [.4D8E.0020.0002] # CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL 124C0 ; [.4D8F.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM 124C1 ; [.4D90.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR 124C2 ; [.4D91.0020.0002] # CUNEIFORM SIGN GA2 TIMES LUH 124C3 ; [.4D92.0020.0002] # CUNEIFORM SIGN GA2 TIMES MUSH 124C4 ; [.4D93.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE 124C5 ; [.4D94.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS E2 124C6 ; [.4D95.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS GI 124C7 ; [.4D96.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHIM 124C8 ; [.4D97.0020.0002] # CUNEIFORM SIGN GA2 TIMES ZIZ2 124C9 ; [.4D98.0020.0002] # CUNEIFORM SIGN GABA ROTATED NINETY DEGREES 124CA ; [.4D99.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES U 124CB ; [.4D9A.0020.0002] # CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH 124CC ; [.4D9B.0020.0002] # CUNEIFORM SIGN GU2 TIMES IGI GUNU 124CD ; [.4D9C.0020.0002] # CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4 124CE ; [.4D9D.0020.0002] # CUNEIFORM SIGN HA TENU GUNU 124CF ; [.4D9E.0020.0002] # CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH 124D0 ; [.4D9F.0020.0002] # CUNEIFORM SIGN KA TIMES BU 124D1 ; [.4DA0.0020.0002] # CUNEIFORM SIGN KA TIMES KA 124D2 ; [.4DA1.0020.0002] # CUNEIFORM SIGN KA TIMES U U U 124D3 ; [.4DA2.0020.0002] # CUNEIFORM SIGN KA TIMES UR 124D4 ; [.4DA3.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU 124D5 ; [.4DA4.0020.0002] # CUNEIFORM SIGN LAK-003 124D6 ; [.4DA5.0020.0002] # CUNEIFORM SIGN LAK-021 124D7 ; [.4DA6.0020.0002] # CUNEIFORM SIGN LAK-025 124D8 ; [.4DA7.0020.0002] # CUNEIFORM SIGN LAK-030 124D9 ; [.4DA8.0020.0002] # CUNEIFORM SIGN LAK-050 124DA ; [.4DA9.0020.0002] # CUNEIFORM SIGN LAK-051 124DB ; [.4DAA.0020.0002] # CUNEIFORM SIGN LAK-062 124DC ; [.4DAB.0020.0002] # CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU 124DD ; [.4DAC.0020.0002] # CUNEIFORM SIGN LAK-080 124DE ; [.4DAD.0020.0002] # CUNEIFORM SIGN LAK-081 OVER LAK-081 124DF ; [.4DAE.0020.0002] # CUNEIFORM SIGN LAK-092 124E0 ; [.4DAF.0020.0002] # CUNEIFORM SIGN LAK-130 124E1 ; [.4DB0.0020.0002] # CUNEIFORM SIGN LAK-142 124E2 ; [.4DB1.0020.0002] # CUNEIFORM SIGN LAK-210 124E3 ; [.4DB2.0020.0002] # CUNEIFORM SIGN LAK-219 124E4 ; [.4DB3.0020.0002] # CUNEIFORM SIGN LAK-220 124E5 ; [.4DB4.0020.0002] # CUNEIFORM SIGN LAK-225 124E6 ; [.4DB5.0020.0002] # CUNEIFORM SIGN LAK-228 124E7 ; [.4DB6.0020.0002] # CUNEIFORM SIGN LAK-238 124E8 ; [.4DB7.0020.0002] # CUNEIFORM SIGN LAK-265 124E9 ; [.4DB8.0020.0002] # CUNEIFORM SIGN LAK-266 124EA ; [.4DB9.0020.0002] # CUNEIFORM SIGN LAK-343 124EB ; [.4DBA.0020.0002] # CUNEIFORM SIGN LAK-347 124EC ; [.4DBB.0020.0002] # CUNEIFORM SIGN LAK-348 124ED ; [.4DBC.0020.0002] # CUNEIFORM SIGN LAK-383 124EE ; [.4DBD.0020.0002] # CUNEIFORM SIGN LAK-384 124EF ; [.4DBE.0020.0002] # CUNEIFORM SIGN LAK-390 124F0 ; [.4DBF.0020.0002] # CUNEIFORM SIGN LAK-441 124F1 ; [.4DC0.0020.0002] # CUNEIFORM SIGN LAK-449 124F2 ; [.4DC1.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES GU 124F3 ; [.4DC2.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES IGI 124F4 ; [.4DC3.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3 124F5 ; [.4DC4.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3 124F6 ; [.4DC5.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA 124F7 ; [.4DC6.0020.0002] # CUNEIFORM SIGN LAK-450 124F8 ; [.4DC7.0020.0002] # CUNEIFORM SIGN LAK-457 124F9 ; [.4DC8.0020.0002] # CUNEIFORM SIGN LAK-470 124FA ; [.4DC9.0020.0002] # CUNEIFORM SIGN LAK-483 124FB ; [.4DCA.0020.0002] # CUNEIFORM SIGN LAK-490 124FC ; [.4DCB.0020.0002] # CUNEIFORM SIGN LAK-492 124FD ; [.4DCC.0020.0002] # CUNEIFORM SIGN LAK-493 124FE ; [.4DCD.0020.0002] # CUNEIFORM SIGN LAK-495 124FF ; [.4DCE.0020.0002] # CUNEIFORM SIGN LAK-550 12500 ; [.4DCF.0020.0002] # CUNEIFORM SIGN LAK-608 12501 ; [.4DD0.0020.0002] # CUNEIFORM SIGN LAK-617 12502 ; [.4DD1.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES ASH 12503 ; [.4DD2.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES BAD 12504 ; [.4DD3.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU 12505 ; [.4DD4.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES KU3 12506 ; [.4DD5.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES LA 12507 ; [.4DD6.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TAR 12508 ; [.4DD7.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TE 12509 ; [.4DD8.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES U2 1250A ; [.4DD9.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES UD 1250B ; [.4DDA.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES URUDA 1250C ; [.4DDB.0020.0002] # CUNEIFORM SIGN LAK-636 1250D ; [.4DDC.0020.0002] # CUNEIFORM SIGN LAK-648 1250E ; [.4DDD.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES DUB 1250F ; [.4DDE.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES GA 12510 ; [.4DDF.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI 12511 ; [.4DE0.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI GUNU 12512 ; [.4DE1.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES NI 12513 ; [.4DE2.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3 12514 ; [.4DE3.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI 12515 ; [.4DE4.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES UD 12516 ; [.4DE5.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES URUDA 12517 ; [.4DE6.0020.0002] # CUNEIFORM SIGN LAK-724 12518 ; [.4DE7.0020.0002] # CUNEIFORM SIGN LAK-749 12519 ; [.4DE8.0020.0002] # CUNEIFORM SIGN LU2 GUNU TIMES ASH 1251A ; [.4DE9.0020.0002] # CUNEIFORM SIGN LU2 TIMES DISH 1251B ; [.4DEA.0020.0002] # CUNEIFORM SIGN LU2 TIMES HAL 1251C ; [.4DEB.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP 1251D ; [.4DEC.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3 1251E ; [.4DED.0020.0002] # CUNEIFORM SIGN LU2 TIMES TAK4 1251F ; [.4DEE.0020.0002] # CUNEIFORM SIGN MI PLUS ZA7 12520 ; [.4DEF.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES GA 12521 ; [.4DF0.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK 12522 ; [.4DF1.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES DIM GUNU 12523 ; [.4DF2.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GISH 12524 ; [.4DF3.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUL 12525 ; [.4DF4.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES HI 12526 ; [.4DF5.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES KESH2 12527 ; [.4DF6.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES LAK-050 12528 ; [.4DF7.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES MASH 12529 ; [.4DF8.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP 1252A ; [.4DF9.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U 1252B ; [.4DFA.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U PLUS U 1252C ; [.4DFB.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES URUDA 1252D ; [.4DFC.0020.0002] # CUNEIFORM SIGN SAG GUNU TIMES HA 1252E ; [.4DFD.0020.0002] # CUNEIFORM SIGN SAG TIMES EN 1252F ; [.4DFE.0020.0002] # CUNEIFORM SIGN SAG TIMES SHE AT LEFT 12530 ; [.4DFF.0020.0002] # CUNEIFORM SIGN SAG TIMES TAK4 12531 ; [.4E00.0020.0002] # CUNEIFORM SIGN SHA6 TENU 12532 ; [.4E01.0020.0002] # CUNEIFORM SIGN SHE OVER SHE 12533 ; [.4E02.0020.0002] # CUNEIFORM SIGN SHE PLUS HUB2 12534 ; [.4E03.0020.0002] # CUNEIFORM SIGN SHE PLUS NAM2 12535 ; [.4E04.0020.0002] # CUNEIFORM SIGN SHE PLUS SAR 12536 ; [.4E05.0020.0002] # CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI 12537 ; [.4E06.0020.0002] # CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN 12538 ; [.4E07.0020.0002] # CUNEIFORM SIGN SI TIMES TAK4 12539 ; [.4E08.0020.0002] # CUNEIFORM SIGN TAK4 PLUS SAG 1253A ; [.4E09.0020.0002] # CUNEIFORM SIGN TUM TIMES GAN2 TENU 1253B ; [.4E0A.0020.0002] # CUNEIFORM SIGN TUM TIMES THREE DISH 1253C ; [.4E0B.0020.0002] # CUNEIFORM SIGN UR2 INVERTED 1253D ; [.4E0C.0020.0002] # CUNEIFORM SIGN UR2 TIMES UD 1253E ; [.4E0D.0020.0002] # CUNEIFORM SIGN URU TIMES DARA3 1253F ; [.4E0E.0020.0002] # CUNEIFORM SIGN URU TIMES LAK-668 12540 ; [.4E0F.0020.0002] # CUNEIFORM SIGN URU TIMES LU3 12541 ; [.4E10.0020.0002] # CUNEIFORM SIGN ZA7 12542 ; [.4E11.0020.0002] # CUNEIFORM SIGN ZU OVER ZU PLUS SAR 12543 ; [.4E12.0020.0002] # CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU 13000 ; [.4E13.0020.0002] # EGYPTIAN HIEROGLYPH A001 13001 ; [.4E14.0020.0002] # EGYPTIAN HIEROGLYPH A002 13002 ; [.4E15.0020.0002] # EGYPTIAN HIEROGLYPH A003 13003 ; [.4E16.0020.0002] # EGYPTIAN HIEROGLYPH A004 13004 ; [.4E17.0020.0002] # EGYPTIAN HIEROGLYPH A005 13005 ; [.4E18.0020.0002] # EGYPTIAN HIEROGLYPH A005A 13006 ; [.4E19.0020.0002] # EGYPTIAN HIEROGLYPH A006 13007 ; [.4E1A.0020.0002] # EGYPTIAN HIEROGLYPH A006A 13008 ; [.4E1B.0020.0002] # EGYPTIAN HIEROGLYPH A006B 13009 ; [.4E1C.0020.0002] # EGYPTIAN HIEROGLYPH A007 1300A ; [.4E1D.0020.0002] # EGYPTIAN HIEROGLYPH A008 1300B ; [.4E1E.0020.0002] # EGYPTIAN HIEROGLYPH A009 1300C ; [.4E1F.0020.0002] # EGYPTIAN HIEROGLYPH A010 1300D ; [.4E20.0020.0002] # EGYPTIAN HIEROGLYPH A011 1300E ; [.4E21.0020.0002] # EGYPTIAN HIEROGLYPH A012 1300F ; [.4E22.0020.0002] # EGYPTIAN HIEROGLYPH A013 13010 ; [.4E23.0020.0002] # EGYPTIAN HIEROGLYPH A014 13011 ; [.4E24.0020.0002] # EGYPTIAN HIEROGLYPH A014A 13012 ; [.4E25.0020.0002] # EGYPTIAN HIEROGLYPH A015 13013 ; [.4E26.0020.0002] # EGYPTIAN HIEROGLYPH A016 13014 ; [.4E27.0020.0002] # EGYPTIAN HIEROGLYPH A017 13015 ; [.4E28.0020.0002] # EGYPTIAN HIEROGLYPH A017A 13016 ; [.4E29.0020.0002] # EGYPTIAN HIEROGLYPH A018 13017 ; [.4E2A.0020.0002] # EGYPTIAN HIEROGLYPH A019 13018 ; [.4E2B.0020.0002] # EGYPTIAN HIEROGLYPH A020 13019 ; [.4E2C.0020.0002] # EGYPTIAN HIEROGLYPH A021 1301A ; [.4E2D.0020.0002] # EGYPTIAN HIEROGLYPH A022 1301B ; [.4E2E.0020.0002] # EGYPTIAN HIEROGLYPH A023 1301C ; [.4E2F.0020.0002] # EGYPTIAN HIEROGLYPH A024 1301D ; [.4E30.0020.0002] # EGYPTIAN HIEROGLYPH A025 1301E ; [.4E31.0020.0002] # EGYPTIAN HIEROGLYPH A026 1301F ; [.4E32.0020.0002] # EGYPTIAN HIEROGLYPH A027 13020 ; [.4E33.0020.0002] # EGYPTIAN HIEROGLYPH A028 13021 ; [.4E34.0020.0002] # EGYPTIAN HIEROGLYPH A029 13022 ; [.4E35.0020.0002] # EGYPTIAN HIEROGLYPH A030 13023 ; [.4E36.0020.0002] # EGYPTIAN HIEROGLYPH A031 13024 ; [.4E37.0020.0002] # EGYPTIAN HIEROGLYPH A032 13025 ; [.4E38.0020.0002] # EGYPTIAN HIEROGLYPH A032A 13026 ; [.4E39.0020.0002] # EGYPTIAN HIEROGLYPH A033 13027 ; [.4E3A.0020.0002] # EGYPTIAN HIEROGLYPH A034 13028 ; [.4E3B.0020.0002] # EGYPTIAN HIEROGLYPH A035 13029 ; [.4E3C.0020.0002] # EGYPTIAN HIEROGLYPH A036 1302A ; [.4E3D.0020.0002] # EGYPTIAN HIEROGLYPH A037 1302B ; [.4E3E.0020.0002] # EGYPTIAN HIEROGLYPH A038 1302C ; [.4E3F.0020.0002] # EGYPTIAN HIEROGLYPH A039 1302D ; [.4E40.0020.0002] # EGYPTIAN HIEROGLYPH A040 1302E ; [.4E41.0020.0002] # EGYPTIAN HIEROGLYPH A040A 1302F ; [.4E42.0020.0002] # EGYPTIAN HIEROGLYPH A041 13030 ; [.4E43.0020.0002] # EGYPTIAN HIEROGLYPH A042 13031 ; [.4E44.0020.0002] # EGYPTIAN HIEROGLYPH A042A 13032 ; [.4E45.0020.0002] # EGYPTIAN HIEROGLYPH A043 13033 ; [.4E46.0020.0002] # EGYPTIAN HIEROGLYPH A043A 13034 ; [.4E47.0020.0002] # EGYPTIAN HIEROGLYPH A044 13035 ; [.4E48.0020.0002] # EGYPTIAN HIEROGLYPH A045 13036 ; [.4E49.0020.0002] # EGYPTIAN HIEROGLYPH A045A 13037 ; [.4E4A.0020.0002] # EGYPTIAN HIEROGLYPH A046 13038 ; [.4E4B.0020.0002] # EGYPTIAN HIEROGLYPH A047 13039 ; [.4E4C.0020.0002] # EGYPTIAN HIEROGLYPH A048 1303A ; [.4E4D.0020.0002] # EGYPTIAN HIEROGLYPH A049 1303B ; [.4E4E.0020.0002] # EGYPTIAN HIEROGLYPH A050 1303C ; [.4E4F.0020.0002] # EGYPTIAN HIEROGLYPH A051 1303D ; [.4E50.0020.0002] # EGYPTIAN HIEROGLYPH A052 1303E ; [.4E51.0020.0002] # EGYPTIAN HIEROGLYPH A053 1303F ; [.4E52.0020.0002] # EGYPTIAN HIEROGLYPH A054 13040 ; [.4E53.0020.0002] # EGYPTIAN HIEROGLYPH A055 13041 ; [.4E54.0020.0002] # EGYPTIAN HIEROGLYPH A056 13042 ; [.4E55.0020.0002] # EGYPTIAN HIEROGLYPH A057 13043 ; [.4E56.0020.0002] # EGYPTIAN HIEROGLYPH A058 13044 ; [.4E57.0020.0002] # EGYPTIAN HIEROGLYPH A059 13045 ; [.4E58.0020.0002] # EGYPTIAN HIEROGLYPH A060 13046 ; [.4E59.0020.0002] # EGYPTIAN HIEROGLYPH A061 13047 ; [.4E5A.0020.0002] # EGYPTIAN HIEROGLYPH A062 13048 ; [.4E5B.0020.0002] # EGYPTIAN HIEROGLYPH A063 13049 ; [.4E5C.0020.0002] # EGYPTIAN HIEROGLYPH A064 1304A ; [.4E5D.0020.0002] # EGYPTIAN HIEROGLYPH A065 1304B ; [.4E5E.0020.0002] # EGYPTIAN HIEROGLYPH A066 1304C ; [.4E5F.0020.0002] # EGYPTIAN HIEROGLYPH A067 1304D ; [.4E60.0020.0002] # EGYPTIAN HIEROGLYPH A068 1304E ; [.4E61.0020.0002] # EGYPTIAN HIEROGLYPH A069 1304F ; [.4E62.0020.0002] # EGYPTIAN HIEROGLYPH A070 13050 ; [.4E63.0020.0002] # EGYPTIAN HIEROGLYPH B001 13051 ; [.4E64.0020.0002] # EGYPTIAN HIEROGLYPH B002 13052 ; [.4E65.0020.0002] # EGYPTIAN HIEROGLYPH B003 13053 ; [.4E66.0020.0002] # EGYPTIAN HIEROGLYPH B004 13054 ; [.4E67.0020.0002] # EGYPTIAN HIEROGLYPH B005 13055 ; [.4E68.0020.0002] # EGYPTIAN HIEROGLYPH B005A 13056 ; [.4E69.0020.0002] # EGYPTIAN HIEROGLYPH B006 13057 ; [.4E6A.0020.0002] # EGYPTIAN HIEROGLYPH B007 13058 ; [.4E6B.0020.0002] # EGYPTIAN HIEROGLYPH B008 13059 ; [.4E6C.0020.0002] # EGYPTIAN HIEROGLYPH B009 1305A ; [.4E6D.0020.0002] # EGYPTIAN HIEROGLYPH C001 1305B ; [.4E6E.0020.0002] # EGYPTIAN HIEROGLYPH C002 1305C ; [.4E6F.0020.0002] # EGYPTIAN HIEROGLYPH C002A 1305D ; [.4E70.0020.0002] # EGYPTIAN HIEROGLYPH C002B 1305E ; [.4E71.0020.0002] # EGYPTIAN HIEROGLYPH C002C 1305F ; [.4E72.0020.0002] # EGYPTIAN HIEROGLYPH C003 13060 ; [.4E73.0020.0002] # EGYPTIAN HIEROGLYPH C004 13061 ; [.4E74.0020.0002] # EGYPTIAN HIEROGLYPH C005 13062 ; [.4E75.0020.0002] # EGYPTIAN HIEROGLYPH C006 13063 ; [.4E76.0020.0002] # EGYPTIAN HIEROGLYPH C007 13064 ; [.4E77.0020.0002] # EGYPTIAN HIEROGLYPH C008 13065 ; [.4E78.0020.0002] # EGYPTIAN HIEROGLYPH C009 13066 ; [.4E79.0020.0002] # EGYPTIAN HIEROGLYPH C010 13067 ; [.4E7A.0020.0002] # EGYPTIAN HIEROGLYPH C010A 13068 ; [.4E7B.0020.0002] # EGYPTIAN HIEROGLYPH C011 13069 ; [.4E7C.0020.0002] # EGYPTIAN HIEROGLYPH C012 1306A ; [.4E7D.0020.0002] # EGYPTIAN HIEROGLYPH C013 1306B ; [.4E7E.0020.0002] # EGYPTIAN HIEROGLYPH C014 1306C ; [.4E7F.0020.0002] # EGYPTIAN HIEROGLYPH C015 1306D ; [.4E80.0020.0002] # EGYPTIAN HIEROGLYPH C016 1306E ; [.4E81.0020.0002] # EGYPTIAN HIEROGLYPH C017 1306F ; [.4E82.0020.0002] # EGYPTIAN HIEROGLYPH C018 13070 ; [.4E83.0020.0002] # EGYPTIAN HIEROGLYPH C019 13071 ; [.4E84.0020.0002] # EGYPTIAN HIEROGLYPH C020 13072 ; [.4E85.0020.0002] # EGYPTIAN HIEROGLYPH C021 13073 ; [.4E86.0020.0002] # EGYPTIAN HIEROGLYPH C022 13074 ; [.4E87.0020.0002] # EGYPTIAN HIEROGLYPH C023 13075 ; [.4E88.0020.0002] # EGYPTIAN HIEROGLYPH C024 13076 ; [.4E89.0020.0002] # EGYPTIAN HIEROGLYPH D001 13077 ; [.4E8A.0020.0002] # EGYPTIAN HIEROGLYPH D002 13078 ; [.4E8B.0020.0002] # EGYPTIAN HIEROGLYPH D003 13079 ; [.4E8C.0020.0002] # EGYPTIAN HIEROGLYPH D004 1307A ; [.4E8D.0020.0002] # EGYPTIAN HIEROGLYPH D005 1307B ; [.4E8E.0020.0002] # EGYPTIAN HIEROGLYPH D006 1307C ; [.4E8F.0020.0002] # EGYPTIAN HIEROGLYPH D007 1307D ; [.4E90.0020.0002] # EGYPTIAN HIEROGLYPH D008 1307E ; [.4E91.0020.0002] # EGYPTIAN HIEROGLYPH D008A 1307F ; [.4E92.0020.0002] # EGYPTIAN HIEROGLYPH D009 13080 ; [.4E93.0020.0002] # EGYPTIAN HIEROGLYPH D010 13081 ; [.4E94.0020.0002] # EGYPTIAN HIEROGLYPH D011 13082 ; [.4E95.0020.0002] # EGYPTIAN HIEROGLYPH D012 13083 ; [.4E96.0020.0002] # EGYPTIAN HIEROGLYPH D013 13084 ; [.4E97.0020.0002] # EGYPTIAN HIEROGLYPH D014 13085 ; [.4E98.0020.0002] # EGYPTIAN HIEROGLYPH D015 13086 ; [.4E99.0020.0002] # EGYPTIAN HIEROGLYPH D016 13087 ; [.4E9A.0020.0002] # EGYPTIAN HIEROGLYPH D017 13088 ; [.4E9B.0020.0002] # EGYPTIAN HIEROGLYPH D018 13089 ; [.4E9C.0020.0002] # EGYPTIAN HIEROGLYPH D019 1308A ; [.4E9D.0020.0002] # EGYPTIAN HIEROGLYPH D020 1308B ; [.4E9E.0020.0002] # EGYPTIAN HIEROGLYPH D021 1308C ; [.4E9F.0020.0002] # EGYPTIAN HIEROGLYPH D022 1308D ; [.4EA0.0020.0002] # EGYPTIAN HIEROGLYPH D023 1308E ; [.4EA1.0020.0002] # EGYPTIAN HIEROGLYPH D024 1308F ; [.4EA2.0020.0002] # EGYPTIAN HIEROGLYPH D025 13090 ; [.4EA3.0020.0002] # EGYPTIAN HIEROGLYPH D026 13091 ; [.4EA4.0020.0002] # EGYPTIAN HIEROGLYPH D027 13092 ; [.4EA5.0020.0002] # EGYPTIAN HIEROGLYPH D027A 13093 ; [.4EA6.0020.0002] # EGYPTIAN HIEROGLYPH D028 13094 ; [.4EA7.0020.0002] # EGYPTIAN HIEROGLYPH D029 13095 ; [.4EA8.0020.0002] # EGYPTIAN HIEROGLYPH D030 13096 ; [.4EA9.0020.0002] # EGYPTIAN HIEROGLYPH D031 13097 ; [.4EAA.0020.0002] # EGYPTIAN HIEROGLYPH D031A 13098 ; [.4EAB.0020.0002] # EGYPTIAN HIEROGLYPH D032 13099 ; [.4EAC.0020.0002] # EGYPTIAN HIEROGLYPH D033 1309A ; [.4EAD.0020.0002] # EGYPTIAN HIEROGLYPH D034 1309B ; [.4EAE.0020.0002] # EGYPTIAN HIEROGLYPH D034A 1309C ; [.4EAF.0020.0002] # EGYPTIAN HIEROGLYPH D035 1309D ; [.4EB0.0020.0002] # EGYPTIAN HIEROGLYPH D036 1309E ; [.4EB1.0020.0002] # EGYPTIAN HIEROGLYPH D037 1309F ; [.4EB2.0020.0002] # EGYPTIAN HIEROGLYPH D038 130A0 ; [.4EB3.0020.0002] # EGYPTIAN HIEROGLYPH D039 130A1 ; [.4EB4.0020.0002] # EGYPTIAN HIEROGLYPH D040 130A2 ; [.4EB5.0020.0002] # EGYPTIAN HIEROGLYPH D041 130A3 ; [.4EB6.0020.0002] # EGYPTIAN HIEROGLYPH D042 130A4 ; [.4EB7.0020.0002] # EGYPTIAN HIEROGLYPH D043 130A5 ; [.4EB8.0020.0002] # EGYPTIAN HIEROGLYPH D044 130A6 ; [.4EB9.0020.0002] # EGYPTIAN HIEROGLYPH D045 130A7 ; [.4EBA.0020.0002] # EGYPTIAN HIEROGLYPH D046 130A8 ; [.4EBB.0020.0002] # EGYPTIAN HIEROGLYPH D046A 130A9 ; [.4EBC.0020.0002] # EGYPTIAN HIEROGLYPH D047 130AA ; [.4EBD.0020.0002] # EGYPTIAN HIEROGLYPH D048 130AB ; [.4EBE.0020.0002] # EGYPTIAN HIEROGLYPH D048A 130AC ; [.4EBF.0020.0002] # EGYPTIAN HIEROGLYPH D049 130AD ; [.4EC0.0020.0002] # EGYPTIAN HIEROGLYPH D050 130AE ; [.4EC1.0020.0002] # EGYPTIAN HIEROGLYPH D050A 130AF ; [.4EC2.0020.0002] # EGYPTIAN HIEROGLYPH D050B 130B0 ; [.4EC3.0020.0002] # EGYPTIAN HIEROGLYPH D050C 130B1 ; [.4EC4.0020.0002] # EGYPTIAN HIEROGLYPH D050D 130B2 ; [.4EC5.0020.0002] # EGYPTIAN HIEROGLYPH D050E 130B3 ; [.4EC6.0020.0002] # EGYPTIAN HIEROGLYPH D050F 130B4 ; [.4EC7.0020.0002] # EGYPTIAN HIEROGLYPH D050G 130B5 ; [.4EC8.0020.0002] # EGYPTIAN HIEROGLYPH D050H 130B6 ; [.4EC9.0020.0002] # EGYPTIAN HIEROGLYPH D050I 130B7 ; [.4ECA.0020.0002] # EGYPTIAN HIEROGLYPH D051 130B8 ; [.4ECB.0020.0002] # EGYPTIAN HIEROGLYPH D052 130B9 ; [.4ECC.0020.0002] # EGYPTIAN HIEROGLYPH D052A 130BA ; [.4ECD.0020.0002] # EGYPTIAN HIEROGLYPH D053 130BB ; [.4ECE.0020.0002] # EGYPTIAN HIEROGLYPH D054 130BC ; [.4ECF.0020.0002] # EGYPTIAN HIEROGLYPH D054A 130BD ; [.4ED0.0020.0002] # EGYPTIAN HIEROGLYPH D055 130BE ; [.4ED1.0020.0002] # EGYPTIAN HIEROGLYPH D056 130BF ; [.4ED2.0020.0002] # EGYPTIAN HIEROGLYPH D057 130C0 ; [.4ED3.0020.0002] # EGYPTIAN HIEROGLYPH D058 130C1 ; [.4ED4.0020.0002] # EGYPTIAN HIEROGLYPH D059 130C2 ; [.4ED5.0020.0002] # EGYPTIAN HIEROGLYPH D060 130C3 ; [.4ED6.0020.0002] # EGYPTIAN HIEROGLYPH D061 130C4 ; [.4ED7.0020.0002] # EGYPTIAN HIEROGLYPH D062 130C5 ; [.4ED8.0020.0002] # EGYPTIAN HIEROGLYPH D063 130C6 ; [.4ED9.0020.0002] # EGYPTIAN HIEROGLYPH D064 130C7 ; [.4EDA.0020.0002] # EGYPTIAN HIEROGLYPH D065 130C8 ; [.4EDB.0020.0002] # EGYPTIAN HIEROGLYPH D066 130C9 ; [.4EDC.0020.0002] # EGYPTIAN HIEROGLYPH D067 130CA ; [.4EDD.0020.0002] # EGYPTIAN HIEROGLYPH D067A 130CB ; [.4EDE.0020.0002] # EGYPTIAN HIEROGLYPH D067B 130CC ; [.4EDF.0020.0002] # EGYPTIAN HIEROGLYPH D067C 130CD ; [.4EE0.0020.0002] # EGYPTIAN HIEROGLYPH D067D 130CE ; [.4EE1.0020.0002] # EGYPTIAN HIEROGLYPH D067E 130CF ; [.4EE2.0020.0002] # EGYPTIAN HIEROGLYPH D067F 130D0 ; [.4EE3.0020.0002] # EGYPTIAN HIEROGLYPH D067G 130D1 ; [.4EE4.0020.0002] # EGYPTIAN HIEROGLYPH D067H 130D2 ; [.4EE5.0020.0002] # EGYPTIAN HIEROGLYPH E001 130D3 ; [.4EE6.0020.0002] # EGYPTIAN HIEROGLYPH E002 130D4 ; [.4EE7.0020.0002] # EGYPTIAN HIEROGLYPH E003 130D5 ; [.4EE8.0020.0002] # EGYPTIAN HIEROGLYPH E004 130D6 ; [.4EE9.0020.0002] # EGYPTIAN HIEROGLYPH E005 130D7 ; [.4EEA.0020.0002] # EGYPTIAN HIEROGLYPH E006 130D8 ; [.4EEB.0020.0002] # EGYPTIAN HIEROGLYPH E007 130D9 ; [.4EEC.0020.0002] # EGYPTIAN HIEROGLYPH E008 130DA ; [.4EED.0020.0002] # EGYPTIAN HIEROGLYPH E008A 130DB ; [.4EEE.0020.0002] # EGYPTIAN HIEROGLYPH E009 130DC ; [.4EEF.0020.0002] # EGYPTIAN HIEROGLYPH E009A 130DD ; [.4EF0.0020.0002] # EGYPTIAN HIEROGLYPH E010 130DE ; [.4EF1.0020.0002] # EGYPTIAN HIEROGLYPH E011 130DF ; [.4EF2.0020.0002] # EGYPTIAN HIEROGLYPH E012 130E0 ; [.4EF3.0020.0002] # EGYPTIAN HIEROGLYPH E013 130E1 ; [.4EF4.0020.0002] # EGYPTIAN HIEROGLYPH E014 130E2 ; [.4EF5.0020.0002] # EGYPTIAN HIEROGLYPH E015 130E3 ; [.4EF6.0020.0002] # EGYPTIAN HIEROGLYPH E016 130E4 ; [.4EF7.0020.0002] # EGYPTIAN HIEROGLYPH E016A 130E5 ; [.4EF8.0020.0002] # EGYPTIAN HIEROGLYPH E017 130E6 ; [.4EF9.0020.0002] # EGYPTIAN HIEROGLYPH E017A 130E7 ; [.4EFA.0020.0002] # EGYPTIAN HIEROGLYPH E018 130E8 ; [.4EFB.0020.0002] # EGYPTIAN HIEROGLYPH E019 130E9 ; [.4EFC.0020.0002] # EGYPTIAN HIEROGLYPH E020 130EA ; [.4EFD.0020.0002] # EGYPTIAN HIEROGLYPH E020A 130EB ; [.4EFE.0020.0002] # EGYPTIAN HIEROGLYPH E021 130EC ; [.4EFF.0020.0002] # EGYPTIAN HIEROGLYPH E022 130ED ; [.4F00.0020.0002] # EGYPTIAN HIEROGLYPH E023 130EE ; [.4F01.0020.0002] # EGYPTIAN HIEROGLYPH E024 130EF ; [.4F02.0020.0002] # EGYPTIAN HIEROGLYPH E025 130F0 ; [.4F03.0020.0002] # EGYPTIAN HIEROGLYPH E026 130F1 ; [.4F04.0020.0002] # EGYPTIAN HIEROGLYPH E027 130F2 ; [.4F05.0020.0002] # EGYPTIAN HIEROGLYPH E028 130F3 ; [.4F06.0020.0002] # EGYPTIAN HIEROGLYPH E028A 130F4 ; [.4F07.0020.0002] # EGYPTIAN HIEROGLYPH E029 130F5 ; [.4F08.0020.0002] # EGYPTIAN HIEROGLYPH E030 130F6 ; [.4F09.0020.0002] # EGYPTIAN HIEROGLYPH E031 130F7 ; [.4F0A.0020.0002] # EGYPTIAN HIEROGLYPH E032 130F8 ; [.4F0B.0020.0002] # EGYPTIAN HIEROGLYPH E033 130F9 ; [.4F0C.0020.0002] # EGYPTIAN HIEROGLYPH E034 130FA ; [.4F0D.0020.0002] # EGYPTIAN HIEROGLYPH E034A 130FB ; [.4F0E.0020.0002] # EGYPTIAN HIEROGLYPH E036 130FC ; [.4F0F.0020.0002] # EGYPTIAN HIEROGLYPH E037 130FD ; [.4F10.0020.0002] # EGYPTIAN HIEROGLYPH E038 130FE ; [.4F11.0020.0002] # EGYPTIAN HIEROGLYPH F001 130FF ; [.4F12.0020.0002] # EGYPTIAN HIEROGLYPH F001A 13100 ; [.4F13.0020.0002] # EGYPTIAN HIEROGLYPH F002 13101 ; [.4F14.0020.0002] # EGYPTIAN HIEROGLYPH F003 13102 ; [.4F15.0020.0002] # EGYPTIAN HIEROGLYPH F004 13103 ; [.4F16.0020.0002] # EGYPTIAN HIEROGLYPH F005 13104 ; [.4F17.0020.0002] # EGYPTIAN HIEROGLYPH F006 13105 ; [.4F18.0020.0002] # EGYPTIAN HIEROGLYPH F007 13106 ; [.4F19.0020.0002] # EGYPTIAN HIEROGLYPH F008 13107 ; [.4F1A.0020.0002] # EGYPTIAN HIEROGLYPH F009 13108 ; [.4F1B.0020.0002] # EGYPTIAN HIEROGLYPH F010 13109 ; [.4F1C.0020.0002] # EGYPTIAN HIEROGLYPH F011 1310A ; [.4F1D.0020.0002] # EGYPTIAN HIEROGLYPH F012 1310B ; [.4F1E.0020.0002] # EGYPTIAN HIEROGLYPH F013 1310C ; [.4F1F.0020.0002] # EGYPTIAN HIEROGLYPH F013A 1310D ; [.4F20.0020.0002] # EGYPTIAN HIEROGLYPH F014 1310E ; [.4F21.0020.0002] # EGYPTIAN HIEROGLYPH F015 1310F ; [.4F22.0020.0002] # EGYPTIAN HIEROGLYPH F016 13110 ; [.4F23.0020.0002] # EGYPTIAN HIEROGLYPH F017 13111 ; [.4F24.0020.0002] # EGYPTIAN HIEROGLYPH F018 13112 ; [.4F25.0020.0002] # EGYPTIAN HIEROGLYPH F019 13113 ; [.4F26.0020.0002] # EGYPTIAN HIEROGLYPH F020 13114 ; [.4F27.0020.0002] # EGYPTIAN HIEROGLYPH F021 13115 ; [.4F28.0020.0002] # EGYPTIAN HIEROGLYPH F021A 13116 ; [.4F29.0020.0002] # EGYPTIAN HIEROGLYPH F022 13117 ; [.4F2A.0020.0002] # EGYPTIAN HIEROGLYPH F023 13118 ; [.4F2B.0020.0002] # EGYPTIAN HIEROGLYPH F024 13119 ; [.4F2C.0020.0002] # EGYPTIAN HIEROGLYPH F025 1311A ; [.4F2D.0020.0002] # EGYPTIAN HIEROGLYPH F026 1311B ; [.4F2E.0020.0002] # EGYPTIAN HIEROGLYPH F027 1311C ; [.4F2F.0020.0002] # EGYPTIAN HIEROGLYPH F028 1311D ; [.4F30.0020.0002] # EGYPTIAN HIEROGLYPH F029 1311E ; [.4F31.0020.0002] # EGYPTIAN HIEROGLYPH F030 1311F ; [.4F32.0020.0002] # EGYPTIAN HIEROGLYPH F031 13120 ; [.4F33.0020.0002] # EGYPTIAN HIEROGLYPH F031A 13121 ; [.4F34.0020.0002] # EGYPTIAN HIEROGLYPH F032 13122 ; [.4F35.0020.0002] # EGYPTIAN HIEROGLYPH F033 13123 ; [.4F36.0020.0002] # EGYPTIAN HIEROGLYPH F034 13124 ; [.4F37.0020.0002] # EGYPTIAN HIEROGLYPH F035 13125 ; [.4F38.0020.0002] # EGYPTIAN HIEROGLYPH F036 13126 ; [.4F39.0020.0002] # EGYPTIAN HIEROGLYPH F037 13127 ; [.4F3A.0020.0002] # EGYPTIAN HIEROGLYPH F037A 13128 ; [.4F3B.0020.0002] # EGYPTIAN HIEROGLYPH F038 13129 ; [.4F3C.0020.0002] # EGYPTIAN HIEROGLYPH F038A 1312A ; [.4F3D.0020.0002] # EGYPTIAN HIEROGLYPH F039 1312B ; [.4F3E.0020.0002] # EGYPTIAN HIEROGLYPH F040 1312C ; [.4F3F.0020.0002] # EGYPTIAN HIEROGLYPH F041 1312D ; [.4F40.0020.0002] # EGYPTIAN HIEROGLYPH F042 1312E ; [.4F41.0020.0002] # EGYPTIAN HIEROGLYPH F043 1312F ; [.4F42.0020.0002] # EGYPTIAN HIEROGLYPH F044 13130 ; [.4F43.0020.0002] # EGYPTIAN HIEROGLYPH F045 13131 ; [.4F44.0020.0002] # EGYPTIAN HIEROGLYPH F045A 13132 ; [.4F45.0020.0002] # EGYPTIAN HIEROGLYPH F046 13133 ; [.4F46.0020.0002] # EGYPTIAN HIEROGLYPH F046A 13134 ; [.4F47.0020.0002] # EGYPTIAN HIEROGLYPH F047 13135 ; [.4F48.0020.0002] # EGYPTIAN HIEROGLYPH F047A 13136 ; [.4F49.0020.0002] # EGYPTIAN HIEROGLYPH F048 13137 ; [.4F4A.0020.0002] # EGYPTIAN HIEROGLYPH F049 13138 ; [.4F4B.0020.0002] # EGYPTIAN HIEROGLYPH F050 13139 ; [.4F4C.0020.0002] # EGYPTIAN HIEROGLYPH F051 1313A ; [.4F4D.0020.0002] # EGYPTIAN HIEROGLYPH F051A 1313B ; [.4F4E.0020.0002] # EGYPTIAN HIEROGLYPH F051B 1313C ; [.4F4F.0020.0002] # EGYPTIAN HIEROGLYPH F051C 1313D ; [.4F50.0020.0002] # EGYPTIAN HIEROGLYPH F052 1313E ; [.4F51.0020.0002] # EGYPTIAN HIEROGLYPH F053 1313F ; [.4F52.0020.0002] # EGYPTIAN HIEROGLYPH G001 13140 ; [.4F53.0020.0002] # EGYPTIAN HIEROGLYPH G002 13141 ; [.4F54.0020.0002] # EGYPTIAN HIEROGLYPH G003 13142 ; [.4F55.0020.0002] # EGYPTIAN HIEROGLYPH G004 13143 ; [.4F56.0020.0002] # EGYPTIAN HIEROGLYPH G005 13144 ; [.4F57.0020.0002] # EGYPTIAN HIEROGLYPH G006 13145 ; [.4F58.0020.0002] # EGYPTIAN HIEROGLYPH G006A 13146 ; [.4F59.0020.0002] # EGYPTIAN HIEROGLYPH G007 13147 ; [.4F5A.0020.0002] # EGYPTIAN HIEROGLYPH G007A 13148 ; [.4F5B.0020.0002] # EGYPTIAN HIEROGLYPH G007B 13149 ; [.4F5C.0020.0002] # EGYPTIAN HIEROGLYPH G008 1314A ; [.4F5D.0020.0002] # EGYPTIAN HIEROGLYPH G009 1314B ; [.4F5E.0020.0002] # EGYPTIAN HIEROGLYPH G010 1314C ; [.4F5F.0020.0002] # EGYPTIAN HIEROGLYPH G011 1314D ; [.4F60.0020.0002] # EGYPTIAN HIEROGLYPH G011A 1314E ; [.4F61.0020.0002] # EGYPTIAN HIEROGLYPH G012 1314F ; [.4F62.0020.0002] # EGYPTIAN HIEROGLYPH G013 13150 ; [.4F63.0020.0002] # EGYPTIAN HIEROGLYPH G014 13151 ; [.4F64.0020.0002] # EGYPTIAN HIEROGLYPH G015 13152 ; [.4F65.0020.0002] # EGYPTIAN HIEROGLYPH G016 13153 ; [.4F66.0020.0002] # EGYPTIAN HIEROGLYPH G017 13154 ; [.4F67.0020.0002] # EGYPTIAN HIEROGLYPH G018 13155 ; [.4F68.0020.0002] # EGYPTIAN HIEROGLYPH G019 13156 ; [.4F69.0020.0002] # EGYPTIAN HIEROGLYPH G020 13157 ; [.4F6A.0020.0002] # EGYPTIAN HIEROGLYPH G020A 13158 ; [.4F6B.0020.0002] # EGYPTIAN HIEROGLYPH G021 13159 ; [.4F6C.0020.0002] # EGYPTIAN HIEROGLYPH G022 1315A ; [.4F6D.0020.0002] # EGYPTIAN HIEROGLYPH G023 1315B ; [.4F6E.0020.0002] # EGYPTIAN HIEROGLYPH G024 1315C ; [.4F6F.0020.0002] # EGYPTIAN HIEROGLYPH G025 1315D ; [.4F70.0020.0002] # EGYPTIAN HIEROGLYPH G026 1315E ; [.4F71.0020.0002] # EGYPTIAN HIEROGLYPH G026A 1315F ; [.4F72.0020.0002] # EGYPTIAN HIEROGLYPH G027 13160 ; [.4F73.0020.0002] # EGYPTIAN HIEROGLYPH G028 13161 ; [.4F74.0020.0002] # EGYPTIAN HIEROGLYPH G029 13162 ; [.4F75.0020.0002] # EGYPTIAN HIEROGLYPH G030 13163 ; [.4F76.0020.0002] # EGYPTIAN HIEROGLYPH G031 13164 ; [.4F77.0020.0002] # EGYPTIAN HIEROGLYPH G032 13165 ; [.4F78.0020.0002] # EGYPTIAN HIEROGLYPH G033 13166 ; [.4F79.0020.0002] # EGYPTIAN HIEROGLYPH G034 13167 ; [.4F7A.0020.0002] # EGYPTIAN HIEROGLYPH G035 13168 ; [.4F7B.0020.0002] # EGYPTIAN HIEROGLYPH G036 13169 ; [.4F7C.0020.0002] # EGYPTIAN HIEROGLYPH G036A 1316A ; [.4F7D.0020.0002] # EGYPTIAN HIEROGLYPH G037 1316B ; [.4F7E.0020.0002] # EGYPTIAN HIEROGLYPH G037A 1316C ; [.4F7F.0020.0002] # EGYPTIAN HIEROGLYPH G038 1316D ; [.4F80.0020.0002] # EGYPTIAN HIEROGLYPH G039 1316E ; [.4F81.0020.0002] # EGYPTIAN HIEROGLYPH G040 1316F ; [.4F82.0020.0002] # EGYPTIAN HIEROGLYPH G041 13170 ; [.4F83.0020.0002] # EGYPTIAN HIEROGLYPH G042 13171 ; [.4F84.0020.0002] # EGYPTIAN HIEROGLYPH G043 13172 ; [.4F85.0020.0002] # EGYPTIAN HIEROGLYPH G043A 13173 ; [.4F86.0020.0002] # EGYPTIAN HIEROGLYPH G044 13174 ; [.4F87.0020.0002] # EGYPTIAN HIEROGLYPH G045 13175 ; [.4F88.0020.0002] # EGYPTIAN HIEROGLYPH G045A 13176 ; [.4F89.0020.0002] # EGYPTIAN HIEROGLYPH G046 13177 ; [.4F8A.0020.0002] # EGYPTIAN HIEROGLYPH G047 13178 ; [.4F8B.0020.0002] # EGYPTIAN HIEROGLYPH G048 13179 ; [.4F8C.0020.0002] # EGYPTIAN HIEROGLYPH G049 1317A ; [.4F8D.0020.0002] # EGYPTIAN HIEROGLYPH G050 1317B ; [.4F8E.0020.0002] # EGYPTIAN HIEROGLYPH G051 1317C ; [.4F8F.0020.0002] # EGYPTIAN HIEROGLYPH G052 1317D ; [.4F90.0020.0002] # EGYPTIAN HIEROGLYPH G053 1317E ; [.4F91.0020.0002] # EGYPTIAN HIEROGLYPH G054 1317F ; [.4F92.0020.0002] # EGYPTIAN HIEROGLYPH H001 13180 ; [.4F93.0020.0002] # EGYPTIAN HIEROGLYPH H002 13181 ; [.4F94.0020.0002] # EGYPTIAN HIEROGLYPH H003 13182 ; [.4F95.0020.0002] # EGYPTIAN HIEROGLYPH H004 13183 ; [.4F96.0020.0002] # EGYPTIAN HIEROGLYPH H005 13184 ; [.4F97.0020.0002] # EGYPTIAN HIEROGLYPH H006 13185 ; [.4F98.0020.0002] # EGYPTIAN HIEROGLYPH H006A 13186 ; [.4F99.0020.0002] # EGYPTIAN HIEROGLYPH H007 13187 ; [.4F9A.0020.0002] # EGYPTIAN HIEROGLYPH H008 13188 ; [.4F9B.0020.0002] # EGYPTIAN HIEROGLYPH I001 13189 ; [.4F9C.0020.0002] # EGYPTIAN HIEROGLYPH I002 1318A ; [.4F9D.0020.0002] # EGYPTIAN HIEROGLYPH I003 1318B ; [.4F9E.0020.0002] # EGYPTIAN HIEROGLYPH I004 1318C ; [.4F9F.0020.0002] # EGYPTIAN HIEROGLYPH I005 1318D ; [.4FA0.0020.0002] # EGYPTIAN HIEROGLYPH I005A 1318E ; [.4FA1.0020.0002] # EGYPTIAN HIEROGLYPH I006 1318F ; [.4FA2.0020.0002] # EGYPTIAN HIEROGLYPH I007 13190 ; [.4FA3.0020.0002] # EGYPTIAN HIEROGLYPH I008 13191 ; [.4FA4.0020.0002] # EGYPTIAN HIEROGLYPH I009 13192 ; [.4FA5.0020.0002] # EGYPTIAN HIEROGLYPH I009A 13193 ; [.4FA6.0020.0002] # EGYPTIAN HIEROGLYPH I010 13194 ; [.4FA7.0020.0002] # EGYPTIAN HIEROGLYPH I010A 13195 ; [.4FA8.0020.0002] # EGYPTIAN HIEROGLYPH I011 13196 ; [.4FA9.0020.0002] # EGYPTIAN HIEROGLYPH I011A 13197 ; [.4FAA.0020.0002] # EGYPTIAN HIEROGLYPH I012 13198 ; [.4FAB.0020.0002] # EGYPTIAN HIEROGLYPH I013 13199 ; [.4FAC.0020.0002] # EGYPTIAN HIEROGLYPH I014 1319A ; [.4FAD.0020.0002] # EGYPTIAN HIEROGLYPH I015 1319B ; [.4FAE.0020.0002] # EGYPTIAN HIEROGLYPH K001 1319C ; [.4FAF.0020.0002] # EGYPTIAN HIEROGLYPH K002 1319D ; [.4FB0.0020.0002] # EGYPTIAN HIEROGLYPH K003 1319E ; [.4FB1.0020.0002] # EGYPTIAN HIEROGLYPH K004 1319F ; [.4FB2.0020.0002] # EGYPTIAN HIEROGLYPH K005 131A0 ; [.4FB3.0020.0002] # EGYPTIAN HIEROGLYPH K006 131A1 ; [.4FB4.0020.0002] # EGYPTIAN HIEROGLYPH K007 131A2 ; [.4FB5.0020.0002] # EGYPTIAN HIEROGLYPH K008 131A3 ; [.4FB6.0020.0002] # EGYPTIAN HIEROGLYPH L001 131A4 ; [.4FB7.0020.0002] # EGYPTIAN HIEROGLYPH L002 131A5 ; [.4FB8.0020.0002] # EGYPTIAN HIEROGLYPH L002A 131A6 ; [.4FB9.0020.0002] # EGYPTIAN HIEROGLYPH L003 131A7 ; [.4FBA.0020.0002] # EGYPTIAN HIEROGLYPH L004 131A8 ; [.4FBB.0020.0002] # EGYPTIAN HIEROGLYPH L005 131A9 ; [.4FBC.0020.0002] # EGYPTIAN HIEROGLYPH L006 131AA ; [.4FBD.0020.0002] # EGYPTIAN HIEROGLYPH L006A 131AB ; [.4FBE.0020.0002] # EGYPTIAN HIEROGLYPH L007 131AC ; [.4FBF.0020.0002] # EGYPTIAN HIEROGLYPH L008 131AD ; [.4FC0.0020.0002] # EGYPTIAN HIEROGLYPH M001 131AE ; [.4FC1.0020.0002] # EGYPTIAN HIEROGLYPH M001A 131AF ; [.4FC2.0020.0002] # EGYPTIAN HIEROGLYPH M001B 131B0 ; [.4FC3.0020.0002] # EGYPTIAN HIEROGLYPH M002 131B1 ; [.4FC4.0020.0002] # EGYPTIAN HIEROGLYPH M003 131B2 ; [.4FC5.0020.0002] # EGYPTIAN HIEROGLYPH M003A 131B3 ; [.4FC6.0020.0002] # EGYPTIAN HIEROGLYPH M004 131B4 ; [.4FC7.0020.0002] # EGYPTIAN HIEROGLYPH M005 131B5 ; [.4FC8.0020.0002] # EGYPTIAN HIEROGLYPH M006 131B6 ; [.4FC9.0020.0002] # EGYPTIAN HIEROGLYPH M007 131B7 ; [.4FCA.0020.0002] # EGYPTIAN HIEROGLYPH M008 131B8 ; [.4FCB.0020.0002] # EGYPTIAN HIEROGLYPH M009 131B9 ; [.4FCC.0020.0002] # EGYPTIAN HIEROGLYPH M010 131BA ; [.4FCD.0020.0002] # EGYPTIAN HIEROGLYPH M010A 131BB ; [.4FCE.0020.0002] # EGYPTIAN HIEROGLYPH M011 131BC ; [.4FCF.0020.0002] # EGYPTIAN HIEROGLYPH M012 131BD ; [.4FD0.0020.0002] # EGYPTIAN HIEROGLYPH M012A 131BE ; [.4FD1.0020.0002] # EGYPTIAN HIEROGLYPH M012B 131BF ; [.4FD2.0020.0002] # EGYPTIAN HIEROGLYPH M012C 131C0 ; [.4FD3.0020.0002] # EGYPTIAN HIEROGLYPH M012D 131C1 ; [.4FD4.0020.0002] # EGYPTIAN HIEROGLYPH M012E 131C2 ; [.4FD5.0020.0002] # EGYPTIAN HIEROGLYPH M012F 131C3 ; [.4FD6.0020.0002] # EGYPTIAN HIEROGLYPH M012G 131C4 ; [.4FD7.0020.0002] # EGYPTIAN HIEROGLYPH M012H 131C5 ; [.4FD8.0020.0002] # EGYPTIAN HIEROGLYPH M013 131C6 ; [.4FD9.0020.0002] # EGYPTIAN HIEROGLYPH M014 131C7 ; [.4FDA.0020.0002] # EGYPTIAN HIEROGLYPH M015 131C8 ; [.4FDB.0020.0002] # EGYPTIAN HIEROGLYPH M015A 131C9 ; [.4FDC.0020.0002] # EGYPTIAN HIEROGLYPH M016 131CA ; [.4FDD.0020.0002] # EGYPTIAN HIEROGLYPH M016A 131CB ; [.4FDE.0020.0002] # EGYPTIAN HIEROGLYPH M017 131CC ; [.4FDF.0020.0002] # EGYPTIAN HIEROGLYPH M017A 131CD ; [.4FE0.0020.0002] # EGYPTIAN HIEROGLYPH M018 131CE ; [.4FE1.0020.0002] # EGYPTIAN HIEROGLYPH M019 131CF ; [.4FE2.0020.0002] # EGYPTIAN HIEROGLYPH M020 131D0 ; [.4FE3.0020.0002] # EGYPTIAN HIEROGLYPH M021 131D1 ; [.4FE4.0020.0002] # EGYPTIAN HIEROGLYPH M022 131D2 ; [.4FE5.0020.0002] # EGYPTIAN HIEROGLYPH M022A 131D3 ; [.4FE6.0020.0002] # EGYPTIAN HIEROGLYPH M023 131D4 ; [.4FE7.0020.0002] # EGYPTIAN HIEROGLYPH M024 131D5 ; [.4FE8.0020.0002] # EGYPTIAN HIEROGLYPH M024A 131D6 ; [.4FE9.0020.0002] # EGYPTIAN HIEROGLYPH M025 131D7 ; [.4FEA.0020.0002] # EGYPTIAN HIEROGLYPH M026 131D8 ; [.4FEB.0020.0002] # EGYPTIAN HIEROGLYPH M027 131D9 ; [.4FEC.0020.0002] # EGYPTIAN HIEROGLYPH M028 131DA ; [.4FED.0020.0002] # EGYPTIAN HIEROGLYPH M028A 131DB ; [.4FEE.0020.0002] # EGYPTIAN HIEROGLYPH M029 131DC ; [.4FEF.0020.0002] # EGYPTIAN HIEROGLYPH M030 131DD ; [.4FF0.0020.0002] # EGYPTIAN HIEROGLYPH M031 131DE ; [.4FF1.0020.0002] # EGYPTIAN HIEROGLYPH M031A 131DF ; [.4FF2.0020.0002] # EGYPTIAN HIEROGLYPH M032 131E0 ; [.4FF3.0020.0002] # EGYPTIAN HIEROGLYPH M033 131E1 ; [.4FF4.0020.0002] # EGYPTIAN HIEROGLYPH M033A 131E2 ; [.4FF5.0020.0002] # EGYPTIAN HIEROGLYPH M033B 131E3 ; [.4FF6.0020.0002] # EGYPTIAN HIEROGLYPH M034 131E4 ; [.4FF7.0020.0002] # EGYPTIAN HIEROGLYPH M035 131E5 ; [.4FF8.0020.0002] # EGYPTIAN HIEROGLYPH M036 131E6 ; [.4FF9.0020.0002] # EGYPTIAN HIEROGLYPH M037 131E7 ; [.4FFA.0020.0002] # EGYPTIAN HIEROGLYPH M038 131E8 ; [.4FFB.0020.0002] # EGYPTIAN HIEROGLYPH M039 131E9 ; [.4FFC.0020.0002] # EGYPTIAN HIEROGLYPH M040 131EA ; [.4FFD.0020.0002] # EGYPTIAN HIEROGLYPH M040A 131EB ; [.4FFE.0020.0002] # EGYPTIAN HIEROGLYPH M041 131EC ; [.4FFF.0020.0002] # EGYPTIAN HIEROGLYPH M042 131ED ; [.5000.0020.0002] # EGYPTIAN HIEROGLYPH M043 131EE ; [.5001.0020.0002] # EGYPTIAN HIEROGLYPH M044 131EF ; [.5002.0020.0002] # EGYPTIAN HIEROGLYPH N001 131F0 ; [.5003.0020.0002] # EGYPTIAN HIEROGLYPH N002 131F1 ; [.5004.0020.0002] # EGYPTIAN HIEROGLYPH N003 131F2 ; [.5005.0020.0002] # EGYPTIAN HIEROGLYPH N004 131F3 ; [.5006.0020.0002] # EGYPTIAN HIEROGLYPH N005 131F4 ; [.5007.0020.0002] # EGYPTIAN HIEROGLYPH N006 131F5 ; [.5008.0020.0002] # EGYPTIAN HIEROGLYPH N007 131F6 ; [.5009.0020.0002] # EGYPTIAN HIEROGLYPH N008 131F7 ; [.500A.0020.0002] # EGYPTIAN HIEROGLYPH N009 131F8 ; [.500B.0020.0002] # EGYPTIAN HIEROGLYPH N010 131F9 ; [.500C.0020.0002] # EGYPTIAN HIEROGLYPH N011 131FA ; [.500D.0020.0002] # EGYPTIAN HIEROGLYPH N012 131FB ; [.500E.0020.0002] # EGYPTIAN HIEROGLYPH N013 131FC ; [.500F.0020.0002] # EGYPTIAN HIEROGLYPH N014 131FD ; [.5010.0020.0002] # EGYPTIAN HIEROGLYPH N015 131FE ; [.5011.0020.0002] # EGYPTIAN HIEROGLYPH N016 131FF ; [.5012.0020.0002] # EGYPTIAN HIEROGLYPH N017 13200 ; [.5013.0020.0002] # EGYPTIAN HIEROGLYPH N018 13201 ; [.5014.0020.0002] # EGYPTIAN HIEROGLYPH N018A 13202 ; [.5015.0020.0002] # EGYPTIAN HIEROGLYPH N018B 13203 ; [.5016.0020.0002] # EGYPTIAN HIEROGLYPH N019 13204 ; [.5017.0020.0002] # EGYPTIAN HIEROGLYPH N020 13205 ; [.5018.0020.0002] # EGYPTIAN HIEROGLYPH N021 13206 ; [.5019.0020.0002] # EGYPTIAN HIEROGLYPH N022 13207 ; [.501A.0020.0002] # EGYPTIAN HIEROGLYPH N023 13208 ; [.501B.0020.0002] # EGYPTIAN HIEROGLYPH N024 13209 ; [.501C.0020.0002] # EGYPTIAN HIEROGLYPH N025 1320A ; [.501D.0020.0002] # EGYPTIAN HIEROGLYPH N025A 1320B ; [.501E.0020.0002] # EGYPTIAN HIEROGLYPH N026 1320C ; [.501F.0020.0002] # EGYPTIAN HIEROGLYPH N027 1320D ; [.5020.0020.0002] # EGYPTIAN HIEROGLYPH N028 1320E ; [.5021.0020.0002] # EGYPTIAN HIEROGLYPH N029 1320F ; [.5022.0020.0002] # EGYPTIAN HIEROGLYPH N030 13210 ; [.5023.0020.0002] # EGYPTIAN HIEROGLYPH N031 13211 ; [.5024.0020.0002] # EGYPTIAN HIEROGLYPH N032 13212 ; [.5025.0020.0002] # EGYPTIAN HIEROGLYPH N033 13213 ; [.5026.0020.0002] # EGYPTIAN HIEROGLYPH N033A 13214 ; [.5027.0020.0002] # EGYPTIAN HIEROGLYPH N034 13215 ; [.5028.0020.0002] # EGYPTIAN HIEROGLYPH N034A 13216 ; [.5029.0020.0002] # EGYPTIAN HIEROGLYPH N035 13217 ; [.502A.0020.0002] # EGYPTIAN HIEROGLYPH N035A 13218 ; [.502B.0020.0002] # EGYPTIAN HIEROGLYPH N036 13219 ; [.502C.0020.0002] # EGYPTIAN HIEROGLYPH N037 1321A ; [.502D.0020.0002] # EGYPTIAN HIEROGLYPH N037A 1321B ; [.502E.0020.0002] # EGYPTIAN HIEROGLYPH N038 1321C ; [.502F.0020.0002] # EGYPTIAN HIEROGLYPH N039 1321D ; [.5030.0020.0002] # EGYPTIAN HIEROGLYPH N040 1321E ; [.5031.0020.0002] # EGYPTIAN HIEROGLYPH N041 1321F ; [.5032.0020.0002] # EGYPTIAN HIEROGLYPH N042 13220 ; [.5033.0020.0002] # EGYPTIAN HIEROGLYPH NL001 13221 ; [.5034.0020.0002] # EGYPTIAN HIEROGLYPH NL002 13222 ; [.5035.0020.0002] # EGYPTIAN HIEROGLYPH NL003 13223 ; [.5036.0020.0002] # EGYPTIAN HIEROGLYPH NL004 13224 ; [.5037.0020.0002] # EGYPTIAN HIEROGLYPH NL005 13225 ; [.5038.0020.0002] # EGYPTIAN HIEROGLYPH NL005A 13226 ; [.5039.0020.0002] # EGYPTIAN HIEROGLYPH NL006 13227 ; [.503A.0020.0002] # EGYPTIAN HIEROGLYPH NL007 13228 ; [.503B.0020.0002] # EGYPTIAN HIEROGLYPH NL008 13229 ; [.503C.0020.0002] # EGYPTIAN HIEROGLYPH NL009 1322A ; [.503D.0020.0002] # EGYPTIAN HIEROGLYPH NL010 1322B ; [.503E.0020.0002] # EGYPTIAN HIEROGLYPH NL011 1322C ; [.503F.0020.0002] # EGYPTIAN HIEROGLYPH NL012 1322D ; [.5040.0020.0002] # EGYPTIAN HIEROGLYPH NL013 1322E ; [.5041.0020.0002] # EGYPTIAN HIEROGLYPH NL014 1322F ; [.5042.0020.0002] # EGYPTIAN HIEROGLYPH NL015 13230 ; [.5043.0020.0002] # EGYPTIAN HIEROGLYPH NL016 13231 ; [.5044.0020.0002] # EGYPTIAN HIEROGLYPH NL017 13232 ; [.5045.0020.0002] # EGYPTIAN HIEROGLYPH NL017A 13233 ; [.5046.0020.0002] # EGYPTIAN HIEROGLYPH NL018 13234 ; [.5047.0020.0002] # EGYPTIAN HIEROGLYPH NL019 13235 ; [.5048.0020.0002] # EGYPTIAN HIEROGLYPH NL020 13236 ; [.5049.0020.0002] # EGYPTIAN HIEROGLYPH NU001 13237 ; [.504A.0020.0002] # EGYPTIAN HIEROGLYPH NU002 13238 ; [.504B.0020.0002] # EGYPTIAN HIEROGLYPH NU003 13239 ; [.504C.0020.0002] # EGYPTIAN HIEROGLYPH NU004 1323A ; [.504D.0020.0002] # EGYPTIAN HIEROGLYPH NU005 1323B ; [.504E.0020.0002] # EGYPTIAN HIEROGLYPH NU006 1323C ; [.504F.0020.0002] # EGYPTIAN HIEROGLYPH NU007 1323D ; [.5050.0020.0002] # EGYPTIAN HIEROGLYPH NU008 1323E ; [.5051.0020.0002] # EGYPTIAN HIEROGLYPH NU009 1323F ; [.5052.0020.0002] # EGYPTIAN HIEROGLYPH NU010 13240 ; [.5053.0020.0002] # EGYPTIAN HIEROGLYPH NU010A 13241 ; [.5054.0020.0002] # EGYPTIAN HIEROGLYPH NU011 13242 ; [.5055.0020.0002] # EGYPTIAN HIEROGLYPH NU011A 13243 ; [.5056.0020.0002] # EGYPTIAN HIEROGLYPH NU012 13244 ; [.5057.0020.0002] # EGYPTIAN HIEROGLYPH NU013 13245 ; [.5058.0020.0002] # EGYPTIAN HIEROGLYPH NU014 13246 ; [.5059.0020.0002] # EGYPTIAN HIEROGLYPH NU015 13247 ; [.505A.0020.0002] # EGYPTIAN HIEROGLYPH NU016 13248 ; [.505B.0020.0002] # EGYPTIAN HIEROGLYPH NU017 13249 ; [.505C.0020.0002] # EGYPTIAN HIEROGLYPH NU018 1324A ; [.505D.0020.0002] # EGYPTIAN HIEROGLYPH NU018A 1324B ; [.505E.0020.0002] # EGYPTIAN HIEROGLYPH NU019 1324C ; [.505F.0020.0002] # EGYPTIAN HIEROGLYPH NU020 1324D ; [.5060.0020.0002] # EGYPTIAN HIEROGLYPH NU021 1324E ; [.5061.0020.0002] # EGYPTIAN HIEROGLYPH NU022 1324F ; [.5062.0020.0002] # EGYPTIAN HIEROGLYPH NU022A 13250 ; [.5063.0020.0002] # EGYPTIAN HIEROGLYPH O001 13251 ; [.5064.0020.0002] # EGYPTIAN HIEROGLYPH O001A 13252 ; [.5065.0020.0002] # EGYPTIAN HIEROGLYPH O002 13253 ; [.5066.0020.0002] # EGYPTIAN HIEROGLYPH O003 13254 ; [.5067.0020.0002] # EGYPTIAN HIEROGLYPH O004 13255 ; [.5068.0020.0002] # EGYPTIAN HIEROGLYPH O005 13256 ; [.5069.0020.0002] # EGYPTIAN HIEROGLYPH O005A 13257 ; [.506A.0020.0002] # EGYPTIAN HIEROGLYPH O006 13258 ; [.506B.0020.0002] # EGYPTIAN HIEROGLYPH O006A 13259 ; [.506C.0020.0002] # EGYPTIAN HIEROGLYPH O006B 1325A ; [.506D.0020.0002] # EGYPTIAN HIEROGLYPH O006C 1325B ; [.506E.0020.0002] # EGYPTIAN HIEROGLYPH O006D 1325C ; [.506F.0020.0002] # EGYPTIAN HIEROGLYPH O006E 1325D ; [.5070.0020.0002] # EGYPTIAN HIEROGLYPH O006F 1325E ; [.5071.0020.0002] # EGYPTIAN HIEROGLYPH O007 1325F ; [.5072.0020.0002] # EGYPTIAN HIEROGLYPH O008 13260 ; [.5073.0020.0002] # EGYPTIAN HIEROGLYPH O009 13261 ; [.5074.0020.0002] # EGYPTIAN HIEROGLYPH O010 13262 ; [.5075.0020.0002] # EGYPTIAN HIEROGLYPH O010A 13263 ; [.5076.0020.0002] # EGYPTIAN HIEROGLYPH O010B 13264 ; [.5077.0020.0002] # EGYPTIAN HIEROGLYPH O010C 13265 ; [.5078.0020.0002] # EGYPTIAN HIEROGLYPH O011 13266 ; [.5079.0020.0002] # EGYPTIAN HIEROGLYPH O012 13267 ; [.507A.0020.0002] # EGYPTIAN HIEROGLYPH O013 13268 ; [.507B.0020.0002] # EGYPTIAN HIEROGLYPH O014 13269 ; [.507C.0020.0002] # EGYPTIAN HIEROGLYPH O015 1326A ; [.507D.0020.0002] # EGYPTIAN HIEROGLYPH O016 1326B ; [.507E.0020.0002] # EGYPTIAN HIEROGLYPH O017 1326C ; [.507F.0020.0002] # EGYPTIAN HIEROGLYPH O018 1326D ; [.5080.0020.0002] # EGYPTIAN HIEROGLYPH O019 1326E ; [.5081.0020.0002] # EGYPTIAN HIEROGLYPH O019A 1326F ; [.5082.0020.0002] # EGYPTIAN HIEROGLYPH O020 13270 ; [.5083.0020.0002] # EGYPTIAN HIEROGLYPH O020A 13271 ; [.5084.0020.0002] # EGYPTIAN HIEROGLYPH O021 13272 ; [.5085.0020.0002] # EGYPTIAN HIEROGLYPH O022 13273 ; [.5086.0020.0002] # EGYPTIAN HIEROGLYPH O023 13274 ; [.5087.0020.0002] # EGYPTIAN HIEROGLYPH O024 13275 ; [.5088.0020.0002] # EGYPTIAN HIEROGLYPH O024A 13276 ; [.5089.0020.0002] # EGYPTIAN HIEROGLYPH O025 13277 ; [.508A.0020.0002] # EGYPTIAN HIEROGLYPH O025A 13278 ; [.508B.0020.0002] # EGYPTIAN HIEROGLYPH O026 13279 ; [.508C.0020.0002] # EGYPTIAN HIEROGLYPH O027 1327A ; [.508D.0020.0002] # EGYPTIAN HIEROGLYPH O028 1327B ; [.508E.0020.0002] # EGYPTIAN HIEROGLYPH O029 1327C ; [.508F.0020.0002] # EGYPTIAN HIEROGLYPH O029A 1327D ; [.5090.0020.0002] # EGYPTIAN HIEROGLYPH O030 1327E ; [.5091.0020.0002] # EGYPTIAN HIEROGLYPH O030A 1327F ; [.5092.0020.0002] # EGYPTIAN HIEROGLYPH O031 13280 ; [.5093.0020.0002] # EGYPTIAN HIEROGLYPH O032 13281 ; [.5094.0020.0002] # EGYPTIAN HIEROGLYPH O033 13282 ; [.5095.0020.0002] # EGYPTIAN HIEROGLYPH O033A 13283 ; [.5096.0020.0002] # EGYPTIAN HIEROGLYPH O034 13284 ; [.5097.0020.0002] # EGYPTIAN HIEROGLYPH O035 13285 ; [.5098.0020.0002] # EGYPTIAN HIEROGLYPH O036 13286 ; [.5099.0020.0002] # EGYPTIAN HIEROGLYPH O036A 13287 ; [.509A.0020.0002] # EGYPTIAN HIEROGLYPH O036B 13288 ; [.509B.0020.0002] # EGYPTIAN HIEROGLYPH O036C 13289 ; [.509C.0020.0002] # EGYPTIAN HIEROGLYPH O036D 1328A ; [.509D.0020.0002] # EGYPTIAN HIEROGLYPH O037 1328B ; [.509E.0020.0002] # EGYPTIAN HIEROGLYPH O038 1328C ; [.509F.0020.0002] # EGYPTIAN HIEROGLYPH O039 1328D ; [.50A0.0020.0002] # EGYPTIAN HIEROGLYPH O040 1328E ; [.50A1.0020.0002] # EGYPTIAN HIEROGLYPH O041 1328F ; [.50A2.0020.0002] # EGYPTIAN HIEROGLYPH O042 13290 ; [.50A3.0020.0002] # EGYPTIAN HIEROGLYPH O043 13291 ; [.50A4.0020.0002] # EGYPTIAN HIEROGLYPH O044 13292 ; [.50A5.0020.0002] # EGYPTIAN HIEROGLYPH O045 13293 ; [.50A6.0020.0002] # EGYPTIAN HIEROGLYPH O046 13294 ; [.50A7.0020.0002] # EGYPTIAN HIEROGLYPH O047 13295 ; [.50A8.0020.0002] # EGYPTIAN HIEROGLYPH O048 13296 ; [.50A9.0020.0002] # EGYPTIAN HIEROGLYPH O049 13297 ; [.50AA.0020.0002] # EGYPTIAN HIEROGLYPH O050 13298 ; [.50AB.0020.0002] # EGYPTIAN HIEROGLYPH O050A 13299 ; [.50AC.0020.0002] # EGYPTIAN HIEROGLYPH O050B 1329A ; [.50AD.0020.0002] # EGYPTIAN HIEROGLYPH O051 1329B ; [.50AE.0020.0002] # EGYPTIAN HIEROGLYPH P001 1329C ; [.50AF.0020.0002] # EGYPTIAN HIEROGLYPH P001A 1329D ; [.50B0.0020.0002] # EGYPTIAN HIEROGLYPH P002 1329E ; [.50B1.0020.0002] # EGYPTIAN HIEROGLYPH P003 1329F ; [.50B2.0020.0002] # EGYPTIAN HIEROGLYPH P003A 132A0 ; [.50B3.0020.0002] # EGYPTIAN HIEROGLYPH P004 132A1 ; [.50B4.0020.0002] # EGYPTIAN HIEROGLYPH P005 132A2 ; [.50B5.0020.0002] # EGYPTIAN HIEROGLYPH P006 132A3 ; [.50B6.0020.0002] # EGYPTIAN HIEROGLYPH P007 132A4 ; [.50B7.0020.0002] # EGYPTIAN HIEROGLYPH P008 132A5 ; [.50B8.0020.0002] # EGYPTIAN HIEROGLYPH P009 132A6 ; [.50B9.0020.0002] # EGYPTIAN HIEROGLYPH P010 132A7 ; [.50BA.0020.0002] # EGYPTIAN HIEROGLYPH P011 132A8 ; [.50BB.0020.0002] # EGYPTIAN HIEROGLYPH Q001 132A9 ; [.50BC.0020.0002] # EGYPTIAN HIEROGLYPH Q002 132AA ; [.50BD.0020.0002] # EGYPTIAN HIEROGLYPH Q003 132AB ; [.50BE.0020.0002] # EGYPTIAN HIEROGLYPH Q004 132AC ; [.50BF.0020.0002] # EGYPTIAN HIEROGLYPH Q005 132AD ; [.50C0.0020.0002] # EGYPTIAN HIEROGLYPH Q006 132AE ; [.50C1.0020.0002] # EGYPTIAN HIEROGLYPH Q007 132AF ; [.50C2.0020.0002] # EGYPTIAN HIEROGLYPH R001 132B0 ; [.50C3.0020.0002] # EGYPTIAN HIEROGLYPH R002 132B1 ; [.50C4.0020.0002] # EGYPTIAN HIEROGLYPH R002A 132B2 ; [.50C5.0020.0002] # EGYPTIAN HIEROGLYPH R003 132B3 ; [.50C6.0020.0002] # EGYPTIAN HIEROGLYPH R003A 132B4 ; [.50C7.0020.0002] # EGYPTIAN HIEROGLYPH R003B 132B5 ; [.50C8.0020.0002] # EGYPTIAN HIEROGLYPH R004 132B6 ; [.50C9.0020.0002] # EGYPTIAN HIEROGLYPH R005 132B7 ; [.50CA.0020.0002] # EGYPTIAN HIEROGLYPH R006 132B8 ; [.50CB.0020.0002] # EGYPTIAN HIEROGLYPH R007 132B9 ; [.50CC.0020.0002] # EGYPTIAN HIEROGLYPH R008 132BA ; [.50CD.0020.0002] # EGYPTIAN HIEROGLYPH R009 132BB ; [.50CE.0020.0002] # EGYPTIAN HIEROGLYPH R010 132BC ; [.50CF.0020.0002] # EGYPTIAN HIEROGLYPH R010A 132BD ; [.50D0.0020.0002] # EGYPTIAN HIEROGLYPH R011 132BE ; [.50D1.0020.0002] # EGYPTIAN HIEROGLYPH R012 132BF ; [.50D2.0020.0002] # EGYPTIAN HIEROGLYPH R013 132C0 ; [.50D3.0020.0002] # EGYPTIAN HIEROGLYPH R014 132C1 ; [.50D4.0020.0002] # EGYPTIAN HIEROGLYPH R015 132C2 ; [.50D5.0020.0002] # EGYPTIAN HIEROGLYPH R016 132C3 ; [.50D6.0020.0002] # EGYPTIAN HIEROGLYPH R016A 132C4 ; [.50D7.0020.0002] # EGYPTIAN HIEROGLYPH R017 132C5 ; [.50D8.0020.0002] # EGYPTIAN HIEROGLYPH R018 132C6 ; [.50D9.0020.0002] # EGYPTIAN HIEROGLYPH R019 132C7 ; [.50DA.0020.0002] # EGYPTIAN HIEROGLYPH R020 132C8 ; [.50DB.0020.0002] # EGYPTIAN HIEROGLYPH R021 132C9 ; [.50DC.0020.0002] # EGYPTIAN HIEROGLYPH R022 132CA ; [.50DD.0020.0002] # EGYPTIAN HIEROGLYPH R023 132CB ; [.50DE.0020.0002] # EGYPTIAN HIEROGLYPH R024 132CC ; [.50DF.0020.0002] # EGYPTIAN HIEROGLYPH R025 132CD ; [.50E0.0020.0002] # EGYPTIAN HIEROGLYPH R026 132CE ; [.50E1.0020.0002] # EGYPTIAN HIEROGLYPH R027 132CF ; [.50E2.0020.0002] # EGYPTIAN HIEROGLYPH R028 132D0 ; [.50E3.0020.0002] # EGYPTIAN HIEROGLYPH R029 132D1 ; [.50E4.0020.0002] # EGYPTIAN HIEROGLYPH S001 132D2 ; [.50E5.0020.0002] # EGYPTIAN HIEROGLYPH S002 132D3 ; [.50E6.0020.0002] # EGYPTIAN HIEROGLYPH S002A 132D4 ; [.50E7.0020.0002] # EGYPTIAN HIEROGLYPH S003 132D5 ; [.50E8.0020.0002] # EGYPTIAN HIEROGLYPH S004 132D6 ; [.50E9.0020.0002] # EGYPTIAN HIEROGLYPH S005 132D7 ; [.50EA.0020.0002] # EGYPTIAN HIEROGLYPH S006 132D8 ; [.50EB.0020.0002] # EGYPTIAN HIEROGLYPH S006A 132D9 ; [.50EC.0020.0002] # EGYPTIAN HIEROGLYPH S007 132DA ; [.50ED.0020.0002] # EGYPTIAN HIEROGLYPH S008 132DB ; [.50EE.0020.0002] # EGYPTIAN HIEROGLYPH S009 132DC ; [.50EF.0020.0002] # EGYPTIAN HIEROGLYPH S010 132DD ; [.50F0.0020.0002] # EGYPTIAN HIEROGLYPH S011 132DE ; [.50F1.0020.0002] # EGYPTIAN HIEROGLYPH S012 132DF ; [.50F2.0020.0002] # EGYPTIAN HIEROGLYPH S013 132E0 ; [.50F3.0020.0002] # EGYPTIAN HIEROGLYPH S014 132E1 ; [.50F4.0020.0002] # EGYPTIAN HIEROGLYPH S014A 132E2 ; [.50F5.0020.0002] # EGYPTIAN HIEROGLYPH S014B 132E3 ; [.50F6.0020.0002] # EGYPTIAN HIEROGLYPH S015 132E4 ; [.50F7.0020.0002] # EGYPTIAN HIEROGLYPH S016 132E5 ; [.50F8.0020.0002] # EGYPTIAN HIEROGLYPH S017 132E6 ; [.50F9.0020.0002] # EGYPTIAN HIEROGLYPH S017A 132E7 ; [.50FA.0020.0002] # EGYPTIAN HIEROGLYPH S018 132E8 ; [.50FB.0020.0002] # EGYPTIAN HIEROGLYPH S019 132E9 ; [.50FC.0020.0002] # EGYPTIAN HIEROGLYPH S020 132EA ; [.50FD.0020.0002] # EGYPTIAN HIEROGLYPH S021 132EB ; [.50FE.0020.0002] # EGYPTIAN HIEROGLYPH S022 132EC ; [.50FF.0020.0002] # EGYPTIAN HIEROGLYPH S023 132ED ; [.5100.0020.0002] # EGYPTIAN HIEROGLYPH S024 132EE ; [.5101.0020.0002] # EGYPTIAN HIEROGLYPH S025 132EF ; [.5102.0020.0002] # EGYPTIAN HIEROGLYPH S026 132F0 ; [.5103.0020.0002] # EGYPTIAN HIEROGLYPH S026A 132F1 ; [.5104.0020.0002] # EGYPTIAN HIEROGLYPH S026B 132F2 ; [.5105.0020.0002] # EGYPTIAN HIEROGLYPH S027 132F3 ; [.5106.0020.0002] # EGYPTIAN HIEROGLYPH S028 132F4 ; [.5107.0020.0002] # EGYPTIAN HIEROGLYPH S029 132F5 ; [.5108.0020.0002] # EGYPTIAN HIEROGLYPH S030 132F6 ; [.5109.0020.0002] # EGYPTIAN HIEROGLYPH S031 132F7 ; [.510A.0020.0002] # EGYPTIAN HIEROGLYPH S032 132F8 ; [.510B.0020.0002] # EGYPTIAN HIEROGLYPH S033 132F9 ; [.510C.0020.0002] # EGYPTIAN HIEROGLYPH S034 132FA ; [.510D.0020.0002] # EGYPTIAN HIEROGLYPH S035 132FB ; [.510E.0020.0002] # EGYPTIAN HIEROGLYPH S035A 132FC ; [.510F.0020.0002] # EGYPTIAN HIEROGLYPH S036 132FD ; [.5110.0020.0002] # EGYPTIAN HIEROGLYPH S037 132FE ; [.5111.0020.0002] # EGYPTIAN HIEROGLYPH S038 132FF ; [.5112.0020.0002] # EGYPTIAN HIEROGLYPH S039 13300 ; [.5113.0020.0002] # EGYPTIAN HIEROGLYPH S040 13301 ; [.5114.0020.0002] # EGYPTIAN HIEROGLYPH S041 13302 ; [.5115.0020.0002] # EGYPTIAN HIEROGLYPH S042 13303 ; [.5116.0020.0002] # EGYPTIAN HIEROGLYPH S043 13304 ; [.5117.0020.0002] # EGYPTIAN HIEROGLYPH S044 13305 ; [.5118.0020.0002] # EGYPTIAN HIEROGLYPH S045 13306 ; [.5119.0020.0002] # EGYPTIAN HIEROGLYPH S046 13307 ; [.511A.0020.0002] # EGYPTIAN HIEROGLYPH T001 13308 ; [.511B.0020.0002] # EGYPTIAN HIEROGLYPH T002 13309 ; [.511C.0020.0002] # EGYPTIAN HIEROGLYPH T003 1330A ; [.511D.0020.0002] # EGYPTIAN HIEROGLYPH T003A 1330B ; [.511E.0020.0002] # EGYPTIAN HIEROGLYPH T004 1330C ; [.511F.0020.0002] # EGYPTIAN HIEROGLYPH T005 1330D ; [.5120.0020.0002] # EGYPTIAN HIEROGLYPH T006 1330E ; [.5121.0020.0002] # EGYPTIAN HIEROGLYPH T007 1330F ; [.5122.0020.0002] # EGYPTIAN HIEROGLYPH T007A 13310 ; [.5123.0020.0002] # EGYPTIAN HIEROGLYPH T008 13311 ; [.5124.0020.0002] # EGYPTIAN HIEROGLYPH T008A 13312 ; [.5125.0020.0002] # EGYPTIAN HIEROGLYPH T009 13313 ; [.5126.0020.0002] # EGYPTIAN HIEROGLYPH T009A 13314 ; [.5127.0020.0002] # EGYPTIAN HIEROGLYPH T010 13315 ; [.5128.0020.0002] # EGYPTIAN HIEROGLYPH T011 13316 ; [.5129.0020.0002] # EGYPTIAN HIEROGLYPH T011A 13317 ; [.512A.0020.0002] # EGYPTIAN HIEROGLYPH T012 13318 ; [.512B.0020.0002] # EGYPTIAN HIEROGLYPH T013 13319 ; [.512C.0020.0002] # EGYPTIAN HIEROGLYPH T014 1331A ; [.512D.0020.0002] # EGYPTIAN HIEROGLYPH T015 1331B ; [.512E.0020.0002] # EGYPTIAN HIEROGLYPH T016 1331C ; [.512F.0020.0002] # EGYPTIAN HIEROGLYPH T016A 1331D ; [.5130.0020.0002] # EGYPTIAN HIEROGLYPH T017 1331E ; [.5131.0020.0002] # EGYPTIAN HIEROGLYPH T018 1331F ; [.5132.0020.0002] # EGYPTIAN HIEROGLYPH T019 13320 ; [.5133.0020.0002] # EGYPTIAN HIEROGLYPH T020 13321 ; [.5134.0020.0002] # EGYPTIAN HIEROGLYPH T021 13322 ; [.5135.0020.0002] # EGYPTIAN HIEROGLYPH T022 13323 ; [.5136.0020.0002] # EGYPTIAN HIEROGLYPH T023 13324 ; [.5137.0020.0002] # EGYPTIAN HIEROGLYPH T024 13325 ; [.5138.0020.0002] # EGYPTIAN HIEROGLYPH T025 13326 ; [.5139.0020.0002] # EGYPTIAN HIEROGLYPH T026 13327 ; [.513A.0020.0002] # EGYPTIAN HIEROGLYPH T027 13328 ; [.513B.0020.0002] # EGYPTIAN HIEROGLYPH T028 13329 ; [.513C.0020.0002] # EGYPTIAN HIEROGLYPH T029 1332A ; [.513D.0020.0002] # EGYPTIAN HIEROGLYPH T030 1332B ; [.513E.0020.0002] # EGYPTIAN HIEROGLYPH T031 1332C ; [.513F.0020.0002] # EGYPTIAN HIEROGLYPH T032 1332D ; [.5140.0020.0002] # EGYPTIAN HIEROGLYPH T032A 1332E ; [.5141.0020.0002] # EGYPTIAN HIEROGLYPH T033 1332F ; [.5142.0020.0002] # EGYPTIAN HIEROGLYPH T033A 13330 ; [.5143.0020.0002] # EGYPTIAN HIEROGLYPH T034 13331 ; [.5144.0020.0002] # EGYPTIAN HIEROGLYPH T035 13332 ; [.5145.0020.0002] # EGYPTIAN HIEROGLYPH T036 13333 ; [.5146.0020.0002] # EGYPTIAN HIEROGLYPH U001 13334 ; [.5147.0020.0002] # EGYPTIAN HIEROGLYPH U002 13335 ; [.5148.0020.0002] # EGYPTIAN HIEROGLYPH U003 13336 ; [.5149.0020.0002] # EGYPTIAN HIEROGLYPH U004 13337 ; [.514A.0020.0002] # EGYPTIAN HIEROGLYPH U005 13338 ; [.514B.0020.0002] # EGYPTIAN HIEROGLYPH U006 13339 ; [.514C.0020.0002] # EGYPTIAN HIEROGLYPH U006A 1333A ; [.514D.0020.0002] # EGYPTIAN HIEROGLYPH U006B 1333B ; [.514E.0020.0002] # EGYPTIAN HIEROGLYPH U007 1333C ; [.514F.0020.0002] # EGYPTIAN HIEROGLYPH U008 1333D ; [.5150.0020.0002] # EGYPTIAN HIEROGLYPH U009 1333E ; [.5151.0020.0002] # EGYPTIAN HIEROGLYPH U010 1333F ; [.5152.0020.0002] # EGYPTIAN HIEROGLYPH U011 13340 ; [.5153.0020.0002] # EGYPTIAN HIEROGLYPH U012 13341 ; [.5154.0020.0002] # EGYPTIAN HIEROGLYPH U013 13342 ; [.5155.0020.0002] # EGYPTIAN HIEROGLYPH U014 13343 ; [.5156.0020.0002] # EGYPTIAN HIEROGLYPH U015 13344 ; [.5157.0020.0002] # EGYPTIAN HIEROGLYPH U016 13345 ; [.5158.0020.0002] # EGYPTIAN HIEROGLYPH U017 13346 ; [.5159.0020.0002] # EGYPTIAN HIEROGLYPH U018 13347 ; [.515A.0020.0002] # EGYPTIAN HIEROGLYPH U019 13348 ; [.515B.0020.0002] # EGYPTIAN HIEROGLYPH U020 13349 ; [.515C.0020.0002] # EGYPTIAN HIEROGLYPH U021 1334A ; [.515D.0020.0002] # EGYPTIAN HIEROGLYPH U022 1334B ; [.515E.0020.0002] # EGYPTIAN HIEROGLYPH U023 1334C ; [.515F.0020.0002] # EGYPTIAN HIEROGLYPH U023A 1334D ; [.5160.0020.0002] # EGYPTIAN HIEROGLYPH U024 1334E ; [.5161.0020.0002] # EGYPTIAN HIEROGLYPH U025 1334F ; [.5162.0020.0002] # EGYPTIAN HIEROGLYPH U026 13350 ; [.5163.0020.0002] # EGYPTIAN HIEROGLYPH U027 13351 ; [.5164.0020.0002] # EGYPTIAN HIEROGLYPH U028 13352 ; [.5165.0020.0002] # EGYPTIAN HIEROGLYPH U029 13353 ; [.5166.0020.0002] # EGYPTIAN HIEROGLYPH U029A 13354 ; [.5167.0020.0002] # EGYPTIAN HIEROGLYPH U030 13355 ; [.5168.0020.0002] # EGYPTIAN HIEROGLYPH U031 13356 ; [.5169.0020.0002] # EGYPTIAN HIEROGLYPH U032 13357 ; [.516A.0020.0002] # EGYPTIAN HIEROGLYPH U032A 13358 ; [.516B.0020.0002] # EGYPTIAN HIEROGLYPH U033 13359 ; [.516C.0020.0002] # EGYPTIAN HIEROGLYPH U034 1335A ; [.516D.0020.0002] # EGYPTIAN HIEROGLYPH U035 1335B ; [.516E.0020.0002] # EGYPTIAN HIEROGLYPH U036 1335C ; [.516F.0020.0002] # EGYPTIAN HIEROGLYPH U037 1335D ; [.5170.0020.0002] # EGYPTIAN HIEROGLYPH U038 1335E ; [.5171.0020.0002] # EGYPTIAN HIEROGLYPH U039 1335F ; [.5172.0020.0002] # EGYPTIAN HIEROGLYPH U040 13360 ; [.5173.0020.0002] # EGYPTIAN HIEROGLYPH U041 13361 ; [.5174.0020.0002] # EGYPTIAN HIEROGLYPH U042 13362 ; [.5175.0020.0002] # EGYPTIAN HIEROGLYPH V001 13363 ; [.5176.0020.0002] # EGYPTIAN HIEROGLYPH V001A 13364 ; [.5177.0020.0002] # EGYPTIAN HIEROGLYPH V001B 13365 ; [.5178.0020.0002] # EGYPTIAN HIEROGLYPH V001C 13366 ; [.5179.0020.0002] # EGYPTIAN HIEROGLYPH V001D 13367 ; [.517A.0020.0002] # EGYPTIAN HIEROGLYPH V001E 13368 ; [.517B.0020.0002] # EGYPTIAN HIEROGLYPH V001F 13369 ; [.517C.0020.0002] # EGYPTIAN HIEROGLYPH V001G 1336A ; [.517D.0020.0002] # EGYPTIAN HIEROGLYPH V001H 1336B ; [.517E.0020.0002] # EGYPTIAN HIEROGLYPH V001I 1336C ; [.517F.0020.0002] # EGYPTIAN HIEROGLYPH V002 1336D ; [.5180.0020.0002] # EGYPTIAN HIEROGLYPH V002A 1336E ; [.5181.0020.0002] # EGYPTIAN HIEROGLYPH V003 1336F ; [.5182.0020.0002] # EGYPTIAN HIEROGLYPH V004 13370 ; [.5183.0020.0002] # EGYPTIAN HIEROGLYPH V005 13371 ; [.5184.0020.0002] # EGYPTIAN HIEROGLYPH V006 13372 ; [.5185.0020.0002] # EGYPTIAN HIEROGLYPH V007 13373 ; [.5186.0020.0002] # EGYPTIAN HIEROGLYPH V007A 13374 ; [.5187.0020.0002] # EGYPTIAN HIEROGLYPH V007B 13375 ; [.5188.0020.0002] # EGYPTIAN HIEROGLYPH V008 13376 ; [.5189.0020.0002] # EGYPTIAN HIEROGLYPH V009 13377 ; [.518A.0020.0002] # EGYPTIAN HIEROGLYPH V010 13378 ; [.518B.0020.0002] # EGYPTIAN HIEROGLYPH V011 13379 ; [.518C.0020.0002] # EGYPTIAN HIEROGLYPH V011A 1337A ; [.518D.0020.0002] # EGYPTIAN HIEROGLYPH V011B 1337B ; [.518E.0020.0002] # EGYPTIAN HIEROGLYPH V011C 1337C ; [.518F.0020.0002] # EGYPTIAN HIEROGLYPH V012 1337D ; [.5190.0020.0002] # EGYPTIAN HIEROGLYPH V012A 1337E ; [.5191.0020.0002] # EGYPTIAN HIEROGLYPH V012B 1337F ; [.5192.0020.0002] # EGYPTIAN HIEROGLYPH V013 13380 ; [.5193.0020.0002] # EGYPTIAN HIEROGLYPH V014 13381 ; [.5194.0020.0002] # EGYPTIAN HIEROGLYPH V015 13382 ; [.5195.0020.0002] # EGYPTIAN HIEROGLYPH V016 13383 ; [.5196.0020.0002] # EGYPTIAN HIEROGLYPH V017 13384 ; [.5197.0020.0002] # EGYPTIAN HIEROGLYPH V018 13385 ; [.5198.0020.0002] # EGYPTIAN HIEROGLYPH V019 13386 ; [.5199.0020.0002] # EGYPTIAN HIEROGLYPH V020 13387 ; [.519A.0020.0002] # EGYPTIAN HIEROGLYPH V020A 13388 ; [.519B.0020.0002] # EGYPTIAN HIEROGLYPH V020B 13389 ; [.519C.0020.0002] # EGYPTIAN HIEROGLYPH V020C 1338A ; [.519D.0020.0002] # EGYPTIAN HIEROGLYPH V020D 1338B ; [.519E.0020.0002] # EGYPTIAN HIEROGLYPH V020E 1338C ; [.519F.0020.0002] # EGYPTIAN HIEROGLYPH V020F 1338D ; [.51A0.0020.0002] # EGYPTIAN HIEROGLYPH V020G 1338E ; [.51A1.0020.0002] # EGYPTIAN HIEROGLYPH V020H 1338F ; [.51A2.0020.0002] # EGYPTIAN HIEROGLYPH V020I 13390 ; [.51A3.0020.0002] # EGYPTIAN HIEROGLYPH V020J 13391 ; [.51A4.0020.0002] # EGYPTIAN HIEROGLYPH V020K 13392 ; [.51A5.0020.0002] # EGYPTIAN HIEROGLYPH V020L 13393 ; [.51A6.0020.0002] # EGYPTIAN HIEROGLYPH V021 13394 ; [.51A7.0020.0002] # EGYPTIAN HIEROGLYPH V022 13395 ; [.51A8.0020.0002] # EGYPTIAN HIEROGLYPH V023 13396 ; [.51A9.0020.0002] # EGYPTIAN HIEROGLYPH V023A 13397 ; [.51AA.0020.0002] # EGYPTIAN HIEROGLYPH V024 13398 ; [.51AB.0020.0002] # EGYPTIAN HIEROGLYPH V025 13399 ; [.51AC.0020.0002] # EGYPTIAN HIEROGLYPH V026 1339A ; [.51AD.0020.0002] # EGYPTIAN HIEROGLYPH V027 1339B ; [.51AE.0020.0002] # EGYPTIAN HIEROGLYPH V028 1339C ; [.51AF.0020.0002] # EGYPTIAN HIEROGLYPH V028A 1339D ; [.51B0.0020.0002] # EGYPTIAN HIEROGLYPH V029 1339E ; [.51B1.0020.0002] # EGYPTIAN HIEROGLYPH V029A 1339F ; [.51B2.0020.0002] # EGYPTIAN HIEROGLYPH V030 133A0 ; [.51B3.0020.0002] # EGYPTIAN HIEROGLYPH V030A 133A1 ; [.51B4.0020.0002] # EGYPTIAN HIEROGLYPH V031 133A2 ; [.51B5.0020.0002] # EGYPTIAN HIEROGLYPH V031A 133A3 ; [.51B6.0020.0002] # EGYPTIAN HIEROGLYPH V032 133A4 ; [.51B7.0020.0002] # EGYPTIAN HIEROGLYPH V033 133A5 ; [.51B8.0020.0002] # EGYPTIAN HIEROGLYPH V033A 133A6 ; [.51B9.0020.0002] # EGYPTIAN HIEROGLYPH V034 133A7 ; [.51BA.0020.0002] # EGYPTIAN HIEROGLYPH V035 133A8 ; [.51BB.0020.0002] # EGYPTIAN HIEROGLYPH V036 133A9 ; [.51BC.0020.0002] # EGYPTIAN HIEROGLYPH V037 133AA ; [.51BD.0020.0002] # EGYPTIAN HIEROGLYPH V037A 133AB ; [.51BE.0020.0002] # EGYPTIAN HIEROGLYPH V038 133AC ; [.51BF.0020.0002] # EGYPTIAN HIEROGLYPH V039 133AD ; [.51C0.0020.0002] # EGYPTIAN HIEROGLYPH V040 133AE ; [.51C1.0020.0002] # EGYPTIAN HIEROGLYPH V040A 133AF ; [.51C2.0020.0002] # EGYPTIAN HIEROGLYPH W001 133B0 ; [.51C3.0020.0002] # EGYPTIAN HIEROGLYPH W002 133B1 ; [.51C4.0020.0002] # EGYPTIAN HIEROGLYPH W003 133B2 ; [.51C5.0020.0002] # EGYPTIAN HIEROGLYPH W003A 133B3 ; [.51C6.0020.0002] # EGYPTIAN HIEROGLYPH W004 133B4 ; [.51C7.0020.0002] # EGYPTIAN HIEROGLYPH W005 133B5 ; [.51C8.0020.0002] # EGYPTIAN HIEROGLYPH W006 133B6 ; [.51C9.0020.0002] # EGYPTIAN HIEROGLYPH W007 133B7 ; [.51CA.0020.0002] # EGYPTIAN HIEROGLYPH W008 133B8 ; [.51CB.0020.0002] # EGYPTIAN HIEROGLYPH W009 133B9 ; [.51CC.0020.0002] # EGYPTIAN HIEROGLYPH W009A 133BA ; [.51CD.0020.0002] # EGYPTIAN HIEROGLYPH W010 133BB ; [.51CE.0020.0002] # EGYPTIAN HIEROGLYPH W010A 133BC ; [.51CF.0020.0002] # EGYPTIAN HIEROGLYPH W011 133BD ; [.51D0.0020.0002] # EGYPTIAN HIEROGLYPH W012 133BE ; [.51D1.0020.0002] # EGYPTIAN HIEROGLYPH W013 133BF ; [.51D2.0020.0002] # EGYPTIAN HIEROGLYPH W014 133C0 ; [.51D3.0020.0002] # EGYPTIAN HIEROGLYPH W014A 133C1 ; [.51D4.0020.0002] # EGYPTIAN HIEROGLYPH W015 133C2 ; [.51D5.0020.0002] # EGYPTIAN HIEROGLYPH W016 133C3 ; [.51D6.0020.0002] # EGYPTIAN HIEROGLYPH W017 133C4 ; [.51D7.0020.0002] # EGYPTIAN HIEROGLYPH W017A 133C5 ; [.51D8.0020.0002] # EGYPTIAN HIEROGLYPH W018 133C6 ; [.51D9.0020.0002] # EGYPTIAN HIEROGLYPH W018A 133C7 ; [.51DA.0020.0002] # EGYPTIAN HIEROGLYPH W019 133C8 ; [.51DB.0020.0002] # EGYPTIAN HIEROGLYPH W020 133C9 ; [.51DC.0020.0002] # EGYPTIAN HIEROGLYPH W021 133CA ; [.51DD.0020.0002] # EGYPTIAN HIEROGLYPH W022 133CB ; [.51DE.0020.0002] # EGYPTIAN HIEROGLYPH W023 133CC ; [.51DF.0020.0002] # EGYPTIAN HIEROGLYPH W024 133CD ; [.51E0.0020.0002] # EGYPTIAN HIEROGLYPH W024A 133CE ; [.51E1.0020.0002] # EGYPTIAN HIEROGLYPH W025 133CF ; [.51E2.0020.0002] # EGYPTIAN HIEROGLYPH X001 133D0 ; [.51E3.0020.0002] # EGYPTIAN HIEROGLYPH X002 133D1 ; [.51E4.0020.0002] # EGYPTIAN HIEROGLYPH X003 133D2 ; [.51E5.0020.0002] # EGYPTIAN HIEROGLYPH X004 133D3 ; [.51E6.0020.0002] # EGYPTIAN HIEROGLYPH X004A 133D4 ; [.51E7.0020.0002] # EGYPTIAN HIEROGLYPH X004B 133D5 ; [.51E8.0020.0002] # EGYPTIAN HIEROGLYPH X005 133D6 ; [.51E9.0020.0002] # EGYPTIAN HIEROGLYPH X006 133D7 ; [.51EA.0020.0002] # EGYPTIAN HIEROGLYPH X006A 133D8 ; [.51EB.0020.0002] # EGYPTIAN HIEROGLYPH X007 133D9 ; [.51EC.0020.0002] # EGYPTIAN HIEROGLYPH X008 133DA ; [.51ED.0020.0002] # EGYPTIAN HIEROGLYPH X008A 133DB ; [.51EE.0020.0002] # EGYPTIAN HIEROGLYPH Y001 133DC ; [.51EF.0020.0002] # EGYPTIAN HIEROGLYPH Y001A 133DD ; [.51F0.0020.0002] # EGYPTIAN HIEROGLYPH Y002 133DE ; [.51F1.0020.0002] # EGYPTIAN HIEROGLYPH Y003 133DF ; [.51F2.0020.0002] # EGYPTIAN HIEROGLYPH Y004 133E0 ; [.51F3.0020.0002] # EGYPTIAN HIEROGLYPH Y005 133E1 ; [.51F4.0020.0002] # EGYPTIAN HIEROGLYPH Y006 133E2 ; [.51F5.0020.0002] # EGYPTIAN HIEROGLYPH Y007 133E3 ; [.51F6.0020.0002] # EGYPTIAN HIEROGLYPH Y008 133E4 ; [.51F7.0020.0002] # EGYPTIAN HIEROGLYPH Z001 133E5 ; [.51F8.0020.0002] # EGYPTIAN HIEROGLYPH Z002 133E6 ; [.51F9.0020.0002] # EGYPTIAN HIEROGLYPH Z002A 133E7 ; [.51FA.0020.0002] # EGYPTIAN HIEROGLYPH Z002B 133E8 ; [.51FB.0020.0002] # EGYPTIAN HIEROGLYPH Z002C 133E9 ; [.51FC.0020.0002] # EGYPTIAN HIEROGLYPH Z002D 133EA ; [.51FD.0020.0002] # EGYPTIAN HIEROGLYPH Z003 133EB ; [.51FE.0020.0002] # EGYPTIAN HIEROGLYPH Z003A 133EC ; [.51FF.0020.0002] # EGYPTIAN HIEROGLYPH Z003B 133ED ; [.5200.0020.0002] # EGYPTIAN HIEROGLYPH Z004 133EE ; [.5201.0020.0002] # EGYPTIAN HIEROGLYPH Z004A 133EF ; [.5202.0020.0002] # EGYPTIAN HIEROGLYPH Z005 133F0 ; [.5203.0020.0002] # EGYPTIAN HIEROGLYPH Z005A 133F1 ; [.5204.0020.0002] # EGYPTIAN HIEROGLYPH Z006 133F2 ; [.5205.0020.0002] # EGYPTIAN HIEROGLYPH Z007 133F3 ; [.5206.0020.0002] # EGYPTIAN HIEROGLYPH Z008 133F4 ; [.5207.0020.0002] # EGYPTIAN HIEROGLYPH Z009 133F5 ; [.5208.0020.0002] # EGYPTIAN HIEROGLYPH Z010 133F6 ; [.5209.0020.0002] # EGYPTIAN HIEROGLYPH Z011 133F7 ; [.520A.0020.0002] # EGYPTIAN HIEROGLYPH Z012 133F8 ; [.520B.0020.0002] # EGYPTIAN HIEROGLYPH Z013 133F9 ; [.520C.0020.0002] # EGYPTIAN HIEROGLYPH Z014 133FA ; [.520D.0020.0002] # EGYPTIAN HIEROGLYPH Z015 133FB ; [.520E.0020.0002] # EGYPTIAN HIEROGLYPH Z015A 133FC ; [.520F.0020.0002] # EGYPTIAN HIEROGLYPH Z015B 133FD ; [.5210.0020.0002] # EGYPTIAN HIEROGLYPH Z015C 133FE ; [.5211.0020.0002] # EGYPTIAN HIEROGLYPH Z015D 133FF ; [.5212.0020.0002] # EGYPTIAN HIEROGLYPH Z015E 13400 ; [.5213.0020.0002] # EGYPTIAN HIEROGLYPH Z015F 13401 ; [.5214.0020.0002] # EGYPTIAN HIEROGLYPH Z015G 13402 ; [.5215.0020.0002] # EGYPTIAN HIEROGLYPH Z015H 13403 ; [.5216.0020.0002] # EGYPTIAN HIEROGLYPH Z015I 13404 ; [.5217.0020.0002] # EGYPTIAN HIEROGLYPH Z016 13405 ; [.5218.0020.0002] # EGYPTIAN HIEROGLYPH Z016A 13406 ; [.5219.0020.0002] # EGYPTIAN HIEROGLYPH Z016B 13407 ; [.521A.0020.0002] # EGYPTIAN HIEROGLYPH Z016C 13408 ; [.521B.0020.0002] # EGYPTIAN HIEROGLYPH Z016D 13409 ; [.521C.0020.0002] # EGYPTIAN HIEROGLYPH Z016E 1340A ; [.521D.0020.0002] # EGYPTIAN HIEROGLYPH Z016F 1340B ; [.521E.0020.0002] # EGYPTIAN HIEROGLYPH Z016G 1340C ; [.521F.0020.0002] # EGYPTIAN HIEROGLYPH Z016H 1340D ; [.5220.0020.0002] # EGYPTIAN HIEROGLYPH AA001 1340E ; [.5221.0020.0002] # EGYPTIAN HIEROGLYPH AA002 1340F ; [.5222.0020.0002] # EGYPTIAN HIEROGLYPH AA003 13410 ; [.5223.0020.0002] # EGYPTIAN HIEROGLYPH AA004 13411 ; [.5224.0020.0002] # EGYPTIAN HIEROGLYPH AA005 13412 ; [.5225.0020.0002] # EGYPTIAN HIEROGLYPH AA006 13413 ; [.5226.0020.0002] # EGYPTIAN HIEROGLYPH AA007 13414 ; [.5227.0020.0002] # EGYPTIAN HIEROGLYPH AA007A 13415 ; [.5228.0020.0002] # EGYPTIAN HIEROGLYPH AA007B 13416 ; [.5229.0020.0002] # EGYPTIAN HIEROGLYPH AA008 13417 ; [.522A.0020.0002] # EGYPTIAN HIEROGLYPH AA009 13418 ; [.522B.0020.0002] # EGYPTIAN HIEROGLYPH AA010 13419 ; [.522C.0020.0002] # EGYPTIAN HIEROGLYPH AA011 1341A ; [.522D.0020.0002] # EGYPTIAN HIEROGLYPH AA012 1341B ; [.522E.0020.0002] # EGYPTIAN HIEROGLYPH AA013 1341C ; [.522F.0020.0002] # EGYPTIAN HIEROGLYPH AA014 1341D ; [.5230.0020.0002] # EGYPTIAN HIEROGLYPH AA015 1341E ; [.5231.0020.0002] # EGYPTIAN HIEROGLYPH AA016 1341F ; [.5232.0020.0002] # EGYPTIAN HIEROGLYPH AA017 13420 ; [.5233.0020.0002] # EGYPTIAN HIEROGLYPH AA018 13421 ; [.5234.0020.0002] # EGYPTIAN HIEROGLYPH AA019 13422 ; [.5235.0020.0002] # EGYPTIAN HIEROGLYPH AA020 13423 ; [.5236.0020.0002] # EGYPTIAN HIEROGLYPH AA021 13424 ; [.5237.0020.0002] # EGYPTIAN HIEROGLYPH AA022 13425 ; [.5238.0020.0002] # EGYPTIAN HIEROGLYPH AA023 13426 ; [.5239.0020.0002] # EGYPTIAN HIEROGLYPH AA024 13427 ; [.523A.0020.0002] # EGYPTIAN HIEROGLYPH AA025 13428 ; [.523B.0020.0002] # EGYPTIAN HIEROGLYPH AA026 13429 ; [.523C.0020.0002] # EGYPTIAN HIEROGLYPH AA027 1342A ; [.523D.0020.0002] # EGYPTIAN HIEROGLYPH AA028 1342B ; [.523E.0020.0002] # EGYPTIAN HIEROGLYPH AA029 1342C ; [.523F.0020.0002] # EGYPTIAN HIEROGLYPH AA030 1342D ; [.5240.0020.0002] # EGYPTIAN HIEROGLYPH AA031 1342E ; [.5241.0020.0002] # EGYPTIAN HIEROGLYPH AA032 109A0 ; [.5242.0020.0002] # MEROITIC CURSIVE LETTER A 10980 ; [.5242.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER A 109A1 ; [.5243.0020.0002] # MEROITIC CURSIVE LETTER E 10981 ; [.5243.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER E 109A2 ; [.5244.0020.0002] # MEROITIC CURSIVE LETTER I 10982 ; [.5244.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER I 109A3 ; [.5245.0020.0002] # MEROITIC CURSIVE LETTER O 10983 ; [.5245.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER O 109A4 ; [.5246.0020.0002] # MEROITIC CURSIVE LETTER YA 10984 ; [.5246.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER YA 109A5 ; [.5247.0020.0002] # MEROITIC CURSIVE LETTER WA 10985 ; [.5247.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER WA 109A6 ; [.5248.0020.0002] # MEROITIC CURSIVE LETTER BA 10986 ; [.5248.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER BA 10987 ; [.5248.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER BA-2 109A7 ; [.5249.0020.0002] # MEROITIC CURSIVE LETTER PA 10988 ; [.5249.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER PA 109A8 ; [.524A.0020.0002] # MEROITIC CURSIVE LETTER MA 10989 ; [.524A.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER MA 109A9 ; [.524B.0020.0002] # MEROITIC CURSIVE LETTER NA 1098A ; [.524B.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER NA 1098B ; [.524B.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER NA-2 109AA ; [.524C.0020.0002] # MEROITIC CURSIVE LETTER NE 1098C ; [.524C.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER NE 1098D ; [.524C.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER NE-2 109AB ; [.524D.0020.0002] # MEROITIC CURSIVE LETTER RA 1098E ; [.524D.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER RA 1098F ; [.524D.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER RA-2 109AC ; [.524E.0020.0002] # MEROITIC CURSIVE LETTER LA 10990 ; [.524E.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER LA 109AD ; [.524F.0020.0002] # MEROITIC CURSIVE LETTER KHA 10991 ; [.524F.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER KHA 109AE ; [.5250.0020.0002] # MEROITIC CURSIVE LETTER HHA 10992 ; [.5250.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER HHA 109AF ; [.5251.0020.0002] # MEROITIC CURSIVE LETTER SA 109B0 ; [.5251.0020.0004][.0000.0110.0004] # MEROITIC CURSIVE LETTER ARCHAIC SA 10993 ; [.5251.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER SA 10994 ; [.5251.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER SA-2 109B1 ; [.5252.0020.0002] # MEROITIC CURSIVE LETTER SE 10995 ; [.5252.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER SE 109B2 ; [.5253.0020.0002] # MEROITIC CURSIVE LETTER KA 10996 ; [.5253.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER KA 109B3 ; [.5254.0020.0002] # MEROITIC CURSIVE LETTER QA 10997 ; [.5254.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER QA 109B4 ; [.5255.0020.0002] # MEROITIC CURSIVE LETTER TA 10998 ; [.5255.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER TA 10999 ; [.5255.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER TA-2 109B5 ; [.5256.0020.0002] # MEROITIC CURSIVE LETTER TE 1099A ; [.5256.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER TE 1099B ; [.5256.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER TE-2 109B6 ; [.5257.0020.0002] # MEROITIC CURSIVE LETTER TO 1099C ; [.5257.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER TO 109B7 ; [.5258.0020.0002] # MEROITIC CURSIVE LETTER DA 1099D ; [.5258.0020.0004][.0000.0110.0004] # MEROITIC HIEROGLYPHIC LETTER DA 109BE ; [.5259.0020.0002] # MEROITIC CURSIVE LOGOGRAM RMT 109BF ; [.525A.0020.0002] # MEROITIC CURSIVE LOGOGRAM IMN 1099E ; [.525B.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ 1099F ; [.525C.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 14400 ; [.525D.0020.0002] # ANATOLIAN HIEROGLYPH A001 14401 ; [.525E.0020.0002] # ANATOLIAN HIEROGLYPH A002 14402 ; [.525F.0020.0002] # ANATOLIAN HIEROGLYPH A003 14403 ; [.5260.0020.0002] # ANATOLIAN HIEROGLYPH A004 14404 ; [.5261.0020.0002] # ANATOLIAN HIEROGLYPH A005 14405 ; [.5262.0020.0002] # ANATOLIAN HIEROGLYPH A006 14406 ; [.5263.0020.0002] # ANATOLIAN HIEROGLYPH A007 14407 ; [.5264.0020.0002] # ANATOLIAN HIEROGLYPH A008 14408 ; [.5265.0020.0002] # ANATOLIAN HIEROGLYPH A009 14409 ; [.5266.0020.0002] # ANATOLIAN HIEROGLYPH A010 1440A ; [.5267.0020.0002] # ANATOLIAN HIEROGLYPH A010A 1440B ; [.5268.0020.0002] # ANATOLIAN HIEROGLYPH A011 1440C ; [.5269.0020.0002] # ANATOLIAN HIEROGLYPH A012 1440D ; [.526A.0020.0002] # ANATOLIAN HIEROGLYPH A013 1440E ; [.526B.0020.0002] # ANATOLIAN HIEROGLYPH A014 1440F ; [.526C.0020.0002] # ANATOLIAN HIEROGLYPH A015 14410 ; [.526D.0020.0002] # ANATOLIAN HIEROGLYPH A016 14411 ; [.526E.0020.0002] # ANATOLIAN HIEROGLYPH A017 14412 ; [.526F.0020.0002] # ANATOLIAN HIEROGLYPH A018 14413 ; [.5270.0020.0002] # ANATOLIAN HIEROGLYPH A019 14414 ; [.5271.0020.0002] # ANATOLIAN HIEROGLYPH A020 14415 ; [.5272.0020.0002] # ANATOLIAN HIEROGLYPH A021 14416 ; [.5273.0020.0002] # ANATOLIAN HIEROGLYPH A022 14417 ; [.5274.0020.0002] # ANATOLIAN HIEROGLYPH A023 14418 ; [.5275.0020.0002] # ANATOLIAN HIEROGLYPH A024 14419 ; [.5276.0020.0002] # ANATOLIAN HIEROGLYPH A025 1441A ; [.5277.0020.0002] # ANATOLIAN HIEROGLYPH A026 1441B ; [.5278.0020.0002] # ANATOLIAN HIEROGLYPH A026A 1441C ; [.5279.0020.0002] # ANATOLIAN HIEROGLYPH A027 1441D ; [.527A.0020.0002] # ANATOLIAN HIEROGLYPH A028 1441E ; [.527B.0020.0002] # ANATOLIAN HIEROGLYPH A029 1441F ; [.527C.0020.0002] # ANATOLIAN HIEROGLYPH A030 14420 ; [.527D.0020.0002] # ANATOLIAN HIEROGLYPH A031 14421 ; [.527E.0020.0002] # ANATOLIAN HIEROGLYPH A032 14422 ; [.527F.0020.0002] # ANATOLIAN HIEROGLYPH A033 14423 ; [.5280.0020.0002] # ANATOLIAN HIEROGLYPH A034 14424 ; [.5281.0020.0002] # ANATOLIAN HIEROGLYPH A035 14425 ; [.5282.0020.0002] # ANATOLIAN HIEROGLYPH A036 14426 ; [.5283.0020.0002] # ANATOLIAN HIEROGLYPH A037 14427 ; [.5284.0020.0002] # ANATOLIAN HIEROGLYPH A038 14428 ; [.5285.0020.0002] # ANATOLIAN HIEROGLYPH A039 14429 ; [.5286.0020.0002] # ANATOLIAN HIEROGLYPH A039A 1442A ; [.5287.0020.0002] # ANATOLIAN HIEROGLYPH A040 1442B ; [.5288.0020.0002] # ANATOLIAN HIEROGLYPH A041 1442C ; [.5289.0020.0002] # ANATOLIAN HIEROGLYPH A041A 1442D ; [.528A.0020.0002] # ANATOLIAN HIEROGLYPH A042 1442E ; [.528B.0020.0002] # ANATOLIAN HIEROGLYPH A043 1442F ; [.528C.0020.0002] # ANATOLIAN HIEROGLYPH A044 14430 ; [.528D.0020.0002] # ANATOLIAN HIEROGLYPH A045 14431 ; [.528E.0020.0002] # ANATOLIAN HIEROGLYPH A045A 14432 ; [.528F.0020.0002] # ANATOLIAN HIEROGLYPH A046 14433 ; [.5290.0020.0002] # ANATOLIAN HIEROGLYPH A046A 14434 ; [.5291.0020.0002] # ANATOLIAN HIEROGLYPH A046B 14435 ; [.5292.0020.0002] # ANATOLIAN HIEROGLYPH A047 14436 ; [.5293.0020.0002] # ANATOLIAN HIEROGLYPH A048 14437 ; [.5294.0020.0002] # ANATOLIAN HIEROGLYPH A049 14438 ; [.5295.0020.0002] # ANATOLIAN HIEROGLYPH A050 14439 ; [.5296.0020.0002] # ANATOLIAN HIEROGLYPH A051 1443A ; [.5297.0020.0002] # ANATOLIAN HIEROGLYPH A052 1443B ; [.5298.0020.0002] # ANATOLIAN HIEROGLYPH A053 1443C ; [.5299.0020.0002] # ANATOLIAN HIEROGLYPH A054 1443D ; [.529A.0020.0002] # ANATOLIAN HIEROGLYPH A055 1443E ; [.529B.0020.0002] # ANATOLIAN HIEROGLYPH A056 1443F ; [.529C.0020.0002] # ANATOLIAN HIEROGLYPH A057 14440 ; [.529D.0020.0002] # ANATOLIAN HIEROGLYPH A058 14441 ; [.529E.0020.0002] # ANATOLIAN HIEROGLYPH A059 14442 ; [.529F.0020.0002] # ANATOLIAN HIEROGLYPH A060 14443 ; [.52A0.0020.0002] # ANATOLIAN HIEROGLYPH A061 14444 ; [.52A1.0020.0002] # ANATOLIAN HIEROGLYPH A062 14445 ; [.52A2.0020.0002] # ANATOLIAN HIEROGLYPH A063 14446 ; [.52A3.0020.0002] # ANATOLIAN HIEROGLYPH A064 14447 ; [.52A4.0020.0002] # ANATOLIAN HIEROGLYPH A065 14448 ; [.52A5.0020.0002] # ANATOLIAN HIEROGLYPH A066 14449 ; [.52A6.0020.0002] # ANATOLIAN HIEROGLYPH A066A 1444A ; [.52A7.0020.0002] # ANATOLIAN HIEROGLYPH A066B 1444B ; [.52A8.0020.0002] # ANATOLIAN HIEROGLYPH A066C 1444C ; [.52A9.0020.0002] # ANATOLIAN HIEROGLYPH A067 1444D ; [.52AA.0020.0002] # ANATOLIAN HIEROGLYPH A068 1444E ; [.52AB.0020.0002] # ANATOLIAN HIEROGLYPH A069 1444F ; [.52AC.0020.0002] # ANATOLIAN HIEROGLYPH A070 14450 ; [.52AD.0020.0002] # ANATOLIAN HIEROGLYPH A071 14451 ; [.52AE.0020.0002] # ANATOLIAN HIEROGLYPH A072 14452 ; [.52AF.0020.0002] # ANATOLIAN HIEROGLYPH A073 14453 ; [.52B0.0020.0002] # ANATOLIAN HIEROGLYPH A074 14454 ; [.52B1.0020.0002] # ANATOLIAN HIEROGLYPH A075 14455 ; [.52B2.0020.0002] # ANATOLIAN HIEROGLYPH A076 14456 ; [.52B3.0020.0002] # ANATOLIAN HIEROGLYPH A077 14457 ; [.52B4.0020.0002] # ANATOLIAN HIEROGLYPH A078 14458 ; [.52B5.0020.0002] # ANATOLIAN HIEROGLYPH A079 14459 ; [.52B6.0020.0002] # ANATOLIAN HIEROGLYPH A080 1445A ; [.52B7.0020.0002] # ANATOLIAN HIEROGLYPH A081 1445B ; [.52B8.0020.0002] # ANATOLIAN HIEROGLYPH A082 1445C ; [.52B9.0020.0002] # ANATOLIAN HIEROGLYPH A083 1445D ; [.52BA.0020.0002] # ANATOLIAN HIEROGLYPH A084 1445E ; [.52BB.0020.0002] # ANATOLIAN HIEROGLYPH A085 1445F ; [.52BC.0020.0002] # ANATOLIAN HIEROGLYPH A086 14460 ; [.52BD.0020.0002] # ANATOLIAN HIEROGLYPH A087 14461 ; [.52BE.0020.0002] # ANATOLIAN HIEROGLYPH A088 14462 ; [.52BF.0020.0002] # ANATOLIAN HIEROGLYPH A089 14463 ; [.52C0.0020.0002] # ANATOLIAN HIEROGLYPH A090 14464 ; [.52C1.0020.0002] # ANATOLIAN HIEROGLYPH A091 14465 ; [.52C2.0020.0002] # ANATOLIAN HIEROGLYPH A092 14466 ; [.52C3.0020.0002] # ANATOLIAN HIEROGLYPH A093 14467 ; [.52C4.0020.0002] # ANATOLIAN HIEROGLYPH A094 14468 ; [.52C5.0020.0002] # ANATOLIAN HIEROGLYPH A095 14469 ; [.52C6.0020.0002] # ANATOLIAN HIEROGLYPH A096 1446A ; [.52C7.0020.0002] # ANATOLIAN HIEROGLYPH A097 1446B ; [.52C8.0020.0002] # ANATOLIAN HIEROGLYPH A097A 1446C ; [.52C9.0020.0002] # ANATOLIAN HIEROGLYPH A098 1446D ; [.52CA.0020.0002] # ANATOLIAN HIEROGLYPH A098A 1446E ; [.52CB.0020.0002] # ANATOLIAN HIEROGLYPH A099 1446F ; [.52CC.0020.0002] # ANATOLIAN HIEROGLYPH A100 14470 ; [.52CD.0020.0002] # ANATOLIAN HIEROGLYPH A100A 14471 ; [.52CE.0020.0002] # ANATOLIAN HIEROGLYPH A101 14472 ; [.52CF.0020.0002] # ANATOLIAN HIEROGLYPH A101A 14473 ; [.52D0.0020.0002] # ANATOLIAN HIEROGLYPH A102 14474 ; [.52D1.0020.0002] # ANATOLIAN HIEROGLYPH A102A 14475 ; [.52D2.0020.0002] # ANATOLIAN HIEROGLYPH A103 14476 ; [.52D3.0020.0002] # ANATOLIAN HIEROGLYPH A104 14477 ; [.52D4.0020.0002] # ANATOLIAN HIEROGLYPH A104A 14478 ; [.52D5.0020.0002] # ANATOLIAN HIEROGLYPH A104B 14479 ; [.52D6.0020.0002] # ANATOLIAN HIEROGLYPH A104C 1447A ; [.52D7.0020.0002] # ANATOLIAN HIEROGLYPH A105 1447B ; [.52D8.0020.0002] # ANATOLIAN HIEROGLYPH A105A 1447C ; [.52D9.0020.0002] # ANATOLIAN HIEROGLYPH A105B 1447D ; [.52DA.0020.0002] # ANATOLIAN HIEROGLYPH A106 1447E ; [.52DB.0020.0002] # ANATOLIAN HIEROGLYPH A107 1447F ; [.52DC.0020.0002] # ANATOLIAN HIEROGLYPH A107A 14480 ; [.52DD.0020.0002] # ANATOLIAN HIEROGLYPH A107B 14481 ; [.52DE.0020.0002] # ANATOLIAN HIEROGLYPH A107C 14482 ; [.52DF.0020.0002] # ANATOLIAN HIEROGLYPH A108 14483 ; [.52E0.0020.0002] # ANATOLIAN HIEROGLYPH A109 14484 ; [.52E1.0020.0002] # ANATOLIAN HIEROGLYPH A110 14485 ; [.52E2.0020.0002] # ANATOLIAN HIEROGLYPH A110A 14486 ; [.52E3.0020.0002] # ANATOLIAN HIEROGLYPH A110B 14487 ; [.52E4.0020.0002] # ANATOLIAN HIEROGLYPH A111 14488 ; [.52E5.0020.0002] # ANATOLIAN HIEROGLYPH A112 14489 ; [.52E6.0020.0002] # ANATOLIAN HIEROGLYPH A113 1448A ; [.52E7.0020.0002] # ANATOLIAN HIEROGLYPH A114 1448B ; [.52E8.0020.0002] # ANATOLIAN HIEROGLYPH A115 1448C ; [.52E9.0020.0002] # ANATOLIAN HIEROGLYPH A115A 1448D ; [.52EA.0020.0002] # ANATOLIAN HIEROGLYPH A116 1448E ; [.52EB.0020.0002] # ANATOLIAN HIEROGLYPH A117 1448F ; [.52EC.0020.0002] # ANATOLIAN HIEROGLYPH A118 14490 ; [.52ED.0020.0002] # ANATOLIAN HIEROGLYPH A119 14491 ; [.52EE.0020.0002] # ANATOLIAN HIEROGLYPH A120 14492 ; [.52EF.0020.0002] # ANATOLIAN HIEROGLYPH A121 14493 ; [.52F0.0020.0002] # ANATOLIAN HIEROGLYPH A122 14494 ; [.52F1.0020.0002] # ANATOLIAN HIEROGLYPH A123 14495 ; [.52F2.0020.0002] # ANATOLIAN HIEROGLYPH A124 14496 ; [.52F3.0020.0002] # ANATOLIAN HIEROGLYPH A125 14497 ; [.52F4.0020.0002] # ANATOLIAN HIEROGLYPH A125A 14498 ; [.52F5.0020.0002] # ANATOLIAN HIEROGLYPH A126 14499 ; [.52F6.0020.0002] # ANATOLIAN HIEROGLYPH A127 1449A ; [.52F7.0020.0002] # ANATOLIAN HIEROGLYPH A128 1449B ; [.52F8.0020.0002] # ANATOLIAN HIEROGLYPH A129 1449C ; [.52F9.0020.0002] # ANATOLIAN HIEROGLYPH A130 1449D ; [.52FA.0020.0002] # ANATOLIAN HIEROGLYPH A131 1449E ; [.52FB.0020.0002] # ANATOLIAN HIEROGLYPH A132 1449F ; [.52FC.0020.0002] # ANATOLIAN HIEROGLYPH A133 144A0 ; [.52FD.0020.0002] # ANATOLIAN HIEROGLYPH A134 144A1 ; [.52FE.0020.0002] # ANATOLIAN HIEROGLYPH A135 144A2 ; [.52FF.0020.0002] # ANATOLIAN HIEROGLYPH A135A 144A3 ; [.5300.0020.0002] # ANATOLIAN HIEROGLYPH A136 144A4 ; [.5301.0020.0002] # ANATOLIAN HIEROGLYPH A137 144A5 ; [.5302.0020.0002] # ANATOLIAN HIEROGLYPH A138 144A6 ; [.5303.0020.0002] # ANATOLIAN HIEROGLYPH A139 144A7 ; [.5304.0020.0002] # ANATOLIAN HIEROGLYPH A140 144A8 ; [.5305.0020.0002] # ANATOLIAN HIEROGLYPH A141 144A9 ; [.5306.0020.0002] # ANATOLIAN HIEROGLYPH A142 144AA ; [.5307.0020.0002] # ANATOLIAN HIEROGLYPH A143 144AB ; [.5308.0020.0002] # ANATOLIAN HIEROGLYPH A144 144AC ; [.5309.0020.0002] # ANATOLIAN HIEROGLYPH A145 144AD ; [.530A.0020.0002] # ANATOLIAN HIEROGLYPH A146 144AE ; [.530B.0020.0002] # ANATOLIAN HIEROGLYPH A147 144AF ; [.530C.0020.0002] # ANATOLIAN HIEROGLYPH A148 144B0 ; [.530D.0020.0002] # ANATOLIAN HIEROGLYPH A149 144B1 ; [.530E.0020.0002] # ANATOLIAN HIEROGLYPH A150 144B2 ; [.530F.0020.0002] # ANATOLIAN HIEROGLYPH A151 144B3 ; [.5310.0020.0002] # ANATOLIAN HIEROGLYPH A152 144B4 ; [.5311.0020.0002] # ANATOLIAN HIEROGLYPH A153 144B5 ; [.5312.0020.0002] # ANATOLIAN HIEROGLYPH A154 144B6 ; [.5313.0020.0002] # ANATOLIAN HIEROGLYPH A155 144B7 ; [.5314.0020.0002] # ANATOLIAN HIEROGLYPH A156 144B8 ; [.5315.0020.0002] # ANATOLIAN HIEROGLYPH A157 144B9 ; [.5316.0020.0002] # ANATOLIAN HIEROGLYPH A158 144BA ; [.5317.0020.0002] # ANATOLIAN HIEROGLYPH A159 144BB ; [.5318.0020.0002] # ANATOLIAN HIEROGLYPH A160 144BC ; [.5319.0020.0002] # ANATOLIAN HIEROGLYPH A161 144BD ; [.531A.0020.0002] # ANATOLIAN HIEROGLYPH A162 144BE ; [.531B.0020.0002] # ANATOLIAN HIEROGLYPH A163 144BF ; [.531C.0020.0002] # ANATOLIAN HIEROGLYPH A164 144C0 ; [.531D.0020.0002] # ANATOLIAN HIEROGLYPH A165 144C1 ; [.531E.0020.0002] # ANATOLIAN HIEROGLYPH A166 144C2 ; [.531F.0020.0002] # ANATOLIAN HIEROGLYPH A167 144C3 ; [.5320.0020.0002] # ANATOLIAN HIEROGLYPH A168 144C4 ; [.5321.0020.0002] # ANATOLIAN HIEROGLYPH A169 144C5 ; [.5322.0020.0002] # ANATOLIAN HIEROGLYPH A170 144C6 ; [.5323.0020.0002] # ANATOLIAN HIEROGLYPH A171 144C7 ; [.5324.0020.0002] # ANATOLIAN HIEROGLYPH A172 144C8 ; [.5325.0020.0002] # ANATOLIAN HIEROGLYPH A173 144C9 ; [.5326.0020.0002] # ANATOLIAN HIEROGLYPH A174 144CA ; [.5327.0020.0002] # ANATOLIAN HIEROGLYPH A175 144CB ; [.5328.0020.0002] # ANATOLIAN HIEROGLYPH A176 144CC ; [.5329.0020.0002] # ANATOLIAN HIEROGLYPH A177 144CD ; [.532A.0020.0002] # ANATOLIAN HIEROGLYPH A178 144CE ; [.532B.0020.0002] # ANATOLIAN HIEROGLYPH A179 144CF ; [.532C.0020.0002] # ANATOLIAN HIEROGLYPH A180 144D0 ; [.532D.0020.0002] # ANATOLIAN HIEROGLYPH A181 144D1 ; [.532E.0020.0002] # ANATOLIAN HIEROGLYPH A182 144D2 ; [.532F.0020.0002] # ANATOLIAN HIEROGLYPH A183 144D3 ; [.5330.0020.0002] # ANATOLIAN HIEROGLYPH A184 144D4 ; [.5331.0020.0002] # ANATOLIAN HIEROGLYPH A185 144D5 ; [.5332.0020.0002] # ANATOLIAN HIEROGLYPH A186 144D6 ; [.5333.0020.0002] # ANATOLIAN HIEROGLYPH A187 144D7 ; [.5334.0020.0002] # ANATOLIAN HIEROGLYPH A188 144D8 ; [.5335.0020.0002] # ANATOLIAN HIEROGLYPH A189 144D9 ; [.5336.0020.0002] # ANATOLIAN HIEROGLYPH A190 144DA ; [.5337.0020.0002] # ANATOLIAN HIEROGLYPH A191 144DB ; [.5338.0020.0002] # ANATOLIAN HIEROGLYPH A192 144DC ; [.5339.0020.0002] # ANATOLIAN HIEROGLYPH A193 144DD ; [.533A.0020.0002] # ANATOLIAN HIEROGLYPH A194 144DE ; [.533B.0020.0002] # ANATOLIAN HIEROGLYPH A195 144DF ; [.533C.0020.0002] # ANATOLIAN HIEROGLYPH A196 144E0 ; [.533D.0020.0002] # ANATOLIAN HIEROGLYPH A197 144E1 ; [.533E.0020.0002] # ANATOLIAN HIEROGLYPH A198 144E2 ; [.533F.0020.0002] # ANATOLIAN HIEROGLYPH A199 144E3 ; [.5340.0020.0002] # ANATOLIAN HIEROGLYPH A200 144E4 ; [.5341.0020.0002] # ANATOLIAN HIEROGLYPH A201 144E5 ; [.5342.0020.0002] # ANATOLIAN HIEROGLYPH A202 144E6 ; [.5343.0020.0002] # ANATOLIAN HIEROGLYPH A202A 144E7 ; [.5344.0020.0002] # ANATOLIAN HIEROGLYPH A202B 144E8 ; [.5345.0020.0002] # ANATOLIAN HIEROGLYPH A203 144E9 ; [.5346.0020.0002] # ANATOLIAN HIEROGLYPH A204 144EA ; [.5347.0020.0002] # ANATOLIAN HIEROGLYPH A205 144EB ; [.5348.0020.0002] # ANATOLIAN HIEROGLYPH A206 144EC ; [.5349.0020.0002] # ANATOLIAN HIEROGLYPH A207 144ED ; [.534A.0020.0002] # ANATOLIAN HIEROGLYPH A207A 144EE ; [.534B.0020.0002] # ANATOLIAN HIEROGLYPH A208 144EF ; [.534C.0020.0002] # ANATOLIAN HIEROGLYPH A209 144F0 ; [.534D.0020.0002] # ANATOLIAN HIEROGLYPH A209A 144F1 ; [.534E.0020.0002] # ANATOLIAN HIEROGLYPH A210 144F2 ; [.534F.0020.0002] # ANATOLIAN HIEROGLYPH A211 144F3 ; [.5350.0020.0002] # ANATOLIAN HIEROGLYPH A212 144F4 ; [.5351.0020.0002] # ANATOLIAN HIEROGLYPH A213 144F5 ; [.5352.0020.0002] # ANATOLIAN HIEROGLYPH A214 144F6 ; [.5353.0020.0002] # ANATOLIAN HIEROGLYPH A215 144F7 ; [.5354.0020.0002] # ANATOLIAN HIEROGLYPH A215A 144F8 ; [.5355.0020.0002] # ANATOLIAN HIEROGLYPH A216 144F9 ; [.5356.0020.0002] # ANATOLIAN HIEROGLYPH A216A 144FA ; [.5357.0020.0002] # ANATOLIAN HIEROGLYPH A217 144FB ; [.5358.0020.0002] # ANATOLIAN HIEROGLYPH A218 144FC ; [.5359.0020.0002] # ANATOLIAN HIEROGLYPH A219 144FD ; [.535A.0020.0002] # ANATOLIAN HIEROGLYPH A220 144FE ; [.535B.0020.0002] # ANATOLIAN HIEROGLYPH A221 144FF ; [.535C.0020.0002] # ANATOLIAN HIEROGLYPH A222 14500 ; [.535D.0020.0002] # ANATOLIAN HIEROGLYPH A223 14501 ; [.535E.0020.0002] # ANATOLIAN HIEROGLYPH A224 14502 ; [.535F.0020.0002] # ANATOLIAN HIEROGLYPH A225 14503 ; [.5360.0020.0002] # ANATOLIAN HIEROGLYPH A226 14504 ; [.5361.0020.0002] # ANATOLIAN HIEROGLYPH A227 14505 ; [.5362.0020.0002] # ANATOLIAN HIEROGLYPH A227A 14506 ; [.5363.0020.0002] # ANATOLIAN HIEROGLYPH A228 14507 ; [.5364.0020.0002] # ANATOLIAN HIEROGLYPH A229 14508 ; [.5365.0020.0002] # ANATOLIAN HIEROGLYPH A230 14509 ; [.5366.0020.0002] # ANATOLIAN HIEROGLYPH A231 1450A ; [.5367.0020.0002] # ANATOLIAN HIEROGLYPH A232 1450B ; [.5368.0020.0002] # ANATOLIAN HIEROGLYPH A233 1450C ; [.5369.0020.0002] # ANATOLIAN HIEROGLYPH A234 1450D ; [.536A.0020.0002] # ANATOLIAN HIEROGLYPH A235 1450E ; [.536B.0020.0002] # ANATOLIAN HIEROGLYPH A236 1450F ; [.536C.0020.0002] # ANATOLIAN HIEROGLYPH A237 14510 ; [.536D.0020.0002] # ANATOLIAN HIEROGLYPH A238 14511 ; [.536E.0020.0002] # ANATOLIAN HIEROGLYPH A239 14512 ; [.536F.0020.0002] # ANATOLIAN HIEROGLYPH A240 14513 ; [.5370.0020.0002] # ANATOLIAN HIEROGLYPH A241 14514 ; [.5371.0020.0002] # ANATOLIAN HIEROGLYPH A242 14515 ; [.5372.0020.0002] # ANATOLIAN HIEROGLYPH A243 14516 ; [.5373.0020.0002] # ANATOLIAN HIEROGLYPH A244 14517 ; [.5374.0020.0002] # ANATOLIAN HIEROGLYPH A245 14518 ; [.5375.0020.0002] # ANATOLIAN HIEROGLYPH A246 14519 ; [.5376.0020.0002] # ANATOLIAN HIEROGLYPH A247 1451A ; [.5377.0020.0002] # ANATOLIAN HIEROGLYPH A248 1451B ; [.5378.0020.0002] # ANATOLIAN HIEROGLYPH A249 1451C ; [.5379.0020.0002] # ANATOLIAN HIEROGLYPH A250 1451D ; [.537A.0020.0002] # ANATOLIAN HIEROGLYPH A251 1451E ; [.537B.0020.0002] # ANATOLIAN HIEROGLYPH A252 1451F ; [.537C.0020.0002] # ANATOLIAN HIEROGLYPH A253 14520 ; [.537D.0020.0002] # ANATOLIAN HIEROGLYPH A254 14521 ; [.537E.0020.0002] # ANATOLIAN HIEROGLYPH A255 14522 ; [.537F.0020.0002] # ANATOLIAN HIEROGLYPH A256 14523 ; [.5380.0020.0002] # ANATOLIAN HIEROGLYPH A257 14524 ; [.5381.0020.0002] # ANATOLIAN HIEROGLYPH A258 14525 ; [.5382.0020.0002] # ANATOLIAN HIEROGLYPH A259 14526 ; [.5383.0020.0002] # ANATOLIAN HIEROGLYPH A260 14527 ; [.5384.0020.0002] # ANATOLIAN HIEROGLYPH A261 14528 ; [.5385.0020.0002] # ANATOLIAN HIEROGLYPH A262 14529 ; [.5386.0020.0002] # ANATOLIAN HIEROGLYPH A263 1452A ; [.5387.0020.0002] # ANATOLIAN HIEROGLYPH A264 1452B ; [.5388.0020.0002] # ANATOLIAN HIEROGLYPH A265 1452C ; [.5389.0020.0002] # ANATOLIAN HIEROGLYPH A266 1452D ; [.538A.0020.0002] # ANATOLIAN HIEROGLYPH A267 1452E ; [.538B.0020.0002] # ANATOLIAN HIEROGLYPH A267A 1452F ; [.538C.0020.0002] # ANATOLIAN HIEROGLYPH A268 14530 ; [.538D.0020.0002] # ANATOLIAN HIEROGLYPH A269 14531 ; [.538E.0020.0002] # ANATOLIAN HIEROGLYPH A270 14532 ; [.538F.0020.0002] # ANATOLIAN HIEROGLYPH A271 14533 ; [.5390.0020.0002] # ANATOLIAN HIEROGLYPH A272 14534 ; [.5391.0020.0002] # ANATOLIAN HIEROGLYPH A273 14535 ; [.5392.0020.0002] # ANATOLIAN HIEROGLYPH A274 14536 ; [.5393.0020.0002] # ANATOLIAN HIEROGLYPH A275 14537 ; [.5394.0020.0002] # ANATOLIAN HIEROGLYPH A276 14538 ; [.5395.0020.0002] # ANATOLIAN HIEROGLYPH A277 14539 ; [.5396.0020.0002] # ANATOLIAN HIEROGLYPH A278 1453A ; [.5397.0020.0002] # ANATOLIAN HIEROGLYPH A279 1453B ; [.5398.0020.0002] # ANATOLIAN HIEROGLYPH A280 1453C ; [.5399.0020.0002] # ANATOLIAN HIEROGLYPH A281 1453D ; [.539A.0020.0002] # ANATOLIAN HIEROGLYPH A282 1453E ; [.539B.0020.0002] # ANATOLIAN HIEROGLYPH A283 1453F ; [.539C.0020.0002] # ANATOLIAN HIEROGLYPH A284 14540 ; [.539D.0020.0002] # ANATOLIAN HIEROGLYPH A285 14541 ; [.539E.0020.0002] # ANATOLIAN HIEROGLYPH A286 14542 ; [.539F.0020.0002] # ANATOLIAN HIEROGLYPH A287 14543 ; [.53A0.0020.0002] # ANATOLIAN HIEROGLYPH A288 14544 ; [.53A1.0020.0002] # ANATOLIAN HIEROGLYPH A289 14545 ; [.53A2.0020.0002] # ANATOLIAN HIEROGLYPH A289A 14546 ; [.53A3.0020.0002] # ANATOLIAN HIEROGLYPH A290 14547 ; [.53A4.0020.0002] # ANATOLIAN HIEROGLYPH A291 14548 ; [.53A5.0020.0002] # ANATOLIAN HIEROGLYPH A292 14549 ; [.53A6.0020.0002] # ANATOLIAN HIEROGLYPH A293 1454A ; [.53A7.0020.0002] # ANATOLIAN HIEROGLYPH A294 1454B ; [.53A8.0020.0002] # ANATOLIAN HIEROGLYPH A294A 1454C ; [.53A9.0020.0002] # ANATOLIAN HIEROGLYPH A295 1454D ; [.53AA.0020.0002] # ANATOLIAN HIEROGLYPH A296 1454E ; [.53AB.0020.0002] # ANATOLIAN HIEROGLYPH A297 1454F ; [.53AC.0020.0002] # ANATOLIAN HIEROGLYPH A298 14550 ; [.53AD.0020.0002] # ANATOLIAN HIEROGLYPH A299 14551 ; [.53AE.0020.0002] # ANATOLIAN HIEROGLYPH A299A 14552 ; [.53AF.0020.0002] # ANATOLIAN HIEROGLYPH A300 14553 ; [.53B0.0020.0002] # ANATOLIAN HIEROGLYPH A301 14554 ; [.53B1.0020.0002] # ANATOLIAN HIEROGLYPH A302 14555 ; [.53B2.0020.0002] # ANATOLIAN HIEROGLYPH A303 14556 ; [.53B3.0020.0002] # ANATOLIAN HIEROGLYPH A304 14557 ; [.53B4.0020.0002] # ANATOLIAN HIEROGLYPH A305 14558 ; [.53B5.0020.0002] # ANATOLIAN HIEROGLYPH A306 14559 ; [.53B6.0020.0002] # ANATOLIAN HIEROGLYPH A307 1455A ; [.53B7.0020.0002] # ANATOLIAN HIEROGLYPH A308 1455B ; [.53B8.0020.0002] # ANATOLIAN HIEROGLYPH A309 1455C ; [.53B9.0020.0002] # ANATOLIAN HIEROGLYPH A309A 1455D ; [.53BA.0020.0002] # ANATOLIAN HIEROGLYPH A310 1455E ; [.53BB.0020.0002] # ANATOLIAN HIEROGLYPH A311 1455F ; [.53BC.0020.0002] # ANATOLIAN HIEROGLYPH A312 14560 ; [.53BD.0020.0002] # ANATOLIAN HIEROGLYPH A313 14561 ; [.53BE.0020.0002] # ANATOLIAN HIEROGLYPH A314 14562 ; [.53BF.0020.0002] # ANATOLIAN HIEROGLYPH A315 14563 ; [.53C0.0020.0002] # ANATOLIAN HIEROGLYPH A316 14564 ; [.53C1.0020.0002] # ANATOLIAN HIEROGLYPH A317 14565 ; [.53C2.0020.0002] # ANATOLIAN HIEROGLYPH A318 14566 ; [.53C3.0020.0002] # ANATOLIAN HIEROGLYPH A319 14567 ; [.53C4.0020.0002] # ANATOLIAN HIEROGLYPH A320 14568 ; [.53C5.0020.0002] # ANATOLIAN HIEROGLYPH A321 14569 ; [.53C6.0020.0002] # ANATOLIAN HIEROGLYPH A322 1456A ; [.53C7.0020.0002] # ANATOLIAN HIEROGLYPH A323 1456B ; [.53C8.0020.0002] # ANATOLIAN HIEROGLYPH A324 1456C ; [.53C9.0020.0002] # ANATOLIAN HIEROGLYPH A325 1456D ; [.53CA.0020.0002] # ANATOLIAN HIEROGLYPH A326 1456E ; [.53CB.0020.0002] # ANATOLIAN HIEROGLYPH A327 1456F ; [.53CC.0020.0002] # ANATOLIAN HIEROGLYPH A328 14570 ; [.53CD.0020.0002] # ANATOLIAN HIEROGLYPH A329 14571 ; [.53CE.0020.0002] # ANATOLIAN HIEROGLYPH A329A 14572 ; [.53CF.0020.0002] # ANATOLIAN HIEROGLYPH A330 14573 ; [.53D0.0020.0002] # ANATOLIAN HIEROGLYPH A331 14574 ; [.53D1.0020.0002] # ANATOLIAN HIEROGLYPH A332A 14575 ; [.53D2.0020.0002] # ANATOLIAN HIEROGLYPH A332B 14576 ; [.53D3.0020.0002] # ANATOLIAN HIEROGLYPH A332C 14577 ; [.53D4.0020.0002] # ANATOLIAN HIEROGLYPH A333 14578 ; [.53D5.0020.0002] # ANATOLIAN HIEROGLYPH A334 14579 ; [.53D6.0020.0002] # ANATOLIAN HIEROGLYPH A335 1457A ; [.53D7.0020.0002] # ANATOLIAN HIEROGLYPH A336 1457B ; [.53D8.0020.0002] # ANATOLIAN HIEROGLYPH A336A 1457C ; [.53D9.0020.0002] # ANATOLIAN HIEROGLYPH A336B 1457D ; [.53DA.0020.0002] # ANATOLIAN HIEROGLYPH A336C 1457E ; [.53DB.0020.0002] # ANATOLIAN HIEROGLYPH A337 1457F ; [.53DC.0020.0002] # ANATOLIAN HIEROGLYPH A338 14580 ; [.53DD.0020.0002] # ANATOLIAN HIEROGLYPH A339 14581 ; [.53DE.0020.0002] # ANATOLIAN HIEROGLYPH A340 14582 ; [.53DF.0020.0002] # ANATOLIAN HIEROGLYPH A341 14583 ; [.53E0.0020.0002] # ANATOLIAN HIEROGLYPH A342 14584 ; [.53E1.0020.0002] # ANATOLIAN HIEROGLYPH A343 14585 ; [.53E2.0020.0002] # ANATOLIAN HIEROGLYPH A344 14586 ; [.53E3.0020.0002] # ANATOLIAN HIEROGLYPH A345 14587 ; [.53E4.0020.0002] # ANATOLIAN HIEROGLYPH A346 14588 ; [.53E5.0020.0002] # ANATOLIAN HIEROGLYPH A347 14589 ; [.53E6.0020.0002] # ANATOLIAN HIEROGLYPH A348 1458A ; [.53E7.0020.0002] # ANATOLIAN HIEROGLYPH A349 1458B ; [.53E8.0020.0002] # ANATOLIAN HIEROGLYPH A350 1458C ; [.53E9.0020.0002] # ANATOLIAN HIEROGLYPH A351 1458D ; [.53EA.0020.0002] # ANATOLIAN HIEROGLYPH A352 1458E ; [.53EB.0020.0002] # ANATOLIAN HIEROGLYPH A353 1458F ; [.53EC.0020.0002] # ANATOLIAN HIEROGLYPH A354 14590 ; [.53ED.0020.0002] # ANATOLIAN HIEROGLYPH A355 14591 ; [.53EE.0020.0002] # ANATOLIAN HIEROGLYPH A356 14592 ; [.53EF.0020.0002] # ANATOLIAN HIEROGLYPH A357 14593 ; [.53F0.0020.0002] # ANATOLIAN HIEROGLYPH A358 14594 ; [.53F1.0020.0002] # ANATOLIAN HIEROGLYPH A359 14595 ; [.53F2.0020.0002] # ANATOLIAN HIEROGLYPH A359A 14596 ; [.53F3.0020.0002] # ANATOLIAN HIEROGLYPH A360 14597 ; [.53F4.0020.0002] # ANATOLIAN HIEROGLYPH A361 14598 ; [.53F5.0020.0002] # ANATOLIAN HIEROGLYPH A362 14599 ; [.53F6.0020.0002] # ANATOLIAN HIEROGLYPH A363 1459A ; [.53F7.0020.0002] # ANATOLIAN HIEROGLYPH A364 1459B ; [.53F8.0020.0002] # ANATOLIAN HIEROGLYPH A364A 1459C ; [.53F9.0020.0002] # ANATOLIAN HIEROGLYPH A365 1459D ; [.53FA.0020.0002] # ANATOLIAN HIEROGLYPH A366 1459E ; [.53FB.0020.0002] # ANATOLIAN HIEROGLYPH A367 1459F ; [.53FC.0020.0002] # ANATOLIAN HIEROGLYPH A368 145A0 ; [.53FD.0020.0002] # ANATOLIAN HIEROGLYPH A368A 145A1 ; [.53FE.0020.0002] # ANATOLIAN HIEROGLYPH A369 145A2 ; [.53FF.0020.0002] # ANATOLIAN HIEROGLYPH A370 145A3 ; [.5400.0020.0002] # ANATOLIAN HIEROGLYPH A371 145A4 ; [.5401.0020.0002] # ANATOLIAN HIEROGLYPH A371A 145A5 ; [.5402.0020.0002] # ANATOLIAN HIEROGLYPH A372 145A6 ; [.5403.0020.0002] # ANATOLIAN HIEROGLYPH A373 145A7 ; [.5404.0020.0002] # ANATOLIAN HIEROGLYPH A374 145A8 ; [.5405.0020.0002] # ANATOLIAN HIEROGLYPH A375 145A9 ; [.5406.0020.0002] # ANATOLIAN HIEROGLYPH A376 145AA ; [.5407.0020.0002] # ANATOLIAN HIEROGLYPH A377 145AB ; [.5408.0020.0002] # ANATOLIAN HIEROGLYPH A378 145AC ; [.5409.0020.0002] # ANATOLIAN HIEROGLYPH A379 145AD ; [.540A.0020.0002] # ANATOLIAN HIEROGLYPH A380 145AE ; [.540B.0020.0002] # ANATOLIAN HIEROGLYPH A381 145AF ; [.540C.0020.0002] # ANATOLIAN HIEROGLYPH A381A 145B0 ; [.540D.0020.0002] # ANATOLIAN HIEROGLYPH A382 145B1 ; [.540E.0020.0002] # ANATOLIAN HIEROGLYPH A383 RA OR RI 145B2 ; [.540F.0020.0002] # ANATOLIAN HIEROGLYPH A383A 145B3 ; [.5410.0020.0002] # ANATOLIAN HIEROGLYPH A384 145B4 ; [.5411.0020.0002] # ANATOLIAN HIEROGLYPH A385 145B5 ; [.5412.0020.0002] # ANATOLIAN HIEROGLYPH A386 145B6 ; [.5413.0020.0002] # ANATOLIAN HIEROGLYPH A386A 145B7 ; [.5414.0020.0002] # ANATOLIAN HIEROGLYPH A387 145B8 ; [.5415.0020.0002] # ANATOLIAN HIEROGLYPH A388 145B9 ; [.5416.0020.0002] # ANATOLIAN HIEROGLYPH A389 145BA ; [.5417.0020.0002] # ANATOLIAN HIEROGLYPH A390 145BB ; [.5418.0020.0002] # ANATOLIAN HIEROGLYPH A391 145BC ; [.5419.0020.0002] # ANATOLIAN HIEROGLYPH A392 145BD ; [.541A.0020.0002] # ANATOLIAN HIEROGLYPH A393 EIGHT 145BE ; [.541B.0020.0002] # ANATOLIAN HIEROGLYPH A394 145BF ; [.541C.0020.0002] # ANATOLIAN HIEROGLYPH A395 145C0 ; [.541D.0020.0002] # ANATOLIAN HIEROGLYPH A396 145C1 ; [.541E.0020.0002] # ANATOLIAN HIEROGLYPH A397 145C2 ; [.541F.0020.0002] # ANATOLIAN HIEROGLYPH A398 145C3 ; [.5420.0020.0002] # ANATOLIAN HIEROGLYPH A399 145C4 ; [.5421.0020.0002] # ANATOLIAN HIEROGLYPH A400 145C5 ; [.5422.0020.0002] # ANATOLIAN HIEROGLYPH A401 145C6 ; [.5423.0020.0002] # ANATOLIAN HIEROGLYPH A402 145C7 ; [.5424.0020.0002] # ANATOLIAN HIEROGLYPH A403 145C8 ; [.5425.0020.0002] # ANATOLIAN HIEROGLYPH A404 145C9 ; [.5426.0020.0002] # ANATOLIAN HIEROGLYPH A405 145CA ; [.5427.0020.0002] # ANATOLIAN HIEROGLYPH A406 145CB ; [.5428.0020.0002] # ANATOLIAN HIEROGLYPH A407 145CC ; [.5429.0020.0002] # ANATOLIAN HIEROGLYPH A408 145CD ; [.542A.0020.0002] # ANATOLIAN HIEROGLYPH A409 145CE ; [.542B.0020.0002] # ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK 145CF ; [.542C.0020.0002] # ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK 145D0 ; [.542D.0020.0002] # ANATOLIAN HIEROGLYPH A411 145D1 ; [.542E.0020.0002] # ANATOLIAN HIEROGLYPH A412 145D2 ; [.542F.0020.0002] # ANATOLIAN HIEROGLYPH A413 145D3 ; [.5430.0020.0002] # ANATOLIAN HIEROGLYPH A414 145D4 ; [.5431.0020.0002] # ANATOLIAN HIEROGLYPH A415 145D5 ; [.5432.0020.0002] # ANATOLIAN HIEROGLYPH A416 145D6 ; [.5433.0020.0002] # ANATOLIAN HIEROGLYPH A417 145D7 ; [.5434.0020.0002] # ANATOLIAN HIEROGLYPH A418 145D8 ; [.5435.0020.0002] # ANATOLIAN HIEROGLYPH A419 145D9 ; [.5436.0020.0002] # ANATOLIAN HIEROGLYPH A420 145DA ; [.5437.0020.0002] # ANATOLIAN HIEROGLYPH A421 145DB ; [.5438.0020.0002] # ANATOLIAN HIEROGLYPH A422 145DC ; [.5439.0020.0002] # ANATOLIAN HIEROGLYPH A423 145DD ; [.543A.0020.0002] # ANATOLIAN HIEROGLYPH A424 145DE ; [.543B.0020.0002] # ANATOLIAN HIEROGLYPH A425 145DF ; [.543C.0020.0002] # ANATOLIAN HIEROGLYPH A426 145E0 ; [.543D.0020.0002] # ANATOLIAN HIEROGLYPH A427 145E1 ; [.543E.0020.0002] # ANATOLIAN HIEROGLYPH A428 145E2 ; [.543F.0020.0002] # ANATOLIAN HIEROGLYPH A429 145E3 ; [.5440.0020.0002] # ANATOLIAN HIEROGLYPH A430 145E4 ; [.5441.0020.0002] # ANATOLIAN HIEROGLYPH A431 145E5 ; [.5442.0020.0002] # ANATOLIAN HIEROGLYPH A432 145E6 ; [.5443.0020.0002] # ANATOLIAN HIEROGLYPH A433 145E7 ; [.5444.0020.0002] # ANATOLIAN HIEROGLYPH A434 145E8 ; [.5445.0020.0002] # ANATOLIAN HIEROGLYPH A435 145E9 ; [.5446.0020.0002] # ANATOLIAN HIEROGLYPH A436 145EA ; [.5447.0020.0002] # ANATOLIAN HIEROGLYPH A437 145EB ; [.5448.0020.0002] # ANATOLIAN HIEROGLYPH A438 145EC ; [.5449.0020.0002] # ANATOLIAN HIEROGLYPH A439 145ED ; [.544A.0020.0002] # ANATOLIAN HIEROGLYPH A440 145EE ; [.544B.0020.0002] # ANATOLIAN HIEROGLYPH A441 145EF ; [.544C.0020.0002] # ANATOLIAN HIEROGLYPH A442 145F0 ; [.544D.0020.0002] # ANATOLIAN HIEROGLYPH A443 145F1 ; [.544E.0020.0002] # ANATOLIAN HIEROGLYPH A444 145F2 ; [.544F.0020.0002] # ANATOLIAN HIEROGLYPH A445 145F3 ; [.5450.0020.0002] # ANATOLIAN HIEROGLYPH A446 145F4 ; [.5451.0020.0002] # ANATOLIAN HIEROGLYPH A447 145F5 ; [.5452.0020.0002] # ANATOLIAN HIEROGLYPH A448 145F6 ; [.5453.0020.0002] # ANATOLIAN HIEROGLYPH A449 145F7 ; [.5454.0020.0002] # ANATOLIAN HIEROGLYPH A450 145F8 ; [.5455.0020.0002] # ANATOLIAN HIEROGLYPH A450A 145F9 ; [.5456.0020.0002] # ANATOLIAN HIEROGLYPH A451 145FA ; [.5457.0020.0002] # ANATOLIAN HIEROGLYPH A452 145FB ; [.5458.0020.0002] # ANATOLIAN HIEROGLYPH A453 145FC ; [.5459.0020.0002] # ANATOLIAN HIEROGLYPH A454 145FD ; [.545A.0020.0002] # ANATOLIAN HIEROGLYPH A455 145FE ; [.545B.0020.0002] # ANATOLIAN HIEROGLYPH A456 145FF ; [.545C.0020.0002] # ANATOLIAN HIEROGLYPH A457 14600 ; [.545D.0020.0002] # ANATOLIAN HIEROGLYPH A457A 14601 ; [.545E.0020.0002] # ANATOLIAN HIEROGLYPH A458 14602 ; [.545F.0020.0002] # ANATOLIAN HIEROGLYPH A459 14603 ; [.5460.0020.0002] # ANATOLIAN HIEROGLYPH A460 14604 ; [.5461.0020.0002] # ANATOLIAN HIEROGLYPH A461 14605 ; [.5462.0020.0002] # ANATOLIAN HIEROGLYPH A462 14606 ; [.5463.0020.0002] # ANATOLIAN HIEROGLYPH A463 14607 ; [.5464.0020.0002] # ANATOLIAN HIEROGLYPH A464 14608 ; [.5465.0020.0002] # ANATOLIAN HIEROGLYPH A465 14609 ; [.5466.0020.0002] # ANATOLIAN HIEROGLYPH A466 1460A ; [.5467.0020.0002] # ANATOLIAN HIEROGLYPH A467 1460B ; [.5468.0020.0002] # ANATOLIAN HIEROGLYPH A468 1460C ; [.5469.0020.0002] # ANATOLIAN HIEROGLYPH A469 1460D ; [.546A.0020.0002] # ANATOLIAN HIEROGLYPH A470 1460E ; [.546B.0020.0002] # ANATOLIAN HIEROGLYPH A471 1460F ; [.546C.0020.0002] # ANATOLIAN HIEROGLYPH A472 14610 ; [.546D.0020.0002] # ANATOLIAN HIEROGLYPH A473 14611 ; [.546E.0020.0002] # ANATOLIAN HIEROGLYPH A474 14612 ; [.546F.0020.0002] # ANATOLIAN HIEROGLYPH A475 14613 ; [.5470.0020.0002] # ANATOLIAN HIEROGLYPH A476 14614 ; [.5471.0020.0002] # ANATOLIAN HIEROGLYPH A477 14615 ; [.5472.0020.0002] # ANATOLIAN HIEROGLYPH A478 14616 ; [.5473.0020.0002] # ANATOLIAN HIEROGLYPH A479 14617 ; [.5474.0020.0002] # ANATOLIAN HIEROGLYPH A480 14618 ; [.5475.0020.0002] # ANATOLIAN HIEROGLYPH A481 14619 ; [.5476.0020.0002] # ANATOLIAN HIEROGLYPH A482 1461A ; [.5477.0020.0002] # ANATOLIAN HIEROGLYPH A483 1461B ; [.5478.0020.0002] # ANATOLIAN HIEROGLYPH A484 1461C ; [.5479.0020.0002] # ANATOLIAN HIEROGLYPH A485 1461D ; [.547A.0020.0002] # ANATOLIAN HIEROGLYPH A486 1461E ; [.547B.0020.0002] # ANATOLIAN HIEROGLYPH A487 1461F ; [.547C.0020.0002] # ANATOLIAN HIEROGLYPH A488 14620 ; [.547D.0020.0002] # ANATOLIAN HIEROGLYPH A489 14621 ; [.547E.0020.0002] # ANATOLIAN HIEROGLYPH A490 14622 ; [.547F.0020.0002] # ANATOLIAN HIEROGLYPH A491 14623 ; [.5480.0020.0002] # ANATOLIAN HIEROGLYPH A492 14624 ; [.5481.0020.0002] # ANATOLIAN HIEROGLYPH A493 14625 ; [.5482.0020.0002] # ANATOLIAN HIEROGLYPH A494 14626 ; [.5483.0020.0002] # ANATOLIAN HIEROGLYPH A495 14627 ; [.5484.0020.0002] # ANATOLIAN HIEROGLYPH A496 14628 ; [.5485.0020.0002] # ANATOLIAN HIEROGLYPH A497 14629 ; [.5486.0020.0002] # ANATOLIAN HIEROGLYPH A501 1462A ; [.5487.0020.0002] # ANATOLIAN HIEROGLYPH A502 1462B ; [.5488.0020.0002] # ANATOLIAN HIEROGLYPH A503 1462C ; [.5489.0020.0002] # ANATOLIAN HIEROGLYPH A504 1462D ; [.548A.0020.0002] # ANATOLIAN HIEROGLYPH A505 1462E ; [.548B.0020.0002] # ANATOLIAN HIEROGLYPH A506 1462F ; [.548C.0020.0002] # ANATOLIAN HIEROGLYPH A507 14630 ; [.548D.0020.0002] # ANATOLIAN HIEROGLYPH A508 14631 ; [.548E.0020.0002] # ANATOLIAN HIEROGLYPH A509 14632 ; [.548F.0020.0002] # ANATOLIAN HIEROGLYPH A510 14633 ; [.5490.0020.0002] # ANATOLIAN HIEROGLYPH A511 14634 ; [.5491.0020.0002] # ANATOLIAN HIEROGLYPH A512 14635 ; [.5492.0020.0002] # ANATOLIAN HIEROGLYPH A513 14636 ; [.5493.0020.0002] # ANATOLIAN HIEROGLYPH A514 14637 ; [.5494.0020.0002] # ANATOLIAN HIEROGLYPH A515 14638 ; [.5495.0020.0002] # ANATOLIAN HIEROGLYPH A516 14639 ; [.5496.0020.0002] # ANATOLIAN HIEROGLYPH A517 1463A ; [.5497.0020.0002] # ANATOLIAN HIEROGLYPH A518 1463B ; [.5498.0020.0002] # ANATOLIAN HIEROGLYPH A519 1463C ; [.5499.0020.0002] # ANATOLIAN HIEROGLYPH A520 1463D ; [.549A.0020.0002] # ANATOLIAN HIEROGLYPH A521 1463E ; [.549B.0020.0002] # ANATOLIAN HIEROGLYPH A522 1463F ; [.549C.0020.0002] # ANATOLIAN HIEROGLYPH A523 14640 ; [.549D.0020.0002] # ANATOLIAN HIEROGLYPH A524 14641 ; [.549E.0020.0002] # ANATOLIAN HIEROGLYPH A525 14642 ; [.549F.0020.0002] # ANATOLIAN HIEROGLYPH A526 14643 ; [.54A0.0020.0002] # ANATOLIAN HIEROGLYPH A527 14644 ; [.54A1.0020.0002] # ANATOLIAN HIEROGLYPH A528 14645 ; [.54A2.0020.0002] # ANATOLIAN HIEROGLYPH A529 14646 ; [.54A3.0020.0002] # ANATOLIAN HIEROGLYPH A530 2F00 ; [.FB40.0020.0004][.CE00.0000.0000] # KANGXI RADICAL ONE 3220 ; [*0317.0020.0004][.FB40.0020.0004][.CE00.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE 3280 ; [.FB40.0020.0006][.CE00.0000.0000] # CIRCLED IDEOGRAPH ONE 3192 ; [.FB40.0020.0014][.CE00.0000.0000] # IDEOGRAPHIC ANNOTATION ONE MARK 1F229 ; [.FB40.0020.001C][.CE00.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E00 319C ; [.FB40.0020.0014][.CE01.0000.0000] # IDEOGRAPHIC ANNOTATION FOURTH MARK 3226 ; [*0317.0020.0004][.FB40.0020.0004][.CE03.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN 3286 ; [.FB40.0020.0006][.CE03.0000.0000] # CIRCLED IDEOGRAPH SEVEN 3222 ; [*0317.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE 1F241 ; [*0379.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 3282 ; [.FB40.0020.0006][.CE09.0000.0000] # CIRCLED IDEOGRAPH THREE 3194 ; [.FB40.0020.0014][.CE09.0000.0000] # IDEOGRAPHIC ANNOTATION THREE MARK 1F22A ; [.FB40.0020.001C][.CE09.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E09 32A4 ; [.FB40.0020.0006][.CE0A.0000.0000] # CIRCLED IDEOGRAPH HIGH 3196 ; [.FB40.0020.0014][.CE0A.0000.0000] # IDEOGRAPHIC ANNOTATION TOP MARK 32A6 ; [.FB40.0020.0006][.CE0B.0000.0000] # CIRCLED IDEOGRAPH LOW 3198 ; [.FB40.0020.0014][.CE0B.0000.0000] # IDEOGRAPHIC ANNOTATION BOTTOM MARK F967 ; [.FB40.0020.0002][.CE0D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F967 319B ; [.FB40.0020.0014][.CE19.0000.0000] # IDEOGRAPHIC ANNOTATION THIRD MARK FA70 ; [.FB40.0020.0002][.CE26.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA70 2F01 ; [.FB40.0020.0004][.CE28.0000.0000] # KANGXI RADICAL LINE 2EA6 ; [.FB40.0020.0004][.CE2C.0000.0000] # CJK RADICAL SIMPLIFIED HALF TREE TRUNK 32A5 ; [.FB40.0020.0006][.CE2D.0000.0000] # CIRCLED IDEOGRAPH CENTRE 3197 ; [.FB40.0020.0014][.CE2D.0000.0000] # IDEOGRAPHIC ANNOTATION MIDDLE MARK 1F22D ; [.FB40.0020.001C][.CE2D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D F905 ; [.FB40.0020.0002][.CE32.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F905 2F02 ; [.FB40.0020.0004][.CE36.0000.0000] # KANGXI RADICAL DOT 2E80 ; [.FB40.0020.0004][.CE36.0000.0000][.0000.0110.0004] # CJK RADICAL REPEAT 2F801 ; [.FB40.0020.0002][.CE38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.FB40.0020.0002][.CE39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95E 2F800 ; [.FB40.0020.0002][.CE3D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F800 2F03 ; [.FB40.0020.0004][.CE3F.0000.0000] # KANGXI RADICAL SLASH 2F802 ; [.FB40.0020.0002][.CE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F802 2F04 ; [.FB40.0020.0004][.CE59.0000.0000] # KANGXI RADICAL SECOND 319A ; [.FB40.0020.0014][.CE59.0000.0000] # IDEOGRAPHIC ANNOTATION SECOND MARK 2E84 ; [.FB40.0020.0004][.CE59.0000.0000][.0000.0110.0004] # CJK RADICAL SECOND THREE 2E83 ; [.FB40.0020.0004][.CE5A.0000.0000] # CJK RADICAL SECOND TWO 2E82 ; [.FB40.0020.0004][.CE5B.0000.0000] # CJK RADICAL SECOND ONE 3228 ; [*0317.0020.0004][.FB40.0020.0004][.CE5D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE 3288 ; [.FB40.0020.0006][.CE5D.0000.0000] # CIRCLED IDEOGRAPH NINE F91B ; [.FB40.0020.0002][.CE82.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91B 2F05 ; [.FB40.0020.0004][.CE85.0000.0000] # KANGXI RADICAL HOOK F9BA ; [.FB40.0020.0002][.CE86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BA 2F06 ; [.FB40.0020.0004][.CE8C.0000.0000] # KANGXI RADICAL TWO 3221 ; [*0317.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO 1F242 ; [*0379.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C 3281 ; [.FB40.0020.0006][.CE8C.0000.0000] # CIRCLED IDEOGRAPH TWO 3193 ; [.FB40.0020.0014][.CE8C.0000.0000] # IDEOGRAPHIC ANNOTATION TWO MARK 1F214 ; [.FB40.0020.001C][.CE8C.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C 3224 ; [*0317.0020.0004][.FB40.0020.0004][.CE94.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE 3284 ; [.FB40.0020.0006][.CE94.0000.0000] # CIRCLED IDEOGRAPH FIVE 2F07 ; [.FB40.0020.0004][.CEA0.0000.0000] # KANGXI RADICAL LID 1F218 ; [.FB40.0020.001C][.CEA4.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4 F977 ; [.FB40.0020.0002][.CEAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F977 2F08 ; [.FB40.0020.0004][.CEBA.0000.0000] # KANGXI RADICAL MAN 319F ; [.FB40.0020.0014][.CEBA.0000.0000] # IDEOGRAPHIC ANNOTATION MAN MARK 2E85 ; [.FB40.0020.0004][.CEBB.0000.0000] # CJK RADICAL PERSON F9FD ; [.FB40.0020.0002][.CEC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FD 2F819 ; [.FB40.0020.0002][.CECC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F819 3239 ; [*0317.0020.0004][.FB40.0020.0004][.CEE3.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT F9A8 ; [.FB40.0020.0002][.CEE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A8 323D ; [*0317.0020.0004][.FB40.0020.0004][.CF01.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE 32AD ; [.FB40.0020.0006][.CF01.0000.0000] # CIRCLED IDEOGRAPH ENTERPRISE 3241 ; [*0317.0020.0004][.FB40.0020.0004][.CF11.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST 32A1 ; [.FB40.0020.0006][.CF11.0000.0000] # CIRCLED IDEOGRAPH REST 2F804 ; [.FB40.0020.0002][.CF60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F804 FA73 ; [.FB40.0020.0002][.CF80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA73 F92D ; [.FB40.0020.0002][.CF86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92D F9B5 ; [.FB40.0020.0002][.CF8B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.FB40.0020.0002][.CFAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.FB40.0020.0002][.CFAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F805 2F806 ; [.FB40.0020.0002][.CFBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F806 F965 ; [.FB40.0020.0002][.CFBF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F965 2F807 ; [.FB40.0020.0002][.D002.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F807 F9D4 ; [.FB40.0020.0002][.D02B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D4 2F808 ; [.FB40.0020.0002][.D07A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F808 2F809 ; [.FB40.0020.0002][.D099.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F809 2F80B ; [.FB40.0020.0002][.D0CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.FB40.0020.0002][.D0DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.FB40.0020.0002][.D0E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.FB40.0020.0002][.D0E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80A 329D ; [.FB40.0020.0006][.D12A.0000.0000] # CIRCLED IDEOGRAPH EXCELLENT 2F09 ; [.FB40.0020.0004][.D13F.0000.0000] # KANGXI RADICAL LEGS FA0C ; [.FB40.0020.0002][.D140.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.FB40.0020.0002][.D145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.FB40.0020.0002][.D14D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.FB40.0020.0002][.D14D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F ; [.FB40.0020.0002][.D154.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80F 2F810 ; [.FB40.0020.0002][.D164.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F810 2F0A ; [.FB40.0020.0004][.D165.0000.0000] # KANGXI RADICAL ENTER 2F814 ; [.FB40.0020.0002][.D167.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F814 FA72 ; [.FB40.0020.0002][.D168.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.FB40.0020.0002][.D169.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F978 2F0B ; [.FB40.0020.0004][.D16B.0000.0000] # KANGXI RADICAL EIGHT 3227 ; [*0317.0020.0004][.FB40.0020.0004][.D16B.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT 3287 ; [.FB40.0020.0006][.D16B.0000.0000] # CIRCLED IDEOGRAPH EIGHT F9D1 ; [.FB40.0020.0002][.D16D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D1 3225 ; [*0317.0020.0004][.FB40.0020.0004][.D16D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX 3285 ; [.FB40.0020.0006][.D16D.0000.0000] # CIRCLED IDEOGRAPH SIX 2F811 ; [.FB40.0020.0002][.D177.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.FB40.0020.0002][.D180.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F0C ; [.FB40.0020.0004][.D182.0000.0000] # KANGXI RADICAL DOWN BOX 2E86 ; [.FB40.0020.0004][.D182.0000.0000][.0000.0110.0004] # CJK RADICAL BOX 2F815 ; [.FB40.0020.0002][.D18D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F815 1F21E ; [.FB40.0020.001C][.D18D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-518D 2F8D2 ; [.FB40.0020.0002][.D192.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.FB40.0020.0002][.D195.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F0D ; [.FB40.0020.0004][.D196.0000.0000] # KANGXI RADICAL COVER 2F817 ; [.FB40.0020.0002][.D197.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F817 32A2 ; [.FB40.0020.0006][.D199.0000.0000] # CIRCLED IDEOGRAPH COPY 2F818 ; [.FB40.0020.0002][.D1A4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F0E ; [.FB40.0020.0004][.D1AB.0000.0000] # KANGXI RADICAL ICE 2F81A ; [.FB40.0020.0002][.D1AC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81A FA71 ; [.FB40.0020.0002][.D1B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA71 2F81B ; [.FB40.0020.0002][.D1B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81B F92E ; [.FB40.0020.0002][.D1B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92E F979 ; [.FB40.0020.0002][.D1C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F979 F955 ; [.FB40.0020.0002][.D1CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.FB40.0020.0002][.D1DC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F954 FA15 ; [.FB40.0020.0002][.D1DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA15 2F0F ; [.FB40.0020.0004][.D1E0.0000.0000] # KANGXI RADICAL TABLE 2E87 ; [.FB40.0020.0004][.D1E0.0000.0000][.0000.0110.0004] # CJK RADICAL TABLE 2F81D ; [.FB40.0020.0002][.D1F5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F10 ; [.FB40.0020.0004][.D1F5.0000.0000] # KANGXI RADICAL OPEN BOX 2F11 ; [.FB40.0020.0004][.D200.0000.0000] # KANGXI RADICAL KNIFE 2E88 ; [.FB40.0020.0004][.D200.0000.0000][.0000.0110.0004] # CJK RADICAL KNIFE ONE 2E89 ; [.FB40.0020.0004][.D202.0000.0000] # CJK RADICAL KNIFE TWO 2F81E ; [.FB40.0020.0002][.D203.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.FB40.0020.0002][.D207.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.FB40.0020.0002][.D207.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.FB40.0020.0002][.D217.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99C 1F220 ; [.FB40.0020.001C][.D21D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-521D F9DD ; [.FB40.0020.0002][.D229.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.FB40.0020.0002][.D23A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.FB40.0020.0002][.D23B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F821 ; [.FB40.0020.0002][.D246.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F821 1F21C ; [.FB40.0020.001C][.D24D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-524D 2F822 ; [.FB40.0020.0002][.D272.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F822 1F239 ; [.FB40.0020.001C][.D272.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5272 2F823 ; [.FB40.0020.0002][.D277.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F823 F9C7 ; [.FB40.0020.0002][.D289.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C7 F98A ; [.FB40.0020.0002][.D29B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98A 2F12 ; [.FB40.0020.0004][.D29B.0000.0000] # KANGXI RADICAL POWER F99D ; [.FB40.0020.0002][.D2A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99D 2F992 ; [.FB40.0020.0002][.D2B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F992 3238 ; [*0317.0020.0004][.FB40.0020.0004][.D2B4.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR 3298 ; [.FB40.0020.0006][.D2B4.0000.0000] # CIRCLED IDEOGRAPH LABOR FA76 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.FB40.0020.0002][.D2D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F952 1F247 ; [*0379.0020.0004][.FB40.0020.0004][.D2DD.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD F92F ; [.FB40.0020.0002][.D2DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F827 F97F ; [.FB40.0020.0002][.D2F5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97F 2F13 ; [.FB40.0020.0004][.D2F9.0000.0000] # KANGXI RADICAL WRAP FA77 ; [.FB40.0020.0002][.D2FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.FB40.0020.0002][.D2FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.FB40.0020.0002][.D305.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A ; [.FB40.0020.0002][.D306.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82A 2F14 ; [.FB40.0020.0004][.D315.0000.0000] # KANGXI RADICAL SPOON F963 ; [.FB40.0020.0002][.D317.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.FB40.0020.0002][.D317.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82B 2F15 ; [.FB40.0020.0004][.D31A.0000.0000] # KANGXI RADICAL RIGHT OPEN BOX 2F16 ; [.FB40.0020.0004][.D338.0000.0000] # KANGXI RADICAL HIDING ENCLOSURE 32A9 ; [.FB40.0020.0006][.D33B.0000.0000] # CIRCLED IDEOGRAPH MEDICINE F9EB ; [.FB40.0020.0002][.D33F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F17 ; [.FB40.0020.0004][.D341.0000.0000] # KANGXI RADICAL TEN 3038 ; [.FB40.0020.0004][.D341.0000.0000] # HANGZHOU NUMERAL TEN 3229 ; [*0317.0020.0004][.FB40.0020.0004][.D341.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN 3289 ; [.FB40.0020.0006][.D341.0000.0000] # CIRCLED IDEOGRAPH TEN 3039 ; [.FB40.0020.0004][.D344.0000.0000] # HANGZHOU NUMERAL TWENTY 303A ; [.FB40.0020.0004][.D345.0000.0000] # HANGZHOU NUMERAL THIRTY 2F82C ; [.FB40.0020.0002][.D349.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82D 323F ; [*0317.0020.0004][.FB40.0020.0004][.D354.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE 32AF ; [.FB40.0020.0006][.D354.0000.0000] # CIRCLED IDEOGRAPH ALLIANCE 2F82E ; [.FB40.0020.0002][.D35A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F18 ; [.FB40.0020.0004][.D35C.0000.0000] # KANGXI RADICAL DIVINATION 2E8A ; [.FB40.0020.0004][.D35C.0000.0000][.0000.0110.0004] # CJK RADICAL DIVINATION 2F19 ; [.FB40.0020.0004][.D369.0000.0000] # KANGXI RADICAL SEAL 2E8B ; [.FB40.0020.0004][.D369.0000.0000][.0000.0110.0004] # CJK RADICAL SEAL 329E ; [.FB40.0020.0006][.D370.0000.0000] # CIRCLED IDEOGRAPH PRINT 2F82F ; [.FB40.0020.0002][.D373.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.FB40.0020.0002][.D375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F830 ; [.FB40.0020.0002][.D37D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F830 2F831 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F833 2F1A ; [.FB40.0020.0004][.D382.0000.0000] # KANGXI RADICAL CLIFF 2E81 ; [.FB40.0020.0004][.D382.0000.0000][.0000.0110.0004] # CJK RADICAL CLIFF 2F1B ; [.FB40.0020.0004][.D3B6.0000.0000] # KANGXI RADICAL PRIVATE F96B ; [.FB40.0020.0002][.D3C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F1C ; [.FB40.0020.0004][.D3C8.0000.0000] # KANGXI RADICAL AGAIN 2F836 ; [.FB40.0020.0002][.D3CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F836 1F212 ; [.FB40.0020.001C][.D3CC.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-53CC 2F837 ; [.FB40.0020.0002][.D3DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F837 2F1D ; [.FB40.0020.0004][.D3E3.0000.0000] # KANGXI RADICAL MOUTH F906 ; [.FB40.0020.0002][.D3E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.FB40.0020.0002][.D3EB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F839 1F251 ; [.FB40.0020.0006][.D3EF.0000.0000] # CIRCLED IDEOGRAPH ACCEPT 2F83A ; [.FB40.0020.0002][.D3F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83A 32A8 ; [.FB40.0020.0006][.D3F3.0000.0000] # CIRCLED IDEOGRAPH RIGHT 1F22E ; [.FB40.0020.001C][.D3F3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-53F3 2F83B ; [.FB40.0020.0002][.D406.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83B 1F234 ; [.FB40.0020.001C][.D408.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5408 3234 ; [*0317.0020.0004][.FB40.0020.0004][.D40D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME 3294 ; [.FB40.0020.0006][.D40D.0000.0000] # CIRCLED IDEOGRAPH NAME F9DE ; [.FB40.0020.0002][.D40F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.FB40.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.FB40.0020.0002][.D438.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83D 1F225 ; [.FB40.0020.001C][.D439.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5439 F980 ; [.FB40.0020.0002][.D442.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.FB40.0020.0002][.D448.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.FB40.0020.0002][.D468.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83F 323A ; [*0317.0020.0004][.FB40.0020.0004][.D47C.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL 2F83C ; [.FB40.0020.0002][.D49E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83C 2F840 ; [.FB40.0020.0002][.D4A2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.FB40.0020.0002][.D4BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F841 ; [.FB40.0020.0002][.D4F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F841 2F842 ; [.FB40.0020.0002][.D510.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F842 3244 ; [.FB40.0020.0006][.D54F.0000.0000] # CIRCLED IDEOGRAPH QUESTION 2F843 ; [.FB40.0020.0002][.D553.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F843 FA79 ; [.FB40.0020.0002][.D555.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA79 2F844 ; [.FB40.0020.0002][.D563.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F844 2F845 ; [.FB40.0020.0002][.D584.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.FB40.0020.0002][.D584.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.FB40.0020.0002][.D587.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.FB40.0020.0002][.D599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.FB40.0020.0002][.D599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.FB40.0020.0002][.D59D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.FB40.0020.0002][.D59D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F848 ; [.FB40.0020.0002][.D5AB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F848 2F849 ; [.FB40.0020.0002][.D5B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F849 1F23A ; [.FB40.0020.001C][.D5B6.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-55B6 FA0D ; [.FB40.0020.0002][.D5C0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0D 2F84A ; [.FB40.0020.0002][.D5C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84A FA7B ; [.FB40.0020.0002][.D5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7B FA37 ; [.FB40.0020.0002][.D606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA37 2F84C ; [.FB40.0020.0002][.D606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84C 2F84E ; [.FB40.0020.0002][.D651.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84E FA38 ; [.FB40.0020.0002][.D668.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.FB40.0020.0002][.D674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84F 2F1E ; [.FB40.0020.0004][.D6D7.0000.0000] # KANGXI RADICAL ENCLOSURE 3223 ; [*0317.0020.0004][.FB40.0020.0004][.D6DB.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR 3283 ; [.FB40.0020.0006][.D6DB.0000.0000] # CIRCLED IDEOGRAPH FOUR 3195 ; [.FB40.0020.0014][.D6DB.0000.0000] # IDEOGRAPHIC ANNOTATION FOUR MARK F9A9 ; [.FB40.0020.0002][.D6F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.FB40.0020.0002][.D716.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F84D ; [.FB40.0020.0002][.D717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84D 2F1F ; [.FB40.0020.0004][.D71F.0000.0000] # KANGXI RADICAL EARTH 322F ; [*0317.0020.0004][.FB40.0020.0004][.D71F.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH 328F ; [.FB40.0020.0006][.D71F.0000.0000] # CIRCLED IDEOGRAPH EARTH 319E ; [.FB40.0020.0014][.D730.0000.0000] # IDEOGRAPHIC ANNOTATION EARTH MARK 2F855 ; [.FB40.0020.0002][.D78B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.FB40.0020.0002][.D7CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.FB40.0020.0002][.D7F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F854 ; [.FB40.0020.0002][.D80D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F854 2F857 ; [.FB40.0020.0002][.D831.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F857 2F856 ; [.FB40.0020.0002][.D832.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F856 FA39 ; [.FB40.0020.0002][.D840.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA39 FA10 ; [.FB40.0020.0002][.D85A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA10 FA7C ; [.FB40.0020.0002][.D85A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7C F96C ; [.FB40.0020.0002][.D85E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.FB40.0020.0002][.D8A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3A 2F858 ; [.FB40.0020.0002][.D8AC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F858 FA7D ; [.FB40.0020.0002][.D8B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7D F94A ; [.FB40.0020.0002][.D8D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94A F942 ; [.FB40.0020.0002][.D8DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F942 2F20 ; [.FB40.0020.0004][.D8EB.0000.0000] # KANGXI RADICAL SCHOLAR 2F851 ; [.FB40.0020.0002][.D8EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F851 1F224 ; [.FB40.0020.001C][.D8F0.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-58F0 2F85A ; [.FB40.0020.0002][.D8F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85A 2F85B ; [.FB40.0020.0002][.D8F7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85B 2F21 ; [.FB40.0020.0004][.D902.0000.0000] # KANGXI RADICAL GO 2F85C ; [.FB40.0020.0002][.D906.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85C 2F22 ; [.FB40.0020.0004][.D90A.0000.0000] # KANGXI RADICAL GO SLOWLY 2F23 ; [.FB40.0020.0004][.D915.0000.0000] # KANGXI RADICAL EVENING 2F85D ; [.FB40.0020.0002][.D91A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85D 1F215 ; [.FB40.0020.001C][.D91A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-591A 32B0 ; [.FB40.0020.0006][.D91C.0000.0000] # CIRCLED IDEOGRAPH NIGHT 2F85E ; [.FB40.0020.0002][.D922.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85E 2F24 ; [.FB40.0020.0004][.D927.0000.0000] # KANGXI RADICAL BIG 337D ; [.FB40.0020.001C][.D927.0000.0000][.FB40.0020.001C][.EB63.0000.0000] # SQUARE ERA NAME TAISYOU 319D ; [.FB40.0020.0014][.D929.0000.0000] # IDEOGRAPHIC ANNOTATION HEAVEN MARK 1F217 ; [.FB40.0020.001C][.D929.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5929 FA7E ; [.FB40.0020.0002][.D944.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.FB40.0020.0002][.D948.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.FB40.0020.0002][.D951.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.FB40.0020.0002][.D954.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.FB40.0020.0002][.D962.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.FB40.0020.0002][.D973.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F981 2F25 ; [.FB40.0020.0004][.D973.0000.0000] # KANGXI RADICAL WOMAN 329B ; [.FB40.0020.0006][.D973.0000.0000] # CIRCLED IDEOGRAPH FEMALE 2F865 ; [.FB40.0020.0002][.D9D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F865 2F862 ; [.FB40.0020.0002][.D9EC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F862 2F863 ; [.FB40.0020.0002][.DA1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F863 2F864 ; [.FB40.0020.0002][.DA27.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F864 FA80 ; [.FB40.0020.0002][.DA62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F866 ; [.FB40.0020.0002][.DA66.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F866 2F986 ; [.FB40.0020.0002][.DAB5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F986 2F869 ; [.FB40.0020.0002][.DB08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F869 FA81 ; [.FB40.0020.0002][.DB28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA81 2F86A ; [.FB40.0020.0002][.DB3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B ; [.FB40.0020.0002][.DB3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86B 2F26 ; [.FB40.0020.0004][.DB50.0000.0000] # KANGXI RADICAL CHILD 1F211 ; [.FB40.0020.001C][.DB57.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5B57 323B ; [*0317.0020.0004][.FB40.0020.0004][.DB66.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY 32AB ; [.FB40.0020.0006][.DB66.0000.0000] # CIRCLED IDEOGRAPH STUDY 2F27 ; [.FB40.0020.0004][.DB80.0000.0000] # KANGXI RADICAL ROOF FA04 ; [.FB40.0020.0002][.DB85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA04 1F243 ; [*0379.0020.0004][.FB40.0020.0004][.DB89.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 32AA ; [.FB40.0020.0006][.DB97.0000.0000] # CIRCLED IDEOGRAPH RELIGION 2F86D ; [.FB40.0020.0002][.DBC3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86D 2F86E ; [.FB40.0020.0002][.DBD8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86E F95F ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95F F9AA ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AA 2F86F ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86F F9BC ; [.FB40.0020.0002][.DBEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F870 ; [.FB40.0020.0002][.DBF3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F870 2F28 ; [.FB40.0020.0004][.DBF8.0000.0000] # KANGXI RADICAL INCH 2F872 ; [.FB40.0020.0002][.DBFF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F872 2F873 ; [.FB40.0020.0002][.DC06.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F873 2F29 ; [.FB40.0020.0004][.DC0F.0000.0000] # KANGXI RADICAL SMALL 2E8C ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0110.0004] # CJK RADICAL SMALL ONE 2E8D ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0111.0004] # CJK RADICAL SMALL TWO 2F875 ; [.FB40.0020.0002][.DC22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F875 2E90 ; [.FB40.0020.0004][.DC22.0000.0000] # CJK RADICAL LAME THREE 2F2A ; [.FB40.0020.0004][.DC22.0000.0000] # KANGXI RADICAL LAME 2E8E ; [.FB40.0020.0004][.DC22.0000.0000][.0000.0110.0004] # CJK RADICAL LAME ONE 2E8F ; [.FB40.0020.0004][.DC23.0000.0000] # CJK RADICAL LAME TWO 2E91 ; [.FB40.0020.0004][.DC23.0000.0000][.0000.0110.0004] # CJK RADICAL LAME FOUR 2F2B ; [.FB40.0020.0004][.DC38.0000.0000] # KANGXI RADICAL CORPSE F9BD ; [.FB40.0020.0002][.DC3F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.FB40.0020.0002][.DC60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F877 F94B ; [.FB40.0020.0002][.DC62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94B FA3B ; [.FB40.0020.0002][.DC64.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3B F9DF ; [.FB40.0020.0002][.DC65.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DF FA3C ; [.FB40.0020.0002][.DC6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3C 2F878 ; [.FB40.0020.0002][.DC6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F878 2F2C ; [.FB40.0020.0004][.DC6E.0000.0000] # KANGXI RADICAL SPROUT 2F2D ; [.FB40.0020.0004][.DC71.0000.0000] # KANGXI RADICAL MOUNTAIN 2F87A ; [.FB40.0020.0002][.DC8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87A 2F879 ; [.FB40.0020.0002][.DCC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F879 F9D5 ; [.FB40.0020.0002][.DD19.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D5 2F87C ; [.FB40.0020.0002][.DD43.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87C F921 ; [.FB40.0020.0002][.DD50.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F921 2F87F ; [.FB40.0020.0002][.DD6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87F 2F87E ; [.FB40.0020.0002][.DD6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87E 2F880 ; [.FB40.0020.0002][.DD7C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F880 2F9F4 ; [.FB40.0020.0002][.DDB2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F4 F9AB ; [.FB40.0020.0002][.DDBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AB 2F2E ; [.FB40.0020.0004][.DDDB.0000.0000] # KANGXI RADICAL RIVER 2F881 ; [.FB40.0020.0002][.DDE1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F882 ; [.FB40.0020.0002][.DDE2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F882 2F2F ; [.FB40.0020.0004][.DDE5.0000.0000] # KANGXI RADICAL WORK 32A7 ; [.FB40.0020.0006][.DDE6.0000.0000] # CIRCLED IDEOGRAPH LEFT 1F22C ; [.FB40.0020.001C][.DDE6.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6 2F30 ; [.FB40.0020.0004][.DDF1.0000.0000] # KANGXI RADICAL ONESELF 2E92 ; [.FB40.0020.0004][.DDF3.0000.0000] # CJK RADICAL SNAKE 2F884 ; [.FB40.0020.0002][.DDFD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F31 ; [.FB40.0020.0004][.DDFE.0000.0000] # KANGXI RADICAL TURBAN 2F885 ; [.FB40.0020.0002][.DE28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F885 2F886 ; [.FB40.0020.0002][.DE3D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F886 2F887 ; [.FB40.0020.0002][.DE69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F887 2F32 ; [.FB40.0020.0004][.DE72.0000.0000] # KANGXI RADICAL DRY 337B ; [.FB40.0020.001C][.DE73.0000.0000][.FB40.0020.001C][.E210.0000.0000] # SQUARE ERA NAME HEISEI F98E ; [.FB40.0020.0002][.DE74.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98E 2E93 ; [.FB40.0020.0004][.DE7A.0000.0000] # CJK RADICAL THREAD 2F33 ; [.FB40.0020.0004][.DE7A.0000.0000] # KANGXI RADICAL SHORT THREAD 3245 ; [.FB40.0020.0006][.DE7C.0000.0000] # CIRCLED IDEOGRAPH KINDERGARTEN 2F34 ; [.FB40.0020.0004][.DE7F.0000.0000] # KANGXI RADICAL DOTTED CLIFF FA01 ; [.FB40.0020.0002][.DEA6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88B ; [.FB40.0020.0002][.DEB0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88B 2F88C ; [.FB40.0020.0002][.DEB3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D ; [.FB40.0020.0002][.DEB6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.FB40.0020.0002][.DEC9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.FB40.0020.0002][.DECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.FB40.0020.0002][.DECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA82 ; [.FB40.0020.0002][.DED2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA82 FA0B ; [.FB40.0020.0002][.DED3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0B FA83 ; [.FB40.0020.0002][.DED9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA83 F982 ; [.FB40.0020.0002][.DEEC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F982 2F35 ; [.FB40.0020.0004][.DEF4.0000.0000] # KANGXI RADICAL LONG STRIDE 2F890 ; [.FB40.0020.0002][.DEFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F890 2F36 ; [.FB40.0020.0004][.DEFE.0000.0000] # KANGXI RADICAL TWO HANDS F943 ; [.FB40.0020.0002][.DF04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F943 2F37 ; [.FB40.0020.0004][.DF0B.0000.0000] # KANGXI RADICAL SHOOT 2F38 ; [.FB40.0020.0004][.DF13.0000.0000] # KANGXI RADICAL BOW 2F894 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F894 2F895 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F895 2F39 ; [.FB40.0020.0004][.DF50.0000.0000] # KANGXI RADICAL SNOUT 2E95 ; [.FB40.0020.0004][.DF50.0000.0000][.0000.0110.0004] # CJK RADICAL SNOUT TWO 2E94 ; [.FB40.0020.0004][.DF51.0000.0000] # CJK RADICAL SNOUT ONE 2F874 ; [.FB40.0020.0002][.DF53.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F874 2F3A ; [.FB40.0020.0004][.DF61.0000.0000] # KANGXI RADICAL BRISTLE 2F899 ; [.FB40.0020.0002][.DF62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.FB40.0020.0002][.DF69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA84 2F89A ; [.FB40.0020.0002][.DF6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89A 2F3B ; [.FB40.0020.0004][.DF73.0000.0000] # KANGXI RADICAL STEP F9D8 ; [.FB40.0020.0002][.DF8B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D8 1F21D ; [.FB40.0020.001C][.DF8C.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C 1F250 ; [.FB40.0020.0006][.DF97.0000.0000] # CIRCLED IDEOGRAPH ADVANTAGE 2F89C ; [.FB40.0020.0002][.DF9A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89C F966 ; [.FB40.0020.0002][.DFA9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.FB40.0020.0002][.DFAD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F3C ; [.FB40.0020.0004][.DFC3.0000.0000] # KANGXI RADICAL HEART 2E97 ; [.FB40.0020.0004][.DFC3.0000.0000][.0000.0110.0004] # CJK RADICAL HEART TWO 2E96 ; [.FB40.0020.0004][.DFC4.0000.0000] # CJK RADICAL HEART ONE 2F89D ; [.FB40.0020.0002][.DFCD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.FB40.0020.0002][.DFD7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.FB40.0020.0002][.DFF5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A3 2F89F ; [.FB40.0020.0002][.DFF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89F F960 ; [.FB40.0020.0002][.E012.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.FB40.0020.0002][.E01C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AC FA6B ; [.FB40.0020.0002][.E075.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6B 2F8A0 ; [.FB40.0020.0002][.E081.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 FA3D ; [.FB40.0020.0002][.E094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.FB40.0020.0002][.E094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A5 ; [.FB40.0020.0002][.E0C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 FA86 ; [.FB40.0020.0002][.E0D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA86 F9B9 ; [.FB40.0020.0002][.E0E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B9 FA88 ; [.FB40.0020.0002][.E108.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA88 F9D9 ; [.FB40.0020.0002][.E144.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D9 2F8A6 ; [.FB40.0020.0002][.E148.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.FB40.0020.0002][.E14C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.FB40.0020.0002][.E14C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA87 ; [.FB40.0020.0002][.E14E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA87 2F8A8 ; [.FB40.0020.0002][.E14E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A8 FA8A ; [.FB40.0020.0002][.E160.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8A FA3E ; [.FB40.0020.0002][.E168.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3E 2F8AA ; [.FB40.0020.0002][.E17A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AA FA3F ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AB F98F ; [.FB40.0020.0002][.E190.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98F 2F8AD ; [.FB40.0020.0002][.E1A4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AE ; [.FB40.0020.0002][.E1AF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AE 2F8AC ; [.FB40.0020.0002][.E1B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AC 2F8AF ; [.FB40.0020.0002][.E1DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AF FA40 ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA40 FA8B ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8B 2F8B0 ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 F90D ; [.FB40.0020.0002][.E1F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90D 2F8B1 ; [.FB40.0020.0002][.E1F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 F990 ; [.FB40.0020.0002][.E200.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F990 2F3D ; [.FB40.0020.0004][.E208.0000.0000] # KANGXI RADICAL HALBERD 2F8B2 ; [.FB40.0020.0002][.E210.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3 ; [.FB40.0020.0002][.E21B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B3 F9D2 ; [.FB40.0020.0002][.E22E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.FB40.0020.0002][.E234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F3E ; [.FB40.0020.0004][.E236.0000.0000] # KANGXI RADICAL DOOR 2F3F ; [.FB40.0020.0004][.E24B.0000.0000] # KANGXI RADICAL HAND 1F210 ; [.FB40.0020.001C][.E24B.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-624B 2E98 ; [.FB40.0020.0004][.E24C.0000.0000] # CJK RADICAL HAND 1F245 ; [*0379.0020.0004][.FB40.0020.0004][.E253.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 1F231 ; [.FB40.0020.001C][.E253.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6253 2F8B4 ; [.FB40.0020.0002][.E25D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B4 1F227 ; [.FB40.0020.001C][.E295.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6295 2F8B5 ; [.FB40.0020.0002][.E2B1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.FB40.0020.0002][.E2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F925 F95B ; [.FB40.0020.0002][.E2CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95B FA02 ; [.FB40.0020.0002][.E2D3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.FB40.0020.0002][.E2D4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 2F8BA ; [.FB40.0020.0002][.E2FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BA F973 ; [.FB40.0020.0002][.E2FE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F973 1F22F ; [.FB40.0020.001C][.E307.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6307 2F8B9 ; [.FB40.0020.0002][.E33D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.FB40.0020.0002][.E350.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 1F228 ; [.FB40.0020.001C][.E355.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6355 2F8BB ; [.FB40.0020.0002][.E368.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BB F9A4 ; [.FB40.0020.0002][.E37B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A4 2F8BC ; [.FB40.0020.0002][.E383.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BC F975 ; [.FB40.0020.0002][.E3A0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.FB40.0020.0002][.E3A9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.FB40.0020.0002][.E3C4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8D 2F8C0 ; [.FB40.0020.0002][.E3C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C0 2F8BD ; [.FB40.0020.0002][.E3E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BD FA8E ; [.FB40.0020.0002][.E41C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8E 2F8BF ; [.FB40.0020.0002][.E422.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BF FA8F ; [.FB40.0020.0002][.E452.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8F 2F8C3 ; [.FB40.0020.0002][.E469.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 2F8C6 ; [.FB40.0020.0002][.E477.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C6 2F8C4 ; [.FB40.0020.0002][.E47E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C4 F991 ; [.FB40.0020.0002][.E49A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F991 2F8C5 ; [.FB40.0020.0002][.E49D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 F930 ; [.FB40.0020.0002][.E4C4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F930 2F40 ; [.FB40.0020.0004][.E52F.0000.0000] # KANGXI RADICAL BRANCH 2F41 ; [.FB40.0020.0004][.E534.0000.0000] # KANGXI RADICAL RAP 2E99 ; [.FB40.0020.0004][.E535.0000.0000] # CJK RADICAL RAP FA41 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.FB40.0020.0002][.E556.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA90 1F248 ; [*0379.0020.0004][.FB40.0020.0004][.E557.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 2F8C9 ; [.FB40.0020.0002][.E56C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.FB40.0020.0002][.E578.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F969 2F42 ; [.FB40.0020.0004][.E587.0000.0000] # KANGXI RADICAL SCRIPT 3246 ; [.FB40.0020.0006][.E587.0000.0000] # CIRCLED IDEOGRAPH SCHOOL 2F43 ; [.FB40.0020.0004][.E597.0000.0000] # KANGXI RADICAL DIPPER F9BE ; [.FB40.0020.0002][.E599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BE 1F21B ; [.FB40.0020.001C][.E599.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6599 2F44 ; [.FB40.0020.0004][.E5A4.0000.0000] # KANGXI RADICAL AXE 1F21F ; [.FB40.0020.001C][.E5B0.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-65B0 2F45 ; [.FB40.0020.0004][.E5B9.0000.0000] # KANGXI RADICAL SQUARE F983 ; [.FB40.0020.0002][.E5C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F983 2F46 ; [.FB40.0020.0004][.E5E0.0000.0000] # KANGXI RADICAL NOT 2E9B ; [.FB40.0020.0004][.E5E1.0000.0000] # CJK RADICAL CHOKE FA42 ; [.FB40.0020.0002][.E5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA42 2F8CB ; [.FB40.0020.0002][.E5E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CB 2F47 ; [.FB40.0020.0004][.E5E5.0000.0000] # KANGXI RADICAL SUN 3230 ; [*0317.0020.0004][.FB40.0020.0004][.E5E5.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN 3290 ; [.FB40.0020.0006][.E5E5.0000.0000] # CIRCLED IDEOGRAPH SUN 2E9C ; [.FB40.0020.0004][.E5E5.0000.0000][.0000.0110.0004] # CJK RADICAL SUN 337E ; [.FB40.0020.001C][.E60E.0000.0000][.FB40.0020.001C][.ECBB.0000.0000] # SQUARE ERA NAME MEIZI F9E0 ; [.FB40.0020.0002][.E613.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E0 1F219 ; [.FB40.0020.001C][.E620.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6620 337C ; [.FB40.0020.001C][.E62D.0000.0000][.FB40.0020.001C][.D48C.0000.0000] # SQUARE ERA NAME SYOUWA 2F8CD ; [.FB40.0020.0002][.E649.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CD FA12 ; [.FB40.0020.0002][.E674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.FB40.0020.0002][.E674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA91 F9C5 ; [.FB40.0020.0002][.E688.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C5 FA43 ; [.FB40.0020.0002][.E691.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.FB40.0020.0002][.E691.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CF 2F8D5 ; [.FB40.0020.0002][.E69C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D5 FA06 ; [.FB40.0020.0002][.E6B4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA06 F98B ; [.FB40.0020.0002][.E6C6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98B 2F48 ; [.FB40.0020.0004][.E6F0.0000.0000] # KANGXI RADICAL SAY F901 ; [.FB40.0020.0002][.E6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.FB40.0020.0002][.E6F8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.FB40.0020.0002][.E700.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 2F49 ; [.FB40.0020.0004][.E708.0000.0000] # KANGXI RADICAL MOON 322A ; [*0317.0020.0004][.FB40.0020.0004][.E708.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON 328A ; [.FB40.0020.0006][.E708.0000.0000] # CIRCLED IDEOGRAPH MOON 1F237 ; [.FB40.0020.001C][.E708.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6708 2E9D ; [.FB40.0020.0004][.E708.0000.0000][.0000.0110.0004] # CJK RADICAL MOON 3232 ; [*0317.0020.0004][.FB40.0020.0004][.E709.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE 3292 ; [.FB40.0020.0006][.E709.0000.0000] # CIRCLED IDEOGRAPH HAVE 1F236 ; [.FB40.0020.001C][.E709.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6709 F929 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 2F8DA ; [.FB40.0020.0002][.E721.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DA 2F4A ; [.FB40.0020.0004][.E728.0000.0000] # KANGXI RADICAL TREE 322D ; [*0317.0020.0004][.FB40.0020.0004][.E728.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD 328D ; [.FB40.0020.0006][.E728.0000.0000] # CIRCLED IDEOGRAPH WOOD 1F240 ; [*0379.0020.0004][.FB40.0020.0004][.E72C.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C F9E1 ; [.FB40.0020.0002][.E74E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.FB40.0020.0002][.E753.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.FB40.0020.0002][.E756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.FB40.0020.0002][.E75E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DB F9C8 ; [.FB40.0020.0002][.E77B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C8 2F8E0 ; [.FB40.0020.0002][.E785.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E0 F9F4 ; [.FB40.0020.0002][.E797.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.FB40.0020.0002][.E7F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C9 2F8DF ; [.FB40.0020.0002][.E7FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DF F9DA ; [.FB40.0020.0002][.E817.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DA 2F8E5 ; [.FB40.0020.0002][.E81F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E5 3231 ; [*0317.0020.0004][.FB40.0020.0004][.E82A.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK 3291 ; [.FB40.0020.0006][.E82A.0000.0000] # CIRCLED IDEOGRAPH STOCK 337F ; [.FB40.0020.001C][.E82A.0000.0000][.FB40.0020.001C][.DF0F.0000.0000][.FB40.0020.001C][.CF1A.0000.0000][.FB40.0020.001C][.F93E.0000.0000] # SQUARE CORPORATION 2F8E1 ; [.FB40.0020.0002][.E852.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E1 F97A ; [.FB40.0020.0002][.E881.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.FB40.0020.0002][.E885.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.FB40.0020.0002][.E885.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 2F8E4 ; [.FB40.0020.0002][.E88E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E4 F9E2 ; [.FB40.0020.0002][.E8A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E2 2F8E6 ; [.FB40.0020.0002][.E914.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E6 2F8E8 ; [.FB40.0020.0002][.E942.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8E9 ; [.FB40.0020.0002][.E9A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E9 2F8EA ; [.FB40.0020.0002][.E9EA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EA F914 ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F914 F95C ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95C F9BF ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BF F94C ; [.FB40.0020.0002][.EA13.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94C 2F8EB ; [.FB40.0020.0002][.EAA8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EB F931 ; [.FB40.0020.0002][.EAD3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F931 2F8ED ; [.FB40.0020.0002][.EADB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8ED F91D ; [.FB40.0020.0002][.EB04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91D 2F4B ; [.FB40.0020.0004][.EB20.0000.0000] # KANGXI RADICAL LACK 2F8EF ; [.FB40.0020.0002][.EB21.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F1 ; [.FB40.0020.0002][.EB54.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 2F4C ; [.FB40.0020.0004][.EB62.0000.0000] # KANGXI RADICAL STOP 32A3 ; [.FB40.0020.0006][.EB63.0000.0000] # CIRCLED IDEOGRAPH CORRECT 2F8F3 ; [.FB40.0020.0002][.EB72.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 F98C ; [.FB40.0020.0002][.EB77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98C FA95 ; [.FB40.0020.0002][.EB79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA95 2F4D ; [.FB40.0020.0004][.EB79.0000.0000] # KANGXI RADICAL DEATH 2E9E ; [.FB40.0020.0004][.EB7A.0000.0000][.0000.0110.0004] # CJK RADICAL DEATH 2F8F4 ; [.FB40.0020.0002][.EB9F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F4 F9A5 ; [.FB40.0020.0002][.EBAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A5 2F4E ; [.FB40.0020.0004][.EBB3.0000.0000] # KANGXI RADICAL WEAPON F970 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F970 FA96 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA96 2F8F5 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8F6 ; [.FB40.0020.0002][.EBBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F6 2F4F ; [.FB40.0020.0004][.EBCB.0000.0000] # KANGXI RADICAL DO NOT 2E9F ; [.FB40.0020.0004][.EBCD.0000.0000] # CJK RADICAL MOTHER 2F50 ; [.FB40.0020.0004][.EBD4.0000.0000] # KANGXI RADICAL COMPARE 2F51 ; [.FB40.0020.0004][.EBDB.0000.0000] # KANGXI RADICAL FUR 2F52 ; [.FB40.0020.0004][.EC0F.0000.0000] # KANGXI RADICAL CLAN 2EA0 ; [.FB40.0020.0004][.EC11.0000.0000] # CJK RADICAL CIVILIAN 2F53 ; [.FB40.0020.0004][.EC14.0000.0000] # KANGXI RADICAL STEAM 2F54 ; [.FB40.0020.0004][.EC34.0000.0000] # KANGXI RADICAL WATER 322C ; [*0317.0020.0004][.FB40.0020.0004][.EC34.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER 328C ; [.FB40.0020.0006][.EC34.0000.0000] # CIRCLED IDEOGRAPH WATER 2EA1 ; [.FB40.0020.0004][.EC35.0000.0000] # CJK RADICAL WATER ONE 2EA2 ; [.FB40.0020.0004][.EC3A.0000.0000] # CJK RADICAL WATER TWO 2F8FA ; [.FB40.0020.0002][.EC4E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FA 2F8FE ; [.FB40.0020.0002][.EC67.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FE F972 ; [.FB40.0020.0002][.EC88.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.FB40.0020.0002][.ECBF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.FB40.0020.0002][.ECCC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F968 2F8FD ; [.FB40.0020.0002][.ECCD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FD F9E3 ; [.FB40.0020.0002][.ECE5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E3 329F ; [.FB40.0020.0006][.ECE8.0000.0000] # CIRCLED IDEOGRAPH ATTENTION 2F8FF ; [.FB40.0020.0002][.ED16.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FF F915 ; [.FB40.0020.0002][.ED1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.FB40.0020.0002][.ED1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F907 ; [.FB40.0020.0002][.ED34.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F907 2F900 ; [.FB40.0020.0002][.ED3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.FB40.0020.0002][.ED69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.FB40.0020.0002][.ED6A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.FB40.0020.0002][.ED77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.FB40.0020.0002][.ED77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.FB40.0020.0002][.ED78.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.FB40.0020.0002][.ED85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.FB40.0020.0002][.EDCB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F5 F94D ; [.FB40.0020.0002][.EDDA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94D F9D6 ; [.FB40.0020.0002][.EDEA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D6 2F90E ; [.FB40.0020.0002][.EDF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.FB40.0020.0002][.EE1A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.FB40.0020.0002][.EE2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.FB40.0020.0002][.EE6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F909 1F235 ; [.FB40.0020.001C][.EE80.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6E80 F9CB ; [.FB40.0020.0002][.EE9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.FB40.0020.0002][.EEBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EC 2F90C ; [.FB40.0020.0002][.EEC7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90C FA99 ; [.FB40.0020.0002][.EECB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.FB40.0020.0002][.EECB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.FB40.0020.0002][.EED1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F904 FA98 ; [.FB40.0020.0002][.EEDB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA98 F94E ; [.FB40.0020.0002][.EF0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94E 1F226 ; [.FB40.0020.001C][.EF14.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6F14 FA47 ; [.FB40.0020.0002][.EF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA47 FA9A ; [.FB40.0020.0002][.EF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9A F992 ; [.FB40.0020.0002][.EF23.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F992 2F90F ; [.FB40.0020.0002][.EF6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F912 ; [.FB40.0020.0002][.EFC6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F912 F922 ; [.FB40.0020.0002][.EFEB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F922 F984 ; [.FB40.0020.0002][.EFFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F984 2F915 ; [.FB40.0020.0002][.F01B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F915 FA9B ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F914 ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F914 2F913 ; [.FB40.0020.0002][.F039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F913 2F917 ; [.FB40.0020.0002][.F04A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F917 2F55 ; [.FB40.0020.0004][.F06B.0000.0000] # KANGXI RADICAL FIRE 322B ; [*0317.0020.0004][.FB40.0020.0004][.F06B.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE 328B ; [.FB40.0020.0006][.F06B.0000.0000] # CIRCLED IDEOGRAPH FIRE 2EA3 ; [.FB40.0020.0004][.F06C.0000.0000] # CJK RADICAL FIRE 2F835 ; [.FB40.0020.0002][.F070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F835 2F919 ; [.FB40.0020.0002][.F077.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F919 2F918 ; [.FB40.0020.0002][.F07D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.FB40.0020.0002][.F099.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.FB40.0020.0002][.F0AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91A 1F244 ; [*0379.0020.0004][.FB40.0020.0004][.F0B9.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 F99F ; [.FB40.0020.0002][.F0C8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.FB40.0020.0002][.F0D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F916 1F21A ; [.FB40.0020.001C][.F121.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7121 2F91C ; [.FB40.0020.0002][.F145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91C F993 ; [.FB40.0020.0002][.F149.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F993 FA48 ; [.FB40.0020.0002][.F16E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.FB40.0020.0002][.F16E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9C 2F91E ; [.FB40.0020.0002][.F19C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91E F9C0 ; [.FB40.0020.0002][.F1CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C0 F9EE ; [.FB40.0020.0002][.F1D0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EE F932 ; [.FB40.0020.0002][.F210.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F932 F91E ; [.FB40.0020.0002][.F21B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F920 ; [.FB40.0020.0002][.F228.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F920 2F56 ; [.FB40.0020.0004][.F22A.0000.0000] # KANGXI RADICAL CLAW FA49 ; [.FB40.0020.0002][.F22B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA49 2EA4 ; [.FB40.0020.0004][.F22B.0000.0000] # CJK RADICAL PAW ONE 2EA5 ; [.FB40.0020.0004][.F22B.0000.0000][.0000.0110.0004] # CJK RADICAL PAW TWO FA9E ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F921 2F57 ; [.FB40.0020.0004][.F236.0000.0000] # KANGXI RADICAL FATHER 2F58 ; [.FB40.0020.0004][.F23B.0000.0000] # KANGXI RADICAL DOUBLE X 2F59 ; [.FB40.0020.0004][.F23F.0000.0000] # KANGXI RADICAL HALF TREE TRUNK 2F5A ; [.FB40.0020.0004][.F247.0000.0000] # KANGXI RADICAL SLICE 2F922 ; [.FB40.0020.0002][.F250.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F922 2F5B ; [.FB40.0020.0004][.F259.0000.0000] # KANGXI RADICAL FANG 2F5C ; [.FB40.0020.0004][.F25B.0000.0000] # KANGXI RADICAL COW 2EA7 ; [.FB40.0020.0004][.F25B.0000.0000][.0000.0110.0004] # CJK RADICAL COW F946 ; [.FB40.0020.0002][.F262.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F946 3235 ; [*0317.0020.0004][.FB40.0020.0004][.F279.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL 3295 ; [.FB40.0020.0006][.F279.0000.0000] # CIRCLED IDEOGRAPH SPECIAL 2F924 ; [.FB40.0020.0002][.F280.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F924 2F925 ; [.FB40.0020.0002][.F295.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F925 2F5D ; [.FB40.0020.0004][.F2AC.0000.0000] # KANGXI RADICAL DOG 2EA8 ; [.FB40.0020.0004][.F2AD.0000.0000] # CJK RADICAL DOG FA9F ; [.FB40.0020.0002][.F2AF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9F F9FA ; [.FB40.0020.0002][.F2C0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FA F92B ; [.FB40.0020.0002][.F2FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92B FA16 ; [.FB40.0020.0002][.F32A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA16 FAA0 ; [.FB40.0020.0002][.F32A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA0 F9A7 ; [.FB40.0020.0002][.F375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A7 2F928 ; [.FB40.0020.0002][.F37A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F928 2F5E ; [.FB40.0020.0004][.F384.0000.0000] # KANGXI RADICAL PROFOUND F961 ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F5F ; [.FB40.0020.0004][.F389.0000.0000] # KANGXI RADICAL JADE 2F929 ; [.FB40.0020.0002][.F38B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F929 2EA9 ; [.FB40.0020.0004][.F38B.0000.0000][.0000.0110.0004] # CJK RADICAL JADE 2F92B ; [.FB40.0020.0002][.F3A5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92B F9AD ; [.FB40.0020.0002][.F3B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.FB40.0020.0002][.F3DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.FB40.0020.0002][.F406.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.FB40.0020.0002][.F409.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.FB40.0020.0002][.F422.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92E ; [.FB40.0020.0002][.F447.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92E 2F92F ; [.FB40.0020.0002][.F45C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92F F9AE ; [.FB40.0020.0002][.F469.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AE FAA1 ; [.FB40.0020.0002][.F471.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA1 2F930 ; [.FB40.0020.0002][.F471.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F930 2F931 ; [.FB40.0020.0002][.F485.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F931 F994 ; [.FB40.0020.0002][.F489.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F994 F9EF ; [.FB40.0020.0002][.F498.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EF 2F932 ; [.FB40.0020.0002][.F4CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F932 2F60 ; [.FB40.0020.0004][.F4DC.0000.0000] # KANGXI RADICAL MELON 2F61 ; [.FB40.0020.0004][.F4E6.0000.0000] # KANGXI RADICAL TILE FAA2 ; [.FB40.0020.0002][.F506.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA2 2F62 ; [.FB40.0020.0004][.F518.0000.0000] # KANGXI RADICAL SWEET 2F63 ; [.FB40.0020.0004][.F51F.0000.0000] # KANGXI RADICAL LIFE 1F222 ; [.FB40.0020.001C][.F51F.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-751F 2F934 ; [.FB40.0020.0002][.F524.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F934 2F64 ; [.FB40.0020.0004][.F528.0000.0000] # KANGXI RADICAL USE 2F65 ; [.FB40.0020.0004][.F530.0000.0000] # KANGXI RADICAL FIELD 3199 ; [.FB40.0020.0014][.F532.0000.0000] # IDEOGRAPHIC ANNOTATION FIRST MARK 1F238 ; [.FB40.0020.001C][.F533.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7533 329A ; [.FB40.0020.0006][.F537.0000.0000] # CIRCLED IDEOGRAPH MALE FAA3 ; [.FB40.0020.0002][.F53B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA3 2F936 ; [.FB40.0020.0002][.F53E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F936 F9CD ; [.FB40.0020.0002][.F559.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.FB40.0020.0002][.F565.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F938 2F66 ; [.FB40.0020.0004][.F58B.0000.0000] # KANGXI RADICAL BOLT OF CLOTH 2EAA ; [.FB40.0020.0004][.F58B.0000.0000][.0000.0110.0004] # CJK RADICAL BOLT OF CLOTH 2F67 ; [.FB40.0020.0004][.F592.0000.0000] # KANGXI RADICAL SICKNESS F9E5 ; [.FB40.0020.0002][.F5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.FB40.0020.0002][.F610.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93A FAA4 ; [.FB40.0020.0002][.F61D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA4 FAA5 ; [.FB40.0020.0002][.F61F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA5 F9C1 ; [.FB40.0020.0002][.F642.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C1 F90E ; [.FB40.0020.0002][.F669.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90E 2F68 ; [.FB40.0020.0004][.F676.0000.0000] # KANGXI RADICAL DOTTED TENT 2F69 ; [.FB40.0020.0004][.F67D.0000.0000] # KANGXI RADICAL WHITE 2F6A ; [.FB40.0020.0004][.F6AE.0000.0000] # KANGXI RADICAL SKIN 2F6B ; [.FB40.0020.0004][.F6BF.0000.0000] # KANGXI RADICAL DISH FA17 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA6 1F246 ; [*0379.0020.0004][.FB40.0020.0004][.F6D7.0000.0000][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 FAA7 ; [.FB40.0020.0002][.F6DB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA7 323C ; [*0317.0020.0004][.FB40.0020.0004][.F6E3.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE 32AC ; [.FB40.0020.0006][.F6E3.0000.0000] # CIRCLED IDEOGRAPH SUPERVISE F933 ; [.FB40.0020.0002][.F6E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F933 2F6C ; [.FB40.0020.0004][.F6EE.0000.0000] # KANGXI RADICAL EYE 2EAB ; [.FB40.0020.0004][.F6EE.0000.0000][.0000.0110.0004] # CJK RADICAL EYE FAA8 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.FB40.0020.0002][.F701.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F945 ; [.FB40.0020.0002][.F71E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F945 2F946 ; [.FB40.0020.0002][.F71F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F946 2F947 ; [.FB40.0020.0002][.F71F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F947 FAAA ; [.FB40.0020.0002][.F740.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAA FAA9 ; [.FB40.0020.0002][.F74A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA9 2F948 ; [.FB40.0020.0002][.F74A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F948 2F94A ; [.FB40.0020.0002][.F78B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94A FA9D ; [.FB40.0020.0002][.F7A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9D 2F6D ; [.FB40.0020.0004][.F7DB.0000.0000] # KANGXI RADICAL SPEAR 2F6E ; [.FB40.0020.0004][.F7E2.0000.0000] # KANGXI RADICAL ARROW 2F6F ; [.FB40.0020.0004][.F7F3.0000.0000] # KANGXI RADICAL STONE 2F94E ; [.FB40.0020.0002][.F84E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94E F9CE ; [.FB40.0020.0002][.F86B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.FB40.0020.0002][.F88C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.FB40.0020.0002][.F88C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.FB40.0020.0002][.F891.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.FB40.0020.0002][.F8CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F947 FAAB ; [.FB40.0020.0002][.F8CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAB 2F950 ; [.FB40.0020.0002][.F8CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F950 F964 ; [.FB40.0020.0002][.F8FB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F964 F985 ; [.FB40.0020.0002][.F92A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F985 2F70 ; [.FB40.0020.0004][.F93A.0000.0000] # KANGXI RADICAL SPIRIT 2EAC ; [.FB40.0020.0004][.F93A.0000.0000][.0000.0110.0004] # CJK RADICAL SPIRIT ONE 2EAD ; [.FB40.0020.0004][.F93B.0000.0000] # CJK RADICAL SPIRIT TWO FA18 ; [.FB40.0020.0002][.F93C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA18 FA4C ; [.FB40.0020.0002][.F93E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4C 3233 ; [*0317.0020.0004][.FB40.0020.0004][.F93E.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY 3293 ; [.FB40.0020.0006][.F93E.0000.0000] # CIRCLED IDEOGRAPH SOCIETY FA4E ; [.FB40.0020.0002][.F948.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.FB40.0020.0002][.F949.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA4F ; [.FB40.0020.0002][.F950.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.FB40.0020.0002][.F95D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA51 3237 ; [*0317.0020.0004][.FB40.0020.0004][.F95D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION 3297 ; [.FB40.0020.0006][.F95D.0000.0000] # CIRCLED IDEOGRAPH CONGRATULATION FA19 ; [.FB40.0020.0002][.F95E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.FB40.0020.0002][.F965.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1A 3240 ; [*0317.0020.0004][.FB40.0020.0004][.F96D.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL F93C ; [.FB40.0020.0002][.F97F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93C 1F232 ; [.FB40.0020.001C][.F981.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7981 FA52 ; [.FB40.0020.0002][.F98D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA52 FA53 ; [.FB40.0020.0002][.F98E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA53 FA1B ; [.FB40.0020.0002][.F98F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.FB40.0020.0002][.F98F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F956 F9B6 ; [.FB40.0020.0002][.F9AE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B6 2F71 ; [.FB40.0020.0004][.F9B8.0000.0000] # KANGXI RADICAL TRACK 2F72 ; [.FB40.0020.0004][.F9BE.0000.0000] # KANGXI RADICAL GRAIN F995 ; [.FB40.0020.0002][.F9CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F995 3299 ; [.FB40.0020.0006][.F9D8.0000.0000] # CIRCLED IDEOGRAPH SECRET 2F957 ; [.FB40.0020.0002][.F9EB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F957 F956 ; [.FB40.0020.0002][.FA1C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F956 FA54 ; [.FB40.0020.0002][.FA40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA54 2F959 ; [.FB40.0020.0002][.FA40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F959 2F95A ; [.FB40.0020.0002][.FA4A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95A 2F95B ; [.FB40.0020.0002][.FA4F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95B 2F73 ; [.FB40.0020.0004][.FA74.0000.0000] # KANGXI RADICAL CAVE 1F233 ; [.FB40.0020.001C][.FA7A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A FA55 ; [.FB40.0020.0002][.FA81.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA55 FAAC ; [.FB40.0020.0002][.FAB1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAC F9F7 ; [.FB40.0020.0002][.FACB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F7 2F74 ; [.FB40.0020.0004][.FACB.0000.0000] # KANGXI RADICAL STAND 2F95F ; [.FB40.0020.0002][.FAEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95F 2F75 ; [.FB40.0020.0004][.FAF9.0000.0000] # KANGXI RADICAL BAMBOO 2EAE ; [.FB40.0020.0004][.FAF9.0000.0000][.0000.0110.0004] # CJK RADICAL BAMBOO F9F8 ; [.FB40.0020.0002][.FB20.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F8 3247 ; [.FB40.0020.0006][.FB8F.0000.0000] # CIRCLED IDEOGRAPH KOTO FA56 ; [.FB40.0020.0002][.FBC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA56 FAAD ; [.FB40.0020.0002][.FBC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAD 2F962 ; [.FB40.0020.0002][.FBC6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F962 2F963 ; [.FB40.0020.0002][.FBC9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F963 F9A6 ; [.FB40.0020.0002][.FC3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A6 F944 ; [.FB40.0020.0002][.FC60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F944 2F76 ; [.FB40.0020.0004][.FC73.0000.0000] # KANGXI RADICAL RICE FAAE ; [.FB40.0020.0002][.FC7B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAE F9F9 ; [.FB40.0020.0002][.FC92.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.FB40.0020.0002][.FCBE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1D 2F966 ; [.FB40.0020.0002][.FCD2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F966 FA03 ; [.FB40.0020.0002][.FCD6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA03 2F969 ; [.FB40.0020.0002][.FCE3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F969 F97B ; [.FB40.0020.0002][.FCE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97B 2F968 ; [.FB40.0020.0002][.FCE8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F968 2F77 ; [.FB40.0020.0004][.FCF8.0000.0000] # KANGXI RADICAL SILK 2EAF ; [.FB40.0020.0004][.FCF9.0000.0000] # CJK RADICAL SILK 2F96A ; [.FB40.0020.0002][.FD00.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96A F9CF ; [.FB40.0020.0002][.FD10.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CF F96A ; [.FB40.0020.0002][.FD22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.FB40.0020.0002][.FD2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94F 1F221 ; [.FB40.0020.001C][.FD42.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7D42 FAAF ; [.FB40.0020.0002][.FD5B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAF 2F96C ; [.FB40.0020.0002][.FD63.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96C F93D ; [.FB40.0020.0002][.FDA0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93D F957 ; [.FB40.0020.0002][.FDBE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F957 2F96E ; [.FB40.0020.0002][.FDC7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96E F996 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F996 FA57 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA57 FAB0 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB0 2F96F ; [.FB40.0020.0002][.FE02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96F FA58 ; [.FB40.0020.0002][.FE09.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA58 F950 ; [.FB40.0020.0002][.FE37.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F950 FA59 ; [.FB40.0020.0002][.FE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA59 2F970 ; [.FB40.0020.0002][.FE45.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F970 2EB0 ; [.FB40.0020.0004][.FE9F.0000.0000] # CJK RADICAL C-SIMPLIFIED SILK 2F78 ; [.FB40.0020.0004][.FF36.0000.0000] # KANGXI RADICAL JAR FAB1 ; [.FB40.0020.0002][.FF3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB1 2F79 ; [.FB40.0020.0004][.FF51.0000.0000] # KANGXI RADICAL NET 2EB2 ; [.FB40.0020.0004][.FF52.0000.0000] # CJK RADICAL NET TWO 2EB5 ; [.FB40.0020.0004][.FF52.0000.0000][.0000.0110.0004] # CJK RADICAL MESH 2EB1 ; [.FB40.0020.0004][.FF53.0000.0000] # CJK RADICAL NET ONE 2EB3 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0110.0004] # CJK RADICAL NET THREE 2EB4 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0111.0004] # CJK RADICAL NET FOUR FA5A ; [.FB40.0020.0002][.FF72.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.FB40.0020.0002][.FF79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E6 2F976 ; [.FB40.0020.0002][.FF7A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F976 F90F ; [.FB40.0020.0002][.FF85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90F 2F7A ; [.FB40.0020.0004][.FF8A.0000.0000] # KANGXI RADICAL SHEEP 2EB6 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0110.0004] # CJK RADICAL SHEEP 2EB7 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0111.0004] # CJK RADICAL RAM 2EB8 ; [.FB40.0020.0004][.FF8B.0000.0000] # CJK RADICAL EWE 2F978 ; [.FB40.0020.0002][.FF95.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F978 F9AF ; [.FB40.0020.0002][.FF9A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.FB40.0020.0002][.FFBD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1E 2F7B ; [.FB40.0020.0004][.FFBD.0000.0000] # KANGXI RADICAL FEATHER 2F979 ; [.FB40.0020.0002][.FFFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F979 F934 ; [.FB41.0020.0002][.8001.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F934 2F7C ; [.FB41.0020.0004][.8001.0000.0000] # KANGXI RADICAL OLD 2EB9 ; [.FB41.0020.0004][.8002.0000.0000] # CJK RADICAL OLD FA5B ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97A 2F7D ; [.FB41.0020.0004][.800C.0000.0000] # KANGXI RADICAL AND 2F7E ; [.FB41.0020.0004][.8012.0000.0000] # KANGXI RADICAL PLOW 2F7F ; [.FB41.0020.0004][.8033.0000.0000] # KANGXI RADICAL EAR F9B0 ; [.FB41.0020.0002][.8046.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B0 2F97D ; [.FB41.0020.0002][.8060.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97D F997 ; [.FB41.0020.0002][.806F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.FB41.0020.0002][.8070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.FB41.0020.0002][.807E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F945 2F80 ; [.FB41.0020.0004][.807F.0000.0000] # KANGXI RADICAL BRUSH 2EBB ; [.FB41.0020.0004][.807F.0000.0000][.0000.0110.0004] # CJK RADICAL BRUSH TWO 2EBA ; [.FB41.0020.0004][.8080.0000.0000] # CJK RADICAL BRUSH ONE 2F81 ; [.FB41.0020.0004][.8089.0000.0000] # KANGXI RADICAL MEAT 2EBC ; [.FB41.0020.0004][.8089.0000.0000][.0000.0110.0004] # CJK RADICAL MEAT F953 ; [.FB41.0020.0002][.808B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.FB41.0020.0002][.80AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.FB41.0020.0002][.80B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F983 ; [.FB41.0020.0002][.8103.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F983 2F985 ; [.FB41.0020.0002][.813E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F985 F926 ; [.FB41.0020.0002][.81D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F926 2F82 ; [.FB41.0020.0004][.81E3.0000.0000] # KANGXI RADICAL MINISTER F9F6 ; [.FB41.0020.0002][.81E8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F6 2F83 ; [.FB41.0020.0004][.81EA.0000.0000] # KANGXI RADICAL SELF 3242 ; [*0317.0020.0004][.FB41.0020.0004][.81EA.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF FA5C ; [.FB41.0020.0002][.81ED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F84 ; [.FB41.0020.0004][.81F3.0000.0000] # KANGXI RADICAL ARRIVE 3243 ; [*0317.0020.0004][.FB41.0020.0004][.81F3.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH 2F85 ; [.FB41.0020.0004][.81FC.0000.0000] # KANGXI RADICAL MORTAR 2EBD ; [.FB41.0020.0004][.81FC.0000.0000][.0000.0110.0004] # CJK RADICAL MORTAR 2F893 ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C ; [.FB41.0020.0002][.8204.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98C 2F86 ; [.FB41.0020.0004][.820C.0000.0000] # KANGXI RADICAL TONGUE FA6D ; [.FB41.0020.0002][.8218.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6D 2F87 ; [.FB41.0020.0004][.821B.0000.0000] # KANGXI RADICAL OPPOSE 2F88 ; [.FB41.0020.0004][.821F.0000.0000] # KANGXI RADICAL BOAT 2F89 ; [.FB41.0020.0004][.826E.0000.0000] # KANGXI RADICAL STOPPING F97C ; [.FB41.0020.0002][.826F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97C 2F8A ; [.FB41.0020.0004][.8272.0000.0000] # KANGXI RADICAL COLOR 2F8B ; [.FB41.0020.0004][.8278.0000.0000] # KANGXI RADICAL GRASS FA5D ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5D FA5E ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5E 2EBE ; [.FB41.0020.0004][.8279.0000.0000] # CJK RADICAL GRASS ONE 2EBF ; [.FB41.0020.0004][.8279.0000.0000][.0000.0110.0004] # CJK RADICAL GRASS TWO 2EC0 ; [.FB41.0020.0004][.8279.0000.0000][.0000.0111.0004] # CJK RADICAL GRASS THREE 2F990 ; [.FB41.0020.0002][.828B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F98F ; [.FB41.0020.0002][.8291.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98F 2F991 ; [.FB41.0020.0002][.829D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.FB41.0020.0002][.82B1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.FB41.0020.0002][.82B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.FB41.0020.0002][.82BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.FB41.0020.0002][.82E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.FB41.0020.0002][.82E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.FB41.0020.0002][.82E6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F996 2F999 ; [.FB41.0020.0002][.831D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F999 2F99C ; [.FB41.0020.0002][.8323.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99C F9FE ; [.FB41.0020.0002][.8336.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.FB41.0020.0002][.8352.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F9A0 ; [.FB41.0020.0002][.8353.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A0 2F99A ; [.FB41.0020.0002][.8363.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99A 2F99B ; [.FB41.0020.0002][.83AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99B 2F99D ; [.FB41.0020.0002][.83BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99D F93E ; [.FB41.0020.0002][.83C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93E 2F9A1 ; [.FB41.0020.0002][.83CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.FB41.0020.0002][.83CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.FB41.0020.0002][.83DC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 2F99E ; [.FB41.0020.0002][.83E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99E FAB4 ; [.FB41.0020.0002][.83EF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB4 F958 ; [.FB41.0020.0002][.83F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.FB41.0020.0002][.843D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F918 F96E ; [.FB41.0020.0002][.8449.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96E FA5F ; [.FB41.0020.0002][.8457.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.FB41.0020.0002][.8457.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99F F999 ; [.FB41.0020.0002][.84EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F999 2F9A8 ; [.FB41.0020.0002][.84F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 2F9A9 ; [.FB41.0020.0002][.84F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A9 F9C2 ; [.FB41.0020.0002][.84FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C2 2F9AA ; [.FB41.0020.0002][.8516.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AA 2F9AC ; [.FB41.0020.0002][.8564.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AC F923 ; [.FB41.0020.0002][.85CD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F923 F9F0 ; [.FB41.0020.0002][.85FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F0 F935 ; [.FB41.0020.0002][.8606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F935 FA20 ; [.FB41.0020.0002][.8612.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA20 F91F ; [.FB41.0020.0002][.862D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91F F910 ; [.FB41.0020.0002][.863F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F910 2F8C ; [.FB41.0020.0004][.864D.0000.0000] # KANGXI RADICAL TIGER 2EC1 ; [.FB41.0020.0004][.864E.0000.0000] # CJK RADICAL TIGER 2F9B3 ; [.FB41.0020.0002][.8650.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 F936 ; [.FB41.0020.0002][.865C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F936 2F9B4 ; [.FB41.0020.0002][.865C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5 ; [.FB41.0020.0002][.8667.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B6 ; [.FB41.0020.0002][.8669.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B6 2F8D ; [.FB41.0020.0004][.866B.0000.0000] # KANGXI RADICAL INSECT 2F9B8 ; [.FB41.0020.0002][.8688.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B8 2F9B7 ; [.FB41.0020.0002][.86A9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 2F9BA ; [.FB41.0020.0002][.86E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BA 2F9B9 ; [.FB41.0020.0002][.870E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B9 2F9BC ; [.FB41.0020.0002][.8728.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BC 2F9BD ; [.FB41.0020.0002][.876B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BD FAB5 ; [.FB41.0020.0002][.8779.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB5 2F9BB ; [.FB41.0020.0002][.8779.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BB 2F9BE ; [.FB41.0020.0002][.8786.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BE F911 ; [.FB41.0020.0002][.87BA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F911 2F9C0 ; [.FB41.0020.0002][.87E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C0 2F9C1 ; [.FB41.0020.0002][.8801.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C1 F927 ; [.FB41.0020.0002][.881F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F927 2F8E ; [.FB41.0020.0004][.8840.0000.0000] # KANGXI RADICAL BLOOD FA08 ; [.FB41.0020.0002][.884C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F8F ; [.FB41.0020.0004][.884C.0000.0000] # KANGXI RADICAL WALK ENCLOSURE 2F9C3 ; [.FB41.0020.0002][.8860.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C3 2F9C4 ; [.FB41.0020.0002][.8863.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 2F90 ; [.FB41.0020.0004][.8863.0000.0000] # KANGXI RADICAL CLOTHES 2EC2 ; [.FB41.0020.0004][.8864.0000.0000] # CJK RADICAL CLOTHES F9A0 ; [.FB41.0020.0002][.88C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A0 F9E7 ; [.FB41.0020.0002][.88CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E7 2F9C6 ; [.FB41.0020.0002][.88D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C6 2F9C7 ; [.FB41.0020.0002][.88DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C7 F9E8 ; [.FB41.0020.0002][.88E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E8 F912 ; [.FB41.0020.0002][.88F8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F912 2F9C9 ; [.FB41.0020.0002][.88FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C9 FA60 ; [.FB41.0020.0002][.8910.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.FB41.0020.0002][.8941.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB6 F924 ; [.FB41.0020.0002][.8964.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F924 2F91 ; [.FB41.0020.0004][.897E.0000.0000] # KANGXI RADICAL WEST 2EC4 ; [.FB41.0020.0004][.897F.0000.0000] # CJK RADICAL WEST TWO 2EC3 ; [.FB41.0020.0004][.8980.0000.0000] # CJK RADICAL WEST ONE FAB7 ; [.FB41.0020.0002][.8986.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB7 FA0A ; [.FB41.0020.0002][.898B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0A 2F92 ; [.FB41.0020.0004][.898B.0000.0000] # KANGXI RADICAL SEE FA61 ; [.FB41.0020.0002][.8996.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA61 FAB8 ; [.FB41.0020.0002][.8996.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2EC5 ; [.FB41.0020.0004][.89C1.0000.0000] # CJK RADICAL C-SIMPLIFIED SEE 2EC6 ; [.FB41.0020.0004][.89D2.0000.0000] # CJK RADICAL SIMPLIFIED HORN 2F93 ; [.FB41.0020.0004][.89D2.0000.0000] # KANGXI RADICAL HORN 2EC7 ; [.FB41.0020.0004][.89D2.0000.0000][.0000.0110.0004] # CJK RADICAL HORN 1F216 ; [.FB41.0020.001C][.89E3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-89E3 2F94 ; [.FB41.0020.0004][.8A00.0000.0000] # KANGXI RADICAL SPEECH 2F9CF ; [.FB41.0020.0002][.8AA0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CF F96F ; [.FB41.0020.0002][.8AAA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96F F9A1 ; [.FB41.0020.0002][.8AAA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A1 FAB9 ; [.FB41.0020.0002][.8ABF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB9 FABB ; [.FB41.0020.0002][.8ACB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABB F97D ; [.FB41.0020.0002][.8AD2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97D F941 ; [.FB41.0020.0002][.8AD6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F941 FABE ; [.FB41.0020.0002][.8AED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABE 2F9D0 ; [.FB41.0020.0002][.8AED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 FA22 ; [.FB41.0020.0002][.8AF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA22 FABA ; [.FB41.0020.0002][.8AF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABA F95D ; [.FB41.0020.0002][.8AFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95D FABD ; [.FB41.0020.0002][.8AFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABD FA62 ; [.FB41.0020.0002][.8B01.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA62 FABC ; [.FB41.0020.0002][.8B01.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABC FA63 ; [.FB41.0020.0002][.8B39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA63 FABF ; [.FB41.0020.0002][.8B39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABF F9FC ; [.FB41.0020.0002][.8B58.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FC F95A ; [.FB41.0020.0002][.8B80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95A FAC0 ; [.FB41.0020.0002][.8B8A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC0 2F9D1 ; [.FB41.0020.0002][.8B8A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 2EC8 ; [.FB41.0020.0004][.8BA0.0000.0000] # CJK RADICAL C-SIMPLIFIED SPEECH 2F95 ; [.FB41.0020.0004][.8C37.0000.0000] # KANGXI RADICAL VALLEY 2F96 ; [.FB41.0020.0004][.8C46.0000.0000] # KANGXI RADICAL BEAN F900 ; [.FB41.0020.0002][.8C48.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F900 2F9D2 ; [.FB41.0020.0002][.8C55.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F97 ; [.FB41.0020.0004][.8C55.0000.0000] # KANGXI RADICAL PIG 2F98 ; [.FB41.0020.0004][.8C78.0000.0000] # KANGXI RADICAL BADGER 2F99 ; [.FB41.0020.0004][.8C9D.0000.0000] # KANGXI RADICAL SHELL 3236 ; [*0317.0020.0004][.FB41.0020.0004][.8CA1.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL 3296 ; [.FB41.0020.0006][.8CA1.0000.0000] # CIRCLED IDEOGRAPH FINANCIAL 1F223 ; [.FB41.0020.001C][.8CA9.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9 2F9D4 ; [.FB41.0020.0002][.8CAB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.FB41.0020.0002][.8CC1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.FB41.0020.0002][.8CC2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F948 323E ; [*0317.0020.0004][.FB41.0020.0004][.8CC7.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE 32AE ; [.FB41.0020.0006][.8CC7.0000.0000] # CIRCLED IDEOGRAPH RESOURCE F903 ; [.FB41.0020.0002][.8CC8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.FB41.0020.0002][.8CD3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA64 FA65 ; [.FB41.0020.0002][.8D08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA65 FAC1 ; [.FB41.0020.0002][.8D08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC1 2F9D6 ; [.FB41.0020.0002][.8D1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 2EC9 ; [.FB41.0020.0004][.8D1D.0000.0000] # CJK RADICAL C-SIMPLIFIED SHELL 2F9A ; [.FB41.0020.0004][.8D64.0000.0000] # KANGXI RADICAL RED 2F9B ; [.FB41.0020.0004][.8D70.0000.0000] # KANGXI RADICAL RUN 1F230 ; [.FB41.0020.001C][.8D70.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8D70 2F9D7 ; [.FB41.0020.0002][.8D77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9C ; [.FB41.0020.0004][.8DB3.0000.0000] # KANGXI RADICAL FOOT 2ECA ; [.FB41.0020.0004][.8DB3.0000.0000][.0000.0110.0004] # CJK RADICAL FOOT 2F9DB ; [.FB41.0020.0002][.8DBC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DA ; [.FB41.0020.0002][.8DCB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.FB41.0020.0002][.8DEF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F937 2F9DC ; [.FB41.0020.0002][.8DF0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DC 2F9D ; [.FB41.0020.0004][.8EAB.0000.0000] # KANGXI RADICAL BODY F902 ; [.FB41.0020.0002][.8ECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F902 2F9E ; [.FB41.0020.0004][.8ECA.0000.0000] # KANGXI RADICAL CART 2F9DE ; [.FB41.0020.0002][.8ED4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DE F998 ; [.FB41.0020.0002][.8F26.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F998 F9D7 ; [.FB41.0020.0002][.8F2A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D7 FAC2 ; [.FB41.0020.0002][.8F38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC2 2F9DF ; [.FB41.0020.0002][.8F38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DF FA07 ; [.FB41.0020.0002][.8F3B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA07 F98D ; [.FB41.0020.0002][.8F62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98D 2ECB ; [.FB41.0020.0004][.8F66.0000.0000] # CJK RADICAL C-SIMPLIFIED CART 2F9F ; [.FB41.0020.0004][.8F9B.0000.0000] # KANGXI RADICAL BITTER 2F98D ; [.FB41.0020.0002][.8F9E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98D F971 ; [.FB41.0020.0002][.8FB0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F971 2FA0 ; [.FB41.0020.0004][.8FB0.0000.0000] # KANGXI RADICAL MORNING 2FA1 ; [.FB41.0020.0004][.8FB5.0000.0000] # KANGXI RADICAL WALK FA66 ; [.FB41.0020.0002][.8FB6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA66 2ECC ; [.FB41.0020.0004][.8FB6.0000.0000] # CJK RADICAL SIMPLIFIED WALK 2ECD ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0110.0004] # CJK RADICAL WALK ONE 2ECE ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0111.0004] # CJK RADICAL WALK TWO F99A ; [.FB41.0020.0002][.9023.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA67 1F22B ; [.FB41.0020.001C][.904A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-904A 329C ; [.FB41.0020.0006][.9069.0000.0000] # CIRCLED IDEOGRAPH SUITABLE FAC3 ; [.FB41.0020.0002][.9072.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.FB41.0020.0002][.907C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.FB41.0020.0002][.908F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F913 2FA2 ; [.FB41.0020.0004][.9091.0000.0000] # KANGXI RADICAL CITY 2ECF ; [.FB41.0020.0004][.9091.0000.0000][.0000.0110.0004] # CJK RADICAL CITY 2F9E2 ; [.FB41.0020.0002][.9094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E2 F92C ; [.FB41.0020.0002][.90CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92C FA2E ; [.FB41.0020.0002][.90DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2E 2F9E3 ; [.FB41.0020.0002][.90F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E3 FA26 ; [.FB41.0020.0002][.90FD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA26 2F9E4 ; [.FB41.0020.0002][.9111.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E4 2F9E6 ; [.FB41.0020.0002][.911B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E6 2FA3 ; [.FB41.0020.0004][.9149.0000.0000] # KANGXI RADICAL WINE 1F23B ; [.FB41.0020.001C][.914D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-914D F919 ; [.FB41.0020.0002][.916A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F919 FAC4 ; [.FB41.0020.0002][.9199.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC4 F9B7 ; [.FB41.0020.0002][.91B4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B7 2FA4 ; [.FB41.0020.0004][.91C6.0000.0000] # KANGXI RADICAL DISTINGUISH F9E9 ; [.FB41.0020.0002][.91CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E9 2FA5 ; [.FB41.0020.0004][.91CC.0000.0000] # KANGXI RADICAL VILLAGE F97E ; [.FB41.0020.0002][.91CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.FB41.0020.0002][.91D1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90A 2FA6 ; [.FB41.0020.0004][.91D1.0000.0000] # KANGXI RADICAL GOLD 322E ; [*0317.0020.0004][.FB41.0020.0004][.91D1.0000.0000][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL 328E ; [.FB41.0020.0006][.91D1.0000.0000] # CIRCLED IDEOGRAPH METAL F9B1 ; [.FB41.0020.0002][.9234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9E7 ; [.FB41.0020.0002][.9238.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 FAC5 ; [.FB41.0020.0002][.9276.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC5 2F9EA ; [.FB41.0020.0002][.927C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EA 2F9E8 ; [.FB41.0020.0002][.92D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 2F9E9 ; [.FB41.0020.0002][.92D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E9 F93F ; [.FB41.0020.0002][.9304.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93F F99B ; [.FB41.0020.0002][.934A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99B 2F9EB ; [.FB41.0020.0002][.93F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EB 2F9EC ; [.FB41.0020.0002][.9415.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EC 2ED0 ; [.FB41.0020.0004][.9485.0000.0000] # CJK RADICAL C-SIMPLIFIED GOLD 2ED1 ; [.FB41.0020.0004][.9577.0000.0000] # CJK RADICAL LONG ONE 2FA7 ; [.FB41.0020.0004][.9577.0000.0000] # KANGXI RADICAL LONG 2ED2 ; [.FB41.0020.0004][.9578.0000.0000] # CJK RADICAL LONG TWO 2ED3 ; [.FB41.0020.0004][.957F.0000.0000] # CJK RADICAL C-SIMPLIFIED LONG 2FA8 ; [.FB41.0020.0004][.9580.0000.0000] # KANGXI RADICAL GATE 2F9EE ; [.FB41.0020.0002][.958B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EE F986 ; [.FB41.0020.0002][.95AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F986 2F9F0 ; [.FB41.0020.0002][.95B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F0 2ED4 ; [.FB41.0020.0004][.95E8.0000.0000] # CJK RADICAL C-SIMPLIFIED GATE 2FA9 ; [.FB41.0020.0004][.961C.0000.0000] # KANGXI RADICAL MOUND 2ED5 ; [.FB41.0020.0004][.961C.0000.0000][.0000.0110.0004] # CJK RADICAL MOUND ONE 2ED6 ; [.FB41.0020.0004][.961D.0000.0000] # CJK RADICAL MOUND TWO F9C6 ; [.FB41.0020.0002][.962E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.FB41.0020.0002][.964B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.FB41.0020.0002][.964D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.FB41.0020.0002][.9675.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F959 F9D3 ; [.FB41.0020.0002][.9678.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D3 FAC6 ; [.FB41.0020.0002][.967C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC6 F9DC ; [.FB41.0020.0002][.9686.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9F1 ; [.FB41.0020.0002][.96A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F1 2FAA ; [.FB41.0020.0004][.96B6.0000.0000] # KANGXI RADICAL SLAVE FA2F ; [.FB41.0020.0002][.96B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2F F9B8 ; [.FB41.0020.0002][.96B8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B8 2FAB ; [.FB41.0020.0004][.96B9.0000.0000] # KANGXI RADICAL SHORT TAILED BIRD 2F9F3 ; [.FB41.0020.0002][.96C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F3 F9EA ; [.FB41.0020.0002][.96E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC7 2FAC ; [.FB41.0020.0004][.96E8.0000.0000] # KANGXI RADICAL RAIN 2ED7 ; [.FB41.0020.0004][.96E8.0000.0000][.0000.0110.0004] # CJK RADICAL RAIN F9B2 ; [.FB41.0020.0002][.96F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.FB41.0020.0002][.96F7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F949 2F9F5 ; [.FB41.0020.0002][.9723.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 F938 ; [.FB41.0020.0002][.9732.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F938 F9B3 ; [.FB41.0020.0002][.9748.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B3 2FAD ; [.FB41.0020.0004][.9751.0000.0000] # KANGXI RADICAL BLUE 2ED8 ; [.FB41.0020.0004][.9752.0000.0000] # CJK RADICAL BLUE FA1C ; [.FB41.0020.0002][.9756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.FB41.0020.0002][.9756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC8 2FAE ; [.FB41.0020.0004][.975E.0000.0000] # KANGXI RADICAL WRONG 2FAF ; [.FB41.0020.0004][.9762.0000.0000] # KANGXI RADICAL FACE 2FB0 ; [.FB41.0020.0004][.9769.0000.0000] # KANGXI RADICAL LEATHER 2FB1 ; [.FB41.0020.0004][.97CB.0000.0000] # KANGXI RADICAL TANNED LEATHER FAC9 ; [.FB41.0020.0002][.97DB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC9 2F9FA ; [.FB41.0020.0002][.97E0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FA 2ED9 ; [.FB41.0020.0004][.97E6.0000.0000] # CJK RADICAL C-SIMPLIFIED TANNED LEATHER 2FB2 ; [.FB41.0020.0004][.97ED.0000.0000] # KANGXI RADICAL LEEK 2FB3 ; [.FB41.0020.0004][.97F3.0000.0000] # KANGXI RADICAL SOUND FA69 ; [.FB41.0020.0002][.97FF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA69 FACA ; [.FB41.0020.0002][.97FF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACA 2FB4 ; [.FB41.0020.0004][.9801.0000.0000] # KANGXI RADICAL LEAF 32A0 ; [.FB41.0020.0006][.9805.0000.0000] # CIRCLED IDEOGRAPH ITEM FACB ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACB 2F9FE ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FE 2F9FF ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FF F9B4 ; [.FB41.0020.0002][.9818.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B4 2FA00 ; [.FB41.0020.0002][.9829.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA00 FA6A ; [.FB41.0020.0002][.983B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6A FACC ; [.FB41.0020.0002][.983B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACC F9D0 ; [.FB41.0020.0002][.985E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2EDA ; [.FB41.0020.0004][.9875.0000.0000] # CJK RADICAL C-SIMPLIFIED LEAF 2FB5 ; [.FB41.0020.0004][.98A8.0000.0000] # KANGXI RADICAL WIND 2EDB ; [.FB41.0020.0004][.98CE.0000.0000] # CJK RADICAL C-SIMPLIFIED WIND 2FB6 ; [.FB41.0020.0004][.98DB.0000.0000] # KANGXI RADICAL FLY 2EDC ; [.FB41.0020.0004][.98DE.0000.0000] # CJK RADICAL C-SIMPLIFIED FLY 2EDD ; [.FB41.0020.0004][.98DF.0000.0000] # CJK RADICAL EAT ONE 2FB7 ; [.FB41.0020.0004][.98DF.0000.0000] # KANGXI RADICAL EAT 2EDF ; [.FB41.0020.0004][.98E0.0000.0000] # CJK RADICAL EAT THREE 2EDE ; [.FB41.0020.0004][.98E0.0000.0000][.0000.0110.0004] # CJK RADICAL EAT TWO 2FA02 ; [.FB41.0020.0002][.98E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.FB41.0020.0002][.98EF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.FB41.0020.0002][.98FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C ; [.FB41.0020.0002][.9928.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2C 2FA04 ; [.FB41.0020.0002][.9929.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA04 2EE0 ; [.FB41.0020.0004][.9963.0000.0000] # CJK RADICAL C-SIMPLIFIED EAT 2FB8 ; [.FB41.0020.0004][.9996.0000.0000] # KANGXI RADICAL HEAD 2EE1 ; [.FB41.0020.0004][.9996.0000.0000][.0000.0110.0004] # CJK RADICAL HEAD 2FB9 ; [.FB41.0020.0004][.9999.0000.0000] # KANGXI RADICAL FRAGRANT 2FA05 ; [.FB41.0020.0002][.99A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA05 2FBA ; [.FB41.0020.0004][.99AC.0000.0000] # KANGXI RADICAL HORSE 2FA06 ; [.FB41.0020.0002][.99C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA06 F91A ; [.FB41.0020.0002][.99F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91A 2FA07 ; [.FB41.0020.0002][.99FE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA07 F987 ; [.FB41.0020.0002][.9A6A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F987 2EE2 ; [.FB41.0020.0004][.9A6C.0000.0000] # CJK RADICAL C-SIMPLIFIED HORSE 2FBB ; [.FB41.0020.0004][.9AA8.0000.0000] # KANGXI RADICAL BONE 2EE3 ; [.FB41.0020.0004][.9AA8.0000.0000][.0000.0110.0004] # CJK RADICAL BONE 2FBC ; [.FB41.0020.0004][.9AD8.0000.0000] # KANGXI RADICAL TALL 2FBD ; [.FB41.0020.0004][.9ADF.0000.0000] # KANGXI RADICAL HAIR FACD ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACD 2FA0A ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0A 2FBE ; [.FB41.0020.0004][.9B25.0000.0000] # KANGXI RADICAL FIGHT 2FBF ; [.FB41.0020.0004][.9B2F.0000.0000] # KANGXI RADICAL SACRIFICIAL WINE 2FC0 ; [.FB41.0020.0004][.9B32.0000.0000] # KANGXI RADICAL CAULDRON 2FC1 ; [.FB41.0020.0004][.9B3C.0000.0000] # KANGXI RADICAL GHOST 2EE4 ; [.FB41.0020.0004][.9B3C.0000.0000][.0000.0110.0004] # CJK RADICAL GHOST 2FC2 ; [.FB41.0020.0004][.9B5A.0000.0000] # KANGXI RADICAL FISH F939 ; [.FB41.0020.0002][.9B6F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F939 2FA0B ; [.FB41.0020.0002][.9C40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0B F9F2 ; [.FB41.0020.0002][.9C57.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F2 2EE5 ; [.FB41.0020.0004][.9C7C.0000.0000] # CJK RADICAL C-SIMPLIFIED FISH 2FC3 ; [.FB41.0020.0004][.9CE5.0000.0000] # KANGXI RADICAL BIRD 2FA0C ; [.FB41.0020.0002][.9CFD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0C 2FA0F ; [.FB41.0020.0002][.9D67.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0F FA2D ; [.FB41.0020.0002][.9DB4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2D F93A ; [.FB41.0020.0002][.9DFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.FB41.0020.0002][.9E1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F920 2EE6 ; [.FB41.0020.0004][.9E1F.0000.0000] # CJK RADICAL C-SIMPLIFIED BIRD 2FC4 ; [.FB41.0020.0004][.9E75.0000.0000] # KANGXI RADICAL SALT 2EE7 ; [.FB41.0020.0004][.9E75.0000.0000][.0000.0110.0004] # CJK RADICAL C-SIMPLIFIED SALT F940 ; [.FB41.0020.0002][.9E7F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F940 2FC5 ; [.FB41.0020.0004][.9E7F.0000.0000] # KANGXI RADICAL DEER F988 ; [.FB41.0020.0002][.9E97.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F988 F9F3 ; [.FB41.0020.0002][.9E9F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FC6 ; [.FB41.0020.0004][.9EA5.0000.0000] # KANGXI RADICAL WHEAT 2EE8 ; [.FB41.0020.0004][.9EA6.0000.0000] # CJK RADICAL SIMPLIFIED WHEAT 2FA15 ; [.FB41.0020.0002][.9EBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA15 2FC7 ; [.FB41.0020.0004][.9EBB.0000.0000] # KANGXI RADICAL HEMP 2FC8 ; [.FB41.0020.0004][.9EC3.0000.0000] # KANGXI RADICAL YELLOW 2EE9 ; [.FB41.0020.0004][.9EC4.0000.0000] # CJK RADICAL SIMPLIFIED YELLOW 2FC9 ; [.FB41.0020.0004][.9ECD.0000.0000] # KANGXI RADICAL MILLET F989 ; [.FB41.0020.0002][.9ECE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F989 2FCA ; [.FB41.0020.0004][.9ED1.0000.0000] # KANGXI RADICAL BLACK 2FA17 ; [.FB41.0020.0002][.9EF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA17 2FCB ; [.FB41.0020.0004][.9EF9.0000.0000] # KANGXI RADICAL EMBROIDERY 2FCC ; [.FB41.0020.0004][.9EFD.0000.0000] # KANGXI RADICAL FROG 2FA18 ; [.FB41.0020.0002][.9EFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA18 2EEA ; [.FB41.0020.0004][.9EFE.0000.0000] # CJK RADICAL C-SIMPLIFIED FROG 2FA19 ; [.FB41.0020.0002][.9F05.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA19 2FCD ; [.FB41.0020.0004][.9F0E.0000.0000] # KANGXI RADICAL TRIPOD 2FA1A ; [.FB41.0020.0002][.9F0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1A 2FCE ; [.FB41.0020.0004][.9F13.0000.0000] # KANGXI RADICAL DRUM 2FA1B ; [.FB41.0020.0002][.9F16.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1B 2FCF ; [.FB41.0020.0004][.9F20.0000.0000] # KANGXI RADICAL RAT 2FA1C ; [.FB41.0020.0002][.9F3B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1C 2FD0 ; [.FB41.0020.0004][.9F3B.0000.0000] # KANGXI RADICAL NOSE FAD8 ; [.FB41.0020.0002][.9F43.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD8 2FD1 ; [.FB41.0020.0004][.9F4A.0000.0000] # KANGXI RADICAL EVEN 2EEB ; [.FB41.0020.0004][.9F4A.0000.0000][.0000.0110.0004] # CJK RADICAL J-SIMPLIFIED EVEN 2EEC ; [.FB41.0020.0004][.9F50.0000.0000] # CJK RADICAL C-SIMPLIFIED EVEN 2FD2 ; [.FB41.0020.0004][.9F52.0000.0000] # KANGXI RADICAL TOOTH 2EED ; [.FB41.0020.0004][.9F52.0000.0000][.0000.0110.0004] # CJK RADICAL J-SIMPLIFIED TOOTH 2EEE ; [.FB41.0020.0004][.9F7F.0000.0000] # CJK RADICAL C-SIMPLIFIED TOOTH F9C4 ; [.FB41.0020.0002][.9F8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C4 2FD3 ; [.FB41.0020.0004][.9F8D.0000.0000] # KANGXI RADICAL DRAGON 2EEF ; [.FB41.0020.0004][.9F8D.0000.0000][.0000.0110.0004] # CJK RADICAL J-SIMPLIFIED DRAGON FAD9 ; [.FB41.0020.0002][.9F8E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD9 2EF0 ; [.FB41.0020.0004][.9F99.0000.0000] # CJK RADICAL C-SIMPLIFIED DRAGON F907 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACE 2FD4 ; [.FB41.0020.0004][.9F9C.0000.0000] # KANGXI RADICAL TURTLE 2EF1 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0110.0004] # CJK RADICAL TURTLE 2EF2 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0111.0004] # CJK RADICAL J-SIMPLIFIED TURTLE 2EF3 ; [.FB41.0020.0004][.9F9F.0000.0000] # CJK RADICAL C-SIMPLIFIED TURTLE 2FD5 ; [.FB41.0020.0004][.9FA0.0000.0000] # KANGXI RADICAL FLUTE FA0E ; [.FB41.0020.0002][.FA0E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0E FA0F ; [.FB41.0020.0002][.FA0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0F FA11 ; [.FB41.0020.0002][.FA11.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA11 FA13 ; [.FB41.0020.0002][.FA13.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA13 FA14 ; [.FB41.0020.0002][.FA14.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA14 FA1F ; [.FB41.0020.0002][.FA1F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1F FA21 ; [.FB41.0020.0002][.FA21.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA21 FA23 ; [.FB41.0020.0002][.FA23.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA23 FA24 ; [.FB41.0020.0002][.FA24.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA24 FA27 ; [.FB41.0020.0002][.FA27.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA27 FA28 ; [.FB41.0020.0002][.FA28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA28 FA29 ; [.FB41.0020.0002][.FA29.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA29 2F80C ; [.FB80.0020.0002][.B49E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80C 2F813 ; [.FB80.0020.0002][.B4B9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F813 2F9CA ; [.FB80.0020.0002][.B4BB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CA 2F81F ; [.FB80.0020.0002][.B4DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81F 2F824 ; [.FB80.0020.0002][.B515.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F824 2F867 ; [.FB80.0020.0002][.B6EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F867 2F868 ; [.FB80.0020.0002][.B6FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F868 2F876 ; [.FB80.0020.0002][.B781.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F876 2F883 ; [.FB80.0020.0002][.B82F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F883 2F888 ; [.FB80.0020.0002][.B862.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F888 2F88A ; [.FB80.0020.0002][.B87C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88A 2F896 ; [.FB80.0020.0002][.B8C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F896 2F89B ; [.FB80.0020.0002][.B8E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89B 2F8A2 ; [.FB80.0020.0002][.B91C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A2 2F8A1 ; [.FB80.0020.0002][.B93A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A1 2F8C2 ; [.FB80.0020.0002][.BA2E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C2 2F8C7 ; [.FB80.0020.0002][.BA6C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C7 2F8D1 ; [.FB80.0020.0002][.BAE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D1 2F8D0 ; [.FB80.0020.0002][.BB08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D0 2F8CE ; [.FB80.0020.0002][.BB19.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CE 2F8DE ; [.FB80.0020.0002][.BB49.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DE FAD2 ; [.FB80.0020.0002][.BB9D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD2 2F8E7 ; [.FB80.0020.0002][.BB9D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E7 2F8EE ; [.FB80.0020.0002][.BC18.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EE 2F8F2 ; [.FB80.0020.0002][.BC4E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F2 2F90A ; [.FB80.0020.0002][.BD33.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90A 2F916 ; [.FB80.0020.0002][.BD96.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F916 2F92A ; [.FB80.0020.0002][.BEAC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92A 2F92C ; [.FB80.0020.0002][.BEB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92C 2F92D ; [.FB80.0020.0002][.BEB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92D 2F933 ; [.FB80.0020.0002][.BF1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F933 2F93E ; [.FB80.0020.0002][.BFFC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93E 2F93F ; [.FB80.0020.0002][.C008.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93F FAD3 ; [.FB80.0020.0002][.C018.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD3 FAD4 ; [.FB80.0020.0002][.C039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD4 2F949 ; [.FB80.0020.0002][.C039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F949 2F94B ; [.FB80.0020.0002][.C046.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94B 2F94C ; [.FB80.0020.0002][.C096.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94C 2F951 ; [.FB80.0020.0002][.C0E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F951 2F958 ; [.FB80.0020.0002][.C12F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F958 2F960 ; [.FB80.0020.0002][.C202.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F960 2F964 ; [.FB80.0020.0002][.C227.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F964 2F967 ; [.FB80.0020.0002][.C2A0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F967 2F96D ; [.FB80.0020.0002][.C301.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96D 2F971 ; [.FB80.0020.0002][.C334.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F971 2F974 ; [.FB80.0020.0002][.C359.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F974 2F981 ; [.FB80.0020.0002][.C3D5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F981 2F8D7 ; [.FB80.0020.0002][.C3D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D7 2F984 ; [.FB80.0020.0002][.C40B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F984 2F98E ; [.FB80.0020.0002][.C46B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98E 2F9A7 ; [.FB80.0020.0002][.C52B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A7 2F9AE ; [.FB80.0020.0002][.C55D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AE 2F9AF ; [.FB80.0020.0002][.C561.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AF 2F9B2 ; [.FB80.0020.0002][.C56B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B2 2F9BF ; [.FB80.0020.0002][.C5D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BF 2F9C2 ; [.FB80.0020.0002][.C5F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C2 2F9C8 ; [.FB80.0020.0002][.C635.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C8 2F9CD ; [.FB80.0020.0002][.C6BE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CD 2F9CE ; [.FB80.0020.0002][.C6C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CE 2F9EF ; [.FB80.0020.0002][.C995.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EF 2F9F2 ; [.FB80.0020.0002][.C9E6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F2 2F9F8 ; [.FB80.0020.0002][.CA6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F8 2F9F9 ; [.FB80.0020.0002][.CA76.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F9 2F9FC ; [.FB80.0020.0002][.CAB2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FC 2FA03 ; [.FB80.0020.0002][.CB33.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA03 2FA08 ; [.FB80.0020.0002][.CBCE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA08 2FA0D ; [.FB80.0020.0002][.CCCE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0D 2FA0E ; [.FB80.0020.0002][.CCED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0E 2FA11 ; [.FB80.0020.0002][.CCF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA11 2FA16 ; [.FB80.0020.0002][.CD56.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA16 2F803 ; [.FB84.0020.0002][.8122.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F803 2F812 ; [.FB84.0020.0002][.851C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F812 2F91B ; [.FB84.0020.0002][.8525.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91B 2F816 ; [.FB84.0020.0002][.854B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F816 2F80D ; [.FB84.0020.0002][.863A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80D 2F9D9 ; [.FB84.0020.0002][.8804.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D9 2F9DD ; [.FB84.0020.0002][.88DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DD 2F834 ; [.FB84.0020.0002][.8A2C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F834 2F838 ; [.FB84.0020.0002][.8B63.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F838 2F859 ; [.FB84.0020.0002][.94E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F859 2F860 ; [.FB84.0020.0002][.96A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F860 2F861 ; [.FB84.0020.0002][.96EA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F861 2F86C ; [.FB84.0020.0002][.99C8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86C 2F871 ; [.FB84.0020.0002][.9B18.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F871 2F8F8 ; [.FB84.0020.0002][.9D0B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F8 2F87B ; [.FB84.0020.0002][.9DE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87B 2F87D ; [.FB84.0020.0002][.9DE6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87D 2F889 ; [.FB84.0020.0002][.A183.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F889 2F939 ; [.FB84.0020.0002][.A19F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F939 2F891 ; [.FB84.0020.0002][.A331.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F891 2F892 ; [.FB84.0020.0002][.A331.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F892 2F8A4 ; [.FB84.0020.0002][.A6D4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A4 FAD0 ; [.FB84.0020.0002][.A844.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD0 FACF ; [.FB84.0020.0002][.A84A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACF 2F8B8 ; [.FB84.0020.0002][.AB0C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B8 2F8BE ; [.FB84.0020.0002][.ABF1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BE 2F8CA ; [.FB84.0020.0002][.B00A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CA 2F897 ; [.FB84.0020.0002][.B2B8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F897 2F980 ; [.FB84.0020.0002][.B35F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F980 2F989 ; [.FB84.0020.0002][.B393.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F989 2F98A ; [.FB84.0020.0002][.B39C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98A 2F8DD ; [.FB84.0020.0002][.B3C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DD FAD1 ; [.FB84.0020.0002][.B3D5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD1 2F8E3 ; [.FB84.0020.0002][.B46D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E3 2F8EC ; [.FB84.0020.0002][.B6A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EC 2F8F0 ; [.FB84.0020.0002][.B8A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F0 2F8F7 ; [.FB84.0020.0002][.BA8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F7 2F8F9 ; [.FB84.0020.0002][.BAFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F9 2F8FB ; [.FB84.0020.0002][.BCBC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FB 2F906 ; [.FB84.0020.0002][.BD1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F906 2F90D ; [.FB84.0020.0002][.BED1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90D 2F910 ; [.FB84.0020.0002][.BF5E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F910 2F911 ; [.FB84.0020.0002][.BF8E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F911 2F91D ; [.FB84.0020.0002][.C263.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91D FA6C ; [.FB84.0020.0002][.C2EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6C 2F91F ; [.FB84.0020.0002][.C3AB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91F 2F923 ; [.FB84.0020.0002][.C608.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F923 2F926 ; [.FB84.0020.0002][.C735.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F926 2F927 ; [.FB84.0020.0002][.C814.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F927 2F935 ; [.FB84.0020.0002][.CC36.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F935 2F937 ; [.FB84.0020.0002][.CC92.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F937 2F93B ; [.FB84.0020.0002][.CFA1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93B 2F93C ; [.FB84.0020.0002][.CFB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93C 2F93D ; [.FB84.0020.0002][.D044.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93D 2F942 ; [.FB84.0020.0002][.D0F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F942 2F941 ; [.FB84.0020.0002][.D0F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F941 2F943 ; [.FB84.0020.0002][.D119.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F943 2F944 ; [.FB84.0020.0002][.D133.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F944 FAD5 ; [.FB84.0020.0002][.D249.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD5 2F94D ; [.FB84.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94D 2F952 ; [.FB84.0020.0002][.D626.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F952 2F954 ; [.FB84.0020.0002][.D69A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F954 2F955 ; [.FB84.0020.0002][.D6C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F955 2F95C ; [.FB84.0020.0002][.D97C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95C 2F95D ; [.FB84.0020.0002][.DAA7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95D 2F95E ; [.FB84.0020.0002][.DAA7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95E 2F961 ; [.FB84.0020.0002][.DBAB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F961 2F965 ; [.FB84.0020.0002][.DC80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F965 FAD6 ; [.FB84.0020.0002][.DCD0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD6 2F96B ; [.FB84.0020.0002][.DF86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96B 2F898 ; [.FB84.0020.0002][.E1DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F898 2F972 ; [.FB84.0020.0002][.E228.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F972 2F973 ; [.FB84.0020.0002][.E247.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F973 2F975 ; [.FB84.0020.0002][.E2D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F975 2F977 ; [.FB84.0020.0002][.E33E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F977 2F97B ; [.FB84.0020.0002][.E4DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97B 2F97C ; [.FB84.0020.0002][.E523.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97C 2F97E ; [.FB84.0020.0002][.E5A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97E 2F987 ; [.FB84.0020.0002][.E7A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F987 2F988 ; [.FB84.0020.0002][.E7B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F988 2F997 ; [.FB84.0020.0002][.EB3C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F997 2F9A4 ; [.FB84.0020.0002][.EC36.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A4 2F9A6 ; [.FB84.0020.0002][.ECD5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A6 2F9A5 ; [.FB84.0020.0002][.ED6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A5 2F9AD ; [.FB84.0020.0002][.EF2C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AD 2F9B0 ; [.FB84.0020.0002][.EFB1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B0 2F9B1 ; [.FB84.0020.0002][.F0D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B1 2F9AB ; [.FB84.0020.0002][.F3CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AB 2F9C5 ; [.FB84.0020.0002][.F667.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C5 2F9CB ; [.FB84.0020.0002][.F8AE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CB 2F9CC ; [.FB84.0020.0002][.F966.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CC 2F9D3 ; [.FB84.0020.0002][.FCA8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D3 FAD7 ; [.FB84.0020.0002][.FED3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD7 2F9D8 ; [.FB84.0020.0002][.FF2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D8 2F9E0 ; [.FB85.0020.0002][.85D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E0 2F9E1 ; [.FB85.0020.0002][.85ED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E1 2F9E5 ; [.FB85.0020.0002][.872E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E5 2F9ED ; [.FB85.0020.0002][.8BFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9ED 2F9F1 ; [.FB85.0020.0002][.8D77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F1 2F9F6 ; [.FB85.0020.0002][.9145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F6 2F81C ; [.FB85.0020.0002][.91DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81C 2F9F7 ; [.FB85.0020.0002][.921A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F7 2F9FB ; [.FB85.0020.0002][.940A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FB 2F9FD ; [.FB85.0020.0002][.9496.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FD 2FA01 ; [.FB85.0020.0002][.95B6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA01 2FA09 ; [.FB85.0020.0002][.9B30.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA09 2FA10 ; [.FB85.0020.0002][.A0CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA10 2FA12 ; [.FB85.0020.0002][.A105.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA12 2FA13 ; [.FB85.0020.0002][.A20E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA13 2FA14 ; [.FB85.0020.0002][.A291.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA14 2F88F ; [.FB85.0020.0002][.A392.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88F 2FA1D ; [.FB85.0020.0002][.A600.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1D FFFD ; [.FFFD.0020.0002] # REPLACEMENT CHARACTER # EOF Unicode/Collate/CJK/GB2312.pm 0000644 00000104606 15037233317 0011275 0 ustar 00 package Unicode::Collate::CJK::GB2312; use 5.006; use strict; use warnings; our $VERSION = '1.25'; my %u2p; my $wt = 0x8000; while (<DATA>) { last if /^__END__/; my @c = split; for my $c (@c) { next if !$c; $u2p{hex($c)} = $wt; $wt++; } } sub weightGB2312 { my $u = shift; return exists $u2p{$u} ? $u2p{$u} : undef; } 1; __DATA__ 554A 963F 57C3 6328 54CE 5509 54C0 7691 764C 853C 77EE 827E 788D 7231 9698 978D 6C28 5B89 4FFA 6309 6697 5CB8 80FA 6848 80AE 6602 76CE 51F9 6556 71AC 7FF1 8884 50B2 5965 61CA 6FB3 82AD 634C 6252 53ED 5427 7B06 516B 75A4 5DF4 62D4 8DCB 9776 628A 8019 575D 9738 7F62 7238 767D 67CF 767E 6446 4F70 8D25 62DC 7A17 6591 73ED 642C 6273 822C 9881 677F 7248 626E 62CC 4F34 74E3 534A 529E 7ECA 90A6 5E2E 6886 699C 8180 7ED1 68D2 78C5 868C 9551 508D 8C24 82DE 80DE 5305 8912 5265 8584 96F9 4FDD 5821 9971 5B9D 62B1 62A5 66B4 8C79 9C8D 7206 676F 7891 60B2 5351 5317 8F88 80CC 8D1D 94A1 500D 72C8 5907 60EB 7119 88AB 5954 82EF 672C 7B28 5D29 7EF7 752D 6CF5 8E66 8FF8 903C 9F3B 6BD4 9119 7B14 5F7C 78A7 84D6 853D 6BD5 6BD9 6BD6 5E01 5E87 75F9 95ED 655D 5F0A 5FC5 8F9F 58C1 81C2 907F 965B 97AD 8FB9 7F16 8D2C 6241 4FBF 53D8 535E 8FA8 8FA9 8FAB 904D 6807 5F6A 8198 8868 9CD6 618B 522B 762A 5F6C 658C 6FD2 6EE8 5BBE 6448 5175 51B0 67C4 4E19 79C9 997C 70B3 75C5 5E76 73BB 83E0 64AD 62E8 94B5 6CE2 535A 52C3 640F 94C2 7B94 4F2F 5E1B 8236 8116 818A 6E24 6CCA 9A73 6355 535C 54FA 8865 57E0 4E0D 5E03 6B65 7C3F 90E8 6016 64E6 731C 88C1 6750 624D 8D22 776C 8E29 91C7 5F69 83DC 8521 9910 53C2 8695 6B8B 60ED 60E8 707F 82CD 8231 4ED3 6CA7 85CF 64CD 7CD9 69FD 66F9 8349 5395 7B56 4FA7 518C 6D4B 5C42 8E6D 63D2 53C9 832C 8336 67E5 78B4 643D 5BDF 5C94 5DEE 8BE7 62C6 67F4 8C7A 6400 63BA 8749 998B 8C17 7F20 94F2 4EA7 9610 98A4 660C 7316 573A 5C1D 5E38 957F 507F 80A0 5382 655E 7545 5531 5021 8D85 6284 949E 671D 5632 6F6E 5DE2 5435 7092 8F66 626F 64A4 63A3 5F7B 6F88 90F4 81E3 8FB0 5C18 6668 5FF1 6C89 9648 8D81 886C 6491 79F0 57CE 6A59 6210 5448 4E58 7A0B 60E9 6F84 8BDA 627F 901E 9A8B 79E4 5403 75F4 6301 5319 6C60 8FDF 5F1B 9A70 803B 9F7F 4F88 5C3A 8D64 7FC5 65A5 70BD 5145 51B2 866B 5D07 5BA0 62BD 916C 7574 8E0C 7A20 6101 7B79 4EC7 7EF8 7785 4E11 81ED 521D 51FA 6A71 53A8 8E87 9504 96CF 6EC1 9664 695A 7840 50A8 77D7 6410 89E6 5904 63E3 5DDD 7A7F 693D 4F20 8239 5598 4E32 75AE 7A97 5E62 5E8A 95EF 521B 5439 708A 6376 9524 5782 6625 693F 9187 5507 6DF3 7EAF 8822 6233 7EF0 75B5 8328 78C1 96CC 8F9E 6148 74F7 8BCD 6B64 523A 8D50 6B21 806A 8471 56F1 5306 4ECE 4E1B 51D1 7C97 918B 7C07 4FC3 8E7F 7BE1 7A9C 6467 5D14 50AC 8106 7601 7CB9 6DEC 7FE0 6751 5B58 5BF8 78CB 64AE 6413 63AA 632B 9519 642D 8FBE 7B54 7629 6253 5927 5446 6B79 50A3 6234 5E26 6B86 4EE3 8D37 888B 5F85 902E 6020 803D 62C5 4E39 5355 90F8 63B8 80C6 65E6 6C2E 4F46 60EE 6DE1 8BDE 5F39 86CB 5F53 6321 515A 8361 6863 5200 6363 8E48 5012 5C9B 7977 5BFC 5230 7A3B 60BC 9053 76D7 5FB7 5F97 7684 8E6C 706F 767B 7B49 77AA 51F3 9093 5824 4F4E 6EF4 8FEA 654C 7B1B 72C4 6DA4 7FDF 5AE1 62B5 5E95 5730 8482 7B2C 5E1D 5F1F 9012 7F14 98A0 6382 6EC7 7898 70B9 5178 975B 57AB 7535 4F43 7538 5E97 60E6 5960 6DC0 6BBF 7889 53FC 96D5 51CB 5201 6389 540A 9493 8C03 8DCC 7239 789F 8776 8FED 8C0D 53E0 4E01 76EF 53EE 9489 9876 9F0E 952D 5B9A 8BA2 4E22 4E1C 51AC 8463 61C2 52A8 680B 4F97 606B 51BB 6D1E 515C 6296 6597 9661 8C46 9017 75D8 90FD 7763 6BD2 728A 72EC 8BFB 5835 7779 8D4C 675C 9540 809A 5EA6 6E21 5992 7AEF 77ED 953B 6BB5 65AD 7F0E 5806 5151 961F 5BF9 58A9 5428 8E72 6566 987F 56E4 949D 76FE 9041 6387 54C6 591A 593A 579B 8EB2 6735 8DFA 8235 5241 60F0 5815 86FE 5CE8 9E45 4FC4 989D 8BB9 5A25 6076 5384 627C 904F 9102 997F 6069 800C 513F 8033 5C14 9975 6D31 4E8C 8D30 53D1 7F5A 7B4F 4F10 4E4F 9600 6CD5 73D0 85E9 5E06 756A 7FFB 6A0A 77FE 9492 7E41 51E1 70E6 53CD 8FD4 8303 8D29 72AF 996D 6CDB 574A 82B3 65B9 80AA 623F 9632 59A8 4EFF 8BBF 7EBA 653E 83F2 975E 5561 98DE 80A5 532A 8BFD 5420 80BA 5E9F 6CB8 8D39 82AC 915A 5429 6C1B 5206 7EB7 575F 711A 6C7E 7C89 594B 4EFD 5FFF 6124 7CAA 4E30 5C01 67AB 8702 5CF0 950B 98CE 75AF 70FD 9022 51AF 7F1D 8BBD 5949 51E4 4F5B 5426 592B 6577 80A4 5B75 6276 62C2 8F90 5E45 6C1F 7B26 4F0F 4FD8 670D 6D6E 6DAA 798F 88B1 5F17 752B 629A 8F85 4FEF 91DC 65A7 812F 8151 5E9C 8150 8D74 526F 8986 8D4B 590D 5085 4ED8 961C 7236 8179 8D1F 5BCC 8BA3 9644 5987 7F1A 5490 5676 560E 8BE5 6539 6982 9499 76D6 6E89 5E72 7518 6746 67D1 7AFF 809D 8D76 611F 79C6 6562 8D63 5188 521A 94A2 7F38 809B 7EB2 5C97 6E2F 6760 7BD9 768B 9AD8 818F 7F94 7CD5 641E 9550 7A3F 544A 54E5 6B4C 6401 6208 9E3D 80F3 7599 5272 9769 845B 683C 86E4 9601 9694 94EC 4E2A 5404 7ED9 6839 8DDF 8015 66F4 5E9A 7FB9 57C2 803F 6897 5DE5 653B 529F 606D 9F9A 4F9B 8EAC 516C 5BAB 5F13 5DE9 6C5E 62F1 8D21 5171 94A9 52FE 6C9F 82DF 72D7 57A2 6784 8D2D 591F 8F9C 83C7 5495 7B8D 4F30 6CBD 5B64 59D1 9F13 53E4 86CA 9AA8 8C37 80A1 6545 987E 56FA 96C7 522E 74DC 5250 5BE1 6302 8902 4E56 62D0 602A 68FA 5173 5B98 51A0 89C2 7BA1 9986 7F50 60EF 704C 8D2F 5149 5E7F 901B 7470 89C4 572D 7845 5F52 9F9F 95FA 8F68 9B3C 8BE1 7678 6842 67DC 8DEA 8D35 523D 8F8A 6EDA 68CD 9505 90ED 56FD 679C 88F9 8FC7 54C8 9AB8 5B69 6D77 6C26 4EA5 5BB3 9A87 9163 61A8 90AF 97E9 542B 6DB5 5BD2 51FD 558A 7F55 7FF0 64BC 634D 65F1 61BE 608D 710A 6C57 6C49 592F 676D 822A 58D5 568E 8C6A 6BEB 90DD 597D 8017 53F7 6D69 5475 559D 8377 83CF 6838 79BE 548C 4F55 5408 76D2 8C89 9602 6CB3 6DB8 8D6B 8910 9E64 8D3A 563F 9ED1 75D5 5F88 72E0 6068 54FC 4EA8 6A2A 8861 6052 8F70 54C4 70D8 8679 9E3F 6D2A 5B8F 5F18 7EA2 5589 4FAF 7334 543C 539A 5019 540E 547C 4E4E 5FFD 745A 58F6 846B 80E1 8774 72D0 7CCA 6E56 5F27 864E 552C 62A4 4E92 6CAA 6237 82B1 54D7 534E 733E 6ED1 753B 5212 5316 8BDD 69D0 5F8A 6000 6DEE 574F 6B22 73AF 6853 8FD8 7F13 6362 60A3 5524 75EA 8C62 7115 6DA3 5BA6 5E7B 8352 614C 9EC4 78FA 8757 7C27 7687 51F0 60F6 714C 6643 5E4C 604D 8C0E 7070 6325 8F89 5FBD 6062 86D4 56DE 6BC1 6094 6167 5349 60E0 6666 8D3F 79FD 4F1A 70E9 6C47 8BB3 8BF2 7ED8 8364 660F 5A5A 9B42 6D51 6DF7 8C41 6D3B 4F19 706B 83B7 6216 60D1 970D 8D27 7978 51FB 573E 57FA 673A 7578 7A3D 79EF 7B95 808C 9965 8FF9 6FC0 8BA5 9E21 59EC 7EE9 7F09 5409 6781 68D8 8F91 7C4D 96C6 53CA 6025 75BE 6C72 5373 5AC9 7EA7 6324 51E0 810A 5DF1 84DF 6280 5180 5B63 4F0E 796D 5242 60B8 6D4E 5BC4 5BC2 8BA1 8BB0 65E2 5FCC 9645 5993 7EE7 7EAA 5609 67B7 5939 4F73 5BB6 52A0 835A 988A 8D3E 7532 94BE 5047 7A3C 4EF7 67B6 9A7E 5AC1 6B7C 76D1 575A 5C16 7B3A 95F4 714E 517C 80A9 8270 5978 7F04 8327 68C0 67EC 78B1 7877 62E3 6361 7B80 4FED 526A 51CF 8350 69DB 9274 8DF5 8D31 89C1 952E 7BAD 4EF6 5065 8230 5251 996F 6E10 6E85 6DA7 5EFA 50F5 59DC 5C06 6D46 6C5F 7586 848B 6868 5956 8BB2 5320 9171 964D 8549 6912 7901 7126 80F6 4EA4 90CA 6D47 9A84 5A07 56BC 6405 94F0 77EB 4FA5 811A 72E1 89D2 997A 7F34 7EDE 527F 6559 9175 8F7F 8F83 53EB 7A96 63ED 63A5 7686 79F8 8857 9636 622A 52AB 8282 6854 6770 6377 776B 7AED 6D01 7ED3 89E3 59D0 6212 85C9 82A5 754C 501F 4ECB 75A5 8BEB 5C4A 5DFE 7B4B 65A4 91D1 4ECA 6D25 895F 7D27 9526 4EC5 8C28 8FDB 9773 664B 7981 8FD1 70EC 6D78 5C3D 52B2 8346 5162 830E 775B 6676 9CB8 4EAC 60CA 7CBE 7CB3 7ECF 4E95 8B66 666F 9888 9759 5883 656C 955C 5F84 75C9 9756 7ADF 7ADE 51C0 70AF 7A98 63EA 7A76 7EA0 7396 97ED 4E45 7078 4E5D 9152 53A9 6551 65E7 81FC 8205 548E 5C31 759A 97A0 62D8 72D9 75BD 5C45 9A79 83CA 5C40 5480 77E9 4E3E 6CAE 805A 62D2 636E 5DE8 5177 8DDD 8E1E 952F 4FF1 53E5 60E7 70AC 5267 6350 9E43 5A1F 5026 7737 5377 7EE2 6485 652B 6289 6398 5014 7235 89C9 51B3 8BC0 7EDD 5747 83CC 94A7 519B 541B 5CFB 4FCA 7AE3 6D5A 90E1 9A8F 5580 5496 5361 54AF 5F00 63E9 6977 51EF 6168 520A 582A 52D8 574E 780D 770B 5EB7 6177 7CE0 625B 6297 4EA2 7095 8003 62F7 70E4 9760 5777 82DB 67EF 68F5 78D5 9897 79D1 58F3 54B3 53EF 6E34 514B 523B 5BA2 8BFE 80AF 5543 57A6 6073 5751 542D 7A7A 6050 5B54 63A7 62A0 53E3 6263 5BC7 67AF 54ED 7A9F 82E6 9177 5E93 88E4 5938 57AE 630E 8DE8 80EF 5757 7B77 4FA9 5FEB 5BBD 6B3E 5321 7B50 72C2 6846 77FF 7736 65F7 51B5 4E8F 76D4 5CBF 7AA5 8475 594E 9B41 5080 9988 6127 6E83 5764 6606 6346 56F0 62EC 6269 5ED3 9614 5783 62C9 5587 8721 814A 8FA3 5566 83B1 6765 8D56 84DD 5A6A 680F 62E6 7BEE 9611 5170 6F9C 8C30 63FD 89C8 61D2 7F06 70C2 6EE5 7405 6994 72FC 5ECA 90CE 6717 6D6A 635E 52B3 7262 8001 4F6C 59E5 916A 70D9 6D9D 52D2 4E50 96F7 956D 857E 78CA 7D2F 5121 5792 64C2 808B 7C7B 6CEA 68F1 695E 51B7 5398 68A8 7281 9ECE 7BF1 72F8 79BB 6F13 7406 674E 91CC 9CA4 793C 8389 8354 540F 6817 4E3D 5389 52B1 783E 5386 5229 5088 4F8B 4FD0 75E2 7ACB 7C92 6CA5 96B6 529B 7483 54E9 4FE9 8054 83B2 8FDE 9570 5EC9 601C 6D9F 5E18 655B 8138 94FE 604B 70BC 7EC3 7CAE 51C9 6881 7CB1 826F 4E24 8F86 91CF 667E 4EAE 8C05 64A9 804A 50DA 7597 71CE 5BE5 8FBD 6F66 4E86 6482 9563 5ED6 6599 5217 88C2 70C8 52A3 730E 7433 6797 78F7 9716 4E34 90BB 9CDE 6DCB 51DB 8D41 541D 62CE 73B2 83F1 96F6 9F84 94C3 4F36 7F9A 51CC 7075 9675 5CAD 9886 53E6 4EE4 6E9C 7409 69B4 786B 998F 7559 5218 7624 6D41 67F3 516D 9F99 804B 5499 7B3C 7ABF 9686 5784 62E2 9647 697C 5A04 6402 7BD3 6F0F 964B 82A6 5362 9885 5E90 7089 63B3 5364 864F 9C81 9E93 788C 9732 8DEF 8D42 9E7F 6F5E 7984 5F55 9646 622E 9A74 5415 94DD 4FA3 65C5 5C65 5C61 7F15 8651 6C2F 5F8B 7387 6EE4 7EFF 5CE6 631B 5B6A 6EE6 5375 4E71 63A0 7565 62A1 8F6E 4F26 4ED1 6CA6 7EB6 8BBA 841D 87BA 7F57 903B 9523 7BA9 9AA1 88F8 843D 6D1B 9A86 7EDC 5988 9EBB 739B 7801 8682 9A6C 9A82 561B 5417 57CB 4E70 9EA6 5356 8FC8 8109 7792 9992 86EE 6EE1 8513 66FC 6162 6F2B 8C29 8292 832B 76F2 6C13 5FD9 83BD 732B 8305 951A 6BDB 77DB 94C6 536F 8302 5192 5E3D 8C8C 8D38 4E48 73AB 679A 6885 9176 9709 7164 6CA1 7709 5A92 9541 6BCF 7F8E 6627 5BD0 59B9 5A9A 95E8 95F7 4EEC 840C 8499 6AAC 76DF 9530 731B 68A6 5B5F 772F 919A 9761 7CDC 8FF7 8C1C 5F25 7C73 79D8 89C5 6CCC 871C 5BC6 5E42 68C9 7720 7EF5 5195 514D 52C9 5A29 7F05 9762 82D7 63CF 7784 85D0 79D2 6E3A 5E99 5999 8511 706D 6C11 62BF 76BF 654F 60AF 95FD 660E 879F 9E23 94ED 540D 547D 8C2C 6478 6479 8611 6A21 819C 78E8 6469 9B54 62B9 672B 83AB 58A8 9ED8 6CAB 6F20 5BDE 964C 8C0B 725F 67D0 62C7 7261 4EA9 59C6 6BCD 5893 66AE 5E55 52DF 6155 6728 76EE 7766 7267 7A46 62FF 54EA 5450 94A0 90A3 5A1C 7EB3 6C16 4E43 5976 8010 5948 5357 7537 96BE 56CA 6320 8111 607C 95F9 6DD6 5462 9981 5185 5AE9 80FD 59AE 9713 502A 6CE5 5C3C 62DF 4F60 533F 817B 9006 6EBA 852B 62C8 5E74 78BE 64B5 637B 5FF5 5A18 917F 9E1F 5C3F 634F 8042 5B7D 556E 954A 954D 6D85 60A8 67E0 72DE 51DD 5B81 62E7 6CDE 725B 626D 94AE 7EBD 8113 6D53 519C 5F04 5974 52AA 6012 5973 6696 8650 759F 632A 61E6 7CEF 8BFA 54E6 6B27 9E25 6BB4 85D5 5455 5076 6CA4 556A 8DB4 722C 5E15 6015 7436 62CD 6392 724C 5F98 6E43 6D3E 6500 6F58 76D8 78D0 76FC 7554 5224 53DB 4E53 5E9E 65C1 802A 80D6 629B 5486 5228 70AE 888D 8DD1 6CE1 5478 80DA 57F9 88F4 8D54 966A 914D 4F69 6C9B 55B7 76C6 7830 62A8 70F9 6F8E 5F6D 84EC 68DA 787C 7BF7 81A8 670B 9E4F 6367 78B0 576F 7812 9739 6279 62AB 5288 7435 6BD7 5564 813E 75B2 76AE 5339 75DE 50FB 5C41 8B6C 7BC7 504F 7247 9A97 98D8 6F02 74E2 7968 6487 77A5 62FC 9891 8D2B 54C1 8058 4E52 576A 82F9 840D 5E73 51ED 74F6 8BC4 5C4F 5761 6CFC 9887 5A46 7834 9B44 8FEB 7C95 5256 6251 94FA 4EC6 8386 8461 83E9 84B2 57D4 6734 5703 666E 6D66 8C31 66DD 7011 671F 6B3A 6816 621A 59BB 4E03 51C4 6F06 67D2 6C8F 5176 68CB 5947 6B67 7566 5D0E 8110 9F50 65D7 7948 7941 9A91 8D77 5C82 4E5E 4F01 542F 5951 780C 5668 6C14 8FC4 5F03 6C7D 6CE3 8BAB 6390 6070 6D3D 7275 6266 948E 94C5 5343 8FC1 7B7E 4EDF 8C26 4E7E 9ED4 94B1 94B3 524D 6F5C 9063 6D45 8C34 5811 5D4C 6B20 6B49 67AA 545B 8154 7F8C 5899 8537 5F3A 62A2 6A47 9539 6572 6084 6865 77A7 4E54 4FA8 5DE7 9798 64AC 7FD8 5CED 4FCF 7A8D 5207 8304 4E14 602F 7A83 94A6 4FB5 4EB2 79E6 7434 52E4 82B9 64D2 79BD 5BDD 6C81 9752 8F7B 6C22 503E 537F 6E05 64CE 6674 6C30 60C5 9877 8BF7 5E86 743C 7A77 79CB 4E18 90B1 7403 6C42 56DA 914B 6CC5 8D8B 533A 86C6 66F2 8EAF 5C48 9A71 6E20 53D6 5A36 9F8B 8DA3 53BB 5708 98A7 6743 919B 6CC9 5168 75CA 62F3 72AC 5238 529D 7F3A 7094 7638 5374 9E4A 69B7 786E 96C0 88D9 7FA4 7136 71C3 5189 67D3 74E4 58E4 6518 56B7 8BA9 9976 6270 7ED5 60F9 70ED 58EC 4EC1 4EBA 5FCD 97E7 4EFB 8BA4 5203 598A 7EAB 6254 4ECD 65E5 620E 8338 84C9 8363 878D 7194 6EB6 5BB9 7ED2 5197 63C9 67D4 8089 8339 8815 5112 5B7A 5982 8FB1 4E73 6C5D 5165 8925 8F6F 962E 854A 745E 9510 95F0 6DA6 82E5 5F31 6492 6D12 8428 816E 9CC3 585E 8D5B 4E09 53C1 4F1E 6563 6851 55D3 4E27 6414 9A9A 626B 5AC2 745F 8272 6DA9 68EE 50E7 838E 7802 6740 5239 6C99 7EB1 50BB 5565 715E 7B5B 6652 73CA 82EB 6749 5C71 5220 717D 886B 95EA 9655 64C5 8D61 81B3 5584 6C55 6247 7F2E 5892 4F24 5546 8D4F 664C 4E0A 5C1A 88F3 68A2 634E 7A0D 70E7 828D 52FA 97F6 5C11 54E8 90B5 7ECD 5962 8D4A 86C7 820C 820D 8D66 6444 5C04 6151 6D89 793E 8BBE 7837 7533 547B 4F38 8EAB 6DF1 5A20 7EC5 795E 6C88 5BA1 5A76 751A 80BE 614E 6E17 58F0 751F 7525 7272 5347 7EF3 7701 76DB 5269 80DC 5723 5E08 5931 72EE 65BD 6E7F 8BD7 5C38 8671 5341 77F3 62FE 65F6 4EC0 98DF 8680 5B9E 8BC6 53F2 77E2 4F7F 5C4E 9A76 59CB 5F0F 793A 58EB 4E16 67FF 4E8B 62ED 8A93 901D 52BF 662F 55DC 566C 9002 4ED5 4F8D 91CA 9970 6C0F 5E02 6043 5BA4 89C6 8BD5 6536 624B 9996 5B88 5BFF 6388 552E 53D7 7626 517D 852C 67A2 68B3 6B8A 6292 8F93 53D4 8212 6DD1 758F 4E66 8D4E 5B70 719F 85AF 6691 66D9 7F72 8700 9ECD 9F20 5C5E 672F 8FF0 6811 675F 620D 7AD6 5885 5EB6 6570 6F31 6055 5237 800D 6454 8870 7529 5E05 6813 62F4 971C 53CC 723D 8C01 6C34 7761 7A0E 542E 77AC 987A 821C 8BF4 7855 6714 70C1 65AF 6495 5636 601D 79C1 53F8 4E1D 6B7B 8086 5BFA 55E3 56DB 4F3A 4F3C 9972 5DF3 677E 8038 6002 9882 9001 5B8B 8BBC 8BF5 641C 8258 64DE 55FD 82CF 9165 4FD7 7D20 901F 7C9F 50F3 5851 6EAF 5BBF 8BC9 8083 9178 849C 7B97 867D 968B 968F 7EE5 9AD3 788E 5C81 7A57 9042 96A7 795F 5B59 635F 7B0B 84D1 68AD 5506 7F29 7410 7D22 9501 6240 584C 4ED6 5B83 5979 5854 736D 631E 8E4B 8E0F 80CE 82D4 62AC 53F0 6CF0 915E 592A 6001 6C70 574D 644A 8D2A 762B 6EE9 575B 6A80 75F0 6F6D 8C2D 8C08 5766 6BEF 8892 78B3 63A2 53F9 70AD 6C64 5858 642A 5802 68E0 819B 5510 7CD6 5018 8EBA 6DCC 8D9F 70EB 638F 6D9B 6ED4 7EE6 8404 6843 9003 6DD8 9676 8BA8 5957 7279 85E4 817E 75BC 8A8A 68AF 5254 8E22 9511 63D0 9898 8E44 557C 4F53 66FF 568F 60D5 6D95 5243 5C49 5929 6DFB 586B 7530 751C 606C 8214 8146 6311 6761 8FE2 773A 8DF3 8D34 94C1 5E16 5385 542C 70C3 6C40 5EF7 505C 4EAD 5EAD 633A 8247 901A 6850 916E 77B3 540C 94DC 5F64 7AE5 6876 6345 7B52 7EDF 75DB 5077 6295 5934 900F 51F8 79C3 7A81 56FE 5F92 9014 6D82 5C60 571F 5410 5154 6E4D 56E2 63A8 9893 817F 8715 892A 9000 541E 5C6F 81C0 62D6 6258 8131 9E35 9640 9A6E 9A7C 692D 59A5 62D3 553E 6316 54C7 86D9 6D3C 5A03 74E6 889C 6B6A 5916 8C4C 5F2F 6E7E 73A9 987D 4E38 70F7 5B8C 7897 633D 665A 7696 60CB 5B9B 5A49 4E07 8155 6C6A 738B 4EA1 6789 7F51 5F80 65FA 671B 5FD8 5984 5A01 5DCD 5FAE 5371 97E6 8FDD 6845 56F4 552F 60DF 4E3A 6F4D 7EF4 82C7 840E 59D4 4F1F 4F2A 5C3E 7EAC 672A 851A 5473 754F 80C3 5582 9B4F 4F4D 6E2D 8C13 5C09 6170 536B 761F 6E29 868A 6587 95FB 7EB9 543B 7A33 7D0A 95EE 55E1 7FC1 74EE 631D 8717 6DA1 7A9D 6211 65A1 5367 63E1 6C83 5DEB 545C 94A8 4E4C 6C61 8BEC 5C4B 65E0 829C 68A7 543E 5434 6BCB 6B66 4E94 6342 5348 821E 4F0D 4FAE 575E 620A 96FE 6664 7269 52FF 52A1 609F 8BEF 6614 7199 6790 897F 7852 77FD 6670 563B 5438 9521 727A 7A00 606F 5E0C 6089 819D 5915 60DC 7184 70EF 6EAA 6C50 7280 6A84 88AD 5E2D 4E60 5AB3 559C 94E3 6D17 7CFB 9699 620F 7EC6 778E 867E 5323 971E 8F96 6687 5CE1 4FA0 72ED 4E0B 53A6 590F 5413 6380 9528 5148 4ED9 9C9C 7EA4 54B8 8D24 8854 8237 95F2 6D8E 5F26 5ACC 663E 9669 73B0 732E 53BF 817A 9985 7FA1 5BAA 9677 9650 7EBF 76F8 53A2 9576 9999 7BB1 8944 6E58 4E61 7FD4 7965 8BE6 60F3 54CD 4EAB 9879 5DF7 6A61 50CF 5411 8C61 8427 785D 9704 524A 54EE 56A3 9500 6D88 5BB5 6DC6 6653 5C0F 5B5D 6821 8096 5578 7B11 6548 6954 4E9B 6B47 874E 978B 534F 631F 643A 90AA 659C 80C1 8C10 5199 68B0 5378 87F9 61C8 6CC4 6CFB 8C22 5C51 85AA 82AF 950C 6B23 8F9B 65B0 5FFB 5FC3 4FE1 8845 661F 8165 7329 60FA 5174 5211 578B 5F62 90A2 884C 9192 5E78 674F 6027 59D3 5144 51F6 80F8 5308 6C79 96C4 718A 4F11 4FEE 7F9E 673D 55C5 9508 79C0 8896 7EE3 589F 620C 9700 865A 5618 987B 5F90 8BB8 84C4 9157 53D9 65ED 5E8F 755C 6064 7D6E 5A7F 7EEA 7EED 8F69 55A7 5BA3 60AC 65CB 7384 9009 7663 7729 7EDA 9774 859B 5B66 7A74 96EA 8840 52CB 718F 5FAA 65EC 8BE2 5BFB 9A6F 5DE1 6B89 6C5B 8BAD 8BAF 900A 8FC5 538B 62BC 9E26 9E2D 5440 4E2B 82BD 7259 869C 5D16 8859 6DAF 96C5 54D1 4E9A 8BB6 7109 54BD 9609 70DF 6DF9 76D0 4E25 7814 8712 5CA9 5EF6 8A00 989C 960E 708E 6CBF 5944 63A9 773C 884D 6F14 8273 5830 71D5 538C 781A 96C1 5501 5F66 7130 5BB4 8C1A 9A8C 6B83 592E 9E2F 79E7 6768 626C 4F6F 75A1 7F8A 6D0B 9633 6C27 4EF0 75D2 517B 6837 6F3E 9080 8170 5996 7476 6447 5C27 9065 7A91 8C23 59DA 54AC 8200 836F 8981 8000 6930 564E 8036 7237 91CE 51B6 4E5F 9875 6396 4E1A 53F6 66F3 814B 591C 6DB2 4E00 58F9 533B 63D6 94F1 4F9D 4F0A 8863 9890 5937 9057 79FB 4EEA 80F0 7591 6C82 5B9C 59E8 5F5D 6905 8681 501A 5DF2 4E59 77E3 4EE5 827A 6291 6613 9091 5C79 4EBF 5F79 81C6 9038 8084 75AB 4EA6 88D4 610F 6BC5 5FC6 4E49 76CA 6EA2 8BE3 8BAE 8C0A 8BD1 5F02 7FFC 7FCC 7ECE 8335 836B 56E0 6BB7 97F3 9634 59FB 541F 94F6 6DEB 5BC5 996E 5C39 5F15 9690 5370 82F1 6A31 5A74 9E70 5E94 7F28 83B9 8424 8425 8367 8747 8FCE 8D62 76C8 5F71 9896 786C 6620 54DF 62E5 4F63 81C3 75C8 5EB8 96CD 8E0A 86F9 548F 6CF3 6D8C 6C38 607F 52C7 7528 5E7D 4F18 60A0 5FE7 5C24 7531 90AE 94C0 72B9 6CB9 6E38 9149 6709 53CB 53F3 4F51 91C9 8BF1 53C8 5E7C 8FC2 6DE4 4E8E 76C2 6986 865E 611A 8206 4F59 4FDE 903E 9C7C 6109 6E1D 6E14 9685 4E88 5A31 96E8 4E0E 5C7F 79B9 5B87 8BED 7FBD 7389 57DF 828B 90C1 5401 9047 55BB 5CEA 5FA1 6108 6B32 72F1 80B2 8A89 6D74 5BD3 88D5 9884 8C6B 9A6D 9E33 6E0A 51A4 5143 57A3 8881 539F 63F4 8F95 56ED 5458 5706 733F 6E90 7F18 8FDC 82D1 613F 6028 9662 66F0 7EA6 8D8A 8DC3 94A5 5CB3 7CA4 6708 60A6 9605 8018 4E91 90E7 5300 9668 5141 8FD0 8574 915D 6655 97F5 5B55 531D 7838 6742 683D 54C9 707E 5BB0 8F7D 518D 5728 54B1 6512 6682 8D5E 8D43 810F 846C 906D 7CDF 51FF 85FB 67A3 65E9 6FA1 86A4 8E81 566A 9020 7682 7076 71E5 8D23 62E9 5219 6CFD 8D3C 600E 589E 618E 66FE 8D60 624E 55B3 6E23 672D 8F67 94E1 95F8 7728 6805 69A8 548B 4E4D 70B8 8BC8 6458 658B 5B85 7A84 503A 5BE8 77BB 6BE1 8A79 7C98 6CBE 76CF 65A9 8F97 5D2D 5C55 8638 6808 5360 6218 7AD9 6E5B 7EFD 6A1F 7AE0 5F70 6F33 5F20 638C 6DA8 6756 4E08 5E10 8D26 4ED7 80C0 7634 969C 62DB 662D 627E 6CBC 8D75 7167 7F69 5146 8087 53EC 906E 6298 54F2 86F0 8F99 8005 9517 8517 8FD9 6D59 73CD 659F 771F 7504 7827 81FB 8D1E 9488 4FA6 6795 75B9 8BCA 9707 632F 9547 9635 84B8 6323 7741 5F81 72F0 4E89 6014 6574 62EF 6B63 653F 5E27 75C7 90D1 8BC1 829D 679D 652F 5431 8718 77E5 80A2 8102 6C41 4E4B 7EC7 804C 76F4 690D 6B96 6267 503C 4F84 5740 6307 6B62 8DBE 53EA 65E8 7EB8 5FD7 631A 63B7 81F3 81F4 7F6E 5E1C 5CD9 5236 667A 79E9 7A1A 8D28 7099 75D4 6EDE 6CBB 7A92 4E2D 76C5 5FE0 949F 8877 7EC8 79CD 80BF 91CD 4EF2 4F17 821F 5468 5DDE 6D32 8BCC 7CA5 8F74 8098 5E1A 5492 76B1 5B99 663C 9AA4 73E0 682A 86DB 6731 732A 8BF8 8BDB 9010 7AF9 70DB 716E 62C4 77A9 5631 4E3B 8457 67F1 52A9 86C0 8D2E 94F8 7B51 4F4F 6CE8 795D 9A7B 6293 722A 62FD 4E13 7816 8F6C 64B0 8D5A 7BC6 6869 5E84 88C5 5986 649E 58EE 72B6 690E 9525 8FFD 8D58 5760 7F00 8C06 51C6 6349 62D9 5353 684C 7422 8301 914C 5544 7740 707C 6D4A 5179 54A8 8D44 59FF 6ECB 6DC4 5B5C 7D2B 4ED4 7C7D 6ED3 5B50 81EA 6E0D 5B57 9B03 68D5 8E2A 5B97 7EFC 603B 7EB5 90B9 8D70 594F 63CD 79DF 8DB3 5352 65CF 7956 8BC5 963B 7EC4 94BB 7E82 5634 9189 6700 7F6A 5C0A 9075 6628 5DE6 4F50 67DE 505A 4F5C 5750 5EA7 E2D8 E2D9 E2DA E2DB E2DC 4E8D 4E0C 5140 4E10 5EFF 5345 4E15 4E98 4E1E 9B32 5B6C 5669 4E28 79BA 4E3F 5315 4E47 592D 723B 536E 6C10 56DF 80E4 9997 6BD3 777E 9F17 4E36 4E9F 9F10 4E5C 4E69 4E93 8288 5B5B 556C 560F 4EC4 538D 539D 53A3 53A5 53AE 9765 8D5D 531A 53F5 5326 532E 533E 8D5C 5366 5363 5202 5208 520E 522D 5233 523F 5240 524C 525E 5261 525C 84AF 527D 5282 5281 5290 5293 5182 7F54 4EBB 4EC3 4EC9 4EC2 4EE8 4EE1 4EEB 4EDE 4F1B 4EF3 4F22 4F64 4EF5 4F25 4F27 4F09 4F2B 4F5E 4F67 6538 4F5A 4F5D 4F5F 4F57 4F32 4F3D 4F76 4F74 4F91 4F89 4F83 4F8F 4F7E 4F7B 4FAA 4F7C 4FAC 4F94 4FE6 4FE8 4FEA 4FC5 4FDA 4FE3 4FDC 4FD1 4FDF 4FF8 5029 504C 4FF3 502C 500F 502E 502D 4FFE 501C 500C 5025 5028 507E 5043 5055 5048 504E 506C 507B 50A5 50A7 50A9 50BA 50D6 5106 50ED 50EC 50E6 50EE 5107 510B 4EDD 6C3D 4F58 4F65 4FCE 9FA0 6C46 7C74 516E 5DFD 9EC9 9998 5181 5914 52F9 530D 8A07 5310 51EB 5919 5155 4EA0 5156 4EB3 886E 88A4 4EB5 8114 88D2 7980 5B34 8803 7FB8 51AB 51B1 51BD 51BC 51C7 5196 51A2 51A5 8BA0 8BA6 8BA7 8BAA 8BB4 8BB5 8BB7 8BC2 8BC3 8BCB 8BCF 8BCE 8BD2 8BD3 8BD4 8BD6 8BD8 8BD9 8BDC 8BDF 8BE0 8BE4 8BE8 8BE9 8BEE 8BF0 8BF3 8BF6 8BF9 8BFC 8BFF 8C00 8C02 8C04 8C07 8C0C 8C0F 8C11 8C12 8C14 8C15 8C16 8C19 8C1B 8C18 8C1D 8C1F 8C20 8C21 8C25 8C27 8C2A 8C2B 8C2E 8C2F 8C32 8C33 8C35 8C36 5369 537A 961D 9622 9621 9631 962A 963D 963C 9642 9649 9654 965F 9667 966C 9672 9674 9688 968D 9697 96B0 9097 909B 909D 9099 90AC 90A1 90B4 90B3 90B6 90BA 90B8 90B0 90CF 90C5 90BE 90D0 90C4 90C7 90D3 90E6 90E2 90DC 90D7 90DB 90EB 90EF 90FE 9104 9122 911E 9123 9131 912F 9139 9143 9146 520D 5942 52A2 52AC 52AD 52BE 54FF 52D0 52D6 52F0 53DF 71EE 77CD 5EF4 51F5 51FC 9B2F 53B6 5F01 755A 5DEF 574C 57A9 57A1 587E 58BC 58C5 58D1 5729 572C 572A 5733 5739 572E 572F 575C 573B 5742 5769 5785 576B 5786 577C 577B 5768 576D 5776 5773 57AD 57A4 578C 57B2 57CF 57A7 57B4 5793 57A0 57D5 57D8 57DA 57D9 57D2 57B8 57F4 57EF 57F8 57E4 57DD 580B 580D 57FD 57ED 5800 581E 5819 5844 5820 5865 586C 5881 5889 589A 5880 99A8 9F19 61FF 8279 827D 827F 828F 828A 82A8 8284 828E 8291 8297 8299 82AB 82B8 82BE 82B0 82C8 82CA 82E3 8298 82B7 82AE 82CB 82CC 82C1 82A9 82B4 82A1 82AA 829F 82C4 82CE 82A4 82E1 8309 82F7 82E4 830F 8307 82DC 82F4 82D2 82D8 830C 82FB 82D3 8311 831A 8306 8314 8315 82E0 82D5 831C 8351 835B 835C 8308 8392 833C 8334 8331 839B 835E 832F 834F 8347 8343 835F 8340 8317 8360 832D 833A 8333 8366 8365 8368 831B 8369 836C 836A 836D 836E 83B0 8378 83B3 83B4 83A0 83AA 8393 839C 8385 837C 83B6 83A9 837D 83B8 837B 8398 839E 83A8 83BA 83BC 83C1 8401 83E5 83D8 5807 8418 840B 83DD 83FD 83D6 841C 8438 8411 8406 83D4 83DF 840F 8403 83F8 83F9 83EA 83C5 83C0 8426 83F0 83E1 845C 8451 845A 8459 8473 8487 8488 847A 8489 8478 843C 8446 8469 8476 848C 848E 8431 846D 84C1 84CD 84D0 84E6 84BD 84D3 84CA 84BF 84BA 84E0 84A1 84B9 84B4 8497 84E5 84E3 850C 750D 8538 84F0 8539 851F 853A 8556 853B 84FF 84FC 8559 8548 8568 8564 855E 857A 77A2 8543 8572 857B 85A4 85A8 8587 858F 8579 85AE 859C 8585 85B9 85B7 85B0 85D3 85C1 85DC 85FF 8627 8605 8629 8616 863C 5EFE 5F08 593C 5941 8037 5955 595A 5958 530F 5C22 5C25 5C2C 5C34 624C 626A 629F 62BB 62CA 62DA 62D7 62EE 6322 62F6 6339 634B 6343 63AD 63F6 6371 637A 638E 63B4 636D 63AC 638A 6369 63AE 63BC 63F2 63F8 63E0 63FF 63C4 63DE 63CE 6452 63C6 63BE 6445 6441 640B 641B 6420 640C 6426 6421 645E 6484 646D 6496 647A 64B7 64B8 6499 64BA 64C0 64D0 64D7 64E4 64E2 6509 6525 652E 5F0B 5FD2 7519 5F11 535F 53F1 53FD 53E9 53E8 53FB 5412 5416 5406 544B 5452 5453 5454 5456 5443 5421 5457 5459 5423 5432 5482 5494 5477 5471 5464 549A 549B 5484 5476 5466 549D 54D0 54AD 54C2 54B4 54D2 54A7 54A6 54D3 54D4 5472 54A3 54D5 54BB 54BF 54CC 54D9 54DA 54DC 54A9 54AA 54A4 54DD 54CF 54DE 551B 54E7 5520 54FD 5514 54F3 5522 5523 550F 5511 5527 552A 5567 558F 55B5 5549 556D 5541 5555 553F 5550 553C 5537 5556 5575 5576 5577 5533 5530 555C 558B 55D2 5583 55B1 55B9 5588 5581 559F 557E 55D6 5591 557B 55DF 55BD 55BE 5594 5599 55EA 55F7 55C9 561F 55D1 55EB 55EC 55D4 55E6 55DD 55C4 55EF 55E5 55F2 55F3 55CC 55CD 55E8 55F5 55E4 8F94 561E 5608 560C 5601 5624 5623 55FE 5600 5627 562D 5658 5639 5657 562C 564D 5662 5659 565C 564C 5654 5686 5664 5671 566B 567B 567C 5685 5693 56AF 56D4 56D7 56DD 56E1 56F5 56EB 56F9 56FF 5704 570A 5709 571C 5E0F 5E19 5E14 5E11 5E31 5E3B 5E3C 5E37 5E44 5E54 5E5B 5E5E 5E61 5C8C 5C7A 5C8D 5C90 5C96 5C88 5C98 5C99 5C91 5C9A 5C9C 5CB5 5CA2 5CBD 5CAC 5CAB 5CB1 5CA3 5CC1 5CB7 5CC4 5CD2 5CE4 5CCB 5CE5 5D02 5D03 5D27 5D26 5D2E 5D24 5D1E 5D06 5D1B 5D58 5D3E 5D34 5D3D 5D6C 5D5B 5D6F 5D5D 5D6B 5D4B 5D4A 5D69 5D74 5D82 5D99 5D9D 8C73 5DB7 5DC5 5F73 5F77 5F82 5F87 5F89 5F8C 5F95 5F99 5F9C 5FA8 5FAD 5FB5 5FBC 8862 5F61 72AD 72B0 72B4 72B7 72B8 72C3 72C1 72CE 72CD 72D2 72E8 72EF 72E9 72F2 72F4 72F7 7301 72F3 7303 72FA 72FB 7317 7313 7321 730A 731E 731D 7315 7322 7339 7325 732C 7338 7331 7350 734D 7357 7360 736C 736F 737E 821B 5925 98E7 5924 5902 9963 9967 9968 9969 996A 996B 996C 9974 9977 997D 9980 9984 9987 998A 998D 9990 9991 9993 9994 9995 5E80 5E91 5E8B 5E96 5EA5 5EA0 5EB9 5EB5 5EBE 5EB3 8D53 5ED2 5ED1 5EDB 5EE8 5EEA 81BA 5FC4 5FC9 5FD6 5FCF 6003 5FEE 6004 5FE1 5FE4 5FFE 6005 6006 5FEA 5FED 5FF8 6019 6035 6026 601B 600F 600D 6029 602B 600A 603F 6021 6078 6079 607B 607A 6042 606A 607D 6096 609A 60AD 609D 6083 6092 608C 609B 60EC 60BB 60B1 60DD 60D8 60C6 60DA 60B4 6120 6126 6115 6123 60F4 6100 610E 612B 614A 6175 61AC 6194 61A7 61B7 61D4 61F5 5FDD 96B3 95E9 95EB 95F1 95F3 95F5 95F6 95FC 95FE 9603 9604 9606 9608 960A 960B 960C 960D 960F 9612 9615 9616 9617 9619 961A 4E2C 723F 6215 6C35 6C54 6C5C 6C4A 6CA3 6C85 6C90 6C94 6C8C 6C68 6C69 6C74 6C76 6C86 6CA9 6CD0 6CD4 6CAD 6CF7 6CF8 6CF1 6CD7 6CB2 6CE0 6CD6 6CFA 6CEB 6CEE 6CB1 6CD3 6CEF 6CFE 6D39 6D27 6D0C 6D43 6D48 6D07 6D04 6D19 6D0E 6D2B 6D4D 6D2E 6D35 6D1A 6D4F 6D52 6D54 6D33 6D91 6D6F 6D9E 6DA0 6D5E 6D93 6D94 6D5C 6D60 6D7C 6D63 6E1A 6DC7 6DC5 6DDE 6E0E 6DBF 6DE0 6E11 6DE6 6DDD 6DD9 6E16 6DAB 6E0C 6DAE 6E2B 6E6E 6E4E 6E6B 6EB2 6E5F 6E86 6E53 6E54 6E32 6E25 6E44 6EDF 6EB1 6E98 6EE0 6F2D 6EE2 6EA5 6EA7 6EBD 6EBB 6EB7 6ED7 6EB4 6ECF 6E8F 6EC2 6E9F 6F62 6F46 6F47 6F24 6F15 6EF9 6F2F 6F36 6F4B 6F74 6F2A 6F09 6F29 6F89 6F8D 6F8C 6F78 6F72 6F7C 6F7A 6FD1 6FC9 6FA7 6FB9 6FB6 6FC2 6FE1 6FEE 6FDE 6FE0 6FEF 701A 7023 701B 7039 7035 704F 705E 5B80 5B84 5B95 5B93 5BA5 5BB8 752F 9A9E 6434 5BE4 5BEE 8930 5BF0 8E47 8B07 8FB6 8FD3 8FD5 8FE5 8FEE 8FE4 8FE9 8FE6 8FF3 8FE8 9005 9004 900B 9026 9011 900D 9016 9021 9035 9036 902D 902F 9044 9051 9052 9050 9068 9058 9062 905B 66B9 9074 907D 9082 9088 9083 908B 5F50 5F57 5F56 5F58 5C3B 54AB 5C50 5C59 5B71 5C63 5C66 7FBC 5F2A 5F29 5F2D 8274 5F3C 9B3B 5C6E 5981 5983 598D 59A9 59AA 59A3 5997 59CA 59AB 599E 59A4 59D2 59B2 59AF 59D7 59BE 5A05 5A06 59DD 5A08 59E3 59D8 59F9 5A0C 5A09 5A32 5A34 5A11 5A23 5A13 5A40 5A67 5A4A 5A55 5A3C 5A62 5A75 80EC 5AAA 5A9B 5A77 5A7A 5ABE 5AEB 5AB2 5AD2 5AD4 5AB8 5AE0 5AE3 5AF1 5AD6 5AE6 5AD8 5ADC 5B09 5B17 5B16 5B32 5B37 5B40 5C15 5C1C 5B5A 5B65 5B73 5B51 5B53 5B62 9A75 9A77 9A78 9A7A 9A7F 9A7D 9A80 9A81 9A85 9A88 9A8A 9A90 9A92 9A93 9A96 9A98 9A9B 9A9C 9A9D 9A9F 9AA0 9AA2 9AA3 9AA5 9AA7 7E9F 7EA1 7EA3 7EA5 7EA8 7EA9 7EAD 7EB0 7EBE 7EC0 7EC1 7EC2 7EC9 7ECB 7ECC 7ED0 7ED4 7ED7 7EDB 7EE0 7EE1 7EE8 7EEB 7EEE 7EEF 7EF1 7EF2 7F0D 7EF6 7EFA 7EFB 7EFE 7F01 7F02 7F03 7F07 7F08 7F0B 7F0C 7F0F 7F11 7F12 7F17 7F19 7F1C 7F1B 7F1F 7F21 7F22 7F23 7F24 7F25 7F26 7F27 7F2A 7F2B 7F2C 7F2D 7F2F 7F30 7F31 7F32 7F33 7F35 5E7A 757F 5DDB 753E 9095 738E 7391 73AE 73A2 739F 73CF 73C2 73D1 73B7 73B3 73C0 73C9 73C8 73E5 73D9 987C 740A 73E9 73E7 73DE 73BA 73F2 740F 742A 745B 7426 7425 7428 7430 742E 742C 741B 741A 7441 745C 7457 7455 7459 7477 746D 747E 749C 748E 7480 7481 7487 748B 749E 74A8 74A9 7490 74A7 74D2 74BA 97EA 97EB 97EC 674C 6753 675E 6748 6769 67A5 6787 676A 6773 6798 67A7 6775 67A8 679E 67AD 678B 6777 677C 67F0 6809 67D8 680A 67E9 67B0 680C 67D9 67B5 67DA 67B3 67DD 6800 67C3 67B8 67E2 680E 67C1 67FD 6832 6833 6860 6861 684E 6862 6844 6864 6883 681D 6855 6866 6841 6867 6840 683E 684A 6849 6829 68B5 688F 6874 6877 6893 686B 68C2 696E 68FC 691F 6920 68F9 6924 68F0 690B 6901 6957 68E3 6910 6971 6939 6960 6942 695D 6984 696B 6980 6998 6978 6934 69CC 6987 6988 69CE 6989 6966 6963 6979 699B 69A7 69BB 69AB 69AD 69D4 69B1 69C1 69CA 69DF 6995 69E0 698D 69FF 6A2F 69ED 6A17 6A18 6A65 69F2 6A44 6A3E 6AA0 6A50 6A5B 6A35 6A8E 6A79 6A3D 6A28 6A58 6A7C 6A91 6A90 6AA9 6A97 6AAB 7337 7352 6B81 6B82 6B87 6B84 6B92 6B93 6B8D 6B9A 6B9B 6BA1 6BAA 8F6B 8F6D 8F71 8F72 8F73 8F75 8F76 8F78 8F77 8F79 8F7A 8F7C 8F7E 8F81 8F82 8F84 8F87 8F8B 8F8D 8F8E 8F8F 8F98 8F9A 8ECE 620B 6217 621B 621F 6222 6221 6225 6224 622C 81E7 74EF 74F4 74FF 750F 7511 7513 6534 65EE 65EF 65F0 660A 6619 6772 6603 6615 6600 7085 66F7 661D 6634 6631 6636 6635 8006 665F 6654 6641 664F 6656 6661 6657 6677 6684 668C 66A7 669D 66BE 66DB 66DC 66E6 66E9 8D32 8D33 8D36 8D3B 8D3D 8D40 8D45 8D46 8D48 8D49 8D47 8D4D 8D55 8D59 89C7 89CA 89CB 89CC 89CE 89CF 89D0 89D1 726E 729F 725D 7266 726F 727E 727F 7284 728B 728D 728F 7292 6308 6332 63B0 643F 64D8 8004 6BEA 6BF3 6BFD 6BF5 6BF9 6C05 6C07 6C06 6C0D 6C15 6C18 6C19 6C1A 6C21 6C29 6C24 6C2A 6C32 6535 6555 656B 724D 7252 7256 7230 8662 5216 809F 809C 8093 80BC 670A 80BD 80B1 80AB 80AD 80B4 80B7 80E7 80E8 80E9 80EA 80DB 80C2 80C4 80D9 80CD 80D7 6710 80DD 80EB 80F1 80F4 80ED 810D 810E 80F2 80FC 6715 8112 8C5A 8136 811E 812C 8118 8132 8148 814C 8153 8174 8159 815A 8171 8160 8169 817C 817D 816D 8167 584D 5AB5 8188 8182 8191 6ED5 81A3 81AA 81CC 6726 81CA 81BB 81C1 81A6 6B24 6B37 6B39 6B43 6B46 6B59 98D1 98D2 98D3 98D5 98D9 98DA 6BB3 5F40 6BC2 89F3 6590 9F51 6593 65BC 65C6 65C4 65C3 65CC 65CE 65D2 65D6 7080 709C 7096 709D 70BB 70C0 70B7 70AB 70B1 70E8 70CA 7110 7113 7116 712F 7131 7173 715C 7168 7145 7172 714A 7178 717A 7198 71B3 71B5 71A8 71A0 71E0 71D4 71E7 71F9 721D 7228 706C 7118 7166 71B9 623E 623D 6243 6248 6249 793B 7940 7946 7949 795B 795C 7953 795A 7962 7957 7960 796F 7967 797A 7985 798A 799A 79A7 79B3 5FD1 5FD0 603C 605D 605A 6067 6041 6059 6063 60AB 6106 610D 615D 61A9 619D 61CB 61D1 6206 8080 807F 6C93 6CF6 6DFC 77F6 77F8 7800 7809 7817 7818 7811 65AB 782D 781C 781D 7839 783A 783B 781F 783C 7825 782C 7823 7829 784E 786D 7856 7857 7826 7850 7847 784C 786A 789B 7893 789A 7887 789C 78A1 78A3 78B2 78B9 78A5 78D4 78D9 78C9 78EC 78F2 7905 78F4 7913 7924 791E 7934 9F9B 9EF9 9EFB 9EFC 76F1 7704 770D 76F9 7707 7708 771A 7722 7719 772D 7726 7735 7738 7750 7751 7747 7743 775A 7768 7762 7765 777F 778D 777D 7780 778C 7791 779F 77A0 77B0 77B5 77BD 753A 7540 754E 754B 7548 755B 7572 7579 7583 7F58 7F61 7F5F 8A48 7F68 7F74 7F71 7F79 7F81 7F7E 76CD 76E5 8832 9485 9486 9487 948B 948A 948C 948D 948F 9490 9494 9497 9495 949A 949B 949C 94A3 94A4 94AB 94AA 94AD 94AC 94AF 94B0 94B2 94B4 94B6 94B7 94B8 94B9 94BA 94BC 94BD 94BF 94C4 94C8 94C9 94CA 94CB 94CC 94CD 94CE 94D0 94D1 94D2 94D5 94D6 94D7 94D9 94D8 94DB 94DE 94DF 94E0 94E2 94E4 94E5 94E7 94E8 94EA 94E9 94EB 94EE 94EF 94F3 94F4 94F5 94F7 94F9 94FC 94FD 94FF 9503 9502 9506 9507 9509 950A 950D 950E 950F 9512 9513 9514 9515 9516 9518 951B 951D 951E 951F 9522 952A 952B 9529 952C 9531 9532 9534 9536 9537 9538 953C 953E 953F 9542 9535 9544 9545 9546 9549 954C 954E 954F 9552 9553 9554 9556 9557 9558 9559 955B 955E 955F 955D 9561 9562 9564 9565 9566 9567 9568 9569 956A 956B 956C 956F 9571 9572 9573 953A 77E7 77EC 96C9 79D5 79ED 79E3 79EB 7A06 5D47 7A03 7A02 7A1E 7A14 7A39 7A37 7A51 9ECF 99A5 7A70 7688 768E 7693 7699 76A4 74DE 74E0 752C 9E20 9E22 9E28 9E29 9E2A 9E2B 9E2C 9E32 9E31 9E36 9E38 9E37 9E39 9E3A 9E3E 9E41 9E42 9E44 9E46 9E47 9E48 9E49 9E4B 9E4C 9E4E 9E51 9E55 9E57 9E5A 9E5B 9E5C 9E5E 9E63 9E66 9E67 9E68 9E69 9E6A 9E6B 9E6C 9E71 9E6D 9E73 7592 7594 7596 75A0 759D 75AC 75A3 75B3 75B4 75B8 75C4 75B1 75B0 75C3 75C2 75D6 75CD 75E3 75E8 75E6 75E4 75EB 75E7 7603 75F1 75FC 75FF 7610 7600 7605 760C 7617 760A 7625 7618 7615 7619 761B 763C 7622 7620 7640 762D 7630 763F 7635 7643 763E 7633 764D 765E 7654 765C 7656 766B 766F 7FCA 7AE6 7A78 7A79 7A80 7A86 7A88 7A95 7AA6 7AA0 7AAC 7AA8 7AAD 7AB3 8864 8869 8872 887D 887F 8882 88A2 88C6 88B7 88BC 88C9 88E2 88CE 88E3 88E5 88F1 891A 88FC 88E8 88FE 88F0 8921 8919 8913 891B 890A 8934 892B 8936 8941 8966 897B 758B 80E5 76B2 76B4 77DC 8012 8014 8016 801C 8020 8022 8025 8026 8027 8029 8028 8031 800B 8035 8043 8046 804D 8052 8069 8071 8983 9878 9880 9883 9889 988C 988D 988F 9894 989A 989B 989E 989F 98A1 98A2 98A5 98A6 864D 8654 866C 866E 867F 867A 867C 867B 86A8 868D 868B 86AC 869D 86A7 86A3 86AA 8693 86A9 86B6 86C4 86B5 86CE 86B0 86BA 86B1 86AF 86C9 86CF 86B4 86E9 86F1 86F2 86ED 86F3 86D0 8713 86DE 86F4 86DF 86D8 86D1 8703 8707 86F8 8708 870A 870D 8709 8723 873B 871E 8725 872E 871A 873E 8748 8734 8731 8729 8737 873F 8782 8722 877D 877E 877B 8760 8770 874C 876E 878B 8753 8763 877C 8764 8759 8765 8793 87AF 87A8 87D2 87C6 8788 8785 87AD 8797 8783 87AB 87E5 87AC 87B5 87B3 87CB 87D3 87BD 87D1 87C0 87CA 87DB 87EA 87E0 87EE 8816 8813 87FE 880A 881B 8821 8839 883C 7F36 7F42 7F44 7F45 8210 7AFA 7AFD 7B08 7B03 7B04 7B15 7B0A 7B2B 7B0F 7B47 7B38 7B2A 7B19 7B2E 7B31 7B20 7B25 7B24 7B33 7B3E 7B1E 7B58 7B5A 7B45 7B75 7B4C 7B5D 7B60 7B6E 7B7B 7B62 7B72 7B71 7B90 7BA6 7BA7 7BB8 7BAC 7B9D 7BA8 7B85 7BAA 7B9C 7BA2 7BAB 7BB4 7BD1 7BC1 7BCC 7BDD 7BDA 7BE5 7BE6 7BEA 7C0C 7BFE 7BFC 7C0F 7C16 7C0B 7C1F 7C2A 7C26 7C38 7C41 7C40 81FE 8201 8202 8204 81EC 8844 8221 8222 8223 822D 822F 8228 822B 8238 823B 8233 8234 823E 8244 8249 824B 824F 825A 825F 8268 887E 8885 8888 88D8 88DF 895E 7F9D 7F9F 7FA7 7FAF 7FB0 7FB2 7C7C 6549 7C91 7C9D 7C9C 7C9E 7CA2 7CB2 7CBC 7CBD 7CC1 7CC7 7CCC 7CCD 7CC8 7CC5 7CD7 7CE8 826E 66A8 7FBF 7FCE 7FD5 7FE5 7FE1 7FE6 7FE9 7FEE 7FF3 7CF8 7D77 7DA6 7DAE 7E47 7E9B 9EB8 9EB4 8D73 8D84 8D94 8D91 8DB1 8D67 8D6D 8C47 8C49 914A 9150 914E 914F 9164 9162 9161 9170 9169 916F 917D 917E 9172 9174 9179 918C 9185 9190 918D 9191 91A2 91A3 91AA 91AD 91AE 91AF 91B5 91B4 91BA 8C55 9E7E 8DB8 8DEB 8E05 8E59 8E69 8DB5 8DBF 8DBC 8DBA 8DC4 8DD6 8DD7 8DDA 8DDE 8DCE 8DCF 8DDB 8DC6 8DEC 8DF7 8DF8 8DE3 8DF9 8DFB 8DE4 8E09 8DFD 8E14 8E1D 8E1F 8E2C 8E2E 8E23 8E2F 8E3A 8E40 8E39 8E35 8E3D 8E31 8E49 8E41 8E42 8E51 8E52 8E4A 8E70 8E76 8E7C 8E6F 8E74 8E85 8E8F 8E94 8E90 8E9C 8E9E 8C78 8C82 8C8A 8C85 8C98 8C94 659B 89D6 89DE 89DA 89DC 89E5 89EB 89EF 8A3E 8B26 9753 96E9 96F3 96EF 9706 9701 9708 970F 970E 972A 972D 9730 973E 9F80 9F83 9F85 9F86 9F87 9F88 9F89 9F8A 9F8C 9EFE 9F0B 9F0D 96B9 96BC 96BD 96CE 96D2 77BF 96E0 928E 92AE 92C8 933E 936A 93CA 938F 943E 946B 9C7F 9C82 9C85 9C86 9C87 9C88 7A23 9C8B 9C8E 9C90 9C91 9C92 9C94 9C95 9C9A 9C9B 9C9E 9C9F 9CA0 9CA1 9CA2 9CA3 9CA5 9CA6 9CA7 9CA8 9CA9 9CAB 9CAD 9CAE 9CB0 9CB1 9CB2 9CB3 9CB4 9CB5 9CB6 9CB7 9CBA 9CBB 9CBC 9CBD 9CC4 9CC5 9CC6 9CC7 9CCA 9CCB 9CCC 9CCD 9CCE 9CCF 9CD0 9CD3 9CD4 9CD5 9CD7 9CD8 9CD9 9CDC 9CDD 9CDF 9CE2 977C 9785 9791 9792 9794 97AF 97AB 97A3 97B2 97B4 9AB1 9AB0 9AB7 9E58 9AB6 9ABA 9ABC 9AC1 9AC0 9AC5 9AC2 9ACB 9ACC 9AD1 9B45 9B43 9B47 9B49 9B48 9B4D 9B51 98E8 990D 992E 9955 9954 9ADF 9AE1 9AE6 9AEF 9AEB 9AFB 9AED 9AF9 9B08 9B0F 9B13 9B1F 9B23 9EBD 9EBE 7E3B 9E82 9E87 9E88 9E8B 9E92 93D6 9E9D 9E9F 9EDB 9EDC 9EDD 9EE0 9EDF 9EE2 9EE9 9EE7 9EE5 9EEA 9EEF 9F22 9F2C 9F2F 9F39 9F37 9F3D 9F3E 9F44 __END__ =head1 NAME Unicode::Collate::CJK::GB2312 - weighting CJK Unified Ideographs for Unicode::Collate =head1 SYNOPSIS use Unicode::Collate; use Unicode::Collate::CJK::GB2312; my $collator = Unicode::Collate->new( overrideCJK => \&Unicode::Collate::CJK::GB2312::weightGB2312 ); =head1 DESCRIPTION C<Unicode::Collate::CJK::GB2312> provides C<weightGB2312()>, that is adequate for C<overrideCJK> of C<Unicode::Collate> and makes tailoring of CJK Unified Ideographs in the order of CLDR's gb2312han ordering. =head1 CAVEAT The gb2312han ordering includes 5 code points in private use area (E2D8..E2DC), that can't utilize C<weightGB2312()> for collation. For them, use C<entry> instead. =head1 SEE ALSO =over 4 =item CLDR - Unicode Common Locale Data Repository L<http://cldr.unicode.org/> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =item L<Unicode::Collate> =item L<Unicode::Collate::Locale> =back =cut Unicode/Collate/CJK/Stroke.pm 0000644 00000355425 15037233317 0011753 0 ustar 00 package Unicode::Collate::CJK::Stroke; use 5.006; use strict; use warnings; our $VERSION = '1.25'; my %u2p; my $wt = 0x8000; while (<DATA>) { last if /^__END__/; my @c = split; for my $c (@c) { next if !$c; $u2p{hex($c)} = $wt if $c !~ /-/; $wt++; } } sub weightStroke { my $u = shift; return exists $u2p{$u} ? $u2p{$u} : undef; } 1; __DATA__ FDD0-2801 4E00 4E28 4E36 4E3F 4E40 4E41 2E84 4E59 4E5A 4E5B 200CA 200CB 200CC 200CD 200D1 4E85 2010C 3006 3007 3021 3025 303B FDD0-2802 4E01 4E02 4E03 4E04 4E05 4E06 4E29 4E37 4E42 4E43 4E44 20086 20087 2008A 4E5C 4E5D 4E86 2010E 4E8C 4EA0 4EBA 4EBB 513F 5165 516B 2E86 5182 5196 51AB 2E87 51E0 51F5 2E88 5200 5201 5202 529B 52F9 5315 531A 5338 5341 2E8A 535C 5369 5382 53B6 2E80 53C8 5DDC 8BA0 2ECF 2ED6 28E0F 3022 3024 3026 FDD0-2803 4E07 4E08 4E09 4E0A 4E0B 4E0C 4E90 5344 3404 4E2A 4E2B 4E38 4E49 4E45 4E46 4E47 4E48 4E4A 4E5E 4E5F 4E60 4E87 4E8D 4E8E 4E8F 4EA1 4EBC 4EBD 4EBE 4EBF 5140 5166 51E1 51E2 51E3 5203 5204 529C 52FA 5342 5343 353E 536A 536B 53C9 53E3 56D7 571F 58EB 5902 590A 5915 5927 5928 5973 5B50 5B51 5B52 5B53 5B80 5BF8 2E8C 2E8D 5C0F 5C22 21BC1 21BC2 5C38 5C6E 5C71 5DDB 5DDD 21FE8 5DE5 5DF1 5DF2 5DF3 5DFE 5E72 4E61 5E7A 5E7F 5EF4 5EFE 5F0B 5F13 2E95 5F50 5F51 5F61 5F73 5FC4 624C 624D 6C35 72AD 7E9F 2EBE 8279 2ECC 95E8 961D 98DE 9963 9A6C 3005 3023 3027 FDD0-2804 4E0D 4E0E 4E0F 4E10 4E11 4E12 4E13 4E2D 4E2E 4E2F 4E30 4E39 4E3A 4E4B 4E4C 5C39 4E63 4E64 4E65 4E66 4E88 4E91 4E92 4E93 4E94 4E95 4E96 4EA2 4EA3 4EC0 4EC1 4EC2 4EC3 4EC4 4EC5 4EC6 4EC7 4EC8 4EC9 4ECA 4ECB 4ECC 4ECD 4ECE 4ECF 4ED0 4ED1 4ED2 4ED3 5141 5142 5143 5167 516C 516D 516E 516F 5183 5184 5185 5186 5187 5188 34C1 5197 5198 51E4 20630 51F6 20676 5205 5206 5207 5208 529D 529E 52FB 52FC 52FD 52FE 52FF 5300 5301 5302 352B 5316 5339 533A 3539 5345 5346 5347 5348 535D 535E 536C 5383 5384 5385 5386 53B7 53B8 53B9 53CA 53CB 53CC 53CD 53CE 5720 5721 2123C 58EC 5903 5929 592A 592B 592C 592D 5B54 5C10 5C11 5C23 5C24 5C3A 5C6F 4E62 5C72 5DF4 5DFF 5E00 5E01 5E7B 5EFF 5F00 5F0C 5F14 5F15 5F16 5FC3 5FC6 6208 6236 6237 6238 624B 624E 22A66 652F 6534 6535 6587 6597 65A4 65B9 65E0 65E1 2E9C 65E5 66F0 2E9D 6708 6728 6729 233B4 6B20 6B62 6B79 6BB3 6BCB 6BCC 6BD4 6BDB 6C0F 6C14 6C34 706B 706C 2EA5 722A 722B 7236 723B 4E2C 723F 7247 3E26 7259 2EA7 725B 725C 72AC 738B 248E9 793B 25605 7F53 8002 8080 2EBC 89C1 8BA1 8BA2 8BA3 8BA4 8BA5 8D1D 8F66 2ECD 8FB6 95E9 97E6 98CE 3028 3029 FDD0-2805 4E17 3400 4E14 4E15 4E16 4E18 4E19 4E1A 4E1B 4E1C 4E1D 4E31 4E3B 4E3C 4E4D 4E4E 4E4F 4E50 20094 4E67 4E97 3430 3431 3432 3433 3434 3435 3436 3437 4ED4 4ED5 4ED6 4ED7 4ED8 4ED9 4EDA 4EDB 4EDC 4EDD 4EDE 4EDF 4EE0 4EE1 4EE2 4EE3 4EE4 4EE5 4EE6 4EE7 4EE8 4EE9 4EEA 4EEB 4EEC 4EED 201A9 201AB 5144 5145 34B0 5170 5189 518A 518B 518C 20547 5199 519A 51AC 51AD 51AE 51AF 51E5 51E6 51E7 51F7 51F8 51F9 51FA 51FB 5209 520A 520B 520C 520D 529F 52A0 52A1 52A2 5303 5304 5305 5306 5307 5317 531B 531C 531D 531E 5349 534A 534C 535F 5360 5361 5362 536D 536E 536F 20A11 5387 5388 5389 53BA 53BB 53BC 53CF 53D0 53D1 53E4 53E5 53E6 53E7 53E8 53E9 53EA 53EB 53EC 53ED 53EE 53EF 53F0 53F1 53F2 53F3 53F4 53F5 53F6 53F7 53F8 53F9 53FA 53FB 53FC 53FD 53FE 20BA8 20BA9 56D8 56D9 56DA 56DB 56DC 3626 5722 5723 5724 5725 5726 5727 58ED 5904 5916 5917 5918 592E 592F 5930 5931 5932 5933 5934 5974 5975 5976 5B55 5B81 5B82 5B83 5B84 5BF9 5C12 5C13 5C14 5C15 5C3B 5C3C 5C73 5C74 5C75 5C76 5C77 5DE6 5DE7 5DE8 3832 3833 5E02 5E03 5E04 5E05 5E73 5E7C 5E80 5E81 5E82 5E83 5F01 5F0D 5F17 5F18 5F52 38FA 5FC5 5FC7 5FC9 5FCA 225AF 6209 620A 620B 6239 6250 6251 6252 6253 6254 6255 6256 624F 65A5 65E6 65E7 2313D 66F1 672A 672B 672C 672D 672E 672F 6730 6B63 6B7A 6BCD 6C10 6C11 6C15 6C3A 6C36 6C37 6C38 6C39 6C3B 6C3E 6C3F 6C40 6C41 6C43 6C44 6C45 6C47 6C48 6C49 706D 72AE 72AF 72B0 7384 7389 738A 738C 738D 74DC 74E6 7518 751F 7528 7529 7530 7531 7532 7533 7534 7535 2EAA 758B 24D13 7592 7676 767D 76AE 76BF 76EE 77DB 77E2 77F3 2EAC 793A 79B8 79BE 7A74 7ACB 7EA0 7F52 2626A 2626B 808A 827A 8864 27607 8BA6 8BA7 8BA8 8BA9 8BAA 8BAB 8BAC 8BAD 8BAE 8BAF 8BB0 8BB1 8F67 8FB7 9092 9093 9485 957F 95EA 961E 961F 9964 9965 9A6D 9E1F 9F99 FDD0-2806 3401 4E1E 4E1F 4E20 4E21 4E22 4E51 4E52 4E53 4E54 4E68 4E69 4E6A 4E6B 4E6C 4E6D 4E6E 4E6F 4E70 4E89 4E98 4E99 4E9A 342B 4EA4 4EA5 4EA6 4EA7 3438 3439 343B 343F 3440 4EEE 4EEF 4EF0 4EF1 4EF2 4EF3 4EF4 4EF5 4EF6 4EF7 4EF8 4EF9 4EFA 4EFB 4EFC 4EFD 4EFE 4EFF 4F00 4F01 4F02 4F03 4F04 4F05 4F06 4F07 4F08 4F09 4F0A 4F0B 4F0C 4F0D 4F0E 4F0F 4F10 4F11 4F12 4F13 4F14 4F15 4F16 4F17 4F18 4F19 4F1A 4F1B 4F1C 4F1D 4F1E 4F1F 4F20 4F21 4F22 4F23 4F24 4F25 4F26 4F27 4F28 4F29 4F2A 4F2B 4F2C 4F64 201C1 201D4 5146 5147 5148 5149 514A 5168 6C3D 5171 5172 5173 5174 518D 518E 519B 519C 51B0 51B1 51B2 51B3 51B4 205B3 51E8 51E9 51EA 51EB 51FC 520E 520F 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 521A 521B 52A3 52A4 52A5 52A6 52A7 52A8 5308 531F 5320 5321 5322 353B 534B 534D 534E 534F 5350 5370 5371 3542 538A 538B 538C 538D 53BD 53BE 53D2 3566 53FF 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 540A 540B 540C 540D 540E 540F 5410 5411 5412 5413 5414 5415 5416 5417 20BBF 20BC6 56DD 56DE 56DF 56E0 56E1 56E2 56E3 5728 5729 572A 572B 572C 572D 572E 572F 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 573A 2124F 58EE 5905 5919 591A 591B 5935 5936 5937 5938 5939 593A 593B 593C 36A5 5977 5978 5979 597A 597B 597C 597D 597E 597F 5980 5981 5982 5983 5984 5985 5986 5987 5988 216B8 216BA 5B56 5B57 5B58 5B59 21944 5B85 5B86 5B87 5B88 5B89 5BFA 5BFB 5BFC 5C16 5C17 5C18 5C25 5C26 5C27 5C3D 21C2A 5C70 5C78 5C79 5C7A 5C7B 5C7C 5C7D 5C7E 5C7F 5C80 5C81 5C82 5C83 21D46 5DDE 5DDF 5DE9 5DEA 3834 3835 3836 5E06 5E07 5E08 5E74 5E75 5E76 5E84 5E85 5E86 5EF5 5F02 5F0E 5F0F 5F10 5F19 5F1A 5F1B 5F1C 5F53 5F74 5F75 5FC8 5FCB 5FCF 5FD3 5FD4 5FD5 5FD6 5FD9 5FDA 5FDB 225BE 620C 620D 620E 620F 6210 6257 6258 6259 625A 625B 625C 625D 625E 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 626A 626B 626C 625F 6530 6536 6537 65E8 65E9 65EA 65EB 65EC 65ED 65EE 65EF 3B30 66F2 66F3 6709 3B41 6731 6732 6733 6734 6735 6736 6737 6738 6739 673A 673B 673C 673D 673E 673F 6740 6741 6742 6743 6B21 6B22 6B64 6B7B 6BCE 6BD5 6C12 6C16 6C17 6C18 6C3C 6C46 6C4A 6C4B 6C4C 6C4D 6C4E 6C4F 6C50 6C51 6C52 6C53 6C54 6C55 6C57 6C58 6C59 6C5A 6C5B 6C5C 6C5D 6C5F 6C60 6C61 6C62 6C63 6C64 6C77 706E 706F 7070 7071 7072 7073 7237 725D 725E 725F 72B1 72B2 72B3 72B4 72B5 72B7 72B8 24725 3EA8 3EA9 3EAA 738E 738F 7390 7391 752A 7536 767E 767F 2EAE 793C 7A75 7AF9 7C73 7CF8 7CF9 7EA1 7EA2 7EA3 7EA4 7EA5 7EA6 7EA7 7EA8 7EA9 7EAA 7EAB 7F36 7F51 2EB6 7F8A 2634B 2634C 7FBD 8001 8003 800C 8012 8033 807F 26612 8089 808B 808C 808D 808E 81E3 81EA 81F3 81FC 26951 820C 821B 821F 826E 8272 8278 827B 827C 827D 827E 827F 8280 8281 8282 864D 866B 8840 884C 8863 897E 897F 8980 89C2 8BB2 8BB3 8BB4 8BB5 8BB6 8BB7 8BB8 8BB9 8BBA 8BBB 8BBC 8BBD 8BBE 8BBF 8BC0 8D1E 8D1F 8D20 8D71 8F68 8FB8 8FB9 8FBA 8FBB 8FBC 8FBD 9094 9096 9097 9098 9099 909A 909B 909C 909D 9486 9487 95EB 95EC 95ED 95EE 95EF 9620 9621 9622 9623 9624 9875 9966 9967 9A6E 9A6F 9A70 9F50 FDD0-2807 4E23 4E24 4E25 4E3D 20021 4E32 20068 4E55 4E71 4E72 4E8A 20118 4E9C 4EA8 4EA9 4EAA 3446 4F2D 4F2E 4F2F 4F30 4F31 4F32 4F33 4F34 4F35 4F36 4F37 4F38 4F39 4F3A 4F3B 4F3C 4F3D 4F3E 4F3F 4F40 4F41 4F42 4F43 4F44 4F45 4F46 4F47 4F48 4F49 4F4A 4F4B 4F4D 4F4E 4F4F 4F50 4F51 4F52 4F53 4F54 4F55 4F56 4F57 4F58 4F59 4F5A 4F5B 4F5C 4F5D 4F5E 4F5F 4F60 4F61 4F62 4F63 4F65 4F66 4F67 4F68 201F2 514B 514C 514D 514E 514F 5150 5151 34B3 5175 518F 519D 34C8 51B5 51B6 51B7 51B8 51B9 51BA 51BB 51EC 34DF 521C 521D 521E 521F 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 522A 522B 522C 522D 52A9 52AA 52AB 52AC 52AD 52AE 52AF 52B0 52B1 52B2 52B3 52B4 5309 208D5 3530 5323 5324 5325 3537 533B 5363 5364 5372 5373 5374 5375 538E 538F 5390 5391 53BF 53D3 356D 3570 3572 5418 5419 541A 541B 541C 541D 541E 541F 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 542A 542B 542C 542D 542E 542F 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 543A 543B 543C 543D 543E 543F 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 544A 544B 544C 544D 544E 544F 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 545A 545B 545C 20BCB 20BE2 20BEB 20BFB 20BFF 56E4 56E5 56E6 56E7 56E8 56E9 56EA 56EB 56EC 56ED 56EE 56EF 56F0 56F1 56F2 56F3 56F4 56F5 3629 362B 362D 362E 3630 573B 573C 573D 573E 573F 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 574A 574B 574C 574D 574E 574F 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 575A 575B 575C 575D 575E 575F 5760 2127C 58EF 58F0 58F1 58F2 58F3 5906 590B 593D 593E 593F 5940 5941 5942 36AA 36AC 5989 598A 598B 598C 598E 598F 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 599A 599B 599C 599D 599E 599F 59A0 59A1 59A2 59A3 59A4 59A5 59A6 59A7 59A8 59A9 59AA 59AB 216C0 216C1 216C2 216D3 216D5 5B5A 5B5B 5B5C 5B5D 5B5E 5B8A 5B8B 5B8C 5B8D 5B8E 5B8F 5B90 5B91 5B92 5BFD 5BFE 5BFF 5C28 5C29 5C2A 5C2B 5C2C 5C3E 5C3F 5C40 5C41 5C42 5C43 5C84 5C85 5C86 5C87 5C88 5C89 5C8A 5C8B 5C8C 5C8E 5C8F 5C90 5C91 5C92 5C93 5C94 5C95 5C96 5C97 5C98 5C99 5C9A 5C9B 5C9C 5C8D 5DE0 5DEB 5DF5 3837 3838 3839 383B 5E09 5E0A 5E0B 5E0C 5E0D 5E0E 5E0F 5E10 5E87 5E88 5E89 5E8A 5E8B 5E8C 5E8D 5E8E 5E8F 5E90 5E91 5E92 5E93 5E94 5EF7 5F03 5F04 5F05 5F1D 5F1E 5F1F 5F20 223BD 5F62 5F63 5F64 5F76 5F77 5F78 5F79 5F7A 5F7B 3900 5FCC 5FCD 5FCE 5FD0 5FD1 5FD2 5FD7 5FD8 5FDC 3908 5FDF 5FE1 5FE3 5FE4 5FE6 5FE7 5FE8 5FEA 5FEB 5FEC 5FED 5FEE 5FEF 5FF0 5FF1 5FF2 5FF3 5FF4 5FF6 5FF7 5FF8 5FF9 5FFA 5FFB 5FFC 5FFE 6000 6003 6004 6005 6006 6211 6212 6213 22993 623A 623B 623C 39D1 626D 626E 626F 6270 6271 6272 6273 6274 6275 6276 6277 6279 627A 627B 627C 627D 627E 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 628A 628B 628C 628D 628E 628F 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 629A 629B 629C 629D 629E 629F 62A0 62A1 62A2 62A3 62A4 62A5 6278 6538 6539 653A 653B 653C 22EEF 6588 6598 65F0 65F1 65F2 65F3 65F4 65F5 65F6 65F7 65F8 66F4 66F5 3B42 3B43 3B44 3B45 3B46 6744 6745 6746 6747 6748 6749 674A 674B 674C 674D 674E 674F 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 675A 675B 675C 675D 675E 675F 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6781 233CC 6B24 3C50 6B65 6B7C 239C2 6BCF 6BD0 23AEE 6BDC 6BDD 6C19 6C1A 6C42 6C56 6C5E 6C65 6C66 6C67 6C68 6C69 6C6A 6C6B 6C6D 6C6E 6C6F 6C70 6C71 6C72 6C73 6C74 6C75 6C76 6C78 6C79 6C7A 6C7B 6C7C 6C7D 6C7E 6C7F 6C81 6C82 6C83 6C84 6C85 6C86 6C87 6C88 6C89 6C8B 6C8C 6C8D 6C8E 6C8F 6C90 6C91 6C92 6C94 6C95 6C96 6C98 6C99 6C9A 6C9B 6C9C 6C9E 6C9F 6CA0 6CA1 6CA2 6CA3 6CA4 6CA5 6CA6 6CA7 6CA8 6CA9 6CAA 23C99 23C9A 23C9B 3DA5 7074 7075 7076 7077 7078 7079 707A 707B 707C 707D 707E 707F 7080 7260 7261 7262 7263 7264 24618 72B6 72B9 72BA 72BB 72BC 72BD 72BE 72BF 72C1 72C2 72C3 72C4 72C5 72C6 72C7 72C8 2472F 3EAD 7392 7393 7394 7395 7396 7397 7398 7399 739A 739B 248F0 248F1 248F2 248F3 74E7 752B 752C 3F55 7537 7538 7539 753A 753C 7593 7594 7595 7596 7597 7680 7681 7682 7683 76C0 76C1 76EF 77E3 77F4 77F5 77F6 25419 793D 4126 79BF 79C0 79C1 79C2 79C3 7A76 7A77 7ACC 7ACD 7CFA 7CFB 7EB6 7EAC 7EAD 7EAE 7EAF 7EB0 7EB1 7EB2 7EB3 7EB4 7EB5 7EB7 7EB8 7EB9 7EBA 7EBB 7EBC 7EBD 7EBE 7F55 8034 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 809A 809B 809C 809D 809E 809F 80A0 81EB 826F 8283 8284 8285 8286 8287 8288 8289 828A 828B 828C 828D 828E 828F 8290 8291 8292 8293 8295 8296 8297 26B05 26B0A 866C 2760C 898B 89C3 2EC6 89D2 278B2 8A00 8A01 8BC1 8BC2 8BC3 8BC4 8BC5 8BC6 8BC7 8BC8 8BC9 8BCA 8BCB 8BCC 8BCD 8BCE 8BCF 8BD0 8BD1 8BD2 8C37 8C46 8C55 8C78 8C9D 8D21 8D22 8D64 8D70 2ECA 8DB3 8EAB 8ECA 8F69 8F6A 8F6B 8F9B 8FB0 8FB5 5DE1 8FBE 8FBF 8FC0 8FC1 8FC2 8FC3 8FC4 8FC5 8FC6 8FC7 8FC8 8FC9 28468 2846C 28473 9091 909E 909F 90A0 90A1 90A2 90A3 90A4 90A5 90A6 90A7 90A8 90A9 90AA 90AC 286AA 286AB 9149 91C6 91CC 9488 9489 948A 948B 948C 95F0 95F1 95F2 95F3 95F4 95F5 95F6 95F7 9625 9626 9627 9628 9629 962A 962B 962C 962D 962E 962F 9630 9631 9632 9633 9634 9635 9636 28E36 28E39 97E7 98CF 9968 9969 996A 996B 996C 996D 996E 9A71 9A72 9A73 9A74 9E20 9E21 9EA6 9F9F FDD0-2808 4E26 4E27 4E33 4E56 4E73 4E74 4E75 4E76 4E77 4E78 200EE 4E8B 4E9B 4E9D 4E9E 4E9F 342D 4EAB 4EAC 4F4C 344C 3450 4F69 4F6A 4F6B 4F6C 4F6D 4F6E 4F6F 4F70 4F71 4F72 4F73 4F74 4F75 4F76 4F77 4F78 4F79 4F7A 4F7B 4F7C 4F7D 4F7E 4F7F 4F80 4F81 4F82 4F83 4F84 4F85 4F86 4F87 4F88 4F89 4F8A 4F8B 4F8C 4F8D 4F8E 4F8F 4F90 4F91 4F92 4F93 4F94 4F95 4F96 4F97 4F98 4F99 4F9A 4F9B 4F9C 4F9D 4F9E 4F9F 4FA0 4FA1 4FA2 4FA3 4FA4 4FA5 4FA6 4FA7 4FA8 4FA9 4FAA 4FAB 4FAC 4FAD 20204 2020C 20214 5152 5153 5154 5155 5156 20487 5169 5176 5177 5178 5190 519E 51BC 51BD 51BE 51BF 51C0 205C3 51ED 51EE 51EF 51FD 34E4 522E 522F 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 523A 523B 523C 523D 523E 523F 5240 5241 5242 2070E 5246 351A 52B5 52B6 52B7 52B8 52B9 52BA 52BB 52BC 52BD 52BE 52BF 52C6 530A 530B 530C 20916 5326 533C 5351 5352 5353 5354 5355 5356 5365 5366 5367 209E7 5376 5377 5378 5379 537A 5392 5393 5394 5395 20A50 53C0 53C1 53C2 53D4 53D5 53D6 53D7 53D8 3577 3578 545D 545E 545F 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 546A 546B 546C 546D 546E 546F 5471 5473 5474 5475 5476 5477 5478 5479 547A 547B 547C 547D 547E 547F 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 548A 548B 548C 548D 548E 548F 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 549A 549B 549C 549D 20C0B 20C0D 20C20 20C34 20C3A 20C3B 20C41 20C42 20C43 3620 56F6 56F7 56F8 56F9 56FA 56FB 56FC 56FD 56FE 3631 3632 3633 3634 3635 5761 5762 5763 5764 5765 5766 5767 5768 5769 576A 576B 576C 576D 576E 576F 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 577A 577B 577C 577D 577E 577F 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 578A 212A8 212A9 212B0 5907 590C 591C 591D 5943 5944 5945 5946 5947 5948 5949 594B 594C 594D 2160A 5954 36B0 36B1 36B5 36B9 36BC 36C1 59AC 59AD 59AE 59AF 59B0 59B1 59B2 59B3 59B4 59B5 59B6 59B7 59B8 59B9 59BA 59BB 59BC 59BD 59BE 59BF 59C0 59C1 59C2 59C3 59C4 59C5 59C6 59C7 59C8 59C9 59CA 59CB 59CC 59CD 59CE 59CF 59D0 59D1 59D2 59D3 59D4 59D6 59D7 216DF 216E6 216E7 216E8 216FA 216FB 216FC 216FE 3740 5B5F 5B60 5B61 5B62 5B63 5B64 5B65 5B66 5B67 21958 5B93 5B94 5B95 5B96 5B97 5B98 5B99 5B9A 5B9B 5B9C 5B9D 5B9E 5B9F 5BA0 5BA1 219DB 5C00 5C19 5C1A 5C2D 5C44 5C45 5C46 5C47 5C48 5C49 5C4A 37B9 37BE 5C9D 5C9E 5C9F 5CA0 5CA1 5CA2 5CA3 5CA4 5CA5 5CA6 5CA7 5CA8 5CA9 5CAA 5CAB 5CAC 5CAD 5CAE 5CAF 5CB0 5CB1 5CB2 5CB3 5CB4 5CB5 5CB6 5CB7 5CB8 5CB9 5CBA 5CBB 5CBC 5CBD 5CBE 5CBF 5CC0 5CC1 5CC2 5CC3 5CC4 5CC5 21D90 3830 5DF6 5E11 5E12 5E13 5E14 5E15 5E16 5E17 5E18 5E19 5E1A 5E1B 5E1C 2207E 5E77 5E78 5E98 5E95 5E96 5E97 5E99 5E9A 5E9C 5E9D 5E9E 5E9F 5EF6 38A0 5EF8 5EF9 5F06 5F21 5F22 5F23 5F24 5F25 5F26 5F27 5F28 5F29 5F2A 223D0 5F54 5F55 38CC 2248B 5F7C 5F7D 5F7E 5F7F 5F80 5F81 5F82 5F83 5F84 5FDD 5FDE 5FE0 5FE2 5FE5 5FE9 5FF5 5FFD 5FFF 6001 6002 3914 6007 6008 6009 600A 600B 600C 600D 600F 6010 6011 6013 6014 6015 6016 6017 6019 601A 601B 601C 601E 601F 6021 6022 6026 6027 6029 602A 602B 602C 602D 602E 602F 6030 6032 6033 6034 6035 6036 603A 603D 603E 603F 2261B 2261C 2262B 6214 6215 6216 6217 623D 623E 623F 6240 627F 39D4 39D5 39D9 39DA 39DC 39DD 39DE 39DF 62A6 62A7 62A8 62A9 62AA 62AB 62AC 62AD 62AE 62AF 62B0 62B1 62B2 62B3 62B4 62B5 62B6 62B7 62B8 62B9 62BA 62BB 62BC 62BD 62BE 62BF 62C0 62C1 62C2 62C3 62C4 62C5 62C6 62C7 62C8 62C9 62CA 62CB 62CC 62CD 62CE 62D0 62D1 62D2 62D3 62D4 62D5 62D6 62D7 62D8 62D9 62DA 62DB 62DD 62DE 62DF 62E0 62E1 62E2 62E3 62E4 62E5 62E6 62E7 62E8 62E9 22ACF 22AD5 3A81 653D 653E 6589 23044 65A6 65A7 65A8 65A9 65BA 65BB 65BC 230DA 65F9 65FA 65FB 65FC 65FD 65FE 65FF 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 660A 660B 660C 660D 660E 660F 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 66F6 3B33 670A 670B 670C 670D 3B47 3B48 3B49 3B4A 3B4B 3B4C 3B4D 3B4E 3B4F 3B50 676A 676B 676C 676D 676E 676F 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 677A 677B 677C 677D 677E 677F 6780 6782 6783 6784 6785 6786 6787 6788 6789 678A 678B 678C 678D 678E 678F 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 679A 679B 679C 679D 679E 679F 67A0 67A1 67A2 67A3 67A4 67A5 67A6 67A7 67A8 67A9 67AA 67AB 67AC 67AD 233DE 233E6 233F4 233F5 233F9 233FA 233FE 23400 67F9 3C20 6B23 6B25 6B26 6B27 6B66 6B67 6B68 6B69 6B7D 6B7E 6B7F 6B80 6B81 6BB4 6BD1 6BDE 6BDF 6C13 6C1B 6C1C 6C1D 6C6C 6C80 6C8A 6C93 6C9D 3CCB 3CCD 3CD1 6CAB 6CAC 6CAD 6CAE 6CB0 6CB1 6CB2 6CB3 6CB4 6CB5 6CB6 6CB7 6CB8 6CB9 6CBA 6CBB 6CBC 6CBD 6CBE 6CBF 6CC0 6CC1 6CC2 6CC3 6CC4 6CC5 6CC6 6CC7 6CC8 6CCA 6CCB 6CCC 6CCD 6CCE 6CCF 6CD0 6CD1 6CD2 6CD3 6CD4 6CD5 6CD6 6CD7 6CD8 6CD9 6CDB 6CDC 6CDD 6CDE 6CDF 6CE0 6CE1 6CE2 6CE3 6CE4 6CE5 6CE6 6CE7 6CE8 6CE9 6CEA 6CEB 6CEC 6CED 6CEE 6CEF 6CF1 6CF2 6CF3 6CF7 6CF8 6CF9 6CFA 6CFB 6CFC 6CFD 6CFE 23CB5 23CB7 23CC7 23CC8 23CC9 6D30 7087 7081 7082 7083 7084 7085 7086 7088 7089 708A 708B 708C 708D 708E 708F 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 709A 709B 709C 709D 709E 241A3 241A4 241A5 241AC 241B5 722C 722D 7238 7240 7248 3E2F 7265 7266 7267 7268 7269 726A 726B 726C 2462A 72C0 3E62 3E69 72C9 72CB 72CC 72CD 72CE 72CF 72D0 72D1 72D2 72D3 72D4 72D5 72D6 72D7 72D8 72D9 72DA 72DB 72DC 72DD 72DE 739C 739D 739E 739F 73A0 73A1 73A2 73A3 73A4 73A5 73A6 73A7 73A8 73A9 73AA 73AB 73AC 73AD 73AE 73AF 73B0 73B1 248FB 248FF 24900 24901 2490C 74DD 74E8 74E9 7519 753B 753D 753E 753F 7540 7541 7542 7543 7544 7545 758C 7598 7599 759A 759B 759C 759D 759E 759F 75A0 75A1 7677 7684 76AF 76C2 76F0 76F1 76F2 76F3 76F4 76F5 77E4 77E5 77F7 77F8 77F9 77FA 77FB 77FC 77FD 77FE 77FF 7800 7801 25425 793E 793F 7940 7941 7942 7943 79C4 79C5 79C6 79C7 79C8 79C9 79CA 4192 7A78 7A79 7A7A 7A7B 41C4 7ACE 7ACF 7AFA 7AFB 7C74 7C75 7C76 42B5 7CFC 7CFD 7CFE 7CFF 7EBF 7EC0 7EC1 7EC2 7EC3 7EC4 7EC5 7EC6 7EC7 7EC8 7EC9 7ECA 7ECB 7ECC 7ECD 7ECE 7ECF 7ED0 7F37 7F54 7F56 7F57 7F59 7F8B 7F8C 8005 8013 8035 8083 808F 43D9 80A1 80A2 80A3 80A4 80A5 80A6 80A7 80A8 80A9 80AA 80AB 80AC 80AD 80AE 80AF 80B0 80B1 80B2 80B3 80B4 80B5 80B6 80B7 80B8 80B9 80BA 80BB 80BC 80BD 80BE 80BF 80C0 80C1 81E4 81E5 81FD 81FE 820D 820E 820F 8220 8270 8298 8299 829A 829B 829C 829D 829E 829F 82A0 82A1 82A2 82A3 82A4 82A5 82A6 82A7 82A8 82A9 82AA 82AB 82AC 82AD 82AE 82AF 82B0 82B1 82B2 82B3 82B4 82B5 82B6 82B7 82B8 82B9 82BA 82BC 82BD 82BE 82C0 82C1 82C2 82C3 82C4 82C5 82C6 82C7 82C8 82C9 82CA 82CB 82CC 82CD 82CE 82CF 833E 26B13 26B15 26B28 82BF 864E 864F 866D 866E 866F 8670 8671 8672 275E0 8865 8868 89C4 89C5 8BD3 8BD4 8BD5 8BD6 8BD7 8BD8 8BD9 8BDA 8BDB 8BDC 8BDD 8BDE 8BDF 8BE0 8BE1 8BE2 8BE3 8BE4 8BE5 8BE6 8BE7 8BE8 8BE9 8C56 8D23 8D24 8D25 8D26 8D27 8D28 8D29 8D2A 8D2B 8D2C 8D2D 8D2E 8D2F 8ECB 8F6C 8F6D 8F6E 8F6F 8F70 8FCA 8FCB 8FCC 8FCD 8FCE 8FCF 8FD0 8FD1 8FD2 8FD3 8FD4 8FD5 8FD6 8FD7 8FD8 8FD9 8FDA 8FDB 8FDC 8FDD 8FDE 8FDF 8FEC FA24 28482 90AD 90AE 90AF 90B0 90B1 90B2 90B3 90B4 90B5 90B6 90B7 90B8 90B9 90BA 90BB 286BC 91C7 91D1 91D2 948D 948E 948F 9490 9491 9492 9493 9494 9495 9496 9497 9577 9578 9580 95F8 95F9 961C 9637 9638 9639 963A 963B 963C 963D 963E 963F 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 96B6 96B9 2ED7 96E8 9751 9752 975E 9763 9876 9877 996F 9970 9971 9972 9973 9974 9A75 9A76 9A77 9A78 9A79 9A7A 9A7B 9A7C 9A7D 9A7E 9A7F 9A80 9C7C 9E22 9E23 9E24 9EFE 9F21 9F7F FDD0-2809 4E34 4E3E 4E57 3420 4E79 4E7A 4E7B 4E7C 4EAD 4EAE 4EAF 4EB0 4EB1 4EB2 4FAE 4FAF 4FB0 4FB1 4FB2 4FB3 4FB4 4FB5 4FB6 4FB7 4FB8 4FB9 4FBA 4FBB 4FBC 4FBD 4FBE 4FBF 4FC0 4FC1 4FC2 4FC3 4FC4 4FC5 4FC6 4FC7 4FC8 4FC9 4FCA 4FCB 4FCC 4FCD 4FCE 4FCF 4FD0 4FD1 4FD2 4FD3 4FD4 4FD5 4FD6 4FD7 4FD8 4FD9 4FDA 4FDB 4FDC 4FDD 4FDE 4FDF 4FE0 4FE1 4FE2 4FE3 4FE4 4FE5 4FE6 4FE7 4FE8 4FE9 4FEA 4FEB 4FEC 4FED 2025B 5157 5158 5159 2048E 516A 5179 517B 5191 5192 519F 51A0 51C1 51C2 51C3 205CA 205D0 205D5 51FE 5243 5244 5245 5247 5248 5249 524A 524B 524C 524D 524E 524F 5250 5251 52C0 52C1 52C2 52C3 52C4 52C5 52C7 52C8 52C9 52CA 52CB 530D 5327 5328 5329 533D 5357 5358 537B 537C 537D 5396 5397 5398 5399 539A 539B 53D9 53DA 53DB 53DC 53DD 5470 5472 3584 549E 549F 54A0 54A1 54A2 54A3 54A4 54A5 54A6 54A7 54A8 54A9 54AA 54AB 54AC 54AD 54AE 54AF 54B0 54B1 54B2 54B3 54B4 54B5 54B6 54B7 54B8 54B9 54BA 54BB 54BC 54BD 54BE 54BF 54C0 54C1 54C2 54C3 54C4 54C5 54C6 54C7 54C8 54C9 54CA 54CB 54CC 54CD 54CE 54CF 54D0 54D1 54D2 54D3 54D4 54D5 54D6 54D7 54D8 54D9 54DA 54DB 54DC 54DD 54DE 54DF 20C53 20C65 20C77 20C78 20C7C 20C8D 20C96 20C9C 3622 56FF 5700 211D9 3636 3637 3638 3639 363B 363E 578B 578C 578D 578E 578F 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 579A 579B 579C 579D 579E 579F 57A0 57A1 57A2 57A3 57A4 57A5 57A6 57A7 57A8 57A9 57AA 57AB 57AC 57AD 57AE 57AF 57B0 57B1 57B2 57B3 57B4 57B5 57CE 212E3 58F4 58F5 5908 5909 590D 369A 594E 594F 5950 5951 5952 5953 5955 5956 21613 21619 59D5 36C3 36C4 36C5 36C7 36C8 598D 59D8 59D9 59DA 59DB 59DC 59DD 59DE 59DF 59E0 59E1 59E2 59E3 59E4 59E5 59E6 59E7 59E8 59E9 59EA 59EB 59ED 59EE 59EF 59F0 59F1 59F2 59F3 59F4 59F5 59F6 59F7 59F8 59F9 59FA 59FB 59FC 59FD 59FE 59FF 5A00 5A01 5A02 5A03 5A05 5A06 5A07 5A08 2170D 21710 21726 5A0D 5B68 5B69 5B6A 5BA2 5BA3 5BA4 5BA5 5BA6 5BA8 5BA9 5BAA 5BAB 219F3 5C01 5C02 5C06 5C1B 5C1C 5C1D 5C2E 5C2F 5C4B 5C4C 5C4D 5C4E 5C4F 5CC6 5CC7 5CC8 5CC9 5CCA 5CCB 5CCC 5CCD 5CCE 5CCF 5CD0 5CD1 5CD2 5CD3 5CD4 5CD5 5CD6 5CD7 5CD8 5CD9 5CDA 5CDB 5CDC 5CDD 5CDE 5CDF 5CE0 5CE1 5CE2 5CE3 5CE4 5CE5 5CE6 5CE7 21DB6 21DBA 21DCA 21DD1 5CF8 5DEC 5DED 5DF7 5DF8 5DF9 5DFA 5DFB 5E1D 5E1E 5E1F 5E20 5E21 5E22 5E23 5E24 5E25 5E26 5E27 2209A 5E7D 5E9B 5EA0 5EA1 5EA2 5EA3 5EA4 5EA5 5EA6 22208 5EB0 5EFA 5EFB 5EFC 22321 22325 5F07 5F08 5F2B 5F2C 5F2D 5F2E 5F2F 223D7 5F56 5F65 5F66 5F85 5F86 5F87 5F88 5F89 5F8A 5F8B 5F8C 5F8D 5F94 600E 6012 6018 601D 6020 6023 6024 6025 6028 6031 6037 6038 6039 603B 603C 3922 3926 3927 392D 6040 6042 6043 6044 6045 6046 6047 6048 6049 604A 604C 604D 604E 6051 6052 6053 6054 6057 6058 605B 605C 605E 605F 6060 6061 6062 6064 6066 6068 606A 606B 606C 606E 6070 6071 6072 6078 6079 607A 607B 607C 607D 22668 6218 6241 6242 6243 39D8 62CF 62DC 39E1 39E2 39E5 39E6 62EA 62EB 62EC 62ED 62EE 62EF 62F0 62F1 62F4 62F5 62F6 62F7 62F8 62F9 62FA 62FB 62FC 62FD 62FE 6300 6301 6302 6303 6304 6305 6306 6307 6309 630A 630B 630C 630D 630E 630F 6311 6312 6313 6314 6315 6316 6317 6318 631C 631D 631E 631F 6320 6321 6322 6323 6324 6325 6326 6327 22AE6 22AE8 22B0E 22B22 6531 653F 3A83 3A84 3A85 6540 6541 6542 6543 6544 6545 3ABC 3ABD 65AA 65AB 3AC6 65BD 65BE 65BF 65C0 65E2 3ADE 3AE0 661A 661B 661C 661D 661E 661F 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 662A 662B 662C 662D 662E 662F 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 663A 663B 663C 663D 663E 663F 2317D 23182 66F7 670E 670F 6710 6711 3B51 3B52 3B53 3B54 3B55 3B56 3B57 67AE 67AF 67B0 67B1 67B2 67B3 67B4 67B5 67B6 67B7 67B8 67B9 67BA 67BB 67BC 67BE 67BF 67C0 67C1 67C2 67C3 67C4 67C5 67C6 67C7 67C8 67C9 67CA 67CB 67CC 67CD 67CE 67CF 67D0 67D1 67D2 67D3 67D4 67D5 67D6 67D7 67D8 67D9 67DA 67DB 67DC 67DD 67DE 67DF 67E0 67E2 67E3 67E4 67E5 67E6 67E7 67E8 67E9 67EA 67EB 67EC 67ED 67EE 67EF 67F0 67F1 67F2 67F3 67F5 67F6 67F7 67F8 67FA 67FB 67FC 67FD 67FE 67FF 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 680A 680B 680C 680D 680E 680F 6810 6811 6852 3C26 6B28 6B29 6B2A 3C54 6B6A 6B6B 6B82 6B83 6B84 6B85 6B86 6B87 6BB5 6BB6 6BD2 3C8B 6BD6 6BD7 6BD8 6BE0 6BE1 23B5A 6C1E 6C1F 6C20 6C21 6C22 6C97 6CAF 6CC9 6CF4 6CF6 3CD6 3CDC 6CDA 6CFF 6D00 6D01 6D02 6D03 6D04 6D05 6D06 6D07 6D08 6D09 6D0A 6D0B 6D0C 6D0E 6D0F 6D10 6D11 6D12 6D13 6D14 6D15 6D17 6D18 6D19 6D1A 6D1B 6D1D 6D1E 6D1F 6D20 6D21 6D22 6D23 6D24 6D25 6D26 6D27 6D28 6D29 6D2A 6D2B 6D2C 6D2D 6D2E 6D31 6D32 6D33 6D34 6D35 6D36 6D37 6D38 6D39 6D3A 6D3B 6D3C 6D3D 6D3E 6D3F 6D40 6D41 6D42 6D43 6D44 6D45 6D47 6D48 6D49 6D4A 6D4B 6D4C 6D4D 6D4E 6D4F 6D50 6D51 6D52 6D53 6D54 6D55 23CFC 23CFD 23CFE 23CFF 3DAD 709F 70A0 70A1 70A2 70A3 70A4 70A5 70A6 70A7 70A8 70A9 70AA 70AB 70AC 70AD 70AE 70AF 70B0 70B1 70B2 70B3 70B4 70B5 70B6 70B7 70B8 70B9 70BA 70BB 70BC 70BD 70BE 70BF 70C0 70C1 70C2 70C3 241CD 241E2 722E 722F 7230 24505 723C 7241 7249 724A 726D 726E 726F 7270 7271 7272 7273 7274 7275 72CA 72DF 72E0 72E1 72E2 72E3 72E4 72E5 72E6 72E7 72E8 72E9 72EA 72EB 72EC 72ED 72EE 72EF 72F0 72F1 72F2 2478F 7385 3EB1 73B2 73B3 73B4 73B5 73B6 73B7 73B8 73B9 73BB 73BD 73BE 73BF 73C0 73C1 73C2 73C3 73C4 73C5 73C6 73C7 73C8 73C9 73CA 73CB 73CC 73CD 73CE 73CF 73D0 73D1 24916 24917 24919 2492F 24933 24934 74EA 74EB 74EC 74ED 74EE 74EF 74F0 74F1 74F2 751A 7520 752D 752E 3F58 3F59 7546 7547 7548 7549 754A 754B 754C 754D 754E 754F 7550 7551 7552 7553 3F7C 75A2 75A3 75A4 75A5 75A6 75A7 75A8 75A9 75AA 75AB 75AC 75AD 75AE 75AF 75BA 7678 7679 767A 7685 7686 7687 7688 76C3 76C4 76C5 76C6 76C7 76C8 401D 76F6 76F7 76F8 76F9 76FA 76FB 76FC 76FD 76FE 76FF 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 770A 770B 770C 770D 2512B 77DC 77E6 77E7 77E8 409A 6CF5 7802 7803 7804 7805 7806 7807 7808 7809 780A 780B 780C 780D 780E 780F 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 781A 781B 781C 2542F 25430 4100 7944 7945 7946 7947 7948 7949 794A 794B 794C 794D 794E 89C6 25635 79B9 79BA 4132 79CB 79CC 79CD 79CE 79CF 79D0 79D1 79D2 79D3 79D4 79D5 79D6 79D7 25772 4195 7A7C 7A7D 7A7E 7A7F 7A80 7A81 7A82 7A83 25946 7AD0 7AD1 7AD2 7AD3 7AD4 7AD5 7AD6 7AD7 7AFC 7AFD 7AFE 7AFF 7B00 7B01 7B02 7B03 25AE9 427A 5A04 7C77 7C78 7C79 7C7A 7C7B 7C7C 7C7D 7C7E 7C7F 7C80 7C81 7C82 42B6 42B7 42B9 7D00 7D01 7D02 7D03 7D04 7D05 7D06 7D07 7D08 7D09 7ED1 7ED2 7ED3 7ED4 7ED5 7ED6 7ED7 7ED8 7ED9 7EDA 7EDB 7EDC 7EDD 7EDE 7EDF 4342 7F38 7F58 7F5A 7F8D 7F8E 7F8F 7F91 26351 7FBE 7FBF 263F5 263F8 8007 800D 800E 800F 8010 8011 8014 8036 8037 43DF 80C2 80C3 80C4 80C5 80C6 80C7 80C8 80C9 80CA 80CB 80CC 80CD 80CE 80CF 80D0 80D1 80D2 80D3 80D5 80D6 80D7 80D8 80D9 80DA 80DB 80DC 80DD 80DE 80DF 80E0 80E1 80E2 80E3 80E4 80E5 80E6 80E7 80E8 80E9 80EA 80EB 8109 81F4 81FF 8221 8222 8223 8224 8294 82D0 82D1 82D2 82D3 82D4 82D5 82D6 82D7 82D8 82D9 82DA 82DB 82DC 82DD 82DE 82DF 82E0 82E1 82E2 82E3 82E4 82E5 82E6 82E7 82E8 82E9 82EA 82EB 82EC 82ED 82EE 82EF 82F0 82F1 82F2 82F3 82F4 82F5 82F6 82F7 82F8 82F9 82FA 82FB 82FC 82FD 82FE 82FF 8300 8301 8302 8303 8304 8305 8306 8307 8309 830A 830B 830C 830D 830E 830F 8310 8311 8313 8314 8315 26B50 26B51 26B52 26B53 26B5B 833A 8650 8673 8674 8675 8676 8677 8678 8679 867A 867B 867C 867D 867E 867F 8680 8681 8682 8683 460F 8841 8842 884D 884E 275E4 8866 8867 8869 886A 886B 886C 27632 27639 8981 898C 89C7 89C8 89C9 89D3 89D4 8A02 8A03 8A04 8A05 8A06 8A07 8A08 8BEA 8BEB 8BEC 8BED 8BEE 8BEF 8BF0 8BF1 8BF2 8BF3 8BF4 8BF5 8BF6 8C9E 8C9F 8CA0 8D30 8D31 8D32 8D33 8D34 8D35 8D36 8D37 8D38 8D39 8D3A 8D3B 8D72 8D73 8D74 8D75 8DB4 8ECC 8ECD 8F71 8F72 8F73 8F74 8F75 8F76 8F77 8F78 8F79 8F7A 8F7B 8FE0 8FE1 8FE2 8FE3 8FE4 8FE5 8FE6 8FE7 8FE8 8FE9 8FEA 8FEB 8FED 8FEE 8FEF 8FF0 8FF1 8FF2 8FF3 90BC 90BD 90BE 90BF 90C0 90C1 90C2 90C3 90C4 90C5 90C6 90C7 90C8 90C9 90CA 90CB 90CD 90CE 90CF 90D0 90D1 90D3 90D5 286D8 286E6 90F1 914A 914B 91CD 91D3 91D4 9498 9499 949A 949B 949C 949D 949E 949F 94A0 94A1 94A2 94A3 94A4 94A5 94A6 94A7 94A8 94A9 94AA 94AB 94AC 94AD 94AE 94AF 9581 9582 95FA 95FB 95FC 95FD 95FE 95FF 9600 9601 9602 964A 964B 964C 964D 964E 964F 9650 9651 9652 9653 9654 9655 28E65 28E66 9762 9769 97CB 97E8 97ED 97F3 9801 9878 9879 987A 987B 98A8 98D0 98D1 98D2 98DB 2EDE 98DF 98E0 9975 9976 9977 9978 9979 997A 997B 997C 9996 29810 9999 9A81 9A82 9A83 9A84 9A85 9A86 9A87 9A88 9A89 2EE3 9CEC 9E25 9E26 9E27 9E28 9E29 FDD0-280A 2003E 4E35 4E58 4E7D 4EB3 3465 3466 4FEE 4FEF 4FF0 4FF1 4FF2 4FF3 4FF4 4FF5 4FF6 4FF7 4FF8 4FF9 4FFA 4FFB 4FFC 4FFD 4FFE 4FFF 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 500A 500B 500C 500D 500E 500F 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 501A 501B 501C 501D 501E 501F 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 502A 502B 502C 502D 502E 502F 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 503A 503B 503C 503D 503E 503F 20274 20275 20299 2029E 202A0 5056 515A 515B 20491 20492 517A 517C 5193 5194 51A1 51A2 51A3 51A4 51A5 51A6 51A7 2058E 51C4 51C5 51C6 51C7 51C8 51C9 51CA 51CB 51CC 51CD 51CE 205DF 205E0 20656 5252 5253 5254 5255 5256 5257 5258 5259 525A 525B 525C 525D 525E 525F 5260 5261 5262 5263 5264 5265 5266 5267 20731 52CC 52CD 52CE 52CF 52D0 52D1 20873 530E 532A 532B 537F 539C 539D 539E 539F 8652 53DE 53DF 3597 3598 54E0 54E1 54E2 54E3 54E4 54E5 54E6 54E7 54E8 54E9 54EA 54EB 54EC 54ED 54EE 54EF 54F0 54F1 54F2 54F3 54F4 54F5 54F6 54F7 54F8 54F9 54FA 54FB 54FC 54FD 54FE 54FF 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 550A 550B 550D 550E 550F 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 551A 551B 551C 551D 551E 551F 5520 5521 5522 5523 5524 5525 5526 5527 20CB5 20CB8 20CCF 20CD3 20CD4 20CD5 20CD6 20CDD 20CED 20CFF 20D15 3623 5701 5702 5703 5704 5705 5706 57B6 57B7 57B8 57B9 57BA 57BB 57BC 57BD 57BE 57BF 57C0 57C1 57C2 57C3 57C4 57C5 57C6 57C7 57C8 57C9 57CA 57CB 57CC 57CD 57CF 57D0 57D1 57D2 57D3 57D4 57D5 57D6 57D7 57D8 57D9 57DA 57DB FA0F 212FE 21302 21303 21304 21305 5832 58F6 590E 590F 591E 21596 594A 5957 5958 5959 595A 36CE 36D1 36D3 36D4 36D6 36DD 36E1 36E2 59EC 5A09 5A0A 5A0B 5A0C 5A0E 5A0F 5A10 5A11 5A12 5A13 5A14 5A15 5A16 5A17 5A18 5A19 5A1A 5A1B 5A1C 5A1D 5A1E 5A1F 5A20 5A21 5A22 5A23 5A24 5A25 5A26 5A27 5A28 5A29 5A2A 5A2D 5A2E 5A2F 5A30 5A31 5A32 5A33 5A34 2173A 2173B 2173C 21757 3743 5B6B 5B6C 5B6D 2196A 5BA7 5BAC 5BAD 5BAE 5BAF 5BB0 5BB1 5BB2 5BB3 5BB4 5BB5 5BB6 5BB7 5BB8 5BB9 5BBA 5BBB 5BBC 5BBD 5BBE 5C03 5C04 5C05 3797 5C50 5C51 5C52 5C53 5C54 5C55 5C56 5C57 5C58 21C70 5CE8 5CE9 5CEA 5CEB 5CEC 5CED 5CEE 5CEF 5CF0 5CF1 5CF2 5CF3 5CF4 5CF5 5CF6 5CF7 5CF9 5CFA 5CFB 5CFC 5CFD 5CFE 5CFF 5D00 5D01 5D02 5D03 5D04 5D05 21DEB 21DF9 382B 5DEE 5DFC 5E28 5E29 5E2A 5E2B 5E2C 5E2D 5E2E 5E2F 5E30 5E31 220C7 221C3 5EA7 5EA8 5EA9 5EAA 5EAB 5EAC 5EAD 5EAE 5EAF 5EFD 5F09 5F30 5F31 5F32 5F33 5F67 5F68 22491 5F8E 5F8F 5F90 5F91 5F92 5F93 5F95 224ED 3920 392B 6041 604B 604F 6050 6055 6056 6059 605A 605D 6063 6065 6067 6069 606D 606F 6073 6074 6075 6076 6077 3931 3933 3934 3936 3937 3938 3939 607E 6080 6081 6082 6083 6084 6085 6087 6088 608B 608C 608D 608E 608F 6091 6092 6093 6094 6095 6096 6097 6099 609A 609B 609C 609D 609E 609F 60A2 60A6 60A7 60A9 60AD 60AE 60AF 2267A 22696 22698 6219 6244 6245 6246 6247 39EC 62F2 62F3 62FF 6308 6310 6319 631A 631B 39F8 6328 6329 632A 632B 632C 632D 632E 632F 6330 6331 6333 6334 6335 6336 6337 6338 6339 633A 633C 633D 633E 633F 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 634A 634B 634C 634D 634E 634F 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 635A 635B 635C 635D 635E 635F 6360 6361 6362 6363 6364 22B3F 22B43 22B6A 63E4 3A87 3A88 3A89 6546 6547 6548 6549 654A 654B 654C 2304B 658A 658B 6599 659A 3AC9 65C1 65C2 65C3 65C4 65C5 65C6 65CA 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 664A 664B 664C 664D 664E 664F 6650 6651 6652 6653 6654 6655 6656 231A4 231A5 665F 6660 66F8 66FA 66FB 3B34 3B35 6712 6713 6714 6715 6717 67BD 67E1 67F4 3B58 3B59 3B5A 3B5B 3B5C 3B5D 3B5E 3B5F 3B60 3B61 3B62 3B63 3B64 3B65 3B66 3B67 6812 6813 6814 6815 6816 6817 6818 6819 681A 681B 681C 681D 681E 681F 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 682A 682B 682C 682D 682E 682F 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 683A 683B 683C 683D 683E 683F 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 684A 684B 684C 684D 684E 684F 6850 6851 6853 6854 6855 6856 6857 6858 6859 685A 685B 685C 685D 685E 685F 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 686A 2343F 23450 2346F 23472 6B2B 6B2C 6B2D 6B2E 6B2F 6B30 6B31 6B34 6B6C 6B6D 3C61 6B88 6B89 6B8A 6B8B 6BB7 6BD9 6BE2 6BE3 6BE4 6BE5 6BE6 6BE7 6BE8 6BE9 6BEA 6C23 6C24 6C25 6C26 6C27 6C28 6C29 6CF0 6D1C 6D2F 6D46 3CEF 6D0D 6D16 6D56 6D57 6D58 6D59 6D5A 6D5B 6D5C 6D5D 6D5E 6D5F 6D60 6D61 6D62 6D63 6D64 6D65 6D66 6D67 6D68 6D69 6D6A 6D6B 6D6C 6D6D 6D6E 6D6F 6D70 6D71 6D72 6D73 6D74 6D75 6D76 6D77 6D78 6D79 6D7A 6D7B 6D7C 6D7D 6D7E 6D7F 6D80 6D81 6D82 6D83 6D84 6D85 6D86 6D87 6D88 6D89 6D8A 6D8B 6D8C 6D8D 6D8F 6D90 6D91 6D92 6D93 6D94 6D95 6D96 6D97 6D98 6D9A 6D9B 6D9C 6D9D 6D9E 6D9F 6DA0 6DA1 6DA2 6DA3 6DA4 6DA5 6DA6 6DA7 6DA8 6DA9 23D40 23D5B 3DB4 70C4 70C5 70C6 70C7 70C8 70C9 70CA 70CB 70CC 70CD 70CE 70CF 70D0 70D1 70D2 70D3 70D4 70D5 70D6 70D7 70D8 70D9 70DA 70DB 70DC 70DD 70DE 70DF 70E0 70E1 70E2 70E3 70E4 70E5 70E6 70E7 70E8 70E9 70EA 70EB 70EC 70ED 70EE 241FC 2421B 7231 7239 7242 24578 3E20 7276 7277 7278 7279 727A 3E74 72F3 72F4 72F5 72F6 72F7 72F8 72F9 72FA 72FB 72FC 72FD 72FE 7300 7301 7302 7303 7386 3EB8 73BA 73BC 3EBF 3EC2 3EC7 73D2 73D3 73D4 73D5 73D6 73D7 73D8 73D9 73DA 73DB 73DC 73DD 73DE 73DF 73E0 73E1 73E2 73E3 73E4 73E5 73E6 73E7 73E8 73E9 73EA 73EB 73EC 73ED 73EE 73EF 73F0 73F1 73F2 7409 2493E 2493F 24940 24941 24942 24943 73F9 74DE 74DF 74F3 74F4 74F5 7521 7554 7555 7556 7557 7558 7559 755A 755B 755C 755D 755E 755F 758D 75B0 75B1 75B2 75B3 75B4 75B6 75B7 75B8 75B9 75BB 75BC 75BD 75BE 75BF 75C0 75C1 75C2 75C3 75C4 75C5 75C6 75C7 75C8 75C9 7560 768A 768B 768C 768D 24F5C 3FED 76B0 76B1 4000 76C9 76CA 76CB 76CC 76CD 76CE 76CF 76D0 76D1 25052 4026 770E 770F 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 771A 771B 771C 771D 771E 771F 7720 7721 7722 7723 7724 7727 7728 7729 772A 772B 772C 773F 25148 77DD 77E9 40A8 781D 781E 781F 7820 7821 7822 7823 7824 7825 7827 7828 7829 782A 782B 782C 782D 782E 782F 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 783A 783B 783C 783D 783E 783F 7840 7841 25446 2546C 2546E 4103 794F 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 795A 795B 795C 795D 795E 795F 7960 7962 25651 2573D 79D8 79D9 79DA 79DB 79DC 79DD 79DE 79DF 79E0 79E1 79E2 79E3 79E4 79E5 79E6 79E7 79E8 79E9 79EA 79EB 79EC 79ED 79EE 79EF 79F0 7A84 7A85 7A86 7A87 7A88 7A89 7A8A 7A8B 7A8C 7A8D 7A8E 25956 41CA 7AD8 7AD9 7ADA 7ADB 7ADC 7ADD 7ADE 41D7 41DB 7B05 7B06 7B07 7B08 7B09 7B0A 7B0B 7B0C 7B0D 7B0E 7B0F 7B10 7B11 7B12 7B13 7B14 7B15 7B04 7C83 7C84 7C85 7C86 7C87 7C88 7C89 7C8A 7C8B 7C8C 7C8D 7C8E 7C8F 7C90 7C91 42BC 7D0A 7D0B 7D0C 7D0D 7D0E 7D0F 7D10 7D11 7D12 7D13 7D14 7D15 7D16 7D17 7D18 7D19 7D1A 7D1B 7D1C 7D1D 7D1E 7D1F 7D20 7D21 7D22 7D23 7D24 7D25 7D26 7D27 7EE0 7EE1 7EE2 7EE3 7EE4 7EE5 7EE6 7EE7 7EE8 4343 7F39 7F3A 7F3C 7F5B 7F5C 7F5D 7F5E 7F5F 7F60 7F61 7F62 7F90 7F92 7F93 7F94 7F96 7F97 7F98 7F99 7FC0 7FC1 7FC2 7FC3 7FC4 7FC5 7FC6 26402 26410 26411 26412 8004 8006 800A 8015 8016 8017 8018 8019 8038 8039 803A 803B 803C 803D 803E 803F 8040 8041 8042 8081 8082 43ED 80ED 80EE 80EF 80F0 80F1 80F2 80F3 80F4 80F5 80F6 80F7 80F8 80F9 80FA 80FB 80FC 80FD 80FF 8100 8101 8102 8103 8104 8105 8106 8107 8108 810A 810B 810C 810D 810E 810F 8110 8111 8112 8113 266AF 266B1 266B5 81EC 81ED 26939 8200 8201 8210 4465 8225 8226 8227 8228 8229 822A 822B 822C 822D 822E 822F 8230 8231 8273 449F 44A0 44A2 82BB 8308 8316 8317 8318 8319 831A 831B 831C 831E 831F 8320 8321 8322 8324 8325 8326 8327 8328 8329 832A 832B 832C 832D 832E 832F 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 833C 833D 833F 8340 8341 8342 8343 8344 8345 8347 8348 8349 834A 834B 834C 834D 834E 834F 8350 8351 8352 8354 8355 8356 8357 8358 835A 835B 835C 835D 835E 835F 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 836A 836C 836D 836E 836F 26B75 26B82 26B96 26B97 26B9D 26BB3 8353 8651 8653 8654 8684 8685 8686 8687 8689 868A 868B 868C 868D 868E 868F 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 869A 869B 869C 869D 869E 869F 86A0 86A1 86A2 86A3 86A4 86A5 86A6 86A7 86A8 86A9 86AA 86AC 8843 8844 4615 884F 886D 886E 886F 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 887A 887B 887C 887D 887E 887F 8880 8881 8882 8883 8884 8885 8886 8887 27655 27656 27657 898D 898E 89CA 8A09 8A0A 8A0B 8A0C 8A0D 8A0E 8A0F 8A10 8A11 8A12 8A13 8A14 8A15 8A16 8A17 8A18 8A19 8A1A 27967 8BF7 8BF8 8BF9 8BFA 8BFB 8BFC 8BFD 8BFE 8BFF 8C00 8C01 8C02 8C03 8C04 8C05 8C06 8C07 8C08 8C09 8C0A 8C38 8C47 8C48 8C57 8C79 8C7A 8C7B 8CA1 8CA2 8CA3 8CA4 27D2F 8D3C 8D3D 8D3E 8D3F 8D40 8D41 8D42 8D43 8D44 8D45 8D46 4798 8D76 8D77 8D78 47D5 8DB5 8DB6 8DB7 8DB8 8EAC 8ECE 8ECF 8ED0 8ED1 8ED2 8ED3 8ED4 8ED5 8F7C 8F7D 8F7E 8F7F 8F80 8F81 8F82 8F83 8FB1 8FF4 8FF5 8FF6 8FF7 8FF8 8FF9 8FFA 8FFB 8FFC 8FFD 8FFE 8FFF 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 900A 9095 90D6 90D7 90D8 90D9 90DA 90DB 90DC 90DD 90DE 90DF 90E0 90E1 90E2 90E3 90E4 90E5 90E6 90E7 914C 914D 914E 914F 9150 9151 9152 91D5 91D6 91D7 91D8 91D9 91DA 91DB 91DC 91DD 91DE 91DF 91E0 91E1 91E2 94B0 94B1 94B2 94B3 94B4 94B5 94B6 94B7 94B8 94B9 94BA 94BB 94BC 94BD 94BE 94BF 94C0 94C1 94C2 94C3 94C4 94C5 94C6 94C7 94C8 94C9 94CA 94CB 94CC 94CD 94CE 9583 9584 9585 28CCA 28CCD 9603 9604 9605 9606 9656 9657 9658 9659 965B 965C 965D 965E 965F 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 965A 28E97 96BA 96BB 96BC 96BD 96BE 987C 987D 987E 987F 9880 9881 9882 9883 9884 98E2 98E3 98E4 997D 997E 997F 9980 9981 9982 99AC 9A8A 9A8B 9A8C 9A8D 9A8E 9A8F 9AA8 9AD8 9ADF 9B25 9B2F 9B32 9B3C 9C7D 9E2A 9E2B 9E2C 9E2D 9E2E 9E2F 9E30 9E31 9E32 9E33 9E34 9E35 9E36 9F80 FDD0-280B 3422 4E7E 4E7F 4E80 3464 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 504A 504B 504C 504D 504E 504F 5050 5051 5052 5053 5054 5055 5057 5058 5059 505A 505B 505C 505D 505E 505F 5060 5061 5062 5063 5064 5065 5066 5067 5069 506A 506B 506C 506D 506E 506F 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 507A 507B 507C 507D 507E 507F 202B7 202BF 202C0 202E5 515C 515D 515E 517D 34BC 5195 51A8 51CF 51D0 51D1 205EB 51F0 5268 526A 526B 526C 526D 526E 526F 5270 5271 5276 20779 3520 52D2 52D3 52D4 52D5 52D6 52D8 52D9 52DA 530F 5310 5313 352D 5318 5319 3531 532C 532D 532E 533E 533F 5340 5359 5368 537E 53A0 53A1 53A2 53A3 53A9 53C3 53C4 550C 35A1 35A5 35AD 5528 5529 552A 552B 552C 552D 552E 552F 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 553A 553B 553C 553D 553E 553F 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 554A 554B 554C 554D 554E 554F 5550 5551 5552 5553 5554 5555 5556 5557 5558 555A 555B 555C 555D 555E 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 556A 556C 556D 556E 556F 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 20D28 20D31 20D32 20D46 20D47 20D48 20D49 20D4C 20D4D 20D4E 20D6F 20D71 20D74 20D7C 20D7E 20D7F 20D96 20D9C 20DA7 20DB2 556B 55B6 5707 5708 5709 570A 570B 570F 3647 3648 3649 57DC 57DD 57DE 57DF 57E0 57E1 57E2 57E3 57E4 57E5 57E6 57E7 57E8 57E9 57EB 57EC 57ED 57EE 57EF 57F0 57F1 57F2 57F3 57F4 57F5 57F6 57F7 57F8 57F9 57FA 57FB 57FC 57FD 57FE 57FF 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 580A 580B 580C 580D 580E 580F 5810 5811 5812 5813 5814 5815 21336 2133A 57EA 5835 58F7 58F8 591F 5920 595B 595C 595D 595E 2163E 595F 5962 5A2B 5A3D 36E5 36E6 5A2C 5A35 5A36 5A37 5A38 5A39 5A3A 5A3B 5A3C 5A3E 5A3F 5A40 5A41 5A42 5A43 5A44 5A45 5A46 5A47 5A48 5A49 5A4A 5A4B 5A4C 5A4D 5A4E 5A4F 5A50 5A51 5A52 5A53 5A54 5A55 5A56 5A57 5A58 5A59 5A5A 5A5B 5A5C 5A5D 5A5E 5A5F 5A60 5A61 5A62 5A63 5A64 5A65 5A66 5A67 5A68 5A69 5A6A 5A6B 5A6C 5A6D 5A6E 5A6F 5A70 5A71 5A72 5A73 5A74 5A75 5A76 2176C 2176D 2176E 2176F 21770 21771 21773 21774 5A8E 5B6E 5B6F 5B70 5B72 5BBF 5BC0 5BC1 5BC2 5BC3 5BC4 5BC5 5BC6 5BC7 5BC8 5BC9 21A2D 21A34 5C07 5C08 5C09 5C59 5C5A 5C5B 5C5C 5C5D 5C60 5D06 5D07 5D08 5D09 5D0A 5D0B 5D0C 5D0D 5D0E 5D0F 5D10 5D11 5D12 5D13 5D14 5D15 5D16 5D17 5D18 5D19 5D1A 5D1B 5D1C 5D1D 5D1E 5D1F 5D20 5D21 5D22 5D23 5D24 5D25 5D26 5D27 5D28 5D29 5D2A 5D2B 5D2C 5D2D 5D2E 5D2F 5D30 21E1C 21E37 21E3D 5DE2 5DE3 3831 5E32 5E33 5E34 5E35 5E36 5E37 5E38 5E39 5E3A 5E3B 5E3C 5E3E 5EB1 5EB2 5EB3 5EB4 5EB5 5EB6 5EB7 5EB8 5EB9 5EBA 5EBB 5EBC 5EBE 5F34 5F35 5F36 5F37 5F38 5F39 223FA 5F57 5F69 5F6B 5F6C 5F96 5F97 5F98 5F99 5F9B 5F9C 5F9D 5F9E 5F9F 5FA0 5FA1 5FA2 5FA3 5FA4 22513 2251B 3930 3932 3935 393B 607F 6086 6089 608A 6090 6098 60A0 60A1 60A3 60A4 60A5 60A8 60AA 60AB 60AC 393F 394D 60B0 60B1 60B4 60B5 60B7 60B8 60BA 60BB 60BC 60BD 60BE 60BF 60C0 60C2 60C3 60C5 60C6 60C7 60C8 60CA 60CB 60CD 60CF 60D0 60D3 60D4 60D5 60D7 60D8 60D9 60DA 60DB 60DC 60DD 60DE 60DF 60E4 60E6 60E7 60E8 60EC 60ED 60EE 60EF 226F4 226F5 226F6 22712 22714 2271B 2271F 621A 621B 621C 621D 6248 6332 633B 39FB 39FE 3A00 3A01 3A02 3A03 3A04 3A06 6365 6366 6367 6368 6369 636A 636B 636C 636D 636E 636F 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 637A 637B 637C 637D 637E 637F 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 638A 638B 638D 638E 638F 6390 6391 6392 6393 6395 6396 6397 6398 6399 639A 639B 639C 639D 639E 639F 63A0 63A1 63A2 63A4 63A5 63A6 63A7 63A8 63A9 63AA 63AB 63AC 63AD 63AE 63AF 63B3 63B4 63B5 63B6 63B7 63B8 63B9 63BA 63BB 63BC 63BD 22BCA 22BCE 63B2 3A8A 3A8B 3A8C 3A8D 3A8E 555F 654D 654E 654F 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 655A 655B 655D 658D 658E 658F 659B 659C 65AC 65AD 3ACB 65C7 65C8 65C9 65CB 65CC 65CD 65CE 65CF 65E3 3AF0 3AF2 52D7 6657 6658 6659 665A 665B 665C 665D 665E 6661 6662 6663 6664 6665 6666 6667 6668 6669 66FD 231B3 231C8 231C9 66F9 66FC 3B36 3B37 6716 6718 6719 671A 671B 3B68 3B69 3B6A 3B6B 3B6C 3B6D 3B6E 3B6F 3B70 3B71 3B72 3B73 3B74 3B75 3B77 686B 686C 686D 686E 686F 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 687A 687B 687C 687D 687E 687F 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 688A 688B 688C 688D 688E 688F 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 689A 689B 689C 689D 689E 689F 68A0 68A1 68A2 68A3 68A4 68A5 68A6 68A7 68A8 68A9 68AA 68AB 68AC 68AD 68AE 68AF 68B0 68B1 68B2 68B3 68B5 68B6 68B7 68B8 68B9 68BA 68BB 68BC 68BD 68BE 68BF 68C0 68C1 68C2 6956 3C2F 6B32 6B33 6B35 6B36 6B37 6B38 3C62 6B8C 6B8D 6B8E 6B8F 6B90 6B91 6B92 6B93 6BB8 6BB9 6BBA 6BBB 6BEB 6BEC 6BED 6BEE 6C2A 6C2B 23C63 3CEB 6D8E 3D00 3D04 6D99 6DAA 6DAB 6DAC 6DAD 6DAE 6DAF 6DB0 6DB1 6DB2 6DB3 6DB4 6DB5 6DB6 6DB7 6DB8 6DB9 6DBA 6DBB 6DBC 6DBD 6DBE 6DBF 6DC0 6DC1 6DC2 6DC3 6DC4 6DC5 6DC6 6DC7 6DC8 6DC9 6DCA 6DCB 6DCC 6DCD 6DCE 6DCF 6DD0 6DD1 6DD2 6DD3 6DD4 6DD5 6DD6 6DD7 6DD8 6DD9 6DDA 6DDB 6DDC 6DDD 6DDE 6DDF 6DE0 6DE1 6DE2 6DE3 6DE4 6DE5 6DE6 6DE7 6DE8 6DE9 6DEA 6DEB 6DEC 6DED 6DEE 6DEF 6DF0 6DF1 6DF2 6DF3 6DF4 6DF5 6DF6 6DF7 6DF8 6DF9 6DFA 6DFB 6DFD 6DFF 6E00 6E01 6E02 6E04 6E05 6E06 6E07 6E08 6E09 6E0A 6E0B 6E0C 6E0D 6E0E 6E0F 6E10 6E11 6E12 6E13 6E14 6E15 6E16 6E17 6E1A 6E74 23D7E 23D8F 23DB6 23DB7 23DB8 23DB9 23DBA 23DBB 23DBC 23DBD 23DE3 23DF8 3DBF 70EF 70F0 70F1 70F2 70F3 70F4 70F5 70F6 70F7 70F8 70F9 70FA 70FC 70FD 70FE 70FF 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 710A 710B 710C 710D 710E 710F 7110 7111 7112 7113 7115 7116 7117 7118 2424B 24256 24259 7114 723D 3E3A 3E3C 3E3E 3E40 727B 727C 727D 727E 727F 7281 24665 72FF 7304 7305 7307 7308 7309 730A 730D 730E 730F 7310 7311 7313 7314 7315 7316 7317 7318 7319 731A 731B 731C 731D 731E 731F 7320 7321 732A 7387 7388 3ECA 3ECC 3ED0 73F3 73F4 73F5 73F6 73F8 73FA 73FB 73FC 73FD 73FE 73FF 7400 7401 7402 7403 7404 7405 7406 7407 7408 740A 740B 740C 740D 740E 740F 7410 7411 7412 7413 24962 24963 24974 24975 24976 3F0E 74E0 3F26 74F6 74F7 74F8 751B 751C 7522 7523 7561 7562 7563 7564 7565 7566 7567 7569 7570 75B5 75CA 75CB 75CC 75CD 75CE 75CF 75D0 75D1 75D2 75D3 75D4 75D5 75D6 7689 768E 768F 7690 7691 76B2 4001 4002 76D2 76D3 76D4 76D5 76D6 76D7 76D8 76DB 7725 7726 772D 772E 772F 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 773A 773B 773C 773D 773E 7741 2517D 2517E 7740 77EA 77EB 7826 7842 7843 7844 7845 7846 7847 7848 7849 784A 784B 784C 784D 784E 784F 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 785A 785B 7961 4104 7963 7964 7965 7967 7968 7969 796A 796B 796C 796D 796E 796F 8996 25683 79BB 413B 4141 4143 4145 79F1 79F2 79F3 79F4 79F5 79F6 79F7 79F8 79F9 79FA 79FB 79FC 79FD 79FE 7A06 7A8F 7A90 7A91 7A92 7A93 7A94 7A95 7A9A 7AE1 7B16 7B17 7B18 7B19 7B1A 7B1B 7B1C 7B1D 7B1E 7B1F 7B20 7B21 7B22 7B23 7B24 7B25 7B26 7B27 7B28 7B29 7B2A 7B2B 7B2C 7B2D 7B2E 7B2F 7B30 7B31 7B32 7B33 7B34 7B35 7B36 7B37 7B38 7B39 7B3A 7B3B 7B3C 7B3D 7B3E 7568 7C92 7C93 7C94 7C95 7C96 7C97 7C98 7C99 7C9A 7C9B 7C9C 7C9D 7CA3 25E49 7D28 7D29 7D2C 7D2D 7D2E 7D2F 7D30 7D31 7D32 7D33 7D34 7D35 7D36 7D37 7D38 7D39 7D3A 7D3B 7D3C 7D3D 7D3E 7D3F 7D40 7D41 7D42 7D43 7D44 7D45 7D46 7D47 7D48 7D49 7D4A 7D4B 7D4C 25FE1 25FE2 7EE9 7EEA 7EEB 7EEC 7EED 7EEE 7EEF 7EF0 7EF1 7EF2 7EF3 7EF4 7EF5 7EF6 7EF7 7EF8 7EF9 7EFA 7EFB 7EFC 7EFD 7EFE 7EFF 7F00 7F01 4344 4345 7F3B 7F3D 7F63 7F95 7F9A 7F9B 7F9C 7F9D 7F9E 7F9F 7FC7 7FC8 7FC9 7FCA 7FCB 7FCC 7FCD 7FCE 7FCF 7FD0 7FD1 7FD2 8008 8009 801A 801B 801C 801D 801E 801F 8043 8044 8045 8046 8047 8048 8049 804A 804B 804C 804D 80EC 43F2 8115 8116 8117 8118 8119 811A 811B 811C 811D 811E 811F 8121 8122 8123 8124 8125 8126 8127 8128 8129 812A 812B 812C 812D 812E 812F 8130 8131 8132 8133 8134 8135 8136 8137 8138 266DA 266E8 266FC 2690E 8202 8211 8232 8233 8234 8235 8236 8237 8238 8239 823A 823B 26A2D 26A2E 8274 8359 836B 831D 8323 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 837A 837B 837C 837D 837E 837F 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 838A 838B 838C 838D 838E 838F 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 839B 839C 839D 839E 839F 83A0 83A1 83A2 83A3 83A4 83A5 83A6 83A7 83A8 83A9 83AA 83AB 83AC 83AE 83AF 83B0 83B1 83B2 83B3 83B4 83B5 83B6 83B7 83B8 83B9 83BA 83BC 83BD 26BC0 26BF7 26C21 83AD 5F6A 8655 8656 8657 8658 8659 865A 86AB 86AD 86AE 86AF 86B0 86B1 86B2 86B3 86B4 86B5 86B6 86B7 86B8 86B9 86BA 86BB 86BC 86BD 86BE 86BF 86C0 86C1 86C2 86C3 86C4 86C5 86C6 86C7 86C8 86C9 86CA 86CB 86CC 86CD 86CE 86CF FA21 27280 27285 2728B 8845 8850 8851 8852 8853 8854 4626 8888 8889 888A 888B 888C 888D 888E 888F 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 889A 889B 889C 889D 889E 889F 88A0 88A1 88A2 88A3 88A4 88A5 88A6 88A7 88A8 88A9 88AA 88AB 88AC 88AD 88AE 88B0 88AF 8982 467A 898F 8990 8991 8992 8993 8994 89CB 89D5 89D6 89D7 89D8 89D9 278C8 46BC 8A1B 8A1C 8A1D 8A1E 8A1F 8A20 8A21 8A22 8A23 8A24 8A25 8A26 8A27 8A28 8A29 8A2A 8A2B 8A2C 8A2D 8A2E 8A2F 8A30 8A31 8A32 8A33 2797A 8C0B 8C0C 8C0D 8C0E 8C0F 8C10 8C11 8C12 8C13 8C14 8C15 8C16 8C17 8C18 8C19 8C1A 8C1B 8C1C 8C1D 8C1E 8C39 8C3A 8C3B 8C49 4746 4747 8C58 8C59 8C5A 8C5B 8C5C 8C5D 8C7C 8C7D 8CA5 8CA6 8CA7 8CA8 8CA9 8CAA 8CAB 8CAC 8CAD 8CAE 8D47 8D48 8D49 8D4A 8D65 8D66 8D67 479B 8D79 8D7A 8D7B 8D7C 8D7D 8D7E 8D7F FA23 8DB9 8DBA 8DBB 8DBD 8DBE 8DBF 8DC0 8DC1 8DC2 8DC3 8DC4 8EAD 8EAE 8EAF 28218 2821A 4846 4847 4848 4849 484A 8ED6 8ED7 8ED8 8ED9 8EDA 8EDB 8EDC 8EDD 8EDE 8EDF 8EE0 8EE1 8EE2 8EE3 282CD 8F84 8F85 8F86 489B 900B 900C 900D 900E 900F 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 901A 901B 901C 901D 901E 901F 9020 9021 9022 9023 9024 9025 9026 9027 28501 90AB 90D4 90E8 90E9 90EA 90EB 90EC 90ED 90EE 90EF 90F0 90F2 90F3 90F4 90F7 90F8 90FD 2870F 28713 48ED 9153 9154 9155 9156 9157 9158 9159 915A 915B 915C 915D 915E 28804 91C8 91CE 91E3 91E4 91E5 91E6 91E7 91E8 91E9 91EA 91EB 91EC 91ED 91EE 91EF 91F0 91F1 91F2 91F3 91F4 91F5 91F6 91F7 91F8 91F9 91FA 91FB 91FC 28948 28949 94CF 94D0 94D1 94D2 94D3 94D4 94D5 94D6 94D7 94D8 94D9 94DA 94DB 94DC 94DD 94DE 94DF 94E0 94E1 94E2 94E3 94E4 94E5 94E6 94E7 94E8 94E9 94EA 94EB 94EC 94ED 94EE 94EF 94F0 94F1 94F2 94F3 94F4 94F5 94F6 94F7 9579 957A 9586 9587 9588 9589 958A 28CD2 9607 9608 9609 960A 960B 960C 960D 960E 960F 9610 966A 966B 966C 966D 966E 966F 9670 9671 9673 9674 9675 9676 9677 9678 9679 967A 967C 28EAC 28EB2 28EB3 96BF 96C0 96E9 96EA 96EB 291D5 291EB 976A 7ADF 7AE0 9802 9803 9804 9885 9886 9887 9888 98E1 98E5 98E6 9983 9984 9985 9986 9997 9A90 9A91 9A92 9A93 9A94 9A95 9A96 9AD9 9B5A 9C7E 9CE5 9E37 9E38 9E39 9E3A 9E3B 9E3C 9E3D 9E3E 9E3F 9E75 9E7F 9EA5 9EB8 9EBB 9ED2 9F81 9F9A 9F9B FDD0-280C 20046 4E81 4EB4 4EB5 5068 3473 347A 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 508A 508B 508C 508D 508E 508F 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 509A 509B 509C 509D 509E 509F 50A0 50A1 50A2 50A3 50A4 50A5 50A6 50A7 50A8 50A9 2030A 20325 515F 5160 204A3 6700 51D2 51D3 51D4 51D5 51D6 51F1 51F2 51FF 34FB 5269 5272 5273 5274 5275 52DB 52DC 52DD 52DE 5311 5312 20923 20954 3538 535A 53A4 53A5 53A6 53A7 53A8 53C5 35BF 35C1 35C4 35C5 35C7 35CA 35CE 5559 557A 557B 557C 557D 557E 557F 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 558A 558B 558C 558E 558F 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 559A 559B 559C 559D 559E 559F 55A0 55A1 55A2 55A3 55A4 55A5 55A6 55A7 55A8 55A9 55AA 55AB 55AC 55AD 55AE 55AF 55B0 55B1 55B2 55B3 55B4 55B5 55B7 55B8 55B9 55BA 55BB 55BC 55BD 55BE 5645 20DC8 20E04 20E09 20E0A 20E0D 20E0E 20E0F 20E10 20E11 20E16 20E1D 55DE 570C 570D 570E 5710 364E 5816 5817 5818 5819 581A 581B 581C 581D 581E 581F 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 582A 582B 582C 582D 582E 582F 5830 5831 5833 5834 5836 5837 5838 5839 583A 583B 583C 583E 583F 5840 5841 5842 5844 5845 5846 5847 5848 21375 21376 2138E 21398 2139C 58F9 58FA 58FB 5921 5960 5961 5963 5964 5965 36F5 3700 3701 3703 3704 5A77 5A78 5A79 5A7A 5A7B 5A7C 5A7D 5A7E 5A7F 5A80 5A81 5A82 5A83 5A84 5A85 5A86 5A87 5A88 5A89 5A8A 5A8B 5A8C 5A8D 5A8F 5A91 5A92 5A93 5A94 5A95 5A96 5A97 5A98 5A99 5A9A 5A9B 5A9C 5A9D 5A9E 5A9F 5AA0 5AA1 5AA2 5AA3 5AA4 5AA5 5AA6 5AA7 5AA8 5AA9 5AAA 5AAB 5AAC 5AAD 5AAE 5AAF 5ACF 217AB 217B0 217B1 217B2 217B3 217B4 217B5 217C3 217C7 217D9 217DA 217DB 217DC 217DF 5B71 2197C 21980 5B73 3762 5BCA 5BCB 5BCC 5BCD 5BCE 5BCF 5BD0 5BD1 5BD2 5BD3 5BD4 5BD5 5BEA 21A45 21A4B 5C0A 5C0B 5C0C 5C1E 5C30 5C31 5C5E 5C5F 5C61 21CA2 21CA5 5D31 5D32 5D33 5D34 5D35 5D36 5D37 5D38 5D39 5D3A 5D3B 5D3C 5D3D 5D3E 5D3F 5D40 5D41 5D42 5D43 5D44 5D45 5D46 5D47 5D48 5D49 5D4B 5D4C 5D4D 5D4E 5D4F 5D50 5D51 5D52 5D53 5D54 5D55 5D56 5D57 5D58 5D59 5D5A 5D5B 5D5C 5D5D FA11 21E89 21EA4 21EA8 5D6B 382D 5DEF 5DFD 22045 22049 5E3D 5E3F 5E40 5E41 5E42 5E43 5E44 5E45 5E46 5E47 5E49 220FC 5E48 5E7E 5EBD 5EBF 5EC0 5EC1 5EC2 5EC3 5ECA 5EC4 5F11 5F3A 5F3B 5F3C 5F3D 5F3E 5F58 5F6D 5F9A 5FA5 5FA6 5FA7 5FA8 5FA9 5FAA 5FAB 22530 60B2 60B3 60B6 60B9 60C1 60C4 60C9 60CC 60CE 60D1 60D2 60D6 60E0 60E1 60E2 60E3 60E5 60E9 60EA 60EB 3961 3962 3965 60F0 60F1 60F2 60F4 60F5 60F6 60F8 60FA 60FB 60FC 60FD 60FE 60FF 6100 6103 6104 6105 6107 6109 610A 610B 610C 610E 6110 6111 6112 6113 6114 6115 6116 6118 611C 611D 611E 6120 6121 6122 6123 6124 6125 6126 6168 2272A 22775 22781 39B8 621E 621F 6249 624A 638C 6394 63A3 63B0 63B1 3A17 3A18 63BE 63BF 63C0 63C1 63C2 63C3 63C4 63C6 63C7 63C8 63C9 63CA 63CB 63CC 63CD 63CE 63CF 63D0 63D1 63D2 63D3 63D4 63D5 63D6 63D7 63D8 63D9 63DA 63DB 63DC 63DD 63DE 63DF 63E0 63E1 63E2 63E3 63E5 63E6 63E8 63E9 63EA 63EC 63ED 63EE 63EF 63F0 63F2 63F3 63F4 63F5 63F6 63F7 63F8 63F9 63FA 63FB 63FC 63FD 63FE 63FF 6400 6401 6402 6403 6404 6405 6452 22C26 22C27 22C38 22C4C 22C51 22C55 6461 6532 3A8F 3A90 3A97 655C 655E 655F 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 656A 22F74 658C 6590 6591 3AB8 659D 2307D 2307E 659E 3AC0 65AE 65AF 65B1 65D0 65D1 23103 3AFB 3B00 666A 666B 666C 666D 666E 666F 6670 6671 6672 6673 6674 6675 6676 6677 6679 667A 667B 667C 667D 667E 667F 6680 6681 6682 6683 6691 231F7 231F8 231F9 2320F 66FE 66FF 6701 6702 3B38 671C 671D 671E 671F 68B4 3B76 3B78 3B79 3B7A 3B7B 3B7C 3B7D 3B7E 3B7F 3B80 68C3 68C4 68C5 68C6 68C7 68C8 68C9 68CA 68CB 68CC 68CD 68CE 68CF 68D0 68D1 68D2 68D3 68D4 68D5 68D6 68D7 68D8 68D9 68DA 68DB 68DC 68DD 68DE 68DF 68E0 68E1 68E2 68E3 68E4 68E5 68E6 68E7 68E8 68E9 68EA 68EB 68EC 68ED 68EE 68EF 68F0 68F1 68F2 68F3 68F4 68F5 68F6 68F7 68F8 68F9 68FA 68FB 68FC 68FD 68FE 68FF 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 690A 690B 690C 690D 690E 690F 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 691A 691B 691C 691D 691E 691F 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 692A 692B 692C 692D 692E 234E5 23519 23530 696E 6970 6B39 6B3A 6B3B 6B3C 6B3D 6B3E 6B3F 6B6E 6B6F 3C64 3C66 3C68 3C69 6B94 6B95 6B96 6B97 6B98 6B99 6B9A 6BBC 6BBD 6BBE 6BEF 6BF0 6BF1 6BF2 6BF3 6BF4 6BF5 6BF6 6C2C 6C2D 6C2E 6C2F 6C30 6DFC 6DFE 3D13 3D1D 3D20 3D22 6E03 6E18 6E19 6E1B 6E1C 6E1D 6E1E 6E1F 6E20 6E21 6E22 6E23 6E24 6E25 6E26 6E27 6E28 6E29 6E2A 6E2B 6E2C 6E2D 6E2E 6E2F 6E30 6E31 6E32 6E33 6E34 6E35 6E36 6E37 6E38 6E39 6E3A 6E3B 6E3C 6E3D 6E3E 6E3F 6E40 6E41 6E42 6E43 6E44 6E45 6E46 6E47 6E48 6E49 6E4A 6E4B 6E4C 6E4D 6E4E 6E4F 6E50 6E51 6E52 6E53 6E54 6E55 6E56 6E57 6E58 6E59 6E5A 6E5B 6E5C 6E5D 6E5E 6E5F 6E60 6E61 6E62 6E63 6E64 6E65 6E66 6E67 6E68 6E69 6E6A 6E6B 6E6D 6E6E 6E6F 6E70 6E71 6E72 6E73 6E75 6E76 6E77 6E78 6E79 6E7A 6E7B 6E7C 6E7D 6E7E 6E7F 6E80 6E81 6E82 6E83 6E84 6E85 6E86 6E87 6E88 6E89 6E8A 6E8B 6E8C 6ECB 6EDE 23E11 23E2C 23E2D 23E2E 23E2F 23E30 23E31 23E39 70FB 3DC6 3DC7 3DC9 3DCC 3DCD 7119 711A 711B 711C 711D 711E 711F 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 712A 712B 712C 712D 712E 712F 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 713A 713B 713C 713D 713E 713F 7140 716E 24276 24277 24278 24284 24293 24295 242A5 7232 724B 724C 724D 245C8 725A 3E43 7280 7282 7283 7284 7285 7286 7287 7288 7289 728A 728B 24674 7306 730B 730C 7312 732B 7322 7323 7324 7325 7326 7327 7328 7329 732C 732D 732F 7330 7331 7332 7333 7334 7335 7336 7338 7339 247E0 3ED1 3ED6 3EDA 3EDB 73F7 7414 7415 7416 7417 7418 7419 741A 741B 741C 741D 741F 7420 7421 7422 7423 7424 7425 7426 7428 7429 742A 742B 742C 742D 742E 742F 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 743A 743B 743C 2497B 2497F 24982 24988 24989 2498A 2498B 2498C 2498D 2498E 2498F 24994 249A4 249A7 249A9 249AB 249AC 249AD 74F9 74FA 74FB 74FC 7524 7525 7526 752F 24C09 756A 756B 756C 756D 756E 756F 7572 7573 7574 7571 758E 758F 3F93 3F98 75D7 75D8 75D9 75DA 75DB 75DC 75DD 75DE 75DF 75E0 75E1 75E2 75E3 75E4 75E5 75E6 75E7 75E8 75E9 75EA 75EB 24DB8 767B 767C 7692 7693 7694 7695 7696 76B3 76B4 4003 76D9 76DA 76DC 4039 4040 7742 7743 7744 7745 7746 7747 7748 7749 774A 774B 774C 774D 774E 774F 7750 7751 77DE 77DF 77EC 77ED 785C 785D 785E 785F 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 786A 786B 786C 786D 786E 786F 7870 7871 7872 7873 7874 7875 7876 7877 4109 7966 7970 7971 7972 7973 7974 7975 7976 7977 7978 7984 25695 79BC 79FF 7A00 7A01 7A02 7A03 7A04 7A05 7A07 7A08 7A09 7A0A 7A0B 7A0C 7A0D 7A0E 257C7 7A96 7A97 7A98 7A99 7A9B 7A9C 7A9D 7AE2 7AE3 7AE4 7AE5 7AE6 7AE7 41ED 41EE 41EF 7B3F 7B40 7B41 7B42 7B43 7B44 7B45 7B46 7B47 7B48 7B49 7B4A 7B4B 7B4C 7B4D 7B4E 7B4F 7B50 7B51 7B52 7B53 7B54 7B55 7B56 7B57 7B58 7B59 7B5A 7B5B 7B5C 7B5D 7B6C 4283 7C9E 7C9F 7CA0 7CA1 7CA2 7CA4 7CA5 7CA6 7CA7 7CA8 7CA9 7CAA 7CAB 7CAC 7CAD 7D2A 7D2B 7D4D 7D4E 7D4F 7D50 7D51 7D52 7D53 7D54 7D55 7D56 7D57 7D58 7D59 7D5A 7D5C 7D5D 7D5E 7D5F 7D60 7D61 7D62 7D63 7D64 7D65 7D66 7D67 7D68 7D69 7D6A 7D6B 7D6C 7D6D 7D6E 7D6F 7D70 7D71 7D72 7D73 7D74 7D75 7D76 7D77 7D7E 433B 7F02 7F03 7F04 7F05 7F06 7F07 7F08 7F09 7F0A 7F0B 7F0C 7F0D 7F0E 7F0F 7F10 7F11 7F12 7F13 7F14 7F15 7F16 7F17 7F18 7F3E 7F3F 7F40 7F64 7F65 7F66 436E 436F 7FA0 7FA1 7FA2 7FD3 7FD4 7FD5 7FD6 7FD7 7FD8 7FD9 7FDA 800B 8020 804E 804F 8050 8051 8052 8053 8054 8060 26572 80D4 80FE 8114 8120 3B39 4400 4401 4402 8139 813A 813B 813C 813D 813E 813F 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 814A 814B 814C 814D 814E 814F 8151 8152 8153 8154 8155 8156 8157 8158 8159 815A 26716 26741 8174 81E6 81EE 81EF 81F0 26911 81F5 81F6 81F7 81F8 81F9 8203 8204 8212 821C 823C 823D 823E 823F 26A34 8275 44B0 44B7 44C0 8312 833B 8346 839A 83BE 83BF 83C0 83C1 83C2 83C3 83C4 83C5 83C6 83C7 83C8 83C9 83CA 83CB 83CC 83CD 83CE 83CF 83D0 83D1 83D2 83D3 83D4 83D5 83D6 83D7 83D8 83DA 83DB 83DC 83DD 83DE 83DF 83E0 83E1 83E2 83E3 83E4 83E5 83E6 83E7 83E8 83E9 83EA 83EB 83EC 83ED 83EE 83EF 83F0 83F1 83F2 83F3 83F4 83F5 83F6 83F7 83F8 83F9 83FA 83FB 83FC 83FD 83FE 83FF 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 840A 840B 840C 840D 840E 840F 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 841A 841B 841C 841D 841E 841F 8420 8421 8422 8423 8424 8426 8427 8457 26C40 26C7E 26C7F 26C80 26C81 26C82 26CA4 26CB7 26CB8 26CBD 26CC0 8438 865B 865D 45AD 45AF 8688 86D0 86D1 86D2 86D3 86D4 86D5 86D7 86D8 86D9 86DA 86DB 86DC 86DD 86DE 86DF 86E0 86E1 86E2 86E3 86E4 86E5 86E6 86E7 86E8 86E9 86EA 86EB 86EC 86ED 86EE 86EF 86F0 86F1 86F2 86F3 86F4 272B2 272B6 8846 8847 8848 8849 8855 8856 8857 88B1 88B2 88B3 88B4 88B5 88B6 88B7 88B8 88B9 88BA 88BB 88BC 88BD 88BE 88BF 88C0 88C1 88C2 88C3 88C4 88C5 88C6 88C7 88C8 88C9 88D7 27694 8901 8983 8984 8999 8995 8997 8998 899A 89CC 89CD 89DA 89DB 89DD 89DE 46CF 46D0 8A34 8A35 8A36 8A37 8A38 8A39 8A3A 8A3B 8A3C 8A3D 8A40 8A41 8A42 8A43 8A44 8A45 8A46 8A47 8A48 8A49 8A4A 8A4B 8A4C 8A4D 8A4E 8A4F 8A50 8A51 8A52 8A53 8A54 8A55 8A56 8A57 8A58 8A59 8A5A 8A5B 8A5C 8A5D 8A5E 8A5F 8A60 279A0 8C1F 8C20 8C21 8C22 8C23 8C24 8C25 8C26 8C27 4748 8C5E 8C5F 8C60 8C61 8C7E 8C7F 8C80 8C81 8C82 8C83 8CAF 8CB0 8CB1 8CB3 8CB4 8CB5 8CB6 8CB7 8CB8 8CB9 8CBA 8CBB 8CBC 8CBD 8CBE 8CBF 8CC0 8CC1 27D53 27D54 8D4B 8D4C 8D4D 8D4E 8D4F 8D50 8D51 8D52 8D53 8D54 8D55 47A1 47A3 8D80 8D81 8D82 8D83 8D84 8D85 8D86 8D87 8D88 8D89 8D8A 8D8B 47ED 8DC5 8DC6 8DC7 8DC8 8DC9 8DCA 8DCB 8DCC 8DCD 8DCE 8DCF 8DD1 8DD2 8DD3 8DD4 8DD5 8DD6 8DD7 8DD8 8DD9 8DDA 8DDB 8DDC 8DDD 8DDE 8DF5 27FF9 28002 28009 8EB0 4852 8EE4 8EE5 8EE6 8EE7 8EE8 8EE9 8EEA 8EEB 8EEC 8EEE 8EEF 8EF0 8EF1 8EF2 8EF3 8EF4 8EF5 8EF6 8EF7 8EF8 8EF9 8EFA 8EFB 8EFC 8EFD 282E2 8F87 8F88 8F89 8F8A 8F8B 8F8C 8F8D 8F8E 8F9C 8F9D 28412 9028 9029 902A 902B 902C 902D 902E 902F 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 903A 903B 2853C 2853D 90F5 48D0 90F9 90FB 90FC 90FE 90FF 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 910A 912C 48F3 915F 9160 9161 9162 9163 9164 9165 91C9 91CA 91CF 491E 4920 91FD 91FE 91FF 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 920A 920B 920C 920D 920E 920F 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 921A 921B 921C 921D 921E 921F 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 922A 922B 922C 28956 28964 94F8 94F9 94FA 94FB 94FC 94FD 94FE 94FF 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 950A 950B 950C 950D 950E 950F 9510 9511 9512 9513 9514 9515 957B 958B 958C 958D 958E 958F 9590 9591 9592 9593 9594 9595 9596 9597 9611 9612 9613 9614 9615 9672 967B 967D 967E 967F 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 968A 968B 968C 968D 968E 9690 28ED9 28EE7 96C1 96C2 96C3 96C4 96C5 96C6 96C7 96C8 96EC 96ED 96EE 96EF 96F0 96F1 96F2 96F3 29088 2908B 9753 9754 975F 976B 976C 976D 976E 976F 9770 9771 97CC 97E9 9805 9806 9807 9808 9889 988A 988B 988C 988D 988E 988F 98A9 98AA 2959E 98D3 98E7 98E8 98E9 98EA 98EB 98ED 98EF 98F0 98F2 9987 9988 998A 998B 99AD 99AE 9A97 9A98 9A99 9A9A 9A9B 9AA9 9AE0 9C7F 9C80 9C81 9C82 9C83 9CE6 9E40 9E41 9E42 9E43 9E44 9E45 9E46 9E47 9E48 9EC3 9EC4 9ECD 9ED1 9EF9 9F0B 9F82 FDD0-280D 4E82 4E83 4E84 4EB6 4EB7 347D 347E 50AA 50AB 50AC 50AD 50AE 50AF 50B0 50B1 50B2 50B3 50B4 50B5 50B6 50B7 50B8 50B9 50BA 50BB 50BC 50BD 50BE 50BF 50C0 50C1 50C2 50C3 50C4 50C5 50C6 50C7 50C8 50C9 50CA 50CB 50CC 50CD 20341 20345 20346 20347 203B5 5161 517E 517F 51D7 5277 5278 5279 527A 527B 527C 527D 527E 527F 52DF 52E0 52E1 52E2 52E3 52E4 52E5 52E6 52E7 3532 3533 3534 532F 5380 5381 53AA 53AB 53AF 53E0 FA0E 35D2 35D6 35DB 35DD 35E0 558D 55BF 55C0 55C1 55C2 55C3 55C4 55C5 55C6 55C7 55C8 55C9 55CA 55CB 55CC 55CD 55CE 55CF 55D0 55D1 55D2 55D3 55D4 55D5 55D6 55D7 55D8 55D9 55DA 55DB 55DC 55DD 55DF 55E0 55E1 55E2 55E3 55E4 55E5 55E6 55E7 55E8 55E9 55EA 55EB 55EC 55ED 55EE 55EF 55F0 55F1 55F2 55F3 55F4 55F5 20E4C 20E6D 20E73 20E75 20E76 20E77 20E78 20E79 20E7A 20E7B 20E8C 20E96 20E98 20E9D 20EA2 20EAA 20EAB 20EAC 20EB6 5711 5712 5713 5714 5715 365F 583D 5843 5849 584A 584B 584C 584D 584E 584F 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 585A 585B 585C 585D 585E 585F 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 586A 586B 586C 586D 586E 586F 5870 5871 213C5 213C6 58FC 5966 5967 5968 21661 3708 370A 370D 5A90 5AB0 5AB1 5AB2 5AB3 5AB4 5AB5 5AB6 5AB7 5AB8 5AB9 5ABA 5ABB 5ABC 5ABD 5ABE 5ABF 5AC0 5AC1 5AC2 5AC3 5AC4 5AC5 5AC6 5AC7 5AC8 5AC9 5ACA 5ACB 5ACC 5ACD 5ACE 5AD0 5AD1 5AD2 5AD3 5AD4 217EF 217F5 217F6 217F8 217F9 217FA 217FB 217FC 5B74 21983 21988 5B76 3766 5BD6 5BD7 5BD8 5BD9 5BDA 5BDB 5BDC 5BDD 5C1F 5C20 5C32 5C33 5C34 21CAC 37F2 37F8 5D4A 5D5E 5D5F 5D60 5D61 5D62 5D63 5D64 5D65 5D66 5D67 5D68 5D69 5D6A 5D6C 5D6D 5D6E 5D6F 5D70 5D71 5D72 5D73 5D74 5D75 5D76 21EC8 21ED5 5DF0 5E4A 5E4B 5E4C 5E4D 5E4E 5E4F 5E79 5EC5 5EC6 5EC7 5EC8 5EC9 5ECB 5ECC 2227C 5F12 5F3F 5F40 5F41 5F42 5F59 5F5A 22465 5F6E 5FAC 5FAD 5FAE 5FAF 5FB0 3963 3964 3966 60F3 60F7 60F9 6101 6102 6106 6108 610D 610F 6117 6119 611A 611B 611F 6127 6129 612A 612B 612D 612E 612F 6130 6131 6132 6134 6135 6136 6137 6139 613A 613C 613D 613E 6140 6143 6144 6145 6146 6149 614A 614C 614D 614E 614F 6151 227B4 227B5 227CD 6226 6220 6221 6222 6223 6224 6225 63E7 63EB 63F1 3A20 3A23 3A26 3A29 3A2A 6406 6407 6408 6409 640A 640B 640C 640D 640E 640F 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 641A 641B 641C 641D 641E 641F 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 642A 642C 642D 642E 642F 6430 6432 6433 6435 6436 6437 6438 6439 643A 643C 643D 643E 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 644A 22C62 22C88 22C9B 22CA1 22CA9 22CB2 63C5 6431 656D 656B 656C 656E 656F 6570 6592 295B0 659F 65B0 65D2 65D3 65D4 65D5 65E4 6678 3B01 3B02 3B03 3B04 3B05 3B06 3B07 3B08 3B09 3B0A 3B0B 3B0C 6684 6685 6686 6687 6688 6689 668A 668B 668C 668D 668E 668F 6690 6692 6693 6694 6695 6696 6697 6698 6699 23225 2322F 23231 23232 23233 23234 6703 6720 6721 3B96 3B99 692F 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 693A 693B 693C 693D 693E 693F 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 694A 694B 694C 694D 694E 694F 6950 6951 6952 6953 6954 6955 6957 6958 6959 695A 695B 695C 695D 695E 695F 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 696A 696B 696C 696D 696F 6971 6972 6973 6974 6975 6976 6977 6978 6979 697A 697B 697C 697D 697E 697F 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 698B 698C 6994 6998 FA13 2355A 23567 23595 23599 2359C 3C3C 3C3E 6B40 6B41 6B42 6B43 6B44 6B45 6B46 6B47 6B48 6B71 6B72 6B73 3C6E 6B9B 6B9C 6BBF 6BC0 6BC1 6BC2 23AA7 6BD3 6BF7 6BF8 6BF9 6BFA 6BFB 6BFC 6BFD 6C31 6E6C 3D26 3D32 3D33 3D3B 6E8D 6E8E 6E8F 6E90 6E91 6E92 6E93 6E94 6E95 6E96 6E97 6E98 6E99 6E9A 6E9B 6E9C 6E9D 6E9E 6E9F 6EA0 6EA1 6EA2 6EA3 6EA4 6EA5 6EA6 6EA7 6EA8 6EA9 6EAA 6EAB 6EAC 6EAD 6EAE 6EAF 6EB0 6EB1 6EB2 6EB3 6EB4 6EB5 6EB6 6EB7 6EB8 6EB9 6EBA 6EBB 6EBC 6EBD 6EBE 6EBF 6EC0 6EC1 6EC2 6EC3 6EC4 6EC5 6EC6 6EC7 6EC8 6EC9 6ECA 6ECD 6ECF 6ED0 6ED1 6ED2 6ED3 6ED4 6ED6 6ED7 6ED8 6ED9 6EDB 6EDC 6EDD 6EDF 6EE0 6EE1 6EE2 6EE3 6EE4 6EE5 6EE6 6EE7 6EE8 6EE9 6EEA 6F13 23E88 23E89 23E8A 23E8B 23EB9 23EBF 6EDA 3BA1 3DD3 3DDB 7141 7142 7143 7144 7145 7146 7147 7148 7149 714A 714B 714C 714D 714E 714F 7150 7151 7152 7153 7154 7156 7157 7158 7159 715A 715C 715D 715E 715F 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 716A 716B 716C 716D 716F 7170 7171 7172 7173 7174 7175 7176 7177 7178 717A 242C1 242C9 242CA 242EE 242FA 24521 723A 7243 724E 724F 7250 7251 7252 3E48 728C 728D 728E 728F 7290 7291 24697 732E 7337 7341 733A 733B 733C 733D 733E 733F 7340 7342 7345 7346 7347 7348 7349 734A 24812 24823 3ED7 7427 3EDE 3EE1 3EE2 741E 743D 743E 743F 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 744A 744B 744C 744D 744E 744F 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 745A 745B 745C 745D 745E 745F 249B7 249B8 249B9 249BA 249BB 249C5 249D0 249DA 249DE 249DF 249E3 249E5 746F 74E1 74FD 74FE 74FF 7501 751D 751E 3F63 7575 7576 7577 7578 7579 757A 24C9E 24C9F 75EC 75ED 75EE 75EF 75F0 75F1 75F2 75F3 75F4 75F5 75F6 75F7 75F8 75F9 75FA 75FB 75FC 75FD 75FE 75FF 7600 7601 7602 7603 7604 7605 7606 24DEA 24DEB 760F 7610 7697 7698 7699 24F82 24F86 76B5 4004 76DD 76DE 76DF 4045 7752 7753 7754 7755 7756 7757 7758 7759 775A 775B 775C 775D 775E 775F 7760 7762 7763 7764 7765 7766 7767 7768 7769 776A 776B 776C 776D 251CD 251E3 251E6 251E7 7761 7779 77E0 77EE 40BB 40BF 7878 7879 787A 787B 787C 787D 787F 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 788A 788B 788C 788D 788E 788F 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 789A 789B 789C 78B0 410E 7979 797A 797B 797C 797D 797E 797F 7980 7981 7982 7983 7985 7986 79BD 842C 7A0F 7A10 7A11 7A12 7A13 7A14 7A15 7A16 7A17 7A18 7A19 7A1A 7A1B 7A1C 7A1D 7A1E 7A1F 7A20 7A21 7A22 7A23 7A24 7A25 257DF 257E0 257E1 7A9E 7A9F 7AA0 7AA1 7AA2 7AA3 7AA4 7AA5 7AA6 7AA7 259AC 41CF 7AE8 7AE9 7AEA 7AEB 25A95 41F8 41F9 41FB 41FC 41FD 41FE 41FF 4200 7B5E 7B5F 7B60 7B61 7B62 7B63 7B64 7B65 7B66 7B67 7B68 7B69 7B6A 7B6B 7B6D 7B6E 7B6F 7B70 7B71 7B72 7B73 7B74 7B76 7B77 7B78 7B79 7B7A 7B7B 7B7C 7B7D 7B7E 7B7F 7B80 7BC0 25B74 25B89 428C 7CAE 7CAF 7CB0 7CB1 7CB2 7CB3 7CB4 7CB5 7CC0 25E81 25E82 25E83 7D5B 7D78 7D79 7D7A 7D7B 7D7C 7D7D 7D7F 7D80 7D81 7D82 7D83 7D84 7D85 7D86 7D87 7D88 7D89 7D8A 7D8B 7D8C 7D8D 7D8E 7D8F 7D90 7D91 7D92 7D93 7D94 7D95 7D97 7D98 7D99 7D9A 7D9B 26029 7F19 7F1A 7F1B 7F1C 7F1D 7F1E 7F1F 7F20 7F21 7F22 7F23 7F24 7F67 7F68 7F69 7F6A 7F6B 7F6C 7F6D 7F6E 7F72 262D0 7FA3 7FA4 7FA5 7FA6 7FA7 7FA8 7FA9 7FAA 7FDB 7FDC 7FDD 8021 8022 8055 8056 8057 8058 8084 8085 8086 4413 5E50 815B 815C 815D 815E 815F 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 816A 816B 816C 816D 816E 816F 8170 8171 8172 8173 8175 8176 8177 8178 8179 817A 817B 817C 817D 817E 8205 821D 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 26A42 44C5 44CE 83BB 83D9 8425 8428 8429 842A 842B 842D 842E 842F 8430 8431 8432 8433 8434 8435 8436 8437 8439 843A 843B 843C 843D 843E 843F 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 844A 844B 844C 844D 844E 844F 8450 8451 8452 8453 8454 8455 8456 8458 8459 845A 845B 845C 845D 845E 845F 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 846A 846B 846C 846D 846E 846F 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 847A 847B 847C 847D 847E 847F 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 848B 848C 848D 848E 848F 26CC3 26CD1 26D22 26D23 26D24 26D25 26D26 26D27 26D28 26D29 26D2A 26D51 84C5 84C8 84F1 8507 865C 865E 865F 86D6 86F5 86F6 86F7 86F8 86F9 86FA 86FB 86FC 86FD 86FE 86FF 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 870A 870B 870C 870D 870E 870F 8710 8713 8714 8715 8716 8717 8746 272E6 874D 8858 8859 88CA 88CB 88CC 88CD 88CE 88CF 88D0 88D1 88D2 88D3 88D4 88D5 88D6 88D8 88D9 88DA 88DB 88DC 88DD 88DE 88DF 88E0 88E1 88E3 88E4 88E5 8985 4680 899B 899C 89CE 89DC 89DF 89E0 89E1 89E2 89E3 89E4 89E5 89E6 89E7 8A3E 8A3F 8A61 8A62 8A63 8A64 8A65 8A66 8A67 8A68 8A69 8A6A 8A6B 8A6C 8A6D 8A6E 8A6F 8A70 8A71 8A72 8A73 8A74 8A75 8A76 8A77 8A78 8A79 8A7A 8A7B 8A7C 8A7D 8A7E 8A7F 8A80 8A81 8A82 8A83 8A84 8A85 8A86 8A87 8A88 8A89 8A8A 8AA0 279DD 8C28 8C29 8C2A 8C2B 8C2C 8C3C 8C4A 8C4B 8C62 8C63 8C64 8C65 8C66 8C84 8C85 8C86 8C87 8C88 8C89 8C8A 8CB2 8CC2 8CC3 8CC4 8CC5 8CC6 8CC7 8CC8 8CC9 8CCA 8CCB 8CCC 8CCD 8CCE 27D66 27D73 27D84 8D56 8D57 8D68 8D69 8D6A 47A6 8D8C 8D8D 8D8E 8D8F 8D90 8D91 8D92 8D93 8D94 8DD0 8DBC 8DDF 8DE0 8DE1 8DE2 8DE3 8DE4 8DE5 8DE6 8DE7 8DE8 8DE9 8DEA 8DEB 8DEC 8DED 8DEE 8DEF 8DF0 8DF1 8DF2 8DF3 8DF4 8DF6 8DF7 8DF8 8DF9 8DFA 8DFB 2801E 28023 28024 4837 8EB1 8EB2 8EED 8EFE 8EFF 8F00 8F01 8F02 8F03 8F04 8F05 8F06 8F07 8F08 8F09 8F0A 8F0B 8F0C 8F8F 8F90 8F91 8F92 8F93 8F94 8F9E 8F9F 8FA0 8FB2 903C 903D 903E 903F 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 904A 904B 904C 904D 904E 904F 9050 9051 9052 9053 9054 9055 9056 9057 2856C 90CC 910B 910C 910D 910E 910F 9110 9111 9112 9113 9114 9115 9116 9117 9166 9167 9168 9169 916A 916B 916C 916D 916E 916F 9170 9171 2882B 922E 922F 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 923A 923B 923C 923D 923E 923F 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 924A 924B 924C 924D 924E 924F 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 925A 925B 925C 925D 925E 925F 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 926A 926B 926C 926D 926E 926F 9270 9271 9272 9273 9274 928F 28968 2896C 2897E 9516 9517 9518 9519 951A 951B 951C 951D 951E 951F 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 952A 952B 952C 952D 952E 952F 9530 9531 4989 9598 9599 959A 959B 959C 959D 959E 959F 95A0 9616 9617 9618 9619 968F 49DF 9691 9692 9693 9694 9695 9696 9697 9698 FA29 96C9 96CA 96CB 96CD 96CE 96CF 96F4 96F5 96F6 96F7 96F8 96F9 96FA 96FB 96FC 96FD 96FE 29093 9755 9756 9772 9773 9774 9775 9776 9777 9778 9779 97EA 97EB 97EE 97F4 97F5 9809 4AB4 980A 980B 980C 980D 980E 980F 9810 9811 9812 9813 9890 9891 9892 9893 9894 9895 9896 98AB 98AC 98D4 4B26 98EC 98EE 98F1 98F3 98F4 98F5 98F6 98F7 98F9 98FB 98FC 98FD 98FE 98FF 9989 998C 998D 998E 998F 9990 999A 99AF 99B0 99B1 99B2 99B3 99B4 99B5 9A9C 9A9D 9A9E 9A9F 9AAA 9AAB 9AAC 9AAD 9AAE 29A28 9AE1 9AE2 9B3D 9B5B 9B5C 9B5D 9B5E 9C84 9C85 9C86 9C87 9C88 9C89 9C8A 9C8B 9C8C 9C8D 9C8E 9C8F 9C90 9CE7 9CE8 9CE9 9CEA 9CEB 9CED 9CEE 9CEF 9CF0 9E49 9E4A 9E4B 9E4C 9E4D 9E4E 9E4F 9E50 9E51 9E52 9E53 9E54 9E80 9E81 9E82 2A2FF 9EFD 9F0C 9F0E 9F13 9F14 9F20 9F83 9F84 9F85 9F86 FDD0-280E 2004E 221A1 50CE 50CF 50D0 50D1 50D2 50D3 50D4 50D5 50D6 50D7 50D8 50D9 50DA 50DB 50DC 50DD 50DE 50DF 50E0 50E1 50E2 50E3 50E4 50E5 50E6 50E7 50E8 50E9 50EA 50EB 50EC 50ED 50EE 50EF 50F0 50F1 50F3 50F4 50F7 2037E 2037F 20380 203A0 203A7 50F2 5162 51A9 51D8 51F3 51F4 3500 3504 3506 5280 5281 5282 5283 5284 3522 52E8 52E9 52EA 52EB 52EC 52ED 3535 5330 5331 5332 3551 53AC 53AD 53AE 53B0 53C6 20B0D 3561 55F6 55F7 55F8 55F9 55FA 55FB 55FC 55FD 55FE 55FF 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 560A 560B 560C 560D 560E 560F 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 561A 561B 561C 561D 561E 5621 5622 5623 5624 5625 5626 5627 5651 20ED7 20ED8 20EDD 20EF8 20EF9 20EFA 20EFB 20F1D 20F26 20F2D 20F2E 20F30 20F31 20F3B 20F4C 561F 5628 5716 5717 5718 5719 3665 3666 5872 5873 5874 5875 5876 5877 5878 5879 587A 587B 587C 587D 587E 587F 5881 5882 5883 5884 5885 5886 5887 5888 5889 588A 588B 588C 588D 588E 588F 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 589A 589B 213ED 213FE 21413 21416 58AD 58FD 58FE 5910 5922 5923 5924 5925 5969 596A 596B 596C 371C 371E 3720 3722 5AD5 5AD6 5AD7 5AD8 5AD9 5ADA 5ADB 5ADC 5ADD 5ADE 5ADF 5AE0 5AE1 5AE2 5AE3 5AE4 5AE5 5AE6 5AE7 5AE8 5AE9 5AEA 5AEB 5AEC 5AED 5AEE 5AEF 5AF0 5AF1 5AF2 21820 21828 21829 2182A 2182D 21839 2183A 2183B 21840 21845 5AF3 5B75 5B77 21996 5BDE 5BDF 5BE0 5BE1 5BE2 5BE3 5BE4 5BE5 5BE6 5BE7 5BE8 5C0D 5C21 5C62 5C63 37FB 3800 3801 3804 5D77 5D78 5D79 5D7A 5D7B 5D7C 5D7D 5D7E 5D7F 5D80 5D81 5D82 5D83 5D84 5D85 5D86 5D87 5D88 5D89 5D8A 5D8B 5D8C 5D8D 5D8E 5E51 5E52 5E53 5E54 5E55 5E56 5E57 5E58 5E59 5E5B 2212A 5E63 5ECD 5ECE 5ECF 5ED0 5ED1 5ED2 5ED3 5ED4 5ED5 5ED6 5ED7 5ED8 5ED9 5EDC 5F0A 38C3 5F43 5F44 5F45 5F46 38D1 5F6F 5F70 5FB1 5FB3 5FB4 22554 5FB6 6128 612C 6133 6138 613B 613F 6141 6142 6147 6148 614B 6150 3980 6152 6153 6154 6156 6158 615A 615B 615E 615F 6160 6161 6162 6163 6165 6169 616A 616C 616F 6171 6172 6173 6174 6175 6177 617A 617B 617D 6180 6181 6186 6188 22803 6227 6228 6229 622A 622B 622C 642B 6434 643B 643F 3A2F 3A31 3A32 3A33 3A34 3A35 3A36 3A37 3A38 3A39 644B 644C 644D 644E 644F 6450 6451 6453 6454 6455 6457 6458 6459 645A 645B 645C 645D 645E 645F 6460 6462 6463 6464 6465 6466 6467 646A 646B 646C 646D 6471 6472 6473 6474 6475 6476 6477 6478 647A 647B 647C 647D 647E 647F 6481 6482 6484 6487 22CB7 22CC2 22CC6 22CC9 22D07 22D08 22D12 6456 64A6 6571 6572 6573 65A0 65A1 65B2 230B7 65D6 65D7 3B0D 3B0E 3B0F 3B10 669A 669B 669C 669D 669E 669F 66A0 66A1 66A2 66A3 66A4 66A5 66A6 66A7 66A8 23262 6704 6705 3B3A 3B3B 6722 3BBC 698A 698D 698E 698F 6990 6991 6992 6993 6995 6996 6997 6999 699A 699B 699C 699D 699E 699F 69A0 69A1 69A2 69A3 69A4 69A5 69A6 69A7 69A8 69A9 69AA 69AB 69AC 69AD 69AE 69AF 69B0 69B1 69B2 69B3 69B4 69B5 69B6 69B7 69B8 69B9 69BA 69BB 69BC 69BD 69BE 69BF 69C0 69C1 69C2 69C3 69C4 69C5 69C6 69C7 69C8 69C9 69CA 69CB 69CC 69CD 69CE 69CF 69D0 69D1 69D2 69D3 69D4 69D5 69D6 69D7 69D8 69D9 69DA 69DB 69DC 69DD 69DE 69DF 69E0 69E1 6A2E FA14 235CD 235CE 235CF 235F3 23600 6A03 6B49 6B4A 6B4B 6B4C 6B4D 6B70 6B74 6B9D 6B9E 6B9F 6BA0 6BA1 6BC3 6BC4 23AFA 6BFE 6C32 6C33 6ECE 3D3D 3D46 6ECC 6EEB 6EEC 6EED 6EEE 6EEF 6EF0 6EF1 6EF2 6EF3 6EF4 6EF5 6EF6 6EF7 6EF8 6EF9 6EFA 6EFB 6EFC 6EFD 6EFE 6EFF 6F01 6F02 6F03 6F04 6F05 6F06 6F07 6F08 6F09 6F0A 6F0C 6F0D 6F0E 6F0F 6F11 6F12 6F14 6F15 6F16 6F17 6F18 6F19 6F1A 6F1B 6F1C 6F1D 6F1E 6F1F 6F20 6F21 6F22 6F23 6F24 6F25 6F27 6F28 6F29 6F2A 6F2B 6F2C 6F2D 6F2E 6F2F 6F30 6F31 6F32 6F33 6F34 6F35 6F36 6F37 6F38 6F39 6F3A 6F3B 6F3C 6F3E 6F40 6F42 6F43 6F44 6F45 6F46 6F47 6F48 6F49 6F4A 6F4B 6F4C 6F4D 23ED7 23EF7 23EF8 23EF9 23EFA 23EFB 23EFC 23F35 23F41 6F4E 6F73 7155 715B 3DE7 3DE8 7179 717B 717C 717D 717E 717F 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 718A 718B 718C 718D 718E 718F 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 84B8 2430D 2431A 24334 24348 7233 723E 7244 3E22 7253 7254 7292 7293 7294 7295 7296 7297 7353 7343 7344 734C 734D 734F 7350 7351 7352 7354 7355 3EE7 3EE9 7460 7461 7462 7463 7464 7465 7466 7467 7468 746A 746B 746D 746E 7470 7471 7472 7473 7474 7475 7476 7477 7478 249EC 249ED 249F6 249F7 249F8 249F9 249FB 24A0E 24A12 24A13 7500 7502 7503 7504 7505 7506 24B6E 7527 757B 757C 757D 7590 7591 7607 7608 7609 760A 760B 760C 760D 760E 7611 7612 7613 7614 7615 7616 7617 7618 7627 76B6 76B7 76B8 76B9 76E0 76E1 76E2 76E3 4053 776E 776F 7770 7771 7772 7773 7774 7775 7776 7777 7778 777A 777B 777C 777D 777E 777F 7780 7781 7782 7783 7784 7785 7786 25220 25221 40C8 787E 789D 789E 789F 78A0 78A1 78A2 78A3 78A4 78A5 78A6 78A7 78A8 78A9 78AA 78AB 78AC 78AD 78AE 78AF 78B1 78B2 78B3 78B4 78B5 78B6 78B7 78B8 78B9 78C1 7987 7988 7989 798A 798B 798C 798D 798E 798F 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 4167 7A26 7A27 7A28 7A29 7A2A 7A2B 7A2C 7A2D 7A2E 7A2F 7A30 7A31 7A32 7A33 7A4A 7A35 7AA8 7AA9 7AAA 7AAB 7AAC 7AAD 259CC 7AEC 7AED 7AEF 7AF0 25A9C 7AEE 7B75 4201 4202 4203 4204 4205 4206 4207 4208 4209 420A 420B 420C 420D 7B81 7B82 7B83 7B84 7B85 7B86 7B87 7B88 7B89 7B8A 7B8B 7B8C 7B8D 7B8E 7B8F 7B90 7B91 7B92 7B93 7B94 7B95 7B96 7B97 7B98 7B99 7B9A 7B9B 7B9C 7B9D 7B9E 7B9F 7BA0 7BA1 7BA2 7BA3 7BA4 7BA5 7BA6 7BA7 7BA8 7BA9 7BAA 7BAB 25BB3 25BB4 25BC6 7BB8 7CB6 7CB7 7CB8 7CB9 7CBA 7CBB 7CBC 7CBD 7CBE 7CBF 7CC1 25EA6 25EBC 7D96 7DD0 42E8 42E9 42EC 42ED 42F1 7D9C 7D9D 7D9E 7D9F 7DA0 7DA1 7DA2 7DA3 7DA4 7DA5 7DA6 7DA7 7DA8 7DA9 7DAA 7DAB 7DAC 7DAD 7DAE 7DAF 7DB0 7DB1 7DB2 7DB3 7DB4 7DB5 7DB6 7DB7 7DB8 7DB9 7DBA 7DBB 7DBC 7DBD 7DBE 7DBF 7DC0 7DC1 7DC2 7DC3 7DC4 7DC5 7DC6 7DC7 7DC8 7DC9 7DCA 7DCB 7DCC 7DCD 7DCE 7DCF 7DD1 7DD2 7DD4 7DD5 26048 26064 7F25 7F26 7F27 7F28 7F29 7F2A 7F2B 7F41 7F42 7F6F 7F70 7F71 7F73 7F74 7FAB 7FDE 7FDF 7FE0 7FE1 7FE2 7FE3 7FE4 2644A 7FE5 8023 8024 8025 43BA 8059 805A 805B 805C 805D 805E 805F 8061 8062 8063 265A0 8087 8088 8150 4420 4425 4426 817F 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 818A 818B 818C 818D 818E 818F 8191 26799 267B3 267B4 267CC 81E7 81FA 8207 8213 8214 8215 821E 824A 824B 824C 824D 26A51 26A52 44DD 44DF 44E4 44E9 44EA 44EB 44EC 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 849A 849B 849C 849D 849E 849F 84A0 84A1 84A2 84A3 84A4 84A5 84A6 84A7 84A8 84A9 84AA 84AB 84AC 84AD 84AE 84AF 84B0 84B1 84B2 84B3 84B4 84B5 84B6 84B7 84B9 84BA 84BB 84BC 84BD 84BE 84BF 84C0 84C1 84C2 84C3 84C4 84C6 84C7 84C9 84CA 84CB 84CC 84CD 84CE 84CF 84D0 84D1 84D2 84D3 84D4 84D5 84D6 84D7 84D8 84D9 84DA 84DB 84DC 84DD 84DF 84E1 84E2 84E3 84E4 84E6 26D74 26DA0 26DA1 26DA2 26DA3 26DA4 26DA5 26DA6 26DA7 26DAE 26DDC 26DEA 26DEB 26DF0 84E5 8660 8661 271CD 8711 8712 872B 8718 8719 871A 871B 871C 871D 871E 871F 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 872A 872C 872D 872E 872F 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 873A 873B 873C 873D 873E 873F 8740 8741 8742 8743 8744 8745 8747 8748 8749 874A 874B 8755 876B 88E2 463B 88E7 88E8 88E9 88EA 88EB 88EC 88ED 88EE 88EF 88F0 88F1 88F2 88F3 88F4 88F5 88F6 88F7 88F8 88F9 88FA 88FB 88FC 88FD 88FE 88FF 8900 8902 8903 8904 891A 899D 899E 899F 89A0 89A1 89CF 89E8 89E9 89EA 89EB 8A8B 8A8C 8A8D 8A8E 8A8F 8A90 8A91 8A92 8A93 8A94 8A96 8A97 8A98 8A99 8A9A 8A9B 8A9C 8A9D 8A9E 8A9F 8AA1 8AA2 8AA3 8AA4 8AA5 8AA6 8AA7 8AA8 8AA9 8AAA 8AAB 8AAC 8AAD 8AAE 279FD 27A0A 27A0E 8C2D 8C2E 8C2F 8C30 8C31 8C32 8C3D 8C67 8C68 8C69 8C6A 8C8B 8C8C 8C8D 3562 8CCF 8CD0 8CD1 8CD2 8CD3 8CD4 8CD5 8CD6 8CD7 8CD8 27D8F 27D98 8D58 8D59 8D5A 8D5B 8D6B 8D95 8D96 8D97 8D98 8D99 8D9A 47F4 8DFC 8DFD 8DFE 8DFF 8E00 8E01 8E02 8E03 8E04 8E05 8E06 8E07 8E08 8E09 8E0A 8E0B 8E0C 8E0D 8E0E 28048 8EB3 8EB4 8EB5 8F0D 8F0E 8F0F 8F10 8F11 8F12 8F13 8F14 8F15 28306 28318 8F95 8F96 8F97 8FA1 8FA2 8FA3 9058 9059 905A 905B 905C 905D 905E 905F 9060 9061 9062 9063 9064 9065 90D2 9118 9119 911A 911B 911C 911D 911E 911F 9120 9121 9122 9123 9124 9125 48FA 9172 9173 9174 9175 9176 9177 9178 9179 917A 917B 917C 917D 917E 917F 922D 4924 4925 4926 492A 9275 9276 9277 9278 9279 927A 927B 927D 927E 927F 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 928A 928B 928C 928D 928E 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 929A 929B 929C 929D 929E 929F 92A0 92A1 92A2 92A3 92A4 92A5 92A6 92A7 92A8 92A9 92AA 92AB 92AC 92AD 92AE 92AF 92B0 92B1 28989 289A8 289AA 289AB 92EE 927C 9532 9533 9534 9535 9536 9537 9538 9539 953A 953B 953C 953D 953E 953F 9540 9541 9542 9543 9544 9545 95A1 95A2 95A3 95A4 95A5 95A6 95A7 95A8 95A9 95AA 961A 9699 969A 969B 969C 969D 969E 969F 96A0 96A1 96CC 96D0 96D1 96D2 28FC5 4A0F 96FF 9700 9701 290AF 290B0 290B1 9757 9758 9759 9764 977A 977B 977C 977D 977E 977F 9780 9781 9782 9783 9784 9785 9786 97CD 97CE 97EC 97F6 97F7 2941D 9819 4AB8 9814 9815 9816 9817 9818 981A 9897 4AFF 4B00 98AD 98AE 98AF 98B0 98B1 295B8 98D6 98D5 98D7 4B2C 98F8 9900 9901 9902 9903 9904 9905 9906 9907 9909 990C 990E 990F 9991 9992 4B6F 999B 999C 999D 4B7B 4B7E 99B6 99B7 99B8 99B9 99BA 99BB 99BC 99BD 99BE 99BF 99C0 99C1 99C2 99C3 99C4 99C5 99C6 99C7 9AA0 9AA1 9AA2 4BC8 9AAF 9AB0 9AB1 9ADA 9AE3 9AE4 9AE5 9AE6 9AE7 9AE8 9AE9 9AEA 29B05 29B0E 9B26 9B3E 9B3F 9B40 9B41 9B42 29CAD 9B5F 9B60 9B61 9B62 29D5A 9C91 9C92 9C93 9C94 9C95 9C96 9C97 9C98 9C99 9C9A 9C9B 9C9C 9C9D 9C9E 9C9F 9CF1 9CF2 9CF3 9CF4 9CF5 9CF6 9E55 9E56 9E57 9E59 9E5A 9E5B 9E5C 9EA7 9EBC 9EBD 9F3B 9F4A 9F87 9F88 FDD0-280F 3493 3496 3498 50F5 50F6 50F8 50F9 50FA 50FB 50FC 50FD 50FE 50FF 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 510A 510B 510C 510D 510E 510F 203C9 203CB 5130 51D9 51DA 51DB 51DC 20611 5285 5286 5287 5288 5289 528A 528B 528C 528D 528E 528F 52EE 52EF 52F0 52F1 52F2 5314 5333 53B1 53B2 20AB4 3559 53C7 5653 35F1 35F2 35F3 5620 5629 562A 562B 562C 562D 562E 562F 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 563A 563B 563C 563D 563E 563F 5640 5641 5642 5643 5644 5646 5647 5648 5649 564A 564B 564C 564D 564E 564F 5650 5652 5654 5656 5657 5658 5659 565A 565B 565C 565D 5674 20F64 20F8D 20F90 20FAD 20FB4 20FB5 20FB6 20FBC 21014 571A 5880 589C 589D 589E 589F 58A0 58A1 58A2 58A3 58A4 58A5 58A6 58A7 58A9 58AA 58AB 58AC 58AE 58AF 58B0 58B1 58B2 58B3 58B4 58B5 58B6 58B7 58B8 58B9 21424 2143F 21452 21454 21455 58FF 5900 21577 5926 596D 3723 3725 3726 5AF4 5AF5 5AF6 5AF7 5AF8 5AF9 5AFA 5AFB 5AFC 5AFD 5AFE 5AFF 5B00 5B01 5B02 5B03 5B04 5B05 5B06 5B07 5B08 5B09 5B0A 5B0B 5B0C 5B0D 5B0E 5B0F 21852 2185E 21861 21862 21863 21864 21877 2187B 21883 21884 21885 376F 5BE9 5BEB 5BEC 5BED 5BEE 5C0E 21B44 5C35 37A0 5C64 5C65 5C66 5C67 380F 5D8F 5D90 5D91 5D92 5D93 5D94 5D95 5D96 5D97 5D98 5D99 5D9A 5D9B 5D9C 5D9D 5D9E 5D9F 5DA0 5DA1 5DA2 5DA3 5DA4 5DA5 21F0F 21F15 5DE4 3861 5E5A 5E5C 5E5D 5E5E 5E5F 5E60 5E61 5E62 5E64 5E65 5E69 5EDA 5EDB 5EDD 5EDE 5EDF 5EE0 5EE1 5EE2 5EE3 5EE4 5F47 5F48 5F49 5F71 5FB2 5FB5 5FB7 5FB8 5FB9 5FBA 6155 6157 6159 615C 615D 6164 6166 6167 616B 616E 6170 6176 6178 6179 617C 617E 617F 6182 6183 6184 6185 6187 3989 398A 3992 616D 6189 618B 618D 618E 618F 6190 6192 6193 6194 6195 6198 619A 619B 619C 619E 619F 61A1 61A2 61A3 61A4 61A6 61A7 61AA 61AB 61AC 61AD 61AE 61AF 61B0 61B1 61B3 2285F 22860 22871 622D 622E 622F 3A3C 6468 6469 646E 646F 6470 6479 6480 6483 3A4B 6485 6486 6488 648A 648B 648C 648D 648E 648F 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 649A 649B 649C 649D 649E 649F 64A0 64A1 64A2 64A3 64A4 64A5 64A7 64A8 64A9 64AA 64AB 64AC 64AD 64AE 64AF 64B0 64B1 64B2 64B3 64B4 64B5 64B6 64B7 64B8 64B9 64BA 64C6 22D44 22D4C 22D67 6575 6576 6577 6578 6579 657A 657B 22FCC 65B3 230BC 3B11 3B12 3B13 3B14 3B15 3B16 66A9 66AA 66AB 66AC 66AD 66AE 66AF 66B0 66B1 66B2 66B3 66B4 66B5 66B6 66B7 23281 2328A 66BC 3B3C 3B3D 3B3E 81A4 69E9 3BBE 3BC2 3BC4 69E2 69E3 69E4 69E5 69E6 69E7 69E8 69EA 69EB 69EC 69ED 69EE 69EF 69F0 69F1 69F2 69F3 69F4 69F5 69F6 69F7 69F8 69F9 69FA 69FB 69FC 69FD 69FE 69FF 6A00 6A01 6A02 6A04 6A05 6A06 6A07 6A08 6A09 6A0A 6A0B 6A0C 6A0D 6A0E 6A0F 6A10 6A11 6A12 6A13 6A14 6A15 6A16 6A17 6A18 6A19 6A1A 6A1B 6A1C 6A1D 6A1E 6A1F 6A20 6A21 6A22 6A23 6A24 6A25 6A26 6A27 6A29 6A2A 6A2B 6A2C 6A2D 6A2F 6A30 6A31 6A65 2361A 2363C 23640 23659 2365F 23677 6B4E 6B4F 6B50 6B51 6B52 6B53 6B75 6B76 3C73 3C74 6BA2 6BA3 6BA4 6BA5 6BA6 6BC5 6BC6 6BFF 6C00 6C01 6C02 6ED5 6F00 6F10 6F26 6F3F 6F41 3D4C 3D4E 3D51 6F0B 6F3D 6F4F 6F50 6F51 6F52 6F53 6F54 6F55 6F56 6F57 6F58 6F59 6F5A 6F5B 6F5C 6F5D 6F5F 6F60 6F61 6F62 6F63 6F64 6F65 6F66 6F67 6F68 6F69 6F6A 6F6B 6F6C 6F6D 6F6E 6F6F 6F70 6F71 6F72 6F74 6F75 6F76 6F77 6F78 6F79 6F7A 6F7B 6F7C 6F7D 6F7E 6F7F 6F81 6F82 6F84 6F85 6F86 6F87 6F88 6F89 6F8A 6F8B 6F8C 6F8D 6F8E 6F8F 6F90 6F91 6F92 6F93 6F94 6F95 6F96 6F97 6F98 6F9A 6F9B 6F9C 6F9D 6FD0 23F4A 23F7F 23F80 23F81 23F82 23F8F 23FB4 23FB7 6FC6 71A6 3DEB 719A 719B 719C 719D 719E 719F 71A0 71A1 71A2 71A3 71A4 71A5 71A7 71A8 71A9 71AA 71AB 71AC 71AD 71AE 71AF 71B0 71B1 71B2 71B3 71B4 71B5 9ED9 24362 24363 24364 24365 2438C 24396 2439C 5655 7234 7245 7255 7256 7257 7298 7299 729A 729B 246D4 734E 734B 7356 7357 7358 7359 735A 735B 735C 735D 735E 735F 7360 7361 7362 7364 24882 7469 746C 3EEB 3EF0 3EF3 3EF4 7479 747A 747B 747C 747D 747E 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 748A 748B 748C 748E 7493 24A15 24A21 24A22 24A23 24A24 24A25 24A26 24A27 24A28 24A29 24A2A 24A3E 7507 7508 7509 3F53 24BF5 757E 757F 761F 3FB7 3FC0 7619 761A 761B 761C 761D 761E 7620 7621 7622 7623 7624 7625 7626 7628 7629 762A 762B 24E3B 24E50 3FE5 769A 769B 769C 769D 769E 24F97 24F9A 76BA 76E4 4057 7787 7788 7789 778A 778B 778C 778D 778E 778F 7790 7791 7792 7793 25250 78BA 78BB 78BC 78BD 78BE 78BF 78C0 78C2 78C3 78C4 78C5 78C6 78C7 78C8 78C9 78CA 78CB 78CC 78CD 78CE 78CF 78D0 78D1 78D2 78D3 78D4 78D5 78D7 78D8 78D9 78E4 25531 25535 2553F 799A 799B 799C 799D 799E 799F 79A0 79A1 79A2 79A3 256E3 416C 416E 4175 7A34 7A36 7A37 7A38 7A39 7A3A 7A3B 7A3C 7A3D 7A3E 7A3F 7A40 7A41 7A42 7A43 25857 7AAE 7AAF 7AB0 7AB1 7AB2 7AB3 7AB4 420E 420F 4210 4211 4212 4213 4214 4215 421A 421C 4220 4222 4223 4226 4229 7BAC 7BAD 7BAE 7BAF 7BB0 7BB1 7BB2 7BB3 7BB4 7BB5 7BB6 7BB7 7BB9 7BBA 7BBB 7BBC 7BBD 7BBE 7BBF 7BC1 7BC2 7BC3 7BC4 7BC5 7BC6 7BC7 7BC8 7BCA 7BCB 7BCC 7BCD 7BCE 7BCF 7BD0 7BD1 7BD2 7BD3 25BE4 25BE8 25C01 25C06 4294 7CC2 7CC3 7CC4 7CC5 7CC6 7CC7 7CC8 7CC9 7CCA 7CCB 7CCC 7CCD 7CCE 25ED7 25ED8 42F4 42FB 42FC 4300 4301 4304 7DD3 7DD6 7DD7 7DD8 7DD9 7DDA 7DDB 7DDC 7DDD 7DDE 7DDF 7DE0 7DE1 7DE2 7DE3 7DE4 7DE5 7DE6 7DE7 7DE8 7DE9 7DEA 7DEB 7DEC 7DED 7DEE 7DEF 7DF0 7DF1 7DF2 7DF3 7DF4 7DF5 7DF6 7DF7 7DF8 7DF9 7DFA 7DFB 7DFC 7DFD 7DFE 7DFF 7E00 7E01 7E02 7E03 7E04 7E05 7E06 7E07 26083 26097 260A4 260A5 433E 7F2C 7F2D 7F2E 7F2F 7F75 7F76 7F77 7F78 7FAC 7FAD 7FAE 7FAF 7FB0 7FE6 7FE7 7FE8 7FE9 7FEA 7FEB 7FEC 7FED 26469 43AC 8026 8027 8064 8065 8066 8067 8068 8069 806A 806B 265AD 442D 4433 4434 8192 8193 8194 8195 8196 8197 8198 8199 819A 819B 819C 819D 819E 819F 81A0 81A1 81A2 81A3 81F1 8216 8217 447A 824E 824F 8250 8251 8252 8253 8254 44F4 848A 84E0 84E7 84E8 84E9 84EA 84EB 84EC 84ED 84EE 84EF 84F0 84F2 84F3 84F4 84F5 84F6 84F7 84F8 84F9 84FA 84FB 84FC 84FD 84FE 84FF 8500 8501 8502 8503 8504 8505 8506 8508 8509 850A 850B 850C 850D 850E 850F 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 851A 851B 851C 851D 851E 851F 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 852A 852B 852C 852D 852E 852F 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 853A 853B 853C 26E00 26E05 26E07 26E12 26E42 26E43 26E44 26E45 26E6E 26E72 26E77 26E84 853D 854F 8662 874C 874E 874F 8750 8751 8752 8753 8754 8756 8757 8758 8759 875A 875B 875C 875D 875E 875F 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 876A 876C 876D 876E 876F 8770 8771 8772 8773 8774 8775 8776 8777 8778 877A 877B 877C 877D 877E 877F 8780 87E1 2739A 8782 885A 885B 885C 885D 275FD 4645 4646 88E6 8905 8906 8907 8908 8909 890A 890B 890C 890D 890E 890F 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 891B 891C 891D 2770F 89A2 89A3 89A4 89A5 27858 89A9 89D0 89D1 89EC 89ED 89EE 89EF 89F0 8A95 46F5 8AAF 8AB0 8AB1 8AB2 8AB3 8AB4 8AB5 8AB6 8AB7 8AB8 8AB9 8ABA 8ABB 8ABC 8ABD 8ABE 8ABF 8AC0 8AC1 8AC2 8AC3 8AC4 8AC5 8AC6 8AC7 8AC8 8AC9 8ACA 8ACB 8ACC 8ACD 8ACE 8ACF 8AD0 8AD1 8AD2 8AD3 8AD4 8AD5 8AD6 8AD7 8AD8 8AD9 8ADA 8AE9 27A3E 27A53 27A59 8ADB 8AF8 8C33 8C34 8C35 8C3E 8C4C 8C4D 8C4E 27BF4 8C6C 8C8E 8C8F 477C 8CD9 8CDA 8CDB 8CDC 8CDD 8CDE 8CDF 8CE0 8CE1 8CE2 8CE3 8CE4 8CE5 8CE6 8CE7 8CE8 8CE9 8CEA 8CEB 8CEC 8CED 8D5C 8D6D 47B6 8D9B 8D9C 8D9D 8D9E 8D9F 8DA0 8DA1 8DA2 8DA3 8DA4 4800 4801 480B 8E0F 8E10 8E11 8E12 8E13 8E14 8E15 8E16 8E17 8E18 8E19 8E1A 8E1B 8E1C 8E1D 8E1E 8E1F 8E20 8E21 8E22 8E23 8E24 8E25 8E26 8E27 8E28 8E29 8E2A 8E2C 8E2D 8E2E 8E2F 8E3A 28083 28090 8E2B 8E37 8EB6 8EB7 8EB8 8EB9 8EBA 8EBB 8EBC 28256 485D 8F16 8F17 8F18 8F19 8F1A 8F1B 8F1C 8F1D 8F1E 8F1F 8F20 8F21 8F22 8F23 8F24 8F25 8F26 8F27 8F28 8F29 8F2A 8F2B 8F2C 2832F 2833A 8F98 8FA4 8FB3 9066 9067 9068 9069 906A 906B 906C 906D 906E 906F 9070 9071 9073 9077 90F6 48DD 9126 9127 9129 912A 912B 912D 912E 912F 9130 9131 9132 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 918A 918B 918C 492D 92B2 92B3 92B4 92B5 92B6 92B7 92B8 92B9 92BA 92BB 92BC 92BD 92BE 92BF 92C0 92C1 92C2 92C3 92C4 92C5 92C6 92C7 92C8 92C9 92CA 92CC 92CD 92CE 92CF 92D0 92D1 92D2 92D3 92D4 92D5 92D6 92D7 92D8 92D9 92DA 92DB 92DC 92DD 92DE 92DF 92E0 92E1 92E2 92E3 92E4 92E5 92E6 92E7 92E8 92E9 92EA 92EB 92EC 92ED 92EF 92F0 92F1 92F2 92F3 92F4 92F5 92F6 FA27 289B8 289BC 289C0 289DC 289DE 289E1 289E3 289E4 9546 9547 9548 9549 954A 954B 954C 954D 954E 954F 9550 9551 9552 9553 9554 9555 957C 95AB 95AC 95AD 95AE 95AF 95B0 95B1 95B2 95B3 95B4 28D34 49E5 96A2 96A3 96A4 96A5 96D3 9702 9703 9704 9705 9706 9707 9708 9709 970A 290C0 975A 9760 9765 9787 9788 9789 978A 978B 978C 978D 978E 978F 9790 9791 9792 97CF 97D0 97D1 97EF 29420 981B 981C 981D 981E 981F 9820 9821 9822 9823 9826 9827 9828 9829 982A 982B 982C 9898 9899 989A 989B 989C 989D 98B2 98B3 98D8 4B37 98FA 9908 990A 990B 990D 9911 9912 9913 9914 9915 9916 9917 9918 9919 9993 9994 99C8 99C9 99CA 99CB 99CC 99CD 99CE 99CF 99D0 99D1 99D2 99D3 99D4 99D5 99D6 99D7 99D8 99D9 99DA 99DB 99DC 99DD 99DE 99DF 99E0 298A4 9AA3 9AB2 9AB3 9AB4 9AB5 9AB6 9AB7 9ADB 9AEB 9AEC 9AEE 9AEF 9AF0 9AF1 9AF2 9AF3 9AF4 9B27 4C20 9B43 9B44 9B45 9B46 4C3B 4C3E 9B63 9B64 9B65 9B66 9B67 9B68 9B69 9B6A 9B6B 9B6C 9B6D 9B6E 9B6F 9B70 9B71 9B72 9B73 9B74 9B75 9B76 9B77 9B78 9B79 29D7C 9CA0 9CA1 9CA2 9CA3 9CA4 9CA5 9CA6 9CA7 9CA8 9CA9 9CAA 9CAB 9CAC 4CAE 4CB0 4CB7 9CF7 9CF8 9CF9 9CFA 9CFB 9CFC 9CFD 9CFE 9CFF 9D00 9D01 9D02 9D03 9D04 9D05 9D06 9D07 9D08 9D09 9D0B 9D0C 9D0D 9D0E 29FB7 9E58 9E5D 9E5E 9E5F 9E60 9E61 9E62 9E63 9E64 9E76 9E83 9E84 2A293 9EA8 9EA9 9EAA 9EAB 9EB9 9EBE 9ECE 58A8 9ED3 9F0F 9F10 9F11 9F51 9F52 9F89 9F8A FDD0-2810 4EB8 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 511A 511B 511C 511D 511E 512B 203F5 203FC 5163 204FC 5180 51AA 51DD 51DE 20615 5290 5291 5292 5293 5294 52F3 5334 53E1 35FB 35FE 3600 3601 3602 3603 3604 565E 565F 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 566A 566B 566C 566D 566E 566F 5670 5671 5672 5673 5675 5676 5677 5678 5679 567A 567B 567C 20FDF 20FEA 20FEB 20FEC 20FED 2101D 2101E 571B 571C 58BA 58BB 58BC 58BD 58BE 58BF 58C0 58C1 58C2 58C3 58C4 58C5 58C6 58C7 58C8 58C9 58CA 58CB 58CC 5901 596E 596F 372B 372C 372D 5B10 5B11 5B12 5B13 5B14 5B15 5B16 5B17 5B18 5B19 5B1A 5B1B 5B1C 5B1D 5B1E 5B1F 5B20 5B21 5B22 5B34 2189E 2189F 218A0 218A1 218A2 218BE 218BF 5B28 5B78 5B79 5BEF 5BF0 5DA6 5DA7 5DA8 5DA9 5DAA 5DAB 5DAC 5DAD 5DAE 5DAF 5DB0 5DB1 5DB2 5DB3 5DB4 5DB5 5DB6 3862 3863 3864 5E66 5E67 5E68 2215B 5E6F 5EE5 5EE6 5EE7 5EE8 5EE9 5EEA 5F4A 5F4B 5F5B 5F5C 22471 224B0 5FBB 5FBC 618A 618C 6191 6196 6197 6199 619D 61A0 61A5 61A8 61A9 61B2 3999 61B4 61B6 61B7 61B8 61B9 61BA 61BD 61BE 61BF 61C0 61C1 61C4 61C5 61C6 61C8 61CA 61CC 61CD 61CE 61CF 61D0 61D2 61D3 61D4 228AD 228C1 61BB 6231 6230 6489 3A52 3A54 3A57 64BB 64BC 64BD 64BE 64BF 64C0 64C1 64C2 64C3 64C4 64C5 64C7 64C8 64C9 64CB 64CC 64CD 64CF 64D0 64D1 64D2 64D3 64D4 64D5 64D6 64D7 64D9 64DA 64DB 64DC 64DD 64DE 22D8D 22D95 22DA0 22DA3 22DA4 22DB7 64F3 6533 6574 657C 657D 657E 657F 22FE3 6593 65A2 65B4 65D8 65D9 3B17 3B18 3B19 3B1A 3B1B 3B1C 3B1D 3B1E 3B1F 66B8 66B9 66BA 66BB 66BD 66BE 66BF 66C0 66C1 66C2 66C3 66C4 66C5 66C6 66C7 66C8 66C9 66CA 66CB 66CC 66CD 23289 232AB 232AC 232AD 66CF 3B31 6706 3B3F 6723 6724 6725 6A28 6A74 3BD7 3BDD 6A32 6A33 6A34 6A35 6A36 6A37 6A38 6A39 6A3A 6A3B 6A3C 6A3D 6A3E 6A3F 6A40 6A41 6A42 6A43 6A44 6A45 6A46 6A47 6A48 6A49 6A4A 6A4B 6A4C 6A4D 6A4E 6A4F 6A50 6A51 6A52 6A53 6A54 6A55 6A56 6A57 6A58 6A59 6A5A 6A5B 6A5C 6A5D 6A5E 6A5F 6A60 6A61 6A62 6A63 6A64 6A66 6A67 6A68 6A69 6A6A 6A6B 6A6C 6A6D 6A6E 6A6F 6A70 6A71 6A72 6A73 6A75 6A76 6A77 6A78 6A79 6A7A 6A7B 6A7C 236A6 236AD 236BA 236DF 236EE 6B54 6B55 6B56 6B57 6B58 6B59 6B5A 6B77 6BA7 6BA8 6BA9 6BAA 6BAB 6BC7 6BC8 6C03 6C04 6C05 6C06 6C07 6F5E 6F83 3D5F 3D62 3D65 3D69 3D6A 6F99 6F9E 6F9F 6FA0 6FA1 6FA2 6FA3 6FA4 6FA5 6FA6 6FA7 6FA8 6FAA 6FAB 6FAC 6FAD 6FAE 6FAF 6FB0 6FB1 6FB2 6FB3 6FB4 6FB5 6FB6 6FB7 6FB8 6FB9 6FBA 6FBB 6FBC 6FBD 6FBE 6FBF 6FC0 6FC1 6FC2 6FC3 6FC4 6FC5 6FC7 6FC8 6FC9 6FCA 6FCB 6FCD 6FCE 6FCF 6FD1 6FD2 6FD3 6FD6 23FC5 23FEB 23FEC 23FED 23FEE 23FEF 23FF0 24011 7004 3DF3 3DF7 3DFC 3DFD 71B6 71B7 71B8 71B9 71BA 71BB 71BC 71BD 71BE 71BF 71C0 71C1 71C2 71C3 71C4 71C5 71C6 71C7 71C8 71C9 71CA 71CB 71CC 71CD 71CE 71CF 71D0 71D1 71D2 71D3 71D4 71D5 71D6 71D7 71D8 71D9 71DA 71DB 71DC 71DD 71DE 243BD 243C1 243E9 243EA 243F2 729C 729D 729E 729F 7363 7365 7366 7367 7368 7369 736A 736B 736C 736D 747F 3EFC 748D 748F 7491 7492 7494 7495 7496 7498 7499 749A 749B 749C 749D 749E 749F 74A0 74A1 74A3 74A4 24A42 24A45 24A4A 24A4E 24A4F 24A50 24A51 24A5D 24A65 24A66 24A67 74A2 74E2 750A 750B 750C 750D 750E 7580 7581 7582 24CC9 762C 762D 762E 762F 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 763A 763B 763C 763D 763E 763F 764A 769F 76A0 76A1 76BB 76E5 76E6 76E7 2509D 4062 4065 406A 7794 7795 7796 7797 7798 7799 779A 779B 779C 779D 779E 779F 77A0 77A1 77A2 77A3 25299 77A5 78D6 78DC 40D8 78DA 78DB 78DD 78DE 78DF 78E0 78E1 78E2 78E3 78E5 78E6 78E7 78E8 78E9 78EA 78EB 78EC 78ED 78EE 2555B 2555C 2555D 2555E 25562 25565 25566 79A4 79A5 79A6 79A9 256F6 7A44 7A45 7A46 7A47 7A48 7A4B 7A4C 7A4D 7A4E 7A4F 7A50 7A51 7A52 2585D 25872 7A53 41B2 7AB5 7AB6 7AB7 7AB8 7AB9 7ABA 7ABB 7ABC 7ABD 7AF1 25AAE 422A 422B 422D 422E 4230 4231 4232 7BC9 7BD4 7BD5 7BD6 7BD7 7BD8 7BD9 7BDA 7BDB 7BDC 7BDD 7BDE 7BDF 7BE0 7BE1 7BE2 7BE3 7BE4 7BE5 7BE6 7BE7 7BE8 7BE9 7BEA 7BEB 7BEC 7BED 7BEE 7BEF 7C11 25C21 25C4A 25C65 7BF9 4A00 7CCF 7CD0 7CD1 7CD2 7CD3 7CD4 7CD5 7CD6 7CD7 7CD8 7E08 7E09 7E0A 7E0B 7E0C 7E0D 7E0E 7E0F 7E10 7E11 7E12 7E13 7E14 7E15 7E16 7E17 7E18 7E19 7E1A 7E1B 7E1C 7E1D 7E1E 7E1F 7E20 7E21 7E22 7E23 7E24 7E25 7E26 7E27 7E28 7F30 7F31 7F32 7F33 7F34 7F43 7F79 7F7A 7F7B 7F7C 7FB1 7FB2 7FEE 7FEF 7FF0 7FF1 8028 8029 802A 26512 43C1 806C 806D 265BF 806E 8190 443B 81A6 81A7 81A8 81A9 81AA 81AB 81AC 81AD 81AE 81AF 81B0 81B1 81B2 81B3 81B4 81B5 81B6 2681C 2686E 81B7 81B9 81F2 81FB 8208 8206 8209 8218 8255 8256 8257 8258 8259 4500 4503 4504 4509 450B 84DE 853E 853F 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 854A 854B 854C 854D 854E 8550 8551 8552 8553 8554 8555 8556 8558 8559 855A 855B 855C 855D 855E 855F 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 856A 856B 856C 856D 856E 856F 8570 8571 8572 8573 8574 8575 26E99 26ED0 26ED1 26ED2 26ED3 26ED4 26ED5 26ED6 26ED7 26F26 858C 8663 8664 8665 8666 45DD 8779 8781 8783 8784 8785 8786 8787 8788 8789 878A 878B 878C 878D 878E 878F 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 879A 879B 879C 879D 879E 879F 87A0 87A1 87A2 87A3 87A4 87A5 87A6 87A7 87A8 87A9 4617 885E 885F 8860 8861 275FE 464F 891E 891F 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 892A 892B 892C 892D 892E 892F 8930 8931 8932 8934 27735 27736 27741 89A6 89A7 89A8 89AA 27870 89F1 8ADC 8ADD 8ADE 8ADF 8AE0 8AE1 8AE2 8AE3 8AE4 8AE5 8AE6 8AE7 8AE8 8AEA 8AEB 8AEC 8AED 8AEE 8AEF 8AF0 8AF1 8AF2 8AF3 8AF4 8AF5 8AF6 8AF7 8AF9 8AFA 8AFB 8AFC 8AFD 8AFE 8AFF 8B00 8B01 8B02 8B03 27A79 27A84 8B14 474E 8C6B 8C6D 8C6E 8C90 8C91 8C92 8C93 8CEE 8CEF 8CF0 8CF1 8CF2 8CF3 8CF4 8CF5 27DBD 8D5D 8D5E 8D5F 8D60 8D6C 8D6E 8DA5 8DA6 8DA7 8E30 8E31 8E32 8E33 8E34 8E35 8E36 8E38 8E39 8E3B 8E3C 8E3D 8E3E 8E3F 8E40 8E41 8E42 8E43 8E44 8E45 280BD 280BE 8EBD 8EBE 8F2D 8F2E 8F2F 8F30 8F31 8F32 8F33 8F34 8F35 8F36 8F37 8F38 8F39 8F3A 8F3B 8F3C 28365 8F99 8F9A 8FA5 8FA6 8FA7 8FA8 8FA9 8FAA 48AD 9072 9074 9075 9076 9078 9079 907A 907B 907C 9086 285E8 285F4 28600 90FA 9133 9134 9135 9136 9137 4900 4906 918D 918E 918F 9190 9191 9192 9193 9194 9195 9196 9197 92CB 4935 92F7 92F8 92F9 92FA 92FB 92FC 92FD 92FE 92FF 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 930A 930B 930C 930D 930E 930F 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 931A 931B 931C 931D 931E 931F 9320 9321 9322 9323 9324 9325 9326 9327 9329 932A 932B 932C 932D 932E 932F 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 933A 933B 933C 933D 933E 933F 9340 9341 9342 9343 9344 9345 9346 9348 FA28 289E7 289E8 289F9 289FA 289FB 289FC 28A0F 28A16 28A25 28A29 937A 9556 9557 9558 9559 955A 955B 955C 955D 955E 955F 9560 49A1 49A7 95B5 95B6 95B8 95B9 95BA 95BB 95BC 95BD 95BE 95BF 95C1 95C2 95CD 961B 49E7 96A6 96A7 96A8 96A9 96AA 96AB 96B7 96D4 96D5 4A1D 970B 970C 970D 970E 970F 9710 9711 9712 9713 9714 9715 9716 9717 290E4 290E5 290EC 290ED 975B 975C 9766 9793 9794 9795 9796 9797 9798 9799 97D2 97F0 97F8 9824 9825 982D 982E 982F 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 983A 983B 983C 983D 294D0 294D9 294DA 989E 989F 98A0 98A1 98B4 98B5 295D7 98D9 98DA 9910 991D 991A 991B 991C 991E 991F 9920 9921 9922 9923 9924 9926 9927 9928 9929 29720 9934 999E 999F 99A0 99E1 99E2 99E3 99E4 99E5 99E6 99E7 99E8 99E9 99EA 99EB 99EC 99ED 99EE 99EF 99F0 99F1 99F2 298D1 9AB8 9AB9 9ABA 9ABB 9ABC 29A4D 9ABF 9AED 9AF5 9AF6 9AF7 9AF8 9AF9 9AFA 9AFB 9B07 9B28 9B33 9B47 4C49 9B7A 9B7B 9B7C 9B7D 9B7E 9B7F 9B80 9B81 9B82 9B83 9B84 9B85 9B87 9B88 9B89 9B8A 9B8B 9B8C 9B8D 9B8E 9B8F 9B90 9B91 9B92 9B93 9B94 9B95 9B96 9B97 9B98 9BA3 29D98 29D9B 9CAD 9CAE 9CAF 9CB0 9CB1 9CB2 9CB3 9CB4 9CB5 9CB6 9CB7 9CB8 9CB9 9CBA 9CBB 9D0A 9D0F 9D10 9D11 9D12 9D13 9D14 9D15 9D16 9D17 9D18 9D19 9D1A 9D1B 9D1D 9D1E 9D1F 9D20 9D21 9D22 9D23 9D24 9D25 9D26 9D27 9D28 9D29 9D2A 9D2B 9D2C 29FDE 9E65 9E66 9E67 9E68 9E77 9E7E 9E85 9E86 9E87 9E88 2A29F 4D34 9EAC 9EAD 9EAE 9EBA 9EC5 9EC6 9ED4 9ED5 9ED6 9ED7 9ED8 9EFA 9F12 9F3C 9F3D 9F53 9F8D 9F9C FDD0-2811 511F 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 512A 512C 20413 20414 2041F 5132 51DF 20619 2061A 5295 3525 3526 52F4 52F5 52F6 5335 3553 53B3 20B8F 567D 567E 567F 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 568A 568B 568C 568D 568E 568F 5690 5691 5692 5693 2104F 2105C 2106F 21075 21076 21077 21078 2107B 21088 367A 58CD 58CE 58CF 58D0 58D1 58D2 58D3 58D4 58D5 58D6 58D7 2148A 21497 21692 5B23 5B24 5B25 5B26 5B27 5B29 5B2A 5B2B 5B2C 5B2D 5B2E 5B2F 5B30 5B31 5B32 5B33 5B35 5B36 5B37 218D1 218D6 218D7 218D8 218D9 5B7A 5B7B 5BF1 5BF2 5C36 5C37 5C68 3819 5DB7 5DB8 5DB9 5DBA 5DBC 5DBD 5DBE 5DBF 21F6A 5DBB 3865 3866 5E6A 5E6B 5E6C 5F4C 5FBD 5FBE 2258D 61B5 61BC 61C2 61C3 61C7 61C9 61CB 61D1 61D7 61D9 61DA 61DB 61DC 61DD 61DE 61E0 61E1 61E2 61E4 61E5 61E6 61E7 61E8 228F7 6232 6234 64CA 64CE 64D8 3A5C 3A5E 64DF 64E0 64E1 64E2 64E3 64E4 64E6 64E8 64E9 64EB 64EC 64ED 64EE 64EF 64F0 64F1 22DEE 6580 6581 6582 6583 65A3 65B5 65B6 65DA 3B20 3B21 3B22 66CE 66D0 66D1 66D2 66D3 66D4 66D5 66D6 66D7 66DA 232D2 66D9 3B32 3B40 3BEC 3BF2 3BF3 3BF4 6A7D 6A7E 6A7F 6A80 6A81 6A82 6A83 6A84 6A85 6A86 6A87 6A88 6A89 6A8A 6A8B 6A8C 6A8D 6A8E 6A8F 6A90 6A91 6A92 6A93 6A94 6A95 6A96 6A97 6A98 6A99 6A9A 6A9B 6A9C 6A9D 6A9E 6A9F 6AA0 6AA1 6AA2 6AA3 6AA4 6AA5 6AA6 6AA7 6AA8 6AA9 6AAA 23703 23716 23720 2372D 2372F 2373F 6ADB 3C46 6B5B 6B5C 6B5D 6BAC 6BAD 6BAE 6BDA 6C08 6C09 6C0A 6FA9 6FCC 3D6F 3D73 3D75 6F80 6FD4 6FD5 6FD7 6FD8 6FD9 6FDA 6FDB 6FDC 6FDD 6FDE 6FDF 6FE0 6FE1 6FE2 6FE3 6FE4 6FE5 6FE6 6FE7 6FE8 6FE9 6FEA 6FEB 6FEC 6FED 6FEE 6FEF 6FF0 6FF1 6FF2 6FF4 6FF5 6FF6 6FF8 23FC0 24039 2403A 2403B 2403C 2403D 24057 3E00 3E01 3E02 71DF 71E0 71E1 71E2 71E3 71E4 71E5 71E6 71E7 71E8 71E9 71EA 71EB 71EC 71ED 71EE 71EF 71F0 71F1 71F2 71F3 71F4 71F5 71F6 71F7 243F8 24404 7235 7246 3E55 72A0 736E 736F 7370 7371 7372 7373 7374 3EFA 7490 7497 3EFF 3F00 3F01 74A5 74A6 74A8 74A9 74AA 74AB 74AC 74AD 74AE 74AF 74B0 74B1 74B2 74B3 74B4 24A71 24A77 24A78 24A79 24A7A 3F3F 750F 7510 7511 7512 7583 7584 24CD9 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 764B 764C 764D 764E 24EA5 24EA7 76A2 76A3 76A4 76A5 76BC 4009 76E8 76E9 76EA 406F 4071 77A4 77A6 77A7 77A8 77A9 77AA 77AB 77AC 77AD 77AE 77AF 77B0 77B1 77B2 77B3 77B4 77B5 77B6 77B7 252C7 77EF 77F0 40DF 78EF 78F0 78F1 78F2 78F3 78F4 78F5 78F6 78F7 78F8 78F9 78FA 78FB 78FC 78FD 78FE 78FF 7900 7901 7902 7903 7904 7905 25581 25584 2558F 79A7 79A8 79AA 79AB 25706 417F 7A49 7A54 7A55 7A56 7A57 7A58 7A59 7A5A 7A5B 7A5C 7A5D 7A5E 41B9 7ABE 7ABF 7AC0 7AC1 7AC2 7AF2 7AF3 7AF4 25AAF 7C15 423B 4240 4241 4242 4243 4244 4245 7BF0 7BF1 7BF2 7BF3 7BF4 7BF5 7BF6 7BF7 7BF8 7BFA 7BFB 7BFC 7BFD 7BFE 7BFF 7C00 7C01 7C02 7C03 7C04 7C05 7C06 7C07 7C08 7C09 7C0A 7C0B 7C0C 7C0D 7C0E 7C0F 7C10 7C12 7C13 7C14 7C16 7C17 25C91 25CA4 25CC0 7C18 42A2 7CD9 7CDA 7CDB 7CDC 7CDD 7CDE 7CDF 7CE0 7CE1 7CE2 7CE8 7E29 7E2A 7E2B 7E2C 7E2D 7E2E 7E2F 7E30 7E31 7E32 7E33 7E34 7E35 7E36 7E37 7E38 7E39 7E3A 7E3B 7E3C 7E3D 7E3E 7E3F 7E40 7E41 7E42 7E43 7E44 7E45 7E46 7E47 7E49 7E4A 7E4C 7E4D 26102 26121 7E48 7F44 7F45 7F46 7F7D 7F7E 7F7F 7F81 263BE 7FF2 7FF3 7FF4 7FF5 7FF6 7FFC 26484 26488 26489 802B 802C 806F 8070 8071 8072 8073 8074 26626 81A5 81B8 81BA 81BB 81BC 81BD 81BE 81BF 81C0 81C1 81C2 81C3 81C4 81C5 81C6 81C7 81C8 81C9 81CA 81CC 26846 2685E 81E8 81E9 269F2 825A 825B 825C 825D 8271 4516 451D 4520 4526 4527 8557 8576 8577 8578 8579 857A 857B 857C 857D 857E 857F 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 858A 858B 858D 858E 858F 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 859A 859B 859C 859D 859E 859F 85A0 85A1 85A2 85A3 85A4 85A5 85A6 85A7 85A8 85AA 85AB 85AC 85AE 26F73 26F74 26F9F 26FA1 85AD 85AF 8667 8668 45E9 45EE 87AA 87AB 87AC 87AD 87AE 87AF 87B0 87B1 87B2 87B3 87B4 87B5 87B6 87B7 87B8 87B9 87BA 87BB 87BC 87BD 87BE 87BF 87C0 87C1 87C2 87C3 87C4 87C5 87C6 87C7 87C8 87C9 87CA 87CB 87CC 87CD 87CE 87CF 87D0 87D1 87D2 27422 87DE 465B 8933 8935 8936 8937 8938 8939 893A 893B 893C 893D 893E 893F 8940 8941 8942 8943 8944 8945 8954 8952 2775E 89AB 89AC 89AD 89AE 89AF 89F2 89F3 27924 4700 8B04 8B05 8B06 8B07 8B08 8B09 8B0A 8B0B 8B0C 8B0D 8B0E 8B0F 8B10 8B11 8B12 8B13 8B15 8B16 8B17 8B18 8B19 8B1A 8B1B 8B1C 8B1D 8B1E 8B1F 8B20 8B21 8B22 27ABD 27ABE 4726 8C3F 8C40 8C41 8C4F 8C6F 8C70 8C71 8C72 8C73 8C94 8C95 8C96 8CF6 8CF7 8CF8 8CF9 8CFA 8CFB 8CFC 8CFD 27DDC 8D61 8D62 8D6F 8DA8 8E46 8E47 8E48 8E49 8E4A 8E4B 8E4C 8E4D 8E4E 8E4F 8E50 8E51 8E52 8E53 280E8 280E9 280F4 8F3D 8F3E 8F3F 8F40 8F41 8F42 8F43 8F44 8F45 2836D 2837D 8FAB 48AE 907D 907E 907F 9080 9081 9082 9083 9084 9085 9089 2860B 9138 9139 9198 9199 919A 919B 919C 919D 919E 919F 91A0 91A1 91A2 91A3 91A4 28933 493C 9328 9347 9349 934A 934B 934C 934D 934E 934F 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 935A 935B 935C 935D 935E 935F 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 936A 936B 936C 936D 936E 936F 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 937B 937C 937D 937E 937F 9380 9381 9382 9383 9384 9385 9386 9387 28A32 28A36 28A44 28A45 28A46 28A47 28A48 28A49 28A4A 28A4B 28A59 28A5A 28A81 28A82 28A83 93A1 93AF 9561 9562 9563 9564 9565 9566 9567 9568 9569 956A 956B 95C0 95B7 95C3 95C4 95C5 95C6 95C7 95C8 95C9 95CA 95CB 95CC 95CE 95CF 96AC 96AD 96AE 96AF 96B0 96B1 96B2 96B8 4A01 4A02 96D6 4A24 9718 9719 971A 971B 971C 971D 971E 971F 9720 2910D 29110 9721 4A4A 979A 979B 979C 979D 979E 979F 97A0 97A1 97D3 97D4 97D5 97F1 4AD1 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 984A 294E5 294E7 4B10 98B6 98B7 295E9 295F4 4B20 9925 992A 992B 992C 992D 992F 9930 9931 9932 9933 9935 9937 29732 9942 9946 9998 4B70 4B72 99A1 99A2 99A3 4B8E 4B90 99F4 99F5 99F6 99F7 99F8 99F9 99FA 99FB 99FC 99FD 99FE 99FF 9A00 9A01 9A02 9A03 298EA 99F3 9AA4 9ABD 9ABE 9AFC 9AFD 9AFE 9AFF 9B00 9B01 9B02 9B34 9B48 9B49 9B86 4C4B 4C4C 4C4D 9B99 9B9A 9B9B 9B9C 9B9D 9B9E 9B9F 9BA0 9BA1 9BA2 9BA4 9BA5 9BA6 9BA7 9BA8 9BA9 9BAA 9BAB 9BAC 9BAD 9BAE 9BAF 9BB0 9BB1 9BB2 9BB3 9BB4 9BBA 9BCE 9CBC 9CBD 9CBF 9CC0 9CC1 9CC2 9CC3 9CC4 9CC5 9CC6 9CC7 9CC8 9CC9 9CCA 9CCB 9CBE 9D1C 4CCD 4CD4 9D2D 9D2E 9D2F 9D30 9D31 9D32 9D33 9D34 9D35 9D36 9D37 9D38 9D39 9D3A 9D3B 9D3C 9D3D 9D3E 9D3F 9D40 9D41 9D42 9D43 9D44 9D45 9D46 9D47 9D48 9D49 2A014 9D67 9E69 9E6A 9E6B 9E6C 9E89 9E8A 9E8B 2A2B2 9EAF 9EB0 9EC7 9EC8 9EC9 9ECF 9EDA 9EDB 9EDC 9EDD 9EDE 2A434 9EFB 9EFF 9F22 9F23 9F24 9F3E 9F3F 9F4B 2A5C6 9F54 9F62 9F8B 9F8C 9FA0 FDD0-2812 512D 512E 512F 5131 34AF 204FE 5181 205A5 20AC2 53E2 3609 5694 5695 5696 5697 5698 5699 569A 569B 569C 569D 569E 569F 56A0 56A1 56A2 56A3 56A4 21096 2109D 210B4 210BF 210C0 210C1 210C7 210C8 210C9 210CF 210D3 56AE 58D8 58D9 214B6 5911 5913 5970 3730 3731 5B38 5B3A 5B3B 5B3C 218FA 5C69 5C6A 5DC0 5DC1 5DC2 5E6D 5E6E 5EEB 5F4D 5F5D 5F5E 399B 61D5 61D6 61D8 61DF 61E3 39A1 61E9 61EA 61EB 61ED 61EE 61F0 61F1 61F3 61F4 6233 64E7 64EA 3A61 3A66 3A67 64E5 64F2 64F4 64F5 64F6 64F7 64F8 64F9 64FA 64FB 64FC 64FD 64FE 64FF 6501 6502 6503 6504 6505 6506 22E0D 3AAB 8D01 23066 6594 2308E 65B7 65DB 3B23 3B24 3B25 3B26 3B27 3B28 66D8 66DB 66DC 232E0 232E1 6726 6AAB 6AAC 6AAD 6AAE 6AAF 6AB0 6AB1 6AB2 6AB3 6AB4 6AB5 6AB6 6AB7 6AB8 6AB9 6ABA 6ABB 6ABC 6ABD 6ABE 6ABF 6AC0 6AC1 6AC2 6AC3 6AC4 6AC5 6AC6 6AC7 6AC8 6AC9 6ACA 23766 23781 6AE1 6AED 6B5E 6B5F 6B78 6BAF 6BC9 6C0B 6FF7 3D7D 6FF9 6FFA 6FFB 6FFC 6FFD 6FFE 6FFF 7000 7001 7002 7003 7005 7006 7007 7008 7009 700A 700B 700C 700D 700E 700F 7010 7011 7012 7013 7014 24085 2408B 2408C 2408D 24091 7026 3E04 71F8 71F9 71FA 71FB 71FC 71FD 71FE 71FF 7200 7201 7203 24435 24436 269A8 7375 7376 7377 74A7 74B5 74B6 74B8 74B9 74BB 74BC 74BE 74BF 74C0 74C1 74C2 24A8C 24A93 24A94 24A95 24A96 24AA4 24AA5 24AA6 24AA7 7513 7514 7515 7585 764F 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 765A 765B 765C 765D 765E 7664 76A6 76A7 76A8 24FA9 3FF9 76BD 76EB 76EC 77B8 77B9 77BA 77BB 77BC 77BD 77BE 77BF 77C0 77C1 77C2 252D8 7906 7907 7908 7909 790A 790B 790C 790D 790E 790F 7910 7911 7912 7913 7914 7915 7916 4120 79AC 79AD 79AE 79AF 7A5F 7A60 7A61 7A62 7A63 258C8 7AC4 7AC5 7AF5 424E 4255 7C19 7C1A 7C1B 7C1C 7C1D 7C1E 7C1F 7C20 7C21 7C22 7C23 7C24 7C25 7C26 7C27 7C28 7C29 7C2A 7C2B 7C2D 7C2E 7C2F 7C30 7C31 7C32 25CC1 25CFE 25D20 42A6 7CE3 7CE4 7CE5 7CE6 7CE7 25F1A 4318 7E4E 7E4F 7E50 7E51 7E52 7E53 7E54 7E55 7E56 7E57 7E58 7E59 7E5A 7E5B 7E5C 7E5D 7E5E 7E5F 7E60 7E61 7E62 7E63 7E64 7E65 7E67 7E71 26159 2615A 2615B 2615C 7F47 7F48 7F49 26258 7F80 7F82 7FB3 7FB4 7FB5 4397 7FF7 7FF8 7FF9 7FFA 7FFB 2648D 26498 802D 802E 8075 8076 8077 4443 4444 4445 81CD 81CE 81CF 81D0 81D1 81D2 81D3 26888 820A 8219 825E 825F 8260 448F 452E 4533 453B 453D 453F 4540 4543 4544 85A9 85B0 85B1 85B2 85B3 85B4 85B5 85B6 85B7 85B8 85B9 85BA 85BB 85BC 85BD 85BE 85BF 85C0 85C1 85C2 85C3 85C4 85C5 85C6 85C7 85C8 85C9 85CA 85CB 85CC 85CD 85CE 85CF 85D0 85D2 85D3 26FBE 26FDE 26FDF 2700E 459B 8669 87D7 87D3 87D4 87D6 87D8 87D9 87DA 87DB 87DC 87DD 87DF 87E0 87E2 87E3 87E4 87E5 87E6 87E7 87E8 87E9 87EA 87EB 87EC 87ED 87EE 87EF 87F0 87F1 87F2 87F3 87F4 87F5 880E 27450 27484 27486 8946 8947 8948 8949 894A 894B 894C 894D 894E 894F 8950 8951 8953 8955 27784 27785 8986 468D 89B0 89B1 89B2 89B3 89F4 9D64 8B23 8B24 8B25 8B26 8B27 8B28 8B29 8B2A 8B2B 8B2C 8B2D 8B2E 8B2F 8B30 8B31 8B32 8B33 8B34 8B35 8B36 8B37 8B38 8B39 8B3A 8B3B 8B3C 8B3D 8B3E 27AF4 8B47 8C42 8C50 8C74 8C75 8C97 8C98 8C99 8CFE 8CFF 8D00 8D02 8D03 8D04 8D05 8DA9 4820 8E54 8E55 8E56 8E57 8E58 8E59 8E5A 8E5B 8E5C 8E5D 8E5E 8E5F 8E60 8E61 8E62 8E63 8E64 8E65 8E66 8E67 8E6E 8E80 2812E 8E69 8EBF 8EC0 8EC1 2827C 4871 8F46 8F47 8F48 8F49 8F4A 8F4B 8F4C 2838A 8FAC 9087 9088 28625 9128 913A 913B 913C 913D 913E 91A5 91A6 91A7 91A8 91A9 91AA 91AB 91AC 91D0 493E 4944 4945 4947 9388 9389 938A 938B 938C 938D 938E 938F 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 939A 939B 939C 939D 939E 939F 93A0 93A2 93A3 93A4 93A5 93A6 93A7 93A8 93AA 93AB 93AC 93AD 93AE 93B0 93B1 93B2 93B3 93B4 93B5 93B6 93B7 93B8 93B9 93BA 93BB 93BC 93BD 93BE 93BF 28A9A 28A9B 28A9C 28AC0 28AC6 28ACB 28ACC 28ACE 956C 956D 956E 956F 9570 9571 95D0 95D1 95D2 95D3 95D4 95D5 95D6 95D7 95D8 28D99 96B3 4A03 96D7 96D8 96D9 96DA 96DB 96DC 96DD 96DE 96DF 96E0 96E2 4A26 9722 9723 9724 9725 975D 97A2 97A3 97A4 97A5 97A6 97A7 97A8 97A9 97AA 97AB 97AC 97AD 97AE 97AF 97B0 4A96 97D6 97D7 97D8 97D9 97DA 97F9 97FA 29433 983F 983E 984B 984C 984D 984E 984F 9850 9851 9852 9853 9854 9855 98A2 98A3 98B8 98B9 98BA 4B49 4B4B 4B4C 992E 9936 9938 9939 993A 993B 993C 993D 993E 993F 9940 9941 99A4 99A5 4B93 4B96 4B97 9A04 9A05 9A06 9A07 9A08 9A09 9A0A 9A0B 9A0C 9A0D 9A0E 9A0F 9A10 9A11 9A12 9A13 298F1 29903 29905 9AC0 9AC1 9ADC 4C00 4C01 9B03 9B04 9B05 9B06 9B08 9B29 9B35 9B36 4C26 9B4A 9B4B 9B4C 9B4D 9B4E 9B4F 9BB5 9BB6 9BB7 9BB8 9BB9 9BBB 9BBC 9BBD 9BBE 9BBF 9BC0 9BC1 9BC2 9BC3 9BC4 9BC6 9BC7 9BC8 9BC9 9BCA 9BCB 9BCC 9BCD 9BCF 9BD0 9BD1 9BD2 9BD3 9BFD 29DF6 9CCC 9CCD 9CCE 9CCF 9CD0 9CD1 9CD2 9D4A 9D4B 9D4C 9D4D 9D4E 9D4F 9D50 9D51 9D52 9D53 9D54 9D55 9D56 9D57 9D58 9D59 9D5A 9D5B 9D5C 9D5D 9D5E 9D5F 9D60 9D62 9D63 9D65 9E6D 9E6E 9E6F 9E70 4D26 9E8C 9E8D 9E8E 9E8F 9E90 2A2B4 2A2B6 2A2BA 2A2BD 4D36 9EB1 9EB2 9EBF 9ECA 9ECB 9EDF 9EE0 9EE1 9F00 9F01 9F02 9F15 9F16 9F25 9F26 9F27 9F28 9F29 9F2A 9F2B 9F2C 9F4C 9F55 9F8E FDD0-2813 3426 34A3 5133 5134 5135 5296 52F7 52F8 5336 53B4 58E1 56A5 56A6 56A7 56A8 56A9 56AA 56AB 56AC 56AD 56AF 56B0 210E4 210F4 210F5 210F6 58DA 58DB 58DC 58DD 58DE 58DF 58E0 58E2 5912 5B3D 3732 3733 3734 3735 5B39 5B3E 5B3F 21903 21904 21905 5B7C 5BF3 5BF4 5BF5 5C6B 3820 3822 5DC3 5DC4 5DC5 21F9E 21FA1 5E70 22173 5EEC 5EED 9F90 5F5F 5FBF 61EC 61EF 61F2 61F5 61F6 61F7 22926 22939 61FB 6500 6507 6508 6509 650A 650B 650C 650D 650E 650F 6510 6512 22E36 22E42 6584 65DC 65DD 65DE 3B29 3B2A 66DD 66DE 66DF 66E0 66E1 66E2 3C00 3C01 3C02 3C04 6ACB 6ACC 6ACD 6ACE 6ACF 6AD0 6AD1 6AD2 6AD3 6AD4 6AD5 6AD6 6AD7 6AD8 6AD9 6ADA 6ADC 6ADD 6ADE 6ADF 6AE0 6AE2 6AE3 6AE4 6AE5 6AE6 6AEB 237A2 237BC 237C2 6AE7 6B60 6BB0 6BB1 23ADB 6C0C 3D85 3D8A 6FF3 7015 7016 7017 7018 7019 701A 701B 701C 701D 701E 701F 7020 7021 7022 7023 7024 7025 7027 7028 7029 702B 702C 702D 702E 240C9 240E1 7202 3E06 7204 7205 7206 7207 7208 7209 720A 720C 720D 720E 7215 2445A 2445B 7258 72A1 72A2 72A3 72A4 72A5 72A6 7378 7379 737A 74B7 74BD 3F04 3F06 74C3 74C4 74C5 74C6 74C7 74C8 74C9 74CA 74CB 24AB1 24AB2 24AB3 24ABA 24ABB 24ABC 74E3 7516 7586 7587 765F 7660 7661 7663 76A9 2502C 77C3 77C4 77C5 77C6 77C7 77C8 77C9 77CA 2530E 25311 25313 77F1 7917 7918 7919 791A 791B 791C 791D 791E 791F 7920 7921 255B9 79B0 79B1 2571D 7A64 7A65 7A66 7A67 7A68 7A69 7A6A 7A6B 258E1 7AC6 7C2C 424F 4260 7C33 7C34 7C35 7C36 7C37 7C38 7C39 7C3A 7C3B 7C3C 7C3D 7C3E 7C3F 7C40 7C41 7C42 25D30 25D43 7CE9 7CEA 7CEB 7CEC 7CED 25F4B 4320 7E4B 7E66 7E68 7E69 7E6A 7E6B 7E6C 7E6D 7E6E 7E6F 7E70 7E72 7E73 7E74 7E75 7E76 7E77 7E78 7E79 7E7A 7F35 7F4A 7F4B 7F83 7F84 7F85 7F86 7FB6 7FB7 7FB8 7FB9 7FFD 7FFE 8078 81CB 4446 81D4 81D5 81D7 81D8 2688A 26893 26926 820B 821A 8261 8262 8263 8264 8265 8276 4545 4546 4551 FA1F 85D1 85D5 85D6 85D7 85D8 85D9 85DA 85DB 85DC 85DD 85DE 85DF 85E0 85E1 85E2 85E3 85E4 85E5 85E6 85E7 85E8 85E9 85EA 85EB 85EC 85ED 85EF 85F0 85F1 85F2 85F3 85F4 85F5 2704B 27052 27053 85F7 85F8 8801 87D5 87F6 87F7 87F8 87F9 87FA 87FB 87FC 87FD 87FE 87FF 8800 8802 8803 8804 8805 8806 8807 8808 8809 880A 880B 880C 880D 880F 881E 8956 8957 8958 8959 895A 895B 895C 895D 895E 895F 8960 8961 8962 8987 8988 89B4 89B5 89B6 89B7 89B8 89F5 89F6 8B3F 8B40 8B41 8B42 8B43 8B44 8B46 8B48 8B49 8B4A 8B4B 8B4C 8B4E 8B4F 8B50 8B51 8B52 8B53 8B54 8B55 8B56 8B57 8B58 8B59 8B5A 8B5B 8B5C 27B06 27B0B 27B18 8C36 8C43 8C77 8C76 8C9A 8D06 8D07 8D08 8D09 8D0A 8D0B 8D0C 8DAA 8DAB 8DAC 8DAD 4826 8E68 8E6A 8E6B 8E6C 8E6D 8E6F 8E70 8E71 8E72 8E73 8E74 8E75 8E76 8E77 8E78 8E79 8E7A 8E7B 8E7C 8E7D 8E7E 8E7F 2814F 2815D 2816F 8E87 8EC2 8EC3 8EC4 8EC5 8F4D 8F4E 8F4F 8F50 8F51 8F52 8F53 8F54 8FAD 8FB4 908A 908B 908C 2863B 913F 9140 9142 4911 91AD 91AE 91AF 91B0 91B1 4949 4951 4953 93A9 93C0 93C1 93C2 93C3 93C4 93C5 93C6 93C7 93C8 93C9 93CA 93CB 93CC 93CD 93CE 93CF 93D0 93D1 93D2 93D3 93D4 93D5 93D6 93D7 93D8 93D9 93DA 93DB 93DC 93DD 93DE 93DF 93E0 93E1 93E2 93E3 93E4 93E5 93E6 93E7 93E8 93E9 93EA 93EB 93EC 93ED 93EE 93EF 93F0 93F1 93F2 93F9 28ADE 28ADF 28AE0 28AE1 28AE2 28AE3 28AE5 28AEA 28AFC 28B0C 9572 957D 95D9 95DA 95DB 95DC 95DD 96B4 4A04 96E1 96E3 9726 9727 9728 9729 972A 972B 972C 972D 2913C 2914D 2915B 9761 97B1 97B2 97B3 97B4 97B5 97B6 97B7 97DC 97DD 97DE 97DF 97F2 97FB 97FC 4AE4 9856 9857 9858 9859 985A 985B 985C 985D 985E 98A4 4B19 98BB 98BC 98BD 98BE 98BF 98C0 4B53 9943 9944 9945 9947 9948 9949 99A6 99A7 29857 4B9D 9A14 9A15 9A16 9A17 9A18 9A19 9A1A 9A1B 9A1C 9A1D 9A1E 9A1F 9A20 9A21 9A22 9A23 9A24 9A25 9A26 9A27 9A28 2992F 9AA5 9AC2 9AC3 9AC5 4C04 4C07 9B09 9B0A 9B0B 9B0C 9B0D 9B0E 9B0F 9B37 9BC5 4C5B 9BD4 9BD5 9BD6 9BD7 9BD8 9BD9 9BDA 9BDB 9BDC 9BDD 9BDE 9BDF 9BE0 9BE1 9BE2 9BE3 9BE4 9BE5 9BE6 9BE7 9BE8 9BE9 9BEA 9BEB 9BEC 9BED 9BEE 9BEF 9BF0 9BF1 9BF2 9BF3 9BF4 9BF5 29E06 29E2D 9BFA 9CD3 9CD4 9CD5 9CD6 9CD7 9CD8 9CD9 9CDA 9CDB 9D61 4CE1 9D66 9D68 9D69 9D6A 9D6B 9D6C 9D6D 9D6E 9D6F 9D70 9D71 9D72 9D73 9D74 9D75 9D76 9D77 9D78 9D79 9D7A 9D7B 9D7C 9D7D 9D7E 9D7F 9D80 9D81 9D82 9D83 9D84 9D85 9D86 9D87 9D88 9D89 9D8A 9D8B 9D8C 9D8D 9D8E 9D8F 9D91 2A087 9E71 9E72 9E78 9E91 9E92 9E93 9E94 9E95 9E96 9E97 9EB3 9EB4 9EC0 4D4C 9EE2 9EE3 9EFC 9F03 9F04 9F17 9F2D 9F40 9F41 9F4D 9F56 9F57 9F58 9F8F 2A6A9 FDD0-2814 34A5 5136 5337 56B1 56B2 56B3 56B4 56B5 56B6 56B7 56B8 56B9 2112F 56BC 58E3 58E4 58E5 214E8 3736 3737 3738 5B40 5B41 5B42 5B43 5B44 5B45 5B46 21910 21911 21912 21915 5B7D 5B7E 5BF6 5DC6 5DC7 5DC8 5DC9 5DCA 5DCC 5E71 2217A 5EEE 5EEF 5EF0 5FC0 5FC1 39A4 61F8 61F9 61FA 2294F 3A70 6513 6514 6515 6516 6517 6518 6519 651A 6585 6586 65DF 3B2B 66E3 66E4 66E5 66E6 66E7 66E8 23300 6727 3C09 3C0A 3C0D 3C11 6AE8 6AE9 6AEA 6AEC 6AEE 6AEF 6AF0 6AF1 6AF2 6AF3 6AF4 6AF5 6AF6 237D5 237D6 237D7 6AF9 702A 3D8F 3D91 702F 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 703A 703B 703C 703D 703E 703F 7040 7041 24104 7042 3E0A 720B 720F 7210 7211 7212 7213 7214 7216 7217 7218 24473 24487 24488 72A7 72A8 24706 737B 737C 737D 74BA 74CC 74CD 74CE 74CF 74D0 74D1 74D2 24AC0 24AC7 7588 7589 7662 7665 7666 76AA 76AB 3FFA 76BE 76ED 77CB 77CC 77CD 77CE 77CF 77F2 7922 7923 7924 7925 7926 7927 7928 7929 792A 792B 792C 79B2 7A6C 7A6D 7A6E 7A6F 7AC7 7AF6 7AF7 7C43 7C44 7C45 7C46 7C47 7C48 7C49 7C4A 7C4B 7C4C 7C4D 7C4E 7C4F 7C55 42AE 7CEE 7CEF 7CF0 4326 7E7B 7E7C 7E7D 7E7E 7E7F 7E80 7E81 7E82 7E83 261AD 261AE 261B2 7F4C 26335 7FBA 7FFF 8000 802F 8079 807A 807B 807C 81D6 81D9 81DA 81DB 81DC 269B5 8266 8267 8268 8269 4552 4554 4555 4557 455C 8624 85EE 85F6 85F9 85FA 85FB 85FC 85FD 85FE 85FF 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 860A 860B 860C 860D 860E 860F 8610 8611 8613 8614 8622 27088 270AD 270AE 270AF 8612 861B 8630 4600 4601 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8963 8964 8965 8966 8967 8968 89B9 89BA 89BB 89F7 89F8 89F9 4713 4718 8B4D 8B5D 8B5E 8B5F 8B60 8B61 8B62 8B63 8B64 8B65 8B66 8B67 8B68 8B69 8B6A 8B6B 8B6C 8B6D 8B6E 8B6F 8B70 8B71 8B72 27B38 27B39 27B3A 8C51 27C12 8D0D 8D0E 8D0F 8DAE 8E81 8E82 8E83 8E84 8E85 8E86 8E88 8E89 28189 8EC6 8F55 8F56 8F57 8F58 8F59 8F5A 8FAE 908D 9141 9143 91B2 91B3 91B4 91B5 91B6 91B7 91B8 91CB 93F3 93F5 93F6 93F7 93F8 93FA 93FB 93FC 93FD 93FE 93FF 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 940A 940B 940C 940D 940E 940F 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 941A 941B 941C 941D 941E 941F 9420 9421 9422 9423 9424 9425 9426 9427 9428 28B13 28B21 28B22 28B2B 28B2C 28B2D 28B2F 28B46 28B4C 28B4E 28B50 942F 943C 9573 9574 95DE 95DF 95E0 95E1 28DB9 96B5 972E 972F 9730 9731 9733 9734 2915E 29170 4A4B 97B8 97B9 97BA 97BB 97DB 97E0 97FD 97FE 97FF 985F 9860 9861 9862 9863 98A5 98C1 98C2 98C3 98C4 994A 994B 994C 994D 994E 9950 9951 9952 9953 9959 99A8 9A29 9A2A 9A2B 9A2C 9A2D 9A2E 9A2F 9A30 9A31 9A32 9A33 9A34 9A35 9A36 9A37 9A38 29947 29948 29949 2995D 2996A 9AA6 9AA7 9AC4 9AC6 9AC7 9AC8 9AC9 9ACA 9ACB 9ACC 9B10 9B11 9B12 9B13 9B2A 9B38 9B50 9BFB 4C6D 9BF6 9BF7 9BF8 9BF9 9BFC 9BFE 9BFF 9C00 9C01 9C02 9C03 9C04 9C05 9C06 9C07 9C08 9C09 9C0A 9C0B 9C0C 9C0D 9C0E 9C0F 9C10 9C11 9C12 9C13 9C14 9C15 9C16 9C17 9C18 9C19 9C1A 9C1B 9C20 29E68 9C40 9CDC 9CDD 9CDE 9CDF 4CED 9D90 9D92 9D93 9D94 9D95 9D96 9D97 9D98 9D99 9D9A 9D9B 9D9C 9D9D 9D9E 9D9F 9DA0 9DA1 9DA2 9DA3 9DA4 9DA5 9DA6 9DA7 9DA8 9DA9 9DAA 9DAB 2A0B9 2A0E1 2A0ED 2A0F3 2A0F8 9DBF 9E79 9E98 9E99 9E9A 9E9B 9EB5 9EC1 2A3A9 4D4D 9EE4 9EE5 9EE6 9EE7 9EE8 9EE9 9EEA 2A45B 9F0D 9F2E 9F2F 9F30 2A5CB 9F59 9F5A 9F5B 9F5D 9F5E 9F5F 9F60 9F61 9F63 9F91 FDD0-2815 34A7 5137 5138 5139 513A 5164 5297 5298 2082C 535B 56BA 56BB 56BD 56BE 56BF 56C0 56C1 56C2 56C3 56C4 56CD 2113B 2113D 21145 21148 2114F 58E6 214FD 5914 3739 5B47 5B48 5B49 2191C 5BF7 5C6C 5DCB 3826 5DCD 5DCF 5DD0 5EF1 5FC2 61FC 61FD 61FE 6511 651B 651C 651D 22E78 6595 66E9 2330A 6707 3C15 6AF8 6AFA 6AFB 6AFC 6AFD 6AFE 6AFF 6B00 6B01 6B02 6B03 6B04 6B05 6B0C 6BB2 7043 7044 7045 7046 7047 7048 7049 704A 704B 704C 704D 704F 7050 2410F 24119 3E0D 7219 721A 721B 244B9 721D 737E 74D3 74D4 74D6 24ACA 24AD1 7517 3FD7 7667 7668 7669 766A 766B 76AC 24FB8 77D0 77D1 77D2 77D3 792D 792E 792F 7930 7931 7932 7933 7934 255D5 255DB 25725 25903 7AC3 7AC8 7AC9 7C56 426A 7C50 7C51 7C52 7C53 7C54 7CF2 7E84 7E85 7E86 7E87 7E88 7E89 7E8A 7E8B 7E8C 7E8D 7E8E 7E8F 7E90 7F4D 7FBB 7FBC 8030 81DD 826A 4562 85D4 8615 8616 8617 8618 8619 861A 861C 861D 861E 861F 8620 8621 8623 8625 8626 8627 8628 8629 862A 862B 862D 862E 862F 270CD 270F8 27109 2710C 4602 881A 881B 881C 881D 881F 8820 8821 8822 8823 8824 8829 882B 884A 8969 896A 896B 896C 896D 896E 89BC 89BD 89FA 8B45 8B73 8B74 8B75 8B76 8B77 8B78 8B79 8B7A 8B7B 8B7C 8B7D 27B48 8D10 8D11 8D12 8D13 8D14 8D63 8DAF 8DB0 8E8A 8E8B 8E8C 8E8D 8E8E 8E8F 281AF 281BC 8EC7 8F5B 8F5C 8F5D 8F5E 8F5F 8FAF 908E 9144 9145 9146 91B9 91BA 91BB 4965 93F4 9429 942A 942B 942C 942D 942E 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 943A 943B 943D 943E 943F 9440 9441 28B63 28B64 28B65 28B66 28B6C 28B8F 95E2 95E3 95E4 95E5 95E6 96E4 9732 9735 9736 9737 9738 9739 973A 973B 9767 97BC 97BD 97BE 97BF 97E1 97E2 2943F 9864 9865 9866 9867 9868 98A6 98C5 98C6 98C7 98C8 98C9 98CA 98DC 994F 9956 9957 9958 99A9 9A39 9A3A 9A3B 9A3C 9A3D 9A3E 9A3F 9A40 9A41 9A42 9A43 9A44 9A45 9A46 9A47 9ACD 9ACE 9ACF 9B14 9B15 9B16 9B17 9B18 9B39 9B3A 9B51 9B52 9B53 9B54 4C7D 9C1C 9C1D 9C1E 9C1F 9C21 9C22 9C23 9C24 9C25 9C26 9C27 9C28 9C29 9C2A 9C2B 9C2C 9C2D 9C2E 9C2F 9C30 29EAC 4CA3 4CA4 9CE0 9CE1 9CE2 9CE3 9DAC 9DAD 9DAE 9DAF 9DB0 9DB1 9DB2 9DB3 9DB4 9DB5 9DB6 9DB7 9DB8 9DB9 9DBA 9DBB 9DBC 9DBD 9DBE 9DC0 9DC1 9DC2 9DC3 9DC4 9DC5 9DC6 9DC7 9DC8 9DC9 9DCA 9DCC 9DCD 9DCE 9DCF 2A0FE 2A107 2A123 9E7A 9E7B 9E9C 9E9D 4D4E 9EEB 9EEC 9EED 9EEE 9EEF 9F05 9F18 9F19 9F1A 9F1B 9F31 9F4E 9F5C 9F64 9F65 9F66 9F67 9F68 9F69 2A601 9F92 9F9D 9FA1 FDD0-2816 4EB9 513B 513C 20465 20979 3618 56C5 56C6 56C7 56C8 56C9 56CA 56CB 56CE 571D 5971 373A 5B4A 5B4B 5B4C 21922 21927 5B7F 5DCE 5DD1 5DD2 5DD3 5DD4 5DD5 5DD7 5EF2 5F4E 5F72 61FF 6202 22967 2296B 6235 651E 651F 6520 6521 6522 6524 6526 6527 22E8B 23033 3B2C 3B2D 3C18 6AF7 6B06 6B07 6B08 6B09 6B0A 6B0B 6B0D 6B0E 6B61 6C0D 7051 7052 7054 7055 7056 7057 7058 2413F 24140 24144 721C 721E 721F 7220 72A9 737F 7380 74D5 74D7 74D8 74D9 74E4 758A 766C 766D 766E 24F0E 76AD 7935 255E0 79B3 79B4 7A70 7A71 7ACA 7AF8 7C57 7C58 7C59 7C5A 7C5B 7C5C 7C5D 7C5F 7C60 7C61 7CF1 7CF4 432B 7E91 7E92 261DD 7F4E 7F4F 26261 7F87 8031 8032 807D 807E 81DE 81DF 269FA 826B 4567 456A 862C 8632 8633 8634 8635 8636 8637 2710D 27126 27127 4606 8825 8826 8827 8828 882A 882C 896F 8970 8971 8972 89BE 89BF 2789D 89FB 89FC 4720 8B7E 8B7F 8B80 8B81 8B82 8B83 8B84 8B85 8B86 8C44 8D15 8D16 8D17 8D18 8E90 8E91 8E92 8E93 8E94 8E95 8E96 8E97 8E9A 8F60 8F61 8F62 9147 9148 496A 496D 9442 9443 9444 9445 9446 9447 9448 9449 944A 944B 944C 944D 944E 944F 9450 9451 9452 9453 9454 9467 28B99 28B9C 28B9D 9575 9576 957E 95E7 973C 973D 973E 973F 9740 2919C 97C0 97C1 97C2 97C3 97E3 9869 986A 986B 98CB 9954 9955 995A 995B 297D4 9A48 9A49 9A4A 9A4B 9A4C 9A4D 9A4E 9A4F 9A50 9A51 9A52 9A53 9A54 9A55 2999D 9AD0 9AD2 9ADD 9B1D 4C0E 9B19 9B1A 9B1B 9B1C 29BD5 9B2B 9B3B 9B55 9B56 4C81 9C31 9C32 9C33 9C34 9C35 9C36 9C37 9C38 9C39 9C3A 9C3B 9C3C 9C3D 9C3E 9C3F 9C41 9C42 9C43 9C44 9C45 9C46 9C47 9C48 9DE0 29EC3 9C49 9CE4 9DCB 9DD0 9DD1 9DD2 9DD3 9DD4 9DD5 9DD6 9DD7 9DD8 9DD9 9DDA 9DDB 9DDC 9DDD 9DDE 9DDF 2A133 2A134 2A150 9DE9 9DF5 9E73 9E74 9E9E 2A2DF 9EB6 9ED0 9EF0 9EF1 9F32 9F33 9F34 9F35 9F42 4D9C 9F6A 9F6B 9F6C 9F93 9F94 9F95 9FA2 FDD0-2817 513D 5299 529A 20ACD 361A 56CC 56CF 56D0 58E7 58E8 21582 5972 5B4D 5DD6 5DD8 5DDA 5F4F 6200 6201 6203 6204 6523 3A77 6525 6528 6529 652A 652B 6596 3B2E 66EA 66EB 66EC 6B0F 6B10 6B11 6B12 2383A 6BCA 7053 7059 705A 705B 705C 2414E 24155 24156 24157 2415C 2415F 7221 7222 244BC 244CE 244D3 244D6 7381 7382 7383 74DA 24ADF 766F 7670 77D4 7936 7937 79B5 7C5E 4274 7C62 7C63 7C64 7C65 7C66 7C67 7C68 7CF5 7E93 7E94 7E95 7E96 81E2 268C7 826C 4577 8631 8638 8639 863A 863B 863C 863D 863E 863F 8640 8641 2721B 8834 882D 882E 882F 8830 8831 8832 8833 8973 8974 8976 8989 89FD 89FE 8B87 8B88 8B89 8B8A 8B8B 8B8C 8B8D 8B8E 8B8F 8B90 8C45 8D19 8D1A 8DB1 8E98 8E99 8E9B 8E9C 2829B 8F63 8F64 908F 9090 91BC 4972 9455 9456 9457 9458 9459 945A 945B 945C 945D 945E 945F 9460 9461 9462 9463 9464 9465 9466 28BC2 28BC5 28BD4 28BD7 28BD9 28BDA 4A35 9741 291A8 9768 97C4 97C5 9800 986C 986D 986E 986F 98A7 995C 99AA 9A56 9A57 9A58 9A59 9A5A 9A5B 9A5C 9AD1 9AD3 9AD4 9ADE 9B1E 9B1F 9B20 9C4A 9C4B 9C4C 9C4D 9C4E 9C4F 9C50 9C51 9C52 9C53 9C54 9C55 9C56 9C57 9C58 9C59 9C5A 9C5B 29EF8 9C6A 4D00 9DE1 9DE2 9DE3 9DE4 9DE5 9DE6 9DE7 9DE8 9DEA 9DEB 9DEC 9DED 9DEE 9DEF 9DF0 9DF1 9DF2 9DF3 9DF4 9DF6 9DF7 9DF8 9DFB 9DFC 2A192 2A193 2A1AB 9E9F 9EC2 9EF2 9EF3 9EF4 9F06 9F07 9F1C 9F36 9F37 9F38 9F39 9F43 9F44 9F4F 9F6D 9F6E 9F6F 9F70 9F71 2A632 FDD0-2818 513E 204D7 56D1 56D2 56D3 21180 3681 58E9 5B4E 5B4F 5C6D 5DD9 22980 652C 652D 66ED 66EE 6B13 6B14 6B15 705D 705E 705F 7060 7061 7223 74DB 74E5 7671 7672 24FC2 77D5 77D7 77D6 40FA 7938 79B6 79B7 7A73 7A72 4276 7C6A 7E97 7F50 7F88 7F89 826D 8277 8643 8645 27164 27165 8835 8836 8837 8838 8839 883A 884B 8862 8975 8977 277CC 8B91 8B92 8B93 8B94 8B95 8B96 8D1B 8E9D 8E9E 8E9F 8EA0 8EC8 91BD 91BE 91BF 91C0 91C2 9468 9469 946A 946B 946C 28BE7 28BE8 28BE9 28BEA 28BEB 28BEC 28BF5 96E5 96E6 9742 9743 9744 9745 9746 9747 9748 97C6 97C7 97C8 97E4 97E5 29448 9870 995D 9A5D 9A5E 9A5F 9AD5 9B21 9B22 9B2C 9B2D 9B57 9B58 9B59 29D3E 9C5C 9C5D 9C5E 9C5F 9C60 9C61 9C62 9C63 9C64 9C65 9C66 9C67 9C69 9C6B 29F23 9C70 9DFA 4D09 9DF9 9DFD 9DFE 9DFF 9E00 9E01 9E02 9E03 9E04 9E05 9E06 9E07 9E08 9E09 9E0A 2A1B4 9E7C 9E7D 9EA0 9F1E 9F45 9F46 9F72 9F73 9F74 9F75 9F76 9F77 FDD0-2819 56D4 56D5 21187 58EA 5EF3 6205 6206 652E 65B8 3B2F 66EF 6B16 6B17 6B18 6B19 6B1A 6B1B 6B1D 7062 7063 7224 7225 7226 72AA 24D06 77D8 77D9 77E1 7939 7C69 7C6B 7C6C 7C6D 7C6E 7CF6 7E98 7E99 7E9A 7E9B 81E0 81E1 8642 8646 8647 8648 8649 883B 27574 8978 8979 897A 897B 897C 898A 89C0 89FF 8B97 8B98 8B99 8C52 8C9B 8D1C 27E4D 8EA1 8EA2 8EA3 8EA4 8EA5 91C1 946D 946E 946F 9470 9471 9472 9473 28BFF 28C03 9749 9871 9872 995E 995F 9995 4BBD 299C3 299C9 9AD6 9B23 9C68 9C6C 9C6D 9C6E 9C6F 29F30 9E0B 9E0C 9E0D 9E0E 9E0F 9E10 9E11 9E12 2A1DF 9EA1 9ECC 9EF5 9F08 9F09 9F1D 9F1F 9F47 9F78 9F79 9F7A 9F7B 2A64A 9FA3 FDD0-281A 3536 571E 373B 5F60 6B1C 6C0E 704E 7064 7066 24AE2 7673 77DA 7C6F 7C70 25E0E 7CF3 8644 866A 883C 8B9A 8B9B 27E4F 8DB2 8EA6 8EA7 91C3 91C4 9474 9475 9476 9477 9478 9479 947A 28C09 28C1C 28C1D 974A 97C9 4BBE 9A60 9A61 9A62 9A63 9A65 9AD7 9C71 9C72 9C73 9C74 9C75 9C76 9E13 9E14 2A1F5 9EF6 9F0A 2A65B 9FA4 9FA5 FDD0-281B 7065 7067 7068 24177 2417A 72AB 7CF7 7E9C 7E9D 864A 883D 883E 883F 897D 8B9C 8B9D 8B9E 8C53 8C9C 8EA9 8EAA 8EC9 8F65 91C5 947B 947C 947D 947E 28C23 28C26 974B 974C 974D 974E 9873 9874 98CC 98CD 98DD 9960 9961 99AB 9A64 9A66 9A67 9B24 9B2E 9B30 9C77 9C78 9E15 9E16 9E17 9EF7 9F48 FDD0-281C 56D6 6207 22EB3 2331F 6B1E 6B1F 7227 24AE9 3FDC 7674 27175 864C 8C54 8EA8 28207 947F 9480 9481 9482 28C2B 28C30 96E7 4BC0 9A68 9A69 9E18 9E19 9E1A 2A220 9EA2 9EF8 9F3A 9F7C 9F7D 9F9E FDD0-281D 7228 7E9E 864B 8B9F 4979 9483 9484 974F 9A6A 9B31 9C79 9E1B 9E1C 9EB7 FDD0-281E 53B5 7675 4190 7C71 4585 28C39 97CA 9962 9A6B 29C73 9C7A 9E1D 9E1E 2A233 4D91 FDD0-281F 7069 275A3 4D10 9EA3 FDD0-2820 706A 7C72 28C3B 9F96 FDD0-2821 2193B 7229 9C7B 9EA4 9F97 FDD0-2823 9F7E FDD0-2824 9F49 FDD0-2827 9750 FDD0-2830 9F98 __END__ =head1 NAME Unicode::Collate::CJK::Stroke - weighting CJK Unified Ideographs for Unicode::Collate =head1 SYNOPSIS use Unicode::Collate; use Unicode::Collate::CJK::Stroke; my $collator = Unicode::Collate->new( overrideCJK => \&Unicode::Collate::CJK::Stroke::weightStroke ); =head1 DESCRIPTION C<Unicode::Collate::CJK::Stroke> provides C<weightStroke()>, that is adequate for C<overrideCJK> of C<Unicode::Collate> and makes tailoring of CJK Unified Ideographs in the order of CLDR's stroke ordering. =head1 CAVEAT The stroke ordering includes some characters that are not CJK Unified Ideographs and can't utilize C<weightStroke()> for collation. For them, use C<entry> instead. =head1 SEE ALSO =over 4 =item CLDR - Unicode Common Locale Data Repository L<http://cldr.unicode.org/> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =item L<Unicode::Collate> =item L<Unicode::Collate::Locale> =back =cut Unicode/Collate/CJK/Pinyin.pm 0000644 00000317127 15037233317 0011747 0 ustar 00 package Unicode::Collate::CJK::Pinyin; use 5.006; use strict; use warnings; our $VERSION = '1.25'; my %u2p; my $wt = 0x8000; while (<DATA>) { last if /^__END__/; my @c = split; for my $c (@c) { next if !$c; $u2p{hex($c)} = $wt if $c !~ /-/; $wt++; } } sub weightPinyin { my $u = shift; return exists $u2p{$u} ? $u2p{$u} : undef; } 1; __DATA__ FDD0-0041 963F 5475 9515 55C4 554A 54CE 54C0 5509 57C3 5A2D 6328 6B38 6EBE 55F3 92B0 953F 566F 9384 5540 6371 7691 6EB0 560A 6571 6573 769A 764C 9A03 6BD0 6639 5A3E 77EE 853C 8EB7 6FED 85F9 972D 9744 827E 4F0C 7231 7839 784B 9698 55CC 5867 5AD2 611B 788D 53C6 66A7 7477 95A1 50FE 58D2 5B21 61D3 8586 9D31 61DD 66D6 74A6 9932 76A7 77B9 99A4 7919 8B6A 8B7A 9440 9749 9C6B 5B89 4F92 5CD6 6849 6C28 5EB5 83F4 8C19 5A95 843B 844A 75F7 8164 9E4C 84ED 8A9D 978C 978D 76E6 8AF3 99A3 76EB 9D6A 97FD 9D95 73B5 557D 96F8 5111 57B5 4FFA 5535 57EF 94F5 968C 63DE 7F6F 92A8 72B4 5CB8 6309 6D1D 834C 6848 80FA 8C7B 5813 5A69 667B 6697 930C 95C7 9B9F 9EEF 80AE 9AAF 536C 5C87 6602 663B 678A 76CE 91A0 51F9 67EA 688E 8EEA 720A 6556 53AB 969E 55F7 55F8 5D85 5ED2 6EF6 7353 851C 9068 646E 71AC 7352 7488 78DD 7FF1 8071 87AF 8B37 8B38 7FFA 9CCC 93D6 9C32 9DD4 9F07 629D 82BA 62D7 8884 957A 5AAA 5ABC 8956 5C99 6277 5773 5787 5CB0 50B2 5961 5965 5967 5AEF 6160 9A9C 96A9 58BA 5DB4 61CA 6FB3 64D9 93CA 9A41 7FF6 FDD0-0042 516B 4EC8 6252 6733 7390 593F 5C9C 82AD 5CC7 67ED 75A4 54F5 5DFC 634C 7C91 7F93 8686 91DB 91DF 8C5D 9C83 53D0 72AE 629C 577A 59AD 62D4 8307 70A6 7679 80C8 83DD 8A59 8DCB 8EF7 98B0 9B43 58A2 9F25 628A 94AF 9200 9776 575D 5F1D 7238 57BB 8019 8DC1 9C85 9C8C 9B8A 8987 77F2 9738 58E9 705E 6B1B 5DF4 53ED 5427 7B06 7D26 7F62 9B5E 7F77 6300 63B0 64D8 767D 767E 4F70 67CF 6822 636D 74F8 7CA8 7D54 6446 64FA 896C 5E8D 62DD 8D25 62DC 6557 7308 7A17 86FD 7CBA 8D01 97DB 7AE1 85AD 6273 653D 73ED 822C 9881 6591 642C 6592 9812 7622 9CFB 878C 8929 764D 8FAC 962A 5742 5C85 6604 677F 7248 74EA 94A3 7C84 8228 9211 8742 9B6C 95C6 529E 534A 4F34 5762 59C5 6011 62CC 7ECA 67C8 79DA 6E74 7D46 9261 977D 8FA6 74E3 626E 8781 90A6 57B9 5E2E 6360 6886 6D5C 90AB 5E47 5E5A 7E0D 5E6B 97A4 7ED1 7D81 699C 7253 8180 9AC8 73A4 868C 508D 68D2 68D3 8C24 585D 6412 7A16 84A1 872F 78C5 9551 8255 8B17 938A 52F9 5305 5B62 82DE 67B9 80DE 7B23 7172 9F85 8554 8912 8943 95C1 9F59 7A87 5AD1 96F9 8584 5B9D 6009 9971 4FDD 9E28 5BB2 73E4 5821 5822 5AAC 8446 5BDA 98FD 8913 99C2 9CF5 7DE5 9D07 8CF2 5BF3 5BF6 974C 52FD 62A5 62B1 8C79 8DB5 94C7 83E2 86AB 888C 5831 924B 9C8D 9764 9AB2 66B4 9AF1 8663 9B91 5124 66D3 7206 5FC1 9464 9E14 4F68 85F5 9642 5351 676F 76C3 686E 60B2 63F9 6911 7986 7891 9E4E 9303 85E3 9D6F 5317 9273 8D1D 5B5B 72C8 8C9D 90B6 5907 6601 726C 82DD 80CC 90E5 94A1 4FFB 500D 6096 72FD 88AB 505D 5079 6896 73FC 9101 5099 50C3 60EB 7119 7432 8EF0 8F88 6102 789A 84D3 7295 8919 8A96 9781 9AB3 8F29 92C7 618A 7CD2 97B4 943E 5457 5504 7999 5954 6CCD 8D32 681F 7287 951B 931B 672C 82EF 5959 755A 7FC9 694D 574B 574C 5034 6379 6873 6E00 7B28 9029 64AA 7356 8F3D 4F3B 794A 595F 5D29 7D63 958D 50B0 5D6D 75ED 5623 7DB3 752D 57C4 57F2 7EF7 83F6 7423 742B 7E43 979B 6CF5 8FF8 902C 5874 750F 955A 8E66 93F0 882F 63FC 5C44 506A 6BF4 903C 6945 8C4D 8795 9D56 9CBE 939E 9C0F 8378 9F3B 5315 6BD4 5936 673C 4F4A 5421 59A3 6C98 7595 5F7C 67C0 79D5 4FFE 7B14 7C83 822D 555A 7B46 9119 7B84 805B 8C8F 5E01 5FC5 6BD5 95ED 4F56 5752 5E87 8BD0 90B2 59BC 602D 6036 6788 7540 82FE 54D4 67F2 6BD6 73CC 75AA 835C 965B 6BD9 72F4 7562 7B13 7C8A 8890 94CB 5A62 5EB3 655D 6890 8406 9587 9589 581B 5F3B 5F3C 610A 610E 6E62 7695 7B5A 8A56 8CB1 8CC1 8D51 55F6 5F43 6ED7 6EED 714F 75F9 75FA 7764 8177 84D6 84FD 870C 88E8 8DF8 924D 959F 98F6 5E63 5F0A 719A 7359 78A7 7B85 7B86 7DBC 853D 912A 999D 6F77 7358 7F7C 99DC 9AF2 58C1 5B16 5EE6 7BE6 7BF3 7E2A 859C 89F1 907F 9B85 6583 6FDE 81C2 8E55 9AC0 5970 74A7 9128 93CE 9946 7E74 895E 8963 97B8 97E0 9B53 8E83 8E84 9A46 8D14 9434 9DDD 9DE9 9F0A 5302 841E 5E64 8945 5B36 8FB9 8FBA 782D 7B3E 63D9 7335 7F16 7178 7251 7502 7BAF 7DE8 8759 9089 937D 9CCA 908A 97AD 9BFE 9BFF 7C69 8D2C 6241 7A86 533E 8CB6 60FC 8439 78A5 7A28 890A 7CC4 9D18 85CA 535E 5F01 5325 5FED 6283 6C73 6C74 82C4 91C6 53D8 73A3 4FBF 5909 662A 898D 5FA7 7F0F 904D 959E 8FA1 7DF6 8251 8FA7 8FA8 8FA9 8FAB 8FAE 8FAF 8B8A 5CC5 709E 706C 6753 6807 98D1 9A89 9ADF 6DF2 5F6A 730B 813F 98A9 5882 5E56 647D 6EEE 8508 98AE 9AA0 6A19 719B 8198 762D 78E6 9556 98D9 98DA 5126 98B7 700C 85E8 8B24 7202 81D5 8D06 93E2 7A6E 9573 98C6 98C7 98C8 9A43 9463 9A6B 8868 5A4A 88F1 8AD8 893E 9336 6AA6 4FF5 9CD4 9C3E 98CA 618B 87DE 9CD6 9C49 9F08 864C 9F9E 5225 522B 5487 8382 86C2 5FB6 8952 8E69 762A 765F 5F46 6C43 90A0 73A2 780F 5BBE 5F6C 68B9 50A7 658C 6915 6EE8 7F24 69DF 7478 8C69 8CD3 8CD4 9554 5110 6FD2 6FF1 8668 8C73 6AB3 74B8 7015 9726 7E7D 944C 986E 6448 6BA1 8191 9AE9 64EF 9B02 6BAF 81CF 9ACC 9B13 9AD5 9B22 6C1E 6FF5 51AB 4ECC 4ED2 6C37 51B0 5175 63A4 4E19 90B4 9643 6032 62A6 79C9 82EA 661E 663A 67C4 70B3 997C 772A 7A89 86C3 6452 7980 7A1F 9235 927C 9905 9920 979E 5E76 4E26 4F75 5E77 5EB0 5002 6824 75C5 7ADD 504B 50A1 5BCE 68C5 8A81 9BA9 9750 57AA 9786 92F2 7676 5E17 62E8 6CE2 7677 73BB 525D 5265 54F1 76CB 7835 889A 94B5 997D 7D34 7F3D 83E0 88B0 7886 9262 50E0 5D93 64A5 64AD 9911 9B81 8E73 9A4B 9C4D 4EE2 4F2F 72BB 8091 9A73 5E1B 72DB 74DD 82E9 4FBC 52C3 80C9 90E3 4EB3 632C 6D61 74DF 79E1 88AF 94B9 94C2 8116 8236 88B9 535A 6E24 8467 9E41 613D 640F 733C 9238 9251 998E 50F0 717F 7254 7B94 824A 8514 999B 99C1 8E23 92CD 9548 999E 99EE 894F 8C70 5697 61EA 7921 7C19 939B 993A 9D53 72A6 9AC6 9AC9 6B02 896E 7934 946E 8DDB 7BA5 7C38 5B79 6A97 7CEA 8B52 8617 535C 5575 8421 818A 5CEC 5EAF 900B 6661 923D 8AA7 9CEA 8F50 91AD 535F 8865 54FA 6355 55B8 88DC 9D4F 4E0D 5E03 4F48 5425 6B65 5498 6016 62AA 6B68 6B69 67E8 949A 52CF 57D4 57D7 6091 6357 8379 90E8 94B8 57E0 74FF 8500 8E04 90F6 9914 7BF0 9922 7C3F FDD0-0043 5693 64E6 6503 7924 906A 56C3 5072 5A47 731C 624D 72B2 6750 8D22 8CA1 88C1 6EA8 7E94 6BDD 91C7 5038 554B 5BC0 5F69 63A1 776C 8DF4 7DB5 8E29 57F0 83DC 68CC 8521 7E29 53C2 53C3 53C4 98E1 9A96 53C5 55B0 6E4C 50AA 5B20 9910 9A42 6B8B 8695 60ED 6B98 615A 8745 6159 5B31 8836 883A 60E8 6701 6158 61AF 7A47 7BF8 9EEA 9EF2 707F 63BA 5B71 7CB2 647B 6FAF 8592 71E6 74A8 8B32 510F 7218 4ED3 4EFA 4F27 6CA7 82CD 9E27 5009 8231 5096 5D62 6EC4 734A 84BC 8259 87A5 9DAC 85CF 9476 8CF6 6FF8 7F49 6B0C 64A1 64CD 7CD9 66FA 66F9 5608 5D86 6F15 84F8 69FD 893F 825A 87AC 93EA 8278 8349 613A 61C6 9A32 808F 9135 8959 8279 518A 518C 4FA7 5395 607B 62FA 6D4B 6547 755F 5074 53A0 7B27 7CA3 8417 5EC1 60FB 6E2C 7B56 8434 7B5E 7B74 84DB 5884 7BA3 61A1 7C0E 5D7E 5C91 6D94 7B12 68A3 66FD 564C 5C42 66FE 5C64 5D92 7AF2 9A53 8E6D 53C9 6260 6748 809E 81FF 633F 505B 55CF 63D2 63F7 9987 929F 9538 8256 7580 9364 9937 79C5 579E 67E5 832C 8336 5D56 643D 7339 976B 69CE 8A67 5BDF 78B4 6AAB 8869 8E45 9572 9454 597C 6C4A 5C94 4F98 8BE7 59F9 5DEE 7D01 8A6B 8286 62C6 9497 91F5 4FAA 67F4 8C7A 7961 558D 5115 9F5C 831D 867F 8883 8A0D 7625 8806 56C6 8FBF 89C7 68B4 6400 8998 88E7 9246 92D3 5E68 895C 6519 5A75 8C17 68CE 6E79 7985 998B 7158 7F20 50DD 7351 8749 8A97 92CB 5103 5B0B 5EDB 6F79 6F7A 7DFE 6FB6 78DB 79AA 6BDA 913D 9561 700D 87EC 5133 5296 87FE 9141 56B5 5DC9 703A 6B03 7E8F 7E92 8E94 9575 826C 8B92 9471 995E 4EA7 522C 65F5 4E33 65BA 6D50 5257 8C04 5574 7522 7523 94F2 9610 8487 5277 5D7C 644C 6EFB 563D 5E5D 8546 8AC2 95B3 9AA3 71C0 7C05 5181 7E5F 8B42 8FB4 93DF 95E1 56C5 705B 8B87 5FCF 785F 6472 61F4 98A4 61FA 7FBC 97C2 986B 58E5 4F25 660C 5000 5A3C 6DD0 7316 83D6 960A 667F 7429 88EE 9520 9329 95B6 9CB3 9BE7 9F1A 4EE7 514F 80A0 82CC 9578 5C1D 507F 5E38 5F9C 74FA 8407 751E 8178 5617 5872 5AE6 747A 8193 92FF 511F 5690 9CBF 93DB 9C68 5382 573A 6636 60DD 5834 50D8 53B0 5EE0 6C05 92F9 6005 739A 7545 5021 9B2F 5531 60B5 713B 7452 66A2 757C 8AAF 97D4 655E 6919 87D0 6284 5F28 600A 6B29 949E 8A2C 712F 8D85 9214 52E6 724A 6641 5DE2 5DE3 671D 911B 9F0C 6F05 5632 6A14 6F6E 7AB2 7F7A 8F48 9F02 8B3F 5435 7092 7727 7123 717C 9EA8 5DD0 4EE6 4EEF 8016 89D8 8F66 4F21 8ECA 4FE5 7817 5513 8397 7868 86FC 626F 5056 64A6 5C6E 5F7B 577C 8FE0 70E2 8045 63A3 7869 9819 5FB9 64A4 6F88 52F6 77AE 7221 62BB 90F4 6375 741B 55D4 7D9D 778B 8AC3 8CDD 7E1D 8B13 5C18 81E3 5FF1 6C88 6C89 8FB0 9648 8FE7 831E 5BB8 8380 8390 9673 6550 8A26 8C0C 8ED9 6116 63E8 9202 7141 852F 5875 6A04 760E 9703 87B4 8AF6 85BC 9E8E 66DF 9DD0 8DBB 7876 789C 588B 5926 78E3 8E38 9356 8D02 91A6 886C 75A2 9F80 8D81 8D82 6987 9F53 512C 9F54 512D 56AB 8C36 6AEC 896F 8B96 70E5 6668 9637 6CDF 67FD 722F 68E6 6D7E 7424 79F0 5041 86CF 6E5E 725A 8D6A 50DC 6186 645A 7A31 9757 6490 6491 7DFD 6A55 77A0 8D6C 9833 6A89 7AC0 7A6A 87F6 93F3 93FF 9953 4E1E 6210 673E 5448 627F 67A8 8BDA 90D5 4E57 57CE 5A0D 5BAC 5CF8 6D06 837F 4E58 57D5 6330 665F 73F9 8100 6381 73F5 7880 7A9A 812D 94D6 5818 60E9 68D6 6909 7A0B 7B6C 7D7E 88CE 584D 5856 6E97 8AA0 757B 9172 92EE 6195 6F82 6F84 6A59 6A99 7013 61F2 9A2C 4FB1 5F8E 609C 901E 9A8B 5EB1 7748 9A01 79E4 9BCE 5403 4F99 54E7 5F68 80F5 86A9 9E31 74FB 7735 7B1E 55AB 8A35 55E4 5AB8 645B 75F4 7D7A 5644 779D 8ABA 87AD 9D1F 7661 9B51 9F5D 5F72 9ED0 5F1B 6C60 9A70 8FDF 577B 5CBB 830C 6301 7AFE 834E 6B6D 86B3 8D7F 7B42 8CBE 9045 8D8D 905F 99B3 7B8E 5880 6F26 8E1F 9072 7BEA 8B18 5C3A 53FA 544E 4F88 5376 9F7F 5791 80E3 6065 7C8E 803B 8687 88B3 6B3C 6B6F 88B2 88ED 9279 892B 9F52 5F73 53F1 65A5 6758 707B 8D64 996C 62B6 52C5 605C 70BD 52D1 7FC4 7FC5 6555 70FE 75D3 557B 6E41 7873 98ED 50BA 75F8 815F 8DEE 9253 96F4 618F 7608 7FE4 906B 9290 6157 761B 7FE8 71BE 61D8 8DA9 994E 9D92 9DD8 599B 9EB6 5145 51B2 5FE1 6C96 833A 6D7A 73EB 7FC0 8202 5603 644F 5FB8 6183 61A7 885D 7F7F 825F 8E56 866B 5D07 5D08 9680 8908 7DDF 8769 87F2 721E 5BA0 57EB 5BF5 94F3 63F0 9283 62BD 5A64 640A 7633 7BD8 72A8 72AB 4EC7 601E 4FE6 5E31 6826 60C6 7D2C 7EF8 83D7 6906 7574 7D52 6101 7697 7A20 7B79 88EF 9167 7DA2 8E0C 5114 96D4 568B 5B26 5E6C 61E4 85B5 71FD 96E0 7587 7C4C 8E8A 91BB 8B8E 8B90 4E11 4E12 541C 677B 677D 4FB4 5062 7785 919C 77C1 9B57 81ED 81F0 905A 6BA0 916C 51FA 5C80 521D 6474 6A17 8C99 9F63 520D 9664 82BB 53A8 6EC1 84A2 8C60 9504 5AB0 8021 84AD 870D 8D8E 924F 96CF 7293 854F 5EDA 7BE8 92E4 6A71 5E6E 6AC9 85F8 8E87 96DB 6AE5 8E70 9DB5 8E95 51E6 6775 7840 6918 50A8 696E 891A 6FCB 5132 6A9A 790E 9F6D 9E00 9F7C 4E8D 5904 7ACC 6035 62C0 7ECC 8C56 67F7 6B2A 7AD0 4FF6 654A 755C 57F1 73FF 7D40 8655 5097 7421 9110 6410 6EC0 84EB 89E6 8E00 95A6 510A 563C 8AD4 61B7 65B6 6B5C 81C5 9EDC 89F8 77D7 695A 698B 6A7B 74B4 87F5 6B3B 6B58 63E3 640B 8197 555C 562C 81AA 8E39 5DDB 5DDD 6C1A 7A7F 5276 732D 744F 4F1D 4F20 8221 8229 8239 570C 9044 50B3 693D 66B7 7BC5 8F32 821B 8348 5598 6B42 50E2 8E33 6C4C 4E32 7394 948F 91E7 8CD7 9DA8 5205 75AE 7A93 7A97 724E 6450 7255 7621 7ABB 5E8A 7240 5647 5E62 95EF 50B8 6464 78E2 95D6 521B 6006 5231 524F 5259 51D4 5275 6134 5439 708A 5782 5015 57C0 9672 6376 83D9 6425 68F0 690E 8144 69CC 9524 7BA0 9318 939A 9840 9FA1 65FE 6776 6625 8405 583E 5A8B 6699 693F 7443 7BBA 877D 6A41 8F34 81A5 6AC4 9C06 9D9E 7EAF 9659 5507 6D71 7D14 83BC 6DF3 8123 6E7B 7289 6EE3 8493 6F18 84F4 9187 9195 931E 9BD9 5046 8436 60F7 7776 8CF0 8822 9E51 9D89 9034 8E14 6233 8FB6 8FB5 5A15 5A16 5A7C 60D9 6DB0 7EF0 814F 8F8D 916B 7DBD 8DA0 8F1F 9F8A 64C9 78ED 7E5B 6B60 56BD 9F6A 9461 5472 75B5 8D7C 8D80 5068 8DD0 7E12 9AB4 9ACA 8800 9F79 8BCD 73C1 5790 67CC 7960 8308 8328 5832 74F7 8A5E 8F9D 6148 7506 8F9E 78C1 96CC 9E5A 7CCD 8FA4 98FA 9908 5B28 6FE8 858B 9D1C 7920 8FAD 9DBF 9DC0 6B64 4F4C 6CDA 73BC 7689 7D2A 9B86 673F 6B21 4F3A 4F7D 523A 523E 5E9B 8326 6828 83BF 7D58 86D3 8D50 8786 8CDC 5306 56EA 56F1 82C1 5FE9 679E 6031 60A4 68C7 7127 8471 6F17 8061 84EF 8525 9AA2 66B0 6A05 6A2C 719C 747D 7481 7DEB 8066 806A 71EA 779B 7BF5 8070 87CC 936F 7E71 93E6 9A18 9A44 4ECE 4E1B 5F93 5A43 5B6E 5F96 5F9E 60B0 6DD9 742E 6152 6F0E 6F40 6F68 8AB4 8CE8 8CE9 6A37 85C2 53E2 7047 6B09 721C 6181 8B25 8310 51D1 6E4A 8160 8F8F 8F33 7C97 89D5 9E81 9E84 9EA4 5F82 6B82 4FC3 731D 8128 9162 7604 851F 8A8E 8D97 5648 61B1 8E27 918B 762F 7C07 7E2C 8E59 9F00 8E74 8E75 9863 6C46 64BA 92D1 9569 8E7F 651B 8EA5 9479 6AD5 5DD1 6B11 7A73 7A9C 6BA9 71B6 7BE1 7C12 7AC4 7228 5D14 50AC 51D7 7F1E 5894 5D89 615B 6467 69B1 7355 69EF 78EA 7E17 93D9 6F3C 7480 8DA1 76A0 4F1C 5FF0 75A9 5005 7C8B 7D23 7FC6 8103 8106 5550 555B 60B4 6DEC 8403 6BF3 7120 813A 7601 7CB9 7DB7 7FE0 81B5 81AC 6FE2 7AC1 894A 9847 81CE 4E7C 90A8 6751 76B4 8E06 6F8A 7AF4 5B58 4F9F 62F5 520C 5FD6 5BF8 540B 7C7F 6413 7473 9073 78CB 64AE 8E49 919D 8658 5D6F 5D73 75E4 7749 77EC 84AB 8516 9E7E 9142 9E7A 8EA6 811E 5249 5252 539D 590E 632B 839D 83A1 63AA 902A 65AE 68E4 9509 84CC 9519 6B75 92BC 932F FDD0-0044 5491 54D2 8037 8345 7B1A 55D2 642D 8921 5660 6498 939D 8FBE 8FD6 547E 59B2 601B 6C93 709F 7F8D 8359 7557 5273 5312 7563 7B2A 9039 7B54 8A5A 9054 9618 977C 8598 9791 87FD 9389 8E82 943D 97C3 9F96 9F98 6253 5927 6C4F 7714 57AF 7629 58B6 71F5 7E68 5446 5454 7343 61DB 6B79 902E 50A3 4EE3 8F6A 5788 5CB1 5E12 7519 7ED0 8FE8 9A80 5E26 5F85 6020 67CB 6B86 73B3 8D37 5E2F 8ED1 57ED 5E36 7D3F 888B 8EDA 8CB8 8EE9 7447 5ED7 53C7 66C3 7DFF 9D0F 6234 825C 9EDB 7C24 8E5B 703B 9734 8976 9EF1 9746 9B98 4E39 5989 5355 62C5 5358 7708 7803 803C 803D 90F8 8043 8EAD 55AE 5A85 6B9A 7605 5330 7BAA 891D 9132 9815 510B 52EF 64D4 6BAB 7514 7649 894C 7C1E 8078 4F14 5210 628C 73AC 74ED 80C6 8874 75B8 7D1E 63B8 8D55 4EB6 64A2 64A3 6FB8 9ED5 81BD 9EEE 65E6 4F46 5E0E 6C8A 72DA 8BDE 67E6 758D 5556 5557 5F39 60EE 6DE1 840F 86CB 557F 5F3E 6C2E 8145 8711 89DB 7A9E 8A95 50E4 5649 99BE 9AE7 563E 5F48 619A 61BA 66BA 6FB9 79AB 84DE 99F3 9D20 765A 56AA 7E75 8D09 972E 994F 6CF9 5F53 73F0 88C6 7B5C 7576 5679 6FA2 74AB 8960 7C39 8261 87F7 6321 515A 8C20 64CB 8B61 9EE8 6529 7059 6B13 8B9C 6C39 51FC 5735 5B95 7800 57B1 8361 6863 83EA 5A78 6113 74FD 903F 5D63 96FC 6F52 78AD 5105 778A 8569 8DA4 58CB 6A94 7497 76EA 7911 7C1C 862F 95E3 94DB 943A 5200 5202 53E8 5FC9 6737 6C18 8220 91D6 9C7D 9B5B 636F 5BFC 5C9B 5CF6 6363 7977 7982 6417 969D 5D8B 5D8C 5C0E 96AF 58D4 5DB9 64E3 8E48 79B1 5230 5012 60BC 7118 76D7 83FF 76DC 9053 7A32 7B8C 7FE2 5675 7A3B 885C 6AA4 885F 71FE 7FFF 8EC7 74D9 7E9B 5C76 9666 6921 69DD 561A 6074 6DC2 60EA 68CF 951D 5FB3 5FB7 9340 5730 7684 5F97 8126 6265 627D 706F 767B 8C4B 5654 5B01 71C8 7492 7AF3 7C26 89B4 8E6C 6729 7B49 6225 9093 51F3 9127 96A5 58B1 5D9D 77AA 78F4 956B 6AC8 9419 8260 6C10 4EFE 4F4E 5943 5F7D 889B 7F9D 9684 5824 8D86 6EF4 6A00 955D 78FE 9349 97AE 5EF8 72C4 7C74 82D6 8FEA 5519 654C 6DA4 837B 6891 7B1B 89CC 976E 6ECC 99B0 9AE2 5600 5AE1 7FDF 850B 8510 9814 6575 7BF4 5681 85E1 8C74 8E62 9B04 93D1 7CF4 89BF 9E10 538E 5758 8BCB 90B8 963A 5467 5E95 5F24 62B5 62DE 830B 67E2 7274 7825 57DE 638B 83E7 89DD 8A46 8EE7 805C 9AB6 5754 5F1F 65F3 6755 7393 601F 4FE4 5E1D 57CA 5A23 9012 9013 5059 5547 5572 688A 710D 73F6 7731 7976 7B2C 83C2 8C1B 91F1 5A82 68E3 6E27 7747 7F14 8482 50C0 7998 8163 905E 926A 5891 58AC 6455 78B2 8515 8743 9070 6178 750B 7DE0 5DB3 8AE6 8E36 87AE 9BF3 55F2 7538 6541 6382 508E 53A7 5D6E 6EC7 69C7 69D9 7628 98A0 8E4E 5DC5 985A 985B 766B 5DD3 5DD4 6527 7672 9F7B 5178 594C 70B9 5A70 7320 655F 8DD5 7898 84A7 8547 8E2E 9EDE 56B8 7535 4F43 963D 576B 5E97 57AB 6242 73B7 94BF 5A5D 60E6 6DC0 5960 7414 6BBF 8714 96FB 588A 58C2 6A42 6A5D 6FB1 975B 765C 7C1F 9A54 6923 5201 53FC 6C48 866D 51CB 595D 5F34 5F6B 86C1 7431 8C82 7889 9CED 6BA6 7797 96D5 9B89 9CB7 9F26 9BDB 9D70 625A 5C4C 5F14 4F04 540A 9493 7A8E 8A0B 8C03 6389 91E3 94DE 94EB 7AE8 84E7 92B1 96FF 9B61 8ABF 7639 7AB5 92FD 85CB 9443 7C13 7239 8DCC 893A 82F5 8FED 57A4 5CCC 604E 6315 6633 7ED6 80C5 74DE 7723 621C 8C0D 558B 581E 60F5 63F2 7573 7D70 800B 81F7 8A44 8D83 957B 53E0 6B9C 7243 7252 5D7D 789F 8728 890B 8253 8776 8ADC 8E40 9CBD 66E1 7589 9C08 758A 6C0E 54CB 800A 7730 5E49 7582 4E01 4EC3 53EE 5E04 738E 7594 76EF 9489 8035 8670 914A 91D8 976A 5975 9876 9802 9F0E 5D7F 9F11 6FCE 85A1 9424 8BA2 5FCA 9964 77F4 5B9A 8A02 98E3 5576 94E4 6917 815A 7887 952D 78A0 874A 92CC 9320 78F8 9841 8423 8062 4E1F 4E22 94E5 92A9 4E1C 51AC 549A 5CBD 6771 82F3 6638 6C21 5032 9E2B 57EC 5A3B 5D20 5D2C 6DB7 7B17 83C4 5F9A 6C2D 8740 9D24 9F15 9BDF 9D87 8463 58A5 5B1E 61C2 7BBD 856B 8ACC 52A8 51BB 4F97 578C 59DB 5CD2 606B 630F 680B 6D1E 80E8 8FF5 51CD 6219 80F4 52D5 7850 68DF 6E69 7D67 8156 50CD 99E7 9718 9B97 9DAB 543A 5517 90FD 515C 5160 8538 6A77 7BFC 9627 6296 6793 67A1 9661 551E 86AA 9204 6597 8C46 90D6 6D62 8373 9017 997E 9B25 68AA 6BED 8130 9158 75D8 9597 7AA6 9B26 9916 65A3 95D8 7AC7 9B2A 9B2D 9B2C 4E67 8254 53BE 5262 9607 561F 7763 918F 95CD 6BD2 72EC 6D9C 8BFB 6E0E 691F 724D 728A 78A1 88FB 8AAD 8773 7368 9316 51DF 5335 5B3B 7006 6ADD 6BB0 7258 72A2 74C4 76BE 9A33 9EE9 8B80 8C44 8D15 97E3 9AD1 945F 97C7 97E5 9EF7 8B9F 7B03 5835 5E3E 743D 8D4C 7779 89A9 8CED 7BE4 828F 5992 675C 809A 59AC 5EA6 8370 79FA 6E21 976F 9540 8799 6BAC 934D 7C35 8827 8839 8011 5073 526C 5A8F 7AEF 890D 9374 77ED 6BB5 65AD 5845 7F0E 846E 6934 7145 7456 8176 78AB 953B 7DDE 6BC8 7C16 935B 65B7 8E96 7C6A 8968 5796 5806 5860 5D5F 75FD 78D3 9D2D 941C 9827 961F 5BF9 514A 514C 5151 5BFE 794B 603C 966E 968A 7893 7D90 5C0D 619E 619D 6FE7 85B1 9566 61DF 7029 8B48 9413 5428 60C7 6566 8733 58A9 58AA 64B4 7364 5678 6489 6A54 729C 7905 8E72 8E7E 9A50 76F9 8DB8 8E89 4F05 56E4 5E89 6C8C 7096 76FE 7818 9007 949D 987F 9041 920D 696F 9813 906F 6F61 71C9 8E32 78B7 591A 591B 5484 54C6 7553 525F 5D1C 6387 6560 6BF2 88F0 5689 593A 94CE 526B 6553 655A 55A5 60B3 656A 75E5 922C 596A 51D9 8E31 9BB5 9438 6736 54DA 579B 579C 6305 6306 57F5 7F0D 692F 8D93 8EB1 8EB2 619C 7D9E 4EB8 937A 8EC3 56B2 5972 5234 5241 964A 964F 9973 5C2E 67C1 67EE 70A8 6857 5815 8235 60F0 8DE2 8DE5 8DFA 98FF 58AE 5D9E 58AF 9D7D 6735 67A4 FDD0-0045 59B8 59BF 5A3F 5A40 5C59 94B6 75FE 8BB9 542A 56EE 8FD7 4FC4 5A25 5CE8 5CE9 6D90 83AA 73F4 8A1B 7692 774B 920B 9507 9E45 86FE 78C0 8A90 981F 989D 9B64 96B2 984D 9D5D 9D5E 8B4C 9C2A 6799 7808 980B 5641 9A00 5384 5C75 6239 6B7A 5C8B 9628 5443 627C 82CA 9638 545D 7810 8F6D 54A2 54B9 57A9 59F6 5CC9 530E 6076 7828 8685 997F 5054 537E 580A 60AA 63A0 7565 7846 8C14 8EDB 9102 960F 582E 5D3F 60E1 6115 6E42 843C 8C5F 8EF6 904C 904F 922A 5EC5 6424 6439 7427 816D 8A7B 50EB 8741 9537 9B65 9E57 855A 981E 989A 9913 5669 89A8 8AE4 95BC 9929 8C96 9354 9CC4 6B5E 984E 7918 6AEE 9C10 9D9A 8B8D 9F43 9469 9F76 9C77 64DC 9D48 8BF6 8A92 5940 6069 84BD 717E 5CCE 6441 97A5 513F 800C 5150 4F95 5152 9651 5CCF 6D0F 834B 682D 80F9 5532 88BB 9E38 7CAB 804F 8F00 9C95 96AD 9AF5 9B9E 9D2F 8F5C 53BC 5C12 5C13 5C14 8033 8FE9 6D31 9975 682E 6BE6 73E5 94D2 723E 990C 99EC 85BE 9087 8DB0 4E8C 5F0D 5F10 4F74 5235 54A1 8D30 8CAE 8848 8CB3 8A80 927A 6A32 FDD0-0046 53D1 6CB7 767A 50A0 767C 9166 5F42 91B1 4E4F 4F10 59C2 57A1 6D4C 75BA 7F5A 8337 9600 6830 781D 7B4F 7782 7F70 95A5 7F78 6A43 85C5 4F71 6CD5 704B 73D0 743A 9AEA 855F 9AEE 9345 5E06 8A09 756A 52EB 5643 5B0F 5E61 61A3 8543 65D9 65DB 7E59 7FFB 85E9 8F53 98BF 7C53 98DC 9C55 51E1 51E2 51E3 5FDB 674B 67C9 77FE 7C75 9492 70E6 8227 7B32 68E5 6E22 7169 7DD0 58A6 6A0A 6A4E 71D4 74A0 81B0 85A0 7E41 894E 7FB3 8E6F 702A 703F 792C 8629 9407 9422 881C 9DED 53CD 6255 8FD4 91E9 6C3E 72AF 597F 6C4E 6CDB 996D 8303 8D29 7548 8ED3 5A4F 68B5 76D5 7B35 8CA9 8EEC 98EF 98F0 6EFC 5B0E 7BC4 8224 531A 65B9 90A1 6C78 82B3 678B 7265 94AB 6DD3 8684 9201 9D0B 9632 59A8 623F 80AA 57C5 9C82 9B74 9C1F 4EFF 8BBF 5F77 7EBA 6609 6618 74EC 7706 5023 65CA 7D21 822B 8A2A 9AE3 9DAD 653E 8DBD 574A 580F 933A 98DE 5983 975E 98DB 5561 5A53 6E04 7EEF 83F2 6249 7306 975F 88F6 7DCB 871A 970F 9CB1 9925 99A1 9A11 9A1B 98DD 80A5 6DDD 8153 8730 87E6 670F 532A 8BFD 595C 60B1 6590 68D0 69A7 7FE1 855C 8AB9 7BDA 5420 82BE 5E9F 676E 6CB8 72D2 80BA 6632 80C7 8D39 4FF7 5255 539E 75BF 966B 5C5D 8409 5EC3 8CBB 75F1 9544 5EE2 66CA 7648 9F23 6FF7 6AE0 9BE1 9428 9745 5A54 6683 5206 5429 5E09 7EB7 82AC 6610 6C1B 54DB 886F 517A 7D1B 7FC2 515D 68FB 8A1C 915A 9216 96F0 6706 71D3 9934 9959 575F 59A2 5C8E 6C7E 670C 678C 7083 80A6 7F92 86A0 86A1 68A4 68FC 711A 84B6 999A 96AB 58B3 5E69 6FC6 8561 9B75 6A68 71CC 8C6E 9F22 7FB5 9F16 8C76 8F52 943C 99A9 9EC2 7C89 9EFA 4EFD 5F05 594B 5FFF 79CE 507E 6124 7CAA 50E8 61A4 596E 81B9 7CDE 9CBC 7035 9C5D 7AD5 8EAE 4E30 98CE 4EF9 51E8 51EC 59A6 6CA3 6CA8 51EE 67AB 5C01 75AF 76FD 781C 98A8 5CEF 5CF0 5051 687B 70FD 5D36 7326 8451 950B 6953 728E 8702 760B 78B8 50FC 7BC8 9137 92D2 6A92 95CF 8C50 93E0 9146 5BF7 7043 8634 973B 882D 974A 98CC 9EB7 51AF 5906 6340 6D72 9022 5838 99AE 6453 6F28 7D98 8242 8BBD 8982 552A 8AF7 51E4 5949 752E 4FF8 6E57 7128 7148 7F1D 8D57 9CEF 9CF3 9D0C 7E2B 8CF5 7412 6E84 93BD 8615 8985 4ECF 5772 68BB 7D11 88E6 7F36 5426 599A 7F39 7F3B 6B95 96EC 9D00 4F15 909E 544B 598B 59C7 739E 80A4 6024 67CE 7806 8342 886D 57BA 5A10 5C03 8374 65C9 7D28 8DBA 9EB8 75E1 7A03 8DD7 9207 7B5F 7D92 911C 5B75 8C67 6577 819A 9CFA 9EA9 7CD0 9EAC 9EB1 61EF 4E40 5DFF 5F17 4F0F 51EB 7536 4F5B 51B9 521C 5B5A 6276 8299 82A3 5488 5CAA 5F7F 602B 62C2 670D 678E 6CED 7EC2 7ECB 82FB 8300 4FD8 5798 67EB 6C1F 6D11 70A5 73B8 7549 7550 7953 7F58 832F 90DB 97E8 54F9 683F 6D6E 7829 83A9 86A8 5310 6874 6DAA 70F0 7408 7B26 7B30 7D31 7D3C 7FC7 8274 83D4 8659 5E45 68F4 7D65 7F66 844D 798F 7CB0 7D8D 8240 8709 8F90 9258 925C 98AB 9CE7 6991 7A2A 7B99 97CD 5E5E 6F93 8760 9AF4 9D14 8AE8 8E3E 8F3B 9B84 7641 8946 9EFB 9D69 9D9D 5452 629A 4E76 5E9C 5F23 62CA 65A7 4FCC 4FDB 80D5 90D9 9CEC 4FEF 91DC 91E1 636C 8F85 7124 76D9 8151 6ECF 8705 8150 8F14 5638 64A8 64AB 982B 9B34 7C20 9EFC 961D 7236 8BA3 4ED8 5987 8D1F 9644 577F 7ACE 961C 9A78 590D 5CCA 7954 8A03 8CA0 8D74 86A5 889D 965A 5069 51A8 526F 5A66 86B9 5A8D 5BCC 5FA9 79FF 842F 86D7 8A42 8D4B 5711 6931 7F1A 8179 9C8B 8907 8914 8D59 7DEE 8567 875C 876E 8CE6 99D9 5B14 7E1B 8F39 9B92 8CFB 9351 9362 9CC6 8986 99A5 9C12 592B 752B 5490 88B1 915C 5085 6928 8984 79A3 9BB2 FDD0-0047 65EE 5477 560E 5620 9486 5C1C 5676 9337 5C15 738D 5C2C 9B40 4F85 8BE5 90C2 9654 5793 59DF 5CD0 8344 6650 8D45 7561 7974 7D6F 8A72 8C65 8CC5 5FCB 6539 7D60 4E10 4E62 5303 5304 9623 675A 9499 76D6 6461 6E89 8462 9223 9691 6224 6982 69E9 84CB 8CCC 6F11 69EA 74C2 7518 5FD3 8289 8FC0 653C 6746 7395 809D 5769 6CD4 77F8 82F7 4E79 67D1 7AFF 75B3 9150 4E7E 7C93 4E81 51F2 5C32 5C34 7B78 6F27 9CF1 5C36 5C37 9B50 4EE0 625E 76AF 79C6 8866 8D76 6562 687F 7B34 7A08 611F 6F89 8D95 6A44 64C0 7C33 9C14 9CE1 9C64 5E72 65F0 6C75 76F0 7EC0 501D 51CE 6DE6 7D3A 8A4C 9AAD 5E79 69A6 6A8A 8D11 8D63 8D1B 7068 5188 7F53 51AE 521A 6760 7EB2 809B 5CA1 7268 7598 77FC 7F38 94A2 525B 7F61 5808 6386 91ED 68E1 7285 583D 7DB1 7F41 92FC 93A0 5C97 5D17 6E2F 7135 7B7B 69D3 6205 6206 768B 7F94 7F99 9AD8 7690 9AD9 81EF 6EDC 69D4 777E 818F 69F9 6A70 7BD9 7CD5 993B 6ADC 9DCE 9F1B 9DF1 5930 6772 83D2 641E 7F1F 66A0 69C0 69C1 7A3E 7A3F 9550 7E1E 85C1 6ABA 85F3 543F 544A 52C2 53DD 8BF0 90DC 796E 7970 9506 7170 7B76 799E 8AA5 92EF 97DF 6208 4EE1 572A 72B5 7EA5 6213 8090 726B 7599 54AF 7271 54E5 80F3 88BC 9E3D 5272 6401 6ED2 6228 6B4C 9D10 9D1A 64F1 8B0C 9D3F 93B6 5444 4F6E 530C 630C 8316 9601 9769 654B 683C 9B32 6105 81F5 845B 86D2 88D3 9694 55DD 5865 6EC6 89E1 643F 69C5 8188 95A3 95A4 7366 9549 9788 97D0 9ABC 8AFD 8F35 9BAF 97DA 8F55 97B7 9A14 54FF 8238 4E2A 5404 867C 500B 784C 94EC 55F0 7B87 5F41 6ACA 7ED9 7D66 6839 8DDF 54CF 826E 4E98 4E99 831B 63EF 522F 5E9A 754A 6D6D 8015 83EE 6404 713F 7D5A 8D53 9E52 7DEA 7E06 7FAE 8CE1 7FB9 9D8A 90E0 54FD 57C2 5CFA 632D 7EE0 803F 8384 6897 7D86 9CA0 9ABE 9BC1 66F4 5829 6685 63B6 6929 5DE5 5F13 516C 53B7 529F 653B 675B 4F9B 739C 7CFC 80B1 5BAB 5BAE 606D 8EAC 9F9A 5311 5868 5E4A 6129 89E5 8EB3 7195 78BD 9AF8 89F5 9F8F 9F94 5EFE 5DE9 6C5E 62F1 62F2 6831 73D9 8F01 92DB 978F 5171 8D21 7FBE 551D 8CA2 83BB 86A3 6150 52FE 4F5D 6C9F 94A9 88A7 7F11 920E 6E9D 9264 7DF1 8920 7BDD 97B2 97DD 82B6 5CA3 72D7 82DF 67B8 73BD 8007 8009 7B31 8008 86BC 8C7F 5778 6784 8BDF 8D2D 57A2 59E4 8329 5193 591F 5920 8A3D 5ABE 5F40 6406 8A6C 9058 96CA 69CB 7179 89CF 6480 89AF 8CFC 4F30 5471 59D1 5B64 6CBD 6CD2 82FD 67E7 8F71 5502 7F5B 9E2A 7B1F 83F0 86C4 89DA 8EF1 8EF2 8F9C 9164 9232 7B8D 7B9B 5AF4 6A6D 9B95 9D23 9DBB 5903 53E4 6262 6C69 8BC2 8C37 80A1 726F 9AA8 5503 7F5F 7F96 94B4 5552 6DC8 8135 86CA 86CC 5C33 6132 84C7 8A41 9989 9E44 69BE 6BC2 9237 9F13 9F14 560F 6996 76B7 9E58 7A40 7E0E 7CD3 85A3 6FF2 76BC 81CC 8F42 9936 7014 76EC 77BD 8831 56FA 6545 51C5 987E 580C 5D13 5D2E 688F 727F 68DD 797B 96C7 75FC 7A12 9522 50F1 932E 9CB4 9BDD 9867 5495 5CE0 9027 50A6 83C7 7BD0 74DC 522E 80CD 681D 9E39 6B44 7171 8052 8D8F 5280 7DFA 8E3B 92BD 98B3 9D30 9A27 518E 53E7 5250 526E 5BE1 5366 576C 8BD6 6302 5569 639B 7F63 7D53 7F6B 8902 8A7F 98AA 4E56 63B4 6451 62D0 67B4 67FA 7B89 592C 53CF 602A 6060 5173 89C2 5B98 51A0 898C 500C 68FA 8484 7AA4 95A2 761D 764F 89B3 95D7 9CCF 95DC 9C25 89C0 9C5E 839E 9986 742F 75EF 7B66 7BA1 8F28 8218 9327 9928 9CE4 6BCC 4E31 8D2F 6CF4 60BA 60EF 63BC 6DAB 8CAB 60B9 797C 6163 645C 6F45 9066 6A0C 76E5 7F46 96DA 93C6 704C 721F 74D8 77D4 7936 9E73 7F50 9475 9C79 9E1B 5149 706E 4F8A 7097 709B 54A3 5799 59EF 6D38 832A 6844 70E1 80F1 50D9 8F04 92A7 9EC6 5E7F 5E83 72B7 5EE3 7377 81E9 4FC7 73D6 901B 81E6 6497 709A 6B1F 5F52 572D 59AB 9F9F 89C4 90BD 7688 8325 95FA 5E30 73EA 80FF 4E80 5080 7845 7A90 88BF 898F 5AAF 5EC6 691D 7470 90CC 5AE2 646B 95A8 9C91 5B00 69FB 69FC 879D 749D 81AD 9BAD 9F9C 5DC2 6B78 9B36 9A29 74CC 9B39 6AF7 5B84 6C3F 6739 8F68 5E8B 4F79 5326 8BE1 9652 579D 59FD 6051 6531 7678 8ECC 9B3C 5EAA 796A 532D 6677 6E40 86EB 89E4 8A6D 53AC 77A1 7C0B 87E1 6530 523D 523F 660B 67DC 7094 8D35 6842 6867 7324 7B40 8CB4 84D5 8DEA 5331 528A 528C 5DA1 648C 69F6 6A9C 77B6 79AC 7C02 6AC3 7650 8958 9CDC 97BC 9C56 9C65 6922 4E28 886E 60C3 7EF2 889E 88AC 8F8A 6EDA 84D8 6EFE 7DC4 8509 78D9 8F25 9CA7 9B8C 9BC0 68CD 7754 7774 74AD 8B34 5459 54BC 57DA 90ED 581D 5D1E 921B 9505 588E 7611 5613 5F49 6FC4 8748 934B 5F4D 87C8 56EF 56F6 56FB 56FD 5700 570B 5E3C 8158 5E57 6156 6F0D 805D 852E 8195 8662 9998 679C 60C8 6DC9 7313 83D3 9983 6901 69E8 7CBF 7DB6 873E 88F9 8F20 9301 991C 9439 8FC7 904E 556F FDD0-0048 54C8 94EA 86E4 5964 4E37 548D 54B3 55E8 8FD8 5B69 9826 9AB8 9084 6D77 80F2 70F8 917C 91A2 4EA5 598E 9A87 5BB3 6C26 55D0 9900 99ED 995A 5870 56A1 4F44 70B6 9878 86B6 9163 9807 5AE8 8C3D 61A8 99A0 6B5B 9F3E 9097 542B 90AF 51FD 5481 80A3 51FE 8677 5505 5705 5A22 6D5B 5D21 6657 6892 6DB5 7113 7400 5BD2 5D45 97E9 751D 7B68 872C 6F8F 92E1 9B7D 97D3 4E06 5388 7F55 6D6B 558A 850A 961A 8C43 9B2B 6C49 5C7D 6C57 95EC 65F1 5CBE 54FB 57BE 608D 634D 6D86 7302 839F 6658 6665 710A 83E1 91EC 9588 7694 7745 50BC 86FF 9894 99AF 6496 6F22 872D 8C8B 66B5 71AF 92B2 92CE 61BE 64BC 7FF0 8792 9837 9844 99FB 8B40 96D7 701A 862B 9DBE 516F 7233 592F 82C0 8FD2 65BB 676D 7ED7 73E9 7B10 822A 86A2 9883 8CA5 7B55 7D4E 980F 9B67 6C86 57B3 8320 84BF 5686 8585 85A7 6BDC 869D 6BEB 6903 55E5 7346 8C89 5651 7354 8C6A 5637 734B 8AD5 512B 568E 58D5 6FE0 7C47 8814 8B79 597D 90DD 53F7 660A 6626 79CF 54E0 5CFC 604F 608E 6D69 8017 6667 6DCF 5090 7693 9117 6EC8 8055 865F 66A4 66AD 6F94 769C 769E 66CD 76A1 8583 76A5 93AC 98A2 704F 9865 9C1D 705D 7AD3 8BC3 62B2 6B31 559D 8A36 55EC 881A 79BE 5408 4F55 52BE 5392 548A 548C 59C0 6CB3 90C3 5CC6 66F7 67C7 72E2 76C7 7C7A 7D07 9602 9978 54EC 6546 6838 76C9 76CD 8377 555D 6DB8 6E2E 76D2 79F4 83CF 8402 86B5 9F81 60D2 8A38 988C 6941 6BFC 6F95 8A65 8C88 8F05 924C 9616 9C84 7186 9E56 9EA7 981C 7BD5 7FEE 879B 9B7A 7909 95D4 97A8 9F55 8988 9DA1 76AC 9449 9FA2 4F6B 578E 8D3A 8894 7103 8CC0 55C3 7142 788B 7187 8910 8D6B 9E64 7A52 7FEF 58D1 764B 8B1E 7200 9DAE 9DB4 974E 9E16 974F 7CAD 974D 9ED2 9ED1 563F 6F76 62EB 75D5 978E 4F77 5F88 72E0 8A6A 6068 4EA8 54FC 6099 5548 811D 59EE 6046 6052 6841 70C6 80FB 9E3B 6A2A 6A6B 8861 9D34 8605 9445 583C 6DA5 9D46 5677 53FF 543D 544D 7074 8F70 54C4 8A07 70D8 8EE3 63C8 6E39 7122 7861 8C3E 85A8 8F37 569D 9367 8F5F 4EDC 5F18 5985 7EA2 5430 5B8F 6C6F 7392 7EAE 95F3 5B96 6CD3 82F0 57AC 5A02 6D2A 7AD1 7D05 836D 8679 5CF5 6D64 7D18 7FC3 803E 7854 7D2D 8C39 9E3F 6E31 7AE4 7CA0 8452 8453 921C 958E 7D8B 7FDD 8C3C 6F42 9277 9783 9B5F 92D0 5F4B 857B 9710 9EC9 971F 9D3B 9ECC 664E 55CA 8BA7 8A0C 95A7 6494 6F8B 6F92 92BE 95C2 9B28 9F41 4FAF 77E6 9107 5589 5E3F 7334 8454 760A 777A 7BCC 7CC7 7FED 9ABA 7FF5 936D 9931 9BF8 543C 72BC 540E 90C8 539A 5795 5F8C 6D09 9005 5820 8C5E 9C8E 9C98 9B9C 9C5F 5019 4E6F 5322 864D 547C 5780 5FFD 6612 66F6 6CD8 82F8 6057 70C0 8F77 532B 553F 60DA 6DF4 8656 8EE4 5611 5BE3 6EF9 96D0 5E60 622F 6B51 81B4 8B3C 56EB 6287 5F27 72D0 74F3 80E1 58F6 96BA 58F7 659B 7100 5596 58FA 5AA9 6430 6E56 7322 7D57 846B 695C 7173 745A 561D 851B 9E55 69F2 7BB6 8774 885A 9B71 7E20 879C 9190 9836 89F3 9378 992C 9D60 702B 9B0D 9C17 9D98 9DA6 4E55 6C7B 864E 6D52 4FFF 8400 7425 865D 6EF8 4E65 4E92 5F16 6236 6237 6238 51B1 51B4 8290 5E0D 62A4 6C8D 6CAA 5CB5 6019 623D 6608 6791 6018 795C 7B0F 5A5F 6248 74E0 695B 55C0 7D94 9120 96FD 5AED 5AEE 6462 6EEC 8530 69F4 71A9 9CF8 7C04 9359 569B 9E71 8B77 9CE0 97C4 9800 9C6F 9E0C 4E4E 7C90 552C 7CCA 933F 9BF1 82B1 82B2 54D7 5629 848A 9335 534E 59E1 9A85 83EF 91EA 91EB 94E7 6ED1 733E 6433 64B6 78C6 8550 8796 92D8 8B41 93F5 9A4A 9DE8 5316 5212 593B 6779 753B 8BDD 5D0B 6866 5A73 756B 5B05 7575 89DF 8A71 5283 6466 6A3A 5AFF 69EC 6F85 8AE3 9ECA 7E63 8219 8B6E 57D6 5A72 691B 7874 7CC0 748D 8AAE 6000 5F8A 6DEE 69D0 8922 8E1D 61D0 8931 61F7 7024 6AF0 8032 8639 574F 54B6 8AD9 58CA 58DE 863E 72BF 6B53 9D05 9D4D 9144 56BE 61FD 737E 8B99 8C9B 9A69 73AF 90C7 5CD8 6D39 72DF 8341 6853 8408 8411 5BCF 7D59 96C8 7D84 7FA6 8C86 926E 953E 571C 5B1B 5BF0 6FB4 7F33 961B 74B0 8C72 9370 956E 9E6E 7CEB 7E6F 8F58 9436 95E4 9B1F 74DB 7F13 7DE9 650C 5E7B 5942 8092 5950 5BA6 5524 6362 6D63 6DA3 70C9 60A3 6899 7115 902D 559A 559B 5D48 610C 63DB 6E19 75EA 7746 7165 744D 8C62 6F36 7613 69F5 9CA9 64D0 6FA3 85E7 9BC7 9C00 6B22 77A3 6B61 5DDF 8093 8352 8841 671A 5843 614C 7687 505F 51F0 968D 9EC4 55A4 582D 5A93 5D32 5FA8 60F6 6E5F 845F 9051 9EC3 697B 714C 745D 58B4 6F62 735A 953D 71BF 749C 7BC1 7BCA 824E 8757 7640 78FA 7A54 8AFB 7C27 87E5 9360 992D 9CC7 8DAA 97F9 9404 9A1C 5164 9C09 9C51 9DEC 6033 604D 70BE 5BBA 6644 595B 8C0E 5E4C 8A64 7180 8B0A 6ACE 6130 6EC9 69A5 66C2 769D 93A4 76A9 6643 7E28 7070 8BD9 54B4 6062 62FB 6325 6D03 867A 8886 6656 70E3 73F2 8C57 5A4E 5A88 63EE 7FDA 8F89 9693 6689 694E 7147 7988 8A7C 5E51 7773 8918 5645 649D 5655 7FEC 8F1D 9EBE 5FBD 96B3 7008 8633 9C34 56D8 56DE 56EC 4F6A 5EFB 5EFD 605B 6D04 8334 8FF4 70E0 8698 9025 75D0 86D4 86D5 8716 9BB0 6094 6BC0 6BC1 6BC7 6A93 71EC 8B6D 5349 6C47 4F1A 8BB3 6CCB 54D5 6D4D 7ED8 8294 835F 8BF2 605A 6075 70E9 8D3F 5F57 6666 79FD 5599 60E0 6E4F 7D75 7F0B 7FD9 9613 532F 5F59 5F5A 6703 6ED9 8A6F 8CC4 9892 50E1 5612 7623 8527 8AA8 571A 5BED 6167 6193 66B3 69E5 6F53 8559 5666 5B12 5FBB 6A5E 6BA8 6FAE 6FCA 7369 8588 8589 8AF1 982E 71F4 74AF 7BF2 85F1 992F 5696 77BA 7A62 7E62 87EA 6AD8 7E6A 7FFD 8B53 5136 93F8 95E0 5B48 942C 9767 8B7F 986A 5C77 7073 74A4 61F3 660F 662C 8364 5A5A 60DB 6DBD 960D 68D4 6B99 8477 7767 776F 95BD 5FF6 6D51 68A1 9984 581A 6E3E 743F 9B42 991B 7E49 8F4B 9F32 9BF6 8BE8 4FD2 5031 5702 638D 6DF7 711D 6EB7 6141 89E8 8AE2 5419 5268 8020 952A 5290 5684 9343 8C41 6509 9A1E 4F78 6D3B 79EE 79F3 706B 4F19 90A9 94AC 9225 6F37 5925 6C8E 6216 8D27 549F 7809 4FF0 6347 7713 83B7 9584 639D 7978 8CA8 60D1 65E4 6947 6E71 798D 84A6 596F 6FE9 7372 970D 6AB4 8B0B 77C6 7A6B 956C 56AF 7016 802F 8267 85FF 8816 56BF 66E4 81DB 7668 77D0 944A 9743 FDD0-004A 4E0C 8BA5 51FB 5209 53FD 9965 4E69 520F 573E 673A 7391 808C 82A8 77F6 9E21 6785 54AD 59EB 8FF9 525E 5527 59EC 5C50 79EF 7B04 98E2 57FA 7EE9 559E 5D46 5D47 6567 671E 7284 7B53 7F09 8D4D 52E3 55D8 7578 7A18 8DE1 8DFB 9CEE 50DF 6BC4 7B95 9288 5630 69E3 757F 7A3D 7DDD 89ED 8CEB 8EB8 9F51 58BC 6A5F 6FC0 74A3 79A8 7A4D 8940 9324 96AE 64CA 78EF 7C0A 7E3E 7F81 8CF7 913F 6AC5 802D 8E5F 96DE 8B4F 97F2 9D8F 8B64 9416 9951 8E8B 97BF 9DC4 9F4E 7F87 8640 9447 8989 9459 9F4F 7F88 9E04 898A 4EBC 53CA 4F0B 5409 5C8C 5F76 5FE3 6C72 7EA7 5373 6781 7680 4E9F 4F76 8BD8 90C6 9491 537D 59DE 6025 72E4 768D 7B08 7D1A 63E4 75BE 810A 89D9 506E 5359 5EB4 710F 8C3B 6222 68D8 6975 6B9B 6E52 96C6 5849 5AC9 6131 696B 84BA 8D8C 69C9 799D 8024 818C 92A1 5DAF 6483 6F57 6FC8 7620 7BBF 8540 857A 8E16 9E61 6A76 6A9D 878F 64EE 85C9 894B 8E50 9353 8265 7C4D 8F5A 93F6 9735 9DBA 9DD1 96E6 96E7 51E0 5DF1 4E2E 5980 72B1 6CF2 866E 6324 638E 9C7E 5E7E 621F 9218 5D74 9E82 9B62 64A0 64E0 7A56 87E3 9B55 5F50 5F51 65E1 8BA1 8BB0 4F0E 7EAA 5756 5993 5FCC 6280 82B0 9645 5242 5B63 54DC 578D 5CDC 65E2 6D0E 6D4E 7D00 830D 8324 8360 8A08 5264 7D12 7EE7 89CA 8A18 5048 5BC2 5BC4 5F9B 60B8 65E3 689E 6E08 796D 5848 60CE 81EE 846A 8507 517E 75F5 7D99 84DF 88DA 8900 969B 9B3E 66A8 6F03 6F08 7A29 7A4A 8A8B 8DFD 9701 9C9A 66A9 7A37 8AC5 9CAB 5180 5291 66C1 7A44 858A 9AFB 568C 6A95 6FDF 7E4B 7F7D 85BA 89AC 6AB5 9D4B 9F4C 61FB 7660 7A67 860E 9AA5 9BDA 7031 7E7C 862E 9C40 863B 973D 9C36 9C3F 9C6D 9A65 4EBD 8F91 6A2D 8F2F 5EED 766A 52A0 4E6B 5939 4F3D 593E 62B8 4F73 62C1 6CC7 8304 8FE6 67B7 6BE0 6D43 73C8 57C9 5BB6 6D79 75C2 689C 7B33 801E 8888 50A2 7333 846D 8DCF 728C 8175 926B 5609 927F 9553 8C6D 8C91 93B5 9E9A 573F 5FE6 6274 90CF 835A 90DF 550A 605D 83A2 621B 88B7 94D7 621E 86F1 88CC 988A 86FA 8DF2 9782 9904 92CF 982C 9830 9D36 9D4A 7532 4EEE 5CAC 53DA 73BE 80DB 659A 8D3E 94BE 5047 5A7D 5FA6 659D 6935 8CC8 9240 698E 69DA 7615 6A9F 4EF7 9A7E 67B6 5AC1 5E4F 69A2 50F9 99D5 7A3C 7CD8 620B 5978 5C16 5E75 575A 6B7C 95F4 51BF 6214 73AA 80A9 8270 59E6 59E7 517C 76D1 5042 5805 60E4 730F 7B3A 83C5 83FA 8C5C 6E54 724B 728D 7F04 844C 9593 641B 6937 693E 714E 744A 7777 788A 7F23 84B9 8C63 76E3 7B8B 6A2B 719E 7DD8 8551 8573 9CA3 9CFD 9E63 71B8 7BEF 7E11 8271 97AC 9930 99A2 9E89 7010 97AF 9CD2 791B 89B8 9D73 7038 9427 6AFC 6BB2 9DBC 97C0 9C39 56CF 8643 946F 97C9 56DD 62E3 67A7 4FED 67EC 8327 5039 6338 6361 7B15 51CF 526A 6898 68C0 6E55 8DBC 583F 63C0 63C3 691C 6E1B 7751 7877 88E5 8A43 950F 5F3F 6695 7450 7B67 7B80 7D78 8C2B 6229 622C 78B1 5109 7FE6 64BF 6AA2 85C6 8947 8949 8B07 8E47 77BC 7906 7C21 7E6D 8B2D 9B0B 9C0E 9E78 703D 8812 9417 5297 9E7B 7C5B 8B7E 897A 9E7C 89C1 4EF6 898B 5EFA 996F 5251 6D0A 726E 8350 8D31 4FF4 5065 5263 682B 6DA7 73D4 8230 5271 5FA4 6E10 88B8 8C0F 91FC 5BCB 65D4 6957 6BFD 6E85 8171 81F6 8465 8DF5 8CCE 9274 952E 50ED 6997 6F38 852A 528D 528E 6F97 7BAD 7CCB 8AD3 8CE4 8D9D 8E10 8E3A 5292 5294 85A6 8AEB 92FB 9375 991E 77B7 78F5 87B9 9373 64F6 6FFA 7E5D 7033 89B5 93E9 8266 8B7C 8F5E 9431 9451 9452 946C 9473 5F45 58B9 6A7A 7900 6BB1 6C5F 59DC 5C06 8333 6D46 7555 8C47 5C07 8441 757A 646A 7FDE 50F5 6F3F 8780 58C3 7F30 8591 6A7F 6BAD 87BF 9CC9 7585 7913 7586 7E6E 97C1 9C42 8BB2 5956 6868 508B 848B 5968 596C 8523 69F3 734E 8029 8199 8B1B 985C 531E 5905 5F1C 964D 6D1A 7EDB 5F36 88B6 7D73 9171 52E5 6EF0 5D79 647E 5F4A 729F 7CE1 91A4 7CE8 91AC 8B3D 5320 6762 6AE4 827D 8281 4EA4 90CA 59E3 5A07 5CE7 6D47 832D 832E 9A84 80F6 6912 7126 86DF 8DE4 50EC 5604 8660 9C9B 5B0C 5D95 5DA3 618D 6F86 81A0 8549 71CB 81B2 7901 7A5A 9BAB 9D41 9E6A 7C25 87ED 8F47 940E 9DCD 9A55 9DE6 9DEE 81EB 89D2 4F7C 4FA5 6054 6322 72E1 7EDE 997A 6341 6648 70C4 768E 77EB 811A 94F0 6405 6E6B 7D5E 527F 656B 6E6C 714D 8173 8CCB 50E5 6477 669E 8E0B 9278 9903 510C 528B 5FBA 649F 64B9 96A6 5FBC 61BF 657D 657F 71DE 7F34 66D2 74AC 77EF 76A6 87DC 7E73 8B51 5B42 652A 705A 9C4E 53EB 544C 5CE4 630D 8A06 73D3 7A8C 8F7F 8F83 654E 6559 7A96 6ED8 8F03 5602 5626 65A0 6F16 9175 564D 5DA0 6F50 566D 5B13 7365 85E0 8DAD 8F4E 91AE 8B65 76AD 91C2 9D64 6AF5 7E90 9636 7596 7686 63A5 63B2 75CE 79F8 83E8 968E 5588 55DF 5826 5A98 5AC5 63ED 6904 6E5D 813B 8857 716F 7A2D 64D1 8754 7664 8B2F 9D9B 5369 536A 5B51 5C10 8282 8BA6 5226 5227 52AB 5C8A 6605 523C 52BC 6770 758C 8871 62EE 6D01 7ED3 8FFC 5022 6840 83AD 8A10 507C 5A55 5D28 6377 88BA 5091 55BC 7D50 7D5C 9889 5D65 696C 6976 6ED0 776B 7BC0 8710 874D 8A70 9263 9B5D 622A 69A4 78A3 7AED 84F5 9C92 6F54 7FAF 8AB1 8E15 978A 5E6F 937B 9B9A 5DC0 6AED 881E 8818 883D 6BD1 5A8E 89E3 89E7 98F7 6A9E 4E2F 4ECB 5424 5C95 5E8E 6212 82A5 5C46 5C4A 73A0 754C 754D 75A5 780E 8878 8BEB 501F 6088 86A7 5FA3 583A 6950 743E 86F6 9AB1 7297 8AA1 892F 9B6A 9385 8EA4 59D0 685D 5DFE 4ECA 65A4 9485 5153 91D1 6D25 77DC 8355 887F 89D4 57D0 73D2 7D1F 60CD 583B 7B4B 91FF 5D9C 9E76 9EC5 895F 4EC5 5C3D 4FAD 537A 5DF9 7D27 5807 83EB 50C5 53AA 8C28 9526 5AE4 5ED1 6F0C 76E1 7DCA 84F3 9991 69FF 747E 5118 9326 8B39 9949 4F12 52A4 52B2 5997 8FD1 8FDB 6783 52C1 6D55 8369 6649 664B 6D78 70EC 8D46 552B 740E 7972 9032 5BD6 6422 6E8D 7981 7F19 9773 5890 669C 7468 50F8 51DA 6B4F 6BA3 74A1 89D0 5664 6FC5 7E09 8CEE 568D 5B27 6FDC 85CE 71FC 74B6 89B2 8D10 9F7D 91D2 781B 743B 58D7 5755 5759 5DE0 4EAC 6CFE 7ECF 830E 4EB0 79D4 8346 834A 6D87 8396 5A5B 60CA 65CC 65CD 7304 7D4C 83C1 6676 7A09 8148 844F 7CB3 7D93 5162 7CBE 8059 9CB8 9D5B 9BE8 9D81 9D84 9E96 9F31 9A5A 9EA0 4E95 4E3C 9631 522D 5753 5B91 6C6B 6C6C 80BC 5244 7A7D 9888 666F 5106 981A 5E5C 61AC 61BC 66BB 71DB 749F 74A5 9838 87FC 8B66 598C 51C0 5F2A 5F84 8FF3 4FD3 5A59 6D44 80EB 501E 51C8 5F33 5F91 75C9 7ADE 9015 5A67 6871 68B7 6DE8 7AEB 811B 7ADF 656C 75D9 7AE7 9753 50B9 9756 5883 734D 8AA9 8E01 9759 975A 66D4 955C 975C 6FEA 701E 93E1 7AF6 7AF8 775B 6A78 71DD 5182 518B 5770 6243 57DB 7D45 99C9 99EB 860F 8614 518F 56E7 6CC2 7085 8FE5 4FB0 70AF 9008 6D7B 70F1 715A 7A98 988E 7D97 50D2 715B 71B2 6F83 8927 4E29 52FC 7EA0 673B 725E 7A76 7CFA 9E20 7CFE 8D73 9604 841B 557E 63C2 63EA 63EB 9CE9 644E 6A1B 9B0F 9B2E 4E5D 4E45 4E46 4E63 597A 7078 7396 820F 97ED 7D24 9152 9579 97EE 531B 65E7 81FC 548E 759A 67E9 67FE 5003 6344 6855 5313 53A9 6551 5AA8 5C31 5EC4 5ED0 8205 50E6 5ECF 6166 6BA7 820A 9E6B 5336 9BE6 9E94 9F68 9DF2 6C63 6766 6B0D 51E5 521F 6285 530A 5C45 62D8 6CC3 72D9 82F4 9A79 6336 75BD 75C0 7717 7820 7F5D 9671 5A35 5A6E 5D0C 63AC 68AE 6DBA 83F9 6910 741A 8152 8D84 8DD4 9514 88FE 96CE 824D 871B 8E18 8E19 92E6 99D2 9B88 9D21 97A0 97AB 9D8B 5C40 6CE6 4FB7 72CA 6854 6BE9 5579 5A45 6DD7 7117 83CA 90F9 6908 6BF1 6E68 7291 8F02 50EA 7CB7 8DFC 95B0 8ACA 8D9C 8EB9 6A58 6A8B 99F6 9D59 8E6B 9D74 5DC8 861C 9DAA 9F33 9A67 5480 5F06 6CAE 4E3E 8392 6319 6907 7B65 6989 6998 849F 9F83 8065 8209 8E3D 64E7 6AF8 9F5F 6B05 5DE8 53E5 4E6C 5DEA 8BB5 59D6 5CA0 6007 62D2 6D30 82E3 90AD 5177 6010 601A 62E0 661B 6B6B 70AC 79EC 949C 4FF1 5028 5036 51A3 5267 7C94 801F 86B7 8893 57E7 57FE 60E7 636E 8A4E 8DDD 728B 8DD9 9245 98D3 8661 8C66 952F 5BE0 6133 7AAD 805A 99CF 5287 52EE 5C66 8E1E 9B94 58C9 61C5 64DA 6FBD 7AB6 907D 92F8 5C68 98B6 8C97 7C34 8E86 91B5 61FC 943B 77E9 7220 8977 59E2 5A1F 6350 6D93 7106 74F9 8127 88D0 9E43 52EC 954C 93B8 9D51 942B 8832 5377 545F 5E23 57CD 6372 83E4 9529 81C7 9308 5946 52B5 5DFB 5026 52CC 684A 72F7 7EE2 96BD 6DC3 7737 9104 774A 7D6D 7F65 96CB 7760 7D79 98EC 617B 8528 990B 7367 7E33 7F82 5658 6485 64A7 5C69 8E7B 4E85 5B52 5B53 51B3 5214 6C12 8BC0 5F21 6289 6C7A 82B5 6CEC 73A6 73A8 6317 73CF 75A6 7804 7EDD 8673 89C9 5014 6354 6B2E 8697 5D1B 6398 658D 6877 6B8C 8990 89D6 8A23 8D7D 8DB9 902B 5095 53A5 7133 7D55 7D76 899A 8D89 920C 5282 52EA 7474 8C32 99C3 5DA5 61B0 71A6 7234 7357 761A 855D 8568 9D02 9D03 5671 61A0 6A5B 6A5C 7235 81C4 9562 87E8 87E9 5C6B 7211 8B4E 8E76 8E77 9D8C 5337 56BC 77CD 89BA 940D 941D 721D 89FC 5F4F 6204 652B 7383 9DE2 6B14 77E1 9FA3 8C9C 8EA9 9481 519B 541B 5747 6C6E 59F0 8880 8ECD 94A7 8399 8690 687E 76B2 83CC 921E 7885 76B8 76B9 89A0 9281 929E 9CAA 9E87 9355 9BB6 9E8F 9E95 5441 4FCA 90E1 9656 57C8 5CFB 6343 6D5A 9982 9A8F 6659 710C 73FA 68DE 756F 7AE3 5101 7B98 7B9F 8720 5BEF 61CF 9915 71C7 6FEC 99FF 9D54 9D58 6508 651F FDD0-004B 5494 5496 5580 8849 64D6 5361 4F67 80E9 9272 57B0 88C3 5F00 5952 63E9 950E 958B 9426 51EF 5240 57B2 607A 95FF 94E0 51F1 5274 5605 6168 8488 584F 5D66 6137 6977 8F06 669F 9534 9347 93A7 95D3 98BD 5FFE 708C 708F 6B2C 70D7 52D3 6112 613E 938E 520A 681E 52D8 9F9B 582A 5D41 6221 9F95 519A 574E 4F83 780D 83B0 5058 57F3 60C2 6B3F 586A 6B41 69DB 8F21 6ABB 9851 7AF7 8F57 770B 884E 5D01 5888 77B0 78E1 95DE 77D9 5FFC 95F6 780A 7C87 5EB7 5ADD 5D7B 6177 6F2E 69FA 7A45 7CE0 8EBF 93EE 9C47 625B 6443 4EA2 4F09 531F 909F 56E5 6297 72BA 7095 94AA 9227 958C 5C3B 9ADB 4E02 6537 8003 62F7 6D18 6832 70E4 7A01 9C93 71FA 94D0 7292 92AC 9760 9BB3 9BCC 533C 82DB 67EF 7241 73C2 79D1 80E2 8F72 75B4 7822 8DB7 68F5 842A 8EFB 988F 55D1 6415 7290 7A1E 7AA0 9233 69BC 8596 9897 6A16 778C 78D5 874C 9312 9198 9846 9AC1 791A 58F3 63E2 6BBC 7FD7 53EF 5777 5CA2 70A3 6E07 5D51 6564 6E34 5DB1 790D 514B 523B 524B 52C0 52CA 5BA2 606A 5A14 5C05 8BFE 5801 6C2A 9A92 7F02 6119 6E98 951E 78A6 7DD9 8250 8AB2 790A 9A0D 5D59 808E 80AF 80BB 57A6 6073 5543 8C64 9F88 58BE 9339 61C7 9F66 63AF 88C9 8903 52A5 962C 542D 5751 5994 6333 7841 727C 785C 94FF 787B 647C 8A99 92B5 935E 93D7 7A7A 5025 57EA 5D06 60BE 6DB3 787F 7B9C 9313 9D7C 5B54 6050 63A7 979A 8EBB 62A0 82A4 770D 527E 5F44 6473 7798 53E3 52B6 53E9 6263 6542 51A6 5BBC 5BC7 91E6 7A9B 7B58 6EF1 8532 853B 7789 7C06 9DC7 625D 5233 77FB 90C0 67AF 80D0 54ED 684D 5800 5D2B 5710 8DCD 7A9F 9AB7 9BAC 72DC 82E6 5E93 4FC8 7ED4 5EAB 79D9 8DB6 7105 88B4 55BE 7D5D 88E4 7614 9177 5EE4 8932 56B3 5938 59F1 8A87 4F89 54B5 57AE 9299 630E 80EF 8DE8 9ABB 823F 84AF 64D3 5DDC 51F7 5757 5FEB 4FA9 90D0 54D9 72EF 810D 584A 7B77 9C99 5108 58A4 9136 5672 5EE5 736A 81BE 65DD 7CE9 9C60 5726 5BBD 5BDB 5BEC 81D7 9ACB 9AD6 6B35 6B3E 6B40 7ABE 7ABD 9467 5321 52BB 8BD3 90BC 5329 54D0 6047 6D2D 6846 7844 7B50 8A86 8EED 5FF9 6282 72C2 8BF3 8ED6 8A91 9D5F 593C 5123 61ED 535D 909D 5739 7EA9 51B5 65F7 5CB2 6CC1 77FF 663F 8D36 7716 7736 7D56 8CBA 8EE6 9271 913A 58D9 9ECB 61EC 66E0 720C 8E80 77CC 7926 7A6C 7E8A 945B 783F 7D4B 7B7A 4E8F 5232 5CBF 609D 76D4 7AA5 8067 7ABA 8667 985D 95DA 5DCB 862C 594E 6646 9035 9108 9697 9804 9997 55B9 63C6 8475 9A99 6223 668C 694F 6951 9B41 777D 8770 982F 6AC6 85C8 9368 9377 9A24 5914 8637 5DD9 8641 72AA 8EA8 7143 8DEC 980D 8E5E 5C2F 532E 6B33 559F 5ABF 6126 6127 6E83 8143 8489 9988 7786 5633 5B07 6192 6F70 7BD1 8069 806D 8562 6A3B 8B09 993D 7C23 8075 7C44 9400 994B 944E 5764 6606 5803 5A6B 5D10 5D11 665C 7311 83CE 88C8 711C 7428 9AE0 88E9 8C87 951F 9AE1 9E4D 872B 890C 9AE8 747B 918C 9315 9CB2 9A09 9BE4 9D7E 9DA4 6083 6346 9603 58F8 68B1 7975 7871 7A07 88CD 58FC 7A1B 7D91 95AB 95B8 9F6B 56F0 6D83 774F 5812 5C21 6F49 71B4 6269 62E1 62EC 6304 6870 7B48 843F 8440 86DE 9614 5ED3 9822 9AFA 64F4 6FF6 95CA 979F 61D6 9729 97B9 9B20 97D5 FDD0-004C 5783 62C9 67C6 7FCB 83C8 641A 908B 65EF 524C 782C 63E6 78D6 5587 85DE 814A 63E7 694B 760C 8721 874B 8FA2 8FA3 8772 81C8 650B 7209 81D8 9B0E 74CE 9574 9BFB 881F 945E 5566 6E82 97A1 56B9 6765 4F86 4FEB 5008 5D03 5F95 6D9E 83B1 90F2 5A61 5D0D 5EB2 5FA0 68BE 6DF6 730D 840A 9028 68F6 741C 7B59 94FC 7B82 9338 9A0B 9BE0 9D86 9EB3 553B 8D49 7750 775E 8D56 8CDA 6FD1 8CF4 983C 9842 765E 9D63 7028 702C 7C41 85FE 6AF4 7669 8970 7C5F 5170 5C9A 62E6 680F 5A6A 60CF 5D50 847B 9611 84DD 8C30 53B1 6F9C 8934 5116 6593 7BEE 61E2 71E3 71F7 85CD 8955 9567 95CC 74BC 8964 8B4B 5E71 6514 703E 7046 7C43 7E7F 862D 6595 6B04 7937 8974 56D2 7061 7C63 6B17 8B95 8E9D 9484 97CA 89C8 6D68 63FD 7F06 6984 6F24 7F71 9182 58C8 61D2 89A7 64E5 5B3E 61F6 5B44 89BD 5B4F 652C 7060 56D5 6B16 9872 7E9C 70C2 6EE5 71D7 5682 6FEB 7201 721B 74D3 7224 946D 7CF7 7226 897D 5577 52C6 90CE 90DE 6B34 72FC 9606 5ACF 5ECA 658F 6879 7405 84C8 6994 746F 7860 7A02 9512 7B64 8246 870B 8782 8EB4 92C3 93AF 99FA 6717 6716 70FA 5871 84E2 6A03 8A8F 6724 57CC 5D00 6D6A 83A8 8497 95AC 5525 90D2 635E 6488 52B3 52B4 7262 7A82 54F0 5520 5D02 6D76 52DE 75E8 94F9 50D7 562E 5D97 61A5 7646 78F1 7C29 87E7 91AA 9412 985F 9ADD 8002 8001 4F6C 54BE 59E5 6045 72EB 8356 6833 94D1 92A0 6F66 6A51 8F51 6D9D 70D9 8022 916A 5AEA 61A6 6F87 8EBC 6A6F 802E 8EC2 73EF 7853 7CA9 86EF 6725 9BB1 808B 4EC2 961E 4E50 53FB 5FC7 6250 6C3B 827B 738F 6CD0 7AFB 7833 697D 97F7 6A02 7C15 9CD3 9C33 4E86 9979 990E 52D2 96F7 5AD8 7F27 8502 757E 64C2 6A91 7E32 790C 956D 6AD1 74C3 7FB8 7927 7E8D 7F4D 8632 881D 9433 8F60 513D 58E8 9458 9741 8646 6B19 7E9D 9F3A 53BD 8012 8BD4 5792 7D6B 8142 50AB 8A84 6A0F 78CA 854C 78E5 857E 5121 58D8 7657 85DF 6AD0 7928 7045 863D 8B84 9478 9E13 6CEA 6D21 7C7B 6D99 6DDA 7D2F 9179 9287 981B 982A 9311 6502 98A3 985E 7E87 8631 79B7 5841 561E 9C69 5D1A 5844 68F1 695E 7890 7A1C 8F18 8590 51B7 5030 580E 6123 7756 8E1C 5215 675D 5398 5253 79BB 8372 9A8A 60A1 68A8 68A9 68B8 7281 740D 7C9A 83DE 55B1 68C3 7282 9E42 527A 6F13 775D 7B63 7F21 8243 84E0 870A 5AE0 5B77 6A06 7483 76E0 8C8D 7CCE 853E 8935 92EB 9CA1 9ECE 7BF1 7E2D 7F79 9305 87CD 8B27 91A8 569F 85DC 908C 91D0 96E2 6584 74C8 93EB 9BEC 9D79 9EE7 56C4 6521 7055 863A 8821 9A39 5B4B 5EF2 5299 9457 7A72 7C6C 7E9A 9A6A 9C7A 9E1D 793C 91CC 4FDA 5CDB 5CE2 5A0C 5CF2 6D6C 9026 7406 9502 7CB4 88CF 8C4A 92F0 9CA4 5163 6FA7 79AE 9BC9 87F8 91B4 9CE2 9090 9C67 6B1A 529B 5386 5389 5C74 7ACB 540F 6738 4E3D 5229 52B1 5456 575C 6CA5 82C8 4F8B 5CA6 623E 67A5 6CB4 75A0 82D9 96B6 4FD0 4FEA 680E 75AC 7805 8318 8354 8D72 8F79 90E6 550E 60A7 6817 681B 6D96 7301 73D5 783A 783E 79DD 8385 8389 5533 5A6F 7B20 7C92 7C9D 8137 86B8 86CE 5088 51D3 53A4 68D9 75E2 86E0 8A48 8DDE 96F3 53AF 585B 6144 642E 6EA7 849A 849E 925D 9CE8 53B2 66A6 6B74 746E 7D9F 8727 8777 52F5 66C6 6B77 7BE5 96B7 9D17 5DC1 6FFF 7658 78FF 96B8 9B01 512E 66DE 6AD4 7204 72A1 79B2 8807 9398 56A6 58E2 650A 6ADF 701D 74C5 77CB 792A 85F6 9E97 6AEA 720F 74D1 76AA 76ED 792B 7CF2 8823 5137 7667 7930 882B 9148 9DC5 9E9C 56C7 6526 89FB 8E92 8F62 6B10 8B88 8F63 652D 74E5 9742 9C71 9C73 974B 674E 6803 54E9 5A33 72F8 88E1 6AAA 9BCF 4FE9 5006 5941 8FDE 5E18 601C 6D9F 83B2 9023 68BF 8054 88E2 4EB7 55F9 5EC9 6169 6E93 6F23 84EE 5332 5969 69E4 7191 899D 5286 5333 5652 5AFE 6190 78CF 806B 8933 9CA2 6FC2 6FD3 7E3A 7FF4 806E 8595 878A 6AE3 71EB 806F 81C1 8B30 8E65 938C 9570 7C3E 880A 9B11 942E 9C31 7C62 7C68 655B 740F 8138 88E3 6459 7489 8539 5B1A 6582 81C9 913B 895D 7FB7 861E 7EC3 70BC 604B 6D70 6B93 50C6 581C 5AA1 6E45 8430 94FE 695D 7149 7453 6F4B 7DF4 6FB0 932C 6BAE 934A 93C8 7032 861D 9C0A 6200 7E9E 8068 826F 4FCD 51C9 6881 6DBC 690B 8F8C 7CAE 7CB1 589A 7DA1 8E09 6A11 8F2C 7CE7 4E21 4E24 5169 5521 5562 639A 813C 88F2 7DC9 873D 9B49 9B4E 4EAE 54F4 60A2 8C05 8F86 55A8 667E 6E78 91CF 8F0C 8AD2 8F1B 9344 7177 7C17 64A9 8E7D 8FBD 7597 804A 50DA 5BE5 5D7A 6180 6F3B 818B 5639 5AFD 5BEE 5D9A 5D9B 6579 7360 7F2D 907C 66B8 71CE 7499 81AB 7642 9E69 5C6A 5EEB 7C1D 7E5A 87DF 8C42 8CFF 8E58 9410 9ACE 85D4 98C9 9DEF 53FE 948C 91D5 911D 84FC 61AD 77AD 66E2 957D 7212 5C25 5C26 7093 6599 5C1E 5ED6 6482 7AB7 9563 720E 5217 52A3 51BD 52BD 59F4 6312 6D0C 8322 8FFE 54F7 57D2 57D3 6835 6D56 70C8 6369 730E 811F 86DA 88C2 716D 7759 8057 8D94 5DE4 98B2 5120 9BA4 9D37 64F8 7375 72A3 8E90 9B1B 9B23 9C72 6BDF 54A7 6318 70EE 731F 62CE 53B8 90BB 6797 4E34 51A7 77DD 5549 5D0A 6DCB 667D 7433 7CA6 75F3 7884 7B96 7CBC 9130 96A3 5D99 6F7E 735C 9074 65B4 66BD 71D0 7498 8F9A 9716 77B5 78F7 81E8 7E57 7FF7 9E90 8F54 58E3 7036 93FB 9CDE 9A4E 9C57 9E9F 83FB 4E83 51DB 51DC 649B 5EE9 5EEA 61CD 61D4 6F9F 6A81 6AA9 765B 765D 541D 6061 608B 8D41 711B 8CC3 50EF 853A 6A49 7510 81A6 95B5 7584 85FA 8E78 8E8F 8E99 8EAA 8F65 3007 5222 7075 56F9 577D 590C 59C8 5CBA 5F7E 6CE0 72D1 82D3 6624 670E 67C3 73B2 74F4 51CC 768A 7831 79E2 7ADB 94C3 9675 9E30 5A48 6395 68C2 6DE9 740C 7B2D 7D37 7EEB 7F9A 7FCE 8046 8232 83F1 86C9 8851 797E 8A45 8DC9 8EE8 88EC 9234 959D 96F6 9F84 7DBE 8506 970A 99D6 6FAA 8576 9302 9B7F 9CAE 9D12 9E77 71EF 971B 971D 9F62 9143 9BEA 5B41 8626 9F61 6AFA 91BD 9748 6B1E 7227 9EA2 9F97 963E 5CAD 888A 9886 9818 5DBA 4EE4 53E6 5464 70A9 4F36 84E4 9717 702E 6E9C 7198 8E53 5218 6CA0 7544 6D4F 6D41 7559 65C8 7409 7571 786B 88D7 5AB9 5D67 65D2 84A5 84C5 905B 998F 9A9D 69B4 7460 98D7 5289 746C 7624 78C2 954F 99E0 9E60 6A4A 74A2 7581 9560 7645 87C9 99F5 56A0 61F0 700F 85F0 938F 93A6 9E8D 93D0 98C0 9A2E 98C5 9C21 9DB9 9A51 67F3 6801 73CB 687A 7EFA 950D 925A 98F9 7DB9 71AE 7F76 92F6 6A6E 5B3C 7F80 516D 7542 7FCF 586F 5EC7 6F91 78DF 9E68 9724 993E 96E1 9402 98C2 9B38 9DDA 685E 56D6 9F99 5C78 5499 6CF7 830F 663D 680A 73D1 80E7 772C 783B 7ADC 7B3C 804B 9686 6E70 6EDD 5D90 6F0B 856F 7643 7BED 9F8D 56A8 5DC3 5DC4 7027 7C3C 8622 93E7 9733 66E8 6727 6AF3 7216 74CF 77D3 7931 7932 8971 9F92 7C60 807E 882A 882C 8C45 8E98 9468 9747 9A61 9E17 9647 5784 5785 62E2 7BE2 5131 96B4 58DF 58E0 650F 7AC9 9F93 54E2 6335 6887 5FBF 8D1A 69DE 7ABF 779C 5245 5A04 507B 5A41 6E87 848C 50C2 697C 5ED4 617A 6F0A 851E 9071 6A13 71A1 8027 877C 802C 825B 87BB 8B31 8EC1 9AC5 97BB 9ACF 5D5D 6402 587F 5D81 645F 750A 7BD3 7C0D 964B 5C5A 6F0F 7618 9542 763A 763B 93E4 55BD 560D 565C 64B8 5362 5E90 82A6 5786 6CF8 7089 680C 80EA 8F73 9E2C 7388 823B 9885 9C88 9B72 76E7 6ADA 56A7 58DA 5EEC 650E 7018 7379 74B7 8606 66E5 6AE8 7210 74D0 81DA 77D1 7C5A 7E91 7F4F 826B 8826 8F64 946A 9871 9AD7 9C78 9E15 9EF8 5364 864F 63B3 9E75 7875 9C81 865C 5877 6EF7 84FE 6A10 9B6F 64C4 6A79 78E0 9565 5695 64FC 7002 6AD3 6C0C 8263 93C0 826A 942A 9465 5725 752A 9646 4F93 5774 5F54 5F55 5CCD 52CE 8D42 8F82 9678 5A3D 6DD5 6DE5 6E0C 7849 83C9 902F 9E7F 6902 742D 7984 797F 50C7 5279 52E0 76DD 7769 788C 7A11 8CC2 8DEF 5876 5ED8 645D 6F09 7B93 7CB6 850D 622E 6A1A 719D 8194 89EE 8DA2 8E1B 8F98 9181 6F5E 7A4B 8557 9304 9332 9334 7490 7C0F 87B0 7C36 8E57 8F46 9A04 9E6D 7C2C 93D5 9BE5 9D66 9D71 9E93 93F4 9732 9A3C 7C59 8642 9DFA 67A6 822E 9229 6F9B 6C07 9A74 90D8 95FE 6988 95AD 99BF 6C00 81A2 85D8 9DDC 9A62 5415 5442 4FA3 4FB6 6314 635B 634B 65C5 68A0 7963 7A06 94DD 5C61 7D7D 7F15 5C62 8182 891B 92C1 5C65 8190 8938 5122 7A5E 7E37 7A6D 5BFD 578F 5F8B 8651 7387 7EFF 5D42 6C2F 844E 6EE4 7DA0 7DD1 616E 7BBB 819F 52F4 7E42 6FFE 6AD6 7208 9462 7112 5A08 5B6A 5CE6 631B 683E 9E3E 8114 6EE6 92AE 9D49 571D 5971 5B4C 5B7F 5DD2 6523 66EB 6B12 7053 7F89 81E0 571E 7064 864A 947E 7674 7675 9E1E 5375 4E71 91E0 4E82 7567 950A 7A24 5719 92DD 92E2 64FD 62A1 6384 4ED1 4F26 56F5 6CA6 7EB6 4F96 8F6E 502B 966F 5707 5A68 5D18 5D19 60C0 6DEA 83D5 68C6 8140 7DB8 8726 8E1A 8F2A 9300 9BE9 57E8 7896 7A10 8023 8BBA 6EA3 8AD6 78EE 7F57 5570 9831 56C9 7F56 7321 8136 841D 903B 6924 8161 8999 9523 7BA9 9AA1 9559 87BA 7F85 89B6 93CD 5138 89BC 9A3E 651E 7380 863F 908F 6B0F 9A58 9E01 7C6E 947C 9960 5246 502E 84CF 88F8 8EB6 7630 8803 81DD 66EA 7673 6CFA 5CC8 6D1B 7EDC 8366 9A86 6D1C 73DE 7866 7B3F 7D61 843D 55E0 645E 6F2F 7296 927B 96D2 99F1 9BA5 9D3C 9D45 6FFC 7E99 FDD0-004D 5463 5988 5B56 5ABD 5B24 5B37 9EBB 75F2 8534 7298 87C7 9A6C 739B 7801 8682 99AC 6EA4 746A 78BC 879E 93B7 9C22 9DCC 72B8 6769 7943 9581 9A82 551B 508C 7341 7770 561C 69AA 79A1 7F75 99E1 7923 9B15 4E87 5417 55CE 9064 561B 5AF2 87C6 57CB 85B6 973E 4E70 836C 8CB7 562A 8552 9DF6 52A2 8FC8 4F45 58F2 9EA6 5356 8109 8108 9EA5 8847 52F1 8CE3 9081 9721 9722 5ADA 989F 59CF 6097 86EE 50C8 8C29 6172 9992 6A20 7792 779E 9794 8B3E 9945 9CD7 9862 9B17 9B18 9C3B 883B 5C58 6E80 774C 6EE1 6EFF 87A8 8954 87CE 93CB 77D5 66FC 9124 5881 5E54 6162 6471 6F2B 734C 7F26 8504 8513 69FE 71B3 6FB7 9558 7E35 93DD 8630 7264 9099 5402 5FD9 6C52 8292 5C28 6757 6767 6C13 76F2 607E 7B00 832B 54E4 5A0F 5EAC 6D5D 72F5 727B 786D 91EF 94D3 75DD 86D6 92E9 99F9 83BD 83BE 7865 833B 58FE 6F2D 87D2 880E 732B 8C93 6BDB 77DB 6786 7266 8305 8306 65C4 7F5E 515E 6E35 8EDE 9155 5825 951A 5AF9 9AE6 6C02 729B 8765 9AF3 9328 87CA 9D9C 5187 536F 5918 4E6E 623C 5CC1 6CD6 6634 94C6 7B37 84E9 5183 7683 82BC 5190 8302 5192 67D5 770A 8D38 8004 88A4 8992 5AA2 5E3D 843A 8CBF 911A 6117 6693 6959 6BF7 7441 7780 8C8C 912E 8750 61CB 4E48 9EBC 5692 6FF9 569C 7666 5445 5746 6C92 6CA1 679A 73AB 82FA 6802 7709 5A12 8104 8393 6885 73FB 8122 90FF 5833 5A92 5D4B 6E44 6E48 7338 7742 847F 6963 6973 7164 7442 7996 587A 69D1 9176 9545 9E5B 92C2 9709 7A48 5FBE 9387 77C0 6517 862A 9DA5 9EF4 6BCE 6BCF 51C2 7F8E 6334 6D7C 5A84 5D44 6E3C 5ABA 815C 9541 5B0D 71D8 9382 9EE3 59B9 62BA 6CAC 65C0 6627 7959 8882 771B 5A9A 5BD0 75D7 8DCA 9B3D 715D 7778 97CE 9B45 7BC3 875E 8EBE 95E8 626A 73A7 9494 9580 9585 636B 83DB 748A 9346 4EB9 864B 95F7 7116 60B6 66AA 71DC 61D1 61E3 4EEC 5011 691A 753F 867B 51A1 8394 840C 8420 76DF 8499 750D 511A 6A57 77A2 8544 8771 9133 9138 5E6A 61DE 6FDB 66DA 6726 6AAC 6C0B 77C7 791E 9BCD 9E72 8268 8609 77D2 973F 9740 995B 986D 9F06 9E0F 52D0 731B 74FE 9530 824B 8722 61DC 7374 9333 61F5 8813 9BED 5B5F 68A6 5922 6E95 5923 9725 63B9 64DD 54AA 772F 7787 519E 5F25 7F59 7962 8FF7 7315 8C1C 84BE 8A78 8B0E 919A 5F4C 64DF 7CDC 7E3B 9E8A 9E8B 79B0 9761 7030 737C 9E9B 957E 6202 6520 74D5 863C 7222 91BE 91BF 9E0D 91C4 7C73 8288 4F8E 6CB5 7F8B 5F2D 6D23 6549 772B 8112 6E33 845E 851D 92A4 6FD4 5B4A 7056 5196 7CF8 6C68 6C95 5B93 6CCC 89C5 5CDA 7955 5BBB 79D8 5BC6 6DE7 6DFF 8993 8994 5E42 8C27 5853 5E4E 899B 5627 6993 6EF5 6F1E 7190 8524 871C 9F0F 51AA 6A12 5E66 6FD7 85CC 8B10 6AC1 7C1A 7F83 5B80 8287 7720 5A42 7EF5 5A94 68C9 7DBF 7DDC 81F1 8752 5B35 6AB0 6ACB 77C8 77CA 77CF 4E0F 6C45 514D 6C94 9EFE 52C9 7704 5A29 506D 5195 52D4 6E11 5595 6110 6E4E 7F05 8442 7D7B 817C 9EFD 7DEC 9EAB 6FA0 9BB8 9763 9762 7CC6 9EAA 9EBA 9EB5 55B5 82D7 5A8C 63CF 7784 9E4B 7DE2 9D93 9C59 676A 7707 79D2 6DFC 6E3A 7F08 7BCE 7DF2 85D0 9088 5999 5E99 7385 7AD7 5EBF 5EDF 4E5C 5400 54A9 54F6 5B6D 706D 70D5 8995 6423 6EC5 8511 858E 9D13 5E6D 61F1 7BFE 6AD7 881B 884A 9456 9C74 6C11 59C4 5CB7 5FDE 600B 65FB 65FC 82E0 73C9 76FF 7807 7F60 5D0F 636A 7418 7F17 656F 7449 75FB 7888 9231 7DCD 7DE1 9309 9D16 9372 76BF 51BA 5221 95F5 62BF 6CEF 52C4 6543 95FD 60AF 654F 7B22 60FD 6E63 9594 610D 668B 95A9 50F6 615C 61AB 6F63 7C22 9CD8 8820 9C35 578A 7B3D 540D 660E 9E23 6D3A 7700 8317 51A5 6719 7733 94ED 910D 5AC7 6E9F 733D 84C2 669D 69A0 9298 9CF4 7791 879F 89AD 4F72 59F3 51D5 614F 9169 547D 6927 8A7A 63B5 8C2C 8B2C 6478 8C1F 5AEB 998D 6479 6A21 819C 9EBD 6469 6A45 78E8 7CE2 8B28 56A4 64F5 9943 56A9 56B0 8611 9ACD 9B54 5298 995D 62B9 61E1 672B 52B0 573D 59BA 5E13 6B7E 6B7F 6B81 6CAB 8309 964C 5E1E 6629 67BA 551C 768C 771C 773F 781E 79E3 8388 83AB 773D 7C96 7D48 6E50 86E8 8C83 55FC 587B 5BDE 6F20 734F 84E6 8C8A 66AF 9286 977A 5AFC 9ED9 763C 7790 7799 9546 9B69 58A8 9ED8 700E 8B29 8C98 85E6 87D4 93CC 7205 9A40 7933 7E86 8031 5E85 603D 5C1B 9B79 9EBF 54DE 725F 4F94 52BA 6048 6D20 7738 8C0B 86D1 7F2A 8E0E 927E 8B00 77B4 7E46 936A 9D3E 9EB0 67D0 6BEA 6C01 58B2 6BCD 4EA9 7261 5776 59C6 5CD4 7273 7546 7552 80DF 755D 755E 782A 756E 9267 8E07 6728 4EEB 6730 76EE 6C90 72C7 7091 7267 82DC 6BE3 83AF 869E 94BC 52DF 96EE 5893 5E55 5E59 6154 6958 7766 926C 6155 66AE 8252 9702 7A46 7E38 97AA 51E9 62C7 FDD0-004E 55EF 62CF 62FF 6310 55F1 954E 93BF 4E78 54EA 96EB 90A3 59A0 7EB3 80AD 5A1C 8872 94A0 7D0D 88A6 637A 7B1D 8C7D 8EDC 8C80 9209 84B3 9779 9B76 8149 718B 6468 5B7B 4E43 5976 827F 6C16 7593 59B3 5EFC 8FFA 5037 91E2 5B2D 5948 67F0 800F 8010 8418 6E3F 9F10 8926 879A 933C 56E1 7537 678F 67AC 4FBD 5357 67DF 5A1A 7558 83AE 96BE 5583 6694 6960 8AF5 96E3 8D67 63C7 6E73 8433 8169 877B 6201 5A7B 9056 56D4 4E6A 56A2 8B68 56CA 8830 9B1E 9995 6B1C 9962 64C3 66E9 652E 7062 513E 9F49 5B6C 5476 6013 6320 5CF1 7847 94D9 7331 86F2 8A49 7899 6493 5DA9 61B9 87EF 5912 8B4A 9403 5DCE 57B4 607C 60A9 8111 5318 5816 60F1 5AD0 7459 8166 78AF 7376 737F 95F9 5A65 6DD6 9599 9B27 81D1 8133 7592 8BB7 6290 7732 8A25 5436 5450 5462 5A1E 9981 812E 8147 9912 9BBE 9BD8 5167 5185 6C1D 9317 6041 5AE9 5AF0 80FD 59AE 5C3C 576D 6029 6CE5 7C7E 502A 5C54 79DC 90F3 94CC 57FF 5A57 6DE3 730A 86AD 68FF 8DDC 815D 8063 873A 89EC 8C8E 8F17 9713 9CB5 9BD3 9BE2 9E91 9F6F 81E1 4F31 4F60 62DF 62B3 72D4 82E8 67C5 65CE 6672 5B74 922E 999C 5117 511E 96AC 64EC 85BF 6AB7 807B 5C70 6C3C 4F32 8FE1 6635 80D2 9006 533F 7724 5804 60C4 5ADF 6135 6EBA 7768 817B 66B1 7E0C 8ABD 81A9 5B3A 88AE 62C8 852B 5E74 79CA 79E5 9C87 9B8E 9CB6 9ECF 9BF0 6D8A 637B 6DF0 713E 8DC8 8F87 8F97 649A 64B5 78BE 8F26 7C10 8E4D 6506 8E68 8E8E 5344 5EFF 5FF5 59E9 5538 57DD 824C 9F30 54D6 9D47 5B22 5B43 917F 91B8 91C0 5A18 9E1F 8311 8885 9CE5 5ACB 88CA 8526 6A22 5B1D 892D 5B32 5C3F 8132 634F 63D1 82F6 5E07 573C 67BF 9667 6D85 75C6 8042 81EC 556E 60D7 83CD 9689 55A6 655C 6E7C 55EB 5D72 8E02 565B 6470 69F7 8E17 954A 954D 5DAD 7BDE 81F2 931C 989E 8E51 5699 8076 93B3 95D1 5B7C 5B7D 6AF1 7C4B 8616 56C1 9F67 7CF1 7CF5 8825 9448 56D3 8B98 8EA1 9477 9873 9480 5DD5 56DC 60A8 62F0 810C 5B81 549B 62E7 72DE 82E7 67E0 804D 5BCD 5BD5 752F 5BD7 5BDC 5BE7 511C 51DD 5680 5B23 64F0 7370 85B4 6AB8 8079 944F 9B21 9E0B 6A63 77C3 4F5E 4FAB 6CDE 6FD8 6F9D 599E 725B 6C7C 5FF8 626D 72C3 7EBD 7084 94AE 7D10 83A5 9215 9775 8842 725C 519C 4FAC 54DD 6D53 8113 79FE 8FB2 5102 8FB3 5665 6FC3 857D 6A82 71F6 79AF 81BF 7A60 895B 91B2 6B01 7E77 5F04 630A 7651 9F48 7FBA 5542 69C8 8028 7373 6ABD 9392 941E 8B73 5974 5B65 9A7D 7B2F 99D1 4F2E 52AA 5F29 782E 80EC 6012 5089 6419 5973 9495 7C79 91F9 6C91 6067 6712 8844 597B 6E1C 6696 7156 7157 992A 759F 8650 7878 7627 9EC1 90CD 632A 689B 50A9 513A 6A60 8BFA 558F 63BF 903D 611E 6426 9518 643B 6992 7A2C 8AFE 8E43 7CD1 61E6 61E7 7CE5 7A64 7CEF FDD0-004F 5594 5662 54E6 7B7D 8BB4 6CA4 6B27 6BB4 74EF 9E25 5878 6F1A 6B50 6BC6 71B0 750C 9D0E 6AD9 8B33 93C2 9DD7 8192 9F75 5418 5455 5076 8162 5614 8026 8545 85D5 6004 616A 85F2 FDD0-0050 5991 7685 8DB4 8225 556A 8469 6777 722C 63B1 7436 7B62 6F56 5E0A 5E15 6015 8899 62CD 4FF3 5F98 6392 7305 68D1 724C 8F2B 7C30 7C32 72A4 5EF9 54CC 6D3E 6E43 848E 9383 7705 7819 7568 6F58 6500 723F 6D00 76D8 8DD8 5ABB 5E4B 84B0 642B 69C3 76E4 78D0 7E0F 78FB 8E52 700A 87E0 8E63 939C 97B6 51B8 5224 6C9C 62DA 6CEE 708D 53DB 7249 76FC 7554 8041 88A2 8A4A 6EBF 9816 92EC 897B 947B 9D65 4E53 6C97 80EE 96F1 6EC2 8196 9736 5390 5E9E 5396 9004 65C1 823D 5ACE 5FAC 8783 9CD1 9F8E 9F90 55D9 802A 89AB 7090 80A8 80D6 629B 62CB 812C 5228 5486 5789 5E96 72CD 70B0 722E 888D 530F 8EF3 9784 9E83 9E85 8DD1 5945 6CE1 70AE 75B1 76B0 7832 9EAD 791F 792E 8422 891C 5478 600C 80A7 67F8 80DA 8843 9185 962B 966A 57F9 6BF0 8D54 952B 88F4 88F5 8CE0 99CD 4FD6 4F02 6C9B 4F69 5E14 59F5 65BE 65C6 6D7F 73EE 914D 7B29 8F94 99B7 5D8F 9708 8F61 84DC 55B7 5674 6B55 74EB 76C6 6E53 8450 5460 7FF8 55AF 5309 6026 62A8 6072 7830 6888 70F9 7851 8EEF 959B 6F30 562D 6F8E 78DE 8283 670B 6337 7AFC 5017 8391 580B 5F38 5F6D 68DA 6916 5873 787C 7A1D 84EC 9E4F 69F0 6A25 71A2 6189 8F23 7BE3 81A8 930B 97F8 9AFC 87DA 87DB 9B05 7E84 97FC 9D6C 9A2F 9B14 945D 6367 6DCE 768F 527B 63BD 692A 78B0 8E2B 7BF7 4E15 4F13 4F3E 6279 7EB0 90B3 576F 62AB 62B7 708B 72C9 7812 6082 79DB 79E0 7D15 94CD 65C7 7FCD 801A 8C7E 9208 921A 9239 925F 9294 5288 78C7 99D3 9AEC 567C 930D 9B7E 9B8D 61B5 7914 7915 9739 76AE 9630 8298 5CAF 6787 6BDE 72D3 80B6 6BD7 6BD8 75B2 868D 90EB 9674 5564 57E4 5D25 86BD 86BE 8C7C 7137 7435 813E 8157 9C8F 7F74 818D 8731 9B6E 58C0 7BFA 87B7 8C94 9D67 7F86 6707 9F19 5339 5E80 758B 4EF3 572E 82C9 8134 75DE 92A2 8AC0 9D04 64D7 567D 7656 56AD 5C41 6DE0 6E12 63CA 91FD 5AB2 5AD3 7765 8F9F 6F4E 7A2B 50FB 6FBC 568A 7513 7588 8B6C 95E2 9DFF 9E0A 698C 56E8 504F 5AA5 728F 7BC7 7FE9 9342 9DA3 9A88 80FC 8141 6944 6969 8CC6 8DF0 8ADA 9ABF 8E41 99E2 9A08 8991 8C1D 8CB5 8ADE 7247 9A97 9A17 9A19 9B78 527D 6153 7F25 98D8 65DA 7FF2 87B5 72A5 98C3 98C4 9B52 5AD6 74E2 7AC2 85B8 95DD 6B8D 5F6F 779F 7BFB 7E39 91A5 76AB 9860 7968 50C4 52E1 560C 5FB1 6F02 6C15 6487 6486 66BC 77A5 4E3F 82E4 9405 5AF3 59D8 62FC 7917 7A66 99AA 9A5E 73AD 8D2B 5A26 8CA7 7415 5AD4 9891 983B 5B2A 7371 85B2 56AC 77C9 8819 98A6 9870 54C1 6980 725D 6C56 8058 4E52 7539 4FDC 5A09 6D84 782F 8060 8275 7AEE 9829 5E73 8BC4 51ED 546F 576A 6CD9 82F9 90F1 5C4F 5E21 67B0 6D34 73B6 80D3 8353 74F6 5C5B 5E32 6DDC 840D 86B2 5E48 7129 7501 7F3E 84F1 86E2 8A55 8EFF 9C86 51F4 617F 7BB3 8F27 6191 9B83 6A98 7C08 860B 5CBC 5840 948B 5761 5CA5 6CCA 9887 6E8C 9255 9817 93FA 5A46 5619 8522 9131 76A4 8B08 6AC7 53F5 5C00 94B7 7B38 99CA 5CB6 7087 8FEB 6540 6622 6D26 73C0 70DE 7834 7836 91D9 7C95 84AA 9B44 9197 6CFC 6872 6F51 5256 5A1D 6294 6299 634A 638A 88D2 7B81 9307 5485 54E3 5A44 7283 5ECD 4EC6 6534 6251 9660 5657 64B2 6F7D 64C8 9BC6 530D 8386 812F 83E9 83D0 8461 84B1 84B2 50D5 917A 58A3 735B 749E 6FEE 77A8 7A59 9564 8965 7E80 93F7 5724 6734 5703 6D66 70F3 666E 6EA5 8C31 8AE9 6A38 6C06 6A8F 9568 8B5C 8E7C 9420 94FA 8216 8217 92EA 7011 66DD 5DEC 5DED 99C7 8D0C FDD0-0051 4E03 8FC9 6C8F 59BB 67D2 501B 51C4 6816 6864 90EA 5A38 60BD 687C 6DD2 840B 6532 671F 68F2 6B3A 86E3 50DB 5601 617D 69BF 6F06 7DC0 617C 69ED 8AC6 8AFF 970B 8E4A 9B4C 93DA 9D88 4E93 7941 9F50 573B 5C90 5C93 5FEF 82AA 4E9D 5176 5947 6589 6B67 7541 7947 7948 80B5 4FDF 75A7 7AD2 5258 658A 65C2 8006 8110 8691 8694 869A 9880 57FC 5D0E 5E3A 6391 6DC7 7309 7566 8401 8415 8DC2 8EDD 91EE 9A90 9A91 68CA 68CB 7426 742A 797A 86F4 612D 7881 7895 951C 980E 9B3F 65D7 7CB8 7DA5 7DA6 7DA8 871D 871E 9F4A 7482 79A5 8572 8E11 9321 9CAF 61E0 6FDD 85C4 6AB1 6AC0 81CD 9A0E 9A0F 9CCD 8604 9BD5 9D78 9D80 9E92 7E83 8269 8810 9B10 9C2D 7382 9EA1 4E5E 9094 4F01 5C7A 5C82 8291 542F 5447 675E 7398 76C0 5518 8C48 8D77 5553 5554 5A4D 555F 7EEE 6675 68E8 7DAE 7DBA 8AEC 95D9 6C14 8BAB 5FD4 6C17 6C54 8FC4 5F03 6C7D 77F5 829E 546E 6CE3 7081 76F5 54A0 5951 780C 6814 6C23 8A16 552D 6B2B 5921 68C4 6E46 6E47 847A 789B 6456 66A3 7508 78B6 5650 6187 5668 61A9 78DC 78E7 78E9 7F4A 87FF 9F1C 7F3C 621A 6E0F 8904 7DD5 87A7 7C2F 7C31 7C4F 6390 845C 62E4 8DD2 9160 5736 51BE 5E22 6070 6D3D 6B8E 7848 6118 9AC2 9790 5343 4EDF 9621 5731 5732 5977 6266 6C58 828A 8FC1 4F65 5C8D 6744 6C67 74E9 833E 6B26 81E4 948E 62EA 7275 7C81 515B 60AD 8688 8C38 94C5 5A5C 5B6F 727D 91FA 6394 8C26 9206 96C3 50C9 6106 7B7E 925B 9A9E 9E50 6173 6434 6481 7B9E 8AD0 9077 8930 8B19 9845 6AB6 6510 6511 6ACF 7C3D 9D6E 5B45 6513 9A2B 9B1D 9B1C 7C64 97C6 4EF1 5C92 5FF4 6272 62D1 524D 94A4 6B6C 8654 94B1 94B3 63AE 63F5 8EE1 5A8A 9210 976C 9257 5898 69A9 7B9D 92AD 6F5B 6F5C 7FAC 8541 6A6C 9322 9ED4 9EDA 9A1D 6FF3 9A1A 704A 9C2C 51F5 6D45 80B7 6DFA 8125 55DB 5D70 9063 69CF 8181 8738 8C34 7F31 7E7E 8B74 6B20 520B 82A1 4FD4 831C 5029 6093 5811 5094 5D4C 68C8 6920 614A 7698 84A8 5879 6B49 7DAA 8533 5119 69E7 7BCF 8F24 7BDF 58CD 7E34 9C1C 7ACF 9386 93F2 7C56 9453 545B 7F8C 6215 6217 65A8 67AA 73B1 7F97 7310 8DC4 690C 6EAC 8154 55C6 8723 9516 5D88 6227 69CD 7244 7472 7FAB 9535 7BEC 9306 8B12 8E4C 956A 8E61 9397 93D8 4E2C 5F37 5F3A 5899 5AF1 8537 6A2F 6F12 8503 58BB 5B19 5EE7 8594 6AA3 7246 8262 8620 62A2 7F9F 6436 7FA5 588F 7E48 8941 7E66 93F9 709D 5534 7197 7FBB 55F4 7347 6084 7857 90FB 5D6A 8DF7 9121 9125 5281 6572 6BC3 8E0D 9539 589D 981D 9AB9 58BD 5E67 6A47 71C6 7F32 78FD 936B 936C 7E51 8DAC 8E7A 9430 4E54 4FA8 834D 835E 6865 785A 83EC 55AC 50D1 8C2F 563A 5AF6 6194 854E 9792 6A35 6A4B 7644 77A7 7904 85EE 8DAB 9408 97BD 9866 5DE7 91E5 6100 9ADC 4FCF 8BEE 9657 5CED 5E29 7A8D 6BBB 7FD8 8A9A 9ADA 50FA 64AC 64BD 9798 97D2 7AC5 7FF9 8B59 8E88 69D7 729E 767F 807A 4E14 5207 59BE 602F 90C4 5327 7A83 608F 6308 6D2F 60EC 6DC1 7B21 611C 86EA 6705 7BA7 7DC1 9532 7BCB 8E25 7A55 85D2 9365 9BDC 9411 7ACA 82C6 503F 5AAB 7C61 4EB2 4FB5 94A6 887E 9A8E 5A87 5D5A 6B3D 7D85 8A9B 5D94 89AA 9849 99F8 9BBC 5BF4 5E88 82A9 82B9 57C1 73E1 79E6 8039 83E6 8699 6366 83F3 7434 7439 79BD 9219 96C2 52E4 55EA 5AC0 6EB1 9772 616C 5659 64D2 65B3 9CF9 61C4 6A8E 6FBF 763D 8793 61C3 8804 9B35 9D6D 5745 6611 7B09 68AB 8D7E 5BD1 9513 5BDD 5BE2 92DF 87BC 5422 5423 628B 6C81 551A 83E3 63FF 6407 64B3 7019 85FD 72C5 9751 9752 6C22 8F7B 503E 537F 90EC 570A 57E5 5BC8 6C2B 6DF8 6E05 50BE 873B 8F15 9CAD 944B 591D 7520 5260 52CD 60C5 6B91 6674 68FE 6C30 845D 6692 64CF 6A08 64CE 6AA0 9EE5 82D8 9877 8BF7 5EBC 9803 5ECE 6F00 8ACB 6ABE 5E86 51CA 6385 6BB8 7883 7B90 9758 6176 78D8 78EC 7F44 8B26 7858 6AE6 828E 5314 536D 909B 5B86 7A77 7A79 8315 684F 7B3B 7B47 8D79 60F8 712A 712D 743C 823C 86E9 86EC 7162 7758 8DEB 928E 778F 7AAE 511D 618C 6A69 749A 85D1 74CA 7AC6 85ED 74D7 718D 4E18 4E20 90B1 5775 6058 79CB 79CC 86AF 5A9D 8429 6978 84F2 9E59 7BCD 7DE7 8775 7A50 8DA5 9CC5 87D7 97A6 97A7 9C0C 9C0D 9D96 8824 9F9D 53F4 56DA 624F 72B0 738C 6C53 808D 6C42 866C 6CC5 866F 4FC5 89D3 8A04 8A05 914B 91D3 5512 6D57 7D0C 838D 900E 9011 91DA 6882 6B8F 6BEC 7403 8D47 5D37 5DEF 6E1E 6E6D 76B3 76DA 9052 716A 7D7F 86F7 88D8 5DF0 89E9 8CD5 7486 8764 92B6 9194 9B82 9F3D 9BC4 9C3D 641D 7CD7 91FB 8612 533A 66F2 4F39 4F49 5324 5C96 8BCE 9639 9A71 5765 5C48 5CA8 5CB4 62BE 6D40 795B 80E0 88AA 5340 7D36 86C6 8EAF 7B41 7CAC 86D0 8A58 8D8B 5D87 6188 99C6 657A 8AB3 957C 99C8 9EB9 9AF7 9B7C 8DA8 9EAF 89B0 8EC0 9EB4 9EE2 89BB 9A45 9C38 9C4B 4F62 52AC 65AA 6710 80CA 83C3 9E32 6DED 6E20 7D47 7FD1 844B 8EE5 8556 7496 78F2 87B6 9D1D 74A9 87DD 77BF 9F29 8627 5FC2 7048 6235 6B0B 6C0D 7C67 81DE 766F 8837 8862 8EA3 883C 947A 9E1C 53D6 7AD8 5A36 8A53 7AEC 877A 9F8B 9F72 53BA 53BB 521E 547F 551F 801D 9612 89D1 8DA3 95B4 9EAE 95C3 89B7 9F01 8FF2 8850 5CD1 5F2E 606E 609B 5708 570F 68EC 99E9 9409 5168 6743 4F7A 8BE0 59FE 6CC9 6D24 8343 62F3 7277 8F81 5573 57E2 5A58 60D3 75CA 7842 94E8 6E76 7288 7B4C 7D5F 8472 643C 7454 89E0 8A6E 8DE7 8F07 8737 9293 6A29 8E21 7E13 919B 9CC8 9B08 9A21 5B49 5DCF 9C01 6B0A 9F64 8838 98A7 9874 72AC 6C71 754E 70C7 7EFB 7DA3 8647 529D 5238 7276 52E7 97CF 52F8 72AD 6926 697E 95CE 7F3A 849B 9619 7638 5374 537B 57C6 5D05 5BC9 60AB 7437 96C0 785E 786E 9615 5859 6409 76B5 788F 6128 69B7 58A7 6164 78BA 78BB 8D9E 71E9 95CB 7910 95D5 704D 792D 9E4A 9D72 590B 56F7 5CEE 9021 5BAD 5E2C 88D9 7FA3 7FA4 88E0 FDD0-0052 5465 80B0 887B 8887 86A6 88A1 86BA 7136 9AE5 562B 9AEF 71C3 7E4E 5184 5189 59CC 82D2 67D3 73C3 5AA3 6A6A 8485 7A63 5134 52F7 703C 737D 8618 79B3 74E4 7A70 8E9F 9B24 58CC 56B7 58E4 6518 7219 7E95 8BA9 61F9 8B72 8B93 5A06 835B 9976 6861 5B08 8558 6A48 8953 9952 6270 96A2 64FE 7ED5 9076 7E5E 60F9 70ED 71B1 4EBA 4EBB 4EC1 58EC 5FC8 6732 5FCE 79C2 82A2 9213 9B5C 928B 9D40 5FCD 834F 6820 6823 8375 79F9 68EF 7A14 5203 5204 8BA4 4EDE 4EED 8BB1 4EFB 5C7B 5C83 6268 7EAB 598A 6752 7263 7EB4 8095 8F6B 97E7 996A 59D9 794D 7D09 887D 7D1D 8A12 8ED4 6895 88B5 8EE0 7D4D 814D 845A 976D 9771 97CC 98EA 8A8D 9901 7D9B 8EB5 6254 4ECD 8FB8 793D 967E 82BF 65E5 9A72 56F8 91F0 9224 99B9 8338 620E 809C 6804 72E8 7ED2 8319 8363 5BB9 6BE7 70FF 5AB6 5D58 6411 7D68 7FA2 5AC6 5D64 6408 69B5 6EB6 84C9 6995 69AE 7194 7462 7A41 7E19 877E 8923 9555 878D 878E 99E5 9AF6 5B2B 5DB8 7203 9394 5DC6 701C 66E7 8811 5197 5B82 5748 5087 8EF5 6C04 9D27 7A43 53B9 79B8 67D4 5A83 63C9 6E18 8447 7163 7448 7CC5 875A 8E42 8F2E 9352 97A3 74C7 9A25 9C07 9D94 7C88 697A 97D6 8089 5B8D 816C 909A 5982 4F9E 5E24 8339 6847 88BD 94F7 6E2A 7B4E 8498 92A3 8560 8761 5112 9D11 5685 5B2C 5B7A 6FE1 85B7 9D3D 66D8 71F8 8966 8815 98A5 91B9 986C 9C6C 6C5D 8097 4E73 8FB1 910F 64E9 5165 6D33 55D5 5AB7 6EBD 7F1B 84D0 8925 7E1F 6256 8FBC 6741 9CF0 5DBF 633C 5827 648B 58D6 962E 670A 8F6F 800E 5044 8EDF 5A86 744C 789D 7DDB 8F2D 74C0 791D 5A51 6875 7524 7DCC 8564 854A 854B 6A64 7E60 8602 8603 6C6D 82AE 6798 868B 9510 745E 8739 777F 92B3 92ED 53E1 58E1 77A4 95F0 6DA6 958F 95A0 6F64 6A4D 81B6 637C 53D2 82E5 504C 5F31 9100 6E03 712B 6949 84BB 7BAC 7BDB 7207 9C19 9C2F 9DB8 5D76 FDD0-0053 4EE8 6331 6332 6492 6D12 8A2F 9778 6F75 7051 8EA0 5345 6CE7 98D2 810E 8428 9212 644B 99BA 98AF 85A9 6AD2 8644 96A1 6BE2 6122 63CC 585E 6BF8 816E 567B 9CC3 984B 9C13 55EE 8D5B 50FF 8CFD 7C3A 5625 4E09 5F0E 53C1 6BF5 6BFF 7299 9B16 4ED0 4F1E 5098 7CC1 7CC2 9993 7CDD 7CE3 7CE4 7E56 93D2 93FE 9730 994A 4FD5 5E34 60B7 6563 9590 58ED 6BF6 5381 6A75 6852 6851 55D3 6421 78C9 892C 98A1 939F 9859 4E27 55AA 69E1 63BB 6145 6414 6E9E 9A9A 7F2B 7E45 81CA 9CCB 9A12 9A37 9C20 9C62 626B 6383 5AC2 57FD 7619 6C09 77C2 9ADE 87A6 95AA 8272 6D13 681C 6DA9 556C 94EF 96ED 6B6E 7417 55C7 745F 6B70 92AB 6F81 61CE 64CC 6FC7 7637 7A51 6F80 74B1 7012 7A61 7E6C 8F56 93FC 8B45 98CB 6E0B 6FCF 7A6F 68EE 692E 69EE 8942 50E7 9B19 6740 6C99 7EB1 4E77 5239 524E 7802 5526 6BBA 7300 7C86 7D17 838E 686C 6BEE 94E9 75E7 7870 715E 8531 88DF 699D 6A27 9B66 9CA8 93A9 9BCA 9BCB 50BB 510D 503D 553C 5551 5565 5E39 8410 53A6 55A2 5EC8 6B43 7FDC 7B91 7FE3 95AF 970E 7E4C 7B5B 917E 7BE9 7C01 7C1B 91C3 7E7A 6652 95B7 66EC 5C71 5F61 9096 5220 522A 6749 829F 59CD 59D7 82EB 886B 9490 57CF 633B 67F5 72E6 73CA 8222 75C1 8120 8ED5 7B18 8DDA 527C 6427 5607 5E53 717D 6F78 6F98 6A86 7E3F 81BB 9BC5 7FB4 7FB6 95EA 9655 965D 9583 6671 7154 7752 718C 89A2 8BAA 6C55 759D 5261 6247 8A15 8D78 639E 91E4 5093 5584 928F 9A9F 50D0 912F 58A0 58A1 6F6C 7F2E 5B17 64C5 6A3F 6B5A 81B3 78F0 8B06 8D61 7E55 87EE 87FA 8B71 8D0D 9425 994D 9A38 9CDD 7057 9C53 9C54 5738 6763 958A 657E 4F24 6B87 5546 89DE 50B7 5892 616F 6EF3 6F21 850F 6BA4 71B5 87AA 89F4 8B2A 9B3A 57A7 6244 664C 8D4F 8CDE 8D18 945C 4E04 4E0A 5C19 5C1A 6066 7EF1 7DD4 979D 4EE9 88F3 5F30 634E 70E7 83A6 68A2 713C 7A0D 65D3 7B72 8244 86F8 8F0E 71D2 98B5 9AFE 9BB9 52FA 828D 82D5 67D6 73BF 7AF0 97F6 5C11 52AD 5372 90B5 7ECD 54E8 5A0B 8891 7D39 7744 7DA4 6F72 8571 5962 731E 8D4A 756C 7572 8F0B 8CD2 8CD6 6AA8 820C 4F58 8675 86C7 86E5 820D 6368 538D 8BBE 793E 5399 5C04 6D89 6DBB 6E09 8A2D 8D66 5F3D 6151 6442 6444 6EE0 6174 6475 850E 6B59 8802 97D8 9A07 61FE 651D 7044 9E9D 6B07 820E 7533 5C7E 625F 4F38 8EAB 4F81 547B 59BD 7C76 7EC5 8BDC 59FA 67DB 6C20 73C5 7A7C 7C78 5A20 5CF7 7521 7712 7837 8398 6552 6DF1 7D33 515F 68FD 8460 88D1 8A37 84E1 8A75 7527 8518 71CA 8593 99EA 9CB9 66D1 9D62 9BF5 9C3A 4EC0 751A 795E 90A5 5F1E 5BA1 77E4 54C2 77E7 5BB7 8C02 8C09 5A76 6E16 8A20 5BE9 8AD7 9823 9B6B 66CB 9825 77AB 5B38 700B 89BE 8B85 80BE 4FBA 661A 80C2 6D81 7718 6E17 7973 8124 814E 613C 614E 6939 7606 7F67 8703 8704 6EF2 92E0 762E 5814 698A 9C30 5347 751F 9629 544F 58F0 6598 6607 6CE9 72CC 82FC 680D 6B85 7272 73C4 965E 9679 7B19 6E66 713A 7525 924E 8072 9F2A 9D7F 7EF3 61B4 7E69 8B5D 7701 771A 5057 6E3B 5723 80DC 6660 5270 76DB 5269 52DD 8CB9 5D4A 741E 8056 58AD 69BA 8542 8CF8 7AD4 66FB 6A73 5C38 5931 5E08 545E 8671 8BD7 90BF 9E24 5C4D 65BD 6D49 72EE 5E2B 7D41 91F6 6E64 6E7F 8479 921F 6EAE 6EBC 7345 8492 84CD 8A69 9247 9248 7461 9CF2 8768 9CFE 8937 9CBA 6FD5 9366 9BF4 9C24 9DB3 8979 5341 9963 77F3 8FBB 4E6D 65F6 5B9E 5B9F 65F9 98E0 59FC 5CD5 70BB 794F 8680 98DF 57D8 6642 83B3 5BD4 6E5C 9048 5852 6EA1 8494 9250 5BE6 69AF 8755 9CA5 9F2B 9F2D 9C23 53F2 77E2 4E68 8C55 4F7F 59CB 9A76 5158 5BA9 5C4E 7B36 9242 99DB 58EB 6C0F 793B 4E17 4E16 4ED5 5E02 793A 4F3C 534B 5F0F 5FD5 4E8A 53D3 623A 4E8B 4F8D 52BF 5469 67F9 89C6 8BD5 9970 519F 5BA4 6040 6043 62ED 662F 6630 67BE 67FF 7702 8D33 9002 683B 70D2 770E 7721 8210 8F7C 901D 94C8 8996 8C49 91C8 5A9E 5D3C 5F11 5FA5 63D3 8C25 8CB0 91CA 52E2 55DC 5F12 7757 7B6E 89E2 8A66 8EFE 9230 9243 98FE 8213 8A93 9069 927D 596D 92B4 9919 991D 566C 5B15 6FA8 8ADF 8AE1 907E 87AB 8B1A 7C2D 896B 91CB 4F66 7ACD 8BC6 62FE 5319 5D75 6981 7176 7BD2 9B96 7C42 8B58 9C18 53CE 6536 624B 5B88 57A8 9996 824F 5BFF 53D7 72E9 517D 552E 6388 6DAD 7EF6 75E9 58FD 5900 7626 7DAC 7378 93C9 624C 7363 4E66 6BB3 5C17 6292 7EBE 53D4 6778 67A2 964E 59DD 500F 5010 66F8 6B8A 7D13 6393 68B3 6DD1 7102 83FD 8ED7 9103 758E 758F 8212 6445 6BF9 7D80 8F93 7479 8DFE 8E08 6A1E 852C 8F38 6A7E 9B9B 5135 6504 9D68 79EB 5A4C 5B70 8D4E 587E 719F 74B9 8D16 9F21 5C5E 6691 668F 9ECD 7F72 8700 9F20 6F7B 85A5 85AF 66D9 7659 85F7 8961 8969 5C6C 9483 672E 672F 620D 675F 6CAD 8FF0 4FB8 51C1 54B0 6037 6811 7AD6 8357 6055 6352 5EB6 5EBB 7D49 8481 8853 9683 5C0C 88CB 6570 7AEA 8167 9265 5885 6F31 6F44 6578 6F8D 8C4E 6A39 6FD6 9330 93E3 9D90 866A 702D 7CEC 8834 9C6A 9C70 5237 5530 800D 8A9C 8870 6454 7529 5E05 5E25 87C0 535B 95E9 62F4 9582 6813 6DAE 8168 53CC 971C 96D9 5B40 9AA6 5B47 9A3B 6B06 7935 9DDE 9E74 826D 9A66 9E18 723D 587D 6161 6F3A 6A09 7E14 7040 93EF 8C01 813D 8AB0 6C34 5E28 6D97 6D9A 7971 7A05 7A0E 88DE 7761 7793 6C35 6C3A 9596 542E 987A 821C 9806 8563 6A53 779A 77AC 9B0A 8BF4 54FE 8AAA 8AAC 5981 70C1 6714 94C4 6B36 7855 77DF 6420 84B4 69CA 7361 78A9 7BBE 9399 720D 9460 53B6 7E9F 4E1D 53F8 7CF9 79C1 549D 6CC0 601D 8652 9E36 5AA4 65AF 7D72 7F0C 86F3 6952 7997 9270 98D4 51D8 53AE 69B9 79A0 7F73 8724 9536 5636 565D 5EDD 6495 6F8C 78C3 7DE6 856C 92D6 71CD 8784 87D6 87F4 98B8 9A26 9401 9DE5 9F36 7C6D 6B7B 5DF3 4E96 56DB 5BFA 6C5C 4F40 5155 59D2 6CE4 7940 4FA1 5B60 676B 6CD7 9972 9A77 5A30 67F6 726D 6D0D 6D98 8082 98E4 7B25 801C 91F2 7AE2 8997 55E3 8086 8C84 9236 923B 98FC 79A9 99DF 857C 5129 7003 4FEC 6056 92AF 5FEA 677E 6780 5A00 67D7 502F 51C7 5D27 5EBA 68A5 6DDE 83D8 5D69 7879 8719 61BD 6FCD 6AA7 9376 9B06 6002 609A 8038 7AE6 50B1 612F 6964 5D77 616B 8073 99F7 8BBC 5B8B 8BF5 9001 9882 8A1F 980C 8AA6 9938 67A9 93B9 635C 910B 55D6 5EC0 5ECB 641C 6EB2 7340 8490 84C3 998A 6449 98D5 6457 953C 8258 878B 9199 93AA 993F 98BC 98BE 9A2A 53DC 53DF 5081 55FE 778D 64DE 85AE 64FB 85EA 6AE2 7C54 8184 7636 55FD 82CF 7526 9165 7A23 7AA3 7A4C 8607 8613 6AEF 56CC 4FD7 738A 5919 6CDD 8083 6D2C 6D91 73DF 7D20 83A4 901F 5BBF 6880 6B90 7C9B 9A95 5083 7C9F 8C21 55C9 5850 5851 5ACA 612B 6EAF 6EB8 8085 9061 9E54 50F3 612C 69A1 8186 850C 89EB 8D9A 906C 619F 6A0E 6A15 6F65 78BF 92C9 9917 6F5A 7E24 6A5A 749B 7C0C 85D7 8B16 8E5C 9A4C 9C50 9DEB 8BC9 8A34 9BC2 72FB 75E0 9178 5334 7958 7B07 7B6D 849C 7B97 590A 6535 8295 867D 5020 54F8 6D7D 837D 837E 772D 8470 6ED6 7762 7D8F 71A3 6FC9 9796 96D6 7EE5 968B 968F 9040 96A8 74CD 7021 81B8 9AC4 9AD3 4E97 5C81 7815 795F 8C07 57E3 5D57 9042 6B72 6B73 716B 775F 788E 96A7 5B18 6FBB 7A42 8AB6 8CE5 6A96 71E7 74B2 79AD 6A85 7A57 7A5F 7E40 895A 9083 65DE 7E50 7E78 8B62 9406 9429 97E2 5B59 72F2 836A 5B6B 98E7 640E 733B 84C0 98F1 69C2 8575 859E 635F 7B0B 96BC 7B4D 640D 69AB 7BB0 7C28 93A8 9DBD 5506 5A11 838F 509E 686B 68AD 7743 55CD 7FA7 84D1 644D 7F29 8D96 7C11 7C14 7E2E 9AFF 9BBB 6240 4E7A 5522 7D22 7410 60E2 9501 55E9 669B 6E91 7463 8928 7485 9388 938D 9396 93BB 93C1 9024 6EB9 8736 7411 55E6 FDD0-0054 4ED6 5B83 5979 7260 7942 8DBF 94CA 584C 6999 6EBB 891F 5683 95E7 8E79 5854 6E9A 5896 736D 9CCE 737A 9C28 4EA3 62D3 631E 72E7 95FC 5D09 6DBE 6428 8DF6 905D 9062 69BB 6BFE 79A2 64BB 6FBE 8ABB 8E0F 6A7D 9314 6FCC 8E4B 979C 9B99 95D2 97B3 56BA 95E5 8B76 8EA2 4FA4 549C 56FC 5B61 80CE 51AD 53F0 65F2 90B0 576E 62AC 82D4 67B1 70B1 70B2 83ED 8DC6 9C90 7B88 81FA 98B1 99D8 5113 9B90 5B2F 64E1 85B9 6AAF 7C49 592A 5933 5FF2 6C70 6001 80BD 949B 6CF0 8226 915E 9226 6E99 614B 71E4 7C8F 574D 62A9 8D2A 6039 75D1 8211 8CAA 644A 6EE9 762B 64F9 6524 7058 7671 575B 6619 5013 8C08 90EF 5A52 60D4 8983 6983 75F0 952C 8C2D 58B0 58B5 619B 6F6D 8AC7 9188 58C7 66C7 71C2 931F 9924 6A80 78F9 9843 7F48 85EB 58DC 8B5A 8C9A 91B0 8B60 7F4E 5FD0 5766 8892 94BD 83FC 6BEF 926D 55FF 61B3 61BB 9193 74AE 8962 53F9 70AD 57EE 63A2 509D 6E60 50CB 5606 78B3 8215 6B4E 8CE7 6C64 5763 94F4 6E6F 5621 8025 528F 7FB0 876A 859A 9557 8E5A 93DC 940B 97BA 9F1E 9967 5510 5802 508F 557A 68E0 910C 5858 642A 6E8F 84CE 969A 69B6 6F1F 717B 746D 799F 8185 6A18 78C4 7CC3 819B 6A56 7BD6 7CD6 8797 8E3C 7CDB 87B3 8D6F 91A3 9933 9395 9939 95DB 9944 9DB6 4F16 5E11 5018 5052 6DCC 50A5 8EBA 954B 93B2 513B 6203 66ED 7223 77D8 9482 70EB 6465 8D9F 71D9 5932 5F22 6D9B 7EE6 638F 7D5B 8A5C 5ACD 5E4D 6146 642F 6ED4 69C4 746B 97EC 98F8 7E1A 7E27 6FE4 8B1F 8F41 97B1 97DC 9955 530B 8FEF 54B7 6D2E 9003 6843 9676 5555 68BC 6DD8 7EF9 8404 7979 88EA 7DAF 872A 9780 9184 9789 92FE 932D 99E3 6AAE 9940 9A0A 9F17 8BA8 8A0E 5957 5FD1 5FD2 7279 8CA3 86AE 94FD 615D 92F1 87A3 87D8 71A5 81AF 9F1F 75BC 75CB 5E50 817E 8A8A 6F1B 6ED5 9086 7E22 99E6 8B04 512F 85E4 9A30 7C50 9C27 7C58 9A63 972F 8645 5254 68AF 9511 8E22 64FF 9DC8 9DC9 82D0 5397 8351 7EE8 504D 557C 5D39 60FF 63D0 7A0A 7F07 7F64 9046 9E48 55C1 7445 7D88 78AE 8906 5FB2 6F3D 7DF9 855B 876D 92BB 9898 8DA7 8E44 918D 8B15 8E4F 9357 9CC0 9D3A 984C 9BB7 9D5C 9A20 9BF7 9D97 9D99 79B5 9DE4 4F53 632E 8EB0 9AB5 9BA7 8EC6 9AD4 623B 8FCF 5243 6711 6D1F 501C 608C 6D95 9016 6090 60D5 63A6 9037 60D6 63E5 66FF 6974 88FC 8905 6B52 6BA2 9AF0 8599 568F 9B00 5694 74CB 7C4A 8DAF 5C49 5C5C 7B39 5D5C 5929 5172 5A56 6DFB 915F 9754 9EC7 975D 7530 5C47 6CBA 606C 754B 7551 76F7 80CB 7560 751B 751C 83FE 6E49 5861 586B 6437 923F 9617 7DC2 78CC 7AB4 74B3 95D0 9DC6 9DCF 5FDD 6B84 500E 553A 60BF 6DDF 666A 7420 8146 89CD 75F6 7753 8214 9902 89A5 8CDF 932A 9369 9766 63AD 777C 821A 78B5 9D2B 65EB 4F7B 5EA3 604C 6311 7967 804E 8280 6761 5CA7 5CB9 8FE2 7952 689D 7B24 8414 84DA 84E8 8D92 9F86 6A24 8729 92DA 9797 9AEB 9CA6 9BC8 93A5 9F60 9C37 5BA8 6640 6713 8101 7A95 8A82 65A2 7AB1 5B25 773A 7C9C 7D69 899C 8DF3 7CF6 87A9 5E16 6017 8D34 841C 8051 8CBC 94C1 86C8 50E3 9295 92E8 9D29 9421 9435 9A56 546B 98FB 992E 5385 5E81 6C40 827C 542C 753A 8013 539B 70C3 686F 70F4 7D8E 9793 8074 807C 5EF0 807D 5EF3 9092 5EF7 4EAD 5EAD 839B 505C 5A77 5D49 6E1F 7B73 8476 8713 695F 69B3 95AE 9706 8064 874F 8AEA 9F2E 5722 753C 4FB9 5A17 633A 6D8F 6883 70F6 73FD 8121 8247 988B 8A94 9832 56F2 70B5 901A 75CC 55F5 84EA 4EDD 540C 4F5F 5F64 5CC2 5E9D 54C3 5CDD 72EA 833C 664D 6850 6D75 70D4 783C 8692 772E 79F1 94DC 7AE5 7CA1 7B69 8A77 8D68 916E 9256 50EE 52ED 9275 9285 9907 9C96 6F7C 735E 66C8 6723 6A66 6C03 71D1 729D 81A7 77B3 9BA6 7EDF 6345 6876 7B52 7D71 7D82 6A0B 6078 75DB 8855 615F 6185 5077 5078 5A7E 5AAE 92C0 936E 4EA0 5934 6295 9AB0 7DF0 982D 59B5 94AD 7D0F 6568 98F3 9EC8 8623 900F 7D89 51F8 5B8A 79BF 79C3 6022 7A81 550B 6D8B 6378 5817 6E65 75DC 8456 5D80 92F5 9D5A 9F35 56F3 56FE 51C3 5CF9 5EA9 5F92 6087 6348 837C 9014 5C60 688C 83DF 63EC 7A0C 5715 5857 5D5E 760F 7B61 816F 84A4 922F 5716 5717 5EDC 6F73 8DFF 9174 999F 934E 99FC 9D4C 9D9F 9DCB 9DF5 571F 5721 5410 948D 91F7 514E 8FCC 5154 580D 9D75 6C62 6D82 83B5 6E4D 732F 7153 8C92 56E2 56E3 629F 5278 5718 6171 6476 6F19 69EB 7BFF 6AB2 93C4 7CF0 9DD2 9DFB 7583 5F56 6E6A 8916 63A8 84F7 85EC 5F1A 9893 96A4 5C35 9839 983A 983D 9B4B 7A68 8608 8E6A 4FC0 817F 50D3 8E46 9ABD 4FBB 9000 5A27 717A 86FB 8715 892A 99FE 541E 5451 6D92 554D 671C 711E 564B 66BE 9ED7 5C6F 5749 5FF3 829A 9968 8C58 8C5A 8ED8 98E9 9C80 9B68 9715 81C0 81CB 6C3D 757D 65FD 4E47 4EDB 8BAC 6258 6261 6C51 9966 6754 4F82 5483 62D5 62D6 6CB0 6329 635D 838C 88A5 8A17 6DB6 812B 8131 98E5 9B60 9A5D 9A6E 4F57 9640 9641 5768 5CAE 6CB1 6CB2 72CF 8FF1 7823 7824 8889 9E35 7D3D 5836 8DCE 9161 78A2 99B1 69D6 99C4 99DE 6A50 9B80 9D15 9F27 9A28 9F0D 9A52 9F09 5F75 59A5 5EB9 5AA0 692D 6955 5AF7 6A62 9D4E 9B0C 9C16 67DD 6BE4 553E 841A 8DC5 6BFB 7BA8 8600 7C5C 9A7C 99DD FDD0-0057 7A75 52B8 6316 6D3C 5A32 7556 7A8A 5AA7 55D7 86D9 6432 6E9B 6F25 7AAA 9F03 6528 5A03 74E6 4F64 90B7 5493 889C 8049 55E2 817D 8183 896A 97C8 97E4 5C72 74F2 54C7 6B6A 558E 7AF5 5D34 5916 591E 9861 5F2F 525C 5A60 5E35 5846 6E7E 873F 6F6B 8C4C 5F4E 58EA 7063 4E38 5213 6C4D 7EA8 8284 5B8C 5C8F 628F 73A9 7D08 6356 987D 70F7 7413 9811 7FEB 5B9B 5007 550D 633D 76CC 57E6 5A49 60CB 665A 689A 7EFE 8118 83C0 8416 6669 667C 6900 742C 7696 7579 7755 7897 7DA9 7DB0 8F13 8E20 92C4 92D4 4E07 534D 5350 59A7 5FE8 6365 8115 8CA6 842C 8155 8F10 6FAB 858D 933D 87C3 8D03 93AB 8D0E 909C 6764 7B02 5C23 5C2A 5C2B 6C6A 5C29 4EA1 4EBE 5166 738B 4EFC 5F7A 83A3 869F 7F52 7F51 5F80 5F83 7F54 5F8D 60D8 83F5 6680 68E2 86E7 8F8B 7DB2 8744 8AB7 8F1E 7007 9B4D 5984 5FD8 8FCB 65FA 76F3 671B 6722 6789 7139 5371 5A01 70D3 504E 840E 9036 9687 9688 55B4 5A99 6104 63CB 63FB 6E28 8468 8473 5FAE 6933 6972 6EA6 7168 8A74 8732 875B 89A3 8587 71F0 9CC2 5DCD 9C03 9C04 56D7 97E6 5729 56F4 5E0F 6CA9 8FDD 95F1 5CD7 5CDE 6D08 97CB 6845 6DA0 552F 5E37 60DF 7859 7EF4 55A1 570D 5A81 5D6C 5E43 6E4B 6E88 741F 9055 6F4D 7DAD 84F6 912C 6F59 6F7F 78D1 9180 6FF0 934F 95C8 9BA0 7653 89B9 72A9 973A 6B08 5383 4F1F 4F2A 5C3E 7EAC 829B 82C7 59D4 709C 73AE 6D27 5A13 5C57 6D58 8371 8BFF 5049 507D 5D23 68B6 75CF 784A 9AA9 5D54 5FAB 6107 7325 8466 848D 9AAA 9AAB 6690 6932 7152 744B 75FF 8172 8249 97EA 50DE 64B1 78C8 9C94 5BEA 7DEF 853F 8AC9 8E13 97D1 9820 85B3 5130 6FFB 9361 9BAA 58DD 7022 97D9 98B9 97E1 8624 6596 536B 4E3A 672A 4F4D 5473 82FF 70BA 754F 80C3 53DE 8ECE 5C09 83CB 8C13 5582 5AA6 6E2D 7232 715F 78A8 851A 873C 6170 71AD 729A 7DED 885B 61C0 748F 7F7B 885E 8B02 9927 9B87 87B1 893D 9935 9B4F 85EF 8F4A 93CF 9728 9CDA 8636 9956 8B86 8E97 8B8F 8E9B 6364 7140 732C 589B 7E05 875F 5DB6 6637 586D 6E29 6985 6B9F 6EAB 7465 8F92 761F 8570 8C71 8F3C 8F40 9CC1 97B0 9C1B 9C2E 5301 6587 5F63 7EB9 82A0 7086 739F 95FB 7D0B 8689 868A 73F3 960C 741D 96EF 7612 805E 99BC 9B70 9CFC 9D0D 87A1 95BA 95BF 87C1 95C5 9F24 95E6 520E 543B 5FDF 6286 5461 80B3 7D0A 687D 8117 7A33 7A4F 7A69 95EE 598F 6C76 83AC 554F 6E02 63FE 6435 9850 74BA 545A 922B 93BE 7FC1 55E1 6EC3 9E5F 8789 9393 9DB2 52DC 5963 5855 5D61 84CA 66A1 7788 806C 74EE 8579 7515 7F4B 9F46 631D 502D 6DA1 83B4 5529 6DB9 6E26 7327 8435 7A9D 7AA9 8717 64BE 8778 8E12 6211 5A50 6370 4EF4 6C83 809F 5367 6782 81E5 5053 637E 6DB4 5A89 5E44 63E1 6E25 7125 786A 6943 815B 65A1 7783 64ED 6FE3 74C1 81D2 96D8 9F8C 9F77 4E4C 572C 5F19 6C59 6C5A 6C61 90AC 545C 5DEB 6747 5C4B 6D3F 8BEC 94A8 70CF 526D 7A8F 9114 55DA 6B4D 8AA3 7BBC 8790 9D2E 93A2 9C1E 65E0 6BCB 5433 5434 543E 5449 829C 90DA 5514 5A2A 6D16 6D6F 8323 8381 68A7 73F8 7966 7121 94FB 9E40 7991 8708 8A88 856A 7491 87F1 9BC3 9D50 8B55 9F2F 9DE1 4E94 5348 4EF5 59A9 5E91 5FE4 6003 65FF 6B66 739D 4FAE 4FC9 5035 6342 554E 5A2C 727E 73F7 6440 7894 9E49 7193 7466 821E 5AF5 5EE1 61AE 6F55 511B 6A46 7512 9D61 8E8C 5140 52FF 620A 9622 4F06 5C7C 6264 575E 5C89 674C 82B4 8FD5 5FE2 7269 77F9 537C 6544 8BEF 609E 609F 60AE 7C85 901C 6664 7110 5A7A 5D4D 75E6 9696 9770 9A9B 5862 5966 5D68 6EA9 96FA 96FE 5BE4 7183 8AA4 9E5C 907B 92C8 7AB9 971A 9F3F 9727 9F40 8601 9A16 9DA9 4E44 52A1 4F0D 52D9 933B FDD0-0058 5915 516E 5438 5FDA 6271 6C50 8980 5E0C 6278 5365 6614 6790 7A78 80B8 80B9 4FD9 5F86 6038 6053 90D7 997B 550F 595A 5C56 6095 6C25 6D60 727A 72F6 8383 553D 6089 60DC 637F 665E 6878 6B37 6DC5 70EF 7101 7108 740B 7852 83E5 8D65 91F8 5092 60C1 6670 6673 711F 712C 7280 774E 7A00 7C9E 7FD5 823E 910E 5380 5D60 5FAF 6EAA 7699 84A0 9521 50D6 69BD 7155 7184 7188 7199 7DC6 8725 8C68 990F 563B 564F 5B06 5B09 5DB2 6F5D 761C 78CE 819D 51DE 6199 6A28 6A40 71B9 71BA 71BB 7AB8 7E18 7FB2 8785 8787 932B 71E8 77A6 87CB 8C3F 8C40 8C6F 8C95 7CE6 7E65 96DF 9D57 89F9 8B46 91AF 93ED 96B5 5DC7 66E6 7214 72A7 9145 89FD 9F37 8835 9E02 89FF 9474 4E60 90CB 5E2D 7FD2 88AD 89CB 5AB3 693A 84B5 84C6 5D8D 6F1D 89A1 8D98 69E2 8582 96B0 6A84 8B35 93B4 972B 9CDB 98C1 9A31 9A3D 8972 9C3C 9A68 67B2 6D17 73BA 5F99 94E3 559C 8448 8478 9222 9268 9269 5C63 6F07 84F0 6198 66BF 6B56 79A7 8AF0 58D0 7E30 8B11 87E2 8E5D 74BD 56CD 9C5A 77D6 8EA7 5338 534C 620F 5C43 7CFB 9969 546C 5FE5 602C 77FD 7EC6 4FC2 54A5 6044 76FB 90E4 6B2F 7EE4 7D30 91F3 960B 55BA 691E 7FD6 8203 8204 8D87 9699 6140 6ECA 798A 7D8C 8D69 969F 588D 7182 7294 7A27 6F5F 6F99 856E 89A4 6231 9ED6 6232 78F6 8669 993C 9B29 7E6B 56B1 95DF 973C 5C6D 884B 897F 606F 6E13 6A72 72A0 7902 9BD1 8672 75A8 867E 8C3A 5084 9595 7146 7175 98AC 778E 8766 9C15 5323 4FA0 72CE 4FE0 5CE1 67D9 70A0 72ED 965C 5CFD 70DA 72F9 73E8 796B 7856 7FC8 823A 967F 7864 9050 656E 6687 7455 7B6A 821D 78AC 8F96 78CD 7E00 8578 7E16 8D6E 9B7B 8F44 935C 971E 938B 9EE0 9A22 9DB7 959C 4E05 4E0B 4E64 5413 759C 590F 7771 5687 61D7 7F45 93BC 5913 93EC 5737 68BA 6E8A 4EDA 5C73 5148 597E 7EA4 4F61 5FFA 6C19 6774 7946 79C8 82EE 67AE 7C7C 73D7 83B6 6380 8A2E 94E6 8DF9 9170 9528 50CA 5615 929B 9C9C 66B9 97EF 5B10 61B8 859F 9341 893C 97F1 9BAE 8E6E 99A6 5EEF 6515 7E8E 9DB1 8973 8E9A 7E96 9C7B 4F2D 95F2 59B6 5F26 8D24 54B8 550C 6326 6D8E 80D8 5A34 5A39 5A71 7D43 8237 86BF 8854 5563 75EB 86DD 9591 9592 9E47 5ACC 8858 7509 929C 5AFA 5AFB 61AA 648F 6F96 7A34 8AB8 8CE2 71C5 8AF4 8F31 918E 7647 764E 77AF 85D6 7925 9E79 9E99 8D12 9DF3 9DF4 9DFC 51BC 72DD 663E 9669 5D04 6BE8 70CD 7303 86AC 967A 8D7B 7B45 5C1F 5C20 641F 7992 8DE3 9291 7BB2 96AA 5DAE 736B 736E 85D3 934C 71F9 9855 5E70 6507 6AF6 861A 8B63 7381 97C5 986F 7066 4F23 53BF 549E 5C98 82CB 73B0 7EBF 81FD 9650 59ED 5BAA 770C 9665 54EF 57B7 5A0A 5A28 5CF4 6D80 83A7 9677 665B 73FE 784D 9985 774D 7D64 7F10 7FA1 732E 7CAF 7FA8 817A 8706 50E9 50F4 7DAB 8AA2 648A 7DDA 92E7 61B2 6A4C 7E23 930E 9921 58CF 8C4F 9EB2 7017 81D4 737B 7CEE 9F38 4ED9 50F2 7E4A 9466 4E61 8297 76F8 9999 90F7 53A2 554C 9109 910A 5EC2 6E58 7F03 8459 9115 7A25 858C 7BB1 7DD7 81B7 8944 5FC0 9AA7 9E98 6B00 74D6 9576 9472 9A64 74E8 4F6D 8BE6 5EA0 6819 7965 7D74 7FD4 8A73 8DED 4EAB 4EAF 54CD 9977 6651 98E8 60F3 9284 9909 9C9E 66CF 8801 9B9D 9BD7 97FF 9957 995F 9C76 5411 59E0 5DF7 8683 9879 73E6 8C61 5842 7F3F 842B 8856 9805 50CF 52E8 5D91 9297 6A61 8950 56AE 87D3 95C0 940C 9C4C 697F 9C5C 7071 7072 547A 67AD 4FBE 54D3 67B5 9A81 54EE 5BAF 5BB5 5EA8 6D88 7EE1 8653 900D 9E2E 5A4B 689F 7107 7307 8427 75DA 75DF 785D 7863 7A99 7FDB 8437 9500 63F1 7D83 560B 5610 6B4A 6F47 7BAB 8E03 5635 61A2 7362 92B7 9704 5F47 81AE 856D 9B48 9D1E 7A58 7C18 85C3 87C2 87CF 9D35 56A3 701F 7C2B 87F0 9AC7 6AF9 56BB 56C2 9AD0 8828 9A4D 6BCA 8648 6D28 7B05 90E9 5D24 6DC6 8A24 6BBD 7B4A 8AB5 5C0F 6653 6681 7B71 7B7F 769B 66C9 7BE0 8B0F 76A2 5B5D 8096 52B9 54B2 4FF2 6548 6821 6D8D 7B11 5578 509A 6569 8A68 5628 8A9F 562F 6B57 71BD 97A9 6585 6586 6077 6EE7 4E9B 63F3 7332 6954 6B47 874E 880D 52A6 534F 65EA 90AA 5354 80C1 57A5 594A 5CEB 604A 62F9 631F 633E 8105 8107 887A 5055 659C 8C10 7FD3 55CB 6136 643A 744E 7D8A 7181 818E 52F0 64B7 64D5 7DF3 7F2C 8762 978B 9821 8AE7 71F2 64F7 97B5 896D 651C 7E88 8B97 9FA4 5199 51A9 5BEB 85DB 4F33 707A 6CC4 6CFB 7944 7EC1 7F37 5378 6D29 70A7 5368 5A0E 5C51 5C53 505E 5070 5FA2 68B0 70F2 710E 79BC 7D32 4EB5 5A9F 5C5F 6E2B 7D4F 7D6C 8C22 50C1 586E 698D 69AD 8909 5667 5C67 66AC 7DE4 5DB0 5EE8 61C8 6FA5 736C 7CCF 85A2 85A4 9082 97F0 71EE 893B 8B1D 99F4 7009 97A2 7023 7215 7E72 87F9 880F 9F58 9F5B 9F65 9F42 8E9E 810B 5911 5FC3 90A4 59A1 5FFB 82AF 8F9B 6615 677A 6B23 7098 76FA 4FFD 60DE 8A22 920A 950C 65B0 6B46 5EDE 92C5 5B1C 85AA 99A8 946B 99AB 6794 8951 9414 4F08 9620 4F29 56DF 5B5E 4FE1 8ED0 812A 8845 8A2B 712E 7161 99B8 9856 820B 91C1 5FC4 567A 661F 57B6 9A8D 60FA 7329 714B 7446 8165 86F5 89EA 7BB5 7BC2 9B8F 66D0 89F2 935F 9A02 76A8 9BF9 5211 884C 90A2 5F62 9649 4F80 90C9 578B 6D10 8365 9498 9658 5A19 784E 94CF 9203 6ECE 9276 9292 92DE 7772 9192 64E4 5174 674F 59D3 5E78 6027 8347 5016 8395 5A5E 60BB 6DAC 7DC8 8208 5B39 81D6 54D8 88C4 8B03 51F6 5144 5147 5308 8BBB 5FF7 6C79 54C5 605F 6D36 80F7 80F8 8A29 8A7E 8CEF 96C4 718A 713D 8BC7 7138 8A57 5910 657B 4F11 4FE2 4FEE 54BB 5EA5 70CB 70CC 7F9E 8129 8119 9E3A 81F9 8C85 9990 6A07 929D 9AE4 9AF9 9380 9D42 93C5 9948 9C43 98CD 82EC 673D 6EEB 7D87 7CD4 79C0 5CAB 5CC0 73DB 7EE3 8896 7407 9508 55C5 6EB4 7493 890E 890F 92B9 8791 7E4D 7E61 93E5 93FD 9F45 9BB4 5401 620C 65F4 759E 76F1 6B28 80E5 987B 6647 8A0F 987C 8657 865A 8C1E 5AAD 5E41 63DF 6E51 865B 88C7 9808 6948 7AA2 980A 5618 589F 9700 9B46 5653 5B03 6B54 7E03 8566 8751 8ADD 8B43 7E7B 9B56 9A49 9450 9B1A 4FC6 5F90 84A3 8BB8 5474 59C1 8BE9 5194 6829 73DD 5066 8A31 668A 8A61 7A30 9126 7CC8 9191 76E8 65ED 4F35 5E8F 6C7F 82A7 4F90 5379 6034 6C80 53D9 6064 662B 6D2B 57BF 6B30 6B88 70C5 73EC 52D6 654D 6558 52D7 70FC 7EEA 7EED 9157 55A3 58FB 5A7F 6702 6E86 7D6E 8A39 6149 7166 84C4 8CC9 69D2 6F35 6F4A 76E2 7781 7DD2 805F 928A 735D 7A38 7DD6 9B63 85C7 77B2 85DA 7E8C 9C6E 8053 7D9A 84FF 5405 8F69 660D 5BA3 5F32 8ED2 688B 8C16 55A7 5847 5A97 6103 610B 63CE 8431 8432 6684 714A 7444 84D2 777B 5107 79A4 7BAE 7E07 7FE7 8756 92D7 61C1 857F 8AE0 8AFC 9379 99FD 77CE 7FFE 85FC 8610 8809 8B5E 7384 73B9 75C3 60AC 65CB 7401 8701 5AD9 6F29 66B6 7487 6A88 74BF 61F8 54BA 9009 6645 70DC 9078 9848 7663 766C 6030 6CEB 6621 70AB 7EDA 7729 88A8 94C9 7404 7734 8852 6E32 7D62 6965 6966 9249 78B9 8519 955F 9799 98B4 7E3C 7E4F 93C7 8B82 8D19 9C1A 524A 75B6 8486 9774 859B 8FA5 8FAA 97BE 7A74 6588 4E74 5B66 5CA4 5CC3 8313 6CF6 8895 9E34 8E05 58C6 5B78 5DA8 6FA9 71E2 89F7 96E4 9DFD 96EA 9CD5 9C48 8840 5437 5779 72D8 6856 8C11 8D90 8B14 7025 81A4 6A30 825D 8F4C 5743 52CB 57D9 7104 52DB 5864 718F 7AA8 8512 52F2 52F3 85AB 99E8 58CE 736F 85B0 66DB 71FB 81D0 77C4 860D 58E6 7E81 91BA 5EF5 5BFB 65EC 5DE1 9A6F 674A 7543 8BE2 5CCB 6042 6D35 6D54 7D03 8340 8368 6812 686A 6BE5 73E3 5071 5C0B 5FAA 63D7 69C6 6F43 8A62 99B4 9129 9C9F 565A 6F6F 6533 6A33 71D6 7495 87F3 9C4F 9C58 7065 5342 8BAF 4F28 6C5B 8FC5 4F9A 5DFA 5F87 72E5 8FFF 900A 6B89 8A0A 8A19 595E 5DFD 6BBE 7A04 905C 613B 8CD0 5640 6F60 8548 9D55 720B 9868 9442 8BAD 8A13 5691 FDD0-0059 4E2B 5727 538B 5416 5E98 62BC 6792 57AD 9E26 6860 9E2D 57E1 5B72 690F 9D09 930F 9D28 58D3 9D76 941A 7259 4F22 5391 5C88 82BD 5393 73A1 740A 7B0C 869C 5810 5D15 5D16 6DAF 731A 7458 775A 8859 6F04 9F56 538A 5E8C 54D1 5516 555E 75D6 96C5 7602 8565 529C 5720 8F67 4E9A 897E 8BB6 4E9C 72BD 8FD3 4E9E 8ECB 5A05 631C 7811 4FF9 6C29 5A6D 6397 8A1D 94D4 63E0 6C2C 7330 8050 5714 7A0F 7AAB 9F7E 4E5B 5440 6079 5266 70DF 73DA 80ED 5063 5571 5D26 6DCA 6DF9 7109 7111 83F8 9609 6E6E 7312 814C 7159 787D 9122 5AE3 6F39 9183 95B9 5B2E 61E8 7BF6 61D5 81D9 9EEB 8BA0 5EF6 4E25 598D 82AB 8A00 5CA9 6616 6CBF 708E 90D4 59F8 5A2B 72FF 7814 839A 5A2E 76D0 7402 784F 9586 960E 5D52 5D53 6E7A 7B75 7D96 8712 5869 63C5 694C 8A7D 789E 8505 989C 53B3 8664 95BB 6A90 984F 9854 56B4 58DB 5DCC 7C37 6AE9 9EEC 58E7 5B4D 5DD7 5DD6 7939 9E7D 9EA3 5935 6281 6C87 4E75 5156 5944 4FE8 5157 533D 5F07 884D 5043 53A3 63A9 773C 8412 90FE 9153 5D43 611D 624A 63DC 68EA 6E30 6E37 7430 9043 9692 693C 7F68 88FA 6F14 8917 5D96 622D 8758 9B47 565E 8EBD 7E2F 6ABF 9A13 9EE1 53B4 7517 9C0B 9DA0 9EE4 9F5E 9F91 513C 9EED 9869 9F34 5DD8 5DDA 66EE 9B58 9F39 9F74 9EF6 538C 95EB 599F 89C3 726A 54BD 59F2 5F65 5F66 781A 5501 5BB4 664F 70FB 8273 898E 9A8C 5050 7114 8C1A 9681 55AD 5830 6565 7130 7131 786F 8455 96C1 50BF 693B 6E8E 6EDF 9CEB 53AD 5895 66A5 917D 5B0A 8C33 990D 9D08 71C4 71D5 8AFA 8D5D 9B33 66D5 9D33 9140 9A10 56A5 5B3F 8276 8D0B 66E3 7213 91B6 9A34 9DC3 7054 8D17 89FE 8B8C 91BC 995C 9A57 9DF0 8277 704E 91C5 9A60 7067 8B9E 8C53 8C54 7069 8A01 7196 6A2E 8EC5 6B15 592E 5489 59CE 62B0 6CF1 6B83 80E6 770F 79E7 9E2F 9260 96F5 9785 9D26 626C 7F8A 9626 9633 65F8 6768 7080 98CF 4F6F 52B7 6C1C 75A1 9496 579F 5F89 661C 6D0B 7F8F 70CA 73DC 773B 967D 5D35 5D38 63DA 86D8 656D 6698 694A 716C 7993 760D 8AF9 8F30 935A 9D39 98BA 940A 9C11 9737 9E09 4EF0 4F52 5771 5C9F 517B 67CD 70B4 6C27 75D2 7D3B 509F 6967 8EEE 6143 6C31 8746 990A 99DA 61E9 6501 7662 600F 6059 6837 7F95 8A47 69D8 6F3E 6A23 7001 594D 7FAA 7922 5E7A 592D 5406 5996 6796 6B80 7945 8A1E 5593 847D 6946 8170 9D01 9080 723B 5C27 5C2D 80B4 579A 59DA 5CE3 8F7A 5004 70D1 73E7 7A91 509C 582F 63FA 8C23 8EFA 55C2 5AB1 5FAD 612E 6416 6447 733A 9059 9065 669A 69A3 7464 7476 929A 98D6 9906 5DA2 5DA4 7AAF 7AB0 991A 7E47 8B20 8B21 9390 9CD0 98BB 8628 908E 9864 9C29 4EF8 5B8E 5C86 62AD 6773 72D5 82ED 54AC 67FC 7711 7A85 7A88 8200 5060 5A79 5D3E 6E94 84D4 699A 9D22 9F3C 95C4 9A15 9F69 9DD5 7A7E 836F 8981 94A5 888E 7A94 7B44 846F 8A4F 718E 899E 977F 735F 9E5E 85AC 66DC 71FF 825E 85E5 77C5 8000 7E85 9DC2 8B91 9470 503B 6396 6930 668D 564E 6F71 882E 8036 6353 63F6 94D8 91FE 92E3 9381 64E8 4E5F 5414 51B6 57DC 91CE 5622 6F1C 58C4 4E1A 53F6 66F3 9875 66F5 90BA 591C 62B4 4EB1 67BC 9801 6654 67BD 70E8 5558 6DB2 8C12 5828 6B97 814B 8449 9113 58B7 696A 696D 998C 50F7 66C4 66C5 6B4B 71C1 64DB 76A3 77B1 9134 9765 5DAA 5DAB 6FB2 8B01 9923 5688 64EB 66D7 77B8 9371 64EA 7217 790F 9391 9941 9D7A 9437 9768 9A5C 9E08 7237 4EAA 723A 4E00 4E4A 5F0C 4F0A 8863 533B 541A 58F1 4F9D 794E 54BF 6D22 6098 7317 90FC 94F1 58F9 63D6 6B39 86DC 7995 5ADB 6F2A 7A26 92A5 5B04 566B 5901 747F 9E65 7E44 6AB9 6BC9 91AB 9EDF 8B69 9DD6 9EF3 4E41 4EEA 531C 572F 5937 8FC6 519D 5B90 6C82 8BD2 4F87 6021 6CB6 72CB 886A 8FE4 9974 54A6 59E8 5CD3 605E 62F8 67C2 73C6 74F5 8D3B 8FFB 5BA7 5DF8 5F2C 6245 6818 684B 7719 80F0 8898 8A11 8CA4 75CD 79FB 801B 8413 51D2 7FA0 86E6 8A51 8A52 8CBD 9057 5A90 6686 6938 8A83 8DE0 9809 9890 98F4 7591 5100 71AA 7BB7 907A 5DAC 5F5B 5F5C 8794 9824 5BF2 5DB7 7C03 984A 5F5D 5F5E 8B3B 93D4 89FA 8B89 9E03 4E59 5DF2 4EE5 9487 4F41 653A 77E3 8094 82E1 82E2 5EA1 8223 8681 91D4 501A 6246 7B16 9018 914F 506F 5D3A 65D1 6905 926F 9CE6 88FF 65D6 8E26 8F22 657C 8798 6AA5 7912 8264 87FB 9857 8F59 9F6E 4E42 4E49 4EBF 5F0B 5208 5FC6 827A 808A 8BAE 4EA6 4F07 5C79 5F02 8285 4F3F 4F5A 52AE 5453 5744 5F79 6291 6759 8034 82C5 8BD1 9091 4F7E 546D 5479 5CC4 6008 603F 6613 678D 6B25 6CC6 7088 79C7 7ECE 8BE3 9A7F 4FCB 5955 5E1F 5E20 5F08 67BB 6D02 6D42 73B4 75AB 7FBF 8875 8F76 5508 57BC 6092 6339 6359 6827 683A 6B2D 6D65 6D73 76CA 88A3 8C0A 966D 52DA 57F6 57F8 60A5 639C 6BB9 7570 785B 7F9B 7FCA 7FCC 8A32 8A33 8C59 8C5B 9038 91F4 96BF 5E46 6561 6679 68ED 6B94 6E59 7132 86E1 8A4D 8DC7 8EFC 9220 9AAE 4E84 517F 610F 6EA2 7348 75EC 776A 7AE9 7F22 7FA9 8084 88D4 88DB 8A63 52E9 5AD5 5ED9 698F 6F69 7617 8189 84FA 8734 977E 99C5 5104 648E 69F8 6BC5 71A0 71A4 71BC 761E 8ABC 9552 9E5D 9E62 9ED3 5293 571B 58BF 5B11 5B1F 5DA7 61B6 61CC 66C0 6BAA 6FBA 71DA 7631 7796 7A53 7E0A 8257 858F 87A0 8939 5BF1 6581 66CE 6A8D 6B5D 71E1 71F1 7FF3 7FFC 81C6 8CF9 9BA8 7654 85D9 85DD 8D00 93B0 9571 7E76 7E79 8C77 972C 9BE3 9D82 9D83 7037 8619 8B6F 8B70 91B3 91B7 9950 56C8 943F 9DC1 9DCA 61FF 897C 9A5B 9DE7 8649 9DFE 8B9B 9F78 8FB7 5307 8864 5B9C 7569 841F 692C 9D8D 7C4E 56D9 56E0 9625 9634 4F8C 5794 59FB 6D07 8335 836B 97F3 9A83 6836 6BB7 6C24 9670 51D0 79F5 88C0 94DF 967B 9682 5591 5819 5A63 6114 7B43 7D6A 6B45 6EB5 798B 852D 6147 647F 7616 92A6 7DF8 9787 8AF2 9712 99F0 567E 95C9 9720 97FE 5198 4E51 541F 72BE 82C2 65A6 70CE 57A0 6CFF 5701 5CFE 72FA 73E2 8376 8A14 8A1A 5A6C 5BC5 5D1F 5D2F 6DEB 8A21 94F6 921D 9F82 6EDB 7892 911E 5924 8529 9280 5656 6BA5 748C 8ABE 569A 6AAD 87EB 972A 9F57 9DE3 4E5A 5EF4 5C39 5F15 5432 996E 8693 8D7A 9690 6DFE 920F 98F2 96A0 9777 98EE 6704 8F11 78E4 8D9B 6A83 763E 96B1 5DBE 6FE5 6FE6 87BE 861F 6AFD 766E 8B94 5370 831A 6D15 80E4 57BD 5837 6E5A 730C 5ED5 8491 9173 616D 764A 6196 6197 9BA3 61DA 6ABC 7C8C 5E94 5FDC 82F1 5040 685C 83BA 5568 5A74 5A96 6E36 7EEC 6720 7150 745B 5AC8 78A4 9533 5624 6484 7507 7DD3 7F28 7F42 8767 8CCF 6A31 748E 7F43 892E 9348 9719 9D2C 9E66 5B30 61C9 81BA 97FA 7516 9E70 9D91 9DA7 56B6 5B46 5B7E 6516 7F4C 8621 8B4D 6AFB 74D4 792F 8B7B 9DAF 944D 7E93 8833 9DEA 9DF9 9E0E 9E1A 76C1 8FCE 8314 76C8 8367 83B9 55B6 8424 8425 8426 86CD 6E81 6E8B 843E 50CC 584B 6979 6EE2 84E5 6F46 7192 7469 877F 5B34 71DF 7E08 87A2 6FD9 6FDA 6FF4 85C0 89AE 8B0D 8D62 7005 93A3 650D 701B 7020 702F 6AFF 7034 8D0F 7C5D 7C6F 77E8 90E2 6D67 68AC 988D 9895 9896 646C 5F71 6F41 7484 763F 7A4E 9834 5DCA 5EEE 766D 6620 668E 786C 5AB5 81A1 565F 9795 941B 9C66 73F1 6125 8747 7E04 651A 8805 7050 705C 8EC8 54DF 5537 55B2 4F63 62E5 75C8 9095 5EB8 50AD 55C8 9118 96CD 5889 5ADE 6175 6EFD 69E6 5670 58C5 64C1 6FAD 90FA 955B 81C3 7655 96DD 93DE 9CD9 5EF1 7049 9954 9C45 9DDB 7670 5581 63D8 7245 9899 9852 9C2B 6C38 752C 548F 6CF3 4FD1 52C7 52C8 6810 57C7 6080 67E1 6D8C 607F 509B 60E5 6111 6E67 7867 8A60 584E 5D71 5F6E 6139 86F9 6142 8E0A 799C 9CAC 8E34 9BD2 7528 82DA 919F 603A 783D 4F18 5FE7 6538 5466 602E 6CD1 5E7D 900C 60A0 9E80 6EFA 6182 512A 913E 5698 7000 6ACC 7E8B 8030 5C22 5C24 7531 6C8B 72B9 90AE 6CB9 80AC 6023 65BF 75A3 5CF3 6D5F 79DE 839C 83B8 90F5 94C0 5064 86B0 8A27 9030 6E38 7336 904A 9C7F 6962 7337 923E 9C89 8F0F 99C0 8555 8763 9B77 8F36 9B8B 6AFE 6709 4E23 5363 82C3 9149 7F91 5EAE 682F 7F90 83A0 6884 8048 811C 94D5 6E75 7989 870F 92AA 69F1 7256 9EDD 61EE 53C8 53F3 5E7C 4F51 4F91 72D6 7CFF 54CA 56FF 59F7 5BA5 5CDF 67DA 7270 7950 8BF1 8FF6 5500 86B4 4EB4 8C81 91C9 916D 8A98 9F2C 53CB 5B67 848F 7257 625C 7EA1 8FC2 8FC3 7A7B 9653 7D06 8676 5539 6DE4 76D3 6BFA 7600 7B8A 4E90 4E8E 9098 4F03 4F59 59A4 6275 6745 6B24 7397 7399 65BC 76C2 81FE 8867 9C7C 4E7B 4FDE 516A 79BA 7AFD 8201 8330 5A1B 5A2F 5A31 6859 72F3 8C00 9151 9980 6E14 8438 9685 96E9 9B5A 5823 582C 5D33 5D4E 5D5B 6109 63C4 6970 6E1D 6E61 756D 7862 8174 842E 903E 9AAC 611A 65D5 6961 6986 6B48 724F 745C 8245 865E 89CE 6F01 776E 7AAC 8206 8915 6B76 7FAD 854D 8753 8ADB 96D3 9918 5B29 6F9E 89A6 8E30 6B5F 74B5 87B8 8F3F 935D 8B23 9AC3 9BBD 65DF 7C45 9A1F 861B 9C05 9DE0 9E06 4E0E 4E88 4F1B 5B87 5C7F 7FBD 96E8 4FC1 4FE3 79B9 8BED 5704 5CFF 7964 504A 532C 5709 5EBE 6554 9105 659E 842D 50B4 5BD9 6940 7440 7610 8207 8A9E 7AB3 92D9 9828 9F89 5673 5DBC 61D9 8C90 6594 9E8C 860C 9F6C 8080 7389 9A6D 572B 807F 828B 828C 59AA 5FEC 996B 80B2 90C1 6631 72F1 79D7 831F 4FFC 5CEA 5F67 6D74 7821 94B0 9884 5590 57DF 5809 6086 60D0 6B32 6DE2 6DEF 8C15 9033 9608 5585 55A9 55BB 5A80 5BD3 5EBD 5FA1 68DB 68DC 68EB 7134 7419 77DE 7872 88D5 9047 98EB 99AD 9E46 6108 6EEA 715C 7A22 7F6D 8248 84AE 84E3 8A89 923A 9810 5AD7 5D8E 622B 6BD3 7344 7609 7DCE 871F 872E 8F0D 9289 564A 617E 6F4F 7A36 84F9 8581 8C6B 9079 92CA 9CFF 6FA6 71CF 71E0 8577 8AED 9325 95BE 9D25 9D2A 5125 7907 79A6 9B4A 9E6C 7652 7916 791C 7A65 7BFD 7E58 91A7 9D52 6AF2 9947 8B7D 8F5D 942D 9731 6B0E 9A48 9B3B 7C5E 9C4A 9DF8 9E12 6B1D 9FA5 8EC9 9B30 9B31 706A 7C72 7229 6327 8362 6F9A 9BF2 56E6 9E22 5248 51A4 6081 7722 9E33 5BC3 6E01 6E06 6E0A 6E15 60CC 6DF5 847E 68E9 84AC 870E 88F7 9E53 7BA2 9CF6 8735 99CC 9D1B 5B3D 9D77 7041 9F18 9F1D 5143 5186 8D20 90A7 5458 56ED 6C85 676C 57A3 7230 8C9F 539F 54E1 5706 7B0E 8696 8881 53A1 570E 63F4 6E72 7328 7F18 8312 9F0B 5712 5713 586C 5AB4 5AC4 6E90 6E92 733F 7342 849D 699E 69AC 8F95 7DE3 7E01 875D 876F 9B6D 6A7C 7FB1 8597 8788 8B1C 8F45 9EFF 93B1 6ADE 908D 9A35 9DA2 9DB0 53B5 8FDC 76F6 903A 9060 92FA 5917 8099 59B4 82D1 6028 9662 57B8 884F 5086 5A9B 63BE 7457 7990 613F 88EB 8911 8924 566E 9858 915B 9228 66F0 66F1 7EA6 7D04 7BB9 77F1 5F5F 5F60 6708 6209 5216 599C 5C84 6288 793F 5CB3 73A5 6071 6085 60A6 868E 868F 8ECF 94BA 9605 6373 8DC0 8DC3 7CA4 8D8A 9205 7CB5 925E 95B1 95B2 5B33 6A3E 7BD7 5DBD 9FA0 7C46 7039 8625 9EE6 721A 79B4 8E8D 7C65 9E11 7C70 9E19 6655 7F0A 8480 6688 6C32 7174 8495 6C33 596B 8779 7E15 8D5F 9835 99A7 8D07 4E91 52FB 5300 56E9 5998 6C84 7EAD 82B8 6600 7547 7703 79D0 90E7 6DA2 7D1C 8018 803A 9116 96F2 612A 6EB3 7B60 7B7C 84B7 69B2 7189 6F90 8553 92C6 6A52 7BD4 7E1C 9942 5141 962D 593D 628E 72C1 9668 837A 6B92 5597 9217 9695 6B9E 891E 99BB 78D2 8CF1 9723 9F73 5B55 8FD0 679F 90D3 607D 9106 915D 508A 60F2 6120 904B 614D 816A 97EB 97F5 7185 71A8 7DF7 7DFC 8574 8580 9196 919E 992B 85F4 97D7 97DE 860A 97FB 62A3 7E67 FDD0-005A 5E00 531D 6C9E 8FCA 5482 62F6 7D25 7D2E 9254 9B73 81DC 81E2 6742 7838 507A 5592 97F4 96D1 5DBB 78FC 894D 96DC 56CB 56D0 96E5 548B 707D 707E 753E 54C9 683D 70D6 83D1 6E3D 7775 8CF3 5BB0 5D3D 518D 5728 6257 4FA2 6D05 8F7D 50A4 8F09 9168 510E 7E21 5142 7CCC 7C2A 7C2E 9415 941F 54B1 661D 6CAF 685A 5BC1 63DD 5646 648D 5127 6505 6512 5139 6522 8DB1 7938 8DB2 6682 66AB 8CDB 8D5E 933E 913C 6FFD 8E54 74C9 8D0A 93E8 74D2 9147 7052 8B83 74DA 79B6 8978 8B9A 9961 5328 7242 7F98 8D43 8CCD 81E7 8535 8CD8 8D13 9AD2 8D1C 9A75 99D4 5958 5F09 810F 585F 846C 92BA 81D3 81DF 50AE 906D 7CDF 8E67 91A9 51FF 947F 65E9 67A3 86A4 68D7 6FA1 74AA 85BB 7E70 85FB 7076 7681 7682 5515 5523 9020 688D 55BF 6165 8241 566A 7C09 71E5 7AC3 8B5F 8DAE 8E81 7AC8 6806 5219 629E 6CA2 62E9 6CCE 6CFD 8D23 8FEE 5247 835D 5536 5567 5E3B 7B2E 8234 8CAC 6EAD 77E0 5616 5AE7 5E58 7BA6 6A0D 8ACE 8D5C 64C7 6FA4 769F 7794 7C00 790B 8957 8B2E 8CFE 880C 9F5A 9F70 9E05 5928 4EC4 5E82 6C44 6603 6617 6351 5D31 4F2C 8536 8D3C 621D 8CCA 9C97 9BFD 8808 9C02 9C61 600E 8C2E 8B56 8B5B 56CE 5897 912B 589E 618E 7F2F 6A67 71B7 7494 77F0 78F3 7F7E 7E52 8B44 9503 92E5 7511 8D60 8D08 9C5B 624E 5412 62AF 5953 6313 67E4 67FB 54F3 5067 55B3 63F8 6E23 6942 5284 6463 76B6 6A1D 89F0 76BB 8B47 9F44 9F47 672D 7534 95F8 86BB 94E1 7160 7250 9598 7B9A 802B 9358 8B57 538F 62C3 82F2 7728 781F 6429 9C8A 9C9D 8E37 9B93 9BBA 4E4D 7079 8BC8 54A4 67DE 6805 70B8 5BB1 75C4 86B1 6EA0 8A50 643E 69A8 9705 91A1 635A 658B 658E 6458 69B8 9F4B 5B85 6AA1 7A84 9259 503A 7826 50B5 5BE8 7635 5908 7C82 6CBE 6BE1 65C3 6834 7C98 86C5 98E6 60C9 8A40 8D88 8A79 959A 8C35 5661 5DA6 859D 9085 9711 6C08 6C0A 77BB 9E6F 65DC 8B6B 9958 9CE3 9A59 9B59 9C63 9E07 8B9D 65A9 98D0 5C55 76CF 5D2D 65AC 692B 7416 640C 76DE 5D83 5D84 6990 98AD 5AF8 9186 6A4F 8F3E 9EF5 5360 4F54 6218 6808 685F 7AD9 5061 7EFD 83DA 68E7 6E5B 6226 7DBB 5D98 8F1A 6230 8665 8666 89B1 8F4F 8B67 8638 9A4F 5F20 5F35 7AE0 50BD 9123 5887 5ADC 5F70 615E 6F33 7350 7CBB 8501 9067 66B2 6A1F 748B 9926 87D1 9A3F 9C46 9E9E 4EC9 957F 9577 6DA8 638C 6F32 7903 4E08 4ED7 6259 5E10 6756 80C0 8D26 5E33 6DB1 8139 75EE 969C 5D82 5E5B 8CEC 762C 7634 7795 7C80 5E65 93F1 9423 4F4B 948A 59B1 5DF6 62DB 662D 76C4 91D7 5541 924A 99CB 7ABC 9363 76BD 722A 627E 6CBC 7475 53EC 5146 8BCF 679B 5797 70A4 72E3 8D75 7B0A 8081 65D0 68F9 8A54 7167 7F69 8087 8088 8D99 66CC 71F3 9BA1 6AC2 77BE 7F84 722B 7F40 8707 55FB 5AEC 906E 5387 6298 6B7D 77FA 7813 7C77 8674 54F2 57D1 7C8D 88A9 5560 608A 6662 6663 8F84 5586 86F0 8A5F 8C2A 99B2 647A 8F12 78D4 8F19 92B8 8F99 87C4 569E 8B2B 8B3A 9BBF 8F4D 8B81 8B8B 8005 4E7D 556B 7987 9517 8D6D 8936 8975 8FD9 67D8 6D59 9019 6DDB 6A1C 6F6A 9E67 87C5 9DD3 7740 8457 8517 8D1E 9488 4FA6 6D48 73CD 73CE 80D7 8C9E 5E2A 6815 6862 771E 771F 7827 796F 91DD 5075 686D 9159 5BCA 8474 9049 5AC3 6438 659F 6968 7349 7504 798E 8496 84C1 9241 9755 699B 6B9D 7467 78AA 799B 6F67 7BB4 6A3C 6FB5 81FB 85BD 9331 8F43 937C 7C48 9C75 8BCA 62AE 6795 5F2B 6623 8F78 5C52 755B 75B9 7715 8897 7D3E 8044 88D6 8A3A 8EEB 7D7C 7F1C 7A39 99D7 7E25 9B12 9EF0 5733 9635 7EBC 753D 4FB2 630B 9663 9E29 632F 6715 681A 7D16 7739 8D48 9156 5866 63D5 6576 7471 8AAB 8CD1 9547 9707 9D06 93AD 93AE 8419 92F4 4E89 4F42 59C3 5F81 6014 722D 8BE4 57E9 5CE5 6323 70A1 72F0 70DD 7710 94B2 5D1D 5D22 6399 7319 7741 8047 94EE 5A9C 63C1 7B5D 5FB0 84B8 775C 8E2D 9266 5FB4 7B8F 931A 5FB5 7BDC 9B07 9BD6 7665 6C36 628D 7CFD 62EF 639F 6678 6138 649C 6574 6B63 8BC1 90D1 5E27 653F 75C7 5E40 8A3C 5863 8ACD 912D 9D0A 8B49 51E7 4E4B 652F 536E 6C41 829D 5431 5DF5 6C65 5767 679D 6CDC 77E5 7EC7 80A2 6800 7957 79D3 79D6 80D1 80DD 887C 5001 75B7 796C 79EA 8102 96BB 6894 6220 6925 81F8 6418 7994 7A19 7D95 69B0 8718 99B6 9CF7 9D32 9D44 7E54 8635 9F05 6267 4F84 59B7 76F4 59EA 5024 503C 8040 91DE 57F4 57F7 6DD4 804C 8CAD 690D 6B96 7286 7983 7D77 8901 8DD6 55ED 74E1 9244 588C 646D 99BD 5B02 6179 6F10 8E2F 6A34 81B1 5128 7E36 8077 87D9 8E60 8EC4 8E91 5902 6B62 53EA 52A7 65E8 962F 5740 5741 5E0B 627A 6C66 6C9A 7EB8 82B7 603E 62A7 7949 54AB 6049 6307 67B3 6D14 780B 8879 8F75 6DFD 75BB 7D19 8A28 8DBE 8EF9 9EF9 916F 85E2 8967 9624 81F3 8296 5FD7 5FEE 627B 8C78 5236 5394 5781 5E19 5E1C 6CBB 7099 8D28 8FE3 90C5 5CD9 5EA2 5EA4 6303 67E3 6809 6D37 7951 965F 5A21 5F8F 631A 664A 684E 72FE 79E9 81F4 889F 8D3D 8F7E 4E7F 506B 5F9D 63B7 68BD 6956 7318 7564 75D4 79F2 79F7 7A92 7D29 7FD0 88A0 89D7 94DA 9E37 5082 5D3B 5F58 667A 6EDE 75E3 86ED 8EFD 9A98 5BD8 5ECC 6431 6ECD 7A1A 7B6B 7F6E 8DF1 8F0A 9527 96C9 5886 6EEF 6F4C 7590 88FD 899F 8A8C 928D 5E5F 6184 646F 71AB 7A3A 81A3 89EF 8CEA 8E2C 92D5 64F3 65D8 7004 7DFB 99E4 9D19 5295 61E5 64F2 6ADB 7A49 87B2 61EB 8D04 6ACD 74C6 89F6 9A2D 9BEF 7929 8C51 9A3A 9A47 8E93 9DD9 9455 8C52 51EA 4FE7 5F94 8B22 4E2D 4F00 6C77 5223 5990 5F78 5FE0 6CC8 7082 7EC8 67CA 76C5 8873 949F 822F 8877 7D42 9221 5E52 8520 953A 92BF 87A4 87BD 937E 9F28 8E71 9418 7C66 80BF 79CD 51A2 55A0 5C30 585A 585C 6B71 7144 816B 7607 7A2E 8E35 7A5C 4EF2 4F17 5995 72C6 794C 833D 8876 91CD 869B 5045 773E 5839 5A91 7B57 8846 8AE5 8FDA 5DDE 821F 8BCC 4F9C 5468 6D32 8BEA 70D0 73D8 8F80 90EE 5F9F 63AB 6DCD 77EA 9031 9E3C 558C 7CA5 8D52 8F08 9282 8CD9 8F16 970C 76E9 8B05 9D43 9A06 8B78 59AF 8F74 8EF8 8098 759B 83F7 666D 776D 7B92 9BDE 7EA3 4F37 546A 5492 5B99 7EC9 5191 54AE 663C 7D02 80C4 836E 76B1 914E 665D 7C99 8464 8A4B 7503 8A76 50FD 76BA 99CE 5663 7E10 9AA4 7C40 7C55 7C52 9A5F 5E1A 70BF 99F2 6731 52AF 4F8F 8BDB 90BE 6D19 8331 682A 73E0 8BF8 732A 7843 79FC 88BE 94E2 7D51 86DB 8A85 8DE6 69E0 6F74 876B 9296 6A65 8AF8 8C6C 99EF 9BA2 9D38 7026 6AEB 6AE7 9BFA 9F04 8829 7AF9 6CCF 7AFA 70A2 7B01 833F 70DB 7A8B 9010 7B1C 8233 7603 7BC9 71ED 880B 8E85 9C41 5B4E 705F 66EF 6B18 7225 883E 4E36 4E3B 5B94 62C4 7F5C 967C 6E1A 716E 7151 8A5D 5631 6FD0 9E88 77A9 529A 56D1 65B8 77DA 4F2B 4F47 4F4F 52A9 7EBB 82CE 577E 677C 6CE8 8D2E 8FEC 9A7B 58F4 67F1 6BB6 70B7 795D 75B0 771D 782B 7969 7ADA 8387 7D35 7D38 7F9C 86C0 5D40 7B51 8A3B 8CAF 8DD3 8EF4 94F8 7B6F 9252 99B5 7BB8 7FE5 6A26 92F3 99D0 7BEB 9714 9E86 9444 58B8 6293 6A9B 81BC 7C3B 9AFD 62FD 8DE9 4E13 53C0 5C02 7816 5C08 911F 587C 5AE5 747C 750E 78D7 819E 989B 78DA 8AEF 87E4 9853 9C44 8F6C 5B68 8EE2 7AF1 8F49 7077 556D 581F 8483 7451 815E 50CE 8D5A 64B0 7BC6 9994 7BF9 8948 8CFA 8B54 994C 56C0 7C51 5986 5E84 599D 8358 5A24 6869 838A 6889 6E77 7CA7 88C5 88DD 6A01 7CDA 58EE 58EF 72B6 72C0 58F5 710B 6F34 649E 6207 5E92 96B9 8FFD 9A93 9525 9310 9A05 9D7B 6C9D 5760 6858 7B0D 5A37 60F4 7500 7F12 7577 787E 8187 589C 8D58 7E0B 8AC8 918A 9323 991F 7908 8D05 8B75 8F5B 9446 7F00 7DB4 5B92 8FCD 80AB 7A80 8C06 8AC4 8860 51C6 57FB 6E96 7DA7 8A30 7A15 51D6 5353 62D9 70AA 502C 6349 684C 68C1 6DBF 68F3 7A5B 7A71 883F 5734 5F74 6C4B 72B3 707C 53D5 59B0 8301 65AB 6D4A 4E35 6D5E 70F5 8BFC 914C 5544 5545 5A3A 68B2 65B1 666B 6913 7438 787A 7AA1 7F6C 64AF 64C6 65B2 69D5 799A 8AC1 8AD1 92DC 6FC1 7BE7 64E2 6580 65B5 6FEF 6AE1 8B36 956F 942F 9D6B 7042 8817 9432 7C57 9DDF 7C71 5285 7AA7 4E72 5B5C 830A 5179 54A8 59D5 59FF 8332 6825 7386 7D0E 8D40 8D44 6DC4 79F6 7F01 8C18 55DE 5B73 5D6B 6914 6E7D 6ECB 7CA2 8458 8F8E 9111 5B76 798C 89DC 8A3E 8CB2 8CC7 8D91 9531 7A35 7DC7 922D 9543 9F87 8F1C 9F12 6FAC 8AEE 8DA6 8F3A 9319 9AED 9CBB 937F 93A1 74BE 983F 983E 9BD4 9D85 9F4D 9C26 84FB 4ED4 5407 59C9 59CA 674D 77F7 79C4 80CF 5470 79ED 7C7D 8014 8678 7B2B 6893 91E8 5559 7D2B 6ED3 8A3F 699F 5B57 81EA 8293 8321 5033 525A 6063 7278 6E0D 7725 7726 80D4 80FE 6F2C 5B50 5D30 6A74 5B97 5027 7EFC 9A94 582B 5D4F 5D55 60FE 68D5 7323 8159 847C 6721 6936 5D78 7A2F 7D9C 7DC3 71A7 7DF5 7FEA 876C 8E28 8E2A 78EB 9350 8C75 8E64 9A0C 9B03 9A23 9B09 9B37 9BEE 9BFC 9441 603B 506C 6374 60E3 6121 63D4 6403 50AF 84D7 6460 7DCF 7E02 7E3D 93D3 7EB5 662E 75AD 500A 7314 7882 7CBD 7CC9 7632 7E26 931D 7E31 7CED 6F48 90B9 9A7A 8BF9 90F0 966C 83C6 68F7 68F8 9112 7B83 7DC5 8ACF 9139 9CB0 9BEB 9EC0 9A36 9F71 9F7A 8D71 8D70 594F 63CD 6971 9BD0 79DF 8445 84A9 5346 8DB3 5352 54EB 5D12 5D2A 65CF 50B6 7BA4 8E24 8E3F 955E 93C3 8BC5 963B 7EC4 4FCE 723C 73C7 7956 7D44 8A5B 977B 93BA 94BB 8E9C 947D 7E64 7F35 7E82 7E89 7C6B 7E98 6525 945A 539C 6718 55FA 6A36 87D5 7E97 5D8A 5634 5DB5 567F 74BB 682C 7D4A 9154 6700 666C 797D 7A21 7F6A 8FA0 69DC 917B 855E 9189 6A87 92F7 930A 6A8C 67A0 7A5D 5C0A 58AB 58FF 5D9F 9075 6A3D 7E5C 7F47 940F 9CDF 9C52 9DF7 50D4 5642 6499 8B50 6358 928C 9D8E 6628 79E8 838B 637D 690A 7422 7A13 7B70 923C 5DE6 4F50 5528 7E53 4F5C 5750 963C 5C9D 5C9E 600D 4FB3 795A 80D9 5511 5EA7 888F 505A 8443 8444 98F5 7CF3 5497 84D9 __END__ =head1 NAME Unicode::Collate::CJK::Pinyin - weighting CJK Unified Ideographs for Unicode::Collate =head1 SYNOPSIS use Unicode::Collate; use Unicode::Collate::CJK::Pinyin; my $collator = Unicode::Collate->new( overrideCJK => \&Unicode::Collate::CJK::Pinyin::weightPinyin ); =head1 DESCRIPTION C<Unicode::Collate::CJK::Pinyin> provides C<weightPinyin()>, that is adequate for C<overrideCJK> of C<Unicode::Collate> and makes tailoring of CJK Unified Ideographs in the order of CLDR's pinyin ordering. =head1 CAVEAT The pinyin ordering includes some characters that are not CJK Unified Ideographs and can't utilize C<weightPinyin()> for collation. For them, use C<entry> instead. =head1 SEE ALSO =over 4 =item CLDR - Unicode Common Locale Data Repository L<http://cldr.unicode.org/> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =item L<Unicode::Collate> =item L<Unicode::Collate::Locale> =back =cut Unicode/Collate/CJK/JISX0208.pm 0000644 00000100011 15037233317 0011546 0 ustar 00 package Unicode::Collate::CJK::JISX0208; use 5.006; use strict; use warnings; our $VERSION = '1.25'; my %u2p; my $wt = 0x8000; while (<DATA>) { last if /^__END__/; my @c = split; for my $c (@c) { next if !$c; $u2p{hex($c)} = $wt; $wt++; } } sub weightJISX0208 { my $u = shift; return exists $u2p{$u} ? $u2p{$u} : undef; } 1; __DATA__ 4E9C 5516 5A03 963F 54C0 611B 6328 59F6 9022 8475 831C 7A50 60AA 63E1 6E25 65ED 8466 82A6 9BF5 6893 5727 65A1 6271 5B9B 59D0 867B 98F4 7D62 7DBE 9B8E 6216 7C9F 88B7 5B89 5EB5 6309 6697 6848 95C7 978D 674F 4EE5 4F0A 4F4D 4F9D 5049 56F2 5937 59D4 5A01 5C09 60DF 610F 6170 6613 6905 70BA 754F 7570 79FB 7DAD 7DEF 80C3 840E 8863 8B02 9055 907A 533B 4E95 4EA5 57DF 80B2 90C1 78EF 4E00 58F1 6EA2 9038 7A32 8328 828B 9C2F 5141 5370 54BD 54E1 56E0 59FB 5F15 98F2 6DEB 80E4 852D 9662 9670 96A0 97FB 540B 53F3 5B87 70CF 7FBD 8FC2 96E8 536F 9D5C 7ABA 4E11 7893 81FC 6E26 5618 5504 6B1D 851A 9C3B 59E5 53A9 6D66 74DC 958F 5642 4E91 904B 96F2 834F 990C 53E1 55B6 5B30 5F71 6620 66F3 6804 6C38 6CF3 6D29 745B 76C8 7A4E 9834 82F1 885B 8A60 92ED 6DB2 75AB 76CA 99C5 60A6 8B01 8D8A 95B2 698E 53AD 5186 5712 5830 5944 5BB4 5EF6 6028 63A9 63F4 6CBF 6F14 708E 7114 7159 71D5 733F 7E01 8276 82D1 8597 9060 925B 9D1B 5869 65BC 6C5A 7525 51F9 592E 5965 5F80 5FDC 62BC 65FA 6A2A 6B27 6BB4 738B 7FC1 8956 9D2C 9D0E 9EC4 5CA1 6C96 837B 5104 5C4B 61B6 81C6 6876 7261 4E59 4FFA 5378 6069 6E29 7A4F 97F3 4E0B 5316 4EEE 4F55 4F3D 4FA1 4F73 52A0 53EF 5609 590F 5AC1 5BB6 5BE1 79D1 6687 679C 67B6 6B4C 6CB3 706B 73C2 798D 79BE 7A3C 7B87 82B1 82DB 8304 8377 83EF 83D3 8766 8AB2 5629 8CA8 8FE6 904E 971E 868A 4FC4 5CE8 6211 7259 753B 81E5 82BD 86FE 8CC0 96C5 9913 99D5 4ECB 4F1A 89E3 56DE 584A 58CA 5EFB 5FEB 602A 6094 6062 61D0 6212 62D0 6539 9B41 6666 68B0 6D77 7070 754C 7686 7D75 82A5 87F9 958B 968E 8C9D 51F1 52BE 5916 54B3 5BB3 5D16 6168 6982 6DAF 788D 84CB 8857 8A72 93A7 9AB8 6D6C 99A8 86D9 57A3 67FF 86CE 920E 5283 5687 5404 5ED3 62E1 64B9 683C 6838 6BBB 7372 78BA 7A6B 899A 89D2 8D6B 8F03 90ED 95A3 9694 9769 5B66 5CB3 697D 984D 984E 639B 7B20 6A2B 6A7F 68B6 9C0D 6F5F 5272 559D 6070 62EC 6D3B 6E07 6ED1 845B 8910 8F44 4E14 9C39 53F6 691B 6A3A 9784 682A 515C 7AC3 84B2 91DC 938C 565B 9D28 6822 8305 8431 7CA5 5208 82C5 74E6 4E7E 4F83 51A0 5BD2 520A 52D8 52E7 5DFB 559A 582A 59E6 5B8C 5B98 5BDB 5E72 5E79 60A3 611F 6163 61BE 63DB 6562 67D1 6853 68FA 6B3E 6B53 6C57 6F22 6F97 6F45 74B0 7518 76E3 770B 7AFF 7BA1 7C21 7DE9 7F36 7FF0 809D 8266 839E 89B3 8ACC 8CAB 9084 9451 9593 9591 95A2 9665 97D3 9928 8218 4E38 542B 5CB8 5DCC 73A9 764C 773C 5CA9 7FEB 8D0B 96C1 9811 9854 9858 4F01 4F0E 5371 559C 5668 57FA 5947 5B09 5BC4 5C90 5E0C 5E7E 5FCC 63EE 673A 65D7 65E2 671F 68CB 68C4 6A5F 5E30 6BC5 6C17 6C7D 757F 7948 5B63 7A00 7D00 5FBD 898F 8A18 8CB4 8D77 8ECC 8F1D 98E2 9A0E 9B3C 4E80 507D 5100 5993 5B9C 622F 6280 64EC 6B3A 72A0 7591 7947 7FA9 87FB 8ABC 8B70 63AC 83CA 97A0 5409 5403 55AB 6854 6A58 8A70 7827 6775 9ECD 5374 5BA2 811A 8650 9006 4E18 4E45 4EC7 4F11 53CA 5438 5BAE 5F13 6025 6551 673D 6C42 6C72 6CE3 7078 7403 7A76 7AAE 7B08 7D1A 7CFE 7D66 65E7 725B 53BB 5C45 5DE8 62D2 62E0 6319 6E20 865A 8A31 8DDD 92F8 6F01 79A6 9B5A 4EA8 4EAB 4EAC 4F9B 4FA0 50D1 5147 7AF6 5171 51F6 5354 5321 537F 53EB 55AC 5883 5CE1 5F37 5F4A 602F 6050 606D 631F 6559 6A4B 6CC1 72C2 72ED 77EF 80F8 8105 8208 854E 90F7 93E1 97FF 9957 9A5A 4EF0 51DD 5C2D 6681 696D 5C40 66F2 6975 7389 6850 7C81 50C5 52E4 5747 5DFE 9326 65A4 6B23 6B3D 7434 7981 79BD 7B4B 7DCA 82B9 83CC 887F 895F 8B39 8FD1 91D1 541F 9280 4E5D 5036 53E5 533A 72D7 7396 77E9 82E6 8EAF 99C6 99C8 99D2 5177 611A 865E 55B0 7A7A 5076 5BD3 9047 9685 4E32 6ADB 91E7 5C51 5C48 6398 7A9F 6C93 9774 8F61 7AAA 718A 9688 7C82 6817 7E70 6851 936C 52F2 541B 85AB 8A13 7FA4 8ECD 90E1 5366 8888 7941 4FC2 50BE 5211 5144 5553 572D 73EA 578B 5951 5F62 5F84 6075 6176 6167 61A9 63B2 643A 656C 666F 6842 6E13 7566 7A3D 7CFB 7D4C 7D99 7E4B 7F6B 830E 834A 86CD 8A08 8A63 8B66 8EFD 981A 9D8F 82B8 8FCE 9BE8 5287 621F 6483 6FC0 9699 6841 5091 6B20 6C7A 6F54 7A74 7D50 8840 8A23 6708 4EF6 5039 5026 5065 517C 5238 5263 55A7 570F 5805 5ACC 5EFA 61B2 61F8 62F3 6372 691C 6A29 727D 72AC 732E 7814 786F 7D79 770C 80A9 898B 8B19 8CE2 8ED2 9063 9375 967A 9855 9A13 9E78 5143 539F 53B3 5E7B 5F26 6E1B 6E90 7384 73FE 7D43 8237 8A00 8AFA 9650 4E4E 500B 53E4 547C 56FA 59D1 5B64 5DF1 5EAB 5F27 6238 6545 67AF 6E56 72D0 7CCA 88B4 80A1 80E1 83F0 864E 8A87 8DE8 9237 96C7 9867 9F13 4E94 4E92 4F0D 5348 5449 543E 5A2F 5F8C 5FA1 609F 68A7 6A8E 745A 7881 8A9E 8AA4 8B77 9190 4E5E 9BC9 4EA4 4F7C 4FAF 5019 5016 5149 516C 529F 52B9 52FE 539A 53E3 5411 540E 5589 5751 57A2 597D 5B54 5B5D 5B8F 5DE5 5DE7 5DF7 5E78 5E83 5E9A 5EB7 5F18 6052 614C 6297 62D8 63A7 653B 6602 6643 66F4 676D 6821 6897 69CB 6C5F 6D2A 6D69 6E2F 6E9D 7532 7687 786C 7A3F 7CE0 7D05 7D18 7D5E 7DB1 8015 8003 80AF 80B1 8154 818F 822A 8352 884C 8861 8B1B 8CA2 8CFC 90CA 9175 9271 783F 92FC 95A4 964D 9805 9999 9AD8 9D3B 525B 52AB 53F7 5408 58D5 62F7 6FE0 8C6A 8F5F 9EB9 514B 523B 544A 56FD 7A40 9177 9D60 9ED2 7344 6F09 8170 7511 5FFD 60DA 9AA8 72DB 8FBC 6B64 9803 4ECA 56F0 5764 58BE 5A5A 6068 61C7 660F 6606 6839 68B1 6DF7 75D5 7D3A 826E 9B42 4E9B 4F50 53C9 5506 5D6F 5DE6 5DEE 67FB 6C99 7473 7802 8A50 9396 88DF 5750 5EA7 632B 50B5 50AC 518D 6700 54C9 585E 59BB 5BB0 5F69 624D 63A1 683D 6B73 6E08 707D 91C7 7280 7815 7826 796D 658E 7D30 83DC 88C1 8F09 969B 5264 5728 6750 7F6A 8CA1 51B4 5742 962A 583A 698A 80B4 54B2 5D0E 57FC 7895 9DFA 4F5C 524A 548B 643E 6628 6714 67F5 7A84 7B56 7D22 932F 685C 9BAD 7B39 5319 518A 5237 5BDF 62F6 64AE 64E6 672D 6BBA 85A9 96D1 7690 9BD6 634C 9306 9BAB 76BF 6652 4E09 5098 53C2 5C71 60E8 6492 6563 685F 71E6 73CA 7523 7B97 7E82 8695 8B83 8CDB 9178 9910 65AC 66AB 6B8B 4ED5 4ED4 4F3A 4F7F 523A 53F8 53F2 55E3 56DB 58EB 59CB 59C9 59FF 5B50 5C4D 5E02 5E2B 5FD7 601D 6307 652F 5B5C 65AF 65BD 65E8 679D 6B62 6B7B 6C0F 7345 7949 79C1 7CF8 7D19 7D2B 80A2 8102 81F3 8996 8A5E 8A69 8A66 8A8C 8AEE 8CC7 8CDC 96CC 98FC 6B6F 4E8B 4F3C 4F8D 5150 5B57 5BFA 6148 6301 6642 6B21 6ECB 6CBB 723E 74BD 75D4 78C1 793A 800C 8033 81EA 8494 8F9E 6C50 9E7F 5F0F 8B58 9D2B 7AFA 8EF8 5B8D 96EB 4E03 53F1 57F7 5931 5AC9 5BA4 6089 6E7F 6F06 75BE 8CEA 5B9F 8500 7BE0 5072 67F4 829D 5C61 854A 7E1E 820E 5199 5C04 6368 8D66 659C 716E 793E 7D17 8005 8B1D 8ECA 906E 86C7 90AA 501F 52FA 5C3A 6753 707C 7235 914C 91C8 932B 82E5 5BC2 5F31 60F9 4E3B 53D6 5B88 624B 6731 6B8A 72E9 73E0 7A2E 816B 8DA3 9152 9996 5112 53D7 546A 5BFF 6388 6A39 7DAC 9700 56DA 53CE 5468 5B97 5C31 5DDE 4FEE 6101 62FE 6D32 79C0 79CB 7D42 7E4D 7FD2 81ED 821F 8490 8846 8972 8B90 8E74 8F2F 9031 914B 916C 96C6 919C 4EC0 4F4F 5145 5341 5F93 620E 67D4 6C41 6E0B 7363 7E26 91CD 9283 53D4 5919 5BBF 6DD1 795D 7E2E 7C9B 587E 719F 51FA 8853 8FF0 4FCA 5CFB 6625 77AC 7AE3 821C 99FF 51C6 5FAA 65EC 696F 6B89 6DF3 6E96 6F64 76FE 7D14 5DE1 9075 9187 9806 51E6 521D 6240 6691 66D9 6E1A 5EB6 7DD2 7F72 66F8 85AF 85F7 8AF8 52A9 53D9 5973 5E8F 5F90 6055 92E4 9664 50B7 511F 52DD 5320 5347 53EC 54E8 5546 5531 5617 5968 59BE 5A3C 5BB5 5C06 5C0F 5C11 5C1A 5E84 5E8A 5EE0 5F70 627F 6284 62DB 638C 6377 6607 660C 662D 6676 677E 68A2 6A1F 6A35 6CBC 6D88 6E09 6E58 713C 7126 7167 75C7 7701 785D 7901 7965 79F0 7AE0 7B11 7CA7 7D39 8096 83D6 848B 8549 885D 88F3 8A1F 8A3C 8A54 8A73 8C61 8CDE 91A4 9266 937E 9418 969C 9798 4E0A 4E08 4E1E 4E57 5197 5270 57CE 5834 58CC 5B22 5E38 60C5 64FE 6761 6756 6D44 72B6 7573 7A63 84B8 8B72 91B8 9320 5631 57F4 98FE 62ED 690D 6B96 71ED 7E54 8077 8272 89E6 98DF 8755 8FB1 5C3B 4F38 4FE1 4FB5 5507 5A20 5BDD 5BE9 5FC3 614E 632F 65B0 664B 68EE 699B 6D78 6DF1 7533 75B9 771F 795E 79E6 7D33 81E3 82AF 85AA 89AA 8A3A 8EAB 8F9B 9032 91DD 9707 4EBA 4EC1 5203 5875 58EC 5C0B 751A 5C3D 814E 8A0A 8FC5 9663 976D 7B25 8ACF 9808 9162 56F3 53A8 9017 5439 5782 5E25 63A8 6C34 708A 7761 7C8B 7FE0 8870 9042 9154 9310 9318 968F 745E 9AC4 5D07 5D69 6570 67A2 8DA8 96DB 636E 6749 6919 83C5 9817 96C0 88FE 6F84 647A 5BF8 4E16 702C 755D 662F 51C4 5236 52E2 59D3 5F81 6027 6210 653F 6574 661F 6674 68F2 6816 6B63 6E05 7272 751F 76DB 7CBE 8056 58F0 88FD 897F 8AA0 8A93 8ACB 901D 9192 9752 9759 6589 7A0E 8106 96BB 5E2D 60DC 621A 65A5 6614 6790 77F3 7A4D 7C4D 7E3E 810A 8CAC 8D64 8DE1 8E5F 78A9 5207 62D9 63A5 6442 6298 8A2D 7A83 7BC0 8AAC 96EA 7D76 820C 8749 4ED9 5148 5343 5360 5BA3 5C02 5C16 5DDD 6226 6247 64B0 6813 6834 6CC9 6D45 6D17 67D3 6F5C 714E 717D 65CB 7A7F 7BAD 7DDA 7E4A 7FA8 817A 821B 8239 85A6 8A6E 8CCE 8DF5 9078 9077 92AD 9291 9583 9BAE 524D 5584 6F38 7136 5168 7985 7E55 81B3 7CCE 564C 5851 5CA8 63AA 66FE 66FD 695A 72D9 758F 758E 790E 7956 79DF 7C97 7D20 7D44 8607 8A34 963B 9061 9F20 50E7 5275 53CC 53E2 5009 55AA 58EE 594F 723D 5B8B 5C64 531D 60E3 60F3 635C 6383 633F 63BB 64CD 65E9 66F9 5DE3 69CD 69FD 6F15 71E5 4E89 75E9 76F8 7A93 7CDF 7DCF 7D9C 8061 8349 8358 846C 84BC 85FB 88C5 8D70 9001 906D 9397 971C 9A12 50CF 5897 618E 81D3 8535 8D08 9020 4FC3 5074 5247 5373 606F 6349 675F 6E2C 8DB3 901F 4FD7 5C5E 8CCA 65CF 7D9A 5352 8896 5176 63C3 5B58 5B6B 5C0A 640D 6751 905C 4ED6 591A 592A 6C70 8A51 553E 5815 59A5 60F0 6253 67C1 8235 6955 9640 99C4 9A28 4F53 5806 5BFE 8010 5CB1 5E2F 5F85 6020 614B 6234 66FF 6CF0 6EDE 80CE 817F 82D4 888B 8CB8 9000 902E 968A 9EDB 9BDB 4EE3 53F0 5927 7B2C 918D 984C 9DF9 6EDD 7027 5353 5544 5B85 6258 629E 62D3 6CA2 6FEF 7422 8A17 9438 6FC1 8AFE 8338 51E7 86F8 53EA 53E9 4F46 9054 8FB0 596A 8131 5DFD 7AEA 8FBF 68DA 8C37 72F8 9C48 6A3D 8AB0 4E39 5358 5606 5766 62C5 63A2 65E6 6B4E 6DE1 6E5B 70AD 77ED 7AEF 7BAA 7DBB 803D 80C6 86CB 8A95 935B 56E3 58C7 5F3E 65AD 6696 6A80 6BB5 7537 8AC7 5024 77E5 5730 5F1B 6065 667A 6C60 75F4 7A1A 7F6E 81F4 8718 9045 99B3 7BC9 755C 7AF9 7B51 84C4 9010 79E9 7A92 8336 5AE1 7740 4E2D 4EF2 5B99 5FE0 62BD 663C 67F1 6CE8 866B 8877 8A3B 914E 92F3 99D0 6A17 7026 732A 82E7 8457 8CAF 4E01 5146 51CB 558B 5BF5 5E16 5E33 5E81 5F14 5F35 5F6B 5FB4 61F2 6311 66A2 671D 6F6E 7252 753A 773A 8074 8139 8178 8776 8ABF 8ADC 8D85 8DF3 929A 9577 9802 9CE5 52C5 6357 76F4 6715 6C88 73CD 8CC3 93AE 9673 6D25 589C 690E 69CC 8FFD 939A 75DB 901A 585A 6802 63B4 69FB 4F43 6F2C 67D8 8FBB 8526 7DB4 9354 693F 6F70 576A 58F7 5B2C 7D2C 722A 540A 91E3 9DB4 4EAD 4F4E 505C 5075 5243 8C9E 5448 5824 5B9A 5E1D 5E95 5EAD 5EF7 5F1F 608C 62B5 633A 63D0 68AF 6C40 7887 798E 7A0B 7DE0 8247 8A02 8AE6 8E44 9013 90B8 912D 91D8 9F0E 6CE5 6458 64E2 6575 6EF4 7684 7B1B 9069 93D1 6EBA 54F2 5FB9 64A4 8F4D 8FED 9244 5178 586B 5929 5C55 5E97 6DFB 7E8F 751C 8CBC 8EE2 985B 70B9 4F1D 6BBF 6FB1 7530 96FB 514E 5410 5835 5857 59AC 5C60 5F92 6597 675C 6E21 767B 83DF 8CED 9014 90FD 934D 7825 783A 52AA 5EA6 571F 5974 6012 5012 515A 51AC 51CD 5200 5510 5854 5858 5957 5B95 5CF6 5D8B 60BC 6295 642D 6771 6843 68BC 68DF 76D7 6DD8 6E6F 6D9B 706F 71C8 5F53 75D8 7977 7B49 7B54 7B52 7CD6 7D71 5230 8463 8569 85E4 8A0E 8B04 8C46 8E0F 9003 900F 9419 9676 982D 9A30 95D8 50CD 52D5 540C 5802 5C0E 61A7 649E 6D1E 77B3 7AE5 80F4 8404 9053 9285 5CE0 9D07 533F 5F97 5FB3 6D9C 7279 7763 79BF 7BE4 6BD2 72EC 8AAD 6803 6A61 51F8 7A81 6934 5C4A 9CF6 82EB 5BC5 9149 701E 5678 5C6F 60C7 6566 6C8C 8C5A 9041 9813 5451 66C7 920D 5948 90A3 5185 4E4D 51EA 8599 8B0E 7058 637A 934B 6962 99B4 7E04 7577 5357 6960 8EDF 96E3 6C5D 4E8C 5C3C 5F10 8FE9 5302 8CD1 8089 8679 5EFF 65E5 4E73 5165 5982 5C3F 97EE 4EFB 598A 5FCD 8A8D 6FE1 79B0 7962 5BE7 8471 732B 71B1 5E74 5FF5 637B 649A 71C3 7C98 4E43 5EFC 4E4B 57DC 56A2 60A9 6FC3 7D0D 80FD 8133 81BF 8FB2 8997 86A4 5DF4 628A 64AD 8987 6777 6CE2 6D3E 7436 7834 5A46 7F75 82AD 99AC 4FF3 5EC3 62DD 6392 6557 676F 76C3 724C 80CC 80BA 8F29 914D 500D 57F9 5A92 6885 6973 7164 72FD 8CB7 58F2 8CE0 966A 9019 877F 79E4 77E7 8429 4F2F 5265 535A 62CD 67CF 6CCA 767D 7B94 7C95 8236 8584 8FEB 66DD 6F20 7206 7E1B 83AB 99C1 9EA6 51FD 7BB1 7872 7BB8 8087 7B48 6AE8 5E61 808C 7551 7560 516B 9262 6E8C 767A 9197 9AEA 4F10 7F70 629C 7B4F 95A5 9CE9 567A 5859 86E4 96BC 4F34 5224 534A 53CD 53DB 5E06 642C 6591 677F 6C3E 6C4E 7248 72AF 73ED 7554 7E41 822C 85E9 8CA9 7BC4 91C6 7169 9812 98EF 633D 6669 756A 76E4 78D0 8543 86EE 532A 5351 5426 5983 5E87 5F7C 60B2 6249 6279 62AB 6590 6BD4 6CCC 75B2 76AE 7891 79D8 7DCB 7F77 80A5 88AB 8AB9 8CBB 907F 975E 98DB 6A0B 7C38 5099 5C3E 5FAE 6787 6BD8 7435 7709 7F8E 9F3B 67CA 7A17 5339 758B 9AED 5F66 819D 83F1 8098 5F3C 5FC5 7562 7B46 903C 6867 59EB 5A9B 7D10 767E 8B2C 4FF5 5F6A 6A19 6C37 6F02 74E2 7968 8868 8A55 8C79 5EDF 63CF 75C5 79D2 82D7 9328 92F2 849C 86ED 9C2D 54C1 5F6C 658C 6D5C 7015 8CA7 8CD3 983B 654F 74F6 4E0D 4ED8 57E0 592B 5A66 5BCC 51A8 5E03 5E9C 6016 6276 6577 65A7 666E 6D6E 7236 7B26 8150 819A 8299 8B5C 8CA0 8CE6 8D74 961C 9644 4FAE 64AB 6B66 821E 8461 856A 90E8 5C01 6953 98A8 847A 8557 4F0F 526F 5FA9 5E45 670D 798F 8179 8907 8986 6DF5 5F17 6255 6CB8 4ECF 7269 9B92 5206 543B 5674 58B3 61A4 626E 711A 596E 7C89 7CDE 7D1B 96F0 6587 805E 4E19 4F75 5175 5840 5E63 5E73 5F0A 67C4 4E26 853D 9589 965B 7C73 9801 50FB 58C1 7656 78A7 5225 77A5 8511 7B86 504F 5909 7247 7BC7 7DE8 8FBA 8FD4 904D 4FBF 52C9 5A29 5F01 97AD 4FDD 8217 92EA 5703 6355 6B69 752B 88DC 8F14 7A42 52DF 5893 6155 620A 66AE 6BCD 7C3F 83E9 5023 4FF8 5305 5446 5831 5949 5B9D 5CF0 5CEF 5D29 5E96 62B1 6367 653E 65B9 670B 6CD5 6CE1 70F9 7832 7E2B 80DE 82B3 840C 84EC 8702 8912 8A2A 8C4A 90A6 92D2 98FD 9CF3 9D6C 4E4F 4EA1 508D 5256 574A 59A8 5E3D 5FD8 5FD9 623F 66B4 671B 67D0 68D2 5192 7D21 80AA 81A8 8B00 8C8C 8CBF 927E 9632 5420 982C 5317 50D5 535C 58A8 64B2 6734 7267 7766 7A46 91E6 52C3 6CA1 6B86 5800 5E4C 5954 672C 7FFB 51E1 76C6 6469 78E8 9B54 9EBB 57CB 59B9 6627 679A 6BCE 54E9 69D9 5E55 819C 6795 9BAA 67FE 9C52 685D 4EA6 4FE3 53C8 62B9 672B 6CAB 8FC4 4FAD 7E6D 9EBF 4E07 6162 6E80 6F2B 8513 5473 672A 9B45 5DF3 7B95 5CAC 5BC6 871C 6E4A 84D1 7A14 8108 5999 7C8D 6C11 7720 52D9 5922 7121 725F 77DB 9727 9D61 690B 5A7F 5A18 51A5 540D 547D 660E 76DF 8FF7 9298 9CF4 59EA 725D 6EC5 514D 68C9 7DBF 7DEC 9762 9EBA 6478 6A21 8302 5984 5B5F 6BDB 731B 76F2 7DB2 8017 8499 5132 6728 9ED9 76EE 6762 52FF 9905 5C24 623B 7C7E 8CB0 554F 60B6 7D0B 9580 5301 4E5F 51B6 591C 723A 8036 91CE 5F25 77E2 5384 5F79 7D04 85AC 8A33 8E8D 9756 67F3 85AE 9453 6109 6108 6CB9 7652 8AED 8F38 552F 4F51 512A 52C7 53CB 5BA5 5E7D 60A0 6182 63D6 6709 67DA 6E67 6D8C 7336 7337 7531 7950 88D5 8A98 904A 9091 90F5 96C4 878D 5915 4E88 4F59 4E0E 8A89 8F3F 9810 50AD 5E7C 5996 5BB9 5EB8 63DA 63FA 64C1 66DC 694A 69D8 6D0B 6EB6 7194 7528 7AAF 7F8A 8000 8449 84C9 8981 8B21 8E0A 9065 967D 990A 617E 6291 6B32 6C83 6D74 7FCC 7FFC 6DC0 7F85 87BA 88F8 6765 83B1 983C 96F7 6D1B 7D61 843D 916A 4E71 5375 5D50 6B04 6FEB 85CD 862D 89A7 5229 540F 5C65 674E 68A8 7406 7483 75E2 88CF 88E1 91CC 96E2 9678 5F8B 7387 7ACB 844E 63A0 7565 5289 6D41 6E9C 7409 7559 786B 7C92 9686 7ADC 9F8D 4FB6 616E 65C5 865C 4E86 4EAE 50DA 4E21 51CC 5BEE 6599 6881 6DBC 731F 7642 77AD 7A1C 7CE7 826F 8AD2 907C 91CF 9675 9818 529B 7DD1 502B 5398 6797 6DCB 71D0 7433 81E8 8F2A 96A3 9C57 9E9F 7460 5841 6D99 7D2F 985E 4EE4 4F36 4F8B 51B7 52B1 5DBA 601C 73B2 793C 82D3 9234 96B7 96F6 970A 9E97 9F62 66A6 6B74 5217 52A3 70C8 88C2 5EC9 604B 6190 6F23 7149 7C3E 7DF4 806F 84EE 9023 932C 5442 9B6F 6AD3 7089 8CC2 8DEF 9732 52B4 5A41 5ECA 5F04 6717 697C 6994 6D6A 6F0F 7262 72FC 7BED 8001 807E 874B 90CE 516D 9E93 7984 808B 9332 8AD6 502D 548C 8A71 6B6A 8CC4 8107 60D1 67A0 9DF2 4E99 4E98 9C10 8A6B 85C1 8568 6900 6E7E 7897 8155 5F0C 4E10 4E15 4E2A 4E31 4E36 4E3C 4E3F 4E42 4E56 4E58 4E82 4E85 8C6B 4E8A 8212 5F0D 4E8E 4E9E 4E9F 4EA0 4EA2 4EB0 4EB3 4EB6 4ECE 4ECD 4EC4 4EC6 4EC2 4ED7 4EDE 4EED 4EDF 4EF7 4F09 4F5A 4F30 4F5B 4F5D 4F57 4F47 4F76 4F88 4F8F 4F98 4F7B 4F69 4F70 4F91 4F6F 4F86 4F96 5118 4FD4 4FDF 4FCE 4FD8 4FDB 4FD1 4FDA 4FD0 4FE4 4FE5 501A 5028 5014 502A 5025 5005 4F1C 4FF6 5021 5029 502C 4FFE 4FEF 5011 5006 5043 5047 6703 5055 5050 5048 505A 5056 506C 5078 5080 509A 5085 50B4 50B2 50C9 50CA 50B3 50C2 50D6 50DE 50E5 50ED 50E3 50EE 50F9 50F5 5109 5101 5102 5116 5115 5114 511A 5121 513A 5137 513C 513B 513F 5140 5152 514C 5154 5162 7AF8 5169 516A 516E 5180 5182 56D8 518C 5189 518F 5191 5193 5195 5196 51A4 51A6 51A2 51A9 51AA 51AB 51B3 51B1 51B2 51B0 51B5 51BD 51C5 51C9 51DB 51E0 8655 51E9 51ED 51F0 51F5 51FE 5204 520B 5214 520E 5227 522A 522E 5233 5239 524F 5244 524B 524C 525E 5254 526A 5274 5269 5273 527F 527D 528D 5294 5292 5271 5288 5291 8FA8 8FA7 52AC 52AD 52BC 52B5 52C1 52CD 52D7 52DE 52E3 52E6 98ED 52E0 52F3 52F5 52F8 52F9 5306 5308 7538 530D 5310 530F 5315 531A 5323 532F 5331 5333 5338 5340 5346 5345 4E17 5349 534D 51D6 535E 5369 536E 5918 537B 5377 5382 5396 53A0 53A6 53A5 53AE 53B0 53B6 53C3 7C12 96D9 53DF 66FC 71EE 53EE 53E8 53ED 53FA 5401 543D 5440 542C 542D 543C 542E 5436 5429 541D 544E 548F 5475 548E 545F 5471 5477 5470 5492 547B 5480 5476 5484 5490 5486 54C7 54A2 54B8 54A5 54AC 54C4 54C8 54A8 54AB 54C2 54A4 54BE 54BC 54D8 54E5 54E6 550F 5514 54FD 54EE 54ED 54FA 54E2 5539 5540 5563 554C 552E 555C 5545 5556 5557 5538 5533 555D 5599 5580 54AF 558A 559F 557B 557E 5598 559E 55AE 557C 5583 55A9 5587 55A8 55DA 55C5 55DF 55C4 55DC 55E4 55D4 5614 55F7 5616 55FE 55FD 561B 55F9 564E 5650 71DF 5634 5636 5632 5638 566B 5664 562F 566C 566A 5686 5680 568A 56A0 5694 568F 56A5 56AE 56B6 56B4 56C2 56BC 56C1 56C3 56C0 56C8 56CE 56D1 56D3 56D7 56EE 56F9 5700 56FF 5704 5709 5708 570B 570D 5713 5718 5716 55C7 571C 5726 5737 5738 574E 573B 5740 574F 5769 57C0 5788 5761 577F 5789 5793 57A0 57B3 57A4 57AA 57B0 57C3 57C6 57D4 57D2 57D3 580A 57D6 57E3 580B 5819 581D 5872 5821 5862 584B 5870 6BC0 5852 583D 5879 5885 58B9 589F 58AB 58BA 58DE 58BB 58B8 58AE 58C5 58D3 58D1 58D7 58D9 58D8 58E5 58DC 58E4 58DF 58EF 58FA 58F9 58FB 58FC 58FD 5902 590A 5910 591B 68A6 5925 592C 592D 5932 5938 593E 7AD2 5955 5950 594E 595A 5958 5962 5960 5967 596C 5969 5978 5981 599D 4F5E 4FAB 59A3 59B2 59C6 59E8 59DC 598D 59D9 59DA 5A25 5A1F 5A11 5A1C 5A09 5A1A 5A40 5A6C 5A49 5A35 5A36 5A62 5A6A 5A9A 5ABC 5ABE 5ACB 5AC2 5ABD 5AE3 5AD7 5AE6 5AE9 5AD6 5AFA 5AFB 5B0C 5B0B 5B16 5B32 5AD0 5B2A 5B36 5B3E 5B43 5B45 5B40 5B51 5B55 5B5A 5B5B 5B65 5B69 5B70 5B73 5B75 5B78 6588 5B7A 5B80 5B83 5BA6 5BB8 5BC3 5BC7 5BC9 5BD4 5BD0 5BE4 5BE6 5BE2 5BDE 5BE5 5BEB 5BF0 5BF6 5BF3 5C05 5C07 5C08 5C0D 5C13 5C20 5C22 5C28 5C38 5C39 5C41 5C46 5C4E 5C53 5C50 5C4F 5B71 5C6C 5C6E 4E62 5C76 5C79 5C8C 5C91 5C94 599B 5CAB 5CBB 5CB6 5CBC 5CB7 5CC5 5CBE 5CC7 5CD9 5CE9 5CFD 5CFA 5CED 5D8C 5CEA 5D0B 5D15 5D17 5D5C 5D1F 5D1B 5D11 5D14 5D22 5D1A 5D19 5D18 5D4C 5D52 5D4E 5D4B 5D6C 5D73 5D76 5D87 5D84 5D82 5DA2 5D9D 5DAC 5DAE 5DBD 5D90 5DB7 5DBC 5DC9 5DCD 5DD3 5DD2 5DD6 5DDB 5DEB 5DF2 5DF5 5E0B 5E1A 5E19 5E11 5E1B 5E36 5E37 5E44 5E43 5E40 5E4E 5E57 5E54 5E5F 5E62 5E64 5E47 5E75 5E76 5E7A 9EBC 5E7F 5EA0 5EC1 5EC2 5EC8 5ED0 5ECF 5ED6 5EE3 5EDD 5EDA 5EDB 5EE2 5EE1 5EE8 5EE9 5EEC 5EF1 5EF3 5EF0 5EF4 5EF8 5EFE 5F03 5F09 5F5D 5F5C 5F0B 5F11 5F16 5F29 5F2D 5F38 5F41 5F48 5F4C 5F4E 5F2F 5F51 5F56 5F57 5F59 5F61 5F6D 5F73 5F77 5F83 5F82 5F7F 5F8A 5F88 5F91 5F87 5F9E 5F99 5F98 5FA0 5FA8 5FAD 5FBC 5FD6 5FFB 5FE4 5FF8 5FF1 5FDD 60B3 5FFF 6021 6060 6019 6010 6029 600E 6031 601B 6015 602B 6026 600F 603A 605A 6041 606A 6077 605F 604A 6046 604D 6063 6043 6064 6042 606C 606B 6059 6081 608D 60E7 6083 609A 6084 609B 6096 6097 6092 60A7 608B 60E1 60B8 60E0 60D3 60B4 5FF0 60BD 60C6 60B5 60D8 614D 6115 6106 60F6 60F7 6100 60F4 60FA 6103 6121 60FB 60F1 610D 610E 6147 613E 6128 6127 614A 613F 613C 612C 6134 613D 6142 6144 6173 6177 6158 6159 615A 616B 6174 616F 6165 6171 615F 615D 6153 6175 6199 6196 6187 61AC 6194 619A 618A 6191 61AB 61AE 61CC 61CA 61C9 61F7 61C8 61C3 61C6 61BA 61CB 7F79 61CD 61E6 61E3 61F6 61FA 61F4 61FF 61FD 61FC 61FE 6200 6208 6209 620D 620C 6214 621B 621E 6221 622A 622E 6230 6232 6233 6241 624E 625E 6263 625B 6260 6268 627C 6282 6289 627E 6292 6293 6296 62D4 6283 6294 62D7 62D1 62BB 62CF 62FF 62C6 64D4 62C8 62DC 62CC 62CA 62C2 62C7 629B 62C9 630C 62EE 62F1 6327 6302 6308 62EF 62F5 6350 633E 634D 641C 634F 6396 638E 6380 63AB 6376 63A3 638F 6389 639F 63B5 636B 6369 63BE 63E9 63C0 63C6 63E3 63C9 63D2 63F6 63C4 6416 6434 6406 6413 6426 6436 651D 6417 6428 640F 6467 646F 6476 644E 652A 6495 6493 64A5 64A9 6488 64BC 64DA 64D2 64C5 64C7 64BB 64D8 64C2 64F1 64E7 8209 64E0 64E1 62AC 64E3 64EF 652C 64F6 64F4 64F2 64FA 6500 64FD 6518 651C 6505 6524 6523 652B 6534 6535 6537 6536 6538 754B 6548 6556 6555 654D 6558 655E 655D 6572 6578 6582 6583 8B8A 659B 659F 65AB 65B7 65C3 65C6 65C1 65C4 65CC 65D2 65DB 65D9 65E0 65E1 65F1 6772 660A 6603 65FB 6773 6635 6636 6634 661C 664F 6644 6649 6641 665E 665D 6664 6667 6668 665F 6662 6670 6683 6688 668E 6689 6684 6698 669D 66C1 66B9 66C9 66BE 66BC 66C4 66B8 66D6 66DA 66E0 663F 66E6 66E9 66F0 66F5 66F7 670F 6716 671E 6726 6727 9738 672E 673F 6736 6741 6738 6737 6746 675E 6760 6759 6763 6764 6789 6770 67A9 677C 676A 678C 678B 67A6 67A1 6785 67B7 67EF 67B4 67EC 67B3 67E9 67B8 67E4 67DE 67DD 67E2 67EE 67B9 67CE 67C6 67E7 6A9C 681E 6846 6829 6840 684D 6832 684E 68B3 682B 6859 6863 6877 687F 689F 688F 68AD 6894 689D 689B 6883 6AAE 68B9 6874 68B5 68A0 68BA 690F 688D 687E 6901 68CA 6908 68D8 6922 6926 68E1 690C 68CD 68D4 68E7 68D5 6936 6912 6904 68D7 68E3 6925 68F9 68E0 68EF 6928 692A 691A 6923 6921 68C6 6979 6977 695C 6978 696B 6954 697E 696E 6939 6974 693D 6959 6930 6961 695E 695D 6981 696A 69B2 69AE 69D0 69BF 69C1 69D3 69BE 69CE 5BE8 69CA 69DD 69BB 69C3 69A7 6A2E 6991 69A0 699C 6995 69B4 69DE 69E8 6A02 6A1B 69FF 6B0A 69F9 69F2 69E7 6A05 69B1 6A1E 69ED 6A14 69EB 6A0A 6A12 6AC1 6A23 6A13 6A44 6A0C 6A72 6A36 6A78 6A47 6A62 6A59 6A66 6A48 6A38 6A22 6A90 6A8D 6AA0 6A84 6AA2 6AA3 6A97 8617 6ABB 6AC3 6AC2 6AB8 6AB3 6AAC 6ADE 6AD1 6ADF 6AAA 6ADA 6AEA 6AFB 6B05 8616 6AFA 6B12 6B16 9B31 6B1F 6B38 6B37 76DC 6B39 98EE 6B47 6B43 6B49 6B50 6B59 6B54 6B5B 6B5F 6B61 6B78 6B79 6B7F 6B80 6B84 6B83 6B8D 6B98 6B95 6B9E 6BA4 6BAA 6BAB 6BAF 6BB2 6BB1 6BB3 6BB7 6BBC 6BC6 6BCB 6BD3 6BDF 6BEC 6BEB 6BF3 6BEF 9EBE 6C08 6C13 6C14 6C1B 6C24 6C23 6C5E 6C55 6C62 6C6A 6C82 6C8D 6C9A 6C81 6C9B 6C7E 6C68 6C73 6C92 6C90 6CC4 6CF1 6CD3 6CBD 6CD7 6CC5 6CDD 6CAE 6CB1 6CBE 6CBA 6CDB 6CEF 6CD9 6CEA 6D1F 884D 6D36 6D2B 6D3D 6D38 6D19 6D35 6D33 6D12 6D0C 6D63 6D93 6D64 6D5A 6D79 6D59 6D8E 6D95 6FE4 6D85 6DF9 6E15 6E0A 6DB5 6DC7 6DE6 6DB8 6DC6 6DEC 6DDE 6DCC 6DE8 6DD2 6DC5 6DFA 6DD9 6DE4 6DD5 6DEA 6DEE 6E2D 6E6E 6E2E 6E19 6E72 6E5F 6E3E 6E23 6E6B 6E2B 6E76 6E4D 6E1F 6E43 6E3A 6E4E 6E24 6EFF 6E1D 6E38 6E82 6EAA 6E98 6EC9 6EB7 6ED3 6EBD 6EAF 6EC4 6EB2 6ED4 6ED5 6E8F 6EA5 6EC2 6E9F 6F41 6F11 704C 6EEC 6EF8 6EFE 6F3F 6EF2 6F31 6EEF 6F32 6ECC 6F3E 6F13 6EF7 6F86 6F7A 6F78 6F81 6F80 6F6F 6F5B 6FF3 6F6D 6F82 6F7C 6F58 6F8E 6F91 6FC2 6F66 6FB3 6FA3 6FA1 6FA4 6FB9 6FC6 6FAA 6FDF 6FD5 6FEC 6FD4 6FD8 6FF1 6FEE 6FDB 7009 700B 6FFA 7011 7001 700F 6FFE 701B 701A 6F74 701D 7018 701F 7030 703E 7032 7051 7063 7099 7092 70AF 70F1 70AC 70B8 70B3 70AE 70DF 70CB 70DD 70D9 7109 70FD 711C 7119 7165 7155 7188 7166 7162 714C 7156 716C 718F 71FB 7184 7195 71A8 71AC 71D7 71B9 71BE 71D2 71C9 71D4 71CE 71E0 71EC 71E7 71F5 71FC 71F9 71FF 720D 7210 721B 7228 722D 722C 7230 7232 723B 723C 723F 7240 7246 724B 7258 7274 727E 7282 7281 7287 7292 7296 72A2 72A7 72B9 72B2 72C3 72C6 72C4 72CE 72D2 72E2 72E0 72E1 72F9 72F7 500F 7317 730A 731C 7316 731D 7334 732F 7329 7325 733E 734E 734F 9ED8 7357 736A 7368 7370 7378 7375 737B 737A 73C8 73B3 73CE 73BB 73C0 73E5 73EE 73DE 74A2 7405 746F 7425 73F8 7432 743A 7455 743F 745F 7459 7441 745C 7469 7470 7463 746A 7476 747E 748B 749E 74A7 74CA 74CF 74D4 73F1 74E0 74E3 74E7 74E9 74EE 74F2 74F0 74F1 74F8 74F7 7504 7503 7505 750C 750E 750D 7515 7513 751E 7526 752C 753C 7544 754D 754A 7549 755B 7546 755A 7569 7564 7567 756B 756D 7578 7576 7586 7587 7574 758A 7589 7582 7594 759A 759D 75A5 75A3 75C2 75B3 75C3 75B5 75BD 75B8 75BC 75B1 75CD 75CA 75D2 75D9 75E3 75DE 75FE 75FF 75FC 7601 75F0 75FA 75F2 75F3 760B 760D 7609 761F 7627 7620 7621 7622 7624 7634 7630 763B 7647 7648 7646 765C 7658 7661 7662 7668 7669 766A 7667 766C 7670 7672 7676 7678 767C 7680 7683 7688 768B 768E 7696 7693 7699 769A 76B0 76B4 76B8 76B9 76BA 76C2 76CD 76D6 76D2 76DE 76E1 76E5 76E7 76EA 862F 76FB 7708 7707 7704 7729 7724 771E 7725 7726 771B 7737 7738 7747 775A 7768 776B 775B 7765 777F 777E 7779 778E 778B 7791 77A0 779E 77B0 77B6 77B9 77BF 77BC 77BD 77BB 77C7 77CD 77D7 77DA 77DC 77E3 77EE 77FC 780C 7812 7926 7820 792A 7845 788E 7874 7886 787C 789A 788C 78A3 78B5 78AA 78AF 78D1 78C6 78CB 78D4 78BE 78BC 78C5 78CA 78EC 78E7 78DA 78FD 78F4 7907 7912 7911 7919 792C 792B 7940 7960 7957 795F 795A 7955 7953 797A 797F 798A 799D 79A7 9F4B 79AA 79AE 79B3 79B9 79BA 79C9 79D5 79E7 79EC 79E1 79E3 7A08 7A0D 7A18 7A19 7A20 7A1F 7980 7A31 7A3B 7A3E 7A37 7A43 7A57 7A49 7A61 7A62 7A69 9F9D 7A70 7A79 7A7D 7A88 7A97 7A95 7A98 7A96 7AA9 7AC8 7AB0 7AB6 7AC5 7AC4 7ABF 9083 7AC7 7ACA 7ACD 7ACF 7AD5 7AD3 7AD9 7ADA 7ADD 7AE1 7AE2 7AE6 7AED 7AF0 7B02 7B0F 7B0A 7B06 7B33 7B18 7B19 7B1E 7B35 7B28 7B36 7B50 7B7A 7B04 7B4D 7B0B 7B4C 7B45 7B75 7B65 7B74 7B67 7B70 7B71 7B6C 7B6E 7B9D 7B98 7B9F 7B8D 7B9C 7B9A 7B8B 7B92 7B8F 7B5D 7B99 7BCB 7BC1 7BCC 7BCF 7BB4 7BC6 7BDD 7BE9 7C11 7C14 7BE6 7BE5 7C60 7C00 7C07 7C13 7BF3 7BF7 7C17 7C0D 7BF6 7C23 7C27 7C2A 7C1F 7C37 7C2B 7C3D 7C4C 7C43 7C54 7C4F 7C40 7C50 7C58 7C5F 7C64 7C56 7C65 7C6C 7C75 7C83 7C90 7CA4 7CAD 7CA2 7CAB 7CA1 7CA8 7CB3 7CB2 7CB1 7CAE 7CB9 7CBD 7CC0 7CC5 7CC2 7CD8 7CD2 7CDC 7CE2 9B3B 7CEF 7CF2 7CF4 7CF6 7CFA 7D06 7D02 7D1C 7D15 7D0A 7D45 7D4B 7D2E 7D32 7D3F 7D35 7D46 7D73 7D56 7D4E 7D72 7D68 7D6E 7D4F 7D63 7D93 7D89 7D5B 7D8F 7D7D 7D9B 7DBA 7DAE 7DA3 7DB5 7DC7 7DBD 7DAB 7E3D 7DA2 7DAF 7DDC 7DB8 7D9F 7DB0 7DD8 7DDD 7DE4 7DDE 7DFB 7DF2 7DE1 7E05 7E0A 7E23 7E21 7E12 7E31 7E1F 7E09 7E0B 7E22 7E46 7E66 7E3B 7E35 7E39 7E43 7E37 7E32 7E3A 7E67 7E5D 7E56 7E5E 7E59 7E5A 7E79 7E6A 7E69 7E7C 7E7B 7E83 7DD5 7E7D 8FAE 7E7F 7E88 7E89 7E8C 7E92 7E90 7E93 7E94 7E96 7E8E 7E9B 7E9C 7F38 7F3A 7F45 7F4C 7F4D 7F4E 7F50 7F51 7F55 7F54 7F58 7F5F 7F60 7F68 7F69 7F67 7F78 7F82 7F86 7F83 7F88 7F87 7F8C 7F94 7F9E 7F9D 7F9A 7FA3 7FAF 7FB2 7FB9 7FAE 7FB6 7FB8 8B71 7FC5 7FC6 7FCA 7FD5 7FD4 7FE1 7FE6 7FE9 7FF3 7FF9 98DC 8006 8004 800B 8012 8018 8019 801C 8021 8028 803F 803B 804A 8046 8052 8058 805A 805F 8062 8068 8073 8072 8070 8076 8079 807D 807F 8084 8086 8085 809B 8093 809A 80AD 5190 80AC 80DB 80E5 80D9 80DD 80C4 80DA 80D6 8109 80EF 80F1 811B 8129 8123 812F 814B 968B 8146 813E 8153 8151 80FC 8171 816E 8165 8166 8174 8183 8188 818A 8180 8182 81A0 8195 81A4 81A3 815F 8193 81A9 81B0 81B5 81BE 81B8 81BD 81C0 81C2 81BA 81C9 81CD 81D1 81D9 81D8 81C8 81DA 81DF 81E0 81E7 81FA 81FB 81FE 8201 8202 8205 8207 820A 820D 8210 8216 8229 822B 8238 8233 8240 8259 8258 825D 825A 825F 8264 8262 8268 826A 826B 822E 8271 8277 8278 827E 828D 8292 82AB 829F 82BB 82AC 82E1 82E3 82DF 82D2 82F4 82F3 82FA 8393 8303 82FB 82F9 82DE 8306 82DC 8309 82D9 8335 8334 8316 8332 8331 8340 8339 8350 8345 832F 832B 8317 8318 8385 839A 83AA 839F 83A2 8396 8323 838E 8387 838A 837C 83B5 8373 8375 83A0 8389 83A8 83F4 8413 83EB 83CE 83FD 8403 83D8 840B 83C1 83F7 8407 83E0 83F2 840D 8422 8420 83BD 8438 8506 83FB 846D 842A 843C 855A 8484 8477 846B 84AD 846E 8482 8469 8446 842C 846F 8479 8435 84CA 8462 84B9 84BF 849F 84D9 84CD 84BB 84DA 84D0 84C1 84C6 84D6 84A1 8521 84FF 84F4 8517 8518 852C 851F 8515 8514 84FC 8540 8563 8558 8548 8541 8602 854B 8555 8580 85A4 8588 8591 858A 85A8 856D 8594 859B 85EA 8587 859C 8577 857E 8590 85C9 85BA 85CF 85B9 85D0 85D5 85DD 85E5 85DC 85F9 860A 8613 860B 85FE 85FA 8606 8622 861A 8630 863F 864D 4E55 8654 865F 8667 8671 8693 86A3 86A9 86AA 868B 868C 86B6 86AF 86C4 86C6 86B0 86C9 8823 86AB 86D4 86DE 86E9 86EC 86DF 86DB 86EF 8712 8706 8708 8700 8703 86FB 8711 8709 870D 86F9 870A 8734 873F 8737 873B 8725 8729 871A 8760 875F 8778 874C 874E 8774 8757 8768 876E 8759 8753 8763 876A 8805 87A2 879F 8782 87AF 87CB 87BD 87C0 87D0 96D6 87AB 87C4 87B3 87C7 87C6 87BB 87EF 87F2 87E0 880F 880D 87FE 87F6 87F7 880E 87D2 8811 8816 8815 8822 8821 8831 8836 8839 8827 883B 8844 8842 8852 8859 885E 8862 886B 8881 887E 889E 8875 887D 88B5 8872 8882 8897 8892 88AE 8899 88A2 888D 88A4 88B0 88BF 88B1 88C3 88C4 88D4 88D8 88D9 88DD 88F9 8902 88FC 88F4 88E8 88F2 8904 890C 890A 8913 8943 891E 8925 892A 892B 8941 8944 893B 8936 8938 894C 891D 8960 895E 8966 8964 896D 896A 896F 8974 8977 897E 8983 8988 898A 8993 8998 89A1 89A9 89A6 89AC 89AF 89B2 89BA 89BD 89BF 89C0 89DA 89DC 89DD 89E7 89F4 89F8 8A03 8A16 8A10 8A0C 8A1B 8A1D 8A25 8A36 8A41 8A5B 8A52 8A46 8A48 8A7C 8A6D 8A6C 8A62 8A85 8A82 8A84 8AA8 8AA1 8A91 8AA5 8AA6 8A9A 8AA3 8AC4 8ACD 8AC2 8ADA 8AEB 8AF3 8AE7 8AE4 8AF1 8B14 8AE0 8AE2 8AF7 8ADE 8ADB 8B0C 8B07 8B1A 8AE1 8B16 8B10 8B17 8B20 8B33 97AB 8B26 8B2B 8B3E 8B28 8B41 8B4C 8B4F 8B4E 8B49 8B56 8B5B 8B5A 8B6B 8B5F 8B6C 8B6F 8B74 8B7D 8B80 8B8C 8B8E 8B92 8B93 8B96 8B99 8B9A 8C3A 8C41 8C3F 8C48 8C4C 8C4E 8C50 8C55 8C62 8C6C 8C78 8C7A 8C82 8C89 8C85 8C8A 8C8D 8C8E 8C94 8C7C 8C98 621D 8CAD 8CAA 8CBD 8CB2 8CB3 8CAE 8CB6 8CC8 8CC1 8CE4 8CE3 8CDA 8CFD 8CFA 8CFB 8D04 8D05 8D0A 8D07 8D0F 8D0D 8D10 9F4E 8D13 8CCD 8D14 8D16 8D67 8D6D 8D71 8D73 8D81 8D99 8DC2 8DBE 8DBA 8DCF 8DDA 8DD6 8DCC 8DDB 8DCB 8DEA 8DEB 8DDF 8DE3 8DFC 8E08 8E09 8DFF 8E1D 8E1E 8E10 8E1F 8E42 8E35 8E30 8E34 8E4A 8E47 8E49 8E4C 8E50 8E48 8E59 8E64 8E60 8E2A 8E63 8E55 8E76 8E72 8E7C 8E81 8E87 8E85 8E84 8E8B 8E8A 8E93 8E91 8E94 8E99 8EAA 8EA1 8EAC 8EB0 8EC6 8EB1 8EBE 8EC5 8EC8 8ECB 8EDB 8EE3 8EFC 8EFB 8EEB 8EFE 8F0A 8F05 8F15 8F12 8F19 8F13 8F1C 8F1F 8F1B 8F0C 8F26 8F33 8F3B 8F39 8F45 8F42 8F3E 8F4C 8F49 8F46 8F4E 8F57 8F5C 8F62 8F63 8F64 8F9C 8F9F 8FA3 8FAD 8FAF 8FB7 8FDA 8FE5 8FE2 8FEA 8FEF 9087 8FF4 9005 8FF9 8FFA 9011 9015 9021 900D 901E 9016 900B 9027 9036 9035 9039 8FF8 904F 9050 9051 9052 900E 9049 903E 9056 9058 905E 9068 906F 9076 96A8 9072 9082 907D 9081 9080 908A 9089 908F 90A8 90AF 90B1 90B5 90E2 90E4 6248 90DB 9102 9112 9119 9132 9130 914A 9156 9158 9163 9165 9169 9173 9172 918B 9189 9182 91A2 91AB 91AF 91AA 91B5 91B4 91BA 91C0 91C1 91C9 91CB 91D0 91D6 91DF 91E1 91DB 91FC 91F5 91F6 921E 91FF 9214 922C 9215 9211 925E 9257 9245 9249 9264 9248 9295 923F 924B 9250 929C 9296 9293 929B 925A 92CF 92B9 92B7 92E9 930F 92FA 9344 932E 9319 9322 931A 9323 933A 9335 933B 935C 9360 937C 936E 9356 93B0 93AC 93AD 9394 93B9 93D6 93D7 93E8 93E5 93D8 93C3 93DD 93D0 93C8 93E4 941A 9414 9413 9403 9407 9410 9436 942B 9435 9421 943A 9441 9452 9444 945B 9460 9462 945E 946A 9229 9470 9475 9477 947D 945A 947C 947E 9481 947F 9582 9587 958A 9594 9596 9598 9599 95A0 95A8 95A7 95AD 95BC 95BB 95B9 95BE 95CA 6FF6 95C3 95CD 95CC 95D5 95D4 95D6 95DC 95E1 95E5 95E2 9621 9628 962E 962F 9642 964C 964F 964B 9677 965C 965E 965D 965F 9666 9672 966C 968D 9698 9695 9697 96AA 96A7 96B1 96B2 96B0 96B4 96B6 96B8 96B9 96CE 96CB 96C9 96CD 894D 96DC 970D 96D5 96F9 9704 9706 9708 9713 970E 9711 970F 9716 9719 9724 972A 9730 9739 973D 973E 9744 9746 9748 9742 9749 975C 9760 9764 9766 9768 52D2 976B 9771 9779 9785 977C 9781 977A 9786 978B 978F 9790 979C 97A8 97A6 97A3 97B3 97B4 97C3 97C6 97C8 97CB 97DC 97ED 9F4F 97F2 7ADF 97F6 97F5 980F 980C 9838 9824 9821 9837 983D 9846 984F 984B 986B 986F 9870 9871 9874 9873 98AA 98AF 98B1 98B6 98C4 98C3 98C6 98E9 98EB 9903 9909 9912 9914 9918 9921 991D 991E 9924 9920 992C 992E 993D 993E 9942 9949 9945 9950 994B 9951 9952 994C 9955 9997 9998 99A5 99AD 99AE 99BC 99DF 99DB 99DD 99D8 99D1 99ED 99EE 99F1 99F2 99FB 99F8 9A01 9A0F 9A05 99E2 9A19 9A2B 9A37 9A45 9A42 9A40 9A43 9A3E 9A55 9A4D 9A5B 9A57 9A5F 9A62 9A65 9A64 9A69 9A6B 9A6A 9AAD 9AB0 9ABC 9AC0 9ACF 9AD1 9AD3 9AD4 9ADE 9ADF 9AE2 9AE3 9AE6 9AEF 9AEB 9AEE 9AF4 9AF1 9AF7 9AFB 9B06 9B18 9B1A 9B1F 9B22 9B23 9B25 9B27 9B28 9B29 9B2A 9B2E 9B2F 9B32 9B44 9B43 9B4F 9B4D 9B4E 9B51 9B58 9B74 9B93 9B83 9B91 9B96 9B97 9B9F 9BA0 9BA8 9BB4 9BC0 9BCA 9BB9 9BC6 9BCF 9BD1 9BD2 9BE3 9BE2 9BE4 9BD4 9BE1 9C3A 9BF2 9BF1 9BF0 9C15 9C14 9C09 9C13 9C0C 9C06 9C08 9C12 9C0A 9C04 9C2E 9C1B 9C25 9C24 9C21 9C30 9C47 9C32 9C46 9C3E 9C5A 9C60 9C67 9C76 9C78 9CE7 9CEC 9CF0 9D09 9D08 9CEB 9D03 9D06 9D2A 9D26 9DAF 9D23 9D1F 9D44 9D15 9D12 9D41 9D3F 9D3E 9D46 9D48 9D5D 9D5E 9D64 9D51 9D50 9D59 9D72 9D89 9D87 9DAB 9D6F 9D7A 9D9A 9DA4 9DA9 9DB2 9DC4 9DC1 9DBB 9DB8 9DBA 9DC6 9DCF 9DC2 9DD9 9DD3 9DF8 9DE6 9DED 9DEF 9DFD 9E1A 9E1B 9E1E 9E75 9E79 9E7D 9E81 9E88 9E8B 9E8C 9E92 9E95 9E91 9E9D 9EA5 9EA9 9EB8 9EAA 9EAD 9761 9ECC 9ECE 9ECF 9ED0 9ED4 9EDC 9EDE 9EDD 9EE0 9EE5 9EE8 9EEF 9EF4 9EF6 9EF7 9EF9 9EFB 9EFC 9EFD 9F07 9F08 76B7 9F15 9F21 9F2C 9F3E 9F4A 9F52 9F54 9F63 9F5F 9F60 9F61 9F66 9F67 9F6C 9F6A 9F77 9F72 9F76 9F95 9F9C 9FA0 582F 69C7 9059 7464 51DC 7199 __END__ =head1 NAME Unicode::Collate::CJK::JISX0208 - weighting JIS KANJI for Unicode::Collate =head1 SYNOPSIS use Unicode::Collate; use Unicode::Collate::CJK::JISX0208; my $collator = Unicode::Collate->new( overrideCJK => \&Unicode::Collate::CJK::JISX0208::weightJISX0208 ); =head1 DESCRIPTION C<Unicode::Collate::CJK::JISX0208> provides C<weightJISX0208()>, that is adequate for C<overrideCJK> of C<Unicode::Collate> and makes tailoring of 6355 kanji (CJK Unified Ideographs) in the JIS X 0208 order. =head1 SEE ALSO =over 4 =item L<Unicode::Collate> =item L<Unicode::Collate::Locale> =back =cut Unicode/Collate/CJK/Korean.pm 0000644 00000137046 15037233320 0011712 0 ustar 00 package Unicode::Collate::CJK::Korean; use 5.006; use strict; use warnings; our $VERSION = '1.25'; my %jamo2prim = ( '1100', 0x3BF5, '1101', 0x3BF6, '1102', 0x3BF7, '1103', 0x3BF8, '1105', 0x3BFA, '1106', 0x3BFB, '1107', 0x3BFC, '1109', 0x3BFE, '110A', 0x3BFF, '110B', 0x3C00, '110C', 0x3C01, '110E', 0x3C03, '110F', 0x3C04, '1110', 0x3C05, '1111', 0x3C06, '1112', 0x3C07, '1161', 0x3C73, '1162', 0x3C74, '1163', 0x3C75, '1165', 0x3C77, '1166', 0x3C78, '1167', 0x3C79, '1168', 0x3C7A, '1169', 0x3C7B, '116A', 0x3C7C, '116B', 0x3C7D, '116C', 0x3C7E, '116D', 0x3C7F, '116E', 0x3C80, '116F', 0x3C81, '1170', 0x3C82, '1171', 0x3C83, '1172', 0x3C84, '1173', 0x3C85, '1174', 0x3C86, '1175', 0x3C87, '11A8', 0x3CD1, '11AB', 0x3CD4, '11AF', 0x3CD8, '11B7', 0x3CE0, '11B8', 0x3CE1, '11BC', 0x3CE5, '11BD', 0x3CE6, ); # for DUCET v9.0.0 my(%u2e, $prim, $wt); while (<DATA>) { last if /^__END__/; my @c = split; if (@c == 1 && $c[0] =~ /^[A-D]/) { # hangul $c[0] =~ s/^.*://; $prim = [ map $jamo2prim{$_}, split /-/, $c[0] ]; $wt = 0x20; } else { # ideographs for my $c (@c) { next if !$c; $wt++; $u2e{hex($c)} = [ $wt, @$prim ]; } } } sub weightKorean { my $u = shift; return undef if !exists $u2e{$u}; my @a = @{ $u2e{$u} }; my $s = shift @a; my $p = shift @a; return([ $p, $s, 0x2, $u ], @a); } 1; # DATA format # hangul syllable:jamo-jamo(-jamo) # equiv. ideographs __DATA__ AC00:1100-1161 4F3D 4F73 5047 50F9 52A0 53EF 5475 54E5 5609 5AC1 5BB6 6687 67B6 67B7 67EF 6B4C 73C2 75C2 7A3C 82DB 8304 8857 8888 8A36 8CC8 8DCF 8EFB 8FE6 99D5 4EEE 50A2 5496 54FF 5777 5B8A 659D 698E 6A9F 73C8 7B33 801E 8238 846D 8B0C AC01:1100-1161-11A8 523B 5374 5404 606A 6164 6BBC 73CF 811A 89BA 89D2 95A3 537B 54AF 57C6 6409 64F1 6877 AC04:1100-1161-11AB 4F83 520A 58BE 5978 59E6 5E72 5E79 61C7 63C0 6746 67EC 687F 6F97 764E 770B 78F5 7A08 7AFF 7C21 809D 826E 8271 8AEB 9593 5058 6173 681E 69A6 7395 79C6 831B 884E 8D76 8FC0 9F66 AC08:1100-1161-11AF 4E6B 559D 66F7 6E34 78A3 7AED 845B 8910 874E 97A8 5676 696C 79F8 7FAF 880D 9DA1 AC10:1100-1161-11B7 52D8 574E 582A 5D4C 611F 61BE 6221 6562 67D1 6A44 6E1B 7518 75B3 76E3 77B0 7D3A 90AF 9451 9452 9F95 5769 57F3 5D41 5F07 61A8 64BC 6B3F 6B5B 6CD4 6DE6 6F89 77D9 8F57 9163 9E7B AC11:1100-1161-11B8 5323 5CAC 7532 80DB 9240 9598 97D0 AC15:1100-1161-11BC 525B 5808 59DC 5CA1 5D17 5EB7 5F3A 5F4A 6177 6C5F 757A 7586 7CE0 7D73 7DB1 7F8C 8154 8221 8591 8941 8B1B 92FC 964D 9C47 508B 50F5 58C3 5FFC 625B 6760 6A7F 6BAD 77FC 7A45 7E48 7F61 7F97 7FAB 8333 8C47 97C1 AC1C:1100-1162 4ECB 4EF7 500B 51F1 584F 6137 613E 6168 6539 69EA 6F11 75A5 7686 76D6 7B87 82A5 84CB 93A7 958B 5274 5303 63E9 69E9 73A0 78D5 95D3 AC1D:1100-1162-11A8 5580 5BA2 AC31:1100-1162-11BC 5751 7CB3 7FB9 785C 8CE1 93D7 AC39:1100-1163-11A8 91B5 AC70:1100-1165 5028 53BB 5C45 5DE8 62D2 636E 64DA 64E7 6E20 70AC 795B 8DDD 8E1E 907D 9245 92F8 547F 661B 79EC 7B65 7C67 80E0 8152 82E3 8392 8556 8627 88AA 88FE 99CF AC74:1100-1165-11AB 4E7E 4EF6 5065 5DFE 5EFA 6106 6957 8171 8654 8E47 9375 9A2B 63F5 728D 7777 8930 8B07 97AC AC78:1100-1165-11AF 4E5E 5091 6770 6840 4E6C 6705 69A4 AC80:1100-1165-11B7 5109 528D 5292 6AA2 77BC 9210 9ED4 64BF 82A1 AC81:1100-1165-11B8 52AB 602F 8FF2 5226 5227 AC8C:1100-1166 5048 61A9 63ED ACA9:1100-1167-11A8 64CA 683C 6A84 6FC0 8188 89A1 9694 630C 6BC4 95C3 9ABC 9B32 9D03 ACAC:1100-1167-11AB 5805 727D 72AC 7504 7D79 7E6D 80A9 898B 8B74 9063 9D51 6A2B 72F7 754E 7B67 7E33 7E7E 7F82 8832 9C39 ACB0:1100-1167-11AF 6289 6C7A 6F54 7D50 7F3A 8A23 73A6 89D6 95CB ACB8:1100-1167-11B7 517C 614A 7B9D 8B19 9257 938C 5094 55DB 5C92 62D1 6B49 7E11 84B9 9EDA 9F38 ACBD:1100-1167-11BC 4EAC 4FD3 501E 50BE 5106 52C1 52CD 537F 5770 5883 5E9A 5F91 6176 61AC 64CE 656C 666F 66BB 66F4 6897 6D87 7085 70F1 749F 74A5 74CA 75D9 786C 78EC 7ADF 7AF6 7D45 7D93 8015 803F 811B 8396 8B66 8F15 9015 93E1 9803 9838 9A5A 9BE8 518F 5244 54FD 60F8 61BC 6243 6AA0 7162 712D 71B2 754A 7AF8 7D86 9848 7F44 8927 8B26 99C9 9BC1 9EE5 ACC4:1100-1168 4FC2 5553 583A 5951 5B63 5C46 60B8 6212 6842 68B0 68E8 6EAA 754C 7678 78CE 7A3D 7CFB 7E6B 7E7C 8A08 8AA1 8C3F 968E 9DC4 5826 70D3 7608 798A 7B53 7DAE 7E18 7F7D 846A 858A 96DE 9AFB ACE0:1100-1169 53E4 53E9 544A 5471 56FA 59D1 5B64 5C3B 5EAB 62F7 6537 6545 6572 66A0 67AF 69C1 6CBD 75FC 7690 777E 7A3F 7F94 8003 80A1 818F 82E6 82FD 83F0 85C1 8831 88B4 8AA5 8F9C 932E 96C7 9867 9AD8 9F13 4F30 51C5 5233 5859 6772 6832 69C0 69F9 6ADC 726F 768B 76EC 77BD 7A01 7B8D 7BD9 7CD5 7F5F 7F96 7FFA 80EF 89DA 8A41 90DC 9164 9237 9760 9D23 9DF1 ACE1:1100-1169-11A8 54ED 659B 66F2 688F 7A40 8C37 9D60 56B3 69F2 7E20 89F3 8F42 ACE4:1100-1169-11AB 56F0 5764 5D11 6606 68B1 68CD 6EFE 7428 889E 9BE4 5803 5D10 6083 6346 7DC4 886E 88CD 890C 9315 95AB 9AE1 9D7E 9DA4 9F6B ACE8:1100-1169-11AF 6C68 9AA8 6430 69BE 77FB 9DBB ACF5:1100-1169-11BC 4F9B 516C 5171 529F 5B54 5DE5 6050 606D 62F1 63A7 653B 73D9 7A7A 86A3 8CA2 978F 5025 5D06 60BE 6831 69D3 7B9C 86E9 86EC 8D1B 8DEB 91ED 9F94 ACF6:1100-1169-11BD 4E32 ACFC:1100-116A 5BE1 6208 679C 74DC 79D1 83D3 8A87 8AB2 8DE8 904E 934B 9846 4F89 581D 5925 5938 64BE 7313 7A1E 7AA0 874C 88F9 8E1D 9299 9A0D ACFD:1100-116A-11A8 5ED3 69E8 85FF 90ED 6901 7668 8EA9 970D 97B9 AD00:1100-116A-11AB 51A0 5B98 5BEC 6163 68FA 6B3E 704C 742F 74D8 7BA1 7F50 83C5 89C0 8CAB 95DC 9928 4E31 6DAB 721F 76E5 797C 7ABE 7B66 7DB0 8F28 9327 9475 96DA 9874 9AD6 9E1B AD04:1100-116A-11AF 522E 605D 62EC 9002 4F78 681D 7B48 8052 9AFA 9D30 AD11:1100-116A-11BC 4F8A 5149 5321 58D9 5EE3 66E0 6D38 709A 72C2 73D6 7B50 80F1 945B 6047 6844 6846 720C 7377 78FA 7D56 7E8A 832A 8A86 8A91 AD18:1100-116B 5366 639B 7F6B 54BC 6302 7F63 8A7F AD34:1100-116C 4E56 5080 584A 58DE 602A 6127 62D0 69D0 9B41 5ABF 5EE5 6060 7470 749D 84AF 8958 AD35:1100-116C-11A8 9998 AD49:1100-116C-11BC 5B8F 7D18 80B1 8F5F 6D64 89E5 8A07 958E AD50:1100-116D 4EA4 50D1 54AC 55AC 5B0C 5DA0 5DE7 652A 654E 6821 6A4B 72E1 768E 77EF 7D5E 7FF9 81A0 854E 86DF 8F03 8F4E 90CA 9903 9A55 9BAB 4F7C 5604 5610 566D 5699 59E3 618D 649F 6648 669E 69B7 78FD 7A96 8DAB 8E7B 9278 9AB9 9D41 9F69 AD6C:1100-116E 4E18 4E45 4E5D 4EC7 4FF1 5177 52FE 5340 53E3 53E5 548E 5614 5775 57A2 5BC7 5D87 5ED0 61FC 62D8 6551 67B8 67E9 69CB 6B50 6BC6 6BEC 6C42 6E9D 7078 72D7 7396 7403 77BF 77E9 7A76 7D7F 8009 81FC 8205 820A 82DF 8862 8B33 8CFC 8EC0 9011 90B1 9264 92B6 99D2 9A45 9CE9 9DD7 9F9C 4F49 4F5D 4FC5 50B4 5193 52AC 5336 53B9 53F4 5778 59E4 5ABE 5AD7 5C68 5CA3 5F40 6235 6263 6344 6406 6473 662B 6998 6F1A 7486 750C 759A 75C0 766F 7A9B 7AB6 7BDD 7CD7 80CA 849F 86AF 88D8 89AF 8A6C 9058 91E6 97DD 97ED 97EE 98B6 99C8 9B2E 9DC7 9E1C AD6D:1100-116E-11A8 570B 5C40 83CA 97A0 97AB 9EB4 530A 63AC 8DFC 9EAF AD70:1100-116E-11AB 541B 7A98 7FA4 88D9 8ECD 90E1 6343 687E 76B8 AD74:1100-116E-11AF 5800 5C48 6398 7A9F 5014 5D1B 6DC8 8A58 AD81:1100-116E-11BC 5BAE 5F13 7A79 7AAE 828E 8EAC 8EB3 AD8C:1100-116F-11AB 5026 5238 52F8 5377 5708 62F3 6372 6B0A 6DC3 7737 52CC 60D3 68EC 7760 7DA3 8737 AD90:1100-116F-11AF 53A5 7357 8568 8E76 95D5 ADA4:1100-1170 673A 6AC3 6F70 8A6D 8ECC 994B 4F79 51E0 5282 5331 6192 6485 6A3B 6C3F 7C0B 7E62 8DEA 95E0 993D 9E82 ADC0:1100-1171 6677 6B78 8CB4 9B3C ADDC:1100-1172 53EB 572D 594E 63C6 69FB 73EA 7845 7ABA 7AC5 7CFE 8475 898F 8D73 9035 95A8 5232 5AE2 5B00 5DCB 668C 694F 6A1B 6F59 777D 7CFA 866C 866F 8DEC 90BD 95DA 980D 9997 ADE0:1100-1172-11AB 52FB 5747 7547 7B60 83CC 921E 56F7 9E8F ADE4:1100-1172-11AF 6A58 ADF9:1100-1173-11A8 514B 524B 5287 621F 68D8 6975 9699 4E9F 5C05 5C50 90C4 ADFC:1100-1173-11AB 50C5 52A4 52E4 61C3 65A4 6839 69FF 747E 7B4B 82B9 83EB 89B2 8B39 8FD1 9949 537A 53AA 5890 5DF9 5ED1 6F0C 89D4 8DDF 91FF 9773 AE08:1100-1173-11B7 4ECA 5997 64D2 6611 6A8E 7434 7981 79BD 82A9 887E 887F 895F 9326 552B 5664 5D94 7B12 9EC5 AE09:1100-1173-11B8 4F0B 53CA 6025 6271 6C72 7D1A 7D66 573E 5C8C 7680 790F 7B08 82A8 AE0D:1100-1173-11BC 4E98 5162 77DC 80AF 4E99 6B91 AE30:1100-1175 4F01 4F0E 5176 5180 55DC 5668 573B 57FA 57FC 5914 5947 5993 5BC4 5C90 5D0E 5DF1 5E7E 5FCC 6280 65D7 65E3 671E 671F 675E 68CB 68C4 6A5F 6B3A 6C23 6C7D 6C82 6DC7 7398 7426 742A 7482 74A3 7578 757F 7881 78EF 7941 7947 7948 797A 7B95 7D00 7DBA 7F88 8006 802D 808C 8A18 8B4F 8C48 8D77 9321 9324 98E2 9951 9A0E 9A0F 9A65 9E92 50DB 525E 588D 5C7A 5E8B 5F03 5FEE 612D 638E 6532 65C2 66A3 66C1 68CA 6B67 7081 7309 79A8 7DA5 7DA6 7F87 80B5 82AA 82B0 8604 8641 871D 87E3 8989 89AC 8DC2 9691 980E 9B10 9C2D 9ED6 AE34:1100-1175-11AB 7DCA AE38:1100-1175-11AF 4F76 5409 62EE 6854 59DE 86E3 AE40:1100-1175-11B7 91D1 B07D:1101-1175-11A8 55AB B098:1102-1161 513A 5A1C 61E6 62CF 62FF 90A3 6310 632A 689B 7CE5 7CEF B099:1102-1161-11A8 8AFE B09C:1102-1161-11AB 6696 7156 96E3 5044 7157 8D67 992A B0A0:1102-1161-11AF 634F 637A B0A8:1102-1161-11B7 5357 678F 6960 6E73 7537 5583 67DF B0A9:1102-1161-11B8 7D0D 8872 B0AD:1102-1161-11BC 56CA 5A18 66E9 B0B4:1102-1162 4E43 5167 5948 67F0 8010 5302 5976 5B2D 8FFA 9F10 B140:1102-1167 5973 B141:1102-1167-11A8 60C4 B144:1102-1167-11AB 5E74 649A 79CA 78BE B150:1102-1167-11B7 5FF5 606C 62C8 637B B155:1102-1167-11BC 5BE7 5BD7 4F5E 511C 5680 6FD8 B178:1102-1169 52AA 5974 5F29 6012 7459 99D1 5476 5B65 5CF1 7331 7B2F 81D1 B18D:1102-1169-11BC 6FC3 81BF 8FB2 5102 5665 7A60 91B2 B1CC:1102-116C 60F1 8166 9912 B1E8:1102-116D 5C3F 5ACB 5B32 6DD6 78E0 88CA 9403 B204:1102-116E 5542 8028 B208:1102-116E-11AB 5AE9 B20C:1102-116E-11AF 8A25 5436 80AD B274:1102-1172 677B 7D10 5FF8 9775 B275:1102-1172-11A8 8844 B2A5:1102-1173-11BC 80FD B2C8:1102-1175 5C3C 6CE5 5462 6029 67C5 7962 79B0 81A9 B2C9:1102-1175-11A8 533F 6EBA 6635 66B1 B2E4:1103-1161 591A 8336 7239 B2E8:1103-1161-11AB 4E39 4EB6 4F46 55AE 5718 58C7 5F56 65B7 65E6 6A80 6BB5 6E4D 77ED 7AEF 7C1E 7DDE 86CB 8892 9132 935B 6171 62C5 6934 6F19 7649 8011 80C6 8176 8711 B2EC:1103-1161-11AF 64BB 6FBE 737A 75B8 9054 59B2 601B 95E5 977C 97C3 B2F4:1103-1161-11B7 5556 574D 61BA 64D4 66C7 6DE1 6E5B 6F6D 6FB9 75F0 8043 81BD 8541 8983 8AC7 8B5A 931F 510B 5557 5649 58B0 58DC 6BEF 79AB 7F4E 859D 90EF 9EEE 9EF5 B2F5:1103-1161-11B8 6C93 7553 7B54 8E0F 905D B2F9:1103-1161-11BC 5510 5802 5858 5E62 6207 649E 68E0 7576 7CD6 87B3 9EE8 5018 513B 515A 642A 6A94 6E8F 746D 74AB 77A0 7911 87F7 8960 8B9C 93DC 943A 9933 9939 B300:1103-1162 4EE3 5788 576E 5927 5C0D 5CB1 5E36 5F85 6234 64E1 73B3 81FA 888B 8CB8 968A 9EDB 5113 61DF 65F2 6C4F 7893 9413 B301:1103-1162-11A8 5B85 B355:1103-1165-11A8 5FB7 60B3 B3C4:1103-1169 5012 5200 5230 5716 5835 5857 5C0E 5C60 5CF6 5D8B 5EA6 5F92 60BC 6311 6389 6417 6843 68F9 6AC2 6DD8 6E21 6ED4 6FE4 71FE 76DC 7779 79B1 7A3B 8404 89A9 8CED 8DF3 8E48 9003 9014 9053 90FD 934D 9676 97DC 53E8 58D4 5F22 5FC9 6146 638F 642F 64E3 6AAE 6D2E 6D82 7A0C 83DF 9174 95CD 9780 97B1 9955 9F17 B3C5:1103-1169-11A8 6BD2 7006 7258 72A2 7368 7763 79BF 7BE4 7E9B 8B80 6ADD 9EF7 B3C8:1103-1169-11AB 58A9 60C7 6566 65FD 66BE 6C8C 711E 71C9 8C5A 9813 5F34 6F61 8E89 B3CC:1103-1169-11AF 4E6D 7A81 5484 5817 B3D9:1103-1169-11BC 4EDD 51AC 51CD 52D5 540C 61A7 6771 6850 68DF 6D1E 6F7C 75BC 77B3 7AE5 80F4 8463 9285 4F97 50EE 54C3 578C 5CD2 5F64 6723 6A66 6DB7 825F 82F3 833C 856B 8740 932C 9B97 B450:1103-116E 515C 6597 675C 6793 75D8 7AC7 8373 8C46 9017 982D 6296 6581 809A 8130 86AA 8839 9661 B454:1103-116E-11AB 5C6F 81C0 829A 9041 906F 920D 7A80 8FCD B458:1103-116E-11AF 4E67 B4DD:1103-1173-11A8 5F97 B4F1:1103-1173-11BC 5D9D 6A59 71C8 767B 7B49 85E4 8B04 9127 9A30 51F3 58B1 6ED5 78F4 7C50 7E22 87A3 9419 B77C:1105-1161 5587 61F6 7669 7F85 863F 87BA 88F8 908F 502E 56C9 66EA 7630 7822 81DD 947C 9A3E 9A58 B77D:1105-1161-11A8 6D1B 70D9 73DE 7D61 843D 916A 99F1 55E0 7296 B780:1105-1161-11AB 4E82 5375 6B04 6B12 703E 721B 862D 9E1E 5B3E 5E71 6514 7053 8974 947E 95CC B784:1105-1161-11AF 524C 8FA3 57D2 8FA2 B78C:1105-1161-11B7 5D50 64E5 652C 6B16 6FEB 7C43 7E9C 85CD 8964 89BD 5A6A 60CF B78D:1105-1161-11B8 62C9 81D8 881F 945E B791:1105-1161-11BC 5ECA 6717 6D6A 72FC 7405 746F 8782 90DE 6994 7860 7A02 83A8 870B 95AC B798:1105-1162 4F86 5D0D 5FA0 840A 6DF6 9A0B B7AD:1105-1162-11BC 51B7 B7B5:1105-1163-11A8 63A0 7565 7567 B7C9:1105-1163-11BC 4EAE 5006 5169 51C9 6881 6A11 7CAE 7CB1 7CE7 826F 8AD2 8F1B 91CF 55A8 60A2 690B 6DBC 8E09 9B4E B824:1105-1167 4FB6 5137 52F5 5442 5EEC 616E 623E 65C5 6ADA 6FFE 792A 85DC 8823 95AD 9A62 9A6A 9E97 9ECE 5122 53B2 5533 68A0 7658 7CF2 8182 81DA 8821 908C 9462 B825:1105-1167-11A8 529B 66C6 6B77 701D 792B 8F62 9742 650A 6ADF 6AEA 7667 8F63 9148 B828:1105-1167-11AB 6190 6200 6523 6F23 7149 7489 7DF4 806F 84EE 8F26 9023 934A 5B4C 695D 6E45 81E0 93C8 9C0A 9C31 B82C:1105-1167-11AF 51BD 5217 52A3 6D0C 70C8 88C2 6312 6369 98B2 B834:1105-1167-11B7 5EC9 6582 6BAE 6FC2 7C3E 5969 7032 78CF B835:1105-1167-11B8 7375 8E90 9B23 B839:1105-1167-11BC 4EE4 4F36 56F9 5CBA 5DBA 601C 73B2 7B2D 7F9A 7FCE 8046 901E 9234 96F6 9748 9818 9F61 53E6 5464 59C8 5CAD 6624 6B1E 6CE0 79E2 82D3 86C9 8EE8 9D12 9E77 B840:1105-1168 4F8B 6FA7 79AE 91B4 96B7 96B8 9C67 B85C:1105-1169 52DE 6488 64C4 6AD3 6F5E 7018 7210 76E7 8001 8606 865C 8DEF 8F05 9732 9B6F 9DFA 9E75 58DA 6EF7 7388 7646 7A82 826A 826B 8F64 942A 946A 9871 9AD7 9C78 9E15 B85D:1105-1169-11A8 788C 797F 7DA0 83C9 9304 9E7F 9E93 5725 5F54 6DE5 6F09 7C0F 8F46 9A04 B860:1105-1169-11AB 8AD6 B871:1105-1169-11BC 58DF 5F04 6727 7027 74CF 7C60 807E 5131 650F 66E8 7931 8622 96B4 9F8E B8B0:1105-116C 5121 7028 7262 78CA 8CC2 8CDA 8CF4 96F7 6502 790C 7927 7C5F 7E87 7F4D 8012 857E 8A84 9179 9842 B8CC:1105-116D 4E86 50DA 5BEE 5ED6 6599 71CE 7642 77AD 804A 84FC 907C 9B27 5639 5AFD 64A9 66B8 6F66 7360 7E5A 818B 91AA 9410 98C2 98C9 B8E1:1105-116D-11BC 9F8D 9F92 B8E8:1105-116E 58D8 5A41 5C62 6A13 6DDA 6F0F 763B 7D2F 7E37 851E 8938 93E4 964B 50C2 560D 5D81 617A 802C 87BB 9ACF B958:1105-1172 5289 65D2 67F3 69B4 6D41 6E9C 700F 7409 7460 7559 7624 786B 8B2C 985E 6A4A 7E32 7E8D 905B 9DB9 B959:1105-1172-11A8 516D 622E 9678 52E0 B95C:1105-1172-11AB 4F96 502B 5D19 6DEA 7DB8 8F2A 6384 B960:1105-1172-11AF 5F8B 6144 6817 5D42 6EA7 B96D:1105-1172-11BC 9686 7643 7ABF B975:1105-1173-11A8 52D2 808B 6CD0 B984:1105-1173-11B7 51DC 51DB 5EE9 6F9F B989:1105-1173-11BC 51CC 695E 7A1C 7DBE 83F1 9675 5030 8506 B9AC:1105-1175 4FDA 5229 5398 540F 550E 5C65 60A7 674E 68A8 6D6C 7281 72F8 7406 7483 75E2 7C6C 7F79 7FB8 8389 88CF 88E1 91CC 91D0 96E2 9BC9 4FD0 527A 54E9 5AE0 6D96 6F13 79BB 8385 870A 87AD 8C8D 9090 9B51 9ED0 B9B0:1105-1175-11AB 541D 6F7E 71D0 7498 85FA 8EAA 96A3 9C57 9E9F 5D99 608B 735C 78F7 7CA6 7CBC 7E57 8E99 8F54 9130 93FB 9A4E B9BC:1105-1175-11B7 6797 6DCB 7433 81E8 9716 75F3 B9BD:1105-1175-11B8 782C 7ACB 7B20 7C92 5CA6 B9C8:1106-1161 6469 746A 75F2 78BC 78E8 99AC 9B54 9EBB 5298 5ABD 879E 87C7 9EBD 9EBF B9C9:1106-1161-11A8 5BDE 5E55 6F20 819C 83AB 9088 7799 93CC B9CC:1106-1161-11AB 4E07 534D 5A29 5DD2 5F4E 6162 633D 6669 66FC 6EFF 6F2B 7063 779E 842C 8513 883B 8F13 9945 9C3B 5881 5ADA 5E54 7E35 8B3E 8E63 93CB 93DD 9B18 B9D0:1106-1161-11AF 551C 62B9 672B 6CAB 8309 896A 977A 5E15 79E3 B9DD:1106-1161-11BC 4EA1 5984 5FD8 5FD9 671B 7DB2 7F54 8292 832B 83BD 8F1E 9099 60D8 6C52 6F2D 83BE 87D2 9B4D B9E4:1106-1162 57CB 59B9 5A92 5BD0 6627 679A 6885 6BCF 7164 7F75 8CB7 8CE3 9081 9B45 5446 6973 6CAC 73AB 771B 82FA 8393 9176 9709 B9E5:1106-1162-11A8 8108 8C8A 964C 9A40 9EA5 8109 8C83 8C98 B9F9:1106-1162-11BC 5B5F 6C13 731B 76F2 76DF 840C 511A 750D 753F 867B BA71:1106-1167-11A8 51AA 8993 5E4E 7CF8 BA74:1106-1167-11AB 514D 5195 52C9 68C9 6C94 7704 7720 7DBF 7DEC 9762 9EB5 4FDB 6E4E 7CC6 7DDC 9EAA BA78:1106-1167-11AF 6EC5 8511 7BFE 884A BA85:1106-1167-11BC 51A5 540D 547D 660E 669D 6927 6E9F 76BF 7791 8317 84C2 879F 9169 9298 9CF4 6D3A BA8C:1106-1168 8882 BAA8:1106-1169 4FAE 5192 52DF 59C6 5E3D 6155 6478 6479 66AE 67D0 6A21 6BCD 6BDB 725F 7261 7441 7738 77DB 8017 82BC 8305 8B00 8B28 8C8C 4F94 59E5 5AA2 5AEB 6048 65C4 7683 770A 7C8D 7CE2 8004 8765 87CA 927E 9AE6 BAA9:1106-1169-11A8 6728 6C90 7267 76EE 7766 7A46 9DA9 51E9 82DC BAB0:1106-1169-11AF 6B7F 6C92 BABD:1106-1169-11BC 5922 6726 8499 5E6A 61DE 66DA 6E95 6FDB 77A2 77C7 8268 96FA 9E0F BB18:1106-116D 536F 5893 5999 5EDF 63CF 6634 6773 6E3A 732B 7AD7 82D7 9328 6DFC 7707 85D0 8C93 BB34:1106-116E 52D9 5DEB 61AE 61CB 620A 62C7 64AB 65E0 6959 6B66 6BCB 7121 73F7 755D 7E46 821E 8302 856A 8AA3 8CBF 9727 9D61 511B 5638 5EE1 81B4 9A16 BB35:1106-116E-11A8 58A8 9ED8 563F BB38:1106-116E-11AB 5011 520E 543B 554F 6587 6C76 7D0A 7D0B 805E 868A 9580 96EF 5301 6097 61E3 6286 636B 7086 748A BB3C:1106-116E-11AF 52FF 6C95 7269 BBF8:1106-1175 5473 5A9A 5C3E 5D4B 5F4C 5FAE 672A 68B6 6963 6E3C 6E44 7709 7C73 7F8E 8587 8B0E 8FF7 9761 9EF4 4EB9 5A13 5A84 5ABA 5F25 5F2D 6549 7030 737C 7CDC 7E3B 82FF 863C 9E8B BBFC:1106-1175-11AB 5CB7 60B6 610D 61AB 654F 65FB 65FC 6C11 6CEF 739F 73C9 7DE1 9594 5FDE 5FDF 668B 6E63 7DCD 7F60 82E0 95A9 9C35 9EFD BC00:1106-1175-11AF 5BC6 871C 8B10 6A12 6EF5 BC15:1107-1161-11A8 525D 535A 62CD 640F 64B2 6734 6A38 6CCA 73C0 749E 7B94 7C95 7E1B 818A 8236 8584 8FEB 96F9 99C1 4EB3 6B02 7254 939B 99EE 9AC6 BC18:1107-1161-11AB 4F34 534A 53CD 53DB 62CC 642C 6500 6591 69C3 6CEE 6F58 73ED 7554 7622 76E4 76FC 78D0 78FB 792C 7D46 822C 87E0 8FD4 9812 98EF 5ABB 6273 642B 653D 670C 80D6 878C 9816 BC1C:1107-1161-11AF 52C3 62D4 64A5 6E24 6F51 767C 8DCB 91B1 9262 9AEE 9B43 54F1 6D61 8116 9238 9D53 BC29:1107-1161-11BC 5023 508D 574A 59A8 5C28 5E47 5F77 623F 653E 65B9 65C1 6609 678B 699C 6EC2 78C5 7D21 80AA 8180 822B 82B3 84A1 868C 8A2A 8B17 90A6 9632 9F90 4EFF 5396 5E6B 5FAC 6412 65CA 6886 7253 823D 8783 938A 9AE3 9B74 BC30:1107-1162 500D 4FF3 57F9 5F98 62DC 6392 676F 6E43 7119 76C3 80CC 80DA 88F4 88F5 8919 8CE0 8F29 914D 966A 574F 576F 6252 7432 84D3 BC31:1107-1162-11A8 4F2F 4F70 5E1B 67CF 6822 767D 767E 9B44 7CA8 BC88:1107-1165-11AB 5E61 6A0A 7169 71D4 756A 7E41 8543 85E9 98DC 7E59 7FFB 81B0 8629 88A2 BC8C:1107-1165-11AF 4F10 7B4F 7F70 95A5 6A43 7F78 BC94:1107-1165-11B7 51E1 5E06 68B5 6C3E 6C4E 6CDB 72AF 7BC4 8303 7B35 8A09 98BF BC95:1107-1165-11B8 6CD5 743A BCBD:1107-1167-11A8 50FB 5288 58C1 64D8 6A97 74A7 7656 78A7 8617 95E2 9739 64D7 7513 7588 895E 9DFF 9F0A BCC0:1107-1167-11AB 535E 5F01 8B8A 8FA8 8FAF 908A 5FED 6283 7C69 8FAE 8141 8CC6 99E2 9ABF 9D18 BCC4:1107-1167-11AF 5225 77A5 9C49 9F08 5F46 9DE9 BCD1:1107-1167-11BC 4E19 5002 5175 5C5B 5E77 661E 663A 67C4 68C5 70B3 7501 75C5 79C9 7ADD 8F27 9920 9A08 4E26 5840 7D63 7F3E 8FF8 9235 92F2 927C BCF4:1107-1169 4FDD 5821 5831 5BF6 666E 6B65 6D11 6E7A 6F7D 73E4 752B 83E9 88DC 8913 8B5C 8F14 4FCC 76D9 7C20 8446 974C 9D07 9EFC BCF5:1107-1169-11A8 4F0F 50D5 5310 535C 5B93 5FA9 670D 798F 8179 832F 8514 8907 8986 8F39 8F3B 99A5 9C12 58A3 5E5E 6251 6FEE 7B99 83D4 8760 876E 9D69 BCF8:1107-1169-11AB 672C BCFC:1107-1169-11AF 4E76 BD09:1107-1169-11BC 4FF8 5949 5C01 5CEF 5CF0 6367 68D2 70FD 71A2 742B 7E2B 84EC 8702 9022 92D2 9CF3 4E30 5906 7BF7 7D98 83F6 9D0C BD80:1107-116E 4E0D 4ED8 4FEF 5085 5256 526F 5426 5490 57E0 592B 5A66 5B5A 5B75 5BCC 5E9C 6276 6577 65A7 6D6E 6EA5 7236 7B26 7C3F 7F36 8150 8151 819A 8240 8299 83A9 8A03 8CA0 8CE6 8CFB 8D74 8DBA 90E8 91DC 961C 9644 99D9 9CE7 4EC6 4FD8 5A8D 6294 62CA 638A 6874 6991 6DAA 739E 7954 7B5F 7F58 7F66 80D5 82A3 82FB 8500 86A8 8709 889D 88D2 8DD7 9207 982B 9B92 9EA9 BD81:1107-116E-11A8 5317 BD84:1107-116E-11AB 5206 5429 5674 58B3 5954 596E 5FFF 61A4 626E 6610 6C7E 711A 76C6 7C89 7CDE 7D1B 82AC 8CC1 96F0 4F53 574C 5E09 678C 68FB 68FC 6C1B 6E53 6FC6 7287 755A 780F 7B28 80A6 81B9 8561 8F52 9EFA 9F22 BD88:1107-116E-11AF 4F5B 5F17 5F7F 62C2 5CAA 7953 7D31 8274 8300 97CD 9AF4 9EFB BD95:1107-116E-11BC 5D29 670B 68DA 787C 7E43 9D6C 580B 6F30 9B05 BE44:1107-1175 4E15 5099 5315 532A 5351 5983 5A62 5E87 60B2 618A 6249 6279 6590 6787 69A7 6BD4 6BD6 6BD7 6BD8 6CB8 7435 75FA 7812 7891 79D5 79D8 7C83 7DCB 7FE1 80A5 813E 81C2 83F2 871A 88E8 8AB9 8B6C 8CBB 9119 975E 98DB 9F3B 4EF3 4FFE 5255 572E 57E4 59A3 5C41 5EB3 60B1 68D0 6911 6C98 6DDD 6DE0 6FDE 72C9 72D2 75DE 75F9 7765 7955 7BE6 7D15 7F86 8153 8298 82BE 8406 84D6 868D 8C94 8D14 8F61 90B3 90EB 959F 9674 970F 97B4 9A11 9A1B 9AC0 9F19 BE48:1107-1175-11AB 56AC 5B2A 5F6C 658C 6AB3 6BAF 6D5C 6FF1 7015 725D 73AD 8CA7 8CD3 983B 5110 64EF 77C9 7E7D 81CF 860B 8C73 90A0 944C 9726 9870 9B02 9B22 BE59:1107-1175-11BC 6191 6C37 8058 9A01 51B0 51ED 51F4 5A09 C0AC:1109-1161 4E4D 4E8B 4E9B 4ED5 4F3A 4F3C 4F7F 4FDF 50FF 53F2 53F8 5506 55E3 56DB 58EB 5962 5A11 5BEB 5BFA 5C04 5DF3 5E2B 5F99 601D 6368 659C 65AF 67F6 67FB 68AD 6B7B 6C99 6CD7 6E23 7009 7345 7802 793E 7940 7960 79C1 7BE9 7D17 7D72 8086 820D 838E 84D1 86C7 88DF 8A50 8A5E 8B1D 8CDC 8D66 8FAD 90AA 98FC 99DF 9E9D 509E 525A 5378 548B 59D2 6942 69AD 6C5C 75E7 76B6 7AE2 7B25 7F37 8721 8997 99DB 9B66 9BCA 9C24 C0AD:1109-1161-11A8 524A 6714 69CA 720D 84B4 9460 C0B0:1109-1161-11AB 5098 522A 5C71 6563 6C55 73CA 7523 759D 7B97 849C 9178 9730 5277 59CD 5B7F 6A75 6F78 6F98 72FB 7E56 8A15 93DF 958A 6BFF C0B4:1109-1161-11AF 4E77 6492 6BBA 715E 85A9 C0BC:1109-1161-11B7 4E09 6749 68EE 6E17 829F 8518 886B 7CDD 91E4 9B16 C0BD:1109-1161-11B8 63F7 6F81 9212 98AF 5345 553C 6B43 7FE3 9364 9705 970E C0C1:1109-1161-11BC 4E0A 50B7 50CF 511F 5546 55AA 5617 5B40 5C19 5CE0 5E38 5E8A 5EA0 5EC2 60F3 6851 6A61 6E58 723D 7240 72C0 76F8 7965 7BB1 7FD4 88F3 89F4 8A73 8C61 8CDE 971C 587D 5F9C 664C 6BA4 751E 7DD7 939F 9859 9B3A C0C8:1109-1162 585E 74BD 8CFD 9C13 C0C9:1109-1162-11A8 55C7 7A61 7D22 8272 69ED 6FC7 7012 C0DD:1109-1162-11BC 7272 751F 7525 7B19 771A 924E C11C:1109-1165 5885 58FB 5DBC 5E8F 5EB6 5F90 6055 6292 637F 654D 6691 66D9 66F8 6816 68F2 7280 745E 7B6E 7D6E 7DD6 7F72 80E5 8212 85AF 897F 8A93 901D 92E4 9ECD 9F20 566C 5A7F 63DF 6495 6E51 6FA8 7D13 8021 82A7 924F C11D:1109-1165-11A8 5915 596D 5E2D 60DC 6614 6673 6790 6C50 6DC5 6F5F 77F3 78A9 84C6 91CB 932B 6670 77FD 814A 8203 8725 9250 9F2B C120:1109-1165-11AB 4ED9 50CA 5148 5584 5B0B 5BA3 6247 657E 65CB 6E32 717D 7401 7444 7487 74BF 766C 79AA 7DDA 7E55 7FA8 817A 81B3 8239 861A 87EC 8A75 8DE3 9078 9291 9425 994D 9BAE 58A1 5AD9 5C1F 5C20 5C73 6103 6B5A 71AF 7B45 7DAB 8B54 8B71 93C7 9A38 9C53 9C7B C124:1109-1165-11AF 5368 5C51 6954 6CC4 6D29 6E2B 820C 859B 893B 8A2D 8AAA 96EA 9F67 5070 5A9F 63F2 66AC 7207 789F 7A27 7D32 C12C:1109-1165-11B7 5261 66B9 6BB2 7E96 87FE 8D0D 9583 965D 5B45 61B8 647B 7752 8B6B 929B 97F1 C12D:1109-1165-11B8 651D 6D89 71EE 56C1 61FE 7044 8076 8EA1 9477 9873 C131:1109-1165-11BC 57CE 59D3 5BAC 6027 60FA 6210 661F 665F 7329 73F9 76DB 7701 7B6C 8056 8072 8165 8AA0 9192 7446 9A02 C138:1109-1166 4E16 52E2 6B72 6D17 7A05 7B39 7D30 8CB0 5E28 6D12 7E50 86FB C18C:1109-1169 53EC 562F 5851 5BB5 5C0F 5C11 5DE2 6240 6383 6414 662D 68B3 6CBC 6D88 6EAF 701F 70A4 71D2 7526 758F 758E 7619 7B11 7BE0 7C2B 7D20 7D39 852C 856D 8607 8A34 900D 9061 90B5 92B7 97F6 9A37 4F4B 4FCF 5372 55C9 57FD 5850 612C 634E 6A14 6CDD 7B71 7BBE 7E45 7FDB 8186 8258 86F8 8E08 9165 9704 9B48 9BB9 9C3A C18D:1109-1169-11A8 4FD7 5C6C 675F 6D91 7C9F 7E8C 8B16 8D16 901F 6D2C 906C C190:1109-1169-11AB 5B6B 5DFD 640D 84C0 905C 98E1 98E7 98F1 C194:1109-1169-11AF 7387 7AA3 87C0 C1A1:1109-1169-11BC 5B8B 609A 677E 6DDE 8A1F 8AA6 9001 980C 67D7 7AE6 9B06 C1C4:1109-116B 5237 7051 788E 9396 60E2 66EC 7463 C1E0:1109-116C 8870 91D7 C218:1109-116E 4FEE 53D7 55FD 56DA 5782 58FD 5AC2 5B88 5CAB 5CC0 5E25 6101 620D 624B 6388 641C 6536 6578 6A39 6B8A 6C34 6D19 6F31 71E7 72E9 7378 7407 74B2 7626 7761 79C0 7A57 7AEA 7CB9 7D8F 7DAC 7E61 7F9E 8129 8331 8490 84DA 85EA 8896 8AB0 8B90 8F38 9042 9083 916C 9296 92B9 968B 96A7 96A8 96D6 9700 9808 9996 9AD3 9B1A 53DF 552E 5ECB 666C 6BB3 6CC5 6EB2 6FC9 775F 7762 778D 795F 7C54 813A 8184 81B8 8B8E 8C4E 9672 98BC 9948 C219:1109-116E-11A8 53D4 587E 5919 5B70 5BBF 6DD1 6F5A 719F 7421 74B9 8085 83FD 4FF6 500F 5135 5A4C 6A5A 9A4C 9DEB C21C:1109-116E-11AB 5DE1 5F87 5FAA 6042 65EC 6812 696F 6A53 6B89 6D35 6DF3 73E3 76FE 77AC 7B4D 7D14 8123 821C 8340 84F4 8563 8A62 8AC4 9187 931E 9806 99B4 4F9A 72E5 76F9 7734 7D03 80AB 99E8 9B0A 9D89 C220:1109-116E-11AF 620C 8853 8FF0 9265 7D49 C22D:1109-116E-11BC 5D07 5D27 5D69 83D8 C26C:1109-1171 5005 6DEC 7120 C2AC:1109-1173-11AF 745F 819D 8768 8671 C2B5:1109-1173-11B8 6FD5 62FE 7FD2 8936 8972 6174 71A0 96B0 C2B9:1109-1173-11BC 4E1E 4E58 50E7 52DD 5347 627F 6607 7E69 8805 965E 584D 9B19 C2DC:1109-1175 4F8D 5319 5636 59CB 5AA4 5C38 5C4E 5C4D 5E02 5F11 6043 65BD 662F 6642 67BE 67F4 731C 77E2 793A 7FC5 8494 84CD 8996 8A66 8A69 8AE1 8C55 8C7A 5072 5155 53AE 557B 5852 5EDD 67B2 67F9 6F8C 7DE6 7FE4 8ADF 8AF0 8C49 91C3 9349 984B C2DD:1109-1175-11A8 57F4 5BD4 5F0F 606F 62ED 690D 6B96 6E5C 7184 7BD2 8755 8B58 8EFE 98DF 98FE 55B0 5AB3 683B C2E0:1109-1175-11AB 4F38 4F81 4FE1 547B 5A20 5BB8 613C 65B0 6668 71FC 7533 795E 7D33 814E 81E3 8398 85AA 85CE 8703 8A0A 8EAB 8F9B 8FC5 54C2 567A 56DF 59FA 6C5B 77E7 8124 8D10 9823 99EA C2E4:1109-1175-11AF 5931 5BA4 5BE6 6089 87CB 98CB C2EC:1109-1175-11B7 5BE9 5C0B 5FC3 6C81 6DF1 700B 751A 82AF 8AF6 68A3 6F6F 71D6 845A 9414 9C4F C2ED:1109-1175-11B8 4EC0 5341 8FBB C30D:110A-1161-11BC 96D9 C528:110A-1175 6C0F C544:110B-1161 4E9E 4FC4 5152 555E 5A25 5CE8 6211 7259 82BD 83AA 86FE 8859 8A1D 963F 96C5 9913 9D09 9D5D 4E2B 54E6 5A3F 5A40 5CE9 75B4 7811 7B0C 8FD3 930F 9D5E C545:110B-1161-11A8 580A 5CB3 5DBD 5E44 60E1 6115 63E1 6A02 6E25 9102 9354 984E 9C10 9F77 5053 537E 54A2 5594 5669 816D 843C 89A8 8AE4 9D9A 9F76 C548:110B-1161-11AB 5B89 5CB8 6309 664F 6848 773C 96C1 978D 9854 9B9F 6849 72B4 8D0B 9D08 C54C:110B-1161-11AF 65A1 8B01 8ECB 95BC 560E 621E 63E0 7A75 8A10 904F 981E 9D36 C554:110B-1161-11B7 5535 5CA9 5DD6 5EB5 6697 764C 83F4 95C7 557D 5A95 5D53 667B 8164 844A 84ED 8AF3 9837 99A3 9EEF C555:110B-1161-11B8 58D3 62BC 72CE 9D28 C559:110B-1161-11BC 4EF0 592E 600F 663B 6B83 79E7 9D26 536C 5771 6CF1 76CE 9785 C560:110B-1162 5393 54C0 57C3 5D16 611B 66D6 6DAF 788D 827E 9698 9744 50FE 5509 5540 566F 5A2D 5D15 6328 6371 6B38 6F04 7343 769A 775A 77B9 78D1 7919 8586 85F9 9749 9A03 C561:110B-1162-11A8 5384 627C 6396 6DB2 7E0A 814B 984D 545D 6239 6424 9628 C575:110B-1162-11BC 6AFB 7F4C 9DAF 9E1A 56B6 5AC8 7F43 9DEA C57C:110B-1163 4E5F 503B 51B6 591C 60F9 63F6 6930 723A 8036 91CE 57DC C57D:110B-1163-11A8 5F31 7D04 82E5 846F 84BB 85E5 8E8D 721A 79B4 7BDB 7C65 9470 9C2F 9DB8 9FA0 C591:110B-1163-11BC 4F6F 58E4 5B43 6059 63DA 6518 656D 6698 694A 6A23 6D0B 7001 716C 75D2 760D 79B3 7A70 7F8A 8944 8B93 91C0 967D 990A 5F89 6F3E 703C 70CA 7662 773B 8618 8F30 9472 98BA 9A64 C5B4:110B-1165 5704 5FA1 65BC 6F01 7600 79A6 8A9E 99AD 9B5A 9F6C 5709 6554 6DE4 98EB C5B5:110B-1165-11A8 5104 61B6 6291 6A8D 81C6 7E76 C5B8:110B-1165-11AB 5043 5830 5F66 7109 8A00 8AFA 50BF 533D 5AE3 8B9E 9122 9F34 9F39 C5BC:110B-1165-11AF 5B7C 8616 81EC C5C4:110B-1165-11B7 4FFA 513C 56B4 5944 63A9 6DF9 5D26 5E7F 66EE 7F68 9183 95B9 C5C5:110B-1165-11B8 5DAA 696D 5DAB 9134 C5D0:110B-1166 605A 66C0 C5D4:110B-1166-11AB 5186 C5EC:110B-1167 4E88 4F59 5982 6B5F 6C5D 74B5 7916 8207 8245 8339 8F3F 8F5D 9918 8201 C5ED:110B-1167-11A8 4EA6 57DF 5F79 6613 75AB 7E79 8B6F 9006 9A5B 5DA7 61CC 6DE2 95BE C5F0:110B-1167-11AB 56A5 5827 59F8 5A1F 5BB4 5EF6 6350 633B 693D 6C87 6CBF 6D8E 6D93 6DF5 6F14 70DF 7136 7159 71C3 71D5 784F 786F 7B75 7DE3 7E2F 884D 8EDF 925B 9CF6 5157 56E6 57CF 5B3F 6081 63BE 66E3 6ADE 6E37 81D9 839A 8735 8815 8B8C 9DF0 C5F4:110B-1167-11AF 6085 6D85 71B1 95B1 564E C5FC:110B-1167-11B7 53AD 67D3 708E 7130 7430 8276 82D2 95BB 9AE5 9E7D 5189 5869 61D5 624A 6ABF 6AB6 704E 7069 91C5 995C 9B58 9EF6 C5FD:110B-1167-11B8 66C4 71C1 8449 66C5 7180 7217 9768 C601:110B-1167-11BC 584B 5DB8 5F71 6620 668E 6979 69AE 6C38 6CF3 6E36 6F41 6FDA 701B 702F 7150 71DF 7370 745B 74D4 76C8 7A4E 7E93 82F1 8A60 8FCE 9348 9719 548F 5B34 5B30 6D67 6FF4 766D 78A4 7E08 8811 8D0F 90E2 97FA C608:110B-1168 4E42 502A 5208 53E1 66F3 6C6D 6FCA 730A 777F 7A62 82AE 85DD 8602 88D4 8A63 8B7D 8C6B 92B3 9713 9810 56C8 5ADB 62FD 639C 6798 7369 7768 7796 7E44 7FF3 82C5 854A 854B 8589 868B 873A 9BE2 9DD6 9E91 C624:110B-1169 4E94 4F0D 4FC9 50B2 5348 543E 5433 55DA 5862 58BA 5967 5A1B 5BE4 609F 61CA 6556 65FF 6664 68A7 6C5A 6FB3 70CF 71AC 7352 7B7D 8708 8AA4 9C32 9F07 4EF5 4FE3 5514 55F7 5641 572C 5AAA 5AEF 5FE4 6160 6342 6C59 7AB9 8071 8323 8956 8B37 8FC3 8FD5 9068 93CA 93D6 96A9 9A41 9F2F C625:110B-1169-11A8 5C4B 6C83 7344 7389 923A C628:110B-1169-11AB 6EAB 7465 761F 7A69 7E15 860A 5ABC 614D 6637 6C33 7185 8580 8F40 919E 97DE 9942 9C2E C62C:110B-1169-11AF 5140 55E2 8183 C639:110B-1169-11BC 58C5 64C1 74EE 7515 7670 7FC1 9095 96CD 9954 5581 5EF1 6EC3 7655 79BA 7F4B 84CA 96DD 9852 C640:110B-116A 6E26 74E6 7AA9 7AAA 81E5 86D9 8778 8A1B 54C7 56EE 5A50 6799 6D3C 7327 7A8A 8435 8B4C C644:110B-116A-11AB 5A49 5B8C 5B9B 68A1 6900 6D63 73A9 7413 742C 7897 7DE9 7FEB 8118 8155 839E 8C4C 962E 9811 5213 57B8 59A7 5C8F 5FE8 60CB 6DB4 76CC C648:110B-116A-11AF 66F0 C655:110B-116A-11BC 5F80 65FA 6789 6C6A 738B 5C2B 7007 8FEC C65C:110B-116B 502D 5A03 6B6A 77EE 5AA7 C678:110B-116C 5916 5D6C 5DCD 7325 754F 504E 5D34 5D54 6E28 7168 78A8 78C8 8075 9697 C694:110B-116D 50E5 51F9 582F 592D 5996 59DA 5BE5 5DA2 62D7 6416 6493 64FE 66DC 6A48 71FF 7464 7A88 7AAF 7E47 7E5E 8000 8170 87EF 8981 8B20 9059 9080 9952 5060 5593 5773 589D 5B08 5E7A 5FAD 5FBC 6B80 6F86 7945 7A7E 7A85 8558 9076 9DC2 C695:110B-116D-11A8 617E 6B32 6D74 7E1F 8925 8FB1 6EBD 84D0 C6A9:110B-116D-11BC 4FD1 50AD 5197 52C7 57C7 5889 5BB9 5EB8 6142 6995 6D8C 6E67 6EB6 7194 7462 7528 752C 8073 8338 84C9 8E0A 9394 93DE 509B 5B82 5D71 6175 6183 69E6 7867 8202 86F9 8E34 C6B0:110B-116E 4E8E 4F51 5076 512A 53C8 53CB 53F3 5B87 5BD3 5C24 611A 6182 65F4 725B 7397 7440 76C2 7950 7991 79B9 7D06 7FBD 828B 85D5 865E 8FC2 9047 90F5 91EA 9685 96E8 96E9 4E8F 4EB4 4FC1 504A 5401 5823 5D4E 5EBD 6745 75A3 76F1 7AFD 8026 8030 8B23 8E3D 935D 9E80 9E8C 9F72 C6B1:110B-116E-11A8 52D6 5F67 65ED 6631 682F 715C 7A36 90C1 980A 71E0 C6B4:110B-116E-11AB 4E91 6A52 6B9E 6F90 7189 8018 82B8 8553 904B 9695 96F2 97FB 60F2 6C84 7BD4 7D1C 9723 97F5 C6B8:110B-116E-11AF 851A 9B31 4E90 C6C5:110B-116E-11BC 718A 96C4 C6D0:110B-116F-11AB 5143 539F 54E1 5713 5712 57A3 5A9B 5AC4 5BC3 6028 613F 63F4 6C85 6D39 6E72 6E90 7230 733F 7457 82D1 8881 8F45 9060 9662 9858 9D1B 51A4 571C 676C 6965 7328 7DA9 82AB 8597 873F 8B1C 92FA 9A35 9D77 9EFF C6D4:110B-116F-11AF 6708 8D8A 925E 5216 7CA4 C704:110B-1171 4F4D 5049 50DE 5371 570D 59D4 5A01 5C09 6170 6690 6E2D 7232 744B 7DEF 80C3 840E 8466 853F 875F 885B 8918 8B02 9055 97CB 9B4F 559F 5E43 7152 71A8 75FF 8473 885E 8AC9 9036 95C8 97D9 97E1 9927 9AAA C720:110B-1172 4E73 4F91 5112 516A 552F 55A9 5B7A 5BA5 5E7C 5E7D 5EBE 60A0 60DF 6108 6109 63C4 6538 6709 67D4 67DA 6961 6962 6CB9 6D27 6E38 6FE1 7336 7337 745C 7531 7652 7DAD 81FE 8438 88D5 8A98 8ADB 8AED 8E30 8E42 904A 903E 907A 9149 91C9 936E 5198 5466 56FF 58DD 5E37 63C9 65BF 6CD1 7256 7609 7610 7AAC 7AB3 7C72 7CC5 7DCC 8174 83A0 8555 8564 86B0 86B4 8764 8915 8B89 900C 97A3 9BAA 9EDD 9F2C 9FA5 C721:110B-1172-11A8 5809 6BD3 8089 80B2 5125 C724:110B-1172-11AB 5141 596B 5C39 6F64 73A7 80E4 8D07 9217 958F 6600 92C6 C728:110B-1172-11AF 807F 6F4F 77DE C735:110B-1172-11BC 620E 701C 7D68 878D 72E8 C740:110B-1173-11AB 57A0 6069 6147 6BB7 8ABE 9280 96B1 542C 569A 5701 57BD 6196 6ABC 6EB5 72FA 73E2 766E 8A14 911E 9F57 C744:110B-1173-11AF 4E59 9CE6 C74C:110B-1173-11B7 541F 6DEB 852D 9670 97F3 98EE 5591 5D1F 5ED5 6114 972A C74D:110B-1173-11B8 63D6 6CE3 9091 6092 6339 6D65 C751:110B-1173-11BC 51DD 61C9 81BA 9DF9 C758:110B-1174 4F9D 501A 5100 5B9C 610F 61FF 64EC 6905 6BC5 7591 77E3 7FA9 8264 858F 87FB 8863 8ABC 8B70 91AB 5117 51D2 5293 5DB7 6B39 6F2A 7317 7912 8798 9950 C774:110B-1175 4E8C 4EE5 4F0A 5937 59E8 5DF2 5F1B 5F5B 6021 723E 73E5 7570 75CD 79FB 800C 8033 8084 82E1 8351 8CBD 8CB3 9087 98F4 990C 54BF 5768 5C14 5F5D 682E 6D1F 73C6 8A11 8A51 8FE4 96B6 C775:110B-1175-11A8 7037 76CA 7FCA 7FCC 7FFC 8B1A 5F0B 71A4 9DC1 C778:110B-1175-11AB 4EBA 4EC1 5203 5370 54BD 56E0 59FB 5BC5 5F15 5FCD 6E6E 7D6A 8335 8693 8A8D 976D 9777 4EDE 5819 5924 5A63 6268 6C24 6D07 798B 7C7E 82A2 88C0 C77C:110B-1175-11AF 4E00 4F5A 4F7E 58F9 65E5 6EA2 9038 93B0 99B9 6CC6 8EFC C784:110B-1175-11B7 4EFB 58EC 598A 59D9 6041 7A14 834F 8CC3 7D4D 887D 928B 98EA C785:110B-1175-11B8 5165 5344 5EFF C789:110B-1175-11BC 4ECD 5269 5B55 82BF 5AB5 C790:110C-1161 4ED4 523A 54A8 59C9 59FF 5B50 5B57 5B5C 6063 6148 6ECB 7099 716E 7386 74F7 75B5 78C1 7D2B 8005 81EA 8328 8517 85C9 8AEE 8CC7 96CC 5470 5B28 5B56 5B76 67D8 6CDA 7278 7725 7726 7CA2 8014 80FE 8308 8332 83BF 8678 89DC 8A3E 8CB2 8D6D 93A1 983F 9AED 9B93 9DBF 9DD3 C791:110C-1161-11A8 4F5C 52FA 56BC 65AB 6628 707C 70B8 7235 7DBD 828D 914C 96C0 9D72 5C9D 600D 65B1 67DE 6C4B 712F 72B3 788F C794:110C-1161-11AB 5B71 68E7 6B98 6F7A 76DE 5257 6214 9A4F C7A0:110C-1161-11B7 5C91 66AB 6F5B 7BB4 7C2A 8836 6D94 6F5C 6FF3 C7A1:110C-1161-11B8 96DC 5361 56C3 7728 78FC 894D C7A5:110C-1161-11BC 4E08 4ED7 5320 5834 58BB 58EF 596C 5C07 5E33 5E84 5F35 638C 66B2 6756 6A1F 6AA3 6B0C 6F3F 7246 7350 748B 7AE0 7CA7 8178 81DF 81E7 838A 846C 8523 8594 85CF 88DD 8D13 91AC 9577 969C 50BD 5958 599D 5B19 5D82 5EE7 6215 6F33 7242 7634 7CDA 7F98 8407 88C5 8CEC 9123 93D8 9926 9E9E C7AC:110C-1162 518D 54C9 5728 5BB0 624D 6750 683D 6893 6E3D 6ED3 707D 7E21 88C1 8CA1 8F09 9F4B 9F4E 5908 5D3D 6257 699F 707E 7E94 C7C1:110C-1162-11BC 722D 7B8F 8ACD 931A 5D22 7319 7424 9397 C800:110C-1165 4F47 4F4E 5132 5480 59D0 5E95 62B5 6775 696E 6A17 6CAE 6E1A 72D9 732A 75BD 7BB8 7D35 82E7 83F9 8457 85F7 8A5B 8CAF 8E87 9019 90B8 96CE 9F5F 5B81 5CA8 677C 67E2 6C10 6F74 7026 7274 7F5D 7F9D 82F4 86C6 889B 891A 89DD 8A46 8C6C 967C C801:110C-1165-11A8 52E3 540A 5AE1 5BC2 6458 6575 6EF4 72C4 7684 7A4D 7B1B 7C4D 7E3E 7FDF 837B 8B2B 8CCA 8D64 8DE1 8E5F 8FEA 8FF9 9069 93D1 6A00 78E7 7CF4 83C2 89BF 9016 99B0 C804:110C-1165-11AB 4F43 4F7A 50B3 5168 5178 524D 526A 5861 587C 5960 5C08 5C55 5EDB 609B 6230 6813 6BBF 6C08 6FB1 714E 7420 7530 7538 7551 7672 7B4C 7B8B 7BAD 7BC6 7E8F 8A6E 8F3E 8F49 923F 9293 9322 942B 96FB 985A 986B 991E 542E 56C0 5AE5 5C47 5DD3 6229 63C3 65C3 6834 69C7 6E54 6FB6 724B 7471 750E 754B 7560 75CA 765C 78DA 7C5B 7FB6 7FE6 8146 819E 8343 8E94 8F07 9085 913D 92D1 932A 975B 9766 9853 98E6 9930 9B0B 9C63 9E07 C808:110C-1165-11AF 5207 622A 6298 6D59 7664 7ACA 7BC0 7D76 5C8A 6662 7A83 C810:110C-1165-11B7 5360 5CBE 5E97 6F38 70B9 7C98 9711 9B8E 9EDE 4F54 588A 73B7 7B18 7C1F 82EB 852A 86C5 8998 98AD 9ECF C811:110C-1165-11B8 63A5 647A 8776 6904 696A 8728 8DD5 8E40 9C08 C815:110C-1165-11BC 4E01 4E95 4EAD 505C 5075 5448 59C3 5B9A 5E40 5EAD 5EF7 5F81 60C5 633A 653F 6574 65CC 6676 6678 67FE 6968 6A89 6B63 6C40 6DC0 6DE8 6E1F 6E5E 701E 70A1 738E 73FD 753A 775B 7887 798E 7A0B 7A7D 7CBE 7D8E 8247 8A02 8AEA 8C9E 912D 914A 91D8 9266 92CC 9320 9706 9756 975C 9802 9F0E 4F42 53EE 5A67 5A77 6014 639F 686F 6883 68D6 706F 73F5 7594 7B73 839B 8A3C 9049 9172 92E5 975A C81C:110C-1166 5236 5291 557C 5824 5E1D 5F1F 608C 63D0 68AF 6FDF 796D 7B2C 81CD 85BA 88FD 8AF8 8E44 918D 9664 969B 973D 984C 9F4A 5115 5A23 64E0 7318 7445 7747 7994 7A0A 7DF9 8E36 8E4F 8E8B 9357 9684 97F2 9BA7 9BF7 C870:110C-1169 4FCE 5146 51CB 52A9 5632 5F14 5F6B 63AA 64CD 65E9 6641 66FA 66F9 671D 689D 68D7 69FD 6F15 6F6E 7167 71E5 722A 74AA 773A 7956 795A 79DF 7A20 7A95 7C97 7CDF 7D44 7E70 8087 85FB 86A4 8A54 8ABF 8D99 8E81 9020 906D 91E3 963B 96D5 9CE5 4F7B 50AE 5201 539D 5608 566A 5B25 5F82 61C6 627E 6B82 6FA1 7431 7681 7967 7AC8 7B0A 7CD9 7CF6 7D69 7D5B 80D9 81CA 825A 8526 8729 8A82 8B5F 921F 929A 92FD 9BDB 9D70 9F02 C871:110C-1169-11A8 65CF 7C07 8DB3 93C3 762F C874:110C-1169-11AB 5B58 5C0A 62F5 C878:110C-1169-11AF 5352 62D9 731D C885:110C-1169-11BC 5027 5B97 5F9E 60B0 616B 68D5 6DD9 742E 7A2E 7D42 7D9C 7E31 816B 8E2A 8E35 937E 9418 4F00 6152 67CA 6936 6A05 747D 7607 7CBD 87BD 8E64 C88C:110C-116A 4F50 5750 5DE6 5EA7 632B 5249 75E4 839D 9AFD C8C4:110C-116C 7F6A C8FC:110C-116E 4E3B 4F4F 4F8F 505A 59DD 80C4 546A 5468 55FE 594F 5B99 5DDE 5EDA 665D 6731 67F1 682A 6CE8 6D32 6E4A 6F8D 70B7 73E0 7587 7C4C 7D02 7D2C 7DA2 821F 86DB 8A3B 8A85 8D70 8E8A 8F33 9031 914E 9152 9444 99D0 4E1F 4F9C 5114 5C0C 5E6C 62C4 7843 7C52 8098 8160 851F 86C0 88EF 8A4B 8CD9 8D8E 8F08 9052 9252 970C 9714 9F04 C8FD:110C-116E-11A8 7AF9 7CA5 C900:110C-116E-11AB 4FCA 5101 51C6 57C8 5BEF 5CFB 6659 6A3D 6D5A 6E96 6FEC 710C 756F 7AE3 8822 9021 9075 96CB 99FF 5642 57FB 58AB 60F7 6499 76B4 7DA7 7F47 8E06 8E72 940F 96BC 9915 9C52 9D54 C904:110C-116E-11AF 8301 4E7C C911:110C-116E-11BC 4E2D 4EF2 8846 91CD 773E C989:110C-1173-11A8 537D 5373 559E C990:110C-1173-11AF 6ADB 9A2D C999:110C-1173-11B8 696B 6C41 847A 6A9D 857A C99D:110C-1173-11BC 589E 618E 66FE 62EF 70DD 7511 75C7 7E52 84B8 8B49 8D08 5D92 77F0 7F7E C9C0:110C-1175 4E4B 53EA 54AB 5730 5740 5FD7 6301 6307 646F 652F 65E8 667A 679D 67B3 6B62 6C60 6C9A 6F2C 77E5 7825 7949 7957 7D19 80A2 8102 81F3 829D 82B7 8718 8A8C 8D04 8DBE 9072 577B 5880 627A 69B0 6CDC 75E3 79EA 7BEA 8210 8E1F 8E93 8EF9 962F 9BA8 9DD9 C9C1:110C-1175-11A8 76F4 7A19 7A37 7E54 8077 799D C9C4:110C-1175-11AB 5507 55D4 5875 632F 6422 6649 664B 686D 699B 6B84 6D25 6EB1 73CD 7468 74A1 755B 75B9 76E1 771E 778B 79E6 7E09 7E1D 81FB 852F 8897 8A3A 8CD1 8EEB 8FB0 9032 93AD 9663 9673 9707 4FB2 5118 73D2 7A39 84C1 87B4 8D81 9241 9B12 C9C8:110C-1175-11AF 4F84 53F1 59EA 5AC9 5E19 684E 74C6 75BE 79E9 7A92 81A3 86ED 8CEA 8DCC 8FED 57A4 7D70 84BA 90C5 9455 C9D0:110C-1175-11B7 659F 6715 9D06 C9D1:110C-1175-11B8 57F7 6F57 7DDD 8F2F 93F6 96C6 54A0 6222 C9D5:110C-1175-11BC 5FB5 61F2 6F84 6F82 7013 7665 77AA CC28:110E-1161 4E14 4F98 501F 53C9 55DF 5D6F 5DEE 6B21 6B64 78CB 7B9A 8E49 8ECA 906E 4F7D 5056 5953 5C94 5FA3 69CE 7473 7868 CC29:110E-1161-11A8 6349 643E 7740 7A84 932F 947F 9F6A 6233 64C9 65B2 CC2C:110E-1161-11AB 64B0 6FAF 71E6 74A8 74DA 7AC4 7C12 7E82 7CB2 7E98 8B9A 8D0A 947D 9910 994C 5127 5139 5297 5DD1 6522 6B11 7228 8DB2 CC30:110E-1161-11AF 5239 5BDF 64E6 672D 7D2E 624E 62F6 CC38:110E-1161-11B7 50ED 53C3 5879 6158 6159 61FA 65AC 7AD9 8B92 8B96 5133 53C5 5D84 5DC9 615A 61AF 6519 69E7 6B03 6BDA 8B56 93E8 9471 995E 9A42 9EF2 CC3D:110E-1161-11BC 5009 5021 5275 5531 5A3C 5EE0 5F70 6134 655E 660C 6636 66A2 69CD 6EC4 6F32 7316 7621 7A93 8139 8259 83D6 84BC 5000 5096 51D4 5231 60B5 60DD 6227 6436 6919 6C05 7472 7A97 7ABB 8E4C 92F9 9306 95B6 9B2F 9DAC CC44:110E-1162 50B5 57F0 5BC0 5BE8 5F69 63A1 7826 7DB5 83DC 8521 91C7 91F5 68CC 831D CC45:110E-1162-11A8 518A 67F5 7B56 8CAC 5616 5E58 78D4 7B27 7C00 86B1 CC98:110E-1165 51C4 59BB 60BD 8655 6DD2 840B 8904 89B7 90EA CC99:110E-1165-11A8 501C 5254 5C3A 617D 621A 62D3 64F2 65A5 6ECC 7620 810A 8E60 965F 96BB 544E 5767 5849 60D5 6357 646D 8734 8DD6 8E91 CC9C:110E-1165-11AB 4EDF 5343 5598 5929 5DDD 64C5 6CC9 6DFA 7394 7A7F 821B 85A6 8CE4 8E10 9077 91E7 95E1 9621 97C6 4FF4 5029 50E2 5103 6D0A 6FFA 74E9 7946 7C81 81F6 828A 831C 8350 84A8 8546 8695 8FBF 975D CCA0:110E-1165-11AF 51F8 54F2 5586 5FB9 64A4 6F88 7DB4 8F1F 8F4D 9435 525F 555C 57D1 60D9 6387 6B60 9295 9323 98FB 992E CCA8:110E-1165-11B7 50C9 5C16 6CBE 6DFB 751B 77BB 7C3D 7C64 8A79 8AC2 5E68 5FDD 60C9 6A90 6AFC 7038 7C37 895C CCA9:110E-1165-11B8 581E 59BE 5E16 6377 7252 758A 776B 8ADC 8CBC 8F12 5022 546B 558B 6017 893A CCAD:110E-1165-11BC 5EF3 6674 6DF8 807D 83C1 8ACB 9751 9BD6 51CA 570A 873B 9D84 CCB4:110E-1166 5243 66FF 6D95 6EEF 7DE0 8AE6 902E 905E 9AD4 568F 5F58 68E3 6BA2 780C 8482 8515 855E 8EC6 9746 9AF0 CD08:110E-1169 521D 527F 54E8 6194 6284 62DB 68A2 6912 695A 6A35 7092 7126 785D 7901 790E 79D2 7A0D 8096 8278 82D5 8349 8549 8C82 8D85 9162 918B 91AE 5062 50EC 52AD 52E6 564D 5AF6 5CA7 5CED 5D95 600A 6084 6100 676A 71CB 7D83 8016 8A9A 8B59 8DA0 8EFA 8FE2 9214 936B 936C 9798 9866 9AEB 9DE6 9F60 CD09:110E-1169-11A8 4FC3 56D1 71ED 77D7 8700 89F8 66EF 7225 77DA 85A5 8E85 9AD1 CD0C:110E-1169-11AB 5BF8 5FD6 6751 90A8 540B CD1D:110E-1169-11BC 53E2 585A 5BF5 60A4 6181 6460 7E3D 8070 8525 9283 8471 84EF 93E6 9A18 9A44 CD2C:110E-116A-11AF 64AE CD5C:110E-116C 50AC 5D14 6700 562C 6467 69B1 6F3C 7480 78EA 7E17 8127 CD94:110E-116E 589C 62BD 63A8 690E 6978 6A1E 6E6B 76BA 79CB 82BB 8429 8ACF 8DA8 8FFD 9112 914B 919C 9310 9318 939A 96DB 9A36 9C0D 50E6 557E 5A35 5E1A 60C6 6376 63EB 6425 7503 7633 9F9D 7B92 7BA0 7C09 7E0B 7E10 84AD 966C 96B9 97A6 9A05 9B4B 9C0C 9D7B 9D96 9DB5 9E84 9EA4 CD95:110E-116E-11A8 4E11 755C 795D 7AFA 7B51 7BC9 7E2E 84C4 8E59 8E74 8EF8 9010 59AF 8233 8C56 8E5C 9F00 CD98:110E-116E-11AB 6625 693F 7443 CD9C:110E-116E-11AF 51FA 672E 9EDC 79EB CDA9:110E-116E-11BC 5145 5FE0 6C96 87F2 885D 8877 51B2 5FE1 73EB CDCC:110E-1170 60B4 81B5 8403 8D05 60F4 63E3 75A9 7601 9847 CDE8:110E-1171 53D6 5439 5634 5A36 5C31 708A 7FE0 805A 8106 81ED 8DA3 9189 9A5F 9DF2 51A3 6A47 6BF3 CE21:110E-1173-11A8 5074 4EC4 53A0 60FB 6E2C 5EC1 6603 CE35:110E-1173-11BC 5C64 CE58:110E-1175 4F88 5024 55E4 5CD9 5E5F 6065 6894 6CBB 6DC4 71BE 75D4 75F4 7661 7A1A 7A49 7DC7 7DFB 7F6E 81F4 86A9 8F1C 96C9 99B3 9F52 536E 54C6 5BD8 5DF5 7564 75D3 7D7A 83D1 8599 892B 8C78 8DF1 9319 9624 9BD4 9D19 9D1F 9D44 CE59:110E-1175-11A8 5247 52C5 98ED 6555 CE5C:110E-1175-11AB 89AA 6AEC 85FD 896F 9F54 CE60:110E-1175-11AF 4E03 67D2 6F06 CE68:110E-1175-11B7 4FB5 5BE2 6795 6C88 6D78 741B 7827 91DD 937C 5BD6 5FF1 6939 6C89 90F4 92DF 99F8 CE69:110E-1175-11B8 87C4 CE6D:110E-1175-11BC 79E4 7A31 CF8C:110F-116B 5FEB 5672 592C D0C0:1110-1161 4ED6 54A4 553E 58AE 59A5 60F0 6253 62D6 6736 6955 8235 9640 99B1 99DD 4F57 579E 62D5 67C1 6A62 6CB1 8A6B 8DCE 8EB1 99DE 9B80 9D15 9F09 D0C1:1110-1161-11A8 502C 5353 5544 577C 6258 64E2 666B 67DD 6FC1 6FEF 7422 7438 8A17 9438 62C6 6A50 6CB0 6DBF 77FA 7C5C 8600 8E14 9034 D0C4:1110-1161-11AB 5451 5606 5766 5F48 619A 6B4E 7058 70AD 7DBB 8A95 61BB 6524 6BAB 7671 9A52 D0C8:1110-1161-11AF 596A 812B 4FBB D0D0:1110-1161-11B7 63A2 7708 803D 8CAA 55FF 5FD0 9156 D0D1:1110-1161-11B8 5854 642D 69BB 509D 584C 6428 D0D5:1110-1161-11BC 5B95 5E11 6E6F 8569 71D9 76EA 78AD 862F D0DC:1110-1162 514C 53F0 592A 6020 614B 6B86 6C70 6CF0 7B1E 80CE 82D4 8DC6 90B0 98B1 57ED 5A27 5B61 62AC 8FE8 99C4 99D8 D0DD:1110-1162-11A8 64C7 6FA4 D0F1:1110-1162-11BC 6491 6490 725A D130:1110-1165 6504 D1A0:1110-1169 514E 5410 571F 8A0E D1A4:1110-1169-11AB 564B 5678 74F2 D1B5:1110-1169-11BC 615F 6876 75DB 7B52 7D71 901A 606B 6A0B 7B69 D1F4:1110-116C 5806 69CC 817F 892A 9000 9839 96A4 D22C:1110-116E 5078 5957 59AC 6295 900F 9B2A 5992 6E1D 9AB0 D241:1110-116E-11BC 4F5F D2B9:1110-1173-11A8 615D 7279 5FD2 D2C8:1110-1173-11B7 95D6 D30C:1111-1161 5761 5A46 5DF4 628A 64AD 64FA 6777 6CE2 6D3E 722C 7436 7834 7F77 82AD 8DDB 9817 53F5 5991 5CA5 6015 705E 7238 73BB 76A4 7B06 7C38 8019 83E0 8469 9131 D310:1111-1161-11AB 5224 5742 677F 7248 74E3 8CA9 8FA6 9211 962A 6C74 D314:1111-1161-11AF 516B 53ED 634C 6733 6C43 D328:1111-1162 4F69 5504 6096 6557 6C9B 6D7F 724C 72FD 7A17 8987 8C9D 5B5B 65C6 73EE 9708 9738 D33D:1111-1162-11BC 5F6D 6F8E 70F9 81A8 7830 794A 87DA 87DB D345:1111-1163-11A8 610E D3B8:1111-1167-11AB 4FBF 504F 6241 7247 7BC7 7DE8 7FE9 904D 97AD 9A19 533E 5FA7 60FC 7DF6 8251 8439 8759 890A 8ADE D3C4:1111-1167-11B7 8CB6 782D 7A86 D3C9:1111-1167-11BC 576A 5E73 67B0 840D 8A55 6026 62A8 6CD9 82F9 84F1 9B83 D3D0:1111-1168 5420 5B16 5E63 5EE2 5F0A 6583 80BA 853D 9589 965B 655D 72F4 7358 7648 D3EC:1111-1169 4F48 5305 530D 530F 5486 54FA 5703 5E03 6016 629B 62B1 6355 6CE1 6D66 75B1 7832 80DE 812F 82DE 8461 84B2 888D 8912 900B 92EA 98FD 9B91 5124 5E96 6661 66D3 70AE 70B0 8216 8AA7 924B 9784 9914 9BC6 D3ED:1111-1169-11A8 5E45 66B4 66DD 7011 7206 D45C:1111-116D 4FF5 527D 5F6A 6153 6753 6A19 6F02 74E2 7968 8868 8C79 98C7 98C4 9A43 50C4 52E1 560C 5AD6 647D 6B8D 719B 7E39 88F1 93E2 9463 9ADF 9C3E D488:1111-116E-11B7 54C1 7A1F 7980 D48D:1111-116E-11BC 6953 8AF7 8C4A 98A8 99AE 760B 8451 D53C:1111-1175 5F7C 62AB 75B2 76AE 88AB 907F 9642 8A56 8F9F 9781 9AF2 D53D:1111-1175-11A8 8177 D544:1111-1175-11AF 5339 5F3C 5FC5 6CCC 73CC 7562 758B 7B46 82FE 999D 4F56 5487 6EED 7BF3 7F7C 84FD 89F1 8E55 97B8 97E0 99DC 9D6F D54D:1111-1175-11B8 4E4F 903C 506A D558:1112-1161 4E0B 4F55 53A6 590F 5EC8 6630 6CB3 7455 8377 8766 8CC0 9050 971E 9C15 5440 5687 5C88 61D7 7146 7615 7F45 935C D559:1112-1161-11A8 58D1 5B78 8650 8B14 9DB4 72E2 7627 76AC 786E 90DD 9DFD D55C:1112-1161-11AB 5BD2 6068 608D 65F1 6C57 6F22 6FA3 701A 7F55 7FF0 9591 9592 9650 97D3 50E9 5AFA 5AFB 634D 66B5 9588 99FB 9DF3 9F3E D560:1112-1161-11AF 5272 8F44 778E D568:1112-1161-11B7 51FD 542B 54B8 5563 558A 6ABB 6DB5 7DD8 8266 929C 9677 9E79 839F 83E1 8AF4 8F5E 95DE D569:1112-1161-11B8 5408 54C8 76D2 86E4 95A4 95D4 965C 530C 55D1 67D9 69BC 6E98 76CD 90C3 D56D:1112-1161-11BC 4EA2 4F09 59EE 5AE6 5DF7 6052 6297 676D 6841 6C86 6E2F 7F38 809B 822A 9805 592F 6046 7095 7F3F 980F D574:1112-1162 4EA5 5055 54B3 5793 595A 5B69 5BB3 61C8 6977 6D77 7023 87F9 89E3 8A72 8AE7 9082 99ED 9AB8 548D 5DB0 5EE8 6B2C 736C 744E 75CE 85A4 91A2 9826 9BAD D575:1112-1162-11A8 52BE 6838 7FEE 8988 D589:1112-1162-11BC 5016 5E78 674F 8347 884C 60BB D5A5:1112-1163-11BC 4EAB 5411 56AE 73E6 9115 97FF 9909 9957 9999 858C D5C8:1112-1165 5653 589F 865B 8A31 6B54 D5CC:1112-1165-11AB 61B2 6AF6 737B 8ED2 5DDA 5E70 6507 D5D0:1112-1165-11AF 6B47 D5D8:1112-1165-11B7 96AA 9A57 5DAE 736B 7381 D601:1112-1167-11A8 5955 7200 8D6B 9769 5F08 6D2B 7131 9B29 D604:1112-1167-11AB 4FD4 5CF4 5F26 61F8 665B 6CEB 70AB 7384 73B9 73FE 7729 774D 7D43 7D62 7E23 8237 8852 8CE2 9249 986F 5107 5B1B 6621 7404 75C3 770C 7E6F 7FFE 8706 8AA2 92D7 99FD D608:1112-1167-11AF 5B51 7A74 8840 9801 7D5C 8D90 D610:1112-1167-11B7 5ACC D611:1112-1167-11B8 4FE0 5354 593E 5CFD 633E 6D79 72F9 8105 8107 83A2 92CF 9830 5327 53F6 57C9 604A 608F 611C 7BCB D615:1112-1167-11BC 4EA8 5144 5211 578B 5F62 6CC2 6ECE 7005 7050 70AF 7192 73E9 7469 834A 87A2 8861 9008 90A2 93A3 99A8 5910 5A19 8A57 8FE5 9658 D61C:1112-1168 516E 5F57 60E0 6167 66B3 8559 8E4A 91AF 978B 5092 5612 5BED 5FAF 69E5 76FB 8B11 8B7F D638:1112-1169 4E4E 4E92 547C 58D5 58FA 597D 5CB5 5F27 6236 6248 660A 6667 6BEB 6D69 6DCF 6E56 6EF8 6F94 6FE0 6FE9 705D 72D0 7425 745A 74E0 7693 795C 7CCA 7E1E 80E1 82A6 846B 84BF 864E 865F 8774 8B77 8C6A 93AC 9800 9865 512B 51B1 5637 5AED 5AEE 6019 6C8D 6EC8 6EEC 7292 7322 769C 769E 7B8E 8055 9190 992C 9B0D D639:1112-1169-11A8 60D1 6216 9177 D63C:1112-1169-11AB 5A5A 660F 6DF7 6E3E 743F 9B42 5702 60DB 6EB7 711C 95BD D640:1112-1169-11AF 5FFD 60DA 7B0F 56EB D64D:1112-1169-11BC 54C4 5F18 6C5E 6CD3 6D2A 70D8 7D05 8679 8A0C 9D3B 664E 6F92 7BCA 9277 9B28 D654:1112-116A 5316 548C 5B05 6A3A 706B 7575 798D 79BE 82B1 83EF 8A71 8B41 8CA8 9774 4FF0 5629 5A72 64ED 756B 9A4A 9FA2 D655:1112-116A-11A8 64F4 652B 78BA 78BB 7A6B 77CD 77E1 792D 944A D658:1112-116A-11AB 4E38 559A 5950 5BA6 5E7B 60A3 63DB 6B61 6665 6853 6E19 7165 74B0 7D08 9084 9A69 9C25 5BF0 61FD 64D0 74DB 7696 7746 7D59 8C62 8F58 9370 9436 9B1F D65C:1112-116A-11AF 6D3B 6ED1 733E 8C41 95CA 86DE D669:1112-116A-11BC 51F0 5E4C 5FA8 604D 60F6 6130 614C 6643 6644 69A5 6CC1 6E5F 6EC9 6F62 714C 749C 7687 7BC1 7C27 8352 8757 9051 968D 9EC3 55A4 5A93 6033 745D 8093 8CBA 93A4 D68C:1112-116C 532F 56DE 5EFB 5F8A 6062 6094 61F7 6666 6703 6A9C 6DEE 6FAE 7070 736A 7E6A 81BE 8334 86D4 8AA8 8CC4 4F6A 6803 6D04 6ED9 76D4 8A7C 8FF4 982E 9C60 D68D:1112-116C-11A8 5283 7372 5684 D6A1:1112-116C-11BC 5B96 6A6B 9404 6F8B 921C 9ECC D6A8:1112-116D 54EE 5686 5B5D 6548 6585 66C9 689F 6D8D 6DC6 723B 80B4 9175 9A4D 509A 56C2 5D24 6BBD 7187 769B 8653 991A D6C4:1112-116E 4FAF 5019 539A 540E 543C 5589 55C5 5E3F 5F8C 673D 7166 73DD 9005 543D 55A3 5795 5820 6DB8 7334 7BCC 8A61 8B43 9157 9931 D6C8:1112-116E-11AB 52DB 52F3 5864 58CE 7104 718F 71FB 85B0 8A13 6688 66DB 720B 736F 7E81 8477 9442 D6CC:1112-116E-11AF 6B3B D6D9:1112-116E-11BC 85A8 D6E4:1112-116F-11AB 55A7 6684 714A 8431 70DC 8AE0 8AFC D6FC:1112-1170 5349 5599 6BC1 71EC 8294 866B 867A D718:1112-1171 5F59 5FBD 63EE 6689 7147 8AF1 8F1D 9EBE 649D 7FEC D734:1112-1172 4F11 643A 70CB 7566 8667 54BB 64D5 96B3 9AF9 9D42 D73C:1112-1172-11AF 6064 8B4E 9DF8 5379 D749:1112-1172-11BC 5147 51F6 5308 6D36 80F8 605F 80F7 D751:1112-1173-11A8 9ED1 D754:1112-1173-11AB 6615 6B23 7098 75D5 5F88 5FFB 6380 712E 8A22 91C1 D758:1112-1173-11AF 5403 5C79 7D07 8A16 4EE1 6C54 7599 8FC4 9F55 D760:1112-1173-11B7 6B20 6B3D 6B46 5EDE D761:1112-1173-11B8 5438 6070 6D3D 7FD5 564F 6B59 6F5D 7FD6 D765:1112-1173-11BC 8208 D76C:1112-1174 50D6 51DE 559C 566B 56CD 59EC 5B09 5E0C 6199 6198 6231 665E 66E6 7199 71B9 71BA 72A7 79A7 7A00 7FB2 54A5 550F 563B 6095 6232 66BF 6B37 71F9 7214 8C68 993C D790:1112-1175-11AF 8A70 72B5 7E88 896D 9821 9EE0 __END__ =head1 NAME Unicode::Collate::CJK::Korean - weighting CJK Unified Ideographs for Unicode::Collate =head1 SYNOPSIS use Unicode::Collate; use Unicode::Collate::CJK::Korean; my $collator = Unicode::Collate->new( overrideCJK => \&Unicode::Collate::CJK::Korean::weightKorean ); =head1 DESCRIPTION C<Unicode::Collate::CJK::Korean> provides C<weightKorean()>, that is adequate for C<overrideCJK> of C<Unicode::Collate> and makes tailoring of CJK Unified Ideographs in the order of CLDR's Korean ordering. =head1 SEE ALSO =over 4 =item CLDR - Unicode Common Locale Data Repository L<http://cldr.unicode.org/> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =item L<Unicode::Collate> =item L<Unicode::Collate::Locale> =back =cut Unicode/Collate/CJK/Zhuyin.pm 0000644 00000334057 15037233320 0011762 0 ustar 00 package Unicode::Collate::CJK::Zhuyin; use 5.006; use strict; use warnings; our $VERSION = '1.25'; my %u2p; my $wt = 0x8000; while (<DATA>) { last if /^__END__/; my @c = split; for my $c (@c) { next if !$c; $u2p{hex($c)} = $wt if $c !~ /-/; $wt++; } } sub weightZhuyin { my $u = shift; return exists $u2p{$u} ? $u2p{$u} : undef; } 1; __DATA__ FDD0-3105 516B 4EC8 6252 6733 7390 593F 5C9C 82AD 5CC7 67ED 75A4 54F5 5DFC 634C 7C91 7F93 8686 91DB 91DF 3B6D 8C5D 9C83 4C3E 53D0 72AE 629C 577A 59AD 62D4 70A6 7679 80C8 8307 83DD 8A59 8DCB 8EF7 98B0 58A2 9B43 9F25 628A 94AF 9200 9776 575D 5F1D 7238 57BB 8019 8DC1 9C85 9C8C 43AC 9B8A 8987 77F2 9738 58E9 705E 6B1B 5DF4 53ED 5427 7B06 7D26 7F62 9B5E 7F77 7676 5E17 62E8 6CE2 7677 73BB 525D 5265 54F1 76CB 7835 94B5 997D 7D34 7F3D 889A 88B0 83E0 7886 9262 50E0 5D93 64A5 64AD 9911 9B81 8E73 9A4B 9C4D 4EE2 4F2F 72BB 8091 9A73 5E1B 72DB 74DD 4FBC 52C3 80C9 82E9 4EB3 632C 6D61 74DF 79E1 90E3 94B9 94C2 3A8D 3DBF 3E40 3F0E 8116 8236 88AF 535A 6E24 88B9 9E41 613D 640F 733C 8467 9238 9251 998E 50F0 3B0D 717F 7254 7B94 824A 4B6F 999B 99C1 8514 8E23 92CD 9548 464F 294D0 999E 99EE 8C70 2836D 5697 61EA 3A67 3B27 7C19 894F 939B 993A 9D53 72A6 7921 9AC6 9AC9 6B02 7934 896E 946E 8DDB 7BA5 7C38 5B79 6A97 7CEA 8B52 8617 2E8A 535C 5575 8421 818A 6300 63B0 64D8 767D 767E 4F70 67CF 6822 636D 74F8 7CA8 7D54 6446 64FA 896C 5E8D 62DD 8D25 62DC 6557 7308 7A17 86FD 7CBA 3525 8D01 97DB 7AE1 85AD 5351 676F 9642 76C3 686E 60B2 63F9 6911 7891 7986 9E4E 9303 85E3 9D6F 5317 3933 9273 8D1D 5B5B 72C8 8C9D 5907 6601 726C 90B6 80CC 82DD 94A1 4FFB 500D 36DD 6096 72FD 90E5 505D 5079 3AF2 6896 73FC 88AB 5099 60EB 7119 7432 8EF0 8F88 9101 50C3 6102 3ED7 789A 3E22 7295 84D3 8A96 9781 8919 8F29 92C7 9AB3 618A 7CD2 97B4 943E 5457 5504 7999 52F9 5305 5B62 67B9 80DE 82DE 7B23 7172 9F85 8912 8554 95C1 8943 9F59 7A87 5AD1 96F9 420F 8584 2688A 3FFA 5B9D 6009 9971 4FDD 9E28 5BB2 73E4 5821 5822 5AAC 5BDA 8446 98FD 99C2 9CF5 7DE5 8913 9D07 8CF2 4B4B 5BF3 5BF6 28C26 974C 4D10 28C3B 52FD 62A5 62B1 8C79 8DB5 94C7 86AB 888C 5831 83E2 924B 9C8D 9764 66B4 9AB2 9AF1 8663 9B91 5124 66D3 7206 5FC1 9464 9E14 4F68 85F5 6273 653D 73ED 822C 9881 6591 642C 6592 9812 7622 9CFB 4232 878C 8929 764D 8FAC 5742 5C85 962A 6604 677F 7248 74EA 94A3 7C84 8228 9211 8742 9B6C 95C6 529E 534A 4F34 5762 59C5 6011 62CC 7ECA 67C8 79DA 6E74 7D46 9261 977D 8FA6 74E3 626E 8781 5954 6CCD 8D32 681F 7287 951B 931B 672C 82EF 5959 755A 7FC9 694D 574B 574C 5034 6379 6873 6E00 7B28 26BC0 9029 64AA 7356 8F3D 90A6 57B9 5E2E 6360 6D5C 6886 90AB 5E47 5E5A 7E0D 5E6B 97A4 7ED1 7D81 699C 7253 8180 9AC8 3B4B 73A4 868C 508D 68D2 68D3 8C24 585D 6412 7A16 84A1 872F 78C5 9551 8255 8B17 938A 4F3B 794A 595F 5D29 7D63 958D 50B0 5D6D 75ED 5623 7DB3 752D 57C4 57F2 7EF7 7423 742B 83F6 7E43 979B 6CF5 8FF8 902C 5874 955A 750F 295F4 4B70 8E66 93F0 882F 63FC 5C44 506A 6BF4 6945 903C 8C4D 8795 9CBE 939E 9D56 9C0F 8378 9F3B 5315 6BD4 3832 5936 673C 4F4A 5421 59A3 6C98 7595 5F7C 67C0 79D5 4FFE 7B14 7C83 822D 555A 3A8F 7B46 7B84 805B 9119 8C8F 5E01 5FC5 6BD5 95ED 4F56 3629 5752 5E87 8BD0 3620 59BC 602D 6036 39D9 6788 7540 90B2 54D4 67F2 6BD6 73CC 75AA 82FE 6BD9 72F4 7B13 7C8A 835C 94CB 965B 5A62 5EB3 655D 6890 7562 8890 9587 9589 581B 5F3B 5F3C 610A 610E 6E62 7695 7B5A 8406 8A56 8CB1 8CC1 8D51 6ED7 714F 75F9 75FA 7764 8177 870C 8DF8 924D 959F 98F6 55F6 5E63 5F0A 5F43 6EED 78A7 7B85 7B86 7DBC 84D6 88E8 999D 6F77 719A 7358 7359 3EEB 84FD 853D 480B 912A 99DC 9AF2 58C1 5B16 5EE6 3D65 7BE6 7F7C 89F1 9B85 6583 6FDE 7BF3 7E2A 81C2 859C 907F 9946 5970 74A7 8E55 9128 9AC0 7E74 895E 93CE 4557 8963 8E83 8E84 97B8 97E0 8D14 9434 9A46 9B53 9DDD 9DE9 9F0A 5302 841E 5E64 5B36 8945 618B 87DE 9CD6 9C49 9F08 864C 9F9E 5225 522B 5487 43DF 8382 86C2 5FB6 8952 8E69 762A 765F 3FDC 5F46 4318 706C 6753 6807 98D1 9A89 9ADF 6DF2 5F6A 730B 813F 98A9 5882 5E56 647D 6EEE 98AE 9AA0 6A19 719B 8198 8508 762D 78E6 9556 98D9 98DA 5126 98B7 700C 8B24 7202 81D5 85E8 8D06 93E2 7A6E 9573 98C6 98C7 98C8 9A43 9463 4BBD 9A6B 8868 5A4A 88F1 8AD8 9336 6AA6 893E 4FF5 9CD4 9C3E 98CA 8FB9 8FBA 782D 7B3E 63D9 7335 7F16 7178 7251 7502 7BAF 7DE8 8759 9089 937D 9CCA 97AD 908A 9BFE 9BFF 7C69 8D2C 6241 7A86 533E 60FC 8CB6 8439 78A5 7A28 7CC4 890A 9D18 85CA 535E 5F01 5325 5FED 6283 6C73 6C74 91C6 53D8 73A3 82C4 4FBF 5909 662A 3B53 898D 5FA7 7F0F 904D 959E 8FA1 7DF6 8251 8FA7 8FA8 8FA9 8FAB 8FAE 8FAF 8B8A 5CC5 709E 6C43 90A0 73A2 780F 5BBE 5F6C 68B9 50A7 658C 6915 6EE8 3EDE 7F24 69DF 7478 8C69 8CD3 8CD4 9554 5110 6FD2 6FF1 8668 8C73 6AB3 74B8 7015 9726 7E7D 944C 986E 6448 6BA1 8191 9AE9 64EF 9B02 6BAF 81CF 9ACC 9B13 9AD5 9B22 6C1E 6FF5 51AB 4ECC 4ED2 6C37 51B0 5175 63A4 4E19 6032 62A6 79C9 90B4 9643 661E 663A 67C4 70B3 82EA 997C 772A 7A89 3A00 86C3 6452 7980 7A1F 9235 927C 9905 9920 979E 5E76 34C8 4E26 4F75 5E77 5EB0 5002 6824 75C5 7ADD 504B 50A1 5BCE 68C5 8A81 9BA9 9750 57AA 9786 92F2 5CEC 5EAF 6661 900B 923D 8AA7 9CEA 8F50 91AD 535F 248F0 8865 54FA 6355 55B8 88DC 9D4F 4E0D 5E03 4F48 5425 6B65 5498 3635 6016 62AA 6B68 6B69 3CCD 67E8 949A 52CF 57D4 57D7 6091 6357 94B8 57E0 8379 90E8 74FF 8E04 8500 90F6 9914 9922 7BF0 7C3F FDD0-3106 5991 25419 241B5 7685 8DB4 8225 556A 8469 6777 722C 63B1 7436 7B62 6F56 5E0A 5E15 6015 8899 948B 5761 5CA5 6CCA 9887 6E8C 9255 9817 93FA 5A46 5619 8522 9131 76A4 8B08 6AC7 53F5 5C00 94B7 7B38 99CA 5CB6 7087 6540 6622 6D26 73C0 8FEB 70DE 7834 7836 91D9 7C95 84AA 9B44 9197 4A96 6CFC 6872 6F51 62CD 4FF3 5F98 6392 7305 68D1 724C 8F2B 7C30 7C32 72A4 5EF9 54CC 6D3E 3B5B 6E43 848E 9383 5478 36B0 600C 80A7 67F8 80DA 8843 9185 962B 57F9 966A 6BF0 8D54 952B 88F4 88F5 8CE0 99CD 4FD6 4F02 6C9B 4F69 5E14 59F5 65BE 65C6 6D7F 73EE 914D 7B29 4283 8F94 99B7 5D8F 9708 8F61 84DC 629B 62CB 812C 5228 5486 5789 5E96 72CD 70B0 722E 530F 888D 8EF3 9784 9E83 9E85 8DD1 5945 6CE1 70AE 75B1 76B0 7832 9EAD 791F 792E 8422 891C 5256 5A1D 6294 6299 634A 638A 88D2 7B81 9307 5485 54E3 5A44 7283 5ECD 3434 7705 7819 7568 6F58 6500 723F 6D00 76D8 8DD8 5ABB 5E4B 642B 69C3 84B0 76E4 78D0 7E0F 78FB 8E52 23066 700A 87E0 8E63 939C 97B6 51B8 5224 6C9C 62DA 6CEE 708D 53DB 7249 76FC 7554 8041 88A2 8A4A 6EBF 9816 92EC 897B 947B 9D65 55B7 5674 6B55 74EB 76C6 6E53 8450 5460 7FF8 55AF 4E53 6C97 80EE 96F1 6EC2 8196 4A26 9736 5390 5E9E 5396 65C1 9004 823D 5ACE 5FAC 249ED 8783 9CD1 9F8E 9F90 55D9 802A 89AB 7090 80A8 80D6 5309 36C1 6026 62A8 6072 39F8 7830 6888 70F9 7851 8EEF 959B 6F30 562D 6F8E 78DE 8283 670B 7AFC 5017 6337 580B 5F38 8391 5F6D 68DA 6916 787C 7A1D 9E4F 5873 6189 69F0 6A25 71A2 84EC 28083 8F23 7BE3 81A8 930B 97F8 9AFC 87DA 87DB 9B05 4D36 97FC 9D6C 9A2F 7E84 9B14 945D 6367 6DCE 768F 527B 63BD 692A 78B0 8E2B 7BF7 4E15 4F13 4F3E 6279 7EB0 576F 62AB 62B7 708B 72C9 90B3 7812 20731 6082 79DB 79E0 7D15 94CD 65C7 7FCD 801A 8C7E 9208 921A 9239 925F 9294 5288 78C7 99D3 9AEC 567C 930D 9B7E 9B8D 61B5 7914 7915 9739 76AE 34DF 9630 5CAF 6787 6BDE 72D3 80B6 8298 6BD7 6BD8 75B2 868D 5564 57E4 5D25 26A2D 86BD 86BE 8C7C 2821A 90EB 9674 7137 7435 813E 8157 9C8F 7F74 818D 8731 9B6E 58C0 7BFA 87B7 8C94 9D67 7F86 6707 9F19 5339 5E80 758B 4EF3 572E 82C9 8134 75DE 92A2 8AC0 9D04 64D7 567D 7656 4C26 56AD 5C41 6DE0 6E12 63CA 91FD 5AB2 5AD3 7765 8F9F 6F4E 7A2B 50FB 6FBC 568A 7513 4444 7588 8B6C 95E2 9DFF 9E0A 698C 6C15 6487 22CC2 6486 66BC 77A5 4E3F 82E4 9405 5AF3 527D 6153 7F25 98D8 65DA 7FF2 87B5 72A5 98C3 98C4 9B52 5AD6 74E2 7AC2 85B8 95DD 6B8D 5F6F 779F 7BFB 7E39 91A5 76AB 9860 7968 50C4 52E1 560C 5FB1 6F02 3B13 56E8 504F 5AA5 728F 7BC7 7FE9 9342 9DA3 9A88 80FC 8141 6944 6969 8CC6 8DF0 8ADA 8E41 99E2 9ABF 9A08 8991 8C1D 8CB5 8ADE 7247 9A97 9A17 9A19 9B78 59D8 62FC 3866 7917 7A66 99AA 9A5E 73AD 8D2B 5A26 8CA7 7415 5AD4 9891 983B 5B2A 7371 85B2 56AC 77C9 8819 98A6 9870 54C1 6980 725D 6C56 8058 4E52 7539 4FDC 5A09 6D84 782F 8060 8275 7AEE 9829 29A4D 5E73 8BC4 51ED 546F 576A 6CD9 5C4F 5E21 67B0 6D34 73B6 80D3 82F9 90F1 3EB8 3EC2 8353 5C5B 5E32 6DDC 74F6 86B2 5E48 7129 7F3E 840D 86E2 8A55 7501 84F1 8EFF 9C86 51F4 4202 617F 7BB3 8F27 6191 9B83 6A98 7C08 860B 5CBC 5840 4EC6 6534 6251 9660 5657 64B2 6F7D 64C8 9BC6 3EAA 530D 812F 8386 83D0 83E9 8461 50D5 84B1 84B2 917A 58A3 735B 749E 6FEE 77A8 7A59 423B 9564 258C8 7E80 8965 93F7 5724 6734 5703 6D66 70F3 666E 6EA5 8C31 8AE9 6A38 6C06 6A8F 9568 8B5C 8E7C 9420 94FA 8216 8217 92EA 3B25 7011 66DD 5DEC 5DED 99C7 8D0C FDD0-3107 5463 5988 5B56 5ABD 5B24 5B37 9EBB 75F2 7298 8534 87C7 9A6C 3437 739B 7801 8682 99AC 6EA4 746A 78BC 879E 93B7 9C22 9DCC 72B8 6769 7943 9581 9A82 551B 508C 7341 561C 3A38 69AA 7770 79A1 7F75 372B 99E1 7923 9B15 4E87 5417 55CE 561B 5AF2 9064 87C6 6478 8C1F 998D 5AEB 9EBD 6469 6479 6A21 819C 6A45 78E8 7CE2 56A4 64F5 8B28 56A9 56B0 9943 8611 5298 9ACD 9B54 40FA 995D 62B9 61E1 4A4B 672B 52B0 573D 59BA 5E13 6B7E 6B7F 6B81 6CAB 248FB 5E1E 6629 67BA 8309 964C 551C 768C 771C 773F 781E 79E3 773D 7C96 7D48 8388 83AB 6E50 86E8 8C83 8C8A 55FC 587B 5BDE 6F20 734F 84E6 9286 977A 5AFC 66AF 3C73 9ED9 7790 9546 9B69 58A8 763C 7799 9ED8 700E 87D4 8B29 8C98 7205 85E6 93CC 7933 7E86 9A40 8031 5E85 603D 5C1B 9B79 9EBF 4E48 9EBC 5692 569C 6FF9 7666 57CB 3725 85B6 973E 4E70 836C 8CB7 562A 8552 9DF6 52A2 4F45 58F2 8FC8 9EA6 5356 8109 8108 9EA5 8847 52F1 8CE3 9081 9721 9722 2A133 5445 5746 6C92 6CA1 679A 73AB 6802 7709 82FA 5A12 8104 6885 73FB 8122 8393 5833 5A92 5D4B 6E44 6E48 7338 7742 90FF 6963 6973 7164 7442 847F 587A 69D1 7996 9176 9545 9E5B 92C2 9709 7A48 5FBE 9387 77C0 6517 9DA5 862A 9EF4 6BCE 6BCF 51C2 7F8E 6334 6D7C 5A84 5D44 6E3C 5ABA 815C 9541 5B0D 71D8 9382 9EE3 59B9 62BA 6CAC 65C0 6627 3B51 771B 7959 8882 5A9A 5BD0 75D7 8DCA 715D 9B3D 7778 97CE 7BC3 875E 9B45 8EBE 732B 8C93 6BDB 77DB 6786 7266 8305 8306 65C4 7F5E 515E 8EDE 9155 5825 6E35 28968 951A 9AE6 5AF9 6C02 729B 8765 9AF3 87CA 9328 9D9C 5187 536F 5918 4E6E 623C 36B9 5CC1 6CD6 6634 94C6 7B37 84E9 5183 7683 5190 82BC 5192 67D5 770A 8302 8D38 8004 88A4 8992 5AA2 5E3D 8CBF 6117 6693 6959 6BF7 7441 843A 7780 8C8C 911A 8750 912E 61CB 54DE 725F 4F94 52BA 3B4C 6048 6D20 7738 8C0B 86D1 7F2A 8E0E 927E 8B00 77B4 7E46 936A 9D3E 9EB0 67D0 26CD1 5ADA 989F 59CF 6097 34BC 86EE 50C8 8C29 6172 9992 6A20 7792 779E 9794 25C91 8B3E 9945 9CD7 9862 9B17 9B18 9C3B 883B 5C58 6E80 774C 6EE1 6EFF 87A8 87CE 8954 93CB 77D5 66FC 3B05 5881 5E54 6162 6471 6F2B 734C 7F26 9124 69FE 71B3 8504 8513 3862 6FB7 9558 7E35 93DD 2914D 4555 2414E 8630 95E8 626A 73A7 9494 9580 9585 636B 83DB 748A 9346 4EB9 864B 95F7 7116 60B6 66AA 71DC 61D1 61E3 4EEC 5011 691A 7264 5402 5FD9 6C52 9099 5C28 6757 6767 8292 6C13 76F2 7B00 54E4 5A0F 5EAC 3936 607E 6D5D 72F5 832B 727B 3ECA 91EF 94D3 75DD 786D 86D6 420D 23677 92E9 99F9 29DF6 83BD 7865 833B 83BE 58FE 6F2D 3B12 87D2 880E 753F 867B 51A1 8394 840C 8420 4004 76DF 8499 8771 511A 6A57 750D 77A2 8544 9133 5E6A 61DE 66DA 6FDB 9138 6726 6AAC 6C0B 4443 4445 9BCD 77C7 791E 9E72 8268 8609 77D2 973F 9740 995B 986D 9F06 9E0F 52D0 731B 74FE 4045 9530 824B 8722 9333 61DC 7374 61F5 9BED 8813 5B5F 20D7C 68A6 6E95 5922 5923 44DD 9725 3734 63B9 64DD 54AA 772F 7787 519E 5F25 7F59 7962 8FF7 7315 8C1C 8A78 84BE 5F4C 64DF 7CDC 7E3B 8B0E 919A 9E8A 9E8B 79B0 9761 3737 7030 737C 9E9B 6202 6520 74D5 957E 7222 4577 863C 91BE 91BF 9E0D 91C4 7C73 8288 4F8E 6CB5 7F8B 5F2D 6D23 6549 772B 8112 6E33 845E 92A4 851D 6FD4 5B4A 7056 5196 7CF8 6C68 6C95 5B93 6CCC 89C5 5CDA 5BBB 7955 79D8 5BC6 6DE7 6DFF 8993 8994 5E42 8C27 5853 5E4E 3A20 899B 5627 6993 6EF5 6F1E 7190 871C 6A12 8524 9F0F 51AA 5E66 6FD7 8B10 6AC1 7C1A 85CC 7F83 4E5C 5400 54A9 54F6 5B6D 706D 70D5 8995 6423 6EC5 8511 9D13 7BFE 858E 5E6D 61F1 6AD7 881B 884A 9456 9C74 55B5 82D7 3464 5A8C 63CF 9E4B 7784 7DE2 9D93 9C59 676A 7707 79D2 6DFC 6E3A 7F08 7BCE 7DF2 85D0 9088 5999 5E99 7385 7AD7 5EBF 5EDF 8C2C 8B2C 5B80 8287 7720 5A42 7EF5 5A94 68C9 7DBF 7DDC 81F1 8752 5B35 6AB0 6ACB 77C8 77CA 77CF 4E0F 6C45 514D 6C94 9EFE 52C9 7704 5A29 3743 506D 5195 52D4 6E11 5595 6110 6E4E 7F05 7D7B 817C 8442 9EFD 3EF0 7DEC 9EAB 6FA0 9BB8 9763 9762 7CC6 9EAA 9EBA 9EB5 6C11 59C4 5CB7 5FDE 600B 65FB 65FC 73C9 76FF 7807 82E0 7F60 5D0F 636A 7418 7F17 656F 7449 75FB 7888 9231 7DCD 4AB8 7DE1 9309 9D16 9372 76BF 51BA 5221 95F5 62BF 6CEF 52C4 6543 95FD 60AF 654F 7B22 60FD 6E63 9594 610D 3B06 668B 95A9 50F6 615C 61AB 6F63 7C22 2704B 9CD8 8820 9C35 2A134 578A 7B3D 540D 660E 9E23 6D3A 7700 51A5 8317 6719 7733 94ED 5AC7 6E9F 733D 910D 669D 69A0 84C2 9298 9CF4 7791 879F 89AD 4AE4 4F72 59F3 51D5 614F 9169 547D 6927 8A7A 63B5 6BEA 58B2 6C01 6BCD 4EA9 7261 5776 59C6 5CD4 7273 7546 7552 80DF 755D 755E 782A 756E 27FF9 20E96 9267 8E07 6728 4EEB 6730 76EE 6C90 72C7 7091 7267 82DC 6BE3 869E 94BC 83AF 96EE 52DF 3708 6958 7766 926C 5893 5E55 5E59 6154 6155 66AE 8252 9702 7A46 7E38 97AA 51E9 62C7 FDD0-3108 53D1 6CB7 767A 50A0 767C 5F42 9166 91B1 4E4F 4F10 59C2 57A1 6D4C 75BA 7F5A 9600 6830 781D 8337 7B4F 7782 7F70 95A5 7F78 6A43 85C5 4F71 6CD5 704B 73D0 743A 9AEA 9AEE 855F 27B0B 9345 4ECF 5772 68BB 98DE 5983 975E 98DB 5561 5A53 6E04 7EEF 291EB 6249 7306 83F2 975F 7DCB 871A 88F6 970F 9CB1 9925 99A1 9A11 9A1B 98DD 80A5 6DDD 8153 4208 8730 87E6 670F 532A 8BFD 595C 60B1 6590 68D0 69A7 7FE1 8AB9 7BDA 855C 2913C 5420 5E9F 676E 6CB8 72D2 80BA 82BE 6632 80C7 8D39 4FF7 5255 539E 75BF 5C5D 966B 5EC3 3E43 8409 8CBB 75F1 9544 5EE2 66CA 4935 7648 9F23 6FF7 4C01 6AE0 9BE1 9428 9745 5A54 6683 7D11 88E6 7F36 5426 599A 7F39 7F3B 6B95 96EC 9D00 5E06 8A09 756A 52EB 5643 5B0F 5E61 61A3 65D9 8543 65DB 7E59 7FFB 85E9 8F53 98BF 7C53 98DC 9C55 51E1 51E2 51E3 3836 5FDB 674B 77FE 7C75 9492 67C9 70E6 8227 7B32 68E5 6E22 7169 7DD0 58A6 6A0A 6A4E 71D4 74A0 81B0 7E41 85A0 7FB3 894E 8E6F 702A 703F 792C 9407 9422 8629 881C 9DED 53CD 6255 8FD4 484A 91E9 201A9 6C3E 72AF 597F 6C4E 996D 6CDB 8D29 7548 8303 4000 8ED3 5A4F 68B5 3D00 76D5 7B35 8CA9 8EEC 98EF 98F0 6EFC 5B0E 7BC4 8224 5206 5429 5E09 7EB7 6610 6C1B 82AC 54DB 517A 7D1B 7FC2 886F 515D 8A1C 915A 68FB 9216 96F0 3B1F 6706 71D3 9934 9959 575F 59A2 5C8E 6C7E 670C 678C 7083 80A6 7F92 86A0 86A1 68A4 68FC 711A 999A 84B6 58B3 5E69 6FC6 9B75 6A68 71CC 8561 8C6E 96AB 9F22 7FB5 9F16 8C76 8F52 943C 99A9 9EC2 7C89 9EFA 4EFD 5F05 594B 5FFF 79CE 507E 6124 7CAA 50E8 61A4 596E 81B9 7CDE 9CBC 7035 9C5D 7AD5 8EAE 531A 65B9 6C78 90A1 678B 7265 82B3 94AB 8684 6DD3 9201 9D0B 59A8 9632 623F 80AA 57C5 9C82 9B74 9C1F 4EFF 8BBF 5F77 7EBA 6609 6618 74EC 7706 5023 65CA 7D21 822B 8A2A 9AE3 9DAD 653E 8DBD 574A 580F 933A 4E30 98CE 4EF9 51E8 51EC 59A6 6CA3 6CA8 51EE 67AB 5C01 75AF 76FD 781C 98A8 36D4 5CEF 5CF0 44A0 5051 687B 70FD 5D36 7326 950B 6953 728E 8451 8702 760B 78B8 50FC 7BC8 92D2 9137 6A92 95CF 8C50 93E0 34A5 5BF7 3826 7043 9146 973B 8634 882D 974A 98CC 9EB7 51AF 5906 6340 6D72 9022 5838 99AE 7D98 8242 3980 6453 6F28 3D6F 8BBD 552A 8982 8AF7 51E4 5949 752E 4FF8 6E57 7128 7148 7F1D 8D57 9CEF 9CF3 9D0C 8CF5 7E2B 7412 6E84 93BD 8615 8985 4F15 544B 598B 909E 59C7 739E 80A4 6024 67CE 7806 57BA 5A10 5C03 8342 886D 65C9 3B6A 7D28 8374 8DBA 9EB8 75E1 7A03 8DD7 9207 7B5F 7D92 5B75 8C67 911C 6577 819A 9CFA 9EA9 7CD0 9EAC 9EB1 61EF 4E40 5DFF 5F17 4F0F 51EB 7536 4F5B 51B9 521C 5B5A 6276 5488 5CAA 5F7F 602B 62C2 670D 678E 6CED 7EC2 7ECB 8299 82A3 4FD8 5798 3A84 67EB 6C1F 6D11 70A5 73B8 7549 7550 7F58 82FB 8300 97E8 54F9 683F 6D6E 7829 7953 832F 86A8 90DB 5310 6874 6DAA 70F0 7408 7B26 7B30 7D31 7D3C 7FC7 8274 83A9 8659 5E45 68F4 7D65 7F66 83D4 7CB0 7D8D 8240 844D 8709 8F90 9258 925C 98AB 9CE7 6991 798F 7A2A 7B99 97CD 5E5E 6F93 8760 9AF4 8AE8 8E3E 8F3B 9B84 9D14 7641 29732 9EFB 8946 9D69 9D9D 5452 629A 4E76 5E9C 5F23 62CA 65A7 4FCC 4FDB 80D5 9CEC 4FEF 90D9 91DC 91E1 636C 8F85 7124 76D9 8151 6ECF 8705 42E8 8150 8F14 5638 64A8 64AB 982B 9B34 7C20 9EFC 2ECF 2ED6 961D 7236 8BA3 4ED8 5987 8D1F 577F 3914 7ACE 961C 9644 9A78 590D 5CCA 8A03 8CA0 8D74 3931 7954 86A5 965A 5069 51A8 526F 5A66 86B9 889D 5A8D 5BCC 5FA9 3DC6 79FF 86D7 8A42 8D4B 5711 6931 7F1A 8179 842F 9C8B 8D59 4B7B 3B3C 7DEE 875C 876E 8907 8914 8CE6 99D9 5B14 7E1B 8567 8F39 9B92 8CFB 9351 9362 9CC6 8986 99A5 4600 9C12 204D7 592B 752B 5490 915C 5085 6928 88B1 8984 79A3 9BB2 FDD0-3109 5491 54D2 8037 8345 7B1A 55D2 642D 2143F 6498 5660 265BF 8921 939D 8FBE 547E 59B2 601B 6C93 8FD6 709F 7F8D 7557 7563 7B2A 8359 5273 5312 7B54 8A5A 9039 9054 9618 977C 9791 8598 9389 87FD 8E82 943D 97C3 9F96 9F98 6253 5927 6C4F 7714 57AF 58B6 7629 71F5 7E68 561A 392B 6074 6DC2 60EA 68CF 951D 5FB3 5FB7 9340 5730 7684 5F97 8126 5446 5454 7343 61DB 6B79 50A3 902E 3432 4EE3 8F6A 20C3A 5788 5CB1 5E12 7519 7ED0 9A80 5E26 5F85 6020 67CB 6B86 73B3 8D37 8FE8 5E2F 8ED1 57ED 5E36 7D3F 888B 8EDA 3ED6 8CB8 8EE9 7447 5ED7 4206 53C7 3BC2 7DFF 66C3 9D0F 6234 26102 825C 9EDB 7C24 8E5B 703B 9734 9EF1 8976 9746 9B98 2E88 5200 5202 53E8 5FC9 6737 6C18 8220 91D6 9C7D 9B5B 636F 5BFC 5C9B 5CF6 6363 7977 6417 7982 3800 5D8B 5D8C 3A36 969D 5C0E 58D4 5DB9 64E3 8E48 96AF 79B1 5230 5012 60BC 7118 76D7 76DC 83FF 9053 7A32 7B8C 7FE2 7A3B 885C 5675 885F 6AA4 71FE 4326 7FFF 8EC7 74D9 7E9B 5C76 9666 6921 69DD 543A 5517 515C 90FD 5160 8538 6A77 7BFC 6296 9627 6793 67A1 551E 86AA 9661 9204 6597 8C46 6D62 90D6 997E 9B25 68AA 6BED 8130 8373 9017 9158 75D8 9597 7AA6 4B26 9B26 9916 65A3 2109D 95D8 4546 7AC7 9B2A 9B2C 9B2D 4E67 8254 4E39 5989 5355 62C5 5358 7708 7803 803C 803D 449F 8043 8EAD 90F8 55AE 5A85 6B9A 7605 5330 7BAA 9815 510B 52EF 891D 9132 64D4 6BAB 7649 7514 7C1E 894C 8078 4F14 5210 628C 73AC 74ED 80C6 75B8 7D1E 8874 63B8 8D55 4EB6 64A2 64A3 6FB8 9ED5 81BD 9EEE 65E6 4F46 5E0E 6C8A 72DA 8BDE 67E6 758D 5556 5557 5F39 60EE 6DE1 86CB 557F 5F3E 6C2E 8145 840F 89DB 35D6 7A9E 50E4 8711 99BE 9AE7 563E 5649 5F48 619A 8A95 61BA 66BA 6FB9 84DE 9D20 79AB 99F3 765A 56AA 7E75 8D09 972E 994F 4A35 6CF9 6265 627D 5F53 73F0 7B5C 88C6 7576 5679 6FA2 74AB 7C39 8261 87F7 8960 6321 515A 8C20 64CB 8B61 9EE8 6529 7059 6B13 8B9C 6C39 51FC 5735 5B95 7800 57B1 6863 8361 5A78 6113 83EA 5D63 74FD 903F 96FC 78AD 5105 6F52 778A 8DA4 58CB 8569 6A94 7497 76EA 7911 7C1C 862F 95E3 94DB 943A 706F 767B 8C4B 5654 5B01 71C8 7492 7AF3 7C26 89B4 8E6C 6729 7B49 6225 9093 51F3 58B1 5D9D 9127 96A5 77AA 78F4 956B 6AC8 9419 8260 6C10 4EFE 4F4E 5943 5F7D 7F9D 889B 5824 8D86 9684 6EF4 6A00 955D 78FE 9349 97AE 72C4 5EF8 7C74 82D6 8FEA 5519 654C 6DA4 6891 7B1B 837B 89CC 976E 99B0 9AE2 5600 5AE1 6ECC 7FDF 9814 6575 850B 8510 4A00 5681 7BF4 4A24 8C74 8E62 9B04 85E1 93D1 42AE 7CF4 89BF 9E10 538E 5758 8BCB 5467 5E95 5F24 62B5 62DE 90B8 963A 67E2 7274 830B 7825 57DE 638B 3B7D 83E7 89DD 8A46 8EE7 805C 9AB6 5754 5F1F 65F3 6755 7393 601F 4FE4 5E1D 57CA 5A23 5059 5547 5572 688A 710D 73F6 7731 7B2C 8C1B 9012 9013 91F1 5A82 68E3 6E27 7747 7976 7F14 83C2 50C0 8163 8482 926A 5891 6455 78B2 7998 8743 905E 58AC 6178 7DE0 8515 9070 5DB3 750B 8AE6 8E36 87AE 9BF3 55F2 7239 8DCC 893A 57A4 5CCC 604E 6315 6633 7ED6 80C5 82F5 8FED 74DE 7723 621C 43F2 8C0D 558B 581E 60F5 63F2 7573 7D70 800B 81F7 8A44 8D83 957B 53E0 6B9C 7243 7252 5D7D 789F 8728 8253 8776 890B 22DA3 8ADC 8E40 9CBD 3B2A 66E1 7589 9C08 758A 6C0E 54CB 800A 7730 5E49 7582 5201 53FC 6C48 866D 51CB 595D 5F34 5F6B 86C1 7431 8C82 7889 9CED 6BA6 7797 96D5 9B89 9CB7 9F26 9BDB 9D70 625A 5C4C 5F14 4F04 540A 9493 7A8E 8A0B 8C03 6389 91E3 94DE 94EB 7AE8 92B1 96FF 9B61 84E7 8ABF 7639 7AB5 92FD 85CB 9443 7C13 4E1F 4E22 20C8D 94E5 92A9 7538 6541 20DA7 6382 508E 53A7 5D6E 6EC7 69C7 69D9 7628 98A0 8E4E 5DC5 985A 985B 766B 5DD3 5DD4 6527 7672 9F7B 5178 594C 70B9 5A70 7320 4344 655F 8DD5 7898 84A7 8E2E 8547 9EDE 56B8 7535 4F43 576B 5E97 963D 57AB 6242 73B7 94BF 5A5D 60E6 6DC0 5960 7414 6BBF 8714 96FB 588A 58C2 6A42 6A5D 6FB1 975B 24A71 765C 7C1F 9A54 6923 4E01 4EC3 53EE 5E04 738E 7594 76EF 9489 8035 8670 914A 91D8 976A 5975 9876 9802 3AC0 9F0E 5D7F 9F11 6FCE 85A1 9424 8BA2 5FCA 9964 77F4 5B9A 8A02 98E3 5576 94E4 6917 815A 7887 952D 78A0 874A 92CC 9320 78F8 9841 8423 8062 53BE 21C2A 5262 9607 7763 561F 918F 95CD 6BD2 72EC 6D9C 8BFB 6E0E 691F 3C69 724D 728A 78A1 88FB 8AAD 8773 7368 9316 51DF 5335 5B3B 7006 6ADD 6BB0 7258 72A2 74C4 76BE 9A33 9EE9 8B80 8C44 8D15 97E3 945F 9AD1 97C7 97E5 9EF7 8B9F 7B03 5835 5E3E 8D4C 743D 7779 89A9 8CED 7BE4 5992 675C 809A 828F 59AC 5EA6 79FA 8370 6E21 976F 9540 29D5A 8799 6BAC 934D 7C35 8827 8839 591A 591B 5484 54C6 7553 525F 5D1C 6387 6560 6BF2 88F0 5689 593A 94CE 526B 6553 655A 55A5 60B3 656A 75E5 922C 596A 51D9 8E31 9BB5 9438 6736 54DA 579B 579C 6305 6306 57F5 7F0D 692F 8D93 8EB1 8EB2 7D9E 492A 619C 4EB8 937A 8EC3 56B2 5972 5234 5241 9973 5C2E 67C1 67EE 70A8 964A 964F 6857 5815 8235 60F0 8DE2 8DE5 8DFA 98FF 3EE7 58AE 58AF 5D9E 9D7D 6735 67A4 5796 5806 5860 5D5F 75FD 78D3 9D2D 941C 3A03 9827 5BF9 961F 514A 514C 5151 5BFE 603C 794B 966E 968A 7893 41CF 7D90 5C0D 619E 619D 6FE7 9566 61DF 3B23 85B1 7029 8B48 8968 9413 8011 5073 526C 5A8F 7AEF 890D 9374 22B43 77ED 6BB5 65AD 5845 7F0E 6934 7145 7456 8176 846E 78AB 953B 7DDE 6BC8 7C16 935B 65B7 8E96 7C6A 5428 60C7 6566 8733 58A9 58AA 64B4 7364 5678 6489 6A54 729C 7905 453B 8E72 8E7E 9A50 233B4 76F9 8DB8 8E89 4F05 56E4 5E89 6C8C 7096 76FE 7818 949D 9007 987F 920D 696F 9041 9813 6F61 906F 71C9 8E32 78B7 4E1C 51AC 549A 36B5 5CBD 6771 6638 6C21 82F3 5032 9E2B 57EC 5A3B 5D20 5D2C 6DB7 7B17 5F9A 6C2D 83C4 29093 8740 9D24 9F15 9BDF 9D87 3A02 8463 58A5 7BBD 8ACC 5B1E 23FC5 856B 61C2 52A8 51BB 4F97 578C 59DB 5CD2 606B 630F 680B 6D1E 80E8 51CD 6219 80F4 8FF5 52D5 7850 68DF 6E69 7D67 8156 50CD 99E7 9718 9B97 9DAB FDD0-310A 4ED6 5B83 5979 7260 7942 94CA 8DBF 584C 6EBB 6999 891F 5683 95E7 8E79 5854 6E9A 5896 35F3 736D 9CCE 737A 9C28 4EA3 62D3 631E 72E7 95FC 20D32 36E5 5D09 6DBE 3B7C 6428 40BF 8DF6 69BB 6BFE 420B 905D 9062 3493 79A2 8ABB 8E0F 64BB 6FBE 9314 6A7D 6FCC 8E4B 979C 9B99 3FF9 95D2 97B3 56BA 8B76 95E5 2A601 8EA2 4FA4 549C 5FD1 5FD2 7279 8CA3 86AE 94FD 615D 92F1 87A3 87D8 56FC 5B61 80CE 51AD 53F0 65F2 576E 62AC 90B0 67B1 70B1 70B2 82D4 83ED 8DC6 3B03 9C90 7B88 81FA 98B1 421A 99D8 5113 9B90 5B2F 64E1 3E00 6AAF 85B9 7C49 592A 5933 5FF2 6C70 6001 80BD 949B 6CF0 8226 48ED 915E 9226 6E99 614B 71E4 7C8F 5932 5F22 6D9B 7EE6 638F 8A5C 5ACD 5E4D 6146 642F 6ED4 7D5B 69C4 746B 97EC 98F8 4231 7E1A 7E27 6FE4 8B1F 8F41 493E 97B1 97DC 9955 530B 54B7 6D2E 8FEF 6843 9003 5555 68BC 6DD8 413B 7EF9 9676 8404 7979 7DAF 872A 88EA 9780 9184 9789 92FE 932D 99E3 6AAE 9940 9A0A 9F17 8BA8 8A0E 5957 5077 5078 5A7E 5AAE 92C0 936E 4EA0 5934 6295 9AB0 7DF0 982D 59B5 94AD 7D0F 3A97 6568 98F3 9EC8 8623 900F 7D89 574D 3631 62A9 8D2A 6039 75D1 8211 8CAA 644A 6EE9 762B 64F9 6524 7058 7671 575B 212A8 6619 5013 8C08 5A52 60D4 90EF 8983 6983 75F0 952C 8C2D 58B0 58B5 619B 6F6D 8AC7 9188 58C7 66C7 71C2 931F 9924 6A80 78F9 9843 7F48 58DC 85EB 8B5A 8C9A 91B0 8B60 7F4E 5FD0 5766 43D9 94BD 8892 6BEF 83FC 47A1 926D 55FF 61B3 61BB 9193 74AE 8962 53F9 70AD 57EE 63A2 509D 6E60 50CB 5606 78B3 8215 6B4E 8CE7 6C64 5763 94F4 6E6F 5621 8025 528F 7FB0 876A 47B6 4800 9557 859A 8E5A 93DC 940B 97BA 9F1E 9967 5510 5802 508F 557A 3B7B 68E0 347D 5858 370D 642A 6E8F 910C 69B6 6F1F 717B 746D 8185 84CE 969A 6A18 2365F 78C4 799F 7CC3 819B 6A56 7BD6 7CD6 8797 8E3C 7CDB 87B3 8D6F 91A3 9933 424E 9395 9939 95DB 9944 28189 9DB6 4F16 5E11 5018 5052 6DCC 50A5 8EBA 954B 93B2 513B 6203 66ED 7223 77D8 9482 70EB 6465 8D9F 71D9 71A5 81AF 9F1F 75BC 75CB 5E50 817E 8A8A 6F1B 6ED5 7E22 9086 99E6 8B04 512F 85E4 9A30 7C50 9C27 7C58 9A63 972F 8645 5254 68AF 3538 9511 8E22 64FF 9DC8 9DC9 5397 82D0 7EE8 8351 504D 557C 5D39 60FF 63D0 7A0A 7F07 7F64 9E48 55C1 7445 7D88 9046 78AE 5FB2 6F3D 7DF9 876D 8906 92BB 9898 855B 8DA7 8E44 918D 8B15 8E4F 9357 9CC0 9D3A 984C 9BB7 9D5C 9A20 9BF7 9D97 9D99 79B5 9DE4 4F53 632E 8EB0 9AB5 9BA7 8EC6 9AD4 623B 239C2 8FCF 5243 6711 6D1F 501C 608C 6D95 6090 60D5 63A6 9016 60D6 63E5 66FF 9037 6974 88FC 6B52 6BA2 8905 9AF0 3B31 568F 8599 9B00 5694 74CB 7C4A 8DAF 4D91 5C49 5C5C 7B39 5D5C 5E16 6017 8D34 8051 841C 8CBC 94C1 86C8 50E3 9295 92E8 9D29 9421 9435 9A56 546B 98FB 4D34 992E 65EB 4F7B 5EA3 604C 6311 7967 3B38 804E 8280 6761 5CA7 5CB9 8FE2 7952 689D 7B24 8414 47ED 8D92 9F86 84DA 8729 6A24 84E8 92DA 9AEB 9CA6 9797 93A5 9BC8 9F60 9C37 5BA8 6640 6713 3E20 8101 7A95 8A82 4837 7AB1 65A2 5B25 773A 7C9C 7D69 899C 8DF3 7CF6 87A9 5929 5172 5A56 6DFB 915F 9754 42EC 3B32 9EC7 975D 7530 5C47 6CBA 606C 754B 7551 76F7 80CB 7560 751B 751C 6E49 83FE 4852 5861 586B 6437 923F 9617 7DC2 78CC 7AB4 74B3 95D0 9DC6 9DCF 5FDD 6B84 500E 35AD 553A 3649 60BF 6DDF 666A 7420 8146 89CD 75F6 7753 8214 9902 89A5 8CDF 932A 9766 9369 3401 63AD 777C 821A 78B5 9D2B 5385 5E81 6C40 827C 542C 753A 8013 539B 70C3 686F 70F4 7D8E 42FC 9793 8074 5EF0 807C 807D 5EF3 9092 5EF7 4EAD 5EAD 505C 839B 5A77 5D49 6E1F 695F 7B73 8476 8713 69B3 8064 874F 95AE 9706 8AEA 9F2E 2123C 5722 753C 4FB9 5A17 633A 6D8F 6883 70F6 73FD 8121 988B 8247 8A94 9832 2A2B6 51F8 5B8A 79BF 79C3 6022 7A81 550B 6D8B 6378 5817 6E65 75DC 8456 5D80 92F5 9D5A 9F35 56F3 56FE 51C3 5CF9 5EA9 5F92 6087 6348 5C60 688C 3ECC 837C 9014 63EC 3B78 7A0C 83DF 5715 5857 5D5E 23225 760F 7B61 816F 922F 5716 5717 5EDC 6F73 84A4 8DFF 9174 48DD 999F 934E 99FC 9D4C 9D9F 9DCB 9DF5 571F 5721 5410 948D 91F7 514E 5154 8FCC 580D 9D75 6C62 6D82 83B5 4E47 4EDB 8BAC 6258 6261 6C51 9966 6754 4F82 5483 62D5 62D6 6CB0 6329 635D 8A17 6DB6 812B 8131 838C 88A5 98E5 9B60 9A5D 9A6E 4F57 5768 5CAE 6CB1 6CB2 72CF 9640 9641 8FF1 7823 7824 9E35 7D3D 8889 5836 8DCE 9161 99B1 69D6 78A2 4B7E 99C4 99DE 6A50 9B80 9D15 9F27 9A28 9F0D 9A52 9F09 5F75 59A5 5EB9 5AA0 692D 6955 5AF7 6A62 9D4E 9B0C 9C16 67DD 6BE4 553E 841A 8DC5 6BFB 7BA8 8600 7C5C 9A7C 99DD 63A8 84F7 85EC 5F1A 4003 9893 5C35 96A4 9839 983A 983D 9B4B 7A68 8E6A 8608 3FD7 4FC0 50D3 817F 8E46 9ABD 4FBB 5A27 9000 717A 86FB 8715 892A 99FE 6E4D 732F 7153 474E 8C92 4D4E 56E2 56E3 629F 5278 5718 6171 6476 6F19 69EB 7BFF 6AB2 93C4 7CF0 9DD2 9DFB 7583 5F56 6E6A 8916 541E 5451 6D92 554D 671C 711E 564B 66BE 3B3F 9ED7 5C6F 5749 5FF3 9968 829A 8C58 8C5A 8ED8 98E9 9C80 9B68 3A54 9715 81C0 81CB 6C3D 757D 65FD 56F2 70B5 75CC 901A 55F5 84EA 4EDD 540C 4F5F 5F64 5CC2 5E9D 54C3 5CDD 72EA 664D 6850 6D75 70D4 783C 833C 8692 772E 79F1 94DC 7AE5 7CA1 26A34 7B69 8A77 8D68 916E 9256 50EE 52ED 9275 9285 9907 9C96 6F7C 735E 66C8 6723 6A66 6C03 71D1 729D 81A7 3F3F 77B3 9BA6 2648D 4D00 7EDF 6345 3A8C 6876 7B52 7D71 7D82 6A0B 6078 75DB 8855 615F 6185 FDD0-310B 55EF 62CF 62FF 6310 55F1 954E 93BF 4E78 54EA 96EB 59A0 7EB3 90A3 80AD 94A0 5A1C 7D0D 8872 637A 7B1D 25E49 88A6 8C7D 8EDC 8C80 9209 9779 84B3 24E3B 9B76 422B 7592 8BB7 6290 7732 8A25 5436 5450 5462 8149 718B 6468 5B7B 4E43 5976 6C16 827F 7593 59B3 5EFC 5037 8FFA 91E2 5B2D 5948 67F0 800F 8010 217AB 6E3F 8418 9F10 879A 8926 933C 5A1E 9981 812E 8147 9912 9BBE 9BD8 5167 5185 343B 6C1D 9317 5B6C 5476 6013 6320 5CF1 7847 94D9 7331 86F2 8A49 7899 6493 5DA9 61B9 87EF 5912 8B4A 9403 5DCE 57B4 607C 60A9 8111 5318 5816 60F1 5AD0 7459 8166 78AF 4700 7376 737F 95F9 5A65 6DD6 9599 9B27 81D1 8133 7FBA 5542 69C8 8028 7373 6ABD 9392 941E 8B73 56E1 7537 678F 67AC 4FBD 5357 67DF 5A1A 7558 96BE 83AE 5583 6694 6960 8AF5 96E3 27574 8D67 63C7 6E73 8169 8433 4212 877B 6201 266DA 5A7B 3B2E 9056 6041 5AE9 5AF0 56D4 4E6A 56A2 8B68 56CA 8830 9B1E 9995 6B1C 9962 64C3 66E9 652E 7062 513E 9F49 80FD 20E4C 28D99 59AE 5C3C 576D 37BE 6029 6CE5 7C7E 502A 5C54 79DC 94CC 57FF 5A57 6DE3 730A 86AD 4626 90F3 68FF 249A4 46CF 8DDC 815D 8063 873A 89EC 8C8E 8F17 9713 9CB5 9BD3 9BE2 9E91 9F6F 81E1 4F31 4F60 62B3 62DF 72D4 67C5 82E8 65CE 6672 5B74 922E 999C 5117 511E 64EC 96AC 6AB7 85BF 807B 5C70 6C3C 4F32 23CB7 6635 80D2 8FE1 7724 9006 533F 5804 60C4 6135 6EBA 7768 817B 5ADF 66B1 8ABD 4065 7E0C 81A9 5B3A 2A65B 88AE 634F 63D1 82F6 5E07 26612 573C 67BF 6D85 75C6 8042 81EC 9667 556E 60D7 55A6 655C 6E7C 83CD 9689 55EB 5D72 8E02 565B 6470 69F7 8E17 954A 954D 5DAD 7BDE 81F2 931C 989E 8E51 5699 8076 93B3 95D1 5B7C 3738 5B7D 6AF1 7C4B 56C1 8616 9F67 23033 7CF1 8825 9448 7CF5 56D3 8B98 8EA1 9477 9873 9480 4BC0 5DD5 9E1F 8311 3B64 8885 9CE5 5ACB 88CA 6A22 8526 5B1D 892D 5B32 3735 5C3F 8132 599E 2EA7 725B 6C7C 5FF8 626D 72C3 7EBD 7084 94AE 7D10 83A5 9215 9775 8842 42F4 725C 62C8 852B 5E74 79CA 79E5 9C87 9B8E 9CB6 9ECF 9BF0 6D8A 637B 6DF0 713E 8DC8 8F87 8F97 649A 64B5 78BE 8F26 7C10 8E4D 6506 8E68 8E8E 5344 5EFF 5FF5 59E9 5538 57DD 824C 9F30 54D6 9D47 56DC 60A8 42FB 62F0 810C 5B22 5B43 917F 91B8 91C0 5A18 5B81 549B 62E7 72DE 67E0 82E7 804D 5BCD 5BD5 752F 5BD7 5BDC 5BE7 511C 51DD 5680 5B23 64F0 7370 6AB8 85B4 8079 27B48 944F 9B21 9E0B 6A63 77C3 4F5E 4FAB 6CDE 6FD8 6F9D 5974 5B65 9A7D 7B2F 99D1 4F2E 52AA 5F29 782E 80EC 6012 5089 6419 90CD 632A 689B 50A9 513A 6A60 8BFA 558F 611E 2272A 63BF 6426 903D 9518 643B 6992 7A2C 7CD1 8AFE 8E43 61E6 61E7 7CE5 7A64 7CEF 597B 6E1C 3B09 6696 7156 7157 992A 9EC1 519C 4FAC 54DD 6D53 8113 79FE 8FB2 5102 8FB3 5665 6FC3 6A82 71F6 81BF 857D 79AF 7A60 895B 91B2 6B01 7E77 5F04 630A 7651 9F48 5973 9495 7C79 91F9 6C91 6067 6712 8844 46BC 759F 8650 7878 7627 FDD0-310C 5783 62C9 67C6 7FCB 83C8 641A 908B 65EF 524C 782C 63E6 78D6 5587 85DE 814A 63E7 694B 760C 8721 874B 8FA2 8FA3 8772 81C8 650B 7209 81D8 9B0E 74CE 9574 9BFB 881F 945E 5566 6E82 97A1 56B9 56D6 808B 4EC2 3539 4E50 53FB 5FC7 6250 6C3B 961E 738F 827B 6CD0 7AFB 7833 697D 97F7 6A02 7C15 39A1 9CD3 9C33 4E86 9979 990E 6765 4F86 4FEB 5008 5D03 5F95 6D9E 5A61 5D0D 5EB2 5FA0 68BE 6DF6 730D 83B1 90F2 68F6 741C 7B59 840A 9028 94FC 7B82 42F1 28090 9338 9A0B 9BE0 9D86 9EB3 553B 8D49 7750 775E 8D56 8CDA 6FD1 8CF4 983C 9842 21096 765E 9D63 7028 702C 7C41 6AF4 3E0A 85FE 7669 7C5F 8970 52D2 96F7 5AD8 7F27 757E 8502 64C2 3D62 6A91 7E32 790C 956D 6AD1 74C3 7FB8 7927 7E8D 7F4D 881D 9433 8632 8F60 513D 58E8 9458 9741 6B19 8646 7E9D 9F3A 53BD 8012 8BD4 5792 7D6B 8142 50AB 8A84 6A0F 78CA 78E5 854C 5121 4242 857E 58D8 3D7D 7657 6AD0 85DF 7928 7045 8B84 863D 9478 9E13 6CEA 6D21 7C7B 6D99 6DDA 7D2F 28024 9179 9287 981B 982A 9311 48AE 6502 98A3 985E 426A 7E87 8631 79B7 5841 561E 9C69 635E 6488 52B3 52B4 7262 7A82 54F0 5520 5D02 6D76 52DE 75E8 94F9 50D7 562E 37A0 5D97 61A5 24A42 7646 78F1 7C29 87E7 91AA 9412 985F 9ADD 8002 8001 4F6C 54BE 59E5 6045 72EB 6833 8356 94D1 41ED 92A0 6F66 6A51 8F51 6D9D 70D9 8022 916A 5AEA 61A6 6F87 8EBC 6A6F 802E 8EC2 73EF 7853 266E8 7CA9 86EF 6725 9BB1 779C 5245 5A04 507B 5A41 6E87 50C2 697C 848C 5ED4 617A 6F0A 6A13 71A1 8027 851E 877C 9071 802C 825B 87BB 8B31 8EC1 9AC5 97BB 9ACF 5D5D 6402 587F 5D81 645F 7BD3 750A 7C0D 3537 964B 5C5A 6F0F 7618 9542 763A 763B 93E4 55BD 560D 5170 5C9A 62E6 680F 5A6A 60CF 5D50 9611 847B 84DD 8C30 53B1 6F9C 5116 6593 7BEE 8934 61E2 71E3 71F7 9567 95CC 74BC 85CD 8955 8B4B 2814F 5E71 6514 703E 7C43 7E7F 8964 6595 6B04 7046 862D 7937 7C63 8974 56D2 7061 8B95 8E9D 6B17 9484 97CA 89C8 6D68 36E6 63FD 7F06 6984 6F24 7F71 9182 58C8 61D2 89A7 3A5C 64E5 5B3E 61F6 5B44 89BD 432B 5B4F 652C 7060 56D5 6B16 9872 7E9C 70C2 6EE5 71D7 5682 6FEB 7201 721B 74D3 7224 946D 7CF7 7226 897D 5577 52C6 90CE 6B34 72FC 90DE 9606 658F 6879 3C62 7405 5ACF 5ECA 7860 7A02 9512 6994 746F 7B64 8246 84C8 870B 8EB4 8782 92C3 93AF 99FA 6717 6716 70FA 365F 5871 6A03 84E2 8A8F 3BBE 6724 57CC 5D00 6D6A 3AF0 83A8 20E98 8497 95AC 5525 90D2 3604 5D1A 5844 68F1 695E 7890 7A1C 8F18 4244 8590 51B7 5030 580E 6123 7756 8E1C 5215 675D 5398 5253 9A8A 60A1 68A8 68A9 68B8 7281 740D 79BB 7C9A 8372 55B1 68C3 3D1D 7282 83DE 9E42 527A 6F13 3E48 775D 7B63 7F21 8243 870A 20ED7 20F1D 5AE0 5B77 76E0 8C8D 3992 6A06 7483 7CCE 84E0 92EB 9CA1 9ECE 7F79 853E 26E99 9305 7BF1 7E2D 4527 87CD 8935 569F 8B27 91A8 91D0 96E2 6584 3C00 74C8 85DC 908C 93EB 9BEC 9D79 9EE7 56C4 8821 9A39 5B4B 5EF2 6521 7055 5299 863A 9457 7A72 7C6C 7E9A 9A6A 9C7A 9E1D 793C 91CC 4FDA 5CDB 5CE2 5A0C 5CF2 6D6C 7406 9026 9502 7CB4 88CF 8C4A 92F0 9CA4 5163 6FA7 79AE 9BC9 87F8 91B4 9CE2 9090 9C67 6B1A 529B 5386 5389 5C74 7ACB 540F 6738 4E3D 5229 52B1 5456 575C 6CA5 4F8B 3578 5CA6 623E 67A5 6CB4 75A0 82C8 96B6 4FD0 4FEA 3926 680E 75AC 7805 82D9 8D72 8F79 3466 550E 60A7 6817 681B 6D96 7301 73D5 783A 783E 79DD 8318 8354 90E6 5533 5A6F 7B20 7C92 7C9D 8137 8385 8389 86B8 86CE 5088 51D3 53A4 68D9 75E2 86E0 8A48 8DDE 96F3 53AF 585B 6144 642E 6EA7 925D 9CE8 3B0F 66A6 6B74 746E 7D9F 849A 849E 8727 53B2 8777 66C6 6B77 7BE5 4509 96B7 29D98 9D17 52F5 3EFA 78FF 96B8 9B01 512E 5DC1 6FFF 7658 9398 56A6 58E2 650A 66DE 6AD4 6ADF 701D 7204 72A1 74C5 8807 9E97 6AEA 720F 74D1 76AA 76ED 77CB 792A 792B 79B2 85F6 34A7 5137 7667 7930 7CF2 8823 882B 9DC5 9E9C 56C7 6526 2789D 89FB 8E92 8F62 9148 6B10 8B88 2829B 8F63 652D 74E5 9742 299C3 9C71 9C73 974B 674E 6803 54E9 5A33 72F8 88E1 6AAA 9BCF 4FE9 5006 5217 52A3 51BD 52BD 39DC 59F4 6312 6D0C 54F7 57D2 57D3 3920 3B5E 6835 6D56 70C8 8322 8FFE 6369 3B69 730E 811F 86DA 88C2 716D 7759 8057 8D94 5DE4 98B2 5120 9BA4 9D37 64F8 7375 72A3 8E90 9B1B 3B2F 9B23 9C72 6BDF 54A7 6318 70EE 731F 64A9 8E7D 8FBD 7597 804A 50DA 5BE5 5D7A 6180 6F3B 818B 5639 5AFD 5BEE 5D9A 5D9B 6579 7360 7F2D 66B8 71CE 7499 81AB 907C 3D73 7642 9E69 5C6A 5EEB 7C1D 7E5A 87DF 8C42 8CFF 8E58 9410 85D4 98C9 9ACE 9DEF 53FE 4126 948C 91D5 911D 61AD 84FC 77AD 66E2 957D 7212 5C25 5C26 7093 6599 5C1E 5ED6 6482 7AB7 9563 720E 6E9C 7198 8E53 5218 6CA0 7544 6D41 6D4F 7409 7559 65C8 7571 786B 88D7 28EE7 5AB9 5D67 65D2 84C5 998F 9A9D 69B4 7460 84A5 905B 98D7 5289 746C 7624 78C2 954F 99E0 9E60 6A4A 74A2 7581 9560 7645 87C9 295E9 99F5 56A0 61F0 700F 938F 93A6 9E8D 85F0 93D0 98C0 9A2E 98C5 9C21 9DB9 9A51 39D5 67F3 6801 73CB 687A 7EFA 950D 925A 98F9 7DB9 71AE 7F76 92F6 6A6E 5B3C 7F80 516D 7542 7FCF 586F 5EC7 6F91 78DF 9E68 9724 993E 96E1 9402 98C2 9B38 9DDA 685E 5941 5E18 601C 8FDE 6D9F 68BF 83B2 467A 9023 8054 4EB7 5EC9 6E93 5332 55F9 5969 6169 6F23 7191 88E2 899D 5286 5333 5652 5AFE 6190 69E4 78CF 806B 84EE 9CA2 6FC2 6FD3 806E 878A 71EB 7E3A 7FF4 806F 81C1 8595 8933 8B30 8E65 938C 9570 6AE3 7C3E 880A 9B11 4965 942E 9C31 7C62 7C68 655B 740F 8138 88E3 6459 7489 8539 5B1A 6582 3BEC 81C9 913B 7FB7 895D 861E 7EC3 70BC 604B 6D70 6B93 581C 3703 5AA1 3C68 6E45 94FE 50C6 695D 7149 7453 8430 6F4B 7DF4 6FB0 932C 6BAE 934A 93C8 3D91 7032 9C0A 861D 6200 373B 7E9E 8068 62CE 53B8 6797 90BB 4E34 51A7 77DD 5549 5D0A 6DCB 667D 7433 7CA6 75F3 7884 7B96 7CBC 5D99 6F7E 735C 9130 96A3 65B4 66BD 71D0 7498 8F9A 9074 9716 77B5 78F7 81E8 7E57 7FF7 9E90 8F54 58E3 7036 93FB 9CDE 9A4E 9C57 9E9F 342D 3A06 83FB 4E83 51DB 51DC 649B 5EE9 5EEA 61CD 61D4 6F9F 6A81 6AA9 765B 765D 541D 6061 608B 8D41 711B 8CC3 50EF 853A 6A49 81A6 95B5 7510 7584 8E78 85FA 8E8F 8E99 8EAA 8F65 826F 4FCD 51C9 6881 6DBC 690B 8F8C 7CAE 7CB1 589A 7DA1 8E09 6A11 8F2C 7CE7 4E21 4E24 34B3 5169 5521 5562 639A 813C 7DC9 873D 88F2 9B49 9B4E 4EAE 54F4 60A2 8C05 8F86 55A8 667E 6E78 91CF 8F0C 8AD2 8F1B 9344 7177 7C17 3007 5222 7075 56F9 577D 590C 59C8 5CBA 5F7E 6CE0 72D1 6624 670E 67C3 73B2 82D3 51CC 74F4 768A 7831 79E2 7ADB 94C3 9E30 5A48 6395 68C2 6DE9 740C 7B2D 7D37 7EEB 4345 7F9A 7FCE 8046 8232 86C9 8851 9675 83F1 8A45 8DC9 8EE8 797E 9234 959D 96F6 9F84 420A 7DBE 88EC 8506 970A 99D6 6FAA 9302 9B7F 9CAE 9D12 9E77 3B21 71EF 4241 4516 8576 971B 971D 9F62 9BEA 5B41 9143 9F61 6AFA 8626 91BD 9748 2331F 6B1E 7227 24AE9 9EA2 4585 9F97 5CAD 963E 888A 9886 9818 5DBA 4EE4 53E6 5464 70A9 4F36 84E4 9717 702E 565C 64B8 5362 5E90 5786 6CF8 7089 82A6 3B54 680C 80EA 8F73 9E2C 7388 823B 9885 9C88 9B72 76E7 56A7 58DA 3820 5EEC 650E 6ADA 7018 7379 74B7 66E5 6AE8 7210 74D0 81DA 8606 77D1 7C5A 7E91 7F4F 826B 8826 8F64 946A 9871 9AD7 9C78 9E15 9EF8 5364 864F 63B3 9E75 7875 9C81 865C 5877 6EF7 6A10 84FE 9B6F 64C4 6A79 78E0 9565 5695 64FC 7002 6AD3 6C0C 8263 93C0 826A 942A 9465 5725 752A 4F93 5774 5F54 5F55 9646 5CCD 52CE 8D42 8F82 5A3D 6DD5 6DE5 6E0C 7849 9678 9E7F 3A90 6902 742D 7984 4402 83C9 902F 50C7 5279 52E0 76DD 7769 788C 797F 7A11 8CC2 8DEF 5876 5ED8 645D 6F09 7B93 7CB6 21014 622E 6A1A 719D 8194 850D 89EE 8DA2 8E1B 8F98 9181 3BDD 6F5E 7A4B 9304 9332 9334 7490 7C0F 8557 87B0 8E57 8F46 9A04 298F1 9E6D 7C2C 7C36 93D5 9BE5 9D66 9D71 9E93 93F4 9732 9A3C 7C59 9DFA 8642 67A6 822E 9229 6F9B 6C07 7F57 5570 9831 56C9 7F56 7321 8136 6924 841D 8999 903B 8161 9523 7BA9 9AA1 9559 87BA 7F85 89B6 93CD 5138 89BC 9A3E 21922 651E 7380 6B0F 268C7 863F 908F 9A58 9E01 7C6E 947C 9960 5246 502E 84CF 88F8 8EB6 7630 3A61 3C01 8803 81DD 66EA 7673 6CFA 5CC8 6D1B 7EDC 9A86 6D1C 73DE 8366 7866 7B3F 7D61 55E0 843D 645E 6F2F 7296 927B 96D2 99F1 9BA5 9D3C 9D45 6FFC 277CC 7E99 5A08 5B6A 5CE6 631B 683E 9E3E 8114 6EE6 92AE 9D49 571D 5971 5B4C 5B7F 5DD2 6523 66EB 6B12 7053 7F89 81E0 571E 7064 864A 947E 7674 7675 9E1E 5375 4E71 91E0 4E82 62A1 6384 4ED1 4F26 56F5 6CA6 7EB6 4F96 8F6E 502B 5707 5A68 5D18 5D19 60C0 6DEA 966F 68C6 3DCD 8140 83D5 4201 7DB8 8726 8E1A 8F2A 9300 9BE9 57E8 7896 7A10 8023 8BBA 6EA3 8AD6 78EE 9F99 5C78 5499 6CF7 663D 680A 73D1 80E7 830F 772C 783B 7ADC 7B3C 804B 6E70 9686 6EDD 20F90 5D90 6F0B 3863 7BED 856F 9F8D 7643 56A8 5DC3 5DC4 7027 7C3C 93E7 66E8 6727 3C0D 6AF3 7216 74CF 8622 9733 77D3 7931 7932 9F92 7C60 807E 882A 882C 8971 8C45 8E98 9468 9747 4BBE 9A61 9E17 5784 5785 62E2 9647 3D33 7BE2 5131 58DF 58E0 650F 96B4 7AC9 9F93 54E2 6335 6887 5FBF 8D1A 69DE 7ABF 9A74 95FE 90D8 6988 99BF 6C00 81A2 95AD 85D8 9DDC 9A62 5415 5442 4FA3 4FB6 6314 36CE 634B 635B 65C5 3B5A 68A0 7963 7A06 94DD 5C61 7F15 7D7D 5C62 8182 5C65 891B 92C1 8190 5122 7A5E 7E37 8938 7A6D 5BFD 578F 5F8B 8651 7387 7EFF 20DC8 5D42 6C2F 6EE4 844E 7DA0 7DD1 616E 7BBB 819F 52F4 7E42 6FFE 6AD6 7208 9462 7112 7567 950A 7A24 3500 5719 3A3C 92DD 92E2 64FD FDD0-310D 65EE 5477 560E 5620 9486 5C1C 5676 9337 5C15 738D 5C2C 9B40 6208 4EE1 572A 72B5 7EA5 20BEB 6213 8090 726B 7599 54AF 7271 54E5 80F3 9E3D 5272 6401 88BC 20E9D 6ED2 6228 6B4C 29FB7 9D10 9D1A 64F1 8B0C 9D3F 93B6 5444 3837 4F6E 530C 630C 9601 9769 654B 3B58 683C 8316 9B32 6105 81F5 86D2 55DD 5865 6EC6 845B 88D3 89E1 9694 643F 69C5 8188 95A3 95A4 4213 9549 9788 97D0 7366 8AFD 8F35 9ABC 9BAF 97DA 97B7 9A14 4601 8F55 54FF 8238 4E2A 5404 867C 500B 784C 94EC 55F0 7B87 5F41 6ACA 4F85 8BE5 5793 59DF 5CD0 90C2 9654 6650 8344 8D45 7561 7974 7D6F 8A72 8C65 8CC5 5FCB 6539 7D60 4E10 4E62 5303 5304 9623 675A 9499 76D6 6461 6E89 9223 6224 6982 8462 8CCC 9691 6F11 84CB 3562 69E9 69EA 74C2 7ED9 7D66 768B 7F94 7F99 9AD8 7690 2690E 9AD9 81EF 6EDC 69D4 777E 818F 69F9 6A70 7BD9 7CD5 993B 6ADC 9DCE 9F1B 9DF1 5930 6772 83D2 641E 7F1F 66A0 69C0 69C1 3D46 7A3E 7A3F 9550 7E1E 6ABA 85C1 85F3 543F 544A 52C2 53DD 8BF0 90DC 796E 7970 9506 7170 7B76 8AA5 799E 92EF 97DF 52FE 4F5D 6C9F 94A9 88A7 7F11 920E 6E9D 9264 7DF1 7BDD 8920 97B2 97DD 5CA3 72D7 82B6 67B8 73BD 8007 82DF 7B31 8008 8009 86BC 8C7F 5778 6784 8BDF 8D2D 57A2 59E4 5193 8329 591F 5920 8A3D 5ABE 5F40 6406 8A6C 96CA 69CB 7179 89CF 9058 6480 89AF 8CFC 7518 5FD3 653C 6746 3DA5 7395 809D 8289 8FC0 5769 6CD4 77F8 4E79 67D1 7AFF 82F7 75B3 9150 4E7E 7C93 4E81 51F2 5C32 5C34 7B78 6F27 9CF1 5C36 5C37 9B50 4EE0 625E 76AF 79C6 8866 8D76 687F 7B34 6562 7A08 611F 8D95 6F89 64C0 6A44 7C33 9C14 9CE1 9C64 5E72 65F0 6C75 76F0 7EC0 501D 51CE 6DE6 7D3A 8A4C 5E79 9AAD 69A6 6A8A 8D11 8D63 8D1B 7068 6839 8DDF 54CF 826E 4E98 4E99 831B 63EF 5188 7F53 51AE 521A 6760 7EB2 809B 5CA1 3B4E 7268 7598 77FC 7F38 94A2 525B 7F61 5808 6386 91ED 68E1 7285 583D 7DB1 7F41 92FC 93A0 5C97 3F58 5D17 6E2F 7135 7B7B 69D3 6205 6206 522F 5E9A 754A 6D6D 3E74 8015 6404 713F 7D5A 83EE 8D53 9E52 7DEA 7E06 7FAE 8CE1 7FB9 9D8A 54FD 57C2 5CFA 632D 7EE0 803F 90E0 231B3 6897 8384 3F98 7D86 4304 9CA0 9ABE 9BC1 66F4 5829 6685 4C4D 4C6D 63B6 6929 4F30 5471 59D1 5B64 6CBD 6CD2 67E7 82FD 8F71 5502 7F5B 9E2A 7B1F 86C4 83F0 89DA 8EF1 8EF2 8F9C 9164 9232 7B8D 7B9B 5AF4 6A6D 443B 9B95 9D23 9DBB 5903 53E4 6262 6C69 8BC2 8C37 80A1 726F 2EE3 5503 4026 7F5F 7F96 94B4 9AA8 5552 6DC8 8135 86CA 86CC 8A41 9E44 5C33 6132 6BC2 9237 9989 9F13 9F14 560F 6996 69BE 76B7 84C7 7A40 9E58 7CD3 7E0E 6FF2 76BC 81CC 85A3 8F42 7014 76EC 77BD 9936 4D9C 8831 56FA 6545 51C5 987E 580C 5D13 5D2E 688F 727F 68DD 96C7 75FC 797B 7A12 9522 50F1 932E 9CB4 9BDD 9867 5495 5CE0 9027 50A6 83C7 7BD0 74DC 522E 80CD 681D 20D6F 9E39 8052 44B7 6B44 7171 8D8F 5280 7DFA 92BD 98B3 8E3B 9D30 9A27 53E7 518E 5250 526E 5BE1 4211 5366 576C 8BD6 6302 5569 639B 7F63 7D53 7F6B 8A7F 8902 98AA 5459 54BC 57DA 5D1E 90ED 581D 921B 9505 5613 588E 7611 8748 5F49 35FB 6FC4 87C8 934B 5F4D 56EF 56F6 56FB 56FD 5700 570B 5E3C 8158 5E57 6156 6F0D 805D 8195 852E 8662 9998 27C12 4190 679C 60C8 6DC9 7313 9983 6901 83D3 7CBF 7DB6 873E 88F9 69E8 8F20 9301 991C 9439 8FC7 904E 556F 4E56 63B4 6451 62D0 67B4 67FA 27285 7B89 592C 53CF 602A 39D4 6060 5F52 572D 59AB 9F9F 89C4 7688 90BD 95FA 5E30 73EA 80FF 8325 4E80 7845 4145 7A90 898F 5080 5AAF 691D 88BF 5EC6 90CC 5AE2 646B 7470 95A8 9C91 5B00 69FB 69FC 749D 81AD 879D 9F9C 9BAD 5DC2 6B78 9B36 74CC 9A29 9B39 6AF7 5B84 6C3F 6739 8F68 5E8B 4F79 5326 8BE1 20C53 579D 59FD 6051 6531 7678 8ECC 9652 5EAA 9B3C 532D 796A 6677 6E40 436F 86EB 3533 89E4 8A6D 53AC 3A33 4925 87E1 77A1 7C0B 6530 523D 523F 660B 7094 67DC 8D35 3A88 6842 6867 7324 7B40 8CB4 8DEA 5331 84D5 528A 528C 5DA1 648C 69F6 4210 4434 6A9C 77B6 7C02 6AC3 7650 79AC 8958 9CDC 97BC 9C56 9C65 6922 5173 89C2 5B98 51A0 898C 500C 20D28 68FA 7AA4 8484 95A2 761D 764F 89B3 95D7 9CCF 95DC 9C25 9C5E 89C0 839E 9986 742F 75EF 7B66 7BA1 8F28 8218 9327 9928 9CE4 6BCC 4E31 8D2F 6CF4 60BA 60EF 63BC 6DAB 8CAB 60B9 3D26 3BA1 797C 6163 645C 6F45 6A0C 9066 76E5 7F46 465B 96DA 93C6 704C 721F 74D8 9E73 77D4 7936 7F50 9475 9C79 9E1B 4E28 200CC 886E 60C3 7EF2 889E 88AC 8F8A 6EDA 6EFE 7DC4 84D8 78D9 8509 8F25 9CA7 25566 9B8C 9BC0 68CD 7754 3665 7774 74AD 8B34 5149 706E 4F8A 7097 709B 54A3 5799 59EF 6D38 6844 70E1 80F1 832A 8F04 50D9 92A7 9EC6 299C9 5E7F 5E83 72B7 5EE3 81E9 7377 2A1F5 4FC7 73D6 901B 81E6 6497 29448 709A 6B1F 5DE5 5F13 516C 53B7 529F 653B 675B 4F9B 739C 7CFC 80B1 5BAB 5BAE 606D 8EAC 9F9A 5311 5868 5E4A 6129 89E5 7195 8EB3 78BD 9AF8 4CCD 89F5 9F8F 9F94 5EFE 5DE9 6C5E 62F1 39EC 62F2 3B5F 6831 73D9 3F26 8F01 92DB 978F 4C4B 5171 8D21 7FBE 551D 8CA2 83BB 3536 86A3 6150 FDD0-310E 5494 5496 5580 8849 64D6 5361 4F67 80E9 9272 57B0 88C3 533C 3E2F 22208 67EF 7241 73C2 79D1 80E2 82DB 8F72 75B4 7822 8DB7 68F5 8EFB 988F 55D1 6415 7290 7A1E 7AA0 842A 9233 69BC 4426 9897 6A16 778C 78D5 4300 874C 9312 8596 9198 9846 9AC1 791A 58F3 63E2 6BBC 7FD7 53EF 5777 37B9 5CA2 3ABC 70A3 6E07 5D51 6564 6E34 5DB1 790D 514B 523B 524B 52C0 52CA 5BA2 606A 20CED 5A14 5C05 8BFE 20DB2 5801 6C2A 9A92 7F02 6119 6E98 951E 78A6 7DD9 8250 8AB2 790A 9A0D 2A0ED 5D59 5F00 5952 63E9 950E 958B 4924 9426 51EF 5240 57B2 607A 95FF 94E0 51F1 5274 6168 584F 5D66 6137 6977 8488 8F06 5605 669F 9534 4057 9347 93A7 95D3 98BD 5FFE 708C 708F 6B2C 70D7 52D3 6112 613E 938E 5C3B 9ADB 4E02 6537 8003 62F7 6D18 6832 70E4 7A01 9C93 71FA 94D0 7292 92AC 9760 9BB3 9BCC 62A0 26B05 82A4 770D 527E 5F44 6473 7798 4071 53E3 24618 52B6 53E9 6263 6542 51A6 5BBC 5BC7 3C2F 91E6 7A9B 7B58 6EF1 7789 8532 853B 7C06 9DC7 520A 681E 52D8 9F9B 582A 5D41 6221 9F95 519A 574E 4F83 780D 5058 57F3 60C2 83B0 6B3F 586A 6B41 69DB 8F21 6ABB 9851 7AF7 8F57 770B 884E 5D01 5888 78E1 77B0 95DE 77D9 808E 80AF 80BB 57A6 6073 5543 8C64 9F88 58BE 9339 61C7 9F66 63AF 88C9 8903 5FFC 95F6 780A 7C87 5EB7 21413 5ADD 5D7B 6177 6F2E 69FA 7A45 41B2 7CE0 8EBF 93EE 9C47 625B 6443 4849 4EA2 4F09 531F 56E5 6297 72BA 909F 7095 94AA 9227 958C 52A5 542D 5751 5994 962C 6333 7841 727C 785C 94FF 787B 647C 8A99 92B5 40D8 935E 93D7 625D 5233 77FB 67AF 80D0 90C0 54ED 684D 5800 5D2B 35C4 5710 8DCD 7A9F 9AB7 26846 9BAC 72DC 82E6 3838 5E93 4FC8 7ED4 5EAB 79D9 8DB6 7105 55BE 7D5D 88B4 88E4 7614 9177 5EE4 8932 56B3 5938 59F1 8A87 4F89 54B5 57AE 9299 3404 630E 80EF 8DE8 9ABB 823F 6269 62E1 62EC 6304 6870 7B48 86DE 9614 843F 8440 5ED3 9822 9AFA 6FF6 95CA 979F 61D6 64F4 9729 97B9 9B20 97D5 39DF 84AF 64D3 5DDC 51F7 5757 5FEB 4FA9 54D9 72EF 90D0 810D 584A 3C6E 7B77 9C99 5108 58A4 5672 5EE5 736A 9136 81BE 65DD 7CE9 9C60 5726 4E8F 5232 5CBF 609D 76D4 7AA5 8067 7ABA 8667 95DA 985D 5DCB 862C 594E 6646 9804 9997 55B9 63C6 45AF 9035 9108 9A99 6223 668C 694F 6951 8475 9697 777D 9B41 8770 4906 982F 367A 9368 9377 6AC6 85C8 9A24 5914 8637 8641 5DD9 2A1B4 72AA 8EA8 7143 8DEC 980D 8E5E 5C2F 532E 6B33 559F 6126 6E83 8143 9988 5ABF 6127 8489 7786 5633 5B07 6192 6F70 7BD1 8069 4646 6A3B 806D 8562 8B09 7C23 8075 993D 7C44 9400 994B 944E 4C0E 5BBD 5BDB 5BEC 81D7 9ACB 9AD6 6B35 6B3E 6B40 7ABE 4540 7ABD 9467 5764 6606 5803 5A6B 5D10 5D11 665C 7311 711C 7428 83CE 88C8 9AE0 8C87 951F 9AE1 9E4D 872B 88E9 9AE8 747B 890C 918C 9315 9CB2 9A09 9BE4 9D7E 9DA4 6083 6346 9603 58F8 68B1 7871 7975 7A07 58FC 7A1B 7D91 88CD 95AB 95B8 9F6B 56F0 6D83 3AFB 774F 5812 5C21 6F49 71B4 5321 344C 52BB 8BD3 5329 54D0 6047 6D2D 90BC 6846 7844 7B50 44B0 8A86 8EED 5FF9 6282 72C2 8BF3 8ED6 8A91 9D5F 593C 5123 61ED 535D 5739 7EA9 909D 51B5 65F7 5CB2 6CC1 77FF 663F 8D36 7716 7736 7D56 8CBA 8EE6 9271 58D9 8E80 913A 9ECB 61EC 66E0 720C 77CC 7926 7A6C 7E8A 945B 783F 7D4B 7B7A 7A7A 369A 5025 57EA 5D06 60BE 6DB3 787F 7B9C 9313 9D7C 5B54 233FA 6050 63A7 26048 979A 8EBB FDD0-310F 5677 54C8 94EA 86E4 5964 4E37 8BC3 62B2 6B31 559D 8A36 55EC 881A 79BE 5408 4F55 52BE 5392 548A 548C 59C0 6CB3 5CC6 3A83 66F7 67C7 72E2 76C7 7C7A 7D07 90C3 9602 9978 54EC 3A89 6546 6838 76C9 76CD 555D 3B71 6DB8 76D2 79F4 8377 86B5 9F81 60D2 6E2E 83CF 8402 8A38 988C 6941 6BFC 8A65 8C88 47A6 8F05 924C 9616 9C84 3561 7186 9E56 9EA7 6F95 3FE5 981C 7BD5 7FEE 879B 9B7A 7909 95D4 97A8 9F55 8988 9DA1 76AC 9449 9FA2 4F6B 578E 8D3A 7103 8894 8CC0 55C3 7142 788B 7187 8D6B 3D51 8910 9E64 3B1E 7A52 7FEF 58D1 764B 8B1E 7200 9DAE 9DB4 974E 9E16 974F 7CAD 974D 548D 54B3 55E8 8FD8 5B69 9826 9AB8 9084 6D77 80F2 70F8 917C 91A2 4EA5 598E 39E1 9A87 5BB3 6C26 55D0 9900 99ED 26926 995A 5870 56A1 9ED2 9ED1 563F 6F76 28B46 8320 84BF 5686 8585 85A7 6BDC 869D 6BEB 6903 55E5 7346 8C89 5651 7354 8C6A 295B8 5637 3B14 734B 8AD5 512B 568E 58D5 3819 6FE0 7C47 8814 8B79 597D 90DD 53F7 36AA 3740 660A 6626 79CF 54E0 5CFC 604F 608E 6D69 8017 6667 3B36 6DCF 5090 7693 6EC8 8055 865F 9117 66A4 66AD 6F94 769C 769E 66CD 76A1 76A5 8583 93AC 98A2 704F 9865 9C1D 705D 7AD3 9F41 4FAF 3927 77E6 5589 5E3F 7334 9107 3B0B 8454 760A 777A 7BCC 7CC7 7FED 9ABA 7FF5 936D 9931 9BF8 543C 72BC 540E 539A 5795 5F8C 6D09 90C8 9005 5820 8C5E 9C8E 9C98 9B9C 9C5F 5019 4F44 70B6 9878 3937 86B6 9163 9807 5AE8 8C3D 61A8 99A0 6B5B 9F3E 9097 542B 51FD 5481 80A3 90AF 51FE 8677 5505 5705 5A22 6D5B 5D21 6657 6892 6DB5 7113 7400 5BD2 5D45 3B80 97E9 751D 7B68 4204 872C 6F8F 92E1 9B7D 97D3 4E06 5388 7F55 6D6B 558A 961A 850A 3E01 8C43 9B2B 361A 6C49 5C7D 6C57 95EC 65F1 5CBE 54FB 57BE 608D 634D 6D86 7302 3A8B 6658 6665 710A 839F 91EC 9588 7694 7745 83E1 50BC 86FF 9894 99AF 6F22 872D 8C8B 6496 66B5 71AF 92B2 92CE 61BE 64BC 24CC9 7FF0 8792 9837 9844 99FB 96D7 701A 8B40 862B 9DBE 516F 7233 62EB 75D5 978E 4F77 5F88 72E0 8A6A 6068 592F 3C20 65BB 676D 82C0 8FD2 7ED7 73E9 7B10 822A 86A2 4615 9883 8CA5 7B55 7D4E 980F 28048 9B67 6C86 57B3 4EA8 54FC 6099 5548 811D 3530 59EE 6046 6052 6841 70C6 80FB 9E3B 6A2A 6A6B 8861 9D34 8605 9445 583C 6DA5 9D46 4E6F 5322 864D 547C 5780 5FFD 6612 66F6 6CD8 6057 70C0 82F8 8F77 532B 553F 60DA 39FE 6DF4 8656 8EE4 5611 5BE3 6EF9 44E4 96D0 5E60 622F 6B51 27A53 81B4 8B3C 56EB 6287 5F27 72D0 80E1 58F6 74F3 96BA 20D31 58F7 659B 7100 35C5 5596 58FA 5AA9 6E56 7322 7D57 6430 695C 7173 745A 846B 561D 2430D 9E55 69F2 7BB6 851B 8774 885A 9B71 7E20 879C 9190 9836 89F3 9378 992C 4B4C 9D60 702B 9B0D 9C17 9D98 9DA6 4E55 6C7B 864E 6D52 4FFF 7425 8400 865D 6EF8 4E65 4E92 5F16 6236 6237 6238 3E26 51B1 51B4 5E0D 62A4 6C8D 6CAA 8290 5CB5 6019 623D 6608 6791 6018 795C 7B0F 5A5F 6248 74E0 55C0 695B 7D94 96FD 5AED 5AEE 6462 6EEC 9120 69F4 71A9 8530 9CF8 7C04 9359 569B 9E71 8B77 9CE0 97C4 9800 9C6F 9E0C 4E4E 7C90 552C 7CCA 933F 9BF1 82B1 82B2 54D7 5629 848A 9335 534E 3572 3B49 59E1 9A85 91EA 91EB 94E7 83EF 6433 6ED1 733E 380F 398A 64B6 78C6 92D8 8550 8796 8B41 93F5 9A4A 9DE8 5316 5212 3566 593B 3577 6779 753B 8BDD 6866 5A73 5D0B 756B 7575 89DF 8A71 5283 6466 5AFF 5B05 69EC 6F85 6A3A 8AE3 7E63 8219 9ECA 8B6E 57D6 5A72 691B 7874 7CC0 8AAE 748D 5419 5268 8020 952A 5290 9343 5684 8C41 6509 9A1E 4F78 6D3B 79EE 79F3 706B 4F19 90A9 94AC 9225 5925 6F37 6C8E 6216 8D27 549F 7809 4100 4FF0 6347 7713 9584 20D7E 639D 83B7 8CA8 60D1 6E71 7978 65E4 6947 3A2F 798D 84A6 35F2 596F 970D 6FE9 7372 8B0B 6AB4 956C 56AF 7016 77C6 7A6B 4C5B 66E4 802F 81DB 8267 85FF 8816 56BF 7668 77D0 944A 9743 6000 5F8A 6DEE 69D0 8E1D 61D0 8922 8931 3733 3822 61F7 7024 6AF0 8032 8639 574F 54B6 8AD9 58CA 58DE 863E 7070 39D1 8BD9 54B4 6062 62FB 6325 6D03 867A 6656 70E3 73F2 8886 8C57 5A4E 5645 5A88 63EE 3DC7 7FDA 8F89 6689 694E 7147 8A7C 9693 5E51 7773 7988 649D 5655 7FEC 8918 8F1D 9EBE 5FBD 7008 96B3 8633 9C34 56D8 56DE 56EC 4F6A 5EFB 605B 6D04 5EFD 70E0 8334 8698 8FF4 75D0 9025 86D4 86D5 8716 9BB0 6094 6BC0 6BC1 26799 6BC7 6A93 71EC 8B6D 5349 6C47 4F1A 8BB3 6CCB 54D5 21726 6D4D 7ED8 8294 8BF2 605A 6075 70E9 835F 8D3F 5F57 6666 79FD 5599 60E0 6E4F 7D75 7F0B 7FD9 9613 532F 5F59 5F5A 3963 6703 6ED9 8A6F 8CC4 9892 50E1 5612 3A39 8AA8 571A 5BED 6167 6193 66B3 69E5 6F53 7623 8527 49E5 5666 5B12 5FBB 6A5E 6BA8 6FAE 6FCA 7369 8559 8AF1 982E 71F4 74AF 7BF2 8588 8589 992F 5696 77BA 7A62 7E62 87EA 3B29 6AD8 7E6A 7FFD 85F1 8B53 5136 93F8 95E0 5B48 942C 9767 8B7F 986A 5C77 7073 74A4 61F3 72BF 6B53 9D05 3E55 9D4D 56BE 61FD 737E 9144 8B99 8C9B 9A69 73AF 5CD8 6D39 72DF 90C7 6853 8341 5BCF 7D59 8408 8411 96C8 7D84 7FA6 8C86 926E 953E 571C 5B1B 5BF0 6FB4 7F33 49A1 961B 74B0 8C72 9370 956E 9E6E 7CEB 7E6F 8F58 9436 95E4 9B1F 74DB 4D09 7F13 4220 7DE9 650C 5E7B 5942 8092 5950 5BA6 5524 6362 6D63 6DA3 70C9 60A3 6899 7115 559A 559B 5D48 610C 63DB 6E19 75EA 7746 902D 3B07 3B0A 7165 744D 8C62 6F36 7613 69F5 9CA9 64D0 6FA3 9BC7 85E7 9C00 6B22 77A3 6B61 660F 662C 8364 5A5A 60DB 6DBD 960D 68D4 6B99 7767 8477 776F 95BD 5FF6 6D51 68A1 9984 581A 6E3E 743F 9B42 991B 7E49 8F4B 4B9D 9F32 9BF6 8BE8 4FD2 5031 5702 638D 6DF7 711D 6EB7 6141 89E8 8AE2 5DDF 3835 8093 8841 8352 671A 5843 614C 3B3B 7687 505F 51F0 55A4 582D 5A93 5D32 5FA8 60F6 6E5F 968D 9EC3 9EC4 697B 714C 745D 845F 9051 953D 58B4 6F62 735A 7BC1 7BCA 824E 8757 71BF 749C 8AFB 7640 78FA 417F 7A54 9360 992D 9CC7 7C27 87E5 97F9 8DAA 9A1C 9404 9C09 5164 9C51 9DEC 6033 604D 70BE 5BBA 6644 595B 8C0E 5E4C 8A64 7180 4420 8B0A 6ACE 6130 3A2A 6EC9 69A5 769D 66C2 93A4 76A9 6643 7E28 53FF 543D 544D 7074 8F70 54C4 8A07 70D8 8EE3 63C8 6E39 7122 7861 8C3E 29420 8F37 85A8 9367 569D 8F5F 4EDC 5F18 5985 7EA2 5430 5B8F 6C6F 7392 7EAE 95F3 5B96 6CD3 57AC 5A02 6D2A 7AD1 427A 7D05 82F0 8679 5CF5 6D64 7D18 7FC3 803E 836D 7854 7D2D 8C39 9E3F 6E31 7AE4 7CA0 921C 958E 7D8B 7FDD 8452 8453 8C3C 6F42 28306 9277 9783 9B5F 92D0 5F4B 9710 857B 971F 9D3B 9EC9 2410F 9ECC 664E 3B34 55CA 8BA7 8A0C 95A7 6494 6F8B 6F92 92BE 95C2 9B28 FDD0-3110 4E0C 22A66 8BA5 51FB 5209 53FD 9965 4E69 520F 673A 7391 808C 573E 77F6 9E21 6785 82A8 54AD 59EB 525E 5527 59EC 5C50 79EF 7B04 8FF9 98E2 57FA 7EE9 559E 5D46 5D47 6567 671E 7284 7B53 7F09 8D4D 52E3 55D8 7578 7A18 8DE1 8DFB 9CEE 50DF 20F3B 6BC4 7B95 9288 5630 69E3 757F 7A3D 7DDD 89ED 8CEB 8EB8 9F51 58BC 6A5F 6FC0 74A3 7A4D 9324 64CA 78EF 79A8 7C0A 7E3E 7F81 8940 8CF7 96AE 6AC5 802D 8E5F 96DE 8B4F 913F 97F2 9D8F 8B64 9416 9951 8E8B 97BF 9DC4 9F4E 7F87 9447 8640 8989 9459 9F4F 7F88 9E04 898A 4EBC 53CA 4F0B 5409 7EA7 5373 5C8C 5F76 5FE3 6781 6C72 7680 4E9F 4F76 8BD8 9491 537D 59DE 6025 72E4 90C6 63E4 75BE 768D 7B08 7D1A 810A 4798 506E 5359 5EB4 3B72 710F 89D9 8C3B 35CA 68D8 6E52 96C6 5849 5AC9 6131 6222 696B 6975 6B9B 8D8C 69C9 8024 818C 84BA 92A1 35F1 6483 6F57 7620 799D 7BBF 8E16 9E61 5DAF 6A76 6FC8 8540 878F 64EE 6A9D 857A 8E50 9353 85C9 894B 8265 7C4D 8F5A 93F6 4CED 9735 9DBA 9DD1 96E6 96E7 51E0 5DF1 4E2E 5980 72B1 6CF2 866E 6324 638E 9C7E 5E7E 39B8 621F 9218 5D74 9E82 9B62 64A0 64E0 7A56 87E3 9B55 2E95 5F50 5F51 65E1 8BA1 8BB0 4F0E 7EAA 5756 5993 5FCC 6280 5242 5B63 82B0 9645 54DC 578D 5CDC 65E2 6D0E 6D4E 7D00 830D 8A08 5264 7D12 7EE7 8324 8360 89CA 8A18 5048 5BC2 5BC4 3831 5F9B 394D 60B8 65E3 689E 6E08 796D 5848 60CE 3ED1 4400 81EE 517E 75F5 7D99 846A 8507 88DA 66A8 6F03 6F08 7A29 7A4A 84DF 8900 8A8B 8DFD 969B 9701 9B3E 9C9A 66A9 7A37 8AC5 9CAB 5180 5291 66C1 7A44 9AFB 568C 6A95 6FDF 7F7D 858A 89AC 6AB5 3E04 85BA 9D4B 9F4C 61FB 7660 7A67 7E4B 9AA5 9BDA 7031 7E7C 860E 29949 9C40 862E 973D 9C36 9C3F 863B 9C6D 9A65 4EBD 8F91 6A2D 8F2F 5EED 766A 52A0 4E6B 5939 4F3D 593E 4F73 62B8 62C1 6CC7 3E62 67B7 6BE0 6D43 73C8 8304 8FE6 57C9 5BB6 6D79 75C2 689C 7B33 801E 8888 50A2 7333 8DCF 20EA2 728C 8175 846D 926B 5609 927F 9553 8C6D 8C91 29D9B 93B5 4552 9E9A 573F 5FE6 6274 90CF 550A 605D 835A 90DF 621B 83A2 94D7 621E 86F1 88B7 988A 3B96 86FA 88CC 8DF2 9782 9904 92CF 982C 9830 9D36 9D4A 7532 4EEE 5CAC 53DA 73BE 80DB 659A 8D3E 94BE 5047 5A7D 5FA6 659D 6935 8CC8 9240 698E 69DA 7615 6A9F 4EF7 9A7E 67B6 22C4C 5AC1 5E4F 69A2 50F9 99D5 7A3C 7CD8 7596 9636 7686 63A5 63B2 23D8F 75CE 79F8 5588 5826 5A98 63ED 6904 6E5D 813B 83E8 8857 968E 55DF 5AC5 716F 40C8 7A2D 8754 64D1 7664 8B2F 9D9B 5369 536A 5B51 5C10 8BA6 8282 5226 5227 52AB 5C8A 523C 351A 52BC 6605 6770 758C 3636 36C3 62EE 6D01 7ED3 5022 6840 8871 8A10 8FFC 507C 5A55 5D28 6377 83AD 5091 55BC 3A17 4039 7D50 7D5C 88BA 9889 5D65 3A29 696C 6976 6ED0 776B 7BC0 8710 874D 8A70 9263 9B5D 622A 69A4 78A3 7AED 26D74 9C92 6F54 7FAF 84F5 8AB1 8E15 978A 5E6F 937B 9B9A 5DC0 6AED 881E 8818 883D 6BD1 5A8E 89E3 89E7 98F7 6A9E 4E2F 4ECB 5424 5C95 3839 5E8E 6212 5C46 5C4A 73A0 82A5 754C 754D 75A5 780E 8BEB 501F 6088 86A7 8878 5FA3 583A 6950 743E 86F6 7297 8AA1 9AB1 9B6A 892F 9385 8EA4 59D0 685D 4EA4 827D 8281 59E3 5A07 5CE7 6D47 90CA 9A84 80F6 832D 832E 6912 7126 86DF 8DE4 50EC 5604 213ED 8660 9C9B 5B0C 5D95 5DA3 618D 6F86 81A0 71CB 81B2 8549 7901 7A5A 9BAB 9D41 9E6A 7C25 87ED 8F47 940E 9DCD 9A55 9DE6 9DEE 3B42 81EB 89D2 4F7C 4FA5 6054 6322 72E1 7EDE 997A 6341 6648 70C4 768E 77EB 811A 94F0 6405 6E6B 7D5E 527F 656B 6E6C 714D 8173 8CCB 50E5 6477 669E 8E0B 9278 9903 510C 528B 5FBA 649F 64B9 5FBC 61BF 657D 657F 71DE 7F34 96A6 66D2 74AC 77EF 76A6 87DC 7E73 8B51 5B42 3A70 27088 652A 705A 9C4E 53EB 544C 5CE4 630D 8A06 73D3 7A8C 8F7F 8F83 654E 6559 7A96 3C3E 6ED8 8F03 5602 5626 65A0 6F16 9175 564D 5DA0 6F50 566D 5B13 7365 85E0 8DAD 8F4E 91AE 8B65 3B2D 76AD 91C2 9D64 6AF5 7E90 4E29 52FC 7EA0 673B 725E 7A76 7CFA 9E20 7CFE 8D73 28CCA 9604 557E 63C2 63EA 841B 63EB 9CE9 644E 6A1B 9B0F 9B2E 4E5D 4E45 4E46 4E63 597A 7078 7396 820F 97ED 7D24 9152 9579 97EE 531B 65E7 3EA9 81FC 548E 759A 4192 67E9 67FE 5003 6344 6855 5313 53A9 6551 5AA8 5C31 5EC4 8205 50E6 5ECF 5ED0 6166 6BA7 9E6B 820A 5336 9BE6 9E94 9F68 9DF2 6C63 6766 6B0D 620B 5978 5C16 5E75 575A 6B7C 95F4 51BF 6214 73AA 80A9 8270 59E6 59E7 517C 76D1 5042 5805 60E4 3B74 730F 7B3A 8C5C 6E54 724B 7F04 83C5 83FA 9593 641B 6937 693E 714E 728D 744A 788A 7F23 844C 8C63 76E3 7777 7B8B 84B9 6A2B 719E 7DD8 9CA3 9CFD 9E63 71B8 2585D 7BEF 7E11 8551 8573 8271 9930 99A2 9E89 7010 97AC 97AF 9CD2 791B 4320 89B8 9D73 7038 9427 6AFC 6BB2 9DBC 97C0 9C39 56CF 8643 946F 97C9 56DD 62E3 67A7 4FED 67EC 5039 6338 6361 7B15 8327 51CF 526A 6898 68C0 583F 63C0 63C3 691C 6E1B 6E55 7751 7877 8A43 950F 5F3F 6695 7450 7B67 7B80 7D78 88E5 8C2B 8DBC 6229 622C 3A35 78B1 5109 7FE6 64BF 6AA2 2372D 8B07 8E47 77BC 7906 7C21 85C6 8947 8949 8B2D 7E6D 9B0B 9E78 703D 8812 9417 9C0E 5297 9E7B 7C5B 8B7E 9E7C 897A 89C1 4EF6 898B 996F 5251 5EFA 6D0A 726E 8D31 4FF4 5263 682B 6DA7 73D4 8230 8350 5065 5271 5FA4 6E10 8C0F 91FC 5BCB 6E85 81F6 88B8 8DF5 65D4 6957 6BFD 249E3 8171 8465 8CCE 9274 952E 50ED 3A34 6997 6F38 528D 528E 3D4E 6F97 7BAD 7CCB 852A 8AD3 8CE4 8D9D 8E10 8E3A 5292 5294 8AEB 92FB 991E 77B7 78F5 85A6 87B9 9373 9375 64F6 6FFA 7E5D 3C04 89B5 93E9 7033 8266 8B7C 8F5E 9431 9451 9452 946C 9473 5F45 58B9 6A7A 7900 6BB1 5DFE 4ECA 65A4 9485 5153 91D1 6D25 77DC 89D4 57D0 73D2 7D1F 8355 887F 60CD 583B 7B4B 91FF 5D9C 9E76 9EC5 895F 4EC5 5C3D 4FAD 537A 5DF9 7D27 5807 83EB 50C5 53AA 8C28 9526 5AE4 5ED1 6F0C 76E1 7DCA 9991 69FF 747E 84F3 5118 9326 8B39 9949 4F12 52A4 52B2 5997 6783 8FD1 8FDB 52C1 6D55 6649 664B 6D78 70EC 8369 8D46 552B 740E 7972 9032 5BD6 6422 6E8D 7981 7F19 9773 5890 3A37 3B10 669C 7468 50F8 51DA 6B4F 6BA3 89D0 5664 3B1C 6FC5 74A1 7E09 8CEE 568D 5B27 3BF2 6FDC 71FC 74B6 85CE 89B2 8D10 9F7D 91D2 781B 743B 58D7 6C5F 59DC 5C06 6D46 7555 8333 8C47 5C07 757A 8441 646A 7FDE 50F5 6F3F 8780 58C3 7F30 6A7F 6BAD 8591 87BF 9CC9 7585 7913 7586 7E6E 97C1 9C42 8BB2 5956 6868 508B 5968 848B 596C 69F3 734E 8199 8523 8029 4243 8B1B 985C 531E 5905 5F1C 6D1A 7EDB 964D 5F36 7D73 88B6 52E5 9171 5D79 647E 6EF0 5F4A 236A6 729F 7CE1 7CE8 91A4 8B3D 91AC 5320 6762 6AE4 5755 5759 5DE0 4EAC 6CFE 7ECF 4EB0 79D4 830E 6D87 834A 5A5B 60CA 65CC 65CD 7304 7D4C 8396 6676 7A09 8148 8346 83C1 7CB3 7D93 844F 5162 7CBE 8059 9CB8 9D5B 9BE8 9D81 9D84 9E96 9F31 9A5A 9EA0 4E95 4E3C 522D 362B 5753 5B91 6C6B 9631 6C6C 80BC 5244 7A7D 9888 666F 981A 5106 5E5C 61AC 66BB 71DB 749F 9838 61BC 74A5 87FC 4718 8B66 598C 51C0 5F2A 5F84 4FD3 205CA 6D44 80EB 8FF3 501E 51C8 5F33 5F91 75C9 7ADE 5A59 5A67 6871 68B7 6DE8 811B 9015 291D5 7ADF 75D9 7AE7 9753 50B9 656C 3B0C 7AEB 9756 5883 734D 8AA9 8E01 9759 477C 975A 955C 975C 66D4 6FEA 701E 93E1 7AF6 7AF8 775B 6A78 71DD 51E5 521F 6285 530A 5C45 62D8 6CC3 72D9 9A79 82F4 6336 75BD 75C0 7717 7820 7F5D 5A35 5A6E 5D0C 63AC 68AE 6DBA 9671 6910 741A 8152 83F9 8D84 8DD4 9514 96CE 824D 871B 88FE 8E18 8E19 92E6 99D2 9B88 9D21 97A0 97AB 9D8B 26951 5C40 3632 6CE6 4FB7 72CA 6854 6BE9 5579 5A45 6DD7 7117 6908 6BF1 6E68 83CA 90F9 7291 8F02 50EA 7CB7 8DFC 8ACA 8D9C 8EB9 95B0 6A58 6A8B 99F6 4CD4 9D59 8E6B 9D74 5DC8 9DAA 861C 9F33 9A67 5480 5F06 6CAE 4E3E 6319 8392 6907 6989 6998 7B65 9F83 849F 8065 8209 8E3D 64E7 9F5F 6AF8 6B05 53E5 5DE8 4E6C 5DEA 8BB5 5177 59D6 5CA0 6007 6010 601A 62D2 62E0 6D30 90AD 661B 6B6B 70AC 82E3 949C 4FF1 5028 5036 51A3 5267 79EC 57E7 57FE 60E7 636E 7C94 801F 86B7 8893 728B 8A4E 8DD9 8DDD 98D3 8C66 9245 952F 5BE0 6133 7AAD 805A 8661 5287 52EE 5C66 8E1E 99CF 58C9 61C5 64DA 6FBD 7AB6 422E 92F8 9B94 5C68 907D 98B6 8C97 7C34 8E86 91B5 61FC 943B 3B2C 77E9 7220 8977 5658 6485 64A7 5C69 8E7B 4E85 2010C 5B52 5B53 51B3 5214 6C12 8BC0 6289 6C7A 5F21 3B48 6CEC 73A6 73A8 82B5 6317 73CF 75A6 7804 7EDD 8673 89C9 5014 6354 6B2E 8697 5D1B 6398 658D 6877 6B8C 8990 89D6 8A23 8D7D 8DB9 4848 5095 53A5 3B7E 7133 7D55 7D76 899A 8D89 902B 920C 37F2 5282 3522 52EA 7474 8C32 99C3 5DA5 61B0 71A6 7234 7357 761A 9D02 9D03 5671 61A0 6A5B 6A5C 855D 8568 7235 81C4 9562 87E8 87E9 5C6B 8B4E 8E76 8E77 9D8C 5337 56BC 7211 77CD 89BA 940D 941D 721D 89FC 5F4F 6204 652B 7383 9DE2 6B14 77E1 9FA3 28C1C 8C9C 8EA9 9481 59E2 5A1F 6350 6D93 7106 8127 74F9 9E43 88D0 52EC 48FA 954C 93B8 9D51 942B 8832 5377 545F 5E23 57CD 6372 83E4 9529 3DF7 9308 81C7 52B5 5946 5DFB 5026 52CC 684A 72F7 7EE2 96BD 6DC3 7737 774A 7D6D 7F65 45AD 9104 7760 7D79 96CB 98EC 21840 617B 8528 990B 7367 7E33 7F82 519B 208D5 541B 5747 36AC 6C6E 59F0 8ECD 94A7 8690 8880 687E 76B2 8399 83CC 921E 7885 76B8 76B9 89A0 9281 929E 9CAA 9E87 9355 9BB6 9E8F 9E95 5441 4FCA 3F59 57C8 5CFB 6343 6D5A 90E1 9656 9982 9A8F 35A5 6659 710C 73FA 2797A 347A 68DE 756F 7AE3 3766 41F9 7B98 7B9F 8720 28318 5101 3559 9915 5BEF 61CF 71C7 6FEC 99FF 9D54 9D58 6508 4551 651F 2E86 5182 518B 5770 6243 57DB 7D45 99C9 99EB 860F 8614 518F 56E7 38A0 6CC2 7085 4FB0 70AF 8FE5 6D7B 9008 70F1 489B 7A98 988E 715A 7D97 50D2 715B 71B2 6F83 8927 FDD0-3111 4E03 6C8F 8FC9 59BB 67D2 501B 51C4 6816 6864 5A38 60BD 687C 6DD2 90EA 6532 671F 68F2 6B3A 3C66 840B 86E3 50DB 5601 617D 69BF 6F06 7DC0 617C 69ED 25250 8AC6 8AFF 970B 45E9 8E4A 3B24 9B4C 4953 93DA 9D88 4E93 9F50 573B 5C90 5C93 5FEF 4E9D 5176 5947 6589 6B67 7541 7941 80B5 82AA 4FDF 75A7 7947 7948 7AD2 5258 658A 65C2 8006 8110 8691 8694 869A 9880 57FC 5D0E 5E3A 6391 6DC7 7309 7566 8DC2 8EDD 91EE 9A90 9A91 68CA 68CB 7426 742A 8401 8415 86F4 612D 7881 7895 797A 44C5 951C 980E 65D7 7CB8 7DA5 7DA6 7DA8 44EB 871D 871E 9B3F 9F4A 7482 8E11 79A5 8572 9321 9CAF 61E0 6FDD 2A5C6 6AB1 6AC0 24A8C 81CD 85C4 9A0E 9A0F 9CCD 4C07 9BD5 9D78 9D80 9E92 7E83 8269 8604 8810 9B10 9C2D 7382 9EA1 4E5E 4F01 5C7A 5C82 9094 542F 5447 675E 7398 76C0 8291 5518 8C48 8D77 5553 5554 5A4D 555F 7EEE 6675 68E8 410E 7DAE 7DBA 8AEC 95D9 6C14 8BAB 5FD4 6C17 6C54 5F03 6C7D 77F5 8FC4 546E 6CE3 7081 76F5 829E 54A0 5951 780C 6814 6B2B 6C23 8A16 552D 5921 68C4 6E46 6E47 789B 847A 6456 66A3 78B6 5650 6187 7508 27858 5668 61A9 78DC 78E7 78E9 468D 7F4A 87FF 9F1C 7F3C 621A 6E0F 7DD5 8904 87A7 7C2F 7C31 7C4F 6390 845C 62E4 8DD2 9160 5736 51BE 34E4 5E22 6070 6D3D 6B8E 7848 6118 9AC2 9790 767F 21D90 49A7 807A 4E14 5207 59BE 602F 5327 7A83 90C4 20CB5 608F 6308 6D2F 3932 60EC 6DC1 7B21 611C 86EA 3966 6705 7BA7 7DC1 9532 21424 7BCB 8E25 7A55 9365 85D2 9BDC 9411 7ACA 2383A 82C6 503F 5AAB 7C61 6084 7857 90FB 5D6A 8DF7 5281 6572 6BC3 8E0D 9121 9125 9539 589D 981D 58BD 5E67 22FE3 6A47 71C6 7F32 9AB9 78FD 936B 936C 7E51 8DAC 8E7A 9430 4E54 4FA8 6865 834D 835E 785A 55AC 83EC 50D1 8C2F 563A 5AF6 376F 6194 9792 6A35 6A4B 854E 7644 4009 77A7 7904 4397 8DAB 85EE 9408 97BD 9866 2710D 5DE7 91E5 6100 9ADC 4FCF 8BEE 5CED 5E29 7A8D 9657 6BBB 7FD8 8A9A 9ADA 50FA 64AC 64BD 9798 97D2 7AC5 7FF9 8B59 8E88 3681 69D7 729E 3400 4E18 4E20 20C0B 5775 36B1 3CCB 90B1 6058 79CB 79CC 86AF 5A9D 6978 8429 9E59 7BCD 7DE7 84F2 8775 7A50 8DA5 4A02 9CC5 87D7 97A6 97A7 9C0C 9C0D 9D96 8824 9F9D 53F4 56DA 624F 72B0 738C 6C53 808D 6C42 866C 6CC5 42B5 866F 4FC5 89D3 8A04 8A05 914B 91D3 5512 3797 3939 3B5D 6D57 7D0C 91DA 6882 6B8F 6BEC 7403 838D 8D47 900E 9011 5D37 5DEF 3962 6E1E 6E6D 76B3 76DA 5DF0 716A 7D7F 86F7 88D8 9052 89E9 8CD5 7486 8764 92B6 9194 9B82 9F3D 9BC4 9C3D 641D 7CD7 91FB 8612 5343 4EDF 5731 5732 5977 6266 6C58 9621 4F65 5C8D 6744 6C67 828A 8FC1 6B26 74E9 81E4 833E 948E 62EA 7275 7C81 515B 60AD 8C38 94C5 5A5C 5B6F 727D 91FA 6394 8688 8C26 9206 96C3 50C9 6106 7B7E 925B 9A9E 9E50 6173 6434 6481 7B9E 8AD0 9077 8930 8B19 9845 6AB6 6510 6ACF 7C3D 9D6E 5B45 6513 9A2B 6511 9B1D 9B1C 3A77 7C64 97C6 4EF1 5C92 5FF4 6272 62D1 524D 94A4 6B6C 8654 94B1 94B3 63AE 8EE1 5A8A 63F5 9210 976C 9257 5898 69A9 7B9D 92AD 6F5B 6F5C 7FAC 6A6C 8541 9322 9ED4 9EDA 6FF3 9A1A 9A1D 704A 9C2C 51F5 80B7 6D45 6DFA 8125 55DB 5D70 69CF 8181 8738 9063 8C34 7F31 7E7E 8B74 6B20 520B 3438 82A1 4FD4 5029 6093 831C 5811 5094 5D4C 68C8 6920 614A 7698 5879 371E 37FB 6B49 7DAA 84A8 69E7 7BCF 8533 8F24 5119 7BDF 58CD 7E34 4945 9C1C 7ACF 9386 93F2 7C56 9453 4EB2 4FB5 94A6 887E 9A8E 5A87 5D5A 6B3D 7D85 8A9B 5D94 89AA 9849 99F8 9BBC 5BF4 3626 5E88 3A81 82A9 82B9 57C1 73E1 79E6 8039 8699 6366 7434 7439 83E6 83F3 9219 96C2 52E4 55EA 5AC0 6EB1 79BD 9772 616C 5659 65B3 9CF9 61C4 3A52 64D2 6FBF 763D 8793 61C3 6A8E 9B35 8804 9D6D 5745 6611 7B09 68AB 8D7E 5BD1 9513 5BDD 5BE2 92DF 87BC 5422 5423 3908 628B 6C81 551A 63FF 83E3 29088 6407 64B3 421C 7019 85FD 545B 6215 6217 65A8 67AA 73B1 7F8C 7F97 7310 8DC4 690C 8154 55C6 6EAC 9516 5D88 6227 69CD 7244 7472 7FAB 8723 9535 7BEC 9306 8B12 8E4C 956A 8E61 9397 93D8 4E2C 5F37 5F3A 5899 5AF1 6F12 6A2F 8503 8537 58BB 5B19 5EE7 6AA3 7246 8594 8262 8620 62A2 7F9F 6436 7FA5 588F 7E48 8941 7E66 93F9 709D 5534 7197 7FBB 55F4 7347 72C5 9751 9752 6C22 8F7B 503E 537F 570A 57E5 5BC8 6C2B 6DF8 6E05 90EC 50BE 873B 8F15 4A1D 9CAD 944B 591D 7520 5260 52CD 60C5 6B91 6674 68FE 6C30 6692 845D 6A08 64CF 64CE 3BF3 6AA0 9EE5 9877 82D8 8BF7 5EBC 9803 5ECE 6F00 3DEB 8ACB 6ABE 5E86 51CA 6385 6BB8 7883 7B90 9758 6176 78D8 78EC 7F44 8B26 7858 6AE6 533A 66F2 4F39 4F49 5324 5C96 8BCE 9A71 5765 5C48 5CA8 5CB4 62BE 9639 3B55 6D40 80E0 795B 5340 7D36 86C6 88AA 8EAF 7B41 7CAC 86D0 8A58 8D8B 5D87 6188 420C 99C6 657A 8AB3 957C 99C8 9EB9 9AF7 9B7C 8DA8 9EAF 89B0 8EC0 9EB4 9EE2 89BB 9A45 9C38 9C4B 4F62 52AC 65AA 6710 80CA 9E32 6DED 7D47 7FD1 6E20 83C3 8EE5 844B 24A0E 7496 8556 9D1D 74A9 78F2 87B6 77BF 87DD 9F29 3739 5FC2 7048 8627 6235 6B0B 6C0D 81DE 766F 7C67 8837 8862 8EA3 883C 947A 9E1C 53D6 7AD8 5A36 8A53 7AEC 877A 9F8B 9F72 53BA 53BB 521E 547F 3C26 551F 801D 9612 89D1 8DA3 95B4 9EAE 95C3 9F01 89B7 8FF2 8850 7F3A 9619 849B 7638 5374 537B 57C6 5D05 5BC9 60AB 96C0 7437 785E 786E 9615 5859 6409 76B5 788F 6128 69B7 58A7 6164 78BA 78BB 8D9E 71E9 95CB 7910 95D5 704D 792D 9E4A 9D72 5CD1 5F2E 606E 609B 5708 570F 68EC 99E9 9409 34B0 5168 6743 4F7A 8BE0 59FE 6CC9 6D24 62F3 7277 8343 8F81 5573 57E2 5A58 60D3 75CA 7842 94E8 6E76 7288 7B4C 7D5F 643C 7454 8472 89E0 8A6E 8DE7 8F07 8737 9293 6A29 8E21 7E13 919B 9CC8 9B08 9A21 9C01 5B49 5DCF 9F64 6B0A 98A7 8838 9874 21FE8 72AC 6C71 754E 70C7 7EFB 7DA3 8647 529D 5238 7276 52E7 97CF 52F8 72AD 6926 697E 95CE 590B 56F7 5CEE 9021 5BAD 5E2C 3A8A 7FA3 7FA4 88D9 88E0 828E 5314 536D 5B86 909B 7A77 7A79 8315 684F 4143 7B3B 8D79 60F8 712A 712D 743C 7B47 823C 86E9 86EC 21983 7162 7758 8DEB 928E 778F 7AAE 511D 618C 6A69 749A 74CA 7AC6 85D1 85ED 74D7 718D FDD0-3112 5915 516E 5FDA 6C50 8980 5438 5E0C 6271 6278 5365 6614 6790 7A78 80B8 80B9 4FD9 5F86 6038 6053 997B 550F 595A 36D3 5C56 6095 6C25 6D60 727A 72F6 90D7 553D 6089 60DC 637F 665E 6878 6B37 6DC5 70EF 7101 7108 740B 7852 8383 8D65 91F8 5092 60C1 6670 6673 3C64 711F 712C 7280 774E 7A00 7C9E 7FD5 823E 83E5 5380 5D60 5FAF 6EAA 7699 910E 9521 50D6 69BD 7155 7184 7188 7199 7DC6 84A0 8725 8C68 990F 563B 564F 5B06 5B09 6F5D 3FB7 761C 78CE 819D 51DE 20615 5DB2 6199 3B1B 6A28 6A40 71B9 71BA 71BB 7AB8 7E18 7FB2 8785 8787 932B 3C46 71E8 406F 77A6 87CB 8C3F 8C40 8C6F 8C95 7CE6 7E65 96DF 9D57 8B46 91AF 93ED 5DC7 66E6 7214 72A7 89F9 96B5 9145 89FD 9F37 8835 9E02 89FF 9474 4E60 90CB 5E2D 7FD2 88AD 89CB 5AB3 693A 3804 5D8D 6F1D 84B5 84C6 89A1 8D98 69E2 3A57 6A84 8582 96B0 8B35 93B4 972B 9CDB 98C1 9A31 9A3D 8972 9C3C 9A68 67B2 6D17 73BA 5F99 94E3 559C 9222 8448 8478 9268 9269 5C63 6F07 6198 84F0 66BF 6B56 8AF0 58D0 79A7 7E30 8B11 87E2 8E5D 74BD 56CD 9C5A 77D6 8EA7 5338 534C 620F 5C43 7CFB 9969 546C 5FE5 602C 77FD 7EC6 4FC2 54A5 6044 76FB 3938 3B61 6B2F 7EE4 90E4 7D30 91F3 960B 55BA 691E 7FD6 8203 8204 8D87 6140 6ECA 7D8C 8D69 588D 7182 7294 798A 7A27 9699 969F 6F5F 89A4 6231 6F99 422A 856E 9ED6 6232 78F6 4B8E 8669 993C 9B29 7E6B 56B1 95DF 3E0D 973C 5C6D 884B 897F 606F 6E13 6A72 72A0 7902 9BD1 8672 75A8 867E 3520 8C3A 5084 9595 7146 7175 98AC 271CD 778E 8766 9C15 5323 4FA0 72CE 4FE0 5CE1 67D9 70A0 72ED 5CFD 70DA 72F9 73E8 965C 7856 796B 7FC8 823A 35C7 7864 967F 656E 6687 7455 7B6A 821D 9050 78AC 8F96 78CD 7E00 7E16 8D6E 9B7B 8578 8F44 935C 971E 938B 9EE0 9A22 9DB7 959C 4E05 4E0B 4E64 5413 759C 590F 3648 7771 5687 61D7 7F45 5913 93BC 93EC 5737 68BA 6E8A 4E9B 3C54 63F3 7332 6954 6B47 874E 880D 52A6 534F 65EA 90AA 5354 80C1 57A5 604A 62F9 631F 594A 5CEB 633E 8105 8107 887A 5055 659C 3B68 8C10 35BF 7FD3 55CB 6136 643A 744E 7D8A 26CC3 3666 7181 818E 52F0 64B7 7DF3 7F2C 8762 978B 9821 64D5 8AE7 71F2 3A66 64F7 97B5 651C 7E88 896D 8B97 9FA4 5199 51A9 5BEB 85DB 4F33 707A 5378 6CC4 6CFB 7EC1 7F37 6D29 70A7 7944 5A0E 5C51 5C53 22B3F 505E 5070 5368 5FA2 68B0 70F2 710E 7D32 4EB5 5A9F 5C5F 6E2B 245C8 79BC 7D4F 7D6C 8C22 50C1 586E 698D 69AD 3D3D 5C67 66AC 7DE4 8909 5667 5DB0 5EE8 61C8 6FA5 736C 7CCF 27735 97F0 71EE 85A2 85A4 893B 8B1D 9082 99F4 7009 97A2 7023 7215 424F 7E72 87F9 880F 9F58 9F5B 9F65 9F42 8E9E 810B 5911 7071 7072 547A 67AD 4FBE 54D3 67B5 9A81 54EE 5BAF 5BB5 5EA8 6D88 7EE1 8653 9E2E 5A4B 689F 7107 7307 900D 75DA 75DF 785D 7863 7A99 8427 9500 63F1 7D83 7FDB 8437 560B 5610 6B4A 6F47 7BAB 8E03 5635 5F47 61A2 3A4B 7362 92B7 9704 81AE 856D 9D1E 7A58 7C18 87C2 87CF 9B48 9D35 56A3 7C2B 85C3 87F0 701F 6AF9 24473 9AC7 56BB 56C2 8828 9A4D 9AD0 6BCA 8648 6D28 3B35 7B05 5D24 6DC6 8A24 90E9 6BBD 7B4A 8AB5 2E8C 2E8D 5C0F 6653 6681 7B71 7B7F 769B 66C9 7BE0 76A2 8B0F 5B5D 8096 52B9 54B2 4FF2 6548 6821 6D8D 7B11 5578 509A 6569 35DB 8A68 5628 8A9F 562F 6B57 71BD 97A9 6585 6586 4567 6077 6EE7 4F11 4FE2 54BB 5EA5 3CDC 4FEE 70CB 70CC 7F9E 8119 8129 9E3A 81F9 8C85 9990 929D 9AE4 6A07 9AF9 9380 9D42 93C5 9948 9C43 98CD 82EC 673D 7D87 6EEB 7CD4 79C0 5CAB 5CC0 73DB 7EE3 7407 8896 9508 55C5 6EB4 7493 890E 890F 92B9 8791 7E4D 7E61 93E5 93FD 9F45 9BB4 353E 4EDA 5C73 5148 597E 7EA4 4F61 5FFA 6C19 6774 79C8 67AE 7946 7C7C 82EE 73D7 6380 83B6 8A2E 94E6 23519 50CA 8DF9 9170 9528 5615 929B 9C9C 97EF 5B10 61B8 66B9 9341 859F 893C 97F1 9BAE 8E6E 99A6 4D4C 5EEF 6515 7E8E 9DB1 8E9A 7E96 8973 9C7B 4F2D 95F2 59B6 5F26 8D24 54B8 6326 80D8 5A34 550C 5563 5A39 5A71 6D8E 7D43 8237 86BF 8854 3B79 75EB 86DD 9591 9592 9E47 5ACC 8858 929C 5AFA 5AFB 61AA 648F 6F96 7509 7A34 8AB8 8CE2 3BD7 3D6A 71C5 8AF4 8F31 918E 7647 764E 77AF 85D6 3C0A 7925 4554 9E79 9E99 8D12 9DF3 9DF4 9DFC 51BC 72DD 39E5 663E 5D04 3B60 6BE8 70CD 7303 86AC 9669 8D7B 967A 7B45 5C1F 5C20 641F 8DE3 3B0E 7992 9291 7BB2 5DAE 736B 96AA 736E 934C 71F9 85D3 9855 5E70 6507 6AF6 8B63 861A 4606 496A 7381 97C5 986F 7066 4F23 53BF 5C98 2070E 73B0 7EBF 81FD 82CB 549E 59ED 5BAA 770C 9650 54EF 57B7 5A0A 5A28 5CF4 3A87 6D80 9665 665B 73FE 784D 83A7 9677 9985 774D 7D64 7F10 7FA1 732E 7CAF 7FA8 817A 8706 49DF 50E9 50F4 21416 7DAB 8AA2 648A 7DDA 92E7 61B2 3B17 6A4C 7E23 930E 9921 58CF 8C4F 493C 9EB2 7017 81D4 737B 7CEE 9F38 4ED9 50F2 7E4A 9466 5FC3 59A1 5FFB 8F9B 90A4 6615 677A 6B23 7098 82AF 76FA 4FFD 3B62 60DE 8A22 920A 950C 65B0 6B46 5EDE 92C5 5B1C 85AA 99A8 946B 99AB 6794 3726 8951 9414 4F08 3430 4F29 56DF 9620 5B5E 3B44 248F2 4FE1 8ED0 812A 8845 8A2B 712E 7161 99B8 820B 9856 91C1 5FC4 567A 4E61 8297 76F8 9999 53A2 554C 90F7 5EC2 6E58 7F03 9109 910A 7A25 8459 9115 7BB1 7DD7 81B7 858C 8944 5FC0 9AA7 9E98 6B00 74D6 9576 9472 9A64 4F6D 74E8 8BE6 5EA0 6819 7965 7D74 7FD4 8A73 8DED 4EAB 4EAF 54CD 9977 6651 98E8 60F3 9284 9909 9C9E 66CF 9B9D 8801 9BD7 97FF 9957 995F 9C76 5411 59E0 5DF7 8683 9879 73E6 5842 7F3F 8856 8C61 9805 842B 50CF 52E8 9297 5D91 6A61 95C0 56AE 87D3 8950 940C 9C4C 697F 9C5C 661F 57B6 9A8D 60FA 7329 714B 7446 8165 86F5 89EA 7BB5 7BC2 9B8F 66D0 89F2 935F 9A02 76A8 9BF9 5211 884C 5F62 90A2 4F80 9649 578B 6D10 90C9 9498 5A19 8365 9658 784E 94CF 9203 6ECE 9276 9292 92DE 3A18 7772 9192 64E4 5174 674F 59D3 5E78 6027 5016 8347 5A5E 60BB 6DAC 8395 7DC8 8208 5B39 81D6 54D8 88C4 8B03 5401 620C 65F4 759E 76F1 6B28 80E5 987B 6647 8A0F 987C 8657 865A 8C1E 5AAD 5E41 63DF 6E51 247E0 865B 88C7 9808 6948 7AA2 980A 5618 9700 5653 589F 5B03 7E03 8751 9B46 6B54 8566 8ADD 8B43 7E7B 9450 9A49 9B1A 9B56 4FC6 5F90 84A3 8BB8 5474 59C1 8BE9 5194 6829 73DD 5066 8A31 668A 8A61 7A30 7CC8 9126 9191 76E8 65ED 4F35 5E8F 6C7F 4F90 5379 6034 6C80 82A7 53D9 6064 662B 6D2B 460F 57BF 6B30 6B88 70C5 73EC 52D6 654D 6558 52D7 70FC 7EEA 7EED 9157 55A3 58FB 5A7F 6702 6E86 7D6E 8A39 6149 7166 8CC9 69D2 6F35 6F4A 76E2 7781 7DD2 805F 84C4 928A 735D 7A38 7DD6 9B63 77B2 85C7 85DA 7E8C 9C6E 8053 7D9A 84FF 524A 75B6 3EE1 8486 9774 35FE 8FA5 8FAA 859B 97BE 7A74 6588 4E74 5B66 5CA4 5CC3 6CF6 8313 9E34 8895 8E05 58C6 5B78 5DA8 6FA9 71E2 3D85 89F7 96E4 9DFD 96EA 9CD5 9C48 8840 3570 5437 5779 72D8 6856 8C11 8D90 8B14 7025 81A4 6A30 825D 8F4C 5405 8F69 660D 5BA3 5F32 8ED2 688B 8C16 55A7 5847 5A97 6103 610B 63CE 6684 714A 7444 8431 8432 777B 84D2 5107 7BAE 7E07 7FE7 8756 92D7 61C1 79A4 8AE0 8AFC 857F 9379 99FD 7FFE 8809 77CE 85FC 8610 8B5E 7384 73B9 3623 75C3 60AC 65CB 7401 8701 5AD9 6F29 66B6 7487 4062 6A88 74BF 61F8 54BA 6645 70DC 9009 3535 9078 9848 7663 766C 6030 6CEB 39E6 6621 70AB 7EDA 7729 94C9 7404 7734 8852 88A8 6E32 7D62 6965 6966 9249 78B9 8519 955F 9799 98B4 7E3C 7E4F 93C7 8B82 8D19 9C1A 5743 52CB 57D9 7104 52DB 5864 718F 7AA8 52F2 8512 52F3 99E8 58CE 736F 85AB 66DB 71FB 81D0 85B0 77C4 7E81 860D 58E6 91BA 5BFB 5EF5 65EC 9A6F 674A 5DE1 7543 8BE2 5CCB 6042 6D35 6D54 7D03 6812 686A 6BE5 73E3 8340 8368 5071 3704 5C0B 5FAA 63D7 295B0 8A62 99B4 69C6 6F43 9C9F 565A 3D4C 6F6F 9129 6533 6A33 71D6 7495 87F3 9C4F 9C58 7065 5342 8BAF 4F28 6C5B 8FC5 4F9A 5DFA 5F87 72E5 6B89 8A0A 8A19 8FFF 900A 595E 5DFD 6BBE 7A04 613B 8CD0 905C 5640 6F60 8548 9D55 720B 9868 9442 8BAD 8A13 5691 51F6 5144 342B 5147 5308 8BBB 5FF7 6C79 54C5 605F 6D36 80F7 80F8 8A29 8A7E 8CEF 96C4 718A 713D 8BC7 7138 8A57 5910 657B 22FCC FDD0-3113 4E4B 652F 536E 6C41 5431 5DF5 6C65 5767 679D 6CDC 77E5 7EC7 80A2 829D 6800 79D3 79D6 80D1 80DD 5001 75B7 7957 79EA 8102 887C 96BB 6894 796C 6925 81F8 6220 6418 7A19 7D95 69B0 7994 8718 99B6 3BC4 9CF7 9D32 9D44 7E54 9F05 8635 6267 4F84 59B7 76F4 59EA 5024 503C 8040 91DE 57F4 57F7 21E1C 6DD4 804C 8CAD 690D 6B96 7286 7D77 8901 8DD6 55ED 74E1 7983 9244 588C 646D 99BD 5B02 6179 6F10 8E2F 6A34 81B1 5128 7E36 8077 87D9 8E60 8EC4 8E91 5902 6B62 53EA 52A7 65E8 5740 5741 5E0B 627A 6C66 6C9A 7EB8 962F 603E 62A7 23CB5 82B7 54AB 6049 6307 67B3 6D14 780B 7949 8F75 75BB 41DB 7D19 8879 6DFD 8A28 8DBE 8EF9 4920 9EF9 916F 85E2 8967 81F3 9624 5FD7 5FEE 627B 8296 8C78 28468 5236 5394 5781 5E19 5E1C 6CBB 7099 8D28 5CD9 5EA2 5EA4 6303 67E3 6809 6D37 81F4 8FE3 90C5 5A21 5F8F 2267A 631A 664A 684E 72FE 7951 79E9 8D3D 8F7E 965F 4E7F 506B 202B7 5F9D 3A01 63B7 68BD 6956 7318 7564 75D4 79F2 79F7 7A92 7D29 7FD0 889F 88A0 89D7 94DA 9E37 5082 21376 5D3B 5F58 667A 6EDE 75E3 86ED 8EFD 9A98 5BD8 5ECC 6431 6ECD 7A1A 7B6B 7F6E 8DF1 8F0A 9527 96C9 5886 21839 6EEF 6F4C 7590 43BA 88FD 899F 8A8C 928D 5E5F 6184 646F 71AB 7A3A 7DFB 442D 81A3 89EF 8CEA 8E2C 92D5 64F3 65D8 7004 99E4 9D19 5295 61E5 6ADB 7A49 4245 87B2 3609 3731 61EB 64F2 8D04 6ACD 74C6 89F6 9BEF 7929 8C51 9A2D 9A3A 9A47 8E93 9DD9 9455 8C52 51EA 4FE7 5F94 8B22 624E 5412 62AF 5953 6313 67E4 67FB 54F3 5067 55B3 63F8 6E23 6942 5284 6463 76B6 6A1D 89F0 76BB 8B47 9F44 9F47 672D 7534 95F8 86BB 94E1 7160 7250 9598 7B9A 802B 9358 8B57 538F 62C3 82F2 7728 781F 6429 9C8A 9C9D 8E37 9B93 9BBA 4562 4E4D 7079 8BC8 54A4 67DE 6805 70B8 5BB1 75C4 86B1 8A50 643E 6EA0 69A8 27A0A 9705 91A1 8707 55FB 5AEC 906E 5387 6298 6B7D 77FA 7813 7C77 8674 54F2 57D1 3B59 7C8D 5560 608A 6662 6663 3B6F 88A9 8F84 5586 86F0 8A5F 41FD 8C2A 99B2 647A 8F12 78D4 8F19 92B8 8F99 87C4 569E 8B2B 8B3A 9BBF 8F4D 8B81 8B8B 8005 4E7D 556B 9517 7987 8D6D 8936 8975 8FD9 67D8 6D59 6DDB 9019 6A1C 6F6A 9E67 87C5 4826 9DD3 7740 8457 8517 635A 658B 658E 6458 69B8 451D 9F4B 29C73 5B85 6AA1 7A84 9259 503A 7826 50B5 5BE8 7635 5908 7C82 4F4B 948A 59B1 5DF6 62DB 662D 76C4 91D7 5541 924A 99CB 7ABC 9363 76BD 722A 627E 6CBC 7475 4203 53EC 5146 8BCF 679B 5797 70A4 72E3 8D75 7B0A 8081 65D0 68F9 436E 8A54 7167 7F69 4207 8087 8088 8D99 66CC 71F3 9BA1 6AC2 77BE 7F84 2EA5 722B 7F40 5DDE 821F 8BCC 4F9C 5468 6D32 8BEA 70D0 73D8 8F80 5F9F 3A04 63AB 6DCD 77EA 90EE 9E3C 558C 7CA5 8D52 9031 8F08 44DF 9282 8CD9 8F16 970C 76E9 8B05 9D43 9A06 8B78 59AF 8F74 8EF8 8098 759B 666D 83F7 776D 7B92 9BDE 7EA3 4F37 546A 5492 5B99 7EC9 5191 54AE 663C 7D02 80C4 76B1 836E 914E 665D 7C99 3473 8A4B 8464 8A76 7503 50FD 76BA 99CE 5663 243F2 7E10 9AA4 7C40 7C55 7C52 9A5F 5E1A 70BF 99F2 6CBE 6BE1 65C3 6834 7C98 86C5 98E6 60C9 8A40 8D88 8A79 959A 8C35 5661 5DA6 9711 6C08 6C0A 859D 9085 77BB 9E6F 65DC 8B6B 9958 9CE3 9A59 9B59 9C63 9E07 8B9D 65A9 98D0 5C55 76CF 5D2D 65AC 382D 692B 7416 370A 640C 76DE 5D83 5D84 6990 98AD 5AF8 9186 6A4F 406A 8F3E 28AC0 27B06 2217A 9EF5 5360 4F54 6218 6808 685F 7AD9 5061 7EFD 68E7 6E5B 83DA 6226 7DBB 5D98 8F1A 6230 8665 8666 89B1 8F4F 8B67 29947 9A4F 8638 8D1E 3630 9488 4FA6 6D48 73CD 73CE 80D7 8C9E 3598 5E2A 6815 6862 771E 771F 7827 91DD 5075 686D 796F 9159 5BCA 5AC3 21EC8 6438 659F 6968 7349 8474 9049 9241 9755 699B 6B9D 7467 7504 78AA 798E 8496 84C1 6F67 799B 7BB4 6A3C 6FB5 81FB 9331 8F43 937C 85BD 7C48 9C75 3431 8BCA 62AE 6795 5F2B 6623 8F78 5C52 755B 75B9 7715 7D3E 8044 8897 8A3A 8EEB 7D7C 7F1C 88D6 4AB4 7A39 99D7 7E25 9B12 9EF0 5733 7EBC 9635 753D 4FB2 630B 42B6 9E29 632F 6715 681A 7D16 9663 7739 8D48 9156 63D5 5866 7471 8AAB 8CD1 47F4 6576 9547 9707 9D06 93AD 93AE 8419 92F4 5F20 5F35 7AE0 50BD 5887 5ADC 5F70 22554 615E 6F33 7350 7CBB 9123 66B2 6A1F 24364 748B 8501 9067 9926 87D1 9A3F 9C46 9E9E 4EC9 957F 9577 6DA8 638C 6F32 7903 4E08 4ED7 6259 5E10 6756 80C0 8D26 5E33 6DB1 8139 75EE 5D82 5E5B 969C 8CEC 762C 7634 7795 7C80 5E65 93F1 9423 4E89 4F42 59C3 5F81 6014 722D 8BE4 20C9C 5CE5 6323 70A1 72F0 70DD 7710 94B2 57E9 5D1D 5D22 6399 7319 7741 8047 28713 94EE 5A9C 63C1 7B5D 3B39 5FB0 775C 9266 5FB4 84B8 7B8F 5FB5 8E2D 7BDC 931A 9B07 9BD6 7665 6C36 628D 7CFD 62EF 639F 6678 6138 649C 6574 6B63 8BC1 5E27 653F 90D1 75C7 5E40 8A3C 5863 40BB 27D84 4223 8ACD 912D 9D0A 8B49 496D 51E7 6731 52AF 4F8F 8BDB 6D19 90BE 682A 73E0 8331 8BF8 732A 7843 79FC 94E2 7D51 86DB 88BE 8A85 8DE6 69E0 876B 9296 6A65 6F74 8AF8 8C6C 99EF 9BA2 9D38 7026 6AEB 6AE7 9BFA 9F04 8829 7AF9 6CCF 7AFA 70A2 7B01 70DB 7A8B 833F 7B1C 8233 9010 7603 7BC9 71ED 880B 8E85 9C41 5B4E 705F 66EF 6B18 7225 883E 4E36 4E3B 20C0D 5B94 62C4 7F5C 6E1A 967C 716E 8A5D 7151 5631 6FD0 9E88 77A9 529A 56D1 65B8 77DA 4F2B 4F47 4F4F 52A9 7EBB 577E 677C 6CE8 82CE 8D2E 8FEC 9A7B 58F4 67F1 6BB6 70B7 75B0 771D 782B 795D 7ADA 7969 7D35 7D38 7F9C 8387 86C0 5D40 7B51 8A3B 8CAF 8DD3 8EF4 94F8 7B6F 9252 99B5 7BB8 7FE5 6A26 92F3 99D0 7BEB 9714 9E86 9444 58B8 6293 6A9B 81BC 9AFD 7C3B 5353 62D9 70AA 502C 6349 684C 68C1 6DBF 68F3 7A5B 25F1A 4B93 7A71 883F 5734 5F74 6C4B 72B3 707C 53D5 59B0 65AB 6D4A 8301 4E35 6D5E 8BFC 914C 5544 5545 5A3A 39FB 3B6C 68B2 70F5 65B1 666B 6913 7438 4401 251CD 787A 7AA1 7F6C 65B2 69D5 64AF 64C6 799A 4175 8AC1 8AD1 92DC 6FC1 7BE7 289E7 64E2 6580 65B5 6FEF 243F8 6AE1 8B36 956F 9D6B 7042 8817 942F 9432 7C57 9DDF 7C71 5285 7AA7 62FD 8DE9 96B9 8FFD 9A93 9525 9310 9A05 9D7B 6C9D 5760 6858 7B0D 5A37 60F4 7F12 7577 7500 787E 8187 8D58 589C 8AC8 918A 7E0B 9323 991F 7908 8D05 8B75 8F5B 9446 7F00 7DB4 4E13 53C0 5C02 7816 5C08 587C 5AE5 911F 747C 78D7 819E 989B 750E 78DA 8AEF 87E4 9853 9C44 8F6C 5B68 8EE2 7AF1 4871 8F49 7077 556D 581F 7451 815E 8483 50CE 8D5A 64B0 7BC6 9994 7BF9 8CFA 8948 8B54 994C 56C0 7C51 5B92 80AB 8FCD 7A80 8C06 8AC4 8860 51C6 57FB 6E96 7DA7 8A30 7A15 51D6 5986 5E84 599D 5A24 6869 8358 6889 838A 6E77 7CA7 88C5 88DD 6A01 7CDA 58EE 58EF 72B6 72C0 58F5 710B 6F34 649E 6207 5E92 4E2D 4F00 6C77 5223 5990 5F78 5FE0 6CC8 7082 7EC8 26B15 67CA 76C5 949F 41D7 822F 8873 8877 7D42 9221 5E52 953A 8520 92BF 87A4 87BD 937E 9F28 8E71 9418 2915E 7C66 80BF 79CD 51A2 55A0 5C30 585A 585C 6B71 7144 816B 7607 7A2E 8E35 7A5C 4EF2 4F17 5995 72C6 794C 91CD 833D 869B 8876 5045 773E 5839 5A91 7B57 8846 8AE5 8FDA FDD0-3114 5403 4F99 54E7 5F68 80F5 86A9 9E31 7735 7B1E 55AB 74FB 8A35 55E4 5AB8 75F4 7D7A 645B 5644 8ABA 779D 9D1F 87AD 7661 9F5D 9B51 5F72 9ED0 5F1B 6C60 9A70 577B 5CBB 8FDF 6301 7AFE 830C 6B6D 834E 86B3 8D7F 7B42 8CBE 8D8D 9045 99B3 7B8E 905F 5880 6F26 8E1F 7BEA 9072 8B18 28A32 5C3A 53FA 544E 4F88 5376 9F7F 5791 80E3 6065 3DB4 7C8E 42BC 803B 8687 6B3C 6B6F 88B2 88B3 88ED 9279 9F52 892B 5F73 53F1 65A5 6758 707B 8D64 996C 62B6 52C5 605C 70BD 52D1 7FC4 7FC5 6555 70FE 75D3 557B 3961 6E41 7873 98ED 50BA 75F8 815F 8DEE 9253 96F4 7608 7FE4 9290 6157 618F 761B 7FE8 906B 71BE 61D8 8DA9 4820 994E 9D92 9DD8 599B 9EB6 53C9 6260 6748 2472F 809E 81FF 633F 505B 63D2 63F7 9987 55CF 929F 9538 7580 8256 9364 9937 79C5 579E 67E5 832C 8336 5D56 7339 976B 643D 8A67 5BDF 69CE 78B4 25ED7 6AAB 297D4 8869 8E45 9572 9454 597C 6C4A 5C94 4F98 8BE7 59F9 7D01 5DEE 47D5 8A6B 8F66 4F21 8ECA 4FE5 7817 5513 8397 7868 86FC 626F 5056 47A3 64A6 5C6E 5F7B 577C 8FE0 3934 70E2 3FED 352D 8045 63A3 7869 9819 5FB9 64A4 6F88 3B1A 52F6 77AE 4720 7221 8286 62C6 9497 91F5 4FAA 67F4 8C7A 7961 558D 5115 9F5C 831D 867F 8883 8A0D 7625 8806 56C6 6284 2207E 5F28 600A 6B29 949E 8A2C 712F 24674 8D85 9214 52E6 4AFF 724A 6641 5DE2 5DE3 671D 9F0C 6F05 911B 5632 6A14 6F6E 7AB2 7F7A 8F48 9F02 8B3F 5435 7092 7727 7123 717C 9EA8 5DD0 4EE6 4EEF 8016 89D8 62BD 5A64 640A 7633 7BD8 72A8 72AB 4EC7 601E 4FE6 5E31 6826 60C6 7D2C 7EF8 6906 7574 7D52 83D7 6101 7697 7A20 7B79 9167 7DA2 88EF 8E0C 5114 96D4 568B 5B26 5E6C 61E4 71FD 85B5 96E0 7587 7C4C 8E8A 91BB 8B8E 8B90 4E11 4E12 541C 677B 677D 4FB4 5062 7785 919C 77C1 9B57 81ED 81F0 6BA0 905A 916C 8FBF 89C7 6400 68B4 8998 9246 88E7 92D3 5E68 895C 6519 5A75 8C17 68CE 6E79 998B 7158 7985 7F20 50DD 7351 8749 8A97 5103 5B0B 5EDB 6F79 6F7A 7DFE 6FB6 78DB 92CB 6BDA 79AA 9561 700D 87EC 913D 5133 5296 87FE 56B5 5DC9 703A 9141 6B03 7E8F 7E92 8E94 9575 826C 8B92 9471 995E 4EA7 522C 65F5 4E33 65BA 6D50 5257 8C04 5574 7522 7523 94F2 9610 5277 8487 5D7C 644C 6EFB 563D 5E5D 8AC2 95B3 9AA3 71C0 8546 7C05 5181 7E5F 8B42 8FB4 93DF 95E1 56C5 705B 8B87 5FCF 785F 3B04 6472 61F4 98A4 61FA 7FBC 97C2 986B 58E5 62BB 6375 90F4 741B 55D4 7D9D 778B 8AC3 8CDD 7E1D 8B13 5C18 81E3 5FF1 6C88 6C89 8FB0 9648 8FE7 5BB8 831E 6550 8380 8390 8A26 8C0C 8ED9 9673 6116 63E8 9202 7141 5875 760E 6A04 852F 9703 8AF6 87B4 85BC 9E8E 66DF 9DD0 8DBB 7876 789C 588B 5926 78E3 8E38 9356 8D02 91A6 75A2 886C 9F80 8D81 8D82 6987 9F53 512C 9F54 512D 56AB 8C36 6AEC 896F 8B96 70E5 6668 4F25 660C 5000 5A3C 6DD0 7316 960A 667F 7429 83D6 9520 88EE 9329 95B6 9CB3 4B96 9BE7 2A087 9F1A 4EE7 514F 80A0 82CC 9578 5C1D 507F 5E38 5F9C 74FA 8407 751E 8178 5617 5872 5AE6 747A 8193 92FF 511F 5690 9CBF 93DB 9C68 5382 573A 6636 60DD 5834 50D8 53B0 5EE0 6C05 92F9 6005 739A 7545 5021 9B2F 5531 60B5 713B 7452 66A2 757C 8AAF 97D4 655E 6919 87D0 6CDF 9637 67FD 722F 6D7E 79F0 5041 86CF 36F5 68E6 6E5E 725A 7424 8D6A 50DC 6186 645A 7A31 9757 6490 6491 7DFD 6A55 77A0 8D6C 9833 6A89 7AC0 7A6A 87F6 93F3 93FF 9953 4E1E 6210 673E 5448 627F 67A8 8BDA 4E57 57CE 5A0D 5CF8 6D06 90D5 4E58 57D5 5BAC 6330 665F 73F9 8100 6381 73F5 7A9A 812D 837F 94D6 5818 60E9 68D6 6909 7A0B 7B6C 7D7E 584D 5856 6E97 7880 41F8 88CE 8AA0 757B 9172 92EE 6195 6F82 6F84 6A59 6A99 7013 61F2 2815D 9A2C 4FB1 5F8E 609C 9A8B 5EB1 901E 7748 9A01 79E4 9BCE 51FA 5C80 521D 6474 6A17 8C99 9F63 520D 82BB 9664 53A8 8C60 9504 5AB0 6EC1 8021 870D 8D8E 924F 96CF 3551 7293 84A2 84AD 3861 5EDA 854F 92E4 6A71 7BE8 5E6E 6AC9 96DB 6AE5 85F8 8E70 8E87 9DB5 8E95 51E6 6775 7840 50A8 6918 696E 891A 6FCB 5132 6A9A 790E 9F6D 9E00 9F7C 4E8D 5904 7ACC 6035 62C0 7ECC 8C56 67F7 6B2A 7AD0 4FF6 654A 755C 3647 57F1 73FF 7D40 8655 5097 7421 6410 6EC0 89E6 9110 8E00 95A6 510A 563C 84EB 8AD4 61B7 65B6 6B5C 81C5 9EDC 89F8 77D7 695A 698B 6A7B 74B4 87F5 6B3B 6B58 9034 8E14 6233 2ECC 2ECD 8FB6 8FB5 3C8B 5A15 5A16 60D9 6DB0 7EF0 5A7C 814F 8F8D 44CE 916B 7DBD 8DA0 8F1F 9F8A 64C9 78ED 7E5B 6B60 56BD 9F6A 9461 63E3 640B 8197 555C 562C 81AA 8E39 5439 708A 5782 5015 57C0 6376 68F0 690E 8144 9672 6425 83D9 9524 69CC 7BA0 9318 9840 939A 9FA1 5DDB 5DDD 6C1A 7A7F 5276 732D 744F 4F1D 4F20 8221 8229 8239 570C 50B3 693D 9044 66B7 7BC5 8F32 821B 8348 5598 6B42 50E2 8E33 6C4C 4E32 7394 948F 91E7 8CD7 9DA8 65FE 6776 6625 583E 5A8B 8405 6699 693F 7443 7BBA 877D 6A41 8F34 81A5 6AC4 9C06 9D9E 2A0B9 7EAF 5507 6D71 7D14 9659 6DF3 8123 83BC 6E7B 7289 6EE3 6F18 8493 84F4 9187 9195 931E 9BD9 5046 60F7 8436 7776 8CF0 8822 9E51 9D89 5205 75AE 7A93 7A97 724E 6450 7255 7621 7ABB 5E8A 7240 5647 5E62 95EF 50B8 6464 78E2 95D6 521B 6006 5231 524F 5259 51D4 5275 6134 5145 51B2 5FE1 6C96 833A 6D7A 73EB 7FC0 8202 5603 644F 5FB8 6183 61A7 885D 41B9 7F7F 825F 8E56 866B 5D07 5D08 9680 7DDF 8769 8908 87F2 721E 5BA0 57EB 205A5 5BF5 94F3 63F0 9283 FDD0-3115 5C38 5931 5E08 545E 8671 8BD7 9E24 5C4D 65BD 6D49 72EE 90BF 5E2B 7D41 91F6 6E64 6E7F 921F 6EAE 6EBC 7345 8479 8A69 9247 9248 7461 8492 84CD 9CF2 8768 9CFE 27A79 9CBA 6FD5 26488 8937 9366 2A014 9BF4 9C24 9DB3 8979 5341 9963 77F3 4E6D 8FBB 65F6 20C34 5B9E 5B9F 65F9 59FC 5CD5 70BB 8680 98DF 98E0 57D8 6642 794F 83B3 5BD4 6E5C 5852 6EA1 9048 9250 5BE6 69AF 8494 8755 4215 9CA5 9F2B 9F2D 9C23 53F2 77E2 4E68 8C55 4F7F 59CB 9A76 5158 5BA9 5C4E 7B36 9242 99DB 58EB 6C0F 793B 4E17 4E16 4ED5 5E02 2EAC 793A 534B 5F0F 5FD5 2EAE 4E8A 4F3C 53D3 623A 4E8B 4F8D 52BF 5469 67F9 8BD5 9970 519F 5BA4 6040 6043 62ED 662F 6630 67BE 67FF 7702 89C6 8D33 683B 70D2 770E 7721 8210 8F7C 9002 94C8 8996 8C49 901D 91C8 5A9E 5D3C 5F11 5FA5 63D3 8C25 8CB0 91CA 52E2 55DC 5F12 7757 7B6E 89E2 8A66 8EFE 9230 9243 98FE 8213 8A93 927D 596D 9069 492D 92B4 9919 566C 5B15 6FA8 8ADF 8AE1 991D 87AB 8B1A 907E 7C2D 91CB 896B 4F66 7ACD 8BC6 62FE 5319 5D75 6981 7176 7BD2 9B96 7C42 8B58 9C18 6740 6C99 7EB1 4E77 5239 524E 7802 5526 7300 7C86 7D17 686C 6BBA 6BEE 3E3A 838E 94E9 75E7 7870 715E 88DF 699D 6A27 8531 9B66 9CA8 9BCA 9BCB 93A9 50BB 510D 503D 553C 5551 5565 5E39 53A6 55A2 8410 5EC8 3C3C 6B43 7FDC 4209 7B91 7FE3 95AF 970E 7E4C 5962 731E 8D4A 756C 7572 8F0B 8CD2 8CD6 6AA8 820C 4F58 8675 86C7 86E5 27D73 820D 6368 4B37 538D 8BBE 793E 5399 5C04 6D89 6DBB 6E09 8A2D 8D66 5F3D 6151 6442 6444 6EE0 6174 6475 850E 6B59 97D8 9A07 8802 4713 61FE 651D 7044 9E9D 6B07 820E 3D13 7B5B 917E 7BE9 7C01 7C1B 91C3 7E7A 6652 3B20 95B7 66EC 5F30 634E 70E7 68A2 83A6 713C 7A0D 65D3 7B72 8244 86F8 8F0E 71D2 4230 98B5 9AFE 9BB9 52FA 828D 67D6 73BF 82D5 7AF0 97F6 5C11 28218 4520 52AD 5372 7ECD 90B5 54E8 5A0B 7D39 8891 7744 7DA4 6F72 8571 53CE 6536 624B 5B88 57A8 9996 824F 5BFF 53D7 72E9 517D 552E 6388 6DAD 7EF6 75E9 58FD 7DAC 5900 7626 46F5 7378 93C9 624C 7363 5C71 5F61 9096 5220 522A 6749 59CD 59D7 829F 9490 67F5 72E6 73CA 8222 82EB 886B 57CF 75C1 8ED5 633B 7B18 8120 8DDA 527C 6427 5607 5E53 717D 6F78 6F98 6A86 7E3F 81BB 7FB4 7FB6 9BC5 3C11 27A3E 95EA 9655 9583 965D 3A8E 6671 7154 7752 718C 89A2 8BAA 6C55 38CC 759D 5261 6247 8A15 8D78 639E 91E4 5093 5584 928F 9A9F 50D0 58A0 58A1 6F6C 25531 7F2E 912F 5B17 64C5 6A3F 6B5A 81B3 4C49 78F0 8B06 8D61 4120 7E55 87EE 4947 87FA 8B71 8D0D 9425 994D 9A38 9CDD 7057 9C53 9C54 5738 6763 958A 657E 7533 5C7E 625F 4F38 8EAB 4F81 547B 59BD 7C76 7EC5 8BDC 59FA 67DB 6C20 73C5 7A7C 7C78 5A20 5CF7 7521 7712 7837 6552 6DF1 7D33 8398 515F 68FD 8A37 8460 88D1 8A75 20EDD 7527 84E1 8518 71CA 99EA 9CB9 66D1 8593 9D62 9BF5 9C3A 4EC0 751A 795E 4C20 5F1E 90A5 5BA1 77E4 54C2 77E7 5BB7 8C02 8C09 5A76 6E16 8A20 5BE9 8AD7 9823 9B6B 66CB 9825 77AB 5B38 700B 3C02 89BE 8B85 80BE 4FBA 661A 80C2 6D81 7718 6E17 8124 7973 814E 613C 614E 6939 7606 7F67 8703 8704 6EF2 92E0 762E 5814 698A 9C30 4F24 6B87 5546 89DE 50B7 5892 616F 6EF3 6F21 6BA4 71B5 850F 87AA 89F4 8B2A 9B3A 57A7 6244 664C 8D4F 8CDE 8D18 945C 4E04 4E0A 5C19 5C1A 6066 7EF1 7DD4 979D 4EE9 88F3 5347 751F 544F 58F0 6598 9629 6607 6CE9 72CC 680D 6B85 7272 73C4 82FC 3C61 965E 7B19 9679 6E66 713A 7525 924E 8072 9F2A 9D7F 7EF3 61B4 7E69 8B5D 7701 771A 5057 6E3B 5723 80DC 6660 5270 76DB 5269 52DD 8CB9 5D4A 741E 8056 58AD 69BA 8542 8CF8 7AD4 66FB 6A73 4E66 6BB3 5C17 6292 7EBE 3450 53D4 6778 67A2 59DD 964E 500F 5010 66F8 6B8A 7D13 6393 68B3 6DD1 7102 8ED7 758E 758F 8212 83FD 9103 6445 6BF9 7D80 8F93 8DFE 8E08 6A1E 7479 852C 8F38 6A7E 9B9B 6504 5135 9D68 79EB 5A4C 5B70 8D4E 587E 719F 74B9 8D16 9F21 5C5E 6691 9ECD 668F 7F72 8700 9F20 6F7B 66D9 3EFF 85A5 85AF 7659 85F7 8961 5C6C 8969 9483 672E 672F 620D 675F 6CAD 4FB8 51C1 54B0 6037 6811 7AD6 8FF0 6055 6352 8357 5EB6 5EBB 7D49 8853 5C0C 9683 6570 7AEA 8167 8481 88CB 9265 5885 6F31 6F44 6578 6F8D 8C4E 6A39 6FD6 9330 4240 93E3 9D90 866A 702D 7CEC 8834 9C6A 9C70 5237 5530 800D 8A9C 8BF4 54FE 8AAA 8AAC 5981 70C1 6714 94C4 6B36 7855 77DF 6420 69CA 78A9 84B4 7361 7BBE 26097 9399 720D 9460 8870 6454 2812E 7529 5E05 5E25 2361A 87C0 535B 8C01 813D 8AB0 6C34 5E28 6D97 6D9A 7971 7A05 7A0E 7761 88DE 7793 6C35 6C3A 9596 95E9 62F4 9582 6813 6DAE 8168 542E 987A 821C 9806 6A53 779A 8563 77AC 9B0A 53CC 971C 96D9 5B40 9AA6 5B47 9A3B 6B06 7935 9DDE 9E74 4276 826D 9A66 9E18 723D 587D 6161 6F3A 6A09 7E14 45EE 7040 93EF FDD0-3116 2E9C 65E5 9A72 56F8 91F0 9224 99B9 60F9 70ED 71B1 5A06 9976 6861 835B 5B08 6A48 8558 8953 9952 6270 96A2 64FE 7ED5 9076 7E5E 53B9 79B8 67D4 5A83 63C9 6E18 7163 7448 4413 8447 7CC5 875A 8E42 8F2E 9352 97A3 74C7 9A25 9C07 9D94 7C88 697A 97D6 2EBC 8089 5B8D 816C 5465 80B0 86A6 887B 8887 86BA 88A1 7136 9AE5 562B 3723 9AEF 71C3 7E4E 4533 5184 5189 59CC 67D3 73C3 82D2 5AA3 6A6A 8485 4EBA 4EBB 4EC1 58EC 5FC8 6732 5FCE 79C2 82A2 9213 9B5C 928B 433E 9D40 5FCD 6820 6823 834F 79F9 8375 68EF 7A14 5203 5204 8BA4 4EDE 4EED 8BB1 4EFB 5C7B 5C83 3834 6268 7EAB 2EB6 2634C 598A 6752 7263 7EB4 8095 8F6B 97E7 996A 59D9 794D 7D09 7D1D 887D 8A12 8ED4 6895 3E3E 8EE0 41EE 7D4D 814D 88B5 976D 9771 97CC 98EA 845A 8A8D 9901 7D9B 8EB5 7A63 5134 52F7 703C 737D 8618 74E4 79B3 7A70 4274 8E9F 9B24 58CC 56B7 58E4 6518 7219 7E95 8BA9 61F9 8B72 8B93 6254 4ECD 20BA8 3B41 8FB8 793D 3EB1 967E 82BF 633C 5982 909A 4F9E 5E24 6847 8339 94F7 6E2A 7B4E 88BD 8498 92A3 8761 5112 8560 9D11 5685 5B2C 5B7A 6FE1 9D3D 66D8 71F8 85B7 8815 8966 98A5 91B9 986C 9C6C 6C5D 8097 4E73 8FB1 910F 64E9 5165 6D33 55D5 5AB7 6EBD 7F1B 84D0 7E1F 8925 6256 6741 8FBC 9CF0 5DBF 637C 53D2 82E5 5F31 504C 6E03 712B 9100 6949 84BB 7BAC 7BDB 7207 9C19 9C2F 9DB8 5D76 5A51 6875 7524 7DCC 8564 4B10 6A64 854A 854B 7E60 8602 8603 6C6D 6798 82AE 4132 868B 9510 745E 777F 8739 92B3 92ED 53E1 289E8 3AAB 58E1 5827 648B 58D6 962E 670A 8F6F 800E 5044 8EDF 5A86 744C 789D 7DDB 44F4 8F2D 74C0 791D 77A4 95F0 6DA6 958F 95A0 6F64 6A4D 81B6 8338 620E 809C 6804 72E8 7ED2 5BB9 3B5C 6BE7 8319 8363 70FF 4846 5D58 41EF 7D68 7FA2 5AB6 5AC6 5D64 6408 6411 6EB6 38D1 6995 69AE 69B5 7194 7462 84C9 7A41 877E 9555 7E19 878D 878E 8923 99E5 9AF6 5B2B 5DB8 7203 9394 701C 5DC6 66E7 8811 2A0FE 5197 5B82 5748 22AE8 5087 8EF5 6C04 9D27 7A43 FDD0-3117 4E72 5B5C 5179 54A8 59D5 59FF 830A 6825 7386 7D0E 8332 8D40 8D44 6DC4 79F6 7F01 8C18 55DE 5B73 5D6B 6914 6E7D 6ECB 7CA2 8F8E 5B76 8458 89DC 8A3E 8CB2 8CC7 8D91 9111 9531 798C 7A35 7DC7 922D 9543 9F87 8F1C 6FAC 8AEE 8DA6 8F3A 9319 9AED 9CBB 9F12 937F 93A1 74BE 983F 983E 9BD4 9D85 9F4D 2A5CB 9C26 84FB 20094 4ED4 5407 674D 3EAD 59C9 59CA 77F7 79C4 5470 7C7D 8014 80CF 8678 79ED 6893 7B2B 91E8 5559 7D2B 6ED3 8A3F 699F 5B57 81EA 8293 39D8 5033 525A 6063 7278 8321 6E0D 7725 7726 80D4 80FE 6F2C 3C74 5B50 5D30 6A74 5E00 531D 6C9E 5482 8FCA 62F6 7D25 7D2E 9254 9B73 81DC 81E2 6742 7838 507A 5592 97F4 96D1 22D8D 5DBB 78FC 894D 96DC 56CB 56D0 96E5 548B 5219 629E 6CA2 62E9 6CCE 6CFD 8D23 5247 8FEE 835D 5536 5567 5E3B 7B2E 8234 8CAC 6EAD 77E0 5616 5AE7 5E58 7BA6 6A0D 8ACE 8D5C 64C7 6FA4 769F 7794 7C00 790B 8B2E 8CFE 880C 8957 9F5A 456A 9F70 9E05 5928 4EC4 5E82 6C44 6603 6617 6351 5D31 4F2C 8536 707D 707E 753E 54C9 683D 70D6 6E3D 83D1 7775 8CF3 5BB0 5D3D 43C1 518D 5728 6257 4FA2 6D05 8F7D 50A4 8F09 9168 510E 7E21 8D3C 621D 8CCA 9C97 9BFD 8808 9C02 9C61 50AE 906D 7CDF 8E67 91A9 51FF 947F 65E9 67A3 86A4 68D7 6FA1 74AA 85BB 7E70 85FB 7076 7681 7682 5515 5523 688D 9020 55BF 8241 6165 566A 71E5 7C09 8B5F 8DAE 8E81 7AC3 7AC8 6806 90B9 9A7A 8BF9 90F0 966C 68F7 68F8 83C6 9112 7B83 7DC5 8ACF 9CB0 9139 9BEB 9EC0 9A36 9F71 9F7A 8D71 8D70 594F 63CD 6971 3D75 9BD0 5142 7CCC 7C2A 7C2E 9415 941F 54B1 661D 6CAF 685A 5BC1 3CEB 63DD 5646 648D 5127 6505 6512 5139 6522 8DB1 7938 8DB2 6682 3506 66AB 8CDB 8D5E 933E 6FFD 8E54 913C 74C9 8D0A 93E8 74D2 373A 7052 8B83 9147 74DA 79B6 8978 8B9A 9961 600E 8C2E 8B56 8B5B 56CE 5328 7242 7F98 8D43 8CCD 81E7 8CD8 8535 8D13 9AD2 8D1C 9A75 99D4 3638 5958 5F09 810F 585F 846C 92BA 81D3 81DF 5897 589E 618E 7F2F 912B 6A67 71B7 7494 77F0 78F3 7F7E 7E52 8B44 9503 92E5 8D60 7511 8D08 9C5B 79DF 8445 84A9 5346 8DB3 5352 54EB 5D12 5D2A 65CF 50B6 7BA4 8E24 8E3F 955E 93C3 8BC5 7EC4 963B 4FCE 723C 73C7 7956 7D44 8A5B 977B 4503 93BA 6628 79E8 637D 838B 690A 7422 7A13 7B70 923C 20087 5DE6 4F50 5528 7E53 4F5C 5750 3634 5C9D 5C9E 600D 963C 4FB3 80D9 5511 5EA7 795A 505A 3930 3B6E 888F 8443 8444 98F5 3600 7CF3 5497 84D9 539C 6718 3B70 55FA 6A36 87D5 7E97 5D8A 5634 5DB5 567F 74BB 682C 7D4A 9154 6700 666C 797D 7A21 7F6A 8FA0 69DC 917B 9189 855E 92F7 930A 6A87 6A8C 67A0 7A5D 94BB 28256 8E9C 947D 7E64 7F35 7E82 7E89 7C6B 7E98 6525 945A 5C0A 58AB 58FF 5D9F 6A3D 9075 7E5C 7F47 940F 9CDF 9C52 9DF7 50D4 5642 6499 453F 8B50 6358 928C 9D8E 5B97 5027 7EFC 9A94 582B 5D4F 5D55 60FE 68D5 7323 8159 6721 6936 847C 5D78 4053 7A2F 7D9C 7DC3 71A7 4226 7DF5 7FEA 876C 8E28 8E2A 78EB 9350 8C75 8E64 9A0C 9B03 9A23 9B09 9B37 9BEE 9BFC 9441 603B 506C 6374 60E3 6121 63D4 6403 50AF 3DD3 6460 7DCF 84D7 7E02 7E3D 93D3 7EB5 662E 75AD 500A 7314 7882 7CBD 7CC9 7632 7E26 931D 7E31 7CED 6F48 FDD0-3118 5472 75B5 8D7C 5068 8D80 8DD0 29A28 9AB4 7E12 8800 9ACA 9F79 8BCD 3639 5790 67CC 73C1 5832 7960 8308 8328 3935 74F7 46D0 8A5E 8F9D 8F9E 6148 7506 78C1 96CC 4A0F 9E5A 7CCD 8FA4 98FA 9908 3602 5B28 6FE8 858B 9D1C 7920 8FAD 9DBF 9DC0 6B64 4F4C 6CDA 73BC 7689 7D2A 9B86 673F 6B21 4F3A 4F7D 523A 523E 5E9B 6828 8326 7D58 83BF 86D3 8D50 8CDC 8786 3A5E 5693 64E6 6503 7924 906A 56C3 518A 518C 4FA7 5395 607B 62FA 6D4B 6547 755F 5074 53A0 7B27 7CA3 5EC1 60FB 6E2C 7B56 8417 7B5E 7B74 8434 5884 3A32 7BA3 84DB 61A1 25C21 7C0E 5072 5A47 731C 624D 72B2 6750 8D22 8CA1 88C1 6EA8 7E94 6BDD 91C7 5038 554B 5BC0 5F69 63A1 776C 8DF4 7DB5 8E29 57F0 68CC 83DC 8521 7E29 64A1 64CD 7CD9 66FA 66F9 5608 5D86 6F15 69FD 84F8 25562 825A 87AC 893F 93EA 8278 8349 613A 61C6 9A32 808F 9135 8959 2EBE 8279 51D1 6E4A 8160 8F8F 8F33 53C2 53C3 53C4 98E1 9A96 53C5 55B0 6E4C 50AA 5B20 9910 9A42 6B8B 8695 60ED 6B98 615A 8745 6159 45DD 5B31 8836 883A 60E8 6701 6158 61AF 7A47 7BF8 9EEA 9EF2 707F 36D1 63BA 5B71 7CB2 647B 6FAF 71E6 74A8 8592 8B32 510F 7218 5D7E 5C91 6D94 7B12 68A3 4ED3 4EFA 4F27 6CA7 82CD 9E27 5009 8231 5096 5D62 6EC4 734A 84BC 8259 87A5 9DAC 85CF 9476 416E 8CF6 6FF8 7F49 6B0C 66FD 564C 5C42 66FE 5C64 5D92 3B1D 7AF2 4255 9A53 8E6D 7C97 89D5 9E81 9E84 9EA4 5F82 6B82 4FC3 731D 8128 9162 7604 8A8E 8D97 5648 61B1 851F 8E27 918B 762F 7C07 7E2C 8E59 4944 9F00 8E74 8E75 9863 6413 7473 64AE 78CB 9073 8E49 919D 3B6B 8658 75E4 7749 77EC 5D6F 5D73 84AB 8516 9E7E 9142 9E7A 8EA6 811E 5249 5252 539D 590E 632B 63AA 839D 83A1 65AE 68E4 902A 9509 9519 84CC 6B75 92BC 932F 5D14 50AC 51D7 7F1E 5894 3720 5D89 615B 6467 69B1 7355 69EF 78EA 7E17 93D9 6F3C 7480 8DA1 76A0 4F1C 5FF0 75A9 5005 7C8B 7D23 7FC6 8103 8106 5550 555B 60B4 6DEC 6BF3 7120 813A 8403 7601 7CB9 7DB7 7FE0 81AC 81B5 6FE2 7AC1 9847 81CE 894A 4E7C 6C46 64BA 92D1 9569 8E7F 651B 8EA5 9479 6AD5 5DD1 6B11 7A73 7A9C 6BA9 71B6 7BE1 7C12 7AC4 7228 6751 90A8 76B4 8E06 6F8A 7AF4 5B58 4F9F 62F5 520C 5FD6 5BF8 540B 7C7F 5306 56EA 56F1 5FE9 679E 82C1 6031 60A4 217DF 68C7 7127 249DA 8471 6F17 8061 9AA2 66B0 6A05 6A2C 719C 747D 7481 7DEB 8066 806A 84EF 8525 779B 71EA 7BF5 8070 87CC 936F 7E71 93E6 9A18 9A44 4ECE 4E1B 5F93 5A43 5B6E 5F96 5F9E 60B0 6DD9 742E 6152 6F0E 6F40 6F68 8AB4 8CE8 8CE9 6A37 53E2 85C2 7047 6B09 721C 6181 8B25 8310 FDD0-3119 53B6 7E9F 4E1D 53F8 3EA8 7CF9 79C1 549D 6CC0 601D 8652 9E36 5AA4 65AF 7D72 7F0C 86F3 6952 3D32 9270 98D4 51D8 53AE 69B9 7997 7F73 8724 9536 5636 565D 21852 5EDD 6495 6F8C 78C3 79A0 25BE8 7DE6 92D6 71CD 856C 8784 452E 87D6 87F4 98B8 9A26 9401 29170 9DE5 9F36 7C6D 6B7B 5DF3 4E96 56DB 5BFA 6C5C 4F40 4FA1 5155 59D2 5B60 676B 6CD7 6CE4 7940 9972 9A77 3B52 67F6 726D 5A30 6D0D 6D98 8082 98E4 7B25 801C 91F2 7AE2 8997 55E3 8086 8C84 9236 923B 98FC 99DF 79A9 5129 857C 7003 4FEC 6056 92AF 4EE8 6331 6332 6492 6D12 8A2F 9778 6F75 7051 8EA0 5345 6CE7 98D2 810E 9212 8428 644B 98AF 99BA 85A9 6AD2 8644 20BBF 96A1 95AA 8272 6D13 681C 6DA9 556C 94EF 6B6E 7417 96ED 55C7 745F 6B70 92AB 6F81 61CE 64CC 6FC7 7637 7A51 6F80 74B1 7012 7A61 7E6C 8F56 93FC 8B45 98CB 6E0B 6FCF 7A6F 6BE2 6122 63CC 585E 6BF8 816E 567B 9CC3 984B 4C04 9C13 4222 55EE 8D5B 50FF 8CFD 7C3A 5625 63BB 9A9A 6145 6414 6E9E 7F2B 7E45 81CA 9CCB 9A12 9A37 9C20 9C62 626B 6383 5AC2 4545 57FD 7619 6C09 77C2 9ADE 87A6 635C 5EC0 998A 55D6 5ECB 641C 6449 6EB2 7340 910B 6457 22CB7 8490 84C3 953C 98D5 422D 8258 878B 9199 93AA 993F 98BC 98BE 9A2A 53DC 53DF 5081 55FE 778D 64DE 85AE 64FB 6AE2 85EA 7C54 8184 7636 55FD 4E09 5F0E 53C1 6BF5 4200 6BFF 7299 9B16 4ED0 4F1E 5098 7CC1 7CC2 9993 7CDD 7CE3 7CE4 7E56 93D2 93FE 9730 994A 4FD5 5E34 60B7 6563 9590 58ED 6BF6 5381 6A75 68EE 692E 69EE 8942 6852 6851 55D3 6421 78C9 892C 98A1 939F 9859 4E27 55AA 69E1 50E7 448F 9B19 82CF 7526 9165 7A23 7AA3 7A4C 6AEF 8607 8613 56CC 4FD7 738A 5919 6CDD 8083 6D2C 6D91 73DF 7D20 5BBF 6880 6B90 7C9B 83A4 901F 9A95 5083 7C9F 8C21 55C9 5850 5851 5ACA 612B 6EAF 6EB8 8085 9E54 50F3 3504 612C 69A1 8186 89EB 8D9A 9061 619F 6A0E 6A15 6F5A 6F65 24882 78BF 850C 906C 92C9 9917 3B18 6A5A 749B 7E24 7C0C 8B16 8E5C 85D7 9A4C 9C50 9DEB 8BC9 8A34 9BC2 5506 36D6 5A11 686B 68AD 838F 509E 7743 55CD 7FA7 644D 7F29 84D1 8D96 7C11 450B 7C14 7E2E 9AFF 9BBB 6240 4E7A 3ABD 5522 7D22 7410 60E2 9501 55E9 22C62 6E91 669B 7463 7485 8928 459B 9388 938D 9396 93BB 93C1 9024 6EB9 8736 7411 55E6 590A 6535 8295 867D 5020 54F8 6D7D 772D 837D 837E 6ED6 7762 7D8F 8470 71A3 6FC9 9796 96D6 7EE5 968B 9040 968F 96A8 74CD 81B8 4B49 7021 9AC4 9AD3 4E97 5C81 7815 795F 8C07 57E3 5D57 21ED5 6B72 6B73 716B 775F 788E 9042 7A42 8AB6 8CE5 5B18 6FBB 96A7 6A85 6A96 71E7 74B2 7A57 7E40 9083 79AD 7A5F 7E50 65DE 7E78 895A 8B62 9406 9429 97E2 72FB 75E0 9178 5334 7958 7B07 7B6D 7B97 849C 5B59 72F2 5B6B 836A 98E7 640E 733B 98F1 69C2 84C0 8575 859E 635F 7B0B 96BC 7B4D 640D 69AB 7BB0 7C28 93A8 9DBD 5FEA 677E 6780 5A00 67D7 502F 51C7 5D27 5EBA 68A5 6DDE 83D8 5D69 7879 8719 61BD 6FCD 290ED 6AA7 9376 9B06 6002 609A 8038 7AE6 50B1 612F 3A26 6964 5D77 616B 8073 99F7 8BBC 5B8B 8BF5 9001 9882 8A1F 980C 8AA6 9938 67A9 93B9 FDD0-311A 5475 963F 9515 55C4 554A FDD0-311B 5594 5662 54E6 7B7D FDD0-311C 59B8 59BF 94B6 5A3F 5A40 5C59 75FE 8BB9 542A 56EE 8FD7 4FC4 5A25 5CE8 5CE9 6D90 73F4 83AA 8A1B 7692 774B 4109 920B 9507 9E45 86FE 8A90 78C0 981F 989D 9B64 96B2 984D 9D5D 9D5E 8B4C 21145 9C2A 6799 7808 980B 5641 9A00 5384 5C75 6239 6B7A 5443 5C8B 627C 9628 545D 82CA 8F6D 9638 54A2 54B9 20C65 57A9 59F6 5CC9 7810 530E 6076 7828 4465 8685 997F 5054 537E 580A 60AA 63A0 7565 7846 8C14 8EDB 960F 35C1 582E 5D3F 60E1 6115 6E42 4748 8C5F 8EF6 9102 922A 5EC5 6424 6439 3B99 7427 816D 843C 8A7B 904C 904F 50EB 8741 9537 9E57 981E 989A 9913 9B65 5669 855A 89A8 8AE4 95BC 9929 8C96 9354 9CC4 6B5E 984E 7918 6AEE 9C10 9D9A 8B8D 9F43 9469 9F76 9C77 64DC 9D48 FDD0-311E 54C0 54CE 5509 57C3 5A2D 6328 6B38 55F3 6EBE 92B0 953F 566F 9384 5540 6371 7691 6EB0 560A 6571 6573 769A 764C 9A03 6BD0 6639 5A3E 77EE 853C 8EB7 6FED 972D 85F9 9744 4F0C 827E 3637 7231 7839 784B 35D2 55CC 5867 5AD2 611B 788D 9698 53C6 66A7 7477 95A1 50FE 416C 5B21 61D3 58D2 61DD 66D6 74A6 8586 9932 9D31 76A7 77B9 453D 99A4 7919 8B6A 8B7A 9440 9749 9C6B FDD0-311F 8BF6 8A92 FDD0-3120 51F9 356D 67EA 688E 8EEA 720A 6556 53AB 55F7 55F8 5D85 5ED2 6EF6 7353 7352 969E 646E 23281 71AC 7488 851C 9068 78DD 7FF1 8071 87AF 7FFA 8B37 8B38 9CCC 93D6 9C32 9DD4 9F07 629D 62D7 82BA 8884 957A 5AAA 5ABC 8956 362D 5C99 6277 5773 5787 5CB0 5961 5965 50B2 5967 9A9C 371C 5AEF 6160 22CC6 58BA 5DB4 61CA 64D9 6FB3 96A9 93CA 9A41 7FF6 FDD0-3121 8BB4 6CA4 6B27 6BB4 74EF 9E25 5878 6F1A 6B50 6BC6 71B0 9D0E 750C 210BF 8B33 6AD9 93C2 9DD7 4972 8192 9F75 20676 5418 5455 5076 8162 5614 3496 8026 8545 85D5 6004 616A 85F2 FDD0-3122 5B89 4F92 5CD6 6849 6C28 5EB5 4002 8C19 5A95 83F4 75F7 8164 843B 844A 9E4C 8A9D 84ED 978C 978D 76E6 8AF3 99A3 76EB 9D6A 97FD 9D95 73B5 557D 96F8 5111 57B5 4FFA 5535 57EF 94F5 63DE 968C 7F6F 92A8 72B4 5CB8 6309 6D1D 6848 80FA 834C 8C7B 5813 5A69 4141 667B 6697 930C 95C7 9B9F 4B97 9EEF FDD0-3123 5940 6069 217EF 717E 84BD 5CCE 6441 4B53 FDD0-3124 80AE 9AAF 536C 5C87 6602 663B 44A2 3B7F 678A 76CE 91A0 FDD0-3125 97A5 FDD0-3126 513F 800C 5150 4F95 5152 5CCF 6D0F 9651 682D 80F9 834B 5532 9E38 7CAB 804F 88BB 8F00 42E9 9C95 9AF5 96AD 9B9E 9D2F 8F5C 53BC 5C12 5C13 5C14 8033 6D31 8FE9 9975 682E 6BE6 73E5 94D2 723E 990C 99EC 85BE 9087 8DB0 4E8C 5F0D 5F10 4F74 5235 54A1 36C5 8D30 8CAE 8848 8CB3 8A80 927A 6A32 FDD0-3127 4E00 4E4A 5F0C 4F0A 8863 533B 541A 58F1 4F9D 54BF 20C96 36C4 3CD6 6D22 794E 2343F 6098 7317 94F1 58F9 63D6 6B39 86DC 90FC 5ADB 6F2A 7995 7A26 92A5 5B04 566B 5901 747F 9E65 7E44 4AD1 6AB9 6BC9 91AB 9EDF 8B69 9DD6 9EF3 4E41 4EEA 531C 572F 5937 519D 5B90 6C82 8BD2 8FC6 4F87 6021 6CB6 72CB 9974 54A6 59E8 5CD3 5DF8 5F2C 605E 62F8 67C2 73C6 886A 8D3B 8FE4 5BA7 6245 6818 684B 3EBF 74F5 7719 80F0 8A11 8CA4 8FFB 75CD 79FB 801B 8898 51D2 7FA0 8413 86E6 8A51 8A52 8CBD 5A90 6686 6938 8A83 8DE0 9057 9809 9890 98F4 7591 5100 71AA 7BB7 5DAC 5F5B 5F5C 8794 907A 9824 5BF2 5DB7 7C03 984A 294E7 4C4C 5F5D 5F5E 8B3B 93D4 89FA 3C18 8B89 9E03 4E59 5DF2 4EE5 9487 4F41 20BCB 653A 77E3 8094 5EA1 8223 82E1 82E2 8681 91D4 501A 6246 914F 506F 7B16 9018 5D3A 65D1 6905 9CE6 926F 65D6 88FF 8E26 8F22 657C 8798 49E7 6AA5 4B72 7912 8264 87FB 9857 8F59 9F6E 4E42 20086 4E49 4EBF 5F0B 5208 5FC6 808A 827A 8BAE 4EA6 3439 4F07 5C79 5F02 4F3F 4F5A 52AE 5453 5744 5F79 6291 6759 8034 8285 8BD1 9091 4F7E 546D 5479 5CC4 6008 603F 6613 678D 6B25 3CD1 6CC6 7088 79C7 7ECE 82C5 8BE3 9A7F 4FCB 5955 5E1F 5E20 5F08 223D7 67BB 6D02 6D42 73B4 75AB 7FBF 263F8 8F76 3465 5508 57BC 6092 6339 6359 6827 683A 6B2D 6D65 6D73 76CA 8875 8C0A 52DA 57F6 57F8 60A5 639C 6BB9 7570 785B 7F9B 7FCA 7FCC 88A3 8A32 8A33 8C59 8C5B 91F4 966D 96BF 5E46 6561 6679 68ED 6B94 6E59 7132 2497F 433B 86E1 8A4D 8DC7 8EFC 9038 9220 4E84 517F 3534 610F 6EA2 7348 75EC 776A 7AE9 41FC 7F22 7FA9 8084 88D4 88DB 8A63 9AAE 52E9 5AD5 5ED9 698F 7617 8189 8734 977E 99C5 5104 3989 648E 69F8 6BC5 6F69 71A0 71A4 761E 84FA 8ABC 9552 9E5D 9E62 9ED3 5293 3601 571B 58BF 5B11 5B1F 5DA7 61B6 61CC 66C0 6BAA 3D69 6FBA 71BC 71DA 7631 7796 7A53 7E0A 8257 87A0 5BF1 6581 66CE 6A8D 6B5D 71E1 71F1 7FF3 7FFC 81C6 858F 8939 8CF9 9BA8 7654 8D00 93B0 9571 7E76 7E79 85D9 85DD 8C77 972C 9BE3 9D82 9D83 39A4 7037 8B6F 8B70 91B3 91B7 9950 2113B 25725 8619 943F 9DC1 9DCA 56C8 61FF 9A5B 9DE7 9DFE 8649 897C 9F78 8B9B 5307 8864 8FB7 5B9C 7569 692C 841F 9D8D 7C4E 4E2B 5727 538B 5416 5E98 62BC 6792 57AD 9E26 6860 9E2D 57E1 5B72 690F 9D09 930F 9D28 58D3 9D76 941A 7259 4F22 5391 5C88 5393 73A1 82BD 7B0C 869C 5810 5D15 5D16 6DAF 731A 740A 7458 775A 8859 6F04 9F56 2A632 24D13 538A 5E8C 54D1 5516 555E 75D6 96C5 7602 279DD 8565 529C 5720 8F67 4E9A 897E 8BB6 4E9C 72BD 4E9E 8ECB 8FD3 5A05 631C 7811 4FF9 6C29 5A6D 6397 8A1D 94D4 63E0 6C2C 7330 8050 26716 5714 7A0F 7AAB 9F7E 2E84 4E5B 5440 54DF 5537 55B2 503B 6396 668D 6930 564E 6F71 882E 8036 6353 94D8 63F6 91FE 92E3 64E8 9381 4E5F 5414 51B6 57DC 91CE 5622 6F1C 58C4 4E1A 53F6 66F3 9875 66F5 591C 62B4 90BA 4EB1 67BC 9801 6654 67BD 70E8 35A1 5558 6DB2 8C12 5828 6B97 814B 696A 696D 8449 9113 998C 50F7 6B4B 58B7 420E 9765 5DAA 5DAB 64DB 66C4 66C5 6FB2 71C1 2681C 8B01 9134 9923 5688 64EB 66D7 76A3 77B1 9371 64EA 77B8 790F 42A6 9391 9941 9D7A 7217 9437 9768 9A5C 9E08 7237 4EAA 723A 5E7A 592D 5406 5996 6796 6B80 7945 8A1E 5593 6946 8170 847D 4301 4645 9D01 9080 723B 5C27 5C2D 80B4 579A 59DA 5CE3 409A 8F7A 5004 70D1 73E7 7A91 509C 582F 63FA 8C23 8EFA 347E 55C2 5AB1 5FAD 612E 6416 6447 733A 3A31 669A 69A3 7464 7476 9059 9065 929A 98D6 9906 5DA2 5DA4 7AAF 7AB0 4504 991A 7E47 8B20 8B21 26FBE 9390 9CD0 4B19 98BB 8628 908E 9864 9C29 4EF8 5B8E 5C86 62AD 6773 72D5 54AC 67FC 82ED 7711 7A85 7A88 8200 5060 5A79 5D3E 6E94 699A 84D4 9D22 9F3C 95C4 9A15 9F69 9DD5 7A7E 8981 94A5 25052 836F 7A94 888E 7B44 8A4F 846F 718E 899E 977F 735F 9E5E 25AAF 85AC 66DC 71FF 825E 77C5 85E5 8000 7E85 9DC2 8B91 9470 4F18 5FE7 6538 5466 602E 6CD1 5E7D 60A0 900C 9E80 6EFA 6182 512A 5698 7000 913E 6ACC 7E8B 8030 5C22 5C24 7531 6C8B 72B9 3F55 233DE 6CB9 80AC 90AE 6023 65BF 75A3 5CF3 6D5F 79DE 4343 94C0 5064 839C 83B8 86B0 8A27 6E38 7336 9030 90F5 9C7F 6962 7337 904A 923E 9C89 8F0F 99C0 8763 9B77 8555 8F36 9B8B 6AFE 6709 4E23 5363 9149 82C3 3DAD 7F91 5EAE 682F 7F90 6884 8048 811C 83A0 94D5 6E75 870F 7989 92AA 4B00 69F1 7256 9EDD 61EE 2E80 53C8 53F3 5E7C 4F51 4F91 72D6 7CFF 54CA 56FF 59F7 5BA5 5CDF 67DA 7270 8BF1 5500 7950 8FF6 4001 86B4 4EB4 8C81 91C9 916D 8A98 9F2C 53CB 5B67 848F 7257 6079 5266 70DF 73DA 80ED 5063 5571 5D26 393F 6DCA 6DF9 7109 7111 479B 9609 6E6E 7312 814C 83F8 7159 787D 5AE3 6F39 4167 9122 9183 95B9 5B2E 61E8 7BF6 61D5 81D9 9EEB 8BA0 4E25 8A00 5CA9 5EF6 6616 6CBF 708E 82AB 598D 59F8 7814 5A2E 76D0 5A2B 72FF 7402 784F 90D4 9586 960E 5D52 5D53 6E7A 839A 5869 63C5 694C 41FE 8A7D 789E 7B75 7D96 8712 8505 989C 8664 95BB 53B3 6A90 984F 9854 58DB 7C37 56B4 5DCC 6AE9 9EEC 5DD7 58E7 5B4D 5DD6 9E7D 7939 9EA3 5935 6281 6C87 4E75 5156 5944 4FE8 5157 533D 5F07 884D 5043 53A3 63A9 773C 9153 5D43 611D 624A 63DC 3B7A 68EA 6E30 6E37 7430 8412 90FE 693C 7F68 9043 9692 6F14 88FA 5D96 622D 8758 8917 565E 8EBD 9B47 7E2F 6ABF 9A13 9EE1 53B4 2502C 9C0B 9DA0 9EE4 9F5E 9F91 7517 9EED 513C 9869 9F34 5DD8 5DDA 9F39 66EE 9B58 9F74 9EF6 538C 95EB 599F 89C3 726A 54BD 59F2 5F65 5F66 781A 5501 5BB4 664F 8273 898E 9A8C 5050 7114 8C1A 55AD 5830 6565 70FB 7130 7131 786F 9681 96C1 50BF 693B 6E8E 6EDF 8455 9CEB 53AD 5895 66A5 917D 5B0A 8C33 290C0 990D 9D08 3DF3 3DFC 71C4 71D5 8AFA 8D5D 48AD 9B33 66D5 9D33 9A10 56A5 5B3F 8276 8D0B 9140 4A04 4CE1 3B2B 66E3 7213 91B6 9A34 9DC3 7054 8D17 89FE 8B8C 91BC 995C 9A57 9DF0 8277 2A64A 704E 9A60 7067 8B9E 8C53 91C5 8C54 7069 8A01 6A2E 7196 8EC5 6B15 56D9 56E0 9625 9634 4F8C 5794 59FB 39E2 6D07 97F3 9A83 6836 6BB7 6C24 8335 51D0 5A63 4104 79F5 836B 94DF 9670 5591 5819 6114 7B43 7D6A 88C0 967B 9682 6B45 6EB5 6147 647F 7616 798B 92A6 7DF8 852D 9787 8AF2 9712 290EC 99F0 567E 95C9 9720 3D8F 97FE 5198 4E51 3542 541F 72BE 65A6 82C2 57A0 6CFF 3597 5701 5CFE 70CE 72FA 73E2 8A14 8A1A 5A6C 5BC5 5D1F 5D2F 6DEB 8376 8A21 94F6 921D 9F82 6EDB 7892 5924 911E 9280 5656 6BA5 748C 8529 8ABE 569A 6AAD 87EB 4D26 972A 9F57 9DE3 4E5A 200CA 5EF4 5C39 5F15 5432 996E 8693 8D7A 6DFE 920F 9690 98F2 9777 98EE 6704 8F11 96A0 78E4 8D9B 763E 5DBE 6A83 6FE5 6FE6 87BE 96B1 6AFD 861F 766E 8B94 5370 6D15 80E4 57BD 831A 5837 6E5A 730C 5ED5 8491 9173 616D 6196 6197 764A 9BA3 3865 61DA 6ABC 4543 7C8C 592E 5489 59CE 62B0 6CF1 6B83 80E6 770F 79E7 9E2F 9260 96F5 9785 9D26 626C 7F8A 65F8 6768 7080 9626 9633 98CF 4F6F 52B7 6C1C 75A1 9496 579F 5F89 661C 6D0B 7F8F 70CA 73DC 26B75 773B 5D35 5D38 63DA 86D8 967D 656D 6698 694A 716C 760D 7993 3B15 8AF9 8F30 935A 9D39 98BA 940A 9C11 9737 9E09 4EF0 4F52 5771 5C9F 517B 67CD 70B4 6C27 75D2 7D3B 509F 8EEE 6143 6967 6C31 8746 990A 99DA 3526 61E9 6501 4446 7662 600F 6059 6837 7F95 8A47 69D8 6F3E 6A23 7001 594D 7FAA 7922 5E94 5FDC 82F1 685C 5040 5568 5A74 7EEC 83BA 20E04 21398 5A96 6E36 48D0 5AC8 6720 7150 745B 5624 6484 78A4 7F28 7F42 8CCF 9533 6A31 748E 7507 7DD3 8767 7F43 892E 9348 9D2C 9E66 5B30 61C9 81BA 9719 97FA 9E70 7516 9D91 56B6 5B46 5B7E 6516 7F4C 8B4D 9DA7 6AFB 74D4 792F 8621 8B7B 9DAF 944D 7E93 8833 9DEA 9DF9 9E0E 9E1A 76C1 8FCE 76C8 8314 8367 55B6 83B9 86CD 2870F 6E81 6E8B 8424 8426 50CC 584B 6979 6EE2 8425 843E 6F46 7192 84E5 7469 4294 877F 5B34 7E08 87A2 6FD9 6FDA 6FF4 71DF 89AE 8B0D 8D62 7005 85C0 93A3 650D 701B 7020 2294F 702F 7034 8D0F 6AFF 7C5D 7C6F 77E8 6D67 90E2 68AC 988D 9895 9896 646C 4B2C 5F71 6F41 7484 763F 7A4E 9834 5DCA 5EEE 766D 6620 786C 5AB5 668E 81A1 565F 9795 941B 9C66 73F1 6125 8747 7E04 8805 651A 7050 705C 8EC8 FDD0-3128 4E4C 572C 5F19 6C59 6C5A 6C61 545C 5DEB 6747 90AC 5C4B 6D3F 8BEC 94A8 70CF 526D 7A8F 55DA 9114 6B4D 8AA3 7BBC 8790 9D2E 93A2 9C1E 65E0 6BCB 5433 5434 543E 5449 829C 5514 5A2A 6D16 6D6F 90DA 68A7 73F8 8323 8381 7121 7966 94FB 9E40 8708 8A88 7991 7491 856A 87F1 9BC3 9D50 8B55 9F2F 9DE1 4E94 5348 4EF5 59A9 5E91 5FE4 6003 65FF 3B33 6B66 739D 4FAE 4FC9 5035 6342 554E 5A2C 727E 73F7 6440 7894 9E49 7193 7466 821E 5AF5 5EE1 61AE 6F55 511B 6A46 7512 9D61 8E8C 5140 52FF 3433 620A 4F06 5C7C 6264 9622 575E 5C89 674C 5FE2 7269 77F9 82B4 8FD5 537C 6544 8BEF 609E 609F 60AE 7C85 6664 7110 901C 5A7A 5D4D 75E6 9770 9A9B 5862 5966 5D68 6EA9 9696 96FA 96FE 5BE4 7183 8AA4 9E5C 92C8 7AB9 907B 4A01 971A 9F3F 9727 9A16 9F40 8601 9DA9 4E44 52A1 4F0D 52D9 933B 7A75 52B8 6316 6D3C 5A32 7556 7A8A 5AA7 86D9 55D7 6432 6E9B 6F25 7AAA 9F03 6528 5A03 74E6 4F64 5493 39DA 90B7 8049 889C 55E2 817D 8183 896A 97C8 97E4 5C72 54C7 74F2 631D 502D 6DA1 5529 6DB9 83B4 6E26 7327 7A9D 8435 8717 7AA9 8778 8E12 64BE 6211 5A50 6370 4C00 4EF4 6C83 809F 5367 6782 81E5 5053 637E 6DB4 5A89 5E44 63E1 6E25 7125 786A 6943 815B 65A1 7783 20FDF 64ED 6FE3 9F8C 74C1 81D2 96D8 9F77 6B6A 558E 7AF5 5D34 5916 20C3B 591E 9861 5371 5A01 20CFF 70D3 504E 55B4 364E 5A99 6104 63CB 63FB 6E28 840E 9036 9687 9688 5FAE 6933 6972 6EA6 7168 8468 8473 8A74 8732 875B 89A3 71F0 8587 9CC2 9C03 9C04 5DCD 56D7 97E6 5729 56F4 5E0F 6CA9 95F1 8FDD 5CD7 5CDE 6D08 97CB 6845 6DA0 552F 5E37 60DF 7859 7EF4 55A1 570D 5A81 5E43 6E4B 6E88 741F 912C 5D6C 9055 6F4D 7DAD 6F59 6F7F 78D1 84F6 9180 6FF0 934F 95C8 9BA0 7653 4260 89B9 973A 6B08 72A9 5383 4F1F 4F2A 5C3E 7EAC 59D4 3B4F 709C 73AE 829B 82C7 6D27 5A13 5C57 6D58 8BFF 5049 507D 5D23 68B6 75CF 784A 8371 5BEA 5D54 5FAB 6107 7325 9AA9 6690 6932 7152 744B 75FF 41FB 8172 8249 8466 848D 97EA 9AAA 9AAB 50DE 9C94 5130 64B1 78C8 25BE4 7DEF 8AC9 8E13 97D1 9820 3B19 853F 285E8 9361 9BAA 6FFB 85B3 97D9 98B9 58DD 7022 8624 97E1 6596 536B 4E3A 672A 4F4D 5473 70BA 754F 80C3 82FF 53DE 8ECE 5C09 8C13 5582 5AA6 6E2D 3DC9 7232 83CB 715F 78A8 873C 6170 71AD 729A 7DED 851A 885B 61C0 748F 7F7B 885E 8B02 9927 9B87 87B1 893D 9935 8F4A 9B4F 85EF 93CF 9728 9CDA 9956 8636 8B86 8E97 4C81 8B8F 8E9B 6364 7140 732C 589B 7E05 875F 5DB6 5F2F 525C 5A60 5E35 5846 6E7E 873F 6F6B 8C4C 5F4E 58EA 7063 4E38 5213 6C4D 7EA8 5B8C 5C8F 628F 8284 73A9 7D08 6356 987D 70F7 7413 9811 4BC8 7FEB 5B9B 5007 550D 633D 76CC 57E6 5A49 60CB 665A 6669 689A 7EFE 8118 667C 6900 742C 7696 83C0 8416 7579 7755 7897 7DA9 7DB0 8F13 8E20 92C4 92D4 4A4A 3736 4E07 534D 5350 59A7 5FE8 6365 8115 8CA6 8155 842C 8F10 6FAB 933D 858D 87C3 8D03 93AB 4951 8D0E 909C 6764 7B02 6637 6E29 586D 3B08 6985 6EAB 8F92 6B9F 7465 761F 8570 8F3C 8C71 8F40 9CC1 97B0 29948 9C1B 9C2E 5301 6587 5F63 7EB9 7086 739F 82A0 95FB 7D0B 8689 868A 73F3 960C 741D 96EF 7612 805E 99BC 9B70 9CFC 9D0D 87A1 95BA 95BF 87C1 95C5 9F24 95E6 520E 543B 5FDF 6286 5461 80B3 7D0A 687D 8117 7A33 7A4F 7A69 95EE 598F 6C76 554F 6E02 83AC 63FE 6435 9850 74BA 545A 922B 93BE 21BC1 5C23 5C29 5C2A 5C2B 6C6A 4EA1 4EBE 5166 738B 4EFC 5F7A 869F 83A3 34C1 7F52 7F51 5F80 5F83 7F54 5F8D 60D8 6680 68E2 83F5 86E7 8F8B 7DB2 8744 8AB7 8F1E 7007 9B4D 5984 5FD8 65FA 76F3 8FCB 671B 6722 4911 6789 7139 7FC1 55E1 6EC3 9E5F 8789 9393 9DB2 3622 52DC 5963 5855 5D61 66A1 4425 84CA 7788 806C 3732 74EE 8579 7515 7F4B 9F46 FDD0-3129 625C 7EA1 8FC2 8FC3 7A7B 7D06 8676 9653 5539 6DE4 76D3 6BFA 7600 7B8A 4E90 4E8E 4F03 36A5 3B30 9098 4F59 59A4 6275 6745 6B24 7397 7399 65BC 76C2 81FE 9C7C 4E7B 4FDE 516A 79BA 7AFD 4342 8867 5A1B 5A2F 5A31 6859 72F3 8201 8330 8C00 9151 9980 6E14 96E9 9B5A 5823 582C 5D33 5D4E 5D5B 3965 6109 63C4 6970 6E1D 6E61 756D 7862 8174 8438 9685 611A 65D5 3B02 6961 6986 6B48 724F 745C 8245 842E 865E 89CE 903E 9AAC 6F01 776E 7AAC 6B76 7FAD 4433 8753 8915 8ADB 96D3 9918 4C3B 6F9E 8206 854D 89A6 8E30 5B29 87B8 8F3F 935D 28A36 6B5F 74B5 8B23 9BBD 9A1F 9AC3 65DF 7C45 861B 9C05 4CA3 9DE0 9E06 4E0E 4E88 4F1B 5B87 5C7F 7FBD 2ED7 96E8 4FC1 4FE3 79B9 8BED 5704 5CFF 504A 3531 532C 5709 5EBE 6554 7964 3762 659E 9105 50B4 5BD9 6940 7440 7610 842D 38C3 8207 8A9E 7AB3 92D9 9828 9F89 5673 8C90 5DBC 61D9 399B 6594 9E8C 860C 9F6C 8080 7389 9A6D 572B 807F 59AA 5FEC 828B 828C 996B 80B2 3922 6631 72F1 79D7 90C1 4FFC 5CEA 5F67 6D74 7821 831F 94B0 9884 57DF 5809 5FA1 6086 60D0 6B32 6DE2 6DEF 8C15 9608 5585 5590 55A9 55BB 5A80 5BD3 5EBD 68DB 68DC 68EB 7134 7419 77DE 7872 26C40 9033 98EB 99AD 9E46 6108 6BD3 6EEA 715C 3F63 7A22 7F6D 8248 88D5 8A89 9047 923A 9810 5AD7 5D8E 622B 7344 7609 4205 42ED 7DCE 84AE 84E3 871F 872E 463B 8F0D 9289 564A 617E 6F4F 7A36 84F9 92CA 9CFF 224B0 6FA6 71CF 79A6 8AED 8C6B 9079 9325 95BE 9D25 9D2A 5125 2148A 71E0 7BFD 8577 8581 9E6C 7652 7907 7916 7E58 27450 91A7 9B4A 9D52 791C 7A65 9947 6AF2 9731 8B7D 8F5D 942D 6B0E 9A48 9B3B 7C5E 9C4A 9DF8 6B1D 9E12 9FA5 8EC9 9B30 9B31 706A 7C72 7229 6327 8362 6F9A 9BF2 66F0 66F1 7EA6 7D04 7BB9 5F5F 77F1 5F60 2E9D 6708 6209 5216 599C 5C84 6288 216DF 5CB3 73A5 793F 6071 4195 6085 60A6 868E 868F 8ECF 94BA 9605 6373 8DC0 8DC3 4847 7CA4 8D8A 9205 7CB5 925E 4926 95B1 95B2 6A3E 7BD7 5B33 5DBD 294E5 9FA0 3730 3B26 7039 7C46 9EE6 721A 8625 8E8D 79B4 7C65 9E11 7C70 9E19 56E6 9E22 5248 51A4 6081 7722 9E33 5BC3 6DF5 6E01 6E06 6E0A 6E15 60CC 68E9 3F93 847E 870E 9E53 7BA2 84AC 8735 88F7 9CF6 485D 99CC 9D1B 5B3D 4949 9D77 7041 9F18 9F1D 5143 5186 8D20 5458 56ED 6C85 90A7 676C 57A3 7230 8C9F 539F 54E1 5706 7B0E 8696 8881 53A1 570E 63F4 6E72 7328 7F18 8312 9F0B 5712 5713 586C 5AB4 5AC4 6E90 6E92 733F 7342 699E 69AC 849D 8F95 7DE3 7E01 875D 876F 9B6D 4CAE 6A7C 7FB1 8788 8597 8B1C 8F45 9EFF 93B1 6ADE 908D 9A35 9DA2 9DB0 53B5 8FDC 76F6 903A 9060 92FA 5917 8099 59B4 3B47 6028 82D1 57B8 884F 9662 5086 5A9B 63BE 7457 613F 7990 88EB 8911 566E 8924 9858 915B 9228 6655 7F0A 6688 7174 8480 596B 6C32 6C33 8495 7E15 8779 8D5F 9835 8D07 99A7 4E91 52FB 5300 56E9 5998 6C84 7EAD 6600 82B8 7547 7703 79D0 6DA2 7D1C 8018 803A 90E7 96F2 612A 6EB3 7B60 7B7C 9116 69B2 7189 84B7 6F90 92C6 6A52 7BD4 7E1C 8553 9942 5141 593D 628E 72C1 962D 9668 6B92 837A 5597 491E 9217 9695 6B9E 99BB 78D2 891E 8CF1 9723 9F73 5B55 679F 8FD0 607D 90D3 915D 508A 60F2 6120 9106 614D 816A 904B 97EB 97F5 7185 71A8 7DF7 7DFC 4CB0 8574 9196 8580 919E 992B 97D7 85F4 97DE 97FB 860A 62A3 7E67 4F63 62E5 75C8 9095 5EB8 50AD 55C8 96CD 5889 5ADE 6175 6EFD 9118 69E6 5670 58C5 64C1 6FAD 90FA 955B 81C3 7655 96DD 93DE 9CD9 5EF1 7049 9954 9C45 9DDB 7670 5581 63D8 7245 9899 9852 9C2B 6C38 752C 548F 6CF3 4FD1 52C7 52C8 6810 57C7 6080 67E1 6D8C 607F 3D04 509B 60E5 6111 6E67 7867 8A60 584E 5D71 5F6E 6139 86F9 6142 8E0A 799C 9CAC 8E34 9BD2 7528 82DA 919F 603A 783D __END__ =head1 NAME Unicode::Collate::CJK::Zhuyin - weighting CJK Unified Ideographs for Unicode::Collate =head1 SYNOPSIS use Unicode::Collate; use Unicode::Collate::CJK::Zhuyin; my $collator = Unicode::Collate->new( overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin ); =head1 DESCRIPTION C<Unicode::Collate::CJK::Zhuyin> provides C<weightZhuyin()>, that is adequate for C<overrideCJK> of C<Unicode::Collate> and makes tailoring of CJK Unified Ideographs in the order of CLDR's zhuyin (bopomofo) ordering. =head1 CAVEAT The zhuyin ordering includes some characters that are not CJK Unified Ideographs and can't utilize C<weightZhuyin()> for collation. For them, use C<entry> instead. =head1 SEE ALSO =over 4 =item CLDR - Unicode Common Locale Data Repository L<http://cldr.unicode.org/> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =item L<Unicode::Collate> =item L<Unicode::Collate::Locale> =back =cut Unicode/Collate/CJK/Big5.pm 0000644 00000201644 15037233320 0011255 0 ustar 00 package Unicode::Collate::CJK::Big5; use 5.006; use strict; use warnings; our $VERSION = '1.25'; my %u2p; my $wt = 0x8000; while (<DATA>) { last if /^__END__/; my @c = split; for my $c (@c) { next if !$c; $u2p{hex($c)} = $wt; $wt++; } } sub weightBig5 { my $u = shift; return exists $u2p{$u} ? $u2p{$u} : undef; } 1; __DATA__ 5159 515B 515E 515D 5161 5163 55E7 74E9 7CCE 4E00 4E59 4E01 4E03 4E43 4E5D 4E86 4E8C 4EBA 513F 5165 516B 51E0 5200 5201 529B 5315 5341 535C 53C8 4E09 4E0B 4E08 4E0A 4E2B 4E38 51E1 4E45 4E48 4E5F 4E5E 4E8E 4EA1 5140 5203 52FA 5343 53C9 53E3 571F 58EB 5915 5927 5973 5B50 5B51 5B53 5BF8 5C0F 5C22 5C38 5C71 5DDD 5DE5 5DF1 5DF2 5DF3 5DFE 5E72 5EFE 5F0B 5F13 624D 4E11 4E10 4E0D 4E2D 4E30 4E39 4E4B 5C39 4E88 4E91 4E95 4E92 4E94 4EA2 4EC1 4EC0 4EC3 4EC6 4EC7 4ECD 4ECA 4ECB 4EC4 5143 5141 5167 516D 516E 516C 5197 51F6 5206 5207 5208 52FB 52FE 52FF 5316 5339 5348 5347 5345 535E 5384 53CB 53CA 53CD 58EC 5929 592B 592A 592D 5B54 5C11 5C24 5C3A 5C6F 5DF4 5E7B 5EFF 5F14 5F15 5FC3 6208 6236 624B 624E 652F 6587 6597 65A4 65B9 65E5 66F0 6708 6728 6B20 6B62 6B79 6BCB 6BD4 6BDB 6C0F 6C34 706B 722A 7236 723B 7247 7259 725B 72AC 738B 4E19 4E16 4E15 4E14 4E18 4E3B 4E4D 4E4F 4E4E 4EE5 4ED8 4ED4 4ED5 4ED6 4ED7 4EE3 4EE4 4ED9 4EDE 5145 5144 5189 518A 51AC 51F9 51FA 51F8 520A 52A0 529F 5305 5306 5317 531D 4EDF 534A 5349 5361 5360 536F 536E 53BB 53EF 53E4 53F3 53EC 53EE 53E9 53E8 53FC 53F8 53F5 53EB 53E6 53EA 53F2 53F1 53F0 53E5 53ED 53FB 56DB 56DA 5916 592E 5931 5974 5976 5B55 5B83 5C3C 5DE8 5DE7 5DE6 5E02 5E03 5E73 5E7C 5F01 5F18 5F17 5FC5 620A 6253 6254 6252 6251 65A5 65E6 672E 672C 672A 672B 672D 6B63 6BCD 6C11 6C10 6C38 6C41 6C40 6C3E 72AF 7384 7389 74DC 74E6 7518 751F 7528 7529 7530 7531 7532 7533 758B 767D 76AE 76BF 76EE 77DB 77E2 77F3 793A 79BE 7A74 7ACB 4E1E 4E1F 4E52 4E53 4E69 4E99 4EA4 4EA6 4EA5 4EFF 4F09 4F19 4F0A 4F15 4F0D 4F10 4F11 4F0F 4EF2 4EF6 4EFB 4EF0 4EF3 4EFD 4F01 4F0B 5149 5147 5146 5148 5168 5171 518D 51B0 5217 5211 5212 520E 5216 52A3 5308 5321 5320 5370 5371 5409 540F 540C 540A 5410 5401 540B 5404 5411 540D 5408 5403 540E 5406 5412 56E0 56DE 56DD 5733 5730 5728 572D 572C 572F 5729 5919 591A 5937 5938 5984 5978 5983 597D 5979 5982 5981 5B57 5B58 5B87 5B88 5B85 5B89 5BFA 5C16 5C79 5DDE 5E06 5E76 5E74 5F0F 5F1B 5FD9 5FD6 620E 620C 620D 6210 6263 625B 6258 6536 65E9 65E8 65EC 65ED 66F2 66F3 6709 673D 6734 6731 6735 6B21 6B64 6B7B 6C16 6C5D 6C57 6C59 6C5F 6C60 6C50 6C55 6C61 6C5B 6C4D 6C4E 7070 725F 725D 767E 7AF9 7C73 7CF8 7F36 7F8A 7FBD 8001 8003 800C 8012 8033 807F 8089 808B 808C 81E3 81EA 81F3 81FC 820C 821B 821F 826E 8272 827E 866B 8840 884C 8863 897F 9621 4E32 4EA8 4F4D 4F4F 4F47 4F57 4F5E 4F34 4F5B 4F55 4F30 4F50 4F51 4F3D 4F3A 4F38 4F43 4F54 4F3C 4F46 4F63 4F5C 4F60 4F2F 4F4E 4F36 4F59 4F5D 4F48 4F5A 514C 514B 514D 5175 51B6 51B7 5225 5224 5229 522A 5228 52AB 52A9 52AA 52AC 5323 5373 5375 541D 542D 541E 543E 5426 544E 5427 5446 5443 5433 5448 5442 541B 5429 544A 5439 543B 5438 542E 5435 5436 5420 543C 5440 5431 542B 541F 542C 56EA 56F0 56E4 56EB 574A 5751 5740 574D 5747 574E 573E 5750 574F 573B 58EF 593E 599D 5992 59A8 599E 59A3 5999 5996 598D 59A4 5993 598A 59A5 5B5D 5B5C 5B5A 5B5B 5B8C 5B8B 5B8F 5C2C 5C40 5C41 5C3F 5C3E 5C90 5C91 5C94 5C8C 5DEB 5E0C 5E8F 5E87 5E8A 5EF7 5F04 5F1F 5F64 5F62 5F77 5F79 5FD8 5FCC 5FD7 5FCD 5FF1 5FEB 5FF8 5FEA 6212 6211 6284 6297 6296 6280 6276 6289 626D 628A 627C 627E 6279 6273 6292 626F 6298 626E 6295 6293 6291 6286 6539 653B 6538 65F1 66F4 675F 674E 674F 6750 6751 675C 6756 675E 6749 6746 6760 6753 6757 6B65 6BCF 6C42 6C5E 6C99 6C81 6C88 6C89 6C85 6C9B 6C6A 6C7A 6C90 6C70 6C8C 6C68 6C96 6C92 6C7D 6C83 6C72 6C7E 6C74 6C86 6C76 6C8D 6C94 6C98 6C82 7076 707C 707D 7078 7262 7261 7260 72C4 72C2 7396 752C 752B 7537 7538 7682 76EF 77E3 79C1 79C0 79BF 7A76 7CFB 7F55 8096 8093 809D 8098 809B 809A 80B2 826F 8292 828B 828D 898B 89D2 8A00 8C37 8C46 8C55 8C9D 8D64 8D70 8DB3 8EAB 8ECA 8F9B 8FB0 8FC2 8FC6 8FC5 8FC4 5DE1 9091 90A2 90AA 90A6 90A3 9149 91C6 91CC 9632 962E 9631 962A 962C 4E26 4E56 4E73 4E8B 4E9B 4E9E 4EAB 4EAC 4F6F 4F9D 4F8D 4F73 4F7F 4F6C 4F9B 4F8B 4F86 4F83 4F70 4F75 4F88 4F69 4F7B 4F96 4F7E 4F8F 4F91 4F7A 5154 5152 5155 5169 5177 5176 5178 51BD 51FD 523B 5238 5237 523A 5230 522E 5236 5241 52BE 52BB 5352 5354 5353 5351 5366 5377 5378 5379 53D6 53D4 53D7 5473 5475 5496 5478 5495 5480 547B 5477 5484 5492 5486 547C 5490 5471 5476 548C 549A 5462 5468 548B 547D 548E 56FA 5783 5777 576A 5769 5761 5766 5764 577C 591C 5949 5947 5948 5944 5954 59BE 59BB 59D4 59B9 59AE 59D1 59C6 59D0 59CD 59CB 59D3 59CA 59AF 59B3 59D2 59C5 5B5F 5B64 5B63 5B97 5B9A 5B98 5B9C 5B99 5B9B 5C1A 5C48 5C45 5C46 5CB7 5CA1 5CB8 5CA9 5CAB 5CB1 5CB3 5E18 5E1A 5E16 5E15 5E1B 5E11 5E78 5E9A 5E97 5E9C 5E95 5E96 5EF6 5F26 5F27 5F29 5F80 5F81 5F7F 5F7C 5FDD 5FE0 5FFD 5FF5 5FFF 600F 6014 602F 6035 6016 602A 6015 6021 6027 6029 602B 601B 6216 6215 623F 623E 6240 627F 62C9 62CC 62C4 62BF 62C2 62B9 62D2 62DB 62AB 62D3 62D4 62CB 62C8 62A8 62BD 62BC 62D0 62D9 62C7 62CD 62B5 62DA 62B1 62D8 62D6 62D7 62C6 62AC 62CE 653E 65A7 65BC 65FA 6614 6613 660C 6606 6602 660E 6600 660F 6615 660A 6607 670D 670B 676D 678B 6795 6771 679C 6773 6777 6787 679D 6797 676F 6770 677F 6789 677E 6790 6775 679A 6793 677C 676A 6772 6B23 6B66 6B67 6B7F 6C13 6C1B 6CE3 6CE8 6CF3 6CB1 6CCC 6CE5 6CB3 6CBD 6CBE 6CBC 6CE2 6CAB 6CD5 6CD3 6CB8 6CC4 6CB9 6CC1 6CAE 6CD7 6CC5 6CF1 6CBF 6CBB 6CE1 6CDB 6CCA 6CAC 6CEF 6CDC 6CD6 6CE0 7095 708E 7092 708A 7099 722C 722D 7238 7248 7267 7269 72C0 72CE 72D9 72D7 72D0 73A9 73A8 739F 73AB 73A5 753D 759D 7599 759A 7684 76C2 76F2 76F4 77E5 77FD 793E 7940 7941 79C9 79C8 7A7A 7A79 7AFA 7CFE 7F54 7F8C 7F8B 8005 80BA 80A5 80A2 80B1 80A1 80AB 80A9 80B4 80AA 80AF 81E5 81FE 820D 82B3 829D 8299 82AD 82BD 829F 82B9 82B1 82AC 82A5 82AF 82B8 82A3 82B0 82BE 82B7 864E 8671 521D 8868 8ECB 8FCE 8FD4 8FD1 90B5 90B8 90B1 90B6 91C7 91D1 9577 9580 961C 9640 963F 963B 9644 9642 96B9 96E8 9752 975E 4E9F 4EAD 4EAE 4FE1 4FB5 4FAF 4FBF 4FE0 4FD1 4FCF 4FDD 4FC3 4FB6 4FD8 4FDF 4FCA 4FD7 4FAE 4FD0 4FC4 4FC2 4FDA 4FCE 4FDE 4FB7 5157 5192 5191 51A0 524E 5243 524A 524D 524C 524B 5247 52C7 52C9 52C3 52C1 530D 5357 537B 539A 53DB 54AC 54C0 54A8 54CE 54C9 54B8 54A6 54B3 54C7 54C2 54BD 54AA 54C1 54C4 54C8 54AF 54AB 54B1 54BB 54A9 54A7 54BF 56FF 5782 578B 57A0 57A3 57A2 57CE 57AE 5793 5955 5951 594F 594E 5950 59DC 59D8 59FF 59E3 59E8 5A03 59E5 59EA 59DA 59E6 5A01 59FB 5B69 5BA3 5BA6 5BA4 5BA2 5BA5 5C01 5C4E 5C4F 5C4D 5C4B 5CD9 5CD2 5DF7 5E1D 5E25 5E1F 5E7D 5EA0 5EA6 5EFA 5F08 5F2D 5F65 5F88 5F85 5F8A 5F8B 5F87 5F8C 5F89 6012 601D 6020 6025 600E 6028 604D 6070 6068 6062 6046 6043 606C 606B 606A 6064 6241 62DC 6316 6309 62FC 62ED 6301 62EE 62FD 6307 62F1 62F7 62EF 62EC 62FE 62F4 6311 6302 653F 6545 65AB 65BD 65E2 6625 662D 6620 6627 662F 661F 6628 6631 6624 66F7 67FF 67D3 67F1 67D4 67D0 67EC 67B6 67AF 67F5 67E9 67EF 67C4 67D1 67B4 67DA 67E5 67B8 67CF 67DE 67F3 67B0 67D9 67E2 67DD 67D2 6B6A 6B83 6B86 6BB5 6BD2 6BD7 6C1F 6CC9 6D0B 6D32 6D2A 6D41 6D25 6D0C 6D31 6D1E 6D17 6D3B 6D3D 6D3E 6D36 6D1B 6CF5 6D39 6D27 6D38 6D29 6D2E 6D35 6D0E 6D2B 70AB 70BA 70B3 70AC 70AF 70AD 70B8 70AE 70A4 7230 7272 726F 7274 72E9 72E0 72E1 73B7 73CA 73BB 73B2 73CD 73C0 73B3 751A 752D 754F 754C 754E 754B 75AB 75A4 75A5 75A2 75A3 7678 7686 7687 7688 76C8 76C6 76C3 76C5 7701 76F9 76F8 7709 770B 76FE 76FC 7707 77DC 7802 7814 780C 780D 7946 7949 7948 7947 79B9 79BA 79D1 79D2 79CB 7A7F 7A81 7AFF 7AFD 7C7D 7D02 7D05 7D00 7D09 7D07 7D04 7D06 7F38 7F8E 7FBF 8004 8010 800D 8011 8036 80D6 80E5 80DA 80C3 80C4 80CC 80E1 80DB 80CE 80DE 80E4 80DD 81F4 8222 82E7 8303 8305 82E3 82DB 82E6 8304 82E5 8302 8309 82D2 82D7 82F1 8301 82DC 82D4 82D1 82DE 82D3 82DF 82EF 8306 8650 8679 867B 867A 884D 886B 8981 89D4 8A08 8A02 8A03 8C9E 8CA0 8D74 8D73 8DB4 8ECD 8ECC 8FF0 8FE6 8FE2 8FEA 8FE5 8FED 8FEB 8FE4 8FE8 90CA 90CE 90C1 90C3 914B 914A 91CD 9582 9650 964B 964C 964D 9762 9769 97CB 97ED 97F3 9801 98A8 98DB 98DF 9996 9999 4E58 4EB3 500C 500D 5023 4FEF 5026 5025 4FF8 5029 5016 5006 503C 501F 501A 5012 5011 4FFA 5000 5014 5028 4FF1 5021 500B 5019 5018 4FF3 4FEE 502D 502A 4FFE 502B 5009 517C 51A4 51A5 51A2 51CD 51CC 51C6 51CB 5256 525C 5254 525B 525D 532A 537F 539F 539D 53DF 54E8 5510 5501 5537 54FC 54E5 54F2 5506 54FA 5514 54E9 54ED 54E1 5509 54EE 54EA 54E6 5527 5507 54FD 550F 5703 5704 57C2 57D4 57CB 57C3 5809 590F 5957 5958 595A 5A11 5A18 5A1C 5A1F 5A1B 5A13 59EC 5A20 5A23 5A29 5A25 5A0C 5A09 5B6B 5C58 5BB0 5BB3 5BB6 5BB4 5BAE 5BB5 5BB9 5BB8 5C04 5C51 5C55 5C50 5CED 5CFD 5CFB 5CEA 5CE8 5CF0 5CF6 5D01 5CF4 5DEE 5E2D 5E2B 5EAB 5EAD 5EA7 5F31 5F92 5F91 5F90 6059 6063 6065 6050 6055 606D 6069 606F 6084 609F 609A 608D 6094 608C 6085 6096 6247 62F3 6308 62FF 634E 633E 632F 6355 6342 6346 634F 6349 633A 6350 633D 632A 632B 6328 634D 634C 6548 6549 6599 65C1 65C5 6642 6649 664F 6643 6652 664C 6645 6641 66F8 6714 6715 6717 6821 6838 6848 6846 6853 6839 6842 6854 6829 68B3 6817 684C 6851 683D 67F4 6850 6840 683C 6843 682A 6845 6813 6818 6841 6B8A 6B89 6BB7 6C23 6C27 6C28 6C26 6C24 6CF0 6D6A 6D95 6D88 6D87 6D66 6D78 6D77 6D59 6D93 6D6C 6D89 6D6E 6D5A 6D74 6D69 6D8C 6D8A 6D79 6D85 6D65 6D94 70CA 70D8 70E4 70D9 70C8 70CF 7239 7279 72FC 72F9 72FD 72F8 72F7 7386 73ED 7409 73EE 73E0 73EA 73DE 7554 755D 755C 755A 7559 75BE 75C5 75C7 75B2 75B3 75BD 75BC 75B9 75C2 75B8 768B 76B0 76CA 76CD 76CE 7729 771F 7720 7728 77E9 7830 7827 7838 781D 7834 7837 7825 782D 7820 781F 7832 7955 7950 7960 795F 7956 795E 795D 7957 795A 79E4 79E3 79E7 79DF 79E6 79E9 79D8 7A84 7A88 7AD9 7B06 7B11 7C89 7D21 7D17 7D0B 7D0A 7D20 7D22 7D14 7D10 7D15 7D1A 7D1C 7D0D 7D19 7D1B 7F3A 7F5F 7F94 7FC5 7FC1 8006 8018 8015 8019 8017 803D 803F 80F1 8102 80F0 8105 80ED 80F4 8106 80F8 80F3 8108 80FD 810A 80FC 80EF 81ED 81EC 8200 8210 822A 822B 8228 822C 82BB 832B 8352 8354 834A 8338 8350 8349 8335 8334 834F 8332 8339 8336 8317 8340 8331 8328 8343 8654 868A 86AA 8693 86A4 86A9 868C 86A3 869C 8870 8877 8881 8882 887D 8879 8A18 8A10 8A0E 8A0C 8A15 8A0A 8A17 8A13 8A16 8A0F 8A11 8C48 8C7A 8C79 8CA1 8CA2 8D77 8EAC 8ED2 8ED4 8ECF 8FB1 9001 9006 8FF7 9000 8FFA 8FF4 9003 8FFD 9005 8FF8 9095 90E1 90DD 90E2 9152 914D 914C 91D8 91DD 91D7 91DC 91D9 9583 9662 9663 9661 965B 965D 9664 9658 965E 96BB 98E2 99AC 9AA8 9AD8 9B25 9B32 9B3C 4E7E 507A 507D 505C 5047 5043 504C 505A 5049 5065 5076 504E 5055 5075 5074 5077 504F 500F 506F 506D 515C 5195 51F0 526A 526F 52D2 52D9 52D8 52D5 5310 530F 5319 533F 5340 533E 53C3 66FC 5546 556A 5566 5544 555E 5561 5543 554A 5531 5556 554F 5555 552F 5564 5538 552E 555C 552C 5563 5533 5541 5557 5708 570B 5709 57DF 5805 580A 5806 57E0 57E4 57FA 5802 5835 57F7 57F9 5920 5962 5A36 5A41 5A49 5A66 5A6A 5A40 5A3C 5A62 5A5A 5A46 5A4A 5B70 5BC7 5BC5 5BC4 5BC2 5BBF 5BC6 5C09 5C08 5C07 5C60 5C5C 5C5D 5D07 5D06 5D0E 5D1B 5D16 5D22 5D11 5D29 5D14 5D19 5D24 5D27 5D17 5DE2 5E38 5E36 5E33 5E37 5EB7 5EB8 5EB6 5EB5 5EBE 5F35 5F37 5F57 5F6C 5F69 5F6B 5F97 5F99 5F9E 5F98 5FA1 5FA0 5F9C 607F 60A3 6089 60A0 60A8 60CB 60B4 60E6 60BD 60C5 60BB 60B5 60DC 60BC 60D8 60D5 60C6 60DF 60B8 60DA 60C7 621A 621B 6248 63A0 63A7 6372 6396 63A2 63A5 6377 6367 6398 63AA 6371 63A9 6389 6383 639B 636B 63A8 6384 6388 6399 63A1 63AC 6392 638F 6380 637B 6369 6368 637A 655D 6556 6551 6559 6557 555F 654F 6558 6555 6554 659C 659B 65AC 65CF 65CB 65CC 65CE 665D 665A 6664 6668 6666 665E 66F9 52D7 671B 6881 68AF 68A2 6893 68B5 687F 6876 68B1 68A7 6897 68B0 6883 68C4 68AD 6886 6885 6894 689D 68A8 689F 68A1 6882 6B32 6BBA 6BEB 6BEC 6C2B 6D8E 6DBC 6DF3 6DD9 6DB2 6DE1 6DCC 6DE4 6DFB 6DFA 6E05 6DC7 6DCB 6DAF 6DD1 6DAE 6DDE 6DF9 6DB8 6DF7 6DF5 6DC5 6DD2 6E1A 6DB5 6DDA 6DEB 6DD8 6DEA 6DF1 6DEE 6DE8 6DC6 6DC4 6DAA 6DEC 6DBF 6DE6 70F9 7109 710A 70FD 70EF 723D 727D 7281 731C 731B 7316 7313 7319 7387 7405 740A 7403 7406 73FE 740D 74E0 74F6 74F7 751C 7522 7565 7566 7562 7570 758F 75D4 75D5 75B5 75CA 75CD 768E 76D4 76D2 76DB 7737 773E 773C 7736 7738 773A 786B 7843 784E 7965 7968 796D 79FB 7A92 7A95 7B20 7B28 7B1B 7B2C 7B26 7B19 7B1E 7B2E 7C92 7C97 7C95 7D46 7D43 7D71 7D2E 7D39 7D3C 7D40 7D30 7D33 7D44 7D2F 7D42 7D32 7D31 7F3D 7F9E 7F9A 7FCC 7FCE 7FD2 801C 804A 8046 812F 8116 8123 812B 8129 8130 8124 8202 8235 8237 8236 8239 838E 839E 8398 8378 83A2 8396 83BD 83AB 8392 838A 8393 8389 83A0 8377 837B 837C 8386 83A7 8655 5F6A 86C7 86C0 86B6 86C4 86B5 86C6 86CB 86B1 86AF 86C9 8853 889E 8888 88AB 8892 8896 888D 888B 8993 898F 8A2A 8A1D 8A23 8A25 8A31 8A2D 8A1F 8A1B 8A22 8C49 8C5A 8CA9 8CAC 8CAB 8CA8 8CAA 8CA7 8D67 8D66 8DBE 8DBA 8EDB 8EDF 9019 900D 901A 9017 9023 901F 901D 9010 9015 901E 9020 900F 9022 9016 901B 9014 90E8 90ED 90FD 9157 91CE 91F5 91E6 91E3 91E7 91ED 91E9 9589 966A 9675 9673 9678 9670 9674 9676 9677 966C 96C0 96EA 96E9 7AE0 7ADF 9802 9803 9B5A 9CE5 9E75 9E7F 9EA5 9EBB 50A2 508D 5085 5099 5091 5080 5096 5098 509A 6700 51F1 5272 5274 5275 5269 52DE 52DD 52DB 535A 53A5 557B 5580 55A7 557C 558A 559D 5598 5582 559C 55AA 5594 5587 558B 5583 55B3 55AE 559F 553E 55B2 559A 55BB 55AC 55B1 557E 5589 55AB 5599 570D 582F 582A 5834 5824 5830 5831 5821 581D 5820 58F9 58FA 5960 5A77 5A9A 5A7F 5A92 5A9B 5AA7 5B73 5B71 5BD2 5BCC 5BD3 5BD0 5C0A 5C0B 5C31 5D4C 5D50 5D34 5D47 5DFD 5E45 5E3D 5E40 5E43 5E7E 5ECA 5EC1 5EC2 5EC4 5F3C 5F6D 5FA9 5FAA 5FA8 60D1 60E1 60B2 60B6 60E0 611C 6123 60FA 6115 60F0 60FB 60F4 6168 60F1 610E 60F6 6109 6100 6112 621F 6249 63A3 638C 63CF 63C0 63E9 63C9 63C6 63CD 63D2 63E3 63D0 63E1 63D6 63ED 63EE 6376 63F4 63EA 63DB 6452 63DA 63F9 655E 6566 6562 6563 6591 6590 65AF 666E 6670 6674 6676 666F 6691 667A 667E 6677 66FE 66FF 671F 671D 68FA 68D5 68E0 68D8 68D7 6905 68DF 68F5 68EE 68E7 68F9 68D2 68F2 68E3 68CB 68CD 690D 6912 690E 68C9 68DA 696E 68FB 6B3E 6B3A 6B3D 6B98 6B96 6BBC 6BEF 6C2E 6C2F 6C2C 6E2F 6E38 6E54 6E21 6E32 6E67 6E4A 6E20 6E25 6E23 6E1B 6E5B 6E58 6E24 6E56 6E6E 6E2D 6E26 6E6F 6E34 6E4D 6E3A 6E2C 6E43 6E1D 6E3E 6ECB 6E89 6E19 6E4E 6E63 6E44 6E72 6E69 6E5F 7119 711A 7126 7130 7121 7136 716E 711C 724C 7284 7280 7336 7325 7334 7329 743A 742A 7433 7422 7425 7435 7436 7434 742F 741B 7426 7428 7525 7526 756B 756A 75E2 75DB 75E3 75D9 75D8 75DE 75E0 767B 767C 7696 7693 76B4 76DC 774F 77ED 785D 786C 786F 7A0D 7A08 7A0B 7A05 7A00 7A98 7A97 7A96 7AE5 7AE3 7B49 7B56 7B46 7B50 7B52 7B54 7B4D 7B4B 7B4F 7B51 7C9F 7CA5 7D5E 7D50 7D68 7D55 7D2B 7D6E 7D72 7D61 7D66 7D62 7D70 7D73 5584 7FD4 7FD5 800B 8052 8085 8155 8154 814B 8151 814E 8139 8146 813E 814C 8153 8174 8212 821C 83E9 8403 83F8 840D 83E0 83C5 840B 83C1 83EF 83F1 83F4 8457 840A 83F0 840C 83CC 83FD 83F2 83CA 8438 840E 8404 83DC 8407 83D4 83DF 865B 86DF 86D9 86ED 86D4 86DB 86E4 86D0 86DE 8857 88C1 88C2 88B1 8983 8996 8A3B 8A60 8A55 8A5E 8A3C 8A41 8A54 8A5B 8A50 8A46 8A34 8A3A 8A36 8A56 8C61 8C82 8CAF 8CBC 8CB3 8CBD 8CC1 8CBB 8CC0 8CB4 8CB7 8CB6 8CBF 8CB8 8D8A 8D85 8D81 8DCE 8DDD 8DCB 8DDA 8DD1 8DCC 8DDB 8DC6 8EFB 8EF8 8EFC 8F9C 902E 9035 9031 9038 9032 9036 9102 90F5 9109 90FE 9163 9165 91CF 9214 9215 9223 9209 921E 920D 9210 9207 9211 9594 958F 958B 9591 9593 9592 958E 968A 968E 968B 967D 9685 9686 968D 9672 9684 96C1 96C5 96C4 96C6 96C7 96EF 96F2 97CC 9805 9806 9808 98E7 98EA 98EF 98E9 98F2 98ED 99AE 99AD 9EC3 9ECD 9ED1 4E82 50AD 50B5 50B2 50B3 50C5 50BE 50AC 50B7 50BB 50AF 50C7 527F 5277 527D 52DF 52E6 52E4 52E2 52E3 532F 55DF 55E8 55D3 55E6 55CE 55DC 55C7 55D1 55E3 55E4 55EF 55DA 55E1 55C5 55C6 55E5 55C9 5712 5713 585E 5851 5858 5857 585A 5854 586B 584C 586D 584A 5862 5852 584B 5967 5AC1 5AC9 5ACC 5ABE 5ABD 5ABC 5AB3 5AC2 5AB2 5D69 5D6F 5E4C 5E79 5EC9 5EC8 5F12 5F59 5FAC 5FAE 611A 610F 6148 611F 60F3 611B 60F9 6101 6108 614E 614C 6144 614D 613E 6134 6127 610D 6106 6137 6221 6222 6413 643E 641E 642A 642D 643D 642C 640F 641C 6414 640D 6436 6416 6417 6406 656C 659F 65B0 6697 6689 6687 6688 6696 6684 6698 668D 6703 6994 696D 695A 6977 6960 6954 6975 6930 6982 694A 6968 696B 695E 6953 6979 6986 695D 6963 695B 6B47 6B72 6BC0 6BBF 6BD3 6BFD 6EA2 6EAF 6ED3 6EB6 6EC2 6E90 6E9D 6EC7 6EC5 6EA5 6E98 6EBC 6EBA 6EAB 6ED1 6E96 6E9C 6EC4 6ED4 6EAA 6EA7 6EB4 714E 7159 7169 7164 7149 7167 715C 716C 7166 714C 7165 715E 7146 7168 7156 723A 7252 7337 7345 733F 733E 746F 745A 7455 745F 745E 7441 743F 7459 745B 745C 7576 7578 7600 75F0 7601 75F2 75F1 75FA 75FF 75F4 75F3 76DE 76DF 775B 776B 7766 775E 7763 7779 776A 776C 775C 7765 7768 7762 77EE 788E 78B0 7897 7898 788C 7889 787C 7891 7893 787F 797A 797F 7981 842C 79BD 7A1C 7A1A 7A20 7A14 7A1F 7A1E 7A9F 7AA0 7B77 7BC0 7B60 7B6E 7B67 7CB1 7CB3 7CB5 7D93 7D79 7D91 7D81 7D8F 7D5B 7F6E 7F69 7F6A 7F72 7FA9 7FA8 7FA4 8056 8058 8086 8084 8171 8170 8178 8165 816E 8173 816B 8179 817A 8166 8205 8247 8482 8477 843D 8431 8475 8466 846B 8449 846C 845B 843C 8435 8461 8463 8469 846D 8446 865E 865C 865F 86F9 8713 8708 8707 8700 86FE 86FB 8702 8703 8706 870A 8859 88DF 88D4 88D9 88DC 88D8 88DD 88E1 88CA 88D5 88D2 899C 89E3 8A6B 8A72 8A73 8A66 8A69 8A70 8A87 8A7C 8A63 8AA0 8A71 8A85 8A6D 8A62 8A6E 8A6C 8A79 8A7B 8A3E 8A68 8C62 8C8A 8C89 8CCA 8CC7 8CC8 8CC4 8CB2 8CC3 8CC2 8CC5 8DE1 8DDF 8DE8 8DEF 8DF3 8DFA 8DEA 8DE4 8DE6 8EB2 8F03 8F09 8EFE 8F0A 8F9F 8FB2 904B 904A 9053 9042 9054 903C 9055 9050 9047 904F 904E 904D 9051 903E 9041 9112 9117 916C 916A 9169 91C9 9237 9257 9238 923D 9240 923E 925B 924B 9264 9251 9234 9249 924D 9245 9239 923F 925A 9598 9698 9694 9695 96CD 96CB 96C9 96CA 96F7 96FB 96F9 96F6 9756 9774 9776 9810 9811 9813 980A 9812 980C 98FC 98F4 98FD 98FE 99B3 99B1 99B4 9AE1 9CE9 9E82 9F0E 9F13 9F20 50E7 50EE 50E5 50D6 50ED 50DA 50D5 50CF 50D1 50F1 50CE 50E9 5162 51F3 5283 5282 5331 53AD 55FE 5600 561B 5617 55FD 5614 5606 5609 560D 560E 55F7 5616 561F 5608 5610 55F6 5718 5716 5875 587E 5883 5893 588A 5879 5885 587D 58FD 5925 5922 5924 596A 5969 5AE1 5AE6 5AE9 5AD7 5AD6 5AD8 5AE3 5B75 5BDE 5BE7 5BE1 5BE5 5BE6 5BE8 5BE2 5BE4 5BDF 5C0D 5C62 5D84 5D87 5E5B 5E63 5E55 5E57 5E54 5ED3 5ED6 5F0A 5F46 5F70 5FB9 6147 613F 614B 6177 6162 6163 615F 615A 6158 6175 622A 6487 6458 6454 64A4 6478 645F 647A 6451 6467 6434 646D 647B 6572 65A1 65D7 65D6 66A2 66A8 669D 699C 69A8 6995 69C1 69AE 69D3 69CB 699B 69B7 69BB 69AB 69B4 69D0 69CD 69AD 69CC 69A6 69C3 69A3 6B49 6B4C 6C33 6F33 6F14 6EFE 6F13 6EF4 6F29 6F3E 6F20 6F2C 6F0F 6F02 6F22 6EFF 6EEF 6F06 6F31 6F38 6F32 6F23 6F15 6F2B 6F2F 6F88 6F2A 6EEC 6F01 6EF2 6ECC 6EF7 7194 7199 717D 718A 7184 7192 723E 7292 7296 7344 7350 7464 7463 746A 7470 746D 7504 7591 7627 760D 760B 7609 7613 76E1 76E3 7784 777D 777F 7761 78C1 789F 78A7 78B3 78A9 78A3 798E 798F 798D 7A2E 7A31 7AAA 7AA9 7AED 7AEF 7BA1 7B95 7B8B 7B75 7B97 7B9D 7B94 7B8F 7BB8 7B87 7B84 7CB9 7CBD 7CBE 7DBB 7DB0 7D9C 7DBD 7DBE 7DA0 7DCA 7DB4 7DB2 7DB1 7DBA 7DA2 7DBF 7DB5 7DB8 7DAD 7DD2 7DC7 7DAC 7F70 7FE0 7FE1 7FDF 805E 805A 8087 8150 8180 818F 8188 818A 817F 8182 81E7 81FA 8207 8214 821E 824B 84C9 84BF 84C6 84C4 8499 849E 84B2 849C 84CB 84B8 84C0 84D3 8490 84BC 84D1 84CA 873F 871C 873B 8722 8725 8734 8718 8755 8737 8729 88F3 8902 88F4 88F9 88F8 88FD 88E8 891A 88EF 8AA6 8A8C 8A9E 8AA3 8A8D 8AA1 8A93 8AA4 8AAA 8AA5 8AA8 8A98 8A91 8A9A 8AA7 8C6A 8C8D 8C8C 8CD3 8CD1 8CD2 8D6B 8D99 8D95 8DFC 8F14 8F12 8F15 8F13 8FA3 9060 9058 905C 9063 9059 905E 9062 905D 905B 9119 9118 911E 9175 9178 9177 9174 9278 9280 9285 9298 9296 927B 9293 929C 92A8 927C 9291 95A1 95A8 95A9 95A3 95A5 95A4 9699 969C 969B 96CC 96D2 9700 977C 9785 97F6 9817 9818 98AF 98B1 9903 9905 990C 9909 99C1 9AAF 9AB0 9AE6 9B41 9B42 9CF4 9CF6 9CF3 9EBC 9F3B 9F4A 5104 5100 50FB 50F5 50F9 5102 5108 5109 5105 51DC 5287 5288 5289 528D 528A 52F0 53B2 562E 563B 5639 5632 563F 5634 5629 5653 564E 5657 5674 5636 562F 5630 5880 589F 589E 58B3 589C 58AE 58A9 58A6 596D 5B09 5AFB 5B0B 5AF5 5B0C 5B08 5BEE 5BEC 5BE9 5BEB 5C64 5C65 5D9D 5D94 5E62 5E5F 5E61 5EE2 5EDA 5EDF 5EDD 5EE3 5EE0 5F48 5F71 5FB7 5FB5 6176 6167 616E 615D 6155 6182 617C 6170 616B 617E 61A7 6190 61AB 618E 61AC 619A 61A4 6194 61AE 622E 6469 646F 6479 649E 64B2 6488 6490 64B0 64A5 6493 6495 64A9 6492 64AE 64AD 64AB 649A 64AC 6499 64A2 64B3 6575 6577 6578 66AE 66AB 66B4 66B1 6A23 6A1F 69E8 6A01 6A1E 6A19 69FD 6A21 6A13 6A0A 69F3 6A02 6A05 69ED 6A11 6B50 6B4E 6BA4 6BC5 6BC6 6F3F 6F7C 6F84 6F51 6F66 6F54 6F86 6F6D 6F5B 6F78 6F6E 6F8E 6F7A 6F70 6F64 6F97 6F58 6ED5 6F6F 6F60 6F5F 719F 71AC 71B1 71A8 7256 729B 734E 7357 7469 748B 7483 747E 7480 757F 7620 7629 761F 7624 7626 7621 7622 769A 76BA 76E4 778E 7787 778C 7791 778B 78CB 78C5 78BA 78CA 78BE 78D5 78BC 78D0 7A3F 7A3C 7A40 7A3D 7A37 7A3B 7AAF 7AAE 7BAD 7BB1 7BC4 7BB4 7BC6 7BC7 7BC1 7BA0 7BCC 7CCA 7DE0 7DF4 7DEF 7DFB 7DD8 7DEC 7DDD 7DE8 7DE3 7DDA 7DDE 7DE9 7D9E 7DD9 7DF2 7DF9 7F75 7F77 7FAF 7FE9 8026 819B 819C 819D 81A0 819A 8198 8517 853D 851A 84EE 852C 852D 8513 8511 8523 8521 8514 84EC 8525 84FF 8506 8782 8774 8776 8760 8766 8778 8768 8759 8757 874C 8753 885B 885D 8910 8907 8912 8913 8915 890A 8ABC 8AD2 8AC7 8AC4 8A95 8ACB 8AF8 8AB2 8AC9 8AC2 8ABF 8AB0 8AD6 8ACD 8AB6 8AB9 8ADB 8C4C 8C4E 8C6C 8CE0 8CDE 8CE6 8CE4 8CEC 8CED 8CE2 8CE3 8CDC 8CEA 8CE1 8D6D 8D9F 8DA3 8E2B 8E10 8E1D 8E22 8E0F 8E29 8E1F 8E21 8E1E 8EBA 8F1D 8F1B 8F1F 8F29 8F26 8F2A 8F1C 8F1E 8F25 9069 906E 9068 906D 9077 9130 912D 9127 9131 9187 9189 918B 9183 92C5 92BB 92B7 92EA 92AC 92E4 92C1 92B3 92BC 92D2 92C7 92F0 92B2 95AD 95B1 9704 9706 9707 9709 9760 978D 978B 978F 9821 982B 981C 98B3 990A 9913 9912 9918 99DD 99D0 99DF 99DB 99D1 99D5 99D2 99D9 9AB7 9AEE 9AEF 9B27 9B45 9B44 9B77 9B6F 9D06 9D09 9D03 9EA9 9EBE 9ECE 58A8 9F52 5112 5118 5114 5110 5115 5180 51AA 51DD 5291 5293 52F3 5659 566B 5679 5669 5664 5678 566A 5668 5665 5671 566F 566C 5662 5676 58C1 58BE 58C7 58C5 596E 5B1D 5B34 5B78 5BF0 5C0E 5F4A 61B2 6191 61A9 618A 61CD 61B6 61BE 61CA 61C8 6230 64C5 64C1 64CB 64BB 64BC 64DA 64C4 64C7 64C2 64CD 64BF 64D2 64D4 64BE 6574 66C6 66C9 66B9 66C4 66C7 66B8 6A3D 6A38 6A3A 6A59 6A6B 6A58 6A39 6A44 6A62 6A61 6A4B 6A47 6A35 6A5F 6A48 6B59 6B77 6C05 6FC2 6FB1 6FA1 6FC3 6FA4 6FC1 6FA7 6FB3 6FC0 6FB9 6FB6 6FA6 6FA0 6FB4 71BE 71C9 71D0 71D2 71C8 71D5 71B9 71CE 71D9 71DC 71C3 71C4 7368 749C 74A3 7498 749F 749E 74E2 750C 750D 7634 7638 763A 76E7 76E5 77A0 779E 779F 77A5 78E8 78DA 78EC 78E7 79A6 7A4D 7A4E 7A46 7A4C 7A4B 7ABA 7BD9 7C11 7BC9 7BE4 7BDB 7BE1 7BE9 7BE6 7CD5 7CD6 7E0A 7E11 7E08 7E1B 7E23 7E1E 7E1D 7E09 7E10 7F79 7FB2 7FF0 7FF1 7FEE 8028 81B3 81A9 81A8 81FB 8208 8258 8259 854A 8559 8548 8568 8569 8543 8549 856D 856A 855E 8783 879F 879E 87A2 878D 8861 892A 8932 8925 892B 8921 89AA 89A6 8AE6 8AFA 8AEB 8AF1 8B00 8ADC 8AE7 8AEE 8AFE 8B01 8B02 8AF7 8AED 8AF3 8AF6 8AFC 8C6B 8C6D 8C93 8CF4 8E44 8E31 8E34 8E42 8E39 8E35 8F3B 8F2F 8F38 8F33 8FA8 8FA6 9075 9074 9078 9072 907C 907A 9134 9192 9320 9336 92F8 9333 932F 9322 92FC 932B 9304 931A 9310 9326 9321 9315 932E 9319 95BB 96A7 96A8 96AA 96D5 970E 9711 9716 970D 9713 970F 975B 975C 9766 9798 9830 9838 983B 9837 982D 9839 9824 9910 9928 991E 991B 9921 991A 99ED 99E2 99F1 9AB8 9ABC 9AFB 9AED 9B28 9B91 9D15 9D23 9D26 9D28 9D12 9D1B 9ED8 9ED4 9F8D 9F9C 512A 511F 5121 5132 52F5 568E 5680 5690 5685 5687 568F 58D5 58D3 58D1 58CE 5B30 5B2A 5B24 5B7A 5C37 5C68 5DBC 5DBA 5DBD 5DB8 5E6B 5F4C 5FBD 61C9 61C2 61C7 61E6 61CB 6232 6234 64CE 64CA 64D8 64E0 64F0 64E6 64EC 64F1 64E2 64ED 6582 6583 66D9 66D6 6A80 6A94 6A84 6AA2 6A9C 6ADB 6AA3 6A7E 6A97 6A90 6AA0 6B5C 6BAE 6BDA 6C08 6FD8 6FF1 6FDF 6FE0 6FDB 6FE4 6FEB 6FEF 6F80 6FEC 6FE1 6FE9 6FD5 6FEE 6FF0 71E7 71DF 71EE 71E6 71E5 71ED 71EC 71F4 71E0 7235 7246 7370 7372 74A9 74B0 74A6 74A8 7646 7642 764C 76EA 77B3 77AA 77B0 77AC 77A7 77AD 77EF 78F7 78FA 78F4 78EF 7901 79A7 79AA 7A57 7ABF 7C07 7C0D 7BFE 7BF7 7C0C 7BE0 7CE0 7CDC 7CDE 7CE2 7CDF 7CD9 7CDD 7E2E 7E3E 7E46 7E37 7E32 7E43 7E2B 7E3D 7E31 7E45 7E41 7E34 7E39 7E48 7E35 7E3F 7E2F 7F44 7FF3 7FFC 8071 8072 8070 806F 8073 81C6 81C3 81BA 81C2 81C0 81BF 81BD 81C9 81BE 81E8 8209 8271 85AA 8584 857E 859C 8591 8594 85AF 859B 8587 85A8 858A 8667 87C0 87D1 87B3 87D2 87C6 87AB 87BB 87BA 87C8 87CB 893B 8936 8944 8938 893D 89AC 8B0E 8B17 8B19 8B1B 8B0A 8B20 8B1D 8B04 8B10 8C41 8C3F 8C73 8CFA 8CFD 8CFC 8CF8 8CFB 8DA8 8E49 8E4B 8E48 8E4A 8F44 8F3E 8F42 8F45 8F3F 907F 907D 9084 9081 9082 9080 9139 91A3 919E 919C 934D 9382 9328 9375 934A 9365 934B 9318 937E 936C 935B 9370 935A 9354 95CA 95CB 95CC 95C8 95C6 96B1 96B8 96D6 971C 971E 97A0 97D3 9846 98B6 9935 9A01 99FF 9BAE 9BAB 9BAA 9BAD 9D3B 9D3F 9E8B 9ECF 9EDE 9EDC 9EDD 9EDB 9F3E 9F4B 53E2 5695 56AE 58D9 58D8 5B38 5F5D 61E3 6233 64F4 64F2 64FE 6506 64FA 64FB 64F7 65B7 66DC 6726 6AB3 6AAC 6AC3 6ABB 6AB8 6AC2 6AAE 6AAF 6B5F 6B78 6BAF 7009 700B 6FFE 7006 6FFA 7011 700F 71FB 71FC 71FE 71F8 7377 7375 74A7 74BF 7515 7656 7658 7652 77BD 77BF 77BB 77BC 790E 79AE 7A61 7A62 7A60 7AC4 7AC5 7C2B 7C27 7C2A 7C1E 7C23 7C21 7CE7 7E54 7E55 7E5E 7E5A 7E61 7E52 7E59 7F48 7FF9 7FFB 8077 8076 81CD 81CF 820A 85CF 85A9 85CD 85D0 85C9 85B0 85BA 85B9 85A6 87EF 87EC 87F2 87E0 8986 89B2 89F4 8B28 8B39 8B2C 8B2B 8C50 8D05 8E59 8E63 8E66 8E64 8E5F 8E55 8EC0 8F49 8F4D 9087 9083 9088 91AB 91AC 91D0 9394 938A 9396 93A2 93B3 93AE 93AC 93B0 9398 939A 9397 95D4 95D6 95D0 95D5 96E2 96DC 96D9 96DB 96DE 9724 97A3 97A6 97AD 97F9 984D 984F 984C 984E 9853 98BA 993E 993F 993D 992E 99A5 9A0E 9AC1 9B03 9B06 9B4F 9B4E 9B4D 9BCA 9BC9 9BFD 9BC8 9BC0 9D51 9D5D 9D60 9EE0 9F15 9F2C 5133 56A5 58DE 58DF 58E2 5BF5 9F90 5EEC 61F2 61F7 61F6 61F5 6500 650F 66E0 66DD 6AE5 6ADD 6ADA 6AD3 701B 701F 7028 701A 701D 7015 7018 7206 720D 7258 72A2 7378 737A 74BD 74CA 74E3 7587 7586 765F 7661 77C7 7919 79B1 7A6B 7A69 7C3E 7C3F 7C38 7C3D 7C37 7C40 7E6B 7E6D 7E79 7E69 7E6A 7F85 7E73 7FB6 7FB9 7FB8 81D8 85E9 85DD 85EA 85D5 85E4 85E5 85F7 87FB 8805 880D 87F9 87FE 8960 895F 8956 895E 8B41 8B5C 8B58 8B49 8B5A 8B4E 8B4F 8B46 8B59 8D08 8D0A 8E7C 8E72 8E87 8E76 8E6C 8E7A 8E74 8F54 8F4E 8FAD 908A 908B 91B1 91AE 93E1 93D1 93DF 93C3 93C8 93DC 93DD 93D6 93E2 93CD 93D8 93E4 93D7 93E8 95DC 96B4 96E3 972A 9727 9761 97DC 97FB 985E 9858 985B 98BC 9945 9949 9A16 9A19 9B0D 9BE8 9BE7 9BD6 9BDB 9D89 9D61 9D72 9D6A 9D6C 9E92 9E97 9E93 9EB4 52F8 56A8 56B7 56B6 56B4 56BC 58E4 5B40 5B43 5B7D 5BF6 5DC9 61F8 61FA 6518 6514 6519 66E6 6727 6AEC 703E 7030 7032 7210 737B 74CF 7662 7665 7926 792A 792C 792B 7AC7 7AF6 7C4C 7C43 7C4D 7CEF 7CF0 8FAE 7E7D 7E7C 7E82 7F4C 8000 81DA 8266 85FB 85F9 8611 85FA 8606 860B 8607 860A 8814 8815 8964 89BA 89F8 8B70 8B6C 8B66 8B6F 8B5F 8B6B 8D0F 8D0D 8E89 8E81 8E85 8E82 91B4 91CB 9418 9403 93FD 95E1 9730 98C4 9952 9951 99A8 9A2B 9A30 9A37 9A35 9C13 9C0D 9E79 9EB5 9EE8 9F2F 9F5F 9F63 9F61 5137 5138 56C1 56C0 56C2 5914 5C6C 5DCD 61FC 61FE 651D 651C 6595 66E9 6AFB 6B04 6AFA 6BB2 704C 721B 72A7 74D6 74D4 7669 77D3 7C50 7E8F 7E8C 7FBC 8617 862D 861A 8823 8822 8821 881F 896A 896C 89BD 8B74 8B77 8B7D 8D13 8E8A 8E8D 8E8B 8F5F 8FAF 91BA 942E 9433 9435 943A 9438 9432 942B 95E2 9738 9739 9732 97FF 9867 9865 9957 9A45 9A43 9A40 9A3E 9ACF 9B54 9B51 9C2D 9C25 9DAF 9DB4 9DC2 9DB8 9E9D 9EEF 9F19 9F5C 9F66 9F67 513C 513B 56C8 56CA 56C9 5B7F 5DD4 5DD2 5F4E 61FF 6524 6B0A 6B61 7051 7058 7380 74E4 758A 766E 766C 79B3 7C60 7C5F 807E 807D 81DF 8972 896F 89FC 8B80 8D16 8D17 8E91 8E93 8F61 9148 9444 9451 9452 973D 973E 97C3 97C1 986B 9955 9A55 9A4D 9AD2 9B1A 9C49 9C31 9C3E 9C3B 9DD3 9DD7 9F34 9F6C 9F6A 9F94 56CC 5DD6 6200 6523 652B 652A 66EC 6B10 74DA 7ACA 7C64 7C63 7C65 7E93 7E96 7E94 81E2 8638 863F 8831 8B8A 9090 908F 9463 9460 9464 9768 986F 995C 9A5A 9A5B 9A57 9AD3 9AD4 9AD1 9C54 9C57 9C56 9DE5 9E9F 9EF4 56D1 58E9 652C 705E 7671 7672 77D7 7F50 7F88 8836 8839 8862 8B93 8B92 8B96 8277 8D1B 91C0 946A 9742 9748 9744 97C6 9870 9A5F 9B22 9B58 9C5F 9DF9 9DFA 9E7C 9E7D 9F07 9F77 9F72 5EF3 6B16 7063 7C6C 7C6E 883B 89C0 8EA1 91C1 9472 9470 9871 995E 9AD6 9B23 9ECC 7064 77DA 8B9A 9477 97C9 9A62 9A65 7E9C 8B9C 8EAA 91C5 947D 947E 947C 9C77 9C78 9EF7 8C54 947F 9E1A 7228 9A6A 9B31 9E1B 9E1E 7C72 4E42 4E5C 51F5 531A 5382 4E07 4E0C 4E47 4E8D 56D7 5C6E 5F73 4E0F 5187 4E0E 4E2E 4E93 4EC2 4EC9 4EC8 5198 52FC 536C 53B9 5720 5903 592C 5C10 5DFF 65E1 6BB3 6BCC 6C14 723F 4E31 4E3C 4EE8 4EDC 4EE9 4EE1 4EDD 4EDA 520C 531C 534C 5722 5723 5917 592F 5B81 5B84 5C12 5C3B 5C74 5C73 5E04 5E80 5E82 5FC9 6209 6250 6C15 6C36 6C43 6C3F 6C3B 72AE 72B0 738A 79B8 808A 961E 4F0E 4F18 4F2C 4EF5 4F14 4EF1 4F00 4EF7 4F08 4F1D 4F02 4F05 4F22 4F13 4F04 4EF4 4F12 51B1 5213 5209 5210 52A6 5322 531F 534D 538A 5407 56E1 56DF 572E 572A 5734 593C 5980 597C 5985 597B 597E 5977 597F 5B56 5C15 5C25 5C7C 5C7A 5C7B 5C7E 5DDF 5E75 5E84 5F02 5F1A 5F74 5FD5 5FD4 5FCF 625C 625E 6264 6261 6266 6262 6259 6260 625A 6265 65EF 65EE 673E 6739 6738 673B 673A 673F 673C 6733 6C18 6C46 6C52 6C5C 6C4F 6C4A 6C54 6C4B 6C4C 7071 725E 72B4 72B5 738E 752A 767F 7A75 7F51 8278 827C 8280 827D 827F 864D 897E 9099 9097 9098 909B 9094 9622 9624 9620 9623 4F56 4F3B 4F62 4F49 4F53 4F64 4F3E 4F67 4F52 4F5F 4F41 4F58 4F2D 4F33 4F3F 4F61 518F 51B9 521C 521E 5221 52AD 52AE 5309 5363 5372 538E 538F 5430 5437 542A 5454 5445 5419 541C 5425 5418 543D 544F 5441 5428 5424 5447 56EE 56E7 56E5 5741 5745 574C 5749 574B 5752 5906 5940 59A6 5998 59A0 5997 598E 59A2 5990 598F 59A7 59A1 5B8E 5B92 5C28 5C2A 5C8D 5C8F 5C88 5C8B 5C89 5C92 5C8A 5C86 5C93 5C95 5DE0 5E0A 5E0E 5E8B 5E89 5E8C 5E88 5E8D 5F05 5F1D 5F78 5F76 5FD2 5FD1 5FD0 5FED 5FE8 5FEE 5FF3 5FE1 5FE4 5FE3 5FFA 5FEF 5FF7 5FFB 6000 5FF4 623A 6283 628C 628E 628F 6294 6287 6271 627B 627A 6270 6281 6288 6277 627D 6272 6274 6537 65F0 65F4 65F3 65F2 65F5 6745 6747 6759 6755 674C 6748 675D 674D 675A 674B 6BD0 6C19 6C1A 6C78 6C67 6C6B 6C84 6C8B 6C8F 6C71 6C6F 6C69 6C9A 6C6D 6C87 6C95 6C9C 6C66 6C73 6C65 6C7B 6C8E 7074 707A 7263 72BF 72BD 72C3 72C6 72C1 72BA 72C5 7395 7397 7393 7394 7392 753A 7539 7594 7595 7681 793D 8034 8095 8099 8090 8092 809C 8290 828F 8285 828E 8291 8293 828A 8283 8284 8C78 8FC9 8FBF 909F 90A1 90A5 909E 90A7 90A0 9630 9628 962F 962D 4E33 4F98 4F7C 4F85 4F7D 4F80 4F87 4F76 4F74 4F89 4F84 4F77 4F4C 4F97 4F6A 4F9A 4F79 4F81 4F78 4F90 4F9C 4F94 4F9E 4F92 4F82 4F95 4F6B 4F6E 519E 51BC 51BE 5235 5232 5233 5246 5231 52BC 530A 530B 533C 5392 5394 5487 547F 5481 5491 5482 5488 546B 547A 547E 5465 546C 5474 5466 548D 546F 5461 5460 5498 5463 5467 5464 56F7 56F9 576F 5772 576D 576B 5771 5770 5776 5780 5775 577B 5773 5774 5762 5768 577D 590C 5945 59B5 59BA 59CF 59CE 59B2 59CC 59C1 59B6 59BC 59C3 59D6 59B1 59BD 59C0 59C8 59B4 59C7 5B62 5B65 5B93 5B95 5C44 5C47 5CAE 5CA4 5CA0 5CB5 5CAF 5CA8 5CAC 5C9F 5CA3 5CAD 5CA2 5CAA 5CA7 5C9D 5CA5 5CB6 5CB0 5CA6 5E17 5E14 5E19 5F28 5F22 5F23 5F24 5F54 5F82 5F7E 5F7D 5FDE 5FE5 602D 6026 6019 6032 600B 6034 600A 6017 6033 601A 601E 602C 6022 600D 6010 602E 6013 6011 600C 6009 601C 6214 623D 62AD 62B4 62D1 62BE 62AA 62B6 62CA 62AE 62B3 62AF 62BB 62A9 62B0 62B8 653D 65A8 65BB 6609 65FC 6604 6612 6608 65FB 6603 660B 660D 6605 65FD 6611 6610 66F6 670A 6785 676C 678E 6792 6776 677B 6798 6786 6784 6774 678D 678C 677A 679F 6791 6799 6783 677D 6781 6778 6779 6794 6B25 6B80 6B7E 6BDE 6C1D 6C93 6CEC 6CEB 6CEE 6CD9 6CB6 6CD4 6CAD 6CE7 6CB7 6CD0 6CC2 6CBA 6CC3 6CC6 6CED 6CF2 6CD2 6CDD 6CB4 6C8A 6C9D 6C80 6CDE 6CC0 6D30 6CCD 6CC7 6CB0 6CF9 6CCF 6CE9 6CD1 7094 7098 7085 7093 7086 7084 7091 7096 7082 709A 7083 726A 72D6 72CB 72D8 72C9 72DC 72D2 72D4 72DA 72CC 72D1 73A4 73A1 73AD 73A6 73A2 73A0 73AC 739D 74DD 74E8 753F 7540 753E 758C 7598 76AF 76F3 76F1 76F0 76F5 77F8 77FC 77F9 77FB 77FA 77F7 7942 793F 79C5 7A78 7A7B 7AFB 7C75 7CFD 8035 808F 80AE 80A3 80B8 80B5 80AD 8220 82A0 82C0 82AB 829A 8298 829B 82B5 82A7 82AE 82BC 829E 82BA 82B4 82A8 82A1 82A9 82C2 82A4 82C3 82B6 82A2 8670 866F 866D 866E 8C56 8FD2 8FCB 8FD3 8FCD 8FD6 8FD5 8FD7 90B2 90B4 90AF 90B3 90B0 9639 963D 963C 963A 9643 4FCD 4FC5 4FD3 4FB2 4FC9 4FCB 4FC1 4FD4 4FDC 4FD9 4FBB 4FB3 4FDB 4FC7 4FD6 4FBA 4FC0 4FB9 4FEC 5244 5249 52C0 52C2 533D 537C 5397 5396 5399 5398 54BA 54A1 54AD 54A5 54CF 54C3 830D 54B7 54AE 54D6 54B6 54C5 54C6 54A0 5470 54BC 54A2 54BE 5472 54DE 54B0 57B5 579E 579F 57A4 578C 5797 579D 579B 5794 5798 578F 5799 57A5 579A 5795 58F4 590D 5953 59E1 59DE 59EE 5A00 59F1 59DD 59FA 59FD 59FC 59F6 59E4 59F2 59F7 59DB 59E9 59F3 59F5 59E0 59FE 59F4 59ED 5BA8 5C4C 5CD0 5CD8 5CCC 5CD7 5CCB 5CDB 5CDE 5CDA 5CC9 5CC7 5CCA 5CD6 5CD3 5CD4 5CCF 5CC8 5CC6 5CCE 5CDF 5CF8 5DF9 5E21 5E22 5E23 5E20 5E24 5EB0 5EA4 5EA2 5E9B 5EA3 5EA5 5F07 5F2E 5F56 5F86 6037 6039 6054 6072 605E 6045 6053 6047 6049 605B 604C 6040 6042 605F 6024 6044 6058 6066 606E 6242 6243 62CF 630D 630B 62F5 630E 6303 62EB 62F9 630F 630C 62F8 62F6 6300 6313 6314 62FA 6315 62FB 62F0 6541 6543 65AA 65BF 6636 6621 6632 6635 661C 6626 6622 6633 662B 663A 661D 6634 6639 662E 670F 6710 67C1 67F2 67C8 67BA 67DC 67BB 67F8 67D8 67C0 67B7 67C5 67EB 67E4 67DF 67B5 67CD 67B3 67F7 67F6 67EE 67E3 67C2 67B9 67CE 67E7 67F0 67B2 67FC 67C6 67ED 67CC 67AE 67E6 67DB 67FA 67C9 67CA 67C3 67EA 67CB 6B28 6B82 6B84 6BB6 6BD6 6BD8 6BE0 6C20 6C21 6D28 6D34 6D2D 6D1F 6D3C 6D3F 6D12 6D0A 6CDA 6D33 6D04 6D19 6D3A 6D1A 6D11 6D00 6D1D 6D42 6D01 6D18 6D37 6D03 6D0F 6D40 6D07 6D20 6D2C 6D08 6D22 6D09 6D10 70B7 709F 70BE 70B1 70B0 70A1 70B4 70B5 70A9 7241 7249 724A 726C 7270 7273 726E 72CA 72E4 72E8 72EB 72DF 72EA 72E6 72E3 7385 73CC 73C2 73C8 73C5 73B9 73B6 73B5 73B4 73EB 73BF 73C7 73BE 73C3 73C6 73B8 73CB 74EC 74EE 752E 7547 7548 75A7 75AA 7679 76C4 7708 7703 7704 7705 770A 76F7 76FB 76FA 77E7 77E8 7806 7811 7812 7805 7810 780F 780E 7809 7803 7813 794A 794C 794B 7945 7944 79D5 79CD 79CF 79D6 79CE 7A80 7A7E 7AD1 7B00 7B01 7C7A 7C78 7C79 7C7F 7C80 7C81 7D03 7D08 7D01 7F58 7F91 7F8D 7FBE 8007 800E 800F 8014 8037 80D8 80C7 80E0 80D1 80C8 80C2 80D0 80C5 80E3 80D9 80DC 80CA 80D5 80C9 80CF 80D7 80E6 80CD 81FF 8221 8294 82D9 82FE 82F9 8307 82E8 8300 82D5 833A 82EB 82D6 82F4 82EC 82E1 82F2 82F5 830C 82FB 82F6 82F0 82EA 82E4 82E0 82FA 82F3 82ED 8677 8674 867C 8673 8841 884E 8867 886A 8869 89D3 8A04 8A07 8D72 8FE3 8FE1 8FEE 8FE0 90F1 90BD 90BF 90D5 90C5 90BE 90C7 90CB 90C8 91D4 91D3 9654 964F 9651 9653 964A 964E 501E 5005 5007 5013 5022 5030 501B 4FF5 4FF4 5033 5037 502C 4FF6 4FF7 5017 501C 5020 5027 5035 502F 5031 500E 515A 5194 5193 51CA 51C4 51C5 51C8 51CE 5261 525A 5252 525E 525F 5255 5262 52CD 530E 539E 5526 54E2 5517 5512 54E7 54F3 54E4 551A 54FF 5504 5508 54EB 5511 5505 54F1 550A 54FB 54F7 54F8 54E0 550E 5503 550B 5701 5702 57CC 5832 57D5 57D2 57BA 57C6 57BD 57BC 57B8 57B6 57BF 57C7 57D0 57B9 57C1 590E 594A 5A19 5A16 5A2D 5A2E 5A15 5A0F 5A17 5A0A 5A1E 5A33 5B6C 5BA7 5BAD 5BAC 5C03 5C56 5C54 5CEC 5CFF 5CEE 5CF1 5CF7 5D00 5CF9 5E29 5E28 5EA8 5EAE 5EAA 5EAC 5F33 5F30 5F67 605D 605A 6067 6041 60A2 6088 6080 6092 6081 609D 6083 6095 609B 6097 6087 609C 608E 6219 6246 62F2 6310 6356 632C 6344 6345 6336 6343 63E4 6339 634B 634A 633C 6329 6341 6334 6358 6354 6359 632D 6347 6333 635A 6351 6338 6357 6340 6348 654A 6546 65C6 65C3 65C4 65C2 664A 665F 6647 6651 6712 6713 681F 681A 6849 6832 6833 683B 684B 684F 6816 6831 681C 6835 682B 682D 682F 684E 6844 6834 681D 6812 6814 6826 6828 682E 684D 683A 6825 6820 6B2C 6B2F 6B2D 6B31 6B34 6B6D 8082 6B88 6BE6 6BE4 6BE8 6BE3 6BE2 6BE7 6C25 6D7A 6D63 6D64 6D76 6D0D 6D61 6D92 6D58 6D62 6D6D 6D6F 6D91 6D8D 6DEF 6D7F 6D86 6D5E 6D67 6D60 6D97 6D70 6D7C 6D5F 6D82 6D98 6D2F 6D68 6D8B 6D7E 6D80 6D84 6D16 6D83 6D7B 6D7D 6D75 6D90 70DC 70D3 70D1 70DD 70CB 7F39 70E2 70D7 70D2 70DE 70E0 70D4 70CD 70C5 70C6 70C7 70DA 70CE 70E1 7242 7278 7277 7276 7300 72FA 72F4 72FE 72F6 72F3 72FB 7301 73D3 73D9 73E5 73D6 73BC 73E7 73E3 73E9 73DC 73D2 73DB 73D4 73DD 73DA 73D7 73D8 73E8 74DE 74DF 74F4 74F5 7521 755B 755F 75B0 75C1 75BB 75C4 75C0 75BF 75B6 75BA 768A 76C9 771D 771B 7710 7713 7712 7723 7711 7715 7719 771A 7722 7727 7823 782C 7822 7835 782F 7828 782E 782B 7821 7829 7833 782A 7831 7954 795B 794F 795C 7953 7952 7951 79EB 79EC 79E0 79EE 79ED 79EA 79DC 79DE 79DD 7A86 7A89 7A85 7A8B 7A8C 7A8A 7A87 7AD8 7B10 7B04 7B13 7B05 7B0F 7B08 7B0A 7B0E 7B09 7B12 7C84 7C91 7C8A 7C8C 7C88 7C8D 7C85 7D1E 7D1D 7D11 7D0E 7D18 7D16 7D13 7D1F 7D12 7D0F 7D0C 7F5C 7F61 7F5E 7F60 7F5D 7F5B 7F96 7F92 7FC3 7FC2 7FC0 8016 803E 8039 80FA 80F2 80F9 80F5 8101 80FB 8100 8201 822F 8225 8333 832D 8344 8319 8351 8325 8356 833F 8341 8326 831C 8322 8342 834E 831B 832A 8308 833C 834D 8316 8324 8320 8337 832F 8329 8347 8345 834C 8353 831E 832C 834B 8327 8348 8653 8652 86A2 86A8 8696 868D 8691 869E 8687 8697 8686 868B 869A 8685 86A5 8699 86A1 86A7 8695 8698 868E 869D 8690 8694 8843 8844 886D 8875 8876 8872 8880 8871 887F 886F 8883 887E 8874 887C 8A12 8C47 8C57 8C7B 8CA4 8CA3 8D76 8D78 8DB5 8DB7 8DB6 8ED1 8ED3 8FFE 8FF5 9002 8FFF 8FFB 9004 8FFC 8FF6 90D6 90E0 90D9 90DA 90E3 90DF 90E5 90D8 90DB 90D7 90DC 90E4 9150 914E 914F 91D5 91E2 91DA 965C 965F 96BC 98E3 9ADF 9B2F 4E7F 5070 506A 5061 505E 5060 5053 504B 505D 5072 5048 504D 5041 505B 504A 5062 5015 5045 505F 5069 506B 5063 5064 5046 5040 506E 5073 5057 5051 51D0 526B 526D 526C 526E 52D6 52D3 532D 539C 5575 5576 553C 554D 5550 5534 552A 5551 5562 5536 5535 5530 5552 5545 550C 5532 5565 554E 5539 5548 552D 553B 5540 554B 570A 5707 57FB 5814 57E2 57F6 57DC 57F4 5800 57ED 57FD 5808 57F8 580B 57F3 57CF 5807 57EE 57E3 57F2 57E5 57EC 57E1 580E 57FC 5810 57E7 5801 580C 57F1 57E9 57F0 580D 5804 595C 5A60 5A58 5A55 5A67 5A5E 5A38 5A35 5A6D 5A50 5A5F 5A65 5A6C 5A53 5A64 5A57 5A43 5A5D 5A52 5A44 5A5B 5A48 5A8E 5A3E 5A4D 5A39 5A4C 5A70 5A69 5A47 5A51 5A56 5A42 5A5C 5B72 5B6E 5BC1 5BC0 5C59 5D1E 5D0B 5D1D 5D1A 5D20 5D0C 5D28 5D0D 5D26 5D25 5D0F 5D30 5D12 5D23 5D1F 5D2E 5E3E 5E34 5EB1 5EB4 5EB9 5EB2 5EB3 5F36 5F38 5F9B 5F96 5F9F 608A 6090 6086 60BE 60B0 60BA 60D3 60D4 60CF 60E4 60D9 60DD 60C8 60B1 60DB 60B7 60CA 60BF 60C3 60CD 60C0 6332 6365 638A 6382 637D 63BD 639E 63AD 639D 6397 63AB 638E 636F 6387 6390 636E 63AF 6375 639C 636D 63AE 637C 63A4 633B 639F 6378 6385 6381 6391 638D 6370 6553 65CD 6665 6661 665B 6659 665C 6662 6718 6879 6887 6890 689C 686D 686E 68AE 68AB 6956 686F 68A3 68AC 68A9 6875 6874 68B2 688F 6877 6892 687C 686B 6872 68AA 6880 6871 687E 689B 6896 688B 68A0 6889 68A4 6878 687B 6891 688C 688A 687D 6B36 6B33 6B37 6B38 6B91 6B8F 6B8D 6B8E 6B8C 6C2A 6DC0 6DAB 6DB4 6DB3 6E74 6DAC 6DE9 6DE2 6DB7 6DF6 6DD4 6E00 6DC8 6DE0 6DDF 6DD6 6DBE 6DE5 6DDC 6DDD 6DDB 6DF4 6DCA 6DBD 6DED 6DF0 6DBA 6DD5 6DC2 6DCF 6DC9 6DD0 6DF2 6DD3 6DFD 6DD7 6DCD 6DE3 6DBB 70FA 710D 70F7 7117 70F4 710C 70F0 7104 70F3 7110 70FC 70FF 7106 7113 7100 70F8 70F6 710B 7102 710E 727E 727B 727C 727F 731D 7317 7307 7311 7318 730A 7308 72FF 730F 731E 7388 73F6 73F8 73F5 7404 7401 73FD 7407 7400 73FA 73FC 73FF 740C 740B 73F4 7408 7564 7563 75CE 75D2 75CF 75CB 75CC 75D1 75D0 768F 7689 76D3 7739 772F 772D 7731 7732 7734 7733 773D 7725 773B 7735 7848 7852 7849 784D 784A 784C 7826 7845 7850 7964 7967 7969 796A 7963 796B 7961 79BB 79FA 79F8 79F6 79F7 7A8F 7A94 7A90 7B35 7B47 7B34 7B25 7B30 7B22 7B24 7B33 7B18 7B2A 7B1D 7B31 7B2B 7B2D 7B2F 7B32 7B38 7B1A 7B23 7C94 7C98 7C96 7CA3 7D35 7D3D 7D38 7D36 7D3A 7D45 7D2C 7D29 7D41 7D47 7D3E 7D3F 7D4A 7D3B 7D28 7F63 7F95 7F9C 7F9D 7F9B 7FCA 7FCB 7FCD 7FD0 7FD1 7FC7 7FCF 7FC9 801F 801E 801B 8047 8043 8048 8118 8125 8119 811B 812D 811F 812C 811E 8121 8115 8127 811D 8122 8211 8238 8233 823A 8234 8232 8274 8390 83A3 83A8 838D 837A 8373 83A4 8374 838F 8381 8395 8399 8375 8394 83A9 837D 8383 838C 839D 839B 83AA 838B 837E 83A5 83AF 8388 8397 83B0 837F 83A6 8387 83AE 8376 839A 8659 8656 86BF 86B7 86C2 86C1 86C5 86BA 86B0 86C8 86B9 86B3 86B8 86CC 86B4 86BB 86BC 86C3 86BD 86BE 8852 8889 8895 88A8 88A2 88AA 889A 8891 88A1 889F 8898 88A7 8899 889B 8897 88A4 88AC 888C 8893 888E 8982 89D6 89D9 89D5 8A30 8A27 8A2C 8A1E 8C39 8C3B 8C5C 8C5D 8C7D 8CA5 8D7D 8D7B 8D79 8DBC 8DC2 8DB9 8DBF 8DC1 8ED8 8EDE 8EDD 8EDC 8ED7 8EE0 8EE1 9024 900B 9011 901C 900C 9021 90EF 90EA 90F0 90F4 90F2 90F3 90D4 90EB 90EC 90E9 9156 9158 915A 9153 9155 91EC 91F4 91F1 91F3 91F8 91E4 91F9 91EA 91EB 91F7 91E8 91EE 957A 9586 9588 967C 966D 966B 9671 966F 96BF 976A 9804 98E5 9997 509B 5095 5094 509E 508B 50A3 5083 508C 508E 509D 5068 509C 5092 5082 5087 515F 51D4 5312 5311 53A4 53A7 5591 55A8 55A5 55AD 5577 5645 55A2 5593 5588 558F 55B5 5581 55A3 5592 55A4 557D 558C 55A6 557F 5595 55A1 558E 570C 5829 5837 5819 581E 5827 5823 5828 57F5 5848 5825 581C 581B 5833 583F 5836 582E 5839 5838 582D 582C 583B 5961 5AAF 5A94 5A9F 5A7A 5AA2 5A9E 5A78 5AA6 5A7C 5AA5 5AAC 5A95 5AAE 5A37 5A84 5A8A 5A97 5A83 5A8B 5AA9 5A7B 5A7D 5A8C 5A9C 5A8F 5A93 5A9D 5BEA 5BCD 5BCB 5BD4 5BD1 5BCA 5BCE 5C0C 5C30 5D37 5D43 5D6B 5D41 5D4B 5D3F 5D35 5D51 5D4E 5D55 5D33 5D3A 5D52 5D3D 5D31 5D59 5D42 5D39 5D49 5D38 5D3C 5D32 5D36 5D40 5D45 5E44 5E41 5F58 5FA6 5FA5 5FAB 60C9 60B9 60CC 60E2 60CE 60C4 6114 60F2 610A 6116 6105 60F5 6113 60F8 60FC 60FE 60C1 6103 6118 611D 6110 60FF 6104 610B 624A 6394 63B1 63B0 63CE 63E5 63E8 63EF 63C3 649D 63F3 63CA 63E0 63F6 63D5 63F2 63F5 6461 63DF 63BE 63DD 63DC 63C4 63D8 63D3 63C2 63C7 63CC 63CB 63C8 63F0 63D7 63D9 6532 6567 656A 6564 655C 6568 6565 658C 659D 659E 65AE 65D0 65D2 667C 666C 667B 6680 6671 6679 666A 6672 6701 690C 68D3 6904 68DC 692A 68EC 68EA 68F1 690F 68D6 68F7 68EB 68E4 68F6 6913 6910 68F3 68E1 6907 68CC 6908 6970 68B4 6911 68EF 68C6 6914 68F8 68D0 68FD 68FC 68E8 690B 690A 6917 68CE 68C8 68DD 68DE 68E6 68F4 68D1 6906 68D4 68E9 6915 6925 68C7 6B39 6B3B 6B3F 6B3C 6B94 6B97 6B99 6B95 6BBD 6BF0 6BF2 6BF3 6C30 6DFC 6E46 6E47 6E1F 6E49 6E88 6E3C 6E3D 6E45 6E62 6E2B 6E3F 6E41 6E5D 6E73 6E1C 6E33 6E4B 6E40 6E51 6E3B 6E03 6E2E 6E5E 6E68 6E5C 6E61 6E31 6E28 6E60 6E71 6E6B 6E39 6E22 6E30 6E53 6E65 6E27 6E78 6E64 6E77 6E55 6E79 6E52 6E66 6E35 6E36 6E5A 7120 711E 712F 70FB 712E 7131 7123 7125 7122 7132 711F 7128 713A 711B 724B 725A 7288 7289 7286 7285 728B 7312 730B 7330 7322 7331 7333 7327 7332 732D 7326 7323 7335 730C 742E 742C 7430 742B 7416 741A 7421 742D 7431 7424 7423 741D 7429 7420 7432 74FB 752F 756F 756C 75E7 75DA 75E1 75E6 75DD 75DF 75E4 75D7 7695 7692 76DA 7746 7747 7744 774D 7745 774A 774E 774B 774C 77DE 77EC 7860 7864 7865 785C 786D 7871 786A 786E 7870 7869 7868 785E 7862 7974 7973 7972 7970 7A02 7A0A 7A03 7A0C 7A04 7A99 7AE6 7AE4 7B4A 7B3B 7B44 7B48 7B4C 7B4E 7B40 7B58 7B45 7CA2 7C9E 7CA8 7CA1 7D58 7D6F 7D63 7D53 7D56 7D67 7D6A 7D4F 7D6D 7D5C 7D6B 7D52 7D54 7D69 7D51 7D5F 7D4E 7F3E 7F3F 7F65 7F66 7FA2 7FA0 7FA1 7FD7 8051 804F 8050 80FE 80D4 8143 814A 8152 814F 8147 813D 814D 813A 81E6 81EE 81F7 81F8 81F9 8204 823C 823D 823F 8275 833B 83CF 83F9 8423 83C0 83E8 8412 83E7 83E4 83FC 83F6 8410 83C6 83C8 83EB 83E3 83BF 8401 83DD 83E5 83D8 83FF 83E1 83CB 83CE 83D6 83F5 83C9 8409 840F 83DE 8411 8406 83C2 83F3 83D5 83FA 83C7 83D1 83EA 8413 83C3 83EC 83EE 83C4 83FB 83D7 83E2 841B 83DB 83FE 86D8 86E2 86E6 86D3 86E3 86DA 86EA 86DD 86EB 86DC 86EC 86E9 86D7 86E8 86D1 8848 8856 8855 88BA 88D7 88B9 88B8 88C0 88BE 88B6 88BC 88B7 88BD 88B2 8901 88C9 8995 8998 8997 89DD 89DA 89DB 8A4E 8A4D 8A39 8A59 8A40 8A57 8A58 8A44 8A45 8A52 8A48 8A51 8A4A 8A4C 8A4F 8C5F 8C81 8C80 8CBA 8CBE 8CB0 8CB9 8CB5 8D84 8D80 8D89 8DD8 8DD3 8DCD 8DC7 8DD6 8DDC 8DCF 8DD5 8DD9 8DC8 8DD7 8DC5 8EEF 8EF7 8EFA 8EF9 8EE6 8EEE 8EE5 8EF5 8EE7 8EE8 8EF6 8EEB 8EF1 8EEC 8EF4 8EE9 902D 9034 902F 9106 912C 9104 90FF 90FC 9108 90F9 90FB 9101 9100 9107 9105 9103 9161 9164 915F 9162 9160 9201 920A 9225 9203 921A 9226 920F 920C 9200 9212 91FF 91FD 9206 9204 9227 9202 921C 9224 9219 9217 9205 9216 957B 958D 958C 9590 9687 967E 9688 9689 9683 9680 96C2 96C8 96C3 96F1 96F0 976C 9770 976E 9807 98A9 98EB 9CE6 9EF9 4E83 4E84 4EB6 50BD 50BF 50C6 50AE 50C4 50CA 50B4 50C8 50C2 50B0 50C1 50BA 50B1 50CB 50C9 50B6 50B8 51D7 527A 5278 527B 527C 55C3 55DB 55CC 55D0 55CB 55CA 55DD 55C0 55D4 55C4 55E9 55BF 55D2 558D 55CF 55D5 55E2 55D6 55C8 55F2 55CD 55D9 55C2 5714 5853 5868 5864 584F 584D 5849 586F 5855 584E 585D 5859 5865 585B 583D 5863 5871 58FC 5AC7 5AC4 5ACB 5ABA 5AB8 5AB1 5AB5 5AB0 5ABF 5AC8 5ABB 5AC6 5AB7 5AC0 5ACA 5AB4 5AB6 5ACD 5AB9 5A90 5BD6 5BD8 5BD9 5C1F 5C33 5D71 5D63 5D4A 5D65 5D72 5D6C 5D5E 5D68 5D67 5D62 5DF0 5E4F 5E4E 5E4A 5E4D 5E4B 5EC5 5ECC 5EC6 5ECB 5EC7 5F40 5FAF 5FAD 60F7 6149 614A 612B 6145 6136 6132 612E 6146 612F 614F 6129 6140 6220 9168 6223 6225 6224 63C5 63F1 63EB 6410 6412 6409 6420 6424 6433 6443 641F 6415 6418 6439 6437 6422 6423 640C 6426 6430 6428 6441 6435 642F 640A 641A 6440 6425 6427 640B 63E7 641B 642E 6421 640E 656F 6592 65D3 6686 668C 6695 6690 668B 668A 6699 6694 6678 6720 6966 695F 6938 694E 6962 6971 693F 6945 696A 6939 6942 6957 6959 697A 6948 6949 6935 696C 6933 693D 6965 68F0 6978 6934 6969 6940 696F 6944 6976 6958 6941 6974 694C 693B 694B 6937 695C 694F 6951 6932 6952 692F 697B 693C 6B46 6B45 6B43 6B42 6B48 6B41 6B9B 6BFB 6BFC 6BF9 6BF7 6BF8 6E9B 6ED6 6EC8 6E8F 6EC0 6E9F 6E93 6E94 6EA0 6EB1 6EB9 6EC6 6ED2 6EBD 6EC1 6E9E 6EC9 6EB7 6EB0 6ECD 6EA6 6ECF 6EB2 6EBE 6EC3 6EDC 6ED8 6E99 6E92 6E8E 6E8D 6EA4 6EA1 6EBF 6EB3 6ED0 6ECA 6E97 6EAE 6EA3 7147 7154 7152 7163 7160 7141 715D 7162 7172 7178 716A 7161 7142 7158 7143 714B 7170 715F 7150 7153 7144 714D 715A 724F 728D 728C 7291 7290 728E 733C 7342 733B 733A 7340 734A 7349 7444 744A 744B 7452 7451 7457 7440 744F 7450 744E 7442 7446 744D 7454 74E1 74FF 74FE 74FD 751D 7579 7577 6983 75EF 760F 7603 75F7 75FE 75FC 75F9 75F8 7610 75FB 75F6 75ED 75F5 75FD 7699 76B5 76DD 7755 775F 7760 7752 7756 775A 7769 7767 7754 7759 776D 77E0 7887 789A 7894 788F 7884 7895 7885 7886 78A1 7883 7879 7899 7880 7896 787B 797C 7982 797D 7979 7A11 7A18 7A19 7A12 7A17 7A15 7A22 7A13 7A1B 7A10 7AA3 7AA2 7A9E 7AEB 7B66 7B64 7B6D 7B74 7B69 7B72 7B65 7B73 7B71 7B70 7B61 7B78 7B76 7B63 7CB2 7CB4 7CAF 7D88 7D86 7D80 7D8D 7D7F 7D85 7D7A 7D8E 7D7B 7D83 7D7C 7D8C 7D94 7D84 7D7D 7D92 7F6D 7F6B 7F67 7F68 7F6C 7FA6 7FA5 7FA7 7FDB 7FDC 8021 8164 8160 8177 815C 8169 815B 8162 8172 6721 815E 8176 8167 816F 8144 8161 821D 8249 8244 8240 8242 8245 84F1 843F 8456 8476 8479 848F 848D 8465 8451 8440 8486 8467 8430 844D 847D 845A 8459 8474 8473 845D 8507 845E 8437 843A 8434 847A 8443 8478 8432 8445 8429 83D9 844B 842F 8442 842D 845F 8470 8439 844E 844C 8452 846F 84C5 848E 843B 8447 8436 8433 8468 847E 8444 842B 8460 8454 846E 8450 870B 8704 86F7 870C 86FA 86D6 86F5 874D 86F8 870E 8709 8701 86F6 870D 8705 88D6 88CB 88CD 88CE 88DE 88DB 88DA 88CC 88D0 8985 899B 89DF 89E5 89E4 89E1 89E0 89E2 89DC 89E6 8A76 8A86 8A7F 8A61 8A3F 8A77 8A82 8A84 8A75 8A83 8A81 8A74 8A7A 8C3C 8C4B 8C4A 8C65 8C64 8C66 8C86 8C84 8C85 8CCC 8D68 8D69 8D91 8D8C 8D8E 8D8F 8D8D 8D93 8D94 8D90 8D92 8DF0 8DE0 8DEC 8DF1 8DEE 8DD0 8DE9 8DE3 8DE2 8DE7 8DF2 8DEB 8DF4 8F06 8EFF 8F01 8F00 8F05 8F07 8F08 8F02 8F0B 9052 903F 9044 9049 903D 9110 910D 910F 9111 9116 9114 910B 910E 916E 916F 9248 9252 9230 923A 9266 9233 9265 925E 9283 922E 924A 9246 926D 926C 924F 9260 9267 926F 9236 9261 9270 9231 9254 9263 9250 9272 924E 9253 924C 9256 9232 959F 959C 959E 959B 9692 9693 9691 9697 96CE 96FA 96FD 96F8 96F5 9773 9777 9778 9772 980F 980D 980E 98AC 98F6 98F9 99AF 99B2 99B0 99B5 9AAD 9AAB 9B5B 9CEA 9CED 9CE7 9E80 9EFD 50E6 50D4 50D7 50E8 50F3 50DB 50EA 50DD 50E4 50D3 50EC 50F0 50EF 50E3 50E0 51D8 5280 5281 52E9 52EB 5330 53AC 5627 5615 560C 5612 55FC 560F 561C 5601 5613 5602 55FA 561D 5604 55FF 55F9 5889 587C 5890 5898 5886 5881 587F 5874 588B 587A 5887 5891 588E 5876 5882 5888 587B 5894 588F 58FE 596B 5ADC 5AEE 5AE5 5AD5 5AEA 5ADA 5AED 5AEB 5AF3 5AE2 5AE0 5ADB 5AEC 5ADE 5ADD 5AD9 5AE8 5ADF 5B77 5BE0 5BE3 5C63 5D82 5D80 5D7D 5D86 5D7A 5D81 5D77 5D8A 5D89 5D88 5D7E 5D7C 5D8D 5D79 5D7F 5E58 5E59 5E53 5ED8 5ED1 5ED7 5ECE 5EDC 5ED5 5ED9 5ED2 5ED4 5F44 5F43 5F6F 5FB6 612C 6128 6141 615E 6171 6173 6152 6153 6172 616C 6180 6174 6154 617A 615B 6165 613B 616A 6161 6156 6229 6227 622B 642B 644D 645B 645D 6474 6476 6472 6473 647D 6475 6466 64A6 644E 6482 645E 645C 644B 6453 6460 6450 647F 643F 646C 646B 6459 6465 6477 6573 65A0 66A1 66A0 669F 6705 6704 6722 69B1 69B6 69C9 69A0 69CE 6996 69B0 69AC 69BC 6991 6999 698E 69A7 698D 69A9 69BE 69AF 69BF 69C4 69BD 69A4 69D4 69B9 69CA 699A 69CF 69B3 6993 69AA 69A1 699E 69D9 6997 6990 69C2 69B5 69A5 69C6 6B4A 6B4D 6B4B 6B9E 6B9F 6BA0 6BC3 6BC4 6BFE 6ECE 6EF5 6EF1 6F03 6F25 6EF8 6F37 6EFB 6F2E 6F09 6F4E 6F19 6F1A 6F27 6F18 6F3B 6F12 6EED 6F0A 6F36 6F73 6EF9 6EEE 6F2D 6F40 6F30 6F3C 6F35 6EEB 6F07 6F0E 6F43 6F05 6EFD 6EF6 6F39 6F1C 6EFC 6F3A 6F1F 6F0D 6F1E 6F08 6F21 7187 7190 7189 7180 7185 7182 718F 717B 7186 7181 7197 7244 7253 7297 7295 7293 7343 734D 7351 734C 7462 7473 7471 7475 7472 7467 746E 7500 7502 7503 757D 7590 7616 7608 760C 7615 7611 760A 7614 76B8 7781 777C 7785 7782 776E 7780 776F 777E 7783 78B2 78AA 78B4 78AD 78A8 787E 78AB 789E 78A5 78A0 78AC 78A2 78A4 7998 798A 798B 7996 7995 7994 7993 7997 7988 7992 7990 7A2B 7A4A 7A30 7A2F 7A28 7A26 7AA8 7AAB 7AAC 7AEE 7B88 7B9C 7B8A 7B91 7B90 7B96 7B8D 7B8C 7B9B 7B8E 7B85 7B98 5284 7B99 7BA4 7B82 7CBB 7CBF 7CBC 7CBA 7DA7 7DB7 7DC2 7DA3 7DAA 7DC1 7DC0 7DC5 7D9D 7DCE 7DC4 7DC6 7DCB 7DCC 7DAF 7DB9 7D96 7DBC 7D9F 7DA6 7DAE 7DA9 7DA1 7DC9 7F73 7FE2 7FE3 7FE5 7FDE 8024 805D 805C 8189 8186 8183 8187 818D 818C 818B 8215 8497 84A4 84A1 849F 84BA 84CE 84C2 84AC 84AE 84AB 84B9 84B4 84C1 84CD 84AA 849A 84B1 84D0 849D 84A7 84BB 84A2 8494 84C7 84CC 849B 84A9 84AF 84A8 84D6 8498 84B6 84CF 84A0 84D7 84D4 84D2 84DB 84B0 8491 8661 8733 8723 8728 876B 8740 872E 871E 8721 8719 871B 8743 872C 8741 873E 8746 8720 8732 872A 872D 873C 8712 873A 8731 8735 8742 8726 8727 8738 8724 871A 8730 8711 88F7 88E7 88F1 88F2 88FA 88FE 88EE 88FC 88F6 88FB 88F0 88EC 88EB 899D 89A1 899F 899E 89E9 89EB 89E8 8AAB 8A99 8A8B 8A92 8A8F 8A96 8C3D 8C68 8C69 8CD5 8CCF 8CD7 8D96 8E09 8E02 8DFF 8E0D 8DFD 8E0A 8E03 8E07 8E06 8E05 8DFE 8E00 8E04 8F10 8F11 8F0E 8F0D 9123 911C 9120 9122 911F 911D 911A 9124 9121 911B 917A 9172 9179 9173 92A5 92A4 9276 929B 927A 92A0 9294 92AA 928D 92A6 929A 92AB 9279 9297 927F 92A3 92EE 928E 9282 9295 92A2 927D 9288 92A1 928A 9286 928C 9299 92A7 927E 9287 92A9 929D 928B 922D 969E 96A1 96FF 9758 977D 977A 977E 9783 9780 9782 977B 9784 9781 977F 97CE 97CD 9816 98AD 98AE 9902 9900 9907 999D 999C 99C3 99B9 99BB 99BA 99C2 99BD 99C7 9AB1 9AE3 9AE7 9B3E 9B3F 9B60 9B61 9B5F 9CF1 9CF2 9CF5 9EA7 50FF 5103 5130 50F8 5106 5107 50F6 50FE 510B 510C 50FD 510A 528B 528C 52F1 52EF 5648 5642 564C 5635 5641 564A 5649 5646 5658 565A 5640 5633 563D 562C 563E 5638 562A 563A 571A 58AB 589D 58B1 58A0 58A3 58AF 58AC 58A5 58A1 58FF 5AFF 5AF4 5AFD 5AF7 5AF6 5B03 5AF8 5B02 5AF9 5B01 5B07 5B05 5B0F 5C67 5D99 5D97 5D9F 5D92 5DA2 5D93 5D95 5DA0 5D9C 5DA1 5D9A 5D9E 5E69 5E5D 5E60 5E5C 7DF3 5EDB 5EDE 5EE1 5F49 5FB2 618B 6183 6179 61B1 61B0 61A2 6189 619B 6193 61AF 61AD 619F 6192 61AA 61A1 618D 6166 61B3 622D 646E 6470 6496 64A0 6485 6497 649C 648F 648B 648A 648C 64A3 649F 6468 64B1 6498 6576 657A 6579 657B 65B2 65B3 66B5 66B0 66A9 66B2 66B7 66AA 66AF 6A00 6A06 6A17 69E5 69F8 6A15 69F1 69E4 6A20 69FF 69EC 69E2 6A1B 6A1D 69FE 6A27 69F2 69EE 6A14 69F7 69E7 6A40 6A08 69E6 69FB 6A0D 69FC 69EB 6A09 6A04 6A18 6A25 6A0F 69F6 6A26 6A07 69F4 6A16 6B51 6BA5 6BA3 6BA2 6BA6 6C01 6C00 6BFF 6C02 6F41 6F26 6F7E 6F87 6FC6 6F92 6F8D 6F89 6F8C 6F62 6F4F 6F85 6F5A 6F96 6F76 6F6C 6F82 6F55 6F72 6F52 6F50 6F57 6F94 6F93 6F5D 6F00 6F61 6F6B 6F7D 6F67 6F90 6F53 6F8B 6F69 6F7F 6F95 6F63 6F77 6F6A 6F7B 71B2 71AF 719B 71B0 71A0 719A 71A9 71B5 719D 71A5 719E 71A4 71A1 71AA 719C 71A7 71B3 7298 729A 7358 7352 735E 735F 7360 735D 735B 7361 735A 7359 7362 7487 7489 748A 7486 7481 747D 7485 7488 747C 7479 7508 7507 757E 7625 761E 7619 761D 761C 7623 761A 7628 761B 769C 769D 769E 769B 778D 778F 7789 7788 78CD 78BB 78CF 78CC 78D1 78CE 78D4 78C8 78C3 78C4 78C9 799A 79A1 79A0 799C 79A2 799B 6B76 7A39 7AB2 7AB4 7AB3 7BB7 7BCB 7BBE 7BAC 7BCE 7BAF 7BB9 7BCA 7BB5 7CC5 7CC8 7CCC 7CCB 7DF7 7DDB 7DEA 7DE7 7DD7 7DE1 7E03 7DFA 7DE6 7DF6 7DF1 7DF0 7DEE 7DDF 7F76 7FAC 7FB0 7FAD 7FED 7FEB 7FEA 7FEC 7FE6 7FE8 8064 8067 81A3 819F 819E 8195 81A2 8199 8197 8216 824F 8253 8252 8250 824E 8251 8524 853B 850F 8500 8529 850E 8509 850D 851F 850A 8527 851C 84FB 852B 84FA 8508 850C 84F4 852A 84F2 8515 84F7 84EB 84F3 84FC 8512 84EA 84E9 8516 84FE 8528 851D 852E 8502 84FD 851E 84F6 8531 8526 84E7 84E8 84F0 84EF 84F9 8518 8520 8530 850B 8519 852F 8662 8756 8763 8764 8777 87E1 8773 8758 8754 875B 8752 8761 875A 8751 875E 876D 876A 8750 874E 875F 875D 876F 876C 877A 876E 875C 8765 874F 877B 8775 8762 8767 8769 885A 8905 890C 8914 890B 8917 8918 8919 8906 8916 8911 890E 8909 89A2 89A4 89A3 89ED 89F0 89EC 8ACF 8AC6 8AB8 8AD3 8AD1 8AD4 8AD5 8ABB 8AD7 8ABE 8AC0 8AC5 8AD8 8AC3 8ABA 8ABD 8AD9 8C3E 8C4D 8C8F 8CE5 8CDF 8CD9 8CE8 8CDA 8CDD 8CE7 8DA0 8D9C 8DA1 8D9B 8E20 8E23 8E25 8E24 8E2E 8E15 8E1B 8E16 8E11 8E19 8E26 8E27 8E14 8E12 8E18 8E13 8E1C 8E17 8E1A 8F2C 8F24 8F18 8F1A 8F20 8F23 8F16 8F17 9073 9070 906F 9067 906B 912F 912B 9129 912A 9132 9126 912E 9185 9186 918A 9181 9182 9184 9180 92D0 92C3 92C4 92C0 92D9 92B6 92CF 92F1 92DF 92D8 92E9 92D7 92DD 92CC 92EF 92C2 92E8 92CA 92C8 92CE 92E6 92CD 92D5 92C9 92E0 92DE 92E7 92D1 92D3 92B5 92E1 92C6 92B4 957C 95AC 95AB 95AE 95B0 96A4 96A2 96D3 9705 9708 9702 975A 978A 978E 9788 97D0 97CF 981E 981D 9826 9829 9828 9820 981B 9827 98B2 9908 98FA 9911 9914 9916 9917 9915 99DC 99CD 99CF 99D3 99D4 99CE 99C9 99D6 99D8 99CB 99D7 99CC 9AB3 9AEC 9AEB 9AF3 9AF2 9AF1 9B46 9B43 9B67 9B74 9B71 9B66 9B76 9B75 9B70 9B68 9B64 9B6C 9CFC 9CFA 9CFD 9CFF 9CF7 9D07 9D00 9CF9 9CFB 9D08 9D05 9D04 9E83 9ED3 9F0F 9F10 511C 5113 5117 511A 5111 51DE 5334 53E1 5670 5660 566E 5673 5666 5663 566D 5672 565E 5677 571C 571B 58C8 58BD 58C9 58BF 58BA 58C2 58BC 58C6 5B17 5B19 5B1B 5B21 5B14 5B13 5B10 5B16 5B28 5B1A 5B20 5B1E 5BEF 5DAC 5DB1 5DA9 5DA7 5DB5 5DB0 5DAE 5DAA 5DA8 5DB2 5DAD 5DAF 5DB4 5E67 5E68 5E66 5E6F 5EE9 5EE7 5EE6 5EE8 5EE5 5F4B 5FBC 619D 61A8 6196 61C5 61B4 61C6 61C1 61CC 61BA 61BF 61B8 618C 64D7 64D6 64D0 64CF 64C9 64BD 6489 64C3 64DB 64F3 64D9 6533 657F 657C 65A2 66C8 66BE 66C0 66CA 66CB 66CF 66BD 66BB 66BA 66CC 6723 6A34 6A66 6A49 6A67 6A32 6A68 6A3E 6A5D 6A6D 6A76 6A5B 6A51 6A28 6A5A 6A3B 6A3F 6A41 6A6A 6A64 6A50 6A4F 6A54 6A6F 6A69 6A60 6A3C 6A5E 6A56 6A55 6A4D 6A4E 6A46 6B55 6B54 6B56 6BA7 6BAA 6BAB 6BC8 6BC7 6C04 6C03 6C06 6FAD 6FCB 6FA3 6FC7 6FBC 6FCE 6FC8 6F5E 6FC4 6FBD 6F9E 6FCA 6FA8 7004 6FA5 6FAE 6FBA 6FAC 6FAA 6FCF 6FBF 6FB8 6FA2 6FC9 6FAB 6FCD 6FAF 6FB2 6FB0 71C5 71C2 71BF 71B8 71D6 71C0 71C1 71CB 71D4 71CA 71C7 71CF 71BD 71D8 71BC 71C6 71DA 71DB 729D 729E 7369 7366 7367 736C 7365 736B 736A 747F 749A 74A0 7494 7492 7495 74A1 750B 7580 762F 762D 7631 763D 7633 763C 7635 7632 7630 76BB 76E6 779A 779D 77A1 779C 779B 77A2 77A3 7795 7799 7797 78DD 78E9 78E5 78EA 78DE 78E3 78DB 78E1 78E2 78ED 78DF 78E0 79A4 7A44 7A48 7A47 7AB6 7AB8 7AB5 7AB1 7AB7 7BDE 7BE3 7BE7 7BDD 7BD5 7BE5 7BDA 7BE8 7BF9 7BD4 7BEA 7BE2 7BDC 7BEB 7BD8 7BDF 7CD2 7CD4 7CD7 7CD0 7CD1 7E12 7E21 7E17 7E0C 7E1F 7E20 7E13 7E0E 7E1C 7E15 7E1A 7E22 7E0B 7E0F 7E16 7E0D 7E14 7E25 7E24 7F43 7F7B 7F7C 7F7A 7FB1 7FEF 802A 8029 806C 81B1 81A6 81AE 81B9 81B5 81AB 81B0 81AC 81B4 81B2 81B7 81A7 81F2 8255 8256 8257 8556 8545 856B 854D 8553 8561 8558 8540 8546 8564 8541 8562 8544 8551 8547 8563 853E 855B 8571 854E 856E 8575 8555 8567 8560 858C 8566 855D 8554 8565 856C 8663 8665 8664 879B 878F 8797 8793 8792 8788 8781 8796 8798 8779 8787 87A3 8785 8790 8791 879D 8784 8794 879C 879A 8789 891E 8926 8930 892D 892E 8927 8931 8922 8929 8923 892F 892C 891F 89F1 8AE0 8AE2 8AF2 8AF4 8AF5 8ADD 8B14 8AE4 8ADF 8AF0 8AC8 8ADE 8AE1 8AE8 8AFF 8AEF 8AFB 8C91 8C92 8C90 8CF5 8CEE 8CF1 8CF0 8CF3 8D6C 8D6E 8DA5 8DA7 8E33 8E3E 8E38 8E40 8E45 8E36 8E3C 8E3D 8E41 8E30 8E3F 8EBD 8F36 8F2E 8F35 8F32 8F39 8F37 8F34 9076 9079 907B 9086 90FA 9133 9135 9136 9193 9190 9191 918D 918F 9327 931E 9308 931F 9306 930F 937A 9338 933C 931B 9323 9312 9301 9346 932D 930E 930D 92CB 931D 92FA 9325 9313 92F9 92F7 9334 9302 9324 92FF 9329 9339 9335 932A 9314 930C 930B 92FE 9309 9300 92FB 9316 95BC 95CD 95BE 95B9 95BA 95B6 95BF 95B5 95BD 96A9 96D4 970B 9712 9710 9799 9797 9794 97F0 97F8 9835 982F 9832 9924 991F 9927 9929 999E 99EE 99EC 99E5 99E4 99F0 99E3 99EA 99E9 99E7 9AB9 9ABF 9AB4 9ABB 9AF6 9AFA 9AF9 9AF7 9B33 9B80 9B85 9B87 9B7C 9B7E 9B7B 9B82 9B93 9B92 9B90 9B7A 9B95 9B7D 9B88 9D25 9D17 9D20 9D1E 9D14 9D29 9D1D 9D18 9D22 9D10 9D19 9D1F 9E88 9E86 9E87 9EAE 9EAD 9ED5 9ED6 9EFA 9F12 9F3D 5126 5125 5122 5124 5120 5129 52F4 5693 568C 568D 5686 5684 5683 567E 5682 567F 5681 58D6 58D4 58CF 58D2 5B2D 5B25 5B32 5B23 5B2C 5B27 5B26 5B2F 5B2E 5B7B 5BF1 5BF2 5DB7 5E6C 5E6A 5FBE 5FBB 61C3 61B5 61BC 61E7 61E0 61E5 61E4 61E8 61DE 64EF 64E9 64E3 64EB 64E4 64E8 6581 6580 65B6 65DA 66D2 6A8D 6A96 6A81 6AA5 6A89 6A9F 6A9B 6AA1 6A9E 6A87 6A93 6A8E 6A95 6A83 6AA8 6AA4 6A91 6A7F 6AA6 6A9A 6A85 6A8C 6A92 6B5B 6BAD 6C09 6FCC 6FA9 6FF4 6FD4 6FE3 6FDC 6FED 6FE7 6FE6 6FDE 6FF2 6FDD 6FE2 6FE8 71E1 71F1 71E8 71F2 71E4 71F0 71E2 7373 736E 736F 7497 74B2 74AB 7490 74AA 74AD 74B1 74A5 74AF 7510 7511 7512 750F 7584 7643 7648 7649 7647 76A4 76E9 77B5 77AB 77B2 77B7 77B6 77B4 77B1 77A8 77F0 78F3 78FD 7902 78FB 78FC 78F2 7905 78F9 78FE 7904 79AB 79A8 7A5C 7A5B 7A56 7A58 7A54 7A5A 7ABE 7AC0 7AC1 7C05 7C0F 7BF2 7C00 7BFF 7BFB 7C0E 7BF4 7C0B 7BF3 7C02 7C09 7C03 7C01 7BF8 7BFD 7C06 7BF0 7BF1 7C10 7C0A 7CE8 7E2D 7E3C 7E42 7E33 9848 7E38 7E2A 7E49 7E40 7E47 7E29 7E4C 7E30 7E3B 7E36 7E44 7E3A 7F45 7F7F 7F7E 7F7D 7FF4 7FF2 802C 81BB 81C4 81CC 81CA 81C5 81C7 81BC 81E9 825B 825A 825C 8583 8580 858F 85A7 8595 85A0 858B 85A3 857B 85A4 859A 859E 8577 857C 8589 85A1 857A 8578 8557 858E 8596 8586 858D 8599 859D 8581 85A2 8582 8588 8585 8579 8576 8598 8590 859F 8668 87BE 87AA 87AD 87C5 87B0 87AC 87B9 87B5 87BC 87AE 87C9 87C3 87C2 87CC 87B7 87AF 87C4 87CA 87B4 87B6 87BF 87B8 87BD 87DE 87B2 8935 8933 893C 893E 8941 8952 8937 8942 89AD 89AF 89AE 89F2 89F3 8B1E 8B18 8B16 8B11 8B05 8B0B 8B22 8B0F 8B12 8B15 8B07 8B0D 8B08 8B06 8B1C 8B13 8B1A 8C4F 8C70 8C72 8C71 8C6F 8C95 8C94 8CF9 8D6F 8E4E 8E4D 8E53 8E50 8E4C 8E47 8F43 8F40 9085 907E 9138 919A 91A2 919B 9199 919F 91A1 919D 91A0 93A1 9383 93AF 9364 9356 9347 937C 9358 935C 9376 9349 9350 9351 9360 936D 938F 934C 936A 9379 9357 9355 9352 934F 9371 9377 937B 9361 935E 9363 9367 9380 934E 9359 95C7 95C0 95C9 95C3 95C5 95B7 96AE 96B0 96AC 9720 971F 9718 971D 9719 979A 97A1 979C 979E 979D 97D5 97D4 97F1 9841 9844 984A 9849 9845 9843 9925 992B 992C 992A 9933 9932 992F 992D 9931 9930 9998 99A3 99A1 9A02 99FA 99F4 99F7 99F9 99F8 99F6 99FB 99FD 99FE 99FC 9A03 9ABE 9AFE 9AFD 9B01 9AFC 9B48 9B9A 9BA8 9B9E 9B9B 9BA6 9BA1 9BA5 9BA4 9B86 9BA2 9BA0 9BAF 9D33 9D41 9D67 9D36 9D2E 9D2F 9D31 9D38 9D30 9D45 9D42 9D43 9D3E 9D37 9D40 9D3D 7FF5 9D2D 9E8A 9E89 9E8D 9EB0 9EC8 9EDA 9EFB 9EFF 9F24 9F23 9F22 9F54 9FA0 5131 512D 512E 5698 569C 5697 569A 569D 5699 5970 5B3C 5C69 5C6A 5DC0 5E6D 5E6E 61D8 61DF 61ED 61EE 61F1 61EA 61F0 61EB 61D6 61E9 64FF 6504 64FD 64F8 6501 6503 64FC 6594 65DB 66DA 66DB 66D8 6AC5 6AB9 6ABD 6AE1 6AC6 6ABA 6AB6 6AB7 6AC7 6AB4 6AAD 6B5E 6BC9 6C0B 7007 700C 700D 7001 7005 7014 700E 6FFF 7000 6FFB 7026 6FFC 6FF7 700A 7201 71FF 71F9 7203 71FD 7376 74B8 74C0 74B5 74C1 74BE 74B6 74BB 74C2 7514 7513 765C 7664 7659 7650 7653 7657 765A 76A6 76BD 76EC 77C2 77BA 78FF 790C 7913 7914 7909 7910 7912 7911 79AD 79AC 7A5F 7C1C 7C29 7C19 7C20 7C1F 7C2D 7C1D 7C26 7C28 7C22 7C25 7C30 7E5C 7E50 7E56 7E63 7E58 7E62 7E5F 7E51 7E60 7E57 7E53 7FB5 7FB3 7FF7 7FF8 8075 81D1 81D2 81D0 825F 825E 85B4 85C6 85C0 85C3 85C2 85B3 85B5 85BD 85C7 85C4 85BF 85CB 85CE 85C8 85C5 85B1 85B6 85D2 8624 85B8 85B7 85BE 8669 87E7 87E6 87E2 87DB 87EB 87EA 87E5 87DF 87F3 87E4 87D4 87DC 87D3 87ED 87D8 87E3 87A4 87D7 87D9 8801 87F4 87E8 87DD 8953 894B 894F 894C 8946 8950 8951 8949 8B2A 8B27 8B23 8B33 8B30 8B35 8B47 8B2F 8B3C 8B3E 8B31 8B25 8B37 8B26 8B36 8B2E 8B24 8B3B 8B3D 8B3A 8C42 8C75 8C99 8C98 8C97 8CFE 8D04 8D02 8D00 8E5C 8E62 8E60 8E57 8E56 8E5E 8E65 8E67 8E5B 8E5A 8E61 8E5D 8E69 8E54 8F46 8F47 8F48 8F4B 9128 913A 913B 913E 91A8 91A5 91A7 91AF 91AA 93B5 938C 9392 93B7 939B 939D 9389 93A7 938E 93AA 939E 93A6 9395 9388 9399 939F 938D 93B1 9391 93B2 93A4 93A8 93B4 93A3 93A5 95D2 95D3 95D1 96B3 96D7 96DA 5DC2 96DF 96D8 96DD 9723 9722 9725 97AC 97AE 97A8 97AB 97A4 97AA 97A2 97A5 97D7 97D9 97D6 97D8 97FA 9850 9851 9852 98B8 9941 993C 993A 9A0F 9A0B 9A09 9A0D 9A04 9A11 9A0A 9A05 9A07 9A06 9AC0 9ADC 9B08 9B04 9B05 9B29 9B35 9B4A 9B4C 9B4B 9BC7 9BC6 9BC3 9BBF 9BC1 9BB5 9BB8 9BD3 9BB6 9BC4 9BB9 9BBD 9D5C 9D53 9D4F 9D4A 9D5B 9D4B 9D59 9D56 9D4C 9D57 9D52 9D54 9D5F 9D58 9D5A 9E8E 9E8C 9EDF 9F01 9F00 9F16 9F25 9F2B 9F2A 9F29 9F28 9F4C 9F55 5134 5135 5296 52F7 53B4 56AB 56AD 56A6 56A7 56AA 56AC 58DA 58DD 58DB 5912 5B3D 5B3E 5B3F 5DC3 5E70 5FBF 61FB 6507 6510 650D 6509 650C 650E 6584 65DE 65DD 66DE 6AE7 6AE0 6ACC 6AD1 6AD9 6ACB 6ADF 6ADC 6AD0 6AEB 6ACF 6ACD 6ADE 6B60 6BB0 6C0C 7019 7027 7020 7016 702B 7021 7022 7023 7029 7017 7024 701C 702A 720C 720A 7207 7202 7205 72A5 72A6 72A4 72A3 72A1 74CB 74C5 74B7 74C3 7516 7660 77C9 77CA 77C4 77F1 791D 791B 7921 791C 7917 791E 79B0 7A67 7A68 7C33 7C3C 7C39 7C2C 7C3B 7CEC 7CEA 7E76 7E75 7E78 7E70 7E77 7E6F 7E7A 7E72 7E74 7E68 7F4B 7F4A 7F83 7F86 7FB7 7FFD 7FFE 8078 81D7 81D5 8264 8261 8263 85EB 85F1 85ED 85D9 85E1 85E8 85DA 85D7 85EC 85F2 85F8 85D8 85DF 85E3 85DC 85D1 85F0 85E6 85EF 85DE 85E2 8800 87FA 8803 87F6 87F7 8809 880C 880B 8806 87FC 8808 87FF 880A 8802 8962 895A 895B 8957 8961 895C 8958 895D 8959 8988 89B7 89B6 89F6 8B50 8B48 8B4A 8B40 8B53 8B56 8B54 8B4B 8B55 8B51 8B42 8B52 8B57 8C43 8C77 8C76 8C9A 8D06 8D07 8D09 8DAC 8DAA 8DAD 8DAB 8E6D 8E78 8E73 8E6A 8E6F 8E7B 8EC2 8F52 8F51 8F4F 8F50 8F53 8FB4 9140 913F 91B0 91AD 93DE 93C7 93CF 93C2 93DA 93D0 93F9 93EC 93CC 93D9 93A9 93E6 93CA 93D4 93EE 93E3 93D5 93C4 93CE 93C0 93D2 93E7 957D 95DA 95DB 96E1 9729 972B 972C 9728 9726 97B3 97B7 97B6 97DD 97DE 97DF 985C 9859 985D 9857 98BF 98BD 98BB 98BE 9948 9947 9943 99A6 99A7 9A1A 9A15 9A25 9A1D 9A24 9A1B 9A22 9A20 9A27 9A23 9A1E 9A1C 9A14 9AC2 9B0B 9B0A 9B0E 9B0C 9B37 9BEA 9BEB 9BE0 9BDE 9BE4 9BE6 9BE2 9BF0 9BD4 9BD7 9BEC 9BDC 9BD9 9BE5 9BD5 9BE1 9BDA 9D77 9D81 9D8A 9D84 9D88 9D71 9D80 9D78 9D86 9D8B 9D8C 9D7D 9D6B 9D74 9D75 9D70 9D69 9D85 9D73 9D7B 9D82 9D6F 9D79 9D7F 9D87 9D68 9E94 9E91 9EC0 9EFC 9F2D 9F40 9F41 9F4D 9F56 9F57 9F58 5337 56B2 56B5 56B3 58E3 5B45 5DC6 5DC7 5EEE 5EEF 5FC0 5FC1 61F9 6517 6516 6515 6513 65DF 66E8 66E3 66E4 6AF3 6AF0 6AEA 6AE8 6AF9 6AF1 6AEE 6AEF 703C 7035 702F 7037 7034 7031 7042 7038 703F 703A 7039 7040 703B 7033 7041 7213 7214 72A8 737D 737C 74BA 76AB 76AA 76BE 76ED 77CC 77CE 77CF 77CD 77F2 7925 7923 7927 7928 7924 7929 79B2 7A6E 7A6C 7A6D 7AF7 7C49 7C48 7C4A 7C47 7C45 7CEE 7E7B 7E7E 7E81 7E80 7FBA 7FFF 8079 81DB 81D9 820B 8268 8269 8622 85FF 8601 85FE 861B 8600 85F6 8604 8609 8605 860C 85FD 8819 8810 8811 8817 8813 8816 8963 8966 89B9 89F7 8B60 8B6A 8B5D 8B68 8B63 8B65 8B67 8B6D 8DAE 8E86 8E88 8E84 8F59 8F56 8F57 8F55 8F58 8F5A 908D 9143 9141 91B7 91B5 91B2 91B3 940B 9413 93FB 9420 940F 9414 93FE 9415 9410 9428 9419 940D 93F5 9400 93F7 9407 940E 9416 9412 93FA 9409 93F8 940A 93FF 93FC 940C 93F6 9411 9406 95DE 95E0 95DF 972E 972F 97B9 97BB 97FD 97FE 9860 9862 9863 985F 98C1 98C2 9950 994E 9959 994C 994B 9953 9A32 9A34 9A31 9A2C 9A2A 9A36 9A29 9A2E 9A38 9A2D 9AC7 9ACA 9AC6 9B10 9B12 9B11 9C0B 9C08 9BF7 9C05 9C12 9BF8 9C40 9C07 9C0E 9C06 9C17 9C14 9C09 9D9F 9D99 9DA4 9D9D 9D92 9D98 9D90 9D9B 9DA0 9D94 9D9C 9DAA 9D97 9DA1 9D9A 9DA2 9DA8 9D9E 9DA3 9DBF 9DA9 9D96 9DA6 9DA7 9E99 9E9B 9E9A 9EE5 9EE4 9EE7 9EE6 9F30 9F2E 9F5B 9F60 9F5E 9F5D 9F59 9F91 513A 5139 5298 5297 56C3 56BD 56BE 5B48 5B47 5DCB 5DCF 5EF1 61FD 651B 6B02 6AFC 6B03 6AF8 6B00 7043 7044 704A 7048 7049 7045 7046 721D 721A 7219 737E 7517 766A 77D0 792D 7931 792F 7C54 7C53 7CF2 7E8A 7E87 7E88 7E8B 7E86 7E8D 7F4D 7FBB 8030 81DD 8618 862A 8626 861F 8623 861C 8619 8627 862E 8621 8620 8629 861E 8625 8829 881D 881B 8820 8824 881C 882B 884A 896D 8969 896E 896B 89FA 8B79 8B78 8B45 8B7A 8B7B 8D10 8D14 8DAF 8E8E 8E8C 8F5E 8F5B 8F5D 9146 9144 9145 91B9 943F 943B 9436 9429 943D 943C 9430 9439 942A 9437 942C 9440 9431 95E5 95E4 95E3 9735 973A 97BF 97E1 9864 98C9 98C6 98C0 9958 9956 9A39 9A3D 9A46 9A44 9A42 9A41 9A3A 9A3F 9ACD 9B15 9B17 9B18 9B16 9B3A 9B52 9C2B 9C1D 9C1C 9C2C 9C23 9C28 9C29 9C24 9C21 9DB7 9DB6 9DBC 9DC1 9DC7 9DCA 9DCF 9DBE 9DC5 9DC3 9DBB 9DB5 9DCE 9DB9 9DBA 9DAC 9DC8 9DB1 9DAD 9DCC 9DB3 9DCD 9DB2 9E7A 9E9C 9EEB 9EEE 9EED 9F1B 9F18 9F1A 9F31 9F4E 9F65 9F64 9F92 4EB9 56C6 56C5 56CB 5971 5B4B 5B4C 5DD5 5DD1 5EF2 6521 6520 6526 6522 6B0B 6B08 6B09 6C0D 7055 7056 7057 7052 721E 721F 72A9 737F 74D8 74D5 74D9 74D7 766D 76AD 7935 79B4 7A70 7A71 7C57 7C5C 7C59 7C5B 7C5A 7CF4 7CF1 7E91 7F4F 7F87 81DE 826B 8634 8635 8633 862C 8632 8636 882C 8828 8826 882A 8825 8971 89BF 89BE 89FB 8B7E 8B84 8B82 8B86 8B85 8B7F 8D15 8E95 8E94 8E9A 8E92 8E90 8E96 8E97 8F60 8F62 9147 944C 9450 944A 944B 944F 9447 9445 9448 9449 9446 973F 97E3 986A 9869 98CB 9954 995B 9A4E 9A53 9A54 9A4C 9A4F 9A48 9A4A 9A49 9A52 9A50 9AD0 9B19 9B2B 9B3B 9B56 9B55 9C46 9C48 9C3F 9C44 9C39 9C33 9C41 9C3C 9C37 9C34 9C32 9C3D 9C36 9DDB 9DD2 9DDE 9DDA 9DCB 9DD0 9DDC 9DD1 9DDF 9DE9 9DD9 9DD8 9DD6 9DF5 9DD5 9DDD 9EB6 9EF0 9F35 9F33 9F32 9F42 9F6B 9F95 9FA2 513D 5299 58E8 58E7 5972 5B4D 5DD8 882F 5F4F 6201 6203 6204 6529 6525 6596 66EB 6B11 6B12 6B0F 6BCA 705B 705A 7222 7382 7381 7383 7670 77D4 7C67 7C66 7E95 826C 863A 8640 8639 863C 8631 863B 863E 8830 8832 882E 8833 8976 8974 8973 89FE 8B8C 8B8E 8B8B 8B88 8C45 8D19 8E98 8F64 8F63 91BC 9462 9455 945D 9457 945E 97C4 97C5 9800 9A56 9A59 9B1E 9B1F 9B20 9C52 9C58 9C50 9C4A 9C4D 9C4B 9C55 9C59 9C4C 9C4E 9DFB 9DF7 9DEF 9DE3 9DEB 9DF8 9DE4 9DF6 9DE1 9DEE 9DE6 9DF2 9DF0 9DE2 9DEC 9DF4 9DF3 9DE8 9DED 9EC2 9ED0 9EF2 9EF3 9F06 9F1C 9F38 9F37 9F36 9F43 9F4F 9F71 9F70 9F6E 9F6F 56D3 56CD 5B4E 5C6D 652D 66ED 66EE 6B13 705F 7061 705D 7060 7223 74DB 74E5 77D5 7938 79B7 79B6 7C6A 7E97 7F89 826D 8643 8838 8837 8835 884B 8B94 8B95 8E9E 8E9F 8EA0 8E9D 91BE 91BD 91C2 946B 9468 9469 96E5 9746 9743 9747 97C7 97E5 9A5E 9AD5 9B59 9C63 9C67 9C66 9C62 9C5E 9C60 9E02 9DFE 9E07 9E03 9E06 9E05 9E00 9E01 9E09 9DFF 9DFD 9E04 9EA0 9F1E 9F46 9F74 9F75 9F76 56D4 652E 65B8 6B18 6B19 6B17 6B1A 7062 7226 72AA 77D8 77D9 7939 7C69 7C6B 7CF6 7E9A 7E98 7E9B 7E99 81E0 81E1 8646 8647 8648 8979 897A 897C 897B 89FF 8B98 8B99 8EA5 8EA4 8EA3 946E 946D 946F 9471 9473 9749 9872 995F 9C68 9C6E 9C6D 9E0B 9E0D 9E10 9E0F 9E12 9E11 9EA1 9EF5 9F09 9F47 9F78 9F7B 9F7A 9F79 571E 7066 7C6F 883C 8DB2 8EA6 91C3 9474 9478 9476 9475 9A60 9C74 9C73 9C71 9C75 9E14 9E13 9EF6 9F0A 9FA4 7068 7065 7CF7 866A 883E 883D 883F 8B9E 8C9C 8EA9 8EC9 974B 9873 9874 98CC 9961 99AB 9A64 9A66 9A67 9B24 9E15 9E17 9F48 6207 6B1E 7227 864C 8EA8 9482 9480 9481 9A69 9A68 9B2E 9E19 7229 864B 8B9F 9483 9C79 9EB7 7675 9A6B 9C7A 9E1D 7069 706A 9EA4 9F7E 9F49 9F98 __END__ =head1 NAME Unicode::Collate::CJK::Big5 - weighting CJK Unified Ideographs for Unicode::Collate =head1 SYNOPSIS use Unicode::Collate; use Unicode::Collate::CJK::Big5; my $collator = Unicode::Collate->new( overrideCJK => \&Unicode::Collate::CJK::Big5::weightBig5 ); =head1 DESCRIPTION C<Unicode::Collate::CJK::Big5> provides C<weightBig5()>, that is adequate for C<overrideCJK> of C<Unicode::Collate> and makes tailoring of CJK Unified Ideographs in the order of CLDR's big5han ordering. =head1 SEE ALSO =over 4 =item CLDR - Unicode Common Locale Data Repository L<http://cldr.unicode.org/> =item Unicode Locale Data Markup Language (LDML) - UTS #35 L<http://www.unicode.org/reports/tr35/> =item L<Unicode::Collate> =item L<Unicode::Collate::Locale> =back =cut Unicode/Collate/keys.txt 0000644 00000147146 15037233320 0011244 0 ustar 00 #### This file is generated from allkeys-3.1.1.txt (unicode.org) #### by deleting many many entries. #### #### This table is intended ONLY for doing a test #### of Unicode/Collate.pm, a Perl module. #### #### The entries contained here ARE: #### 0000..007F # Basic Latin #### 0080..00FF # Latin-1 Supplement #### 0300..036F # Combining Diacritical Marks #### 1100..11FF # Hangul Jamo #### 2000..206F # General Punctuation #### 3040..309F # Hiragana #### 30A0..30FF # Katakana #### #### To fetch the original file, access to this: #### http://www.unicode.org/reports/tr10/allkeys.txt #### @version 3.1.1 0000 ; [.0000.0000.0000.0000] # [0000] NULL (in 6429) 0001 ; [.0000.0000.0000.0000] # [0001] START OF HEADING (in 6429) 0002 ; [.0000.0000.0000.0000] # [0002] START OF TEXT (in 6429) 0003 ; [.0000.0000.0000.0000] # [0003] END OF TEXT (in 6429) 0004 ; [.0000.0000.0000.0000] # [0004] END OF TRANSMISSION (in 6429) 0005 ; [.0000.0000.0000.0000] # [0005] ENQUIRY (in 6429) 0006 ; [.0000.0000.0000.0000] # [0006] ACKNOWLEDGE (in 6429) 0007 ; [.0000.0000.0000.0000] # [0007] BELL (in 6429) 0008 ; [.0000.0000.0000.0000] # [0008] BACKSPACE (in 6429) 000E ; [.0000.0000.0000.0000] # [000E] SHIFT OUT (in 6429) 000F ; [.0000.0000.0000.0000] # [000F] SHIFT IN (in 6429) 0010 ; [.0000.0000.0000.0000] # [0010] DATA LINK ESCAPE (in 6429) 0011 ; [.0000.0000.0000.0000] # [0011] DEVICE CONTROL ONE (in 6429) 0012 ; [.0000.0000.0000.0000] # [0012] DEVICE CONTROL TWO (in 6429) 0013 ; [.0000.0000.0000.0000] # [0013] DEVICE CONTROL THREE (in 6429) 0014 ; [.0000.0000.0000.0000] # [0014] DEVICE CONTROL FOUR (in 6429) 0015 ; [.0000.0000.0000.0000] # [0015] NEGATIVE ACKNOWLEDGE (in 6429) 0016 ; [.0000.0000.0000.0000] # [0016] SYNCHRONOUS IDLE (in 6429) 0017 ; [.0000.0000.0000.0000] # [0017] END OF TRANSMISSION BLOCK (in 6429) 0018 ; [.0000.0000.0000.0000] # [0018] CANCEL (in 6429) 0019 ; [.0000.0000.0000.0000] # [0019] END OF MEDIUM (in 6429) 001A ; [.0000.0000.0000.0000] # [001A] SUBSTITUTE (in 6429) 001B ; [.0000.0000.0000.0000] # [001B] ESCAPE (in 6429) 001C ; [.0000.0000.0000.0000] # [001C] FILE SEPARATOR (in 6429) 001D ; [.0000.0000.0000.0000] # [001D] GROUP SEPARATOR (in 6429) 001E ; [.0000.0000.0000.0000] # [001E] RECORD SEPARATOR (in 6429) 001F ; [.0000.0000.0000.0000] # [001F] UNIT SEPARATOR (in 6429) 007F ; [.0000.0000.0000.0000] # [007F] DELETE (in 6429) 0080 ; [.0000.0000.0000.0000] # [0080] <control> 0081 ; [.0000.0000.0000.0000] # [0081] <control> 0082 ; [.0000.0000.0000.0000] # [0082] BREAK PERMITTED HERE (in 6429) 0083 ; [.0000.0000.0000.0000] # [0083] NO BREAK HERE (in 6429) 0084 ; [.0000.0000.0000.0000] # [0084] <control> 0086 ; [.0000.0000.0000.0000] # [0086] START OF SELECTED AREA (in 6429) 0087 ; [.0000.0000.0000.0000] # [0087] END OF SELECTED AREA (in 6429) 0088 ; [.0000.0000.0000.0000] # [0088] CHARACTER TABULATION SET (in 6429) 0089 ; [.0000.0000.0000.0000] # [0089] CHARACTER TABULATION WITH JUSTIFICATION (in 6429) 008A ; [.0000.0000.0000.0000] # [008A] LINE TABULATION SET (in 6429) 008B ; [.0000.0000.0000.0000] # [008B] PARTIAL LINE FORWARD (in 6429) 008C ; [.0000.0000.0000.0000] # [008C] PARTIAL LINE BACKWARD (in 6429) 008D ; [.0000.0000.0000.0000] # [008D] PARTIAL LINE FEED (in 6429) 008E ; [.0000.0000.0000.0000] # [008E] SINGLE SHIFT TWO (in 6429) 008F ; [.0000.0000.0000.0000] # [008F] SINGLE SHIFT THREE (in 6429) 0090 ; [.0000.0000.0000.0000] # [0090] DEVICE CONTROL STRING (in 6429) 0091 ; [.0000.0000.0000.0000] # [0091] PRIVATE USE ONE (in 6429) 0092 ; [.0000.0000.0000.0000] # [0092] PRIVATE USE TWO (in 6429) 0093 ; [.0000.0000.0000.0000] # [0093] SET TRANSMIT STATE (in 6429) 0094 ; [.0000.0000.0000.0000] # [0094] CANCEL CHARACTER (in 6429) 0095 ; [.0000.0000.0000.0000] # [0095] MESSAGE WAITING (in 6429) 0096 ; [.0000.0000.0000.0000] # [0096] START OF GUARDED AREA (in 6429) 0097 ; [.0000.0000.0000.0000] # [0097] END OF GUARDED AREA (in 6429) 0098 ; [.0000.0000.0000.0000] # [0098] START OF STRING (in 6429) 0099 ; [.0000.0000.0000.0000] # [0099] <control> 009A ; [.0000.0000.0000.0000] # [009A] SINGLE CHARACTER INTRODUCER (in 6429) 009B ; [.0000.0000.0000.0000] # [009B] CONTROL SEQUENCE INTRODUCER (in 6429) 009C ; [.0000.0000.0000.0000] # [009C] STRING TERMINATOR (in 6429) 009D ; [.0000.0000.0000.0000] # [009D] OPERATING SYSTEM COMMAND (in 6429) 009E ; [.0000.0000.0000.0000] # [009E] PRIVACY MESSAGE (in 6429) 009F ; [.0000.0000.0000.0000] # [009F] APPLICATION PROGRAM COMMAND (in 6429) 200B ; [.0000.0000.0000.0000] # [200B] ZERO WIDTH SPACE 200C ; [.0000.0000.0000.0000] # [200C] ZERO WIDTH NON-JOINER 200D ; [.0000.0000.0000.0000] # [200D] ZERO WIDTH JOINER 200E ; [.0000.0000.0000.0000] # [200E] LEFT-TO-RIGHT MARK 200F ; [.0000.0000.0000.0000] # [200F] RIGHT-TO-LEFT MARK 202A ; [.0000.0000.0000.0000] # [202A] LEFT-TO-RIGHT EMBEDDING 202B ; [.0000.0000.0000.0000] # [202B] RIGHT-TO-LEFT EMBEDDING 202C ; [.0000.0000.0000.0000] # [202C] POP DIRECTIONAL FORMATTING 202D ; [.0000.0000.0000.0000] # [202D] LEFT-TO-RIGHT OVERRIDE 202E ; [.0000.0000.0000.0000] # [202E] RIGHT-TO-LEFT OVERRIDE 206A ; [.0000.0000.0000.0000] # [206A] INHIBIT SYMMETRIC SWAPPING 206B ; [.0000.0000.0000.0000] # [206B] ACTIVATE SYMMETRIC SWAPPING 206C ; [.0000.0000.0000.0000] # [206C] INHIBIT ARABIC FORM SHAPING 206D ; [.0000.0000.0000.0000] # [206D] ACTIVATE ARABIC FORM SHAPING 206E ; [.0000.0000.0000.0000] # [206E] NATIONAL DIGIT SHAPES 206F ; [.0000.0000.0000.0000] # [206F] NOMINAL DIGIT SHAPES 0009 ; [*0201.0020.0002.0009] # HORIZONTAL TABULATION (in 6429) 000A ; [*0202.0020.0002.000A] # LINE FEED (in 6429) 000B ; [*0203.0020.0002.000B] # VERTICAL TABULATION (in 6429) 000C ; [*0204.0020.0002.000C] # FORM FEED (in 6429) 000D ; [*0205.0020.0002.000D] # CARRIAGE RETURN (in 6429) 0020 ; [*0209.0020.0002.0020] # SPACE 0021 ; [*024B.0020.0002.0021] # EXCLAMATION MARK 0022 ; [*0270.0020.0002.0022] # QUOTATION MARK 0023 ; [*02A9.0020.0002.0023] # NUMBER SIGN 0025 ; [*02AA.0020.0002.0025] # PERCENT SIGN 0026 ; [*02A7.0020.0002.0026] # AMPERSAND 0027 ; [*0269.0020.0002.0027] # APOSTROPHE 0028 ; [*027A.0020.0002.0028] # LEFT PARENTHESIS 0029 ; [*027B.0020.0002.0029] # RIGHT PARENTHESIS 002A ; [*02A2.0020.0002.002A] # ASTERISK 002B ; [*039F.0020.0002.002B] # PLUS SIGN 002C ; [*022D.0020.0002.002C] # COMMA 002D ; [*0221.0020.0002.002D] # HYPHEN-MINUS 002E ; [*0255.0020.0002.002E] # FULL STOP 002F ; [*02A4.0020.0002.002F] # SOLIDUS 003A ; [*0237.0020.0002.003A] # COLON 003B ; [*0235.0020.0002.003B] # SEMICOLON 003C ; [*03A3.0020.0002.003C] # LESS-THAN SIGN 003D ; [*03A4.0020.0002.003D] # EQUALS SIGN 003E ; [*03A5.0020.0002.003E] # GREATER-THAN SIGN 003F ; [*024E.0020.0002.003F] # QUESTION MARK 0040 ; [*02A1.0020.0002.0040] # COMMERCIAL AT 005B ; [*027C.0020.0002.005B] # LEFT SQUARE BRACKET 005C ; [*02A6.0020.0002.005C] # REVERSE SOLIDUS 005D ; [*027D.0020.0002.005D] # RIGHT SQUARE BRACKET 005E ; [*020F.0020.0002.005E] # CIRCUMFLEX ACCENT 005F ; [*021B.0020.0002.005F] # LOW LINE 0060 ; [*020C.0020.0002.0060] # GRAVE ACCENT 007B ; [*027E.0020.0002.007B] # LEFT CURLY BRACKET 007C ; [*03A7.0020.0002.007C] # VERTICAL LINE 007D ; [*027F.0020.0002.007D] # RIGHT CURLY BRACKET 007E ; [*03AA.0020.0002.007E] # TILDE 0085 ; [*0206.0020.0002.0085] # NEXT LINE (in 6429) 00A0 ; [*0209.0020.001B.00A0] # NO-BREAK SPACE; QQK 00A1 ; [*024C.0020.0002.00A1] # INVERTED EXCLAMATION MARK 00A6 ; [*03A8.0020.0002.00A6] # BROKEN BAR 00A7 ; [*029C.0020.0002.00A7] # SECTION SIGN 00A8 ; [*0214.0020.0002.00A8] # DIAERESIS 00A9 ; [*029F.0020.0002.00A9] # COPYRIGHT SIGN 00AB ; [*0278.0020.0002.00AB] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 00AC ; [*03A6.0020.0002.00AC] # NOT SIGN 00AD ; [*0220.0020.0002.00AD] # SOFT HYPHEN 00AE ; [*02A0.0020.0002.00AE] # REGISTERED SIGN 00AF ; [*0210.0020.0002.00AF] # MACRON 00B0 ; [*030A.0020.0002.00B0] # DEGREE SIGN 00B1 ; [*03A0.0020.0002.00B1] # PLUS-MINUS SIGN 00B4 ; [*020D.0020.0002.00B4] # ACUTE ACCENT 00B6 ; [*029D.0020.0002.00B6] # PILCROW SIGN 00B7 ; [*025F.0020.0002.00B7] # MIDDLE DOT 00B8 ; [*0219.0020.0002.00B8] # CEDILLA 00BB ; [*0279.0020.0002.00BB] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 00BF ; [*024F.0020.0002.00BF] # INVERTED QUESTION MARK 00D7 ; [*03A2.0020.0002.00D7] # MULTIPLICATION SIGN 00F7 ; [*03A1.0020.0002.00F7] # DIVISION SIGN 2000 ; [*0209.0020.0004.2000] # EN QUAD; QQK 2001 ; [*0209.0020.0004.2001] # EM QUAD; QQK 2002 ; [*0209.0020.0004.2002] # EN SPACE; QQK 2003 ; [*0209.0020.0004.2003] # EM SPACE; QQK 2004 ; [*0209.0020.0004.2004] # THREE-PER-EM SPACE; QQK 2005 ; [*0209.0020.0004.2005] # FOUR-PER-EM SPACE; QQK 2006 ; [*0209.0020.0004.2006] # SIX-PER-EM SPACE; QQK 2007 ; [*0209.0020.001B.2007] # FIGURE SPACE; QQK 2008 ; [*0209.0020.0004.2008] # PUNCTUATION SPACE; QQK 2009 ; [*0209.0020.0004.2009] # THIN SPACE; QQK 200A ; [*0209.0020.0004.200A] # HAIR SPACE; QQK 2010 ; [*0225.0020.0002.2010] # HYPHEN 2011 ; [*0225.0020.001B.2011] # NON-BREAKING HYPHEN; QQK 2012 ; [*0226.0020.0002.2012] # FIGURE DASH 2013 ; [*0227.0020.0002.2013] # EN DASH 2014 ; [*0228.0020.0002.2014] # EM DASH 2015 ; [*0229.0020.0002.2015] # HORIZONTAL BAR 2016 ; [*03A9.0020.0002.2016] # DOUBLE VERTICAL LINE 2017 ; [*021C.0020.0002.2017] # DOUBLE LOW LINE 2018 ; [*026A.0020.0002.2018] # LEFT SINGLE QUOTATION MARK 2019 ; [*026B.0020.0002.2019] # RIGHT SINGLE QUOTATION MARK 201A ; [*026C.0020.0002.201A] # SINGLE LOW-9 QUOTATION MARK 201B ; [*026D.0020.0002.201B] # SINGLE HIGH-REVERSED-9 QUOTATION MARK 201C ; [*0271.0020.0002.201C] # LEFT DOUBLE QUOTATION MARK 201D ; [*0272.0020.0002.201D] # RIGHT DOUBLE QUOTATION MARK 201E ; [*0273.0020.0002.201E] # DOUBLE LOW-9 QUOTATION MARK 201F ; [*0274.0020.0002.201F] # DOUBLE HIGH-REVERSED-9 QUOTATION MARK 2020 ; [*02AE.0020.0002.2020] # DAGGER 2021 ; [*02AF.0020.0002.2021] # DOUBLE DAGGER 2022 ; [*02B0.0020.0002.2022] # BULLET 2023 ; [*02B1.0020.0002.2023] # TRIANGULAR BULLET 2024 ; [*0255.0020.0004.2024] # ONE DOT LEADER; QQK 2025 ; [*0255.0020.0004.2025][*0255.0020.0004.2025] # TWO DOT LEADER; QQKN 2026 ; [*0255.0020.0004.2026][*0255.0020.0004.2026][*0255.0020.001F.2026] # HORIZONTAL ELLIPSIS; QQKN 2027 ; [*02B2.0020.0002.2027] # HYPHENATION POINT 2028 ; [*0207.0020.0002.2028] # LINE SEPARATOR 2029 ; [*0208.0020.0002.2029] # PARAGRAPH SEPARATOR 202F ; [*0209.0020.001B.202F] # NARROW NO-BREAK SPACE; QQK 2030 ; [*02AC.0020.0002.2030] # PER MILLE SIGN 2031 ; [*02AD.0020.0002.2031] # PER TEN THOUSAND SIGN 2032 ; [*02B6.0020.0002.2032] # PRIME 2033 ; [*02B6.0020.0004.2033][*02B6.0020.0004.2033] # DOUBLE PRIME; QQKN 2034 ; [*02B6.0020.0004.2034][*02B6.0020.0004.2034][*02B6.0020.001F.2034] # TRIPLE PRIME; QQKN 2035 ; [*02B7.0020.0002.2035] # REVERSED PRIME 2036 ; [*02B7.0020.0004.2036][*02B7.0020.0004.2036] # REVERSED DOUBLE PRIME; QQKN 2037 ; [*02B7.0020.0004.2037][*02B7.0020.0004.2037][*02B7.0020.001F.2037] # REVERSED TRIPLE PRIME; QQKN 2038 ; [*02B9.0020.0002.2038] # CARET 2039 ; [*026E.0020.0002.2039] # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 203A ; [*026F.0020.0002.203A] # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 203B ; [*02BA.0020.0002.203B] # REFERENCE MARK 203C ; [*024B.0020.0004.203C][*024B.0020.0004.203C] # DOUBLE EXCLAMATION MARK; QQKN 203D ; [*0254.0020.0002.203D] # INTERROBANG 203E ; [*0211.0020.0002.203E] # OVERLINE 203F ; [*02BB.0020.0002.203F] # UNDERTIE 2040 ; [*02BC.0020.0002.2040] # CHARACTER TIE 2041 ; [*02BD.0020.0002.2041] # CARET INSERTION POINT 2042 ; [*02BE.0020.0002.2042] # ASTERISM 2043 ; [*02B3.0020.0002.2043] # HYPHEN BULLET 2044 ; [*02A5.0020.0002.2044] # FRACTION SLASH 2045 ; [*0286.0020.0002.2045] # LEFT SQUARE BRACKET WITH QUILL 2046 ; [*0287.0020.0002.2046] # RIGHT SQUARE BRACKET WITH QUILL 2048 ; [*024E.0020.0004.2048][*024B.0020.0004.2048] # QUESTION EXCLAMATION MARK; QQKN 2049 ; [*024B.0020.0004.2049][*024E.0020.0004.2049] # EXCLAMATION QUESTION MARK; QQKN 204A ; [*02A8.0020.0002.204A] # TIRONIAN SIGN ET 204B ; [*029E.0020.0002.204B] # REVERSED PILCROW SIGN 204C ; [*02B4.0020.0002.204C] # BLACK LEFTWARDS BULLET 204D ; [*02B5.0020.0002.204D] # BLACK RIGHTWARDS BULLET 309B ; [*021E.0020.0002.309B] # KATAKANA-HIRAGANA VOICED SOUND MARK 309C ; [*021F.0020.0002.309C] # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 30FB ; [*022C.0020.0002.30FB] # KATAKANA MIDDLE DOT 0332 ; [.0000.0021.0002.0332] # COMBINING LOW LINE 0313 ; [.0000.0022.0002.0313] # COMBINING COMMA ABOVE 0343 ; [.0000.0022.0002.0343] # COMBINING GREEK KORONIS; QQC 0314 ; [.0000.002A.0002.0314] # COMBINING REVERSED COMMA ABOVE 0301 ; [.0000.0032.0002.0301] # COMBINING ACUTE ACCENT 0341 ; [.0000.0032.0002.0341] # COMBINING ACUTE TONE MARK; QQC 0300 ; [.0000.0035.0002.0300] # COMBINING GRAVE ACCENT 0340 ; [.0000.0035.0002.0340] # COMBINING GRAVE TONE MARK; QQC 0306 ; [.0000.0037.0002.0306] # COMBINING BREVE 0302 ; [.0000.003C.0002.0302] # COMBINING CIRCUMFLEX ACCENT 030C ; [.0000.0041.0002.030C] # COMBINING CARON 030A ; [.0000.0043.0002.030A] # COMBINING RING ABOVE 0342 ; [.0000.0045.0002.0342] # COMBINING GREEK PERISPOMENI 0308 ; [.0000.0047.0002.0308] # COMBINING DIAERESIS 0344 ; [.0000.0047.0002.0308][.0000.0032.0002.0301] # COMBINING GREEK DIALYTIKA TONOS; QQCM 030B ; [.0000.004D.0002.030B] # COMBINING DOUBLE ACUTE ACCENT 0303 ; [.0000.004E.0002.0303] # COMBINING TILDE 0307 ; [.0000.0052.0002.0307] # COMBINING DOT ABOVE 0338 ; [.0000.0054.0002.0338] # COMBINING LONG SOLIDUS OVERLAY 0327 ; [.0000.0055.0002.0327] # COMBINING CEDILLA 0328 ; [.0000.0058.0002.0328] # COMBINING OGONEK 0304 ; [.0000.005A.0002.0304] # COMBINING MACRON 0305 ; [.0000.005E.0002.0305] # COMBINING OVERLINE 0309 ; [.0000.005F.0002.0309] # COMBINING HOOK ABOVE 030D ; [.0000.0060.0002.030D] # COMBINING VERTICAL LINE ABOVE 030E ; [.0000.0061.0002.030E] # COMBINING DOUBLE VERTICAL LINE ABOVE 030F ; [.0000.0062.0002.030F] # COMBINING DOUBLE GRAVE ACCENT 0310 ; [.0000.0063.0002.0310] # COMBINING CANDRABINDU 0311 ; [.0000.0064.0002.0311] # COMBINING INVERTED BREVE 0312 ; [.0000.0065.0002.0312] # COMBINING TURNED COMMA ABOVE 0315 ; [.0000.0066.0002.0315] # COMBINING COMMA ABOVE RIGHT 0316 ; [.0000.0067.0002.0316] # COMBINING GRAVE ACCENT BELOW 0317 ; [.0000.0068.0002.0317] # COMBINING ACUTE ACCENT BELOW 0318 ; [.0000.0069.0002.0318] # COMBINING LEFT TACK BELOW 0319 ; [.0000.006A.0002.0319] # COMBINING RIGHT TACK BELOW 031A ; [.0000.006B.0002.031A] # COMBINING LEFT ANGLE ABOVE 031B ; [.0000.006C.0002.031B] # COMBINING HORN 031C ; [.0000.0072.0002.031C] # COMBINING LEFT HALF RING BELOW 031D ; [.0000.0073.0002.031D] # COMBINING UP TACK BELOW 031E ; [.0000.0074.0002.031E] # COMBINING DOWN TACK BELOW 031F ; [.0000.0075.0002.031F] # COMBINING PLUS SIGN BELOW 0320 ; [.0000.0076.0002.0320] # COMBINING MINUS SIGN BELOW 0321 ; [.0000.0077.0002.0321] # COMBINING PALATALIZED HOOK BELOW 0322 ; [.0000.0078.0002.0322] # COMBINING RETROFLEX HOOK BELOW 0323 ; [.0000.0079.0002.0323] # COMBINING DOT BELOW 0324 ; [.0000.007E.0002.0324] # COMBINING DIAERESIS BELOW 0325 ; [.0000.007F.0002.0325] # COMBINING RING BELOW 0326 ; [.0000.0080.0002.0326] # COMBINING COMMA BELOW 0329 ; [.0000.0081.0002.0329] # COMBINING VERTICAL LINE BELOW 032A ; [.0000.0082.0002.032A] # COMBINING BRIDGE BELOW 032B ; [.0000.0083.0002.032B] # COMBINING INVERTED DOUBLE ARCH BELOW 032C ; [.0000.0084.0002.032C] # COMBINING CARON BELOW 032D ; [.0000.0085.0002.032D] # COMBINING CIRCUMFLEX ACCENT BELOW 032E ; [.0000.0086.0002.032E] # COMBINING BREVE BELOW 032F ; [.0000.0087.0002.032F] # COMBINING INVERTED BREVE BELOW 0330 ; [.0000.0088.0002.0330] # COMBINING TILDE BELOW 0331 ; [.0000.0089.0002.0331] # COMBINING MACRON BELOW 0333 ; [.0000.008A.0002.0333] # COMBINING DOUBLE LOW LINE 0334 ; [.0000.008B.0002.0334] # COMBINING TILDE OVERLAY 0335 ; [.0000.008C.0002.0335] # COMBINING SHORT STROKE OVERLAY 0336 ; [.0000.008D.0002.0336] # COMBINING LONG STROKE OVERLAY 0337 ; [.0000.008E.0002.0337] # COMBINING SHORT SOLIDUS OVERLAY 0339 ; [.0000.008F.0002.0339] # COMBINING RIGHT HALF RING BELOW 033A ; [.0000.0090.0002.033A] # COMBINING INVERTED BRIDGE BELOW 033B ; [.0000.0091.0002.033B] # COMBINING SQUARE BELOW 033C ; [.0000.0092.0002.033C] # COMBINING SEAGULL BELOW 033D ; [.0000.0093.0002.033D] # COMBINING X ABOVE 033E ; [.0000.0094.0002.033E] # COMBINING VERTICAL TILDE 033F ; [.0000.0095.0002.033F] # COMBINING DOUBLE OVERLINE 0345 ; [.0000.0096.0002.0345] # COMBINING GREEK YPOGEGRAMMENI 0346 ; [.0000.0097.0002.0346] # COMBINING BRIDGE ABOVE 0347 ; [.0000.0098.0002.0347] # COMBINING EQUALS SIGN BELOW 0348 ; [.0000.0099.0002.0348] # COMBINING DOUBLE VERTICAL LINE BELOW 0349 ; [.0000.009A.0002.0349] # COMBINING LEFT ANGLE BELOW 034A ; [.0000.009B.0002.034A] # COMBINING NOT TILDE ABOVE 034B ; [.0000.009C.0002.034B] # COMBINING HOMOTHETIC ABOVE 034C ; [.0000.009D.0002.034C] # COMBINING ALMOST EQUAL TO ABOVE 034D ; [.0000.009E.0002.034D] # COMBINING LEFT RIGHT ARROW BELOW 034E ; [.0000.009F.0002.034E] # COMBINING UPWARDS ARROW BELOW 0360 ; [.0000.00A0.0002.0360] # COMBINING DOUBLE TILDE 0361 ; [.0000.00A1.0002.0361] # COMBINING DOUBLE INVERTED BREVE 0362 ; [.0000.00A2.0002.0362] # COMBINING DOUBLE RIGHTWARDS ARROW BELOW 3099 ; [.0000.013D.0002.3099] # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK 309A ; [.0000.013E.0002.309A] # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 309D ; [.09DB.0020.0002.309D] # HIRAGANA ITERATION MARK 309E ; [.09DB.0020.0002.309D][.0000.013D.0002.3099] # HIRAGANA VOICED ITERATION MARK; QQCM 30FC ; [.09DC.0020.0002.30FC] # KATAKANA-HIRAGANA PROLONGED SOUND MARK 30FD ; [.09DD.0020.0002.30FD] # KATAKANA ITERATION MARK 30FE ; [.09DD.0020.0002.30FD][.0000.013D.0002.3099] # KATAKANA VOICED ITERATION MARK; QQCM 00A4 ; [.09DE.0020.0002.00A4] # CURRENCY SIGN 00A2 ; [.09DF.0020.0002.00A2] # CENT SIGN 0024 ; [.09E0.0020.0002.0024] # DOLLAR SIGN 00A3 ; [.09E1.0020.0002.00A3] # POUND SIGN 00A5 ; [.09E2.0020.0002.00A5] # YEN SIGN 0030 ; [.0A0B.0020.0002.0030] # DIGIT ZERO 0031 ; [.0A0C.0020.0002.0031] # DIGIT ONE 00B9 ; [.0A0C.0020.0014.00B9] # SUPERSCRIPT ONE; QQK 00BD ; [.0A0C.0020.001E.00BD][*02A5.0020.001E.00BD][.0A0D.0020.001F.00BD] # VULGAR FRACTION ONE HALF; QQKN 00BC ; [.0A0C.0020.001E.00BC][*02A5.0020.001E.00BC][.0A0F.0020.001F.00BC] # VULGAR FRACTION ONE QUARTER; QQKN 0032 ; [.0A0D.0020.0002.0032] # DIGIT TWO 00B2 ; [.0A0D.0020.0014.00B2] # SUPERSCRIPT TWO; QQK 0033 ; [.0A0E.0020.0002.0033] # DIGIT THREE 00B3 ; [.0A0E.0020.0014.00B3] # SUPERSCRIPT THREE; QQK 00BE ; [.0A0E.0020.001E.00BE][*02A5.0020.001E.00BE][.0A0F.0020.001F.00BE] # VULGAR FRACTION THREE QUARTERS; QQKN 0034 ; [.0A0F.0020.0002.0034] # DIGIT FOUR 0035 ; [.0A10.0020.0002.0035] # DIGIT FIVE 0036 ; [.0A11.0020.0002.0036] # DIGIT SIX 0037 ; [.0A12.0020.0002.0037] # DIGIT SEVEN 0038 ; [.0A13.0020.0002.0038] # DIGIT EIGHT 0039 ; [.0A14.0020.0002.0039] # DIGIT NINE 0061 ; [.0A15.0020.0002.0061] # LATIN SMALL LETTER A 0041 ; [.0A15.0020.0008.0041] # LATIN CAPITAL LETTER A 00AA ; [.0A15.0020.0014.00AA] # FEMININE ORDINAL INDICATOR; QQK 00E1 ; [.0A15.0020.0002.0061][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH ACUTE; QQCM 00C1 ; [.0A15.0020.0008.0041][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH ACUTE; QQCM 00E0 ; [.0A15.0020.0002.0061][.0000.0035.0002.0300] # LATIN SMALL LETTER A WITH GRAVE; QQCM 00C0 ; [.0A15.0020.0008.0041][.0000.0035.0002.0300] # LATIN CAPITAL LETTER A WITH GRAVE; QQCM 00E2 ; [.0A15.0020.0002.0061][.0000.003C.0002.0302] # LATIN SMALL LETTER A WITH CIRCUMFLEX; QQCM 00C2 ; [.0A15.0020.0008.0041][.0000.003C.0002.0302] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX; QQCM 00E5 ; [.0A15.0020.0002.0061][.0000.0043.0002.030A] # LATIN SMALL LETTER A WITH RING ABOVE; QQCM 00C5 ; [.0A15.0020.0008.0041][.0000.0043.0002.030A] # LATIN CAPITAL LETTER A WITH RING ABOVE; QQCM 00E4 ; [.0A15.0020.0002.0061][.0000.0047.0002.0308] # LATIN SMALL LETTER A WITH DIAERESIS; QQCM 00C4 ; [.0A15.0020.0008.0041][.0000.0047.0002.0308] # LATIN CAPITAL LETTER A WITH DIAERESIS; QQCM 00E3 ; [.0A15.0020.0002.0061][.0000.004E.0002.0303] # LATIN SMALL LETTER A WITH TILDE; QQCM 00C3 ; [.0A15.0020.0008.0041][.0000.004E.0002.0303] # LATIN CAPITAL LETTER A WITH TILDE; QQCM 00E6 ; [.0A19.0020.0002.00E6] # LATIN SMALL LETTER AE 00C6 ; [.0A19.0020.0008.00C6] # LATIN CAPITAL LETTER AE 0062 ; [.0A29.0020.0002.0062] # LATIN SMALL LETTER B 0042 ; [.0A29.0020.0008.0042] # LATIN CAPITAL LETTER B 0063 ; [.0A3D.0020.0002.0063] # LATIN SMALL LETTER C 0043 ; [.0A3D.0020.0008.0043] # LATIN CAPITAL LETTER C 00E7 ; [.0A3D.0020.0002.0063][.0000.0055.0002.0327] # LATIN SMALL LETTER C WITH CEDILLA; QQCM 00C7 ; [.0A3D.0020.0008.0043][.0000.0055.0002.0327] # LATIN CAPITAL LETTER C WITH CEDILLA; QQCM 0064 ; [.0A49.0020.0002.0064] # LATIN SMALL LETTER D 0044 ; [.0A49.0020.0008.0044] # LATIN CAPITAL LETTER D 00F0 ; [.0A5D.0020.0002.00F0] # LATIN SMALL LETTER ETH 00D0 ; [.0A5D.0020.0008.00D0] # LATIN CAPITAL LETTER ETH 0065 ; [.0A65.0020.0002.0065] # LATIN SMALL LETTER E 0045 ; [.0A65.0020.0008.0045] # LATIN CAPITAL LETTER E 00E9 ; [.0A65.0020.0002.0065][.0000.0032.0002.0301] # LATIN SMALL LETTER E WITH ACUTE; QQCM 00C9 ; [.0A65.0020.0008.0045][.0000.0032.0002.0301] # LATIN CAPITAL LETTER E WITH ACUTE; QQCM 00E8 ; [.0A65.0020.0002.0065][.0000.0035.0002.0300] # LATIN SMALL LETTER E WITH GRAVE; QQCM 00C8 ; [.0A65.0020.0008.0045][.0000.0035.0002.0300] # LATIN CAPITAL LETTER E WITH GRAVE; QQCM 00EA ; [.0A65.0020.0002.0065][.0000.003C.0002.0302] # LATIN SMALL LETTER E WITH CIRCUMFLEX; QQCM 00CA ; [.0A65.0020.0008.0045][.0000.003C.0002.0302] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX; QQCM 00EB ; [.0A65.0020.0002.0065][.0000.0047.0002.0308] # LATIN SMALL LETTER E WITH DIAERESIS; QQCM 00CB ; [.0A65.0020.0008.0045][.0000.0047.0002.0308] # LATIN CAPITAL LETTER E WITH DIAERESIS; QQCM 0066 ; [.0A91.0020.0002.0066] # LATIN SMALL LETTER F 0046 ; [.0A91.0020.0008.0046] # LATIN CAPITAL LETTER F 0067 ; [.0A99.0020.0002.0067] # LATIN SMALL LETTER G 0047 ; [.0A99.0020.0008.0047] # LATIN CAPITAL LETTER G 0068 ; [.0AB9.0020.0002.0068] # LATIN SMALL LETTER H 0048 ; [.0AB9.0020.0008.0048] # LATIN CAPITAL LETTER H 0069 ; [.0AD3.0020.0002.0069] # LATIN SMALL LETTER I 0049 ; [.0AD3.0020.0008.0049] # LATIN CAPITAL LETTER I 00ED ; [.0AD3.0020.0002.0069][.0000.0032.0002.0301] # LATIN SMALL LETTER I WITH ACUTE; QQCM 00CD ; [.0AD3.0020.0008.0049][.0000.0032.0002.0301] # LATIN CAPITAL LETTER I WITH ACUTE; QQCM 00EC ; [.0AD3.0020.0002.0069][.0000.0035.0002.0300] # LATIN SMALL LETTER I WITH GRAVE; QQCM 00CC ; [.0AD3.0020.0008.0049][.0000.0035.0002.0300] # LATIN CAPITAL LETTER I WITH GRAVE; QQCM 00EE ; [.0AD3.0020.0002.0069][.0000.003C.0002.0302] # LATIN SMALL LETTER I WITH CIRCUMFLEX; QQCM 00CE ; [.0AD3.0020.0008.0049][.0000.003C.0002.0302] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX; QQCM 00EF ; [.0AD3.0020.0002.0069][.0000.0047.0002.0308] # LATIN SMALL LETTER I WITH DIAERESIS; QQCM 00CF ; [.0AD3.0020.0008.0049][.0000.0047.0002.0308] # LATIN CAPITAL LETTER I WITH DIAERESIS; QQCM 006A ; [.0AE7.0020.0002.006A] # LATIN SMALL LETTER J 004A ; [.0AE7.0020.0008.004A] # LATIN CAPITAL LETTER J 006B ; [.0AF7.0020.0002.006B] # LATIN SMALL LETTER K 004B ; [.0AF7.0020.0008.004B] # LATIN CAPITAL LETTER K 006C ; [.0B03.0020.0002.006C] # LATIN SMALL LETTER L 004C ; [.0B03.0020.0008.004C] # LATIN CAPITAL LETTER L 006D ; [.0B2B.0020.0002.006D] # LATIN SMALL LETTER M 004D ; [.0B2B.0020.0008.004D] # LATIN CAPITAL LETTER M 006E ; [.0B33.0020.0002.006E] # LATIN SMALL LETTER N 004E ; [.0B33.0020.0008.004E] # LATIN CAPITAL LETTER N 00F1 ; [.0B33.0020.0002.006E][.0000.004E.0002.0303] # LATIN SMALL LETTER N WITH TILDE; QQCM 00D1 ; [.0B33.0020.0008.004E][.0000.004E.0002.0303] # LATIN CAPITAL LETTER N WITH TILDE; QQCM 006F ; [.0B4B.0020.0002.006F] # LATIN SMALL LETTER O 004F ; [.0B4B.0020.0008.004F] # LATIN CAPITAL LETTER O 00BA ; [.0B4B.0020.0014.00BA] # MASCULINE ORDINAL INDICATOR; QQK 00F3 ; [.0B4B.0020.0002.006F][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH ACUTE; QQCM 00D3 ; [.0B4B.0020.0008.004F][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH ACUTE; QQCM 00F2 ; [.0B4B.0020.0002.006F][.0000.0035.0002.0300] # LATIN SMALL LETTER O WITH GRAVE; QQCM 00D2 ; [.0B4B.0020.0008.004F][.0000.0035.0002.0300] # LATIN CAPITAL LETTER O WITH GRAVE; QQCM 00F4 ; [.0B4B.0020.0002.006F][.0000.003C.0002.0302] # LATIN SMALL LETTER O WITH CIRCUMFLEX; QQCM 00D4 ; [.0B4B.0020.0008.004F][.0000.003C.0002.0302] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX; QQCM 00F6 ; [.0B4B.0020.0002.006F][.0000.0047.0002.0308] # LATIN SMALL LETTER O WITH DIAERESIS; QQCM 00D6 ; [.0B4B.0020.0008.004F][.0000.0047.0002.0308] # LATIN CAPITAL LETTER O WITH DIAERESIS; QQCM 00F5 ; [.0B4B.0020.0002.006F][.0000.004E.0002.0303] # LATIN SMALL LETTER O WITH TILDE; QQCM 00D5 ; [.0B4B.0020.0008.004F][.0000.004E.0002.0303] # LATIN CAPITAL LETTER O WITH TILDE; QQCM 00F8 ; [.0B53.0020.0002.00F8] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.0B53.0020.0008.00D8] # LATIN CAPITAL LETTER O WITH STROKE 0070 ; [.0B67.0020.0002.0070] # LATIN SMALL LETTER P 0050 ; [.0B67.0020.0008.0050] # LATIN CAPITAL LETTER P 0071 ; [.0B73.0020.0002.0071] # LATIN SMALL LETTER Q 0051 ; [.0B73.0020.0008.0051] # LATIN CAPITAL LETTER Q 0072 ; [.0B7F.0020.0002.0072] # LATIN SMALL LETTER R 0052 ; [.0B7F.0020.0008.0052] # LATIN CAPITAL LETTER R 0073 ; [.0BA7.0020.0002.0073] # LATIN SMALL LETTER S 0053 ; [.0BA7.0020.0008.0053] # LATIN CAPITAL LETTER S 00DF ; [.0BA7.0020.0004.00DF][.0000.0153.0004.00DF][.0BA7.0020.001F.00DF] # LATIN SMALL LETTER SHARP S; QQKN 0074 ; [.0BBF.0020.0002.0074] # LATIN SMALL LETTER T 0054 ; [.0BBF.0020.0008.0054] # LATIN CAPITAL LETTER T 0075 ; [.0BD7.0020.0002.0075] # LATIN SMALL LETTER U 0055 ; [.0BD7.0020.0008.0055] # LATIN CAPITAL LETTER U 00FA ; [.0BD7.0020.0002.0075][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH ACUTE; QQCM 00DA ; [.0BD7.0020.0008.0055][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH ACUTE; QQCM 00F9 ; [.0BD7.0020.0002.0075][.0000.0035.0002.0300] # LATIN SMALL LETTER U WITH GRAVE; QQCM 00D9 ; [.0BD7.0020.0008.0055][.0000.0035.0002.0300] # LATIN CAPITAL LETTER U WITH GRAVE; QQCM 00FB ; [.0BD7.0020.0002.0075][.0000.003C.0002.0302] # LATIN SMALL LETTER U WITH CIRCUMFLEX; QQCM 00DB ; [.0BD7.0020.0008.0055][.0000.003C.0002.0302] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX; QQCM 00FC ; [.0BD7.0020.0002.0075][.0000.0047.0002.0308] # LATIN SMALL LETTER U WITH DIAERESIS; QQCM 00DC ; [.0BD7.0020.0008.0055][.0000.0047.0002.0308] # LATIN CAPITAL LETTER U WITH DIAERESIS; QQCM 0076 ; [.0BEF.0020.0002.0076] # LATIN SMALL LETTER V 0056 ; [.0BEF.0020.0008.0056] # LATIN CAPITAL LETTER V 0077 ; [.0BFB.0020.0002.0077] # LATIN SMALL LETTER W 0057 ; [.0BFB.0020.0008.0057] # LATIN CAPITAL LETTER W 0078 ; [.0C03.0020.0002.0078] # LATIN SMALL LETTER X 0058 ; [.0C03.0020.0008.0058] # LATIN CAPITAL LETTER X 0079 ; [.0C07.0020.0002.0079] # LATIN SMALL LETTER Y 0059 ; [.0C07.0020.0008.0059] # LATIN CAPITAL LETTER Y 00FD ; [.0C07.0020.0002.0079][.0000.0032.0002.0301] # LATIN SMALL LETTER Y WITH ACUTE; QQCM 00DD ; [.0C07.0020.0008.0059][.0000.0032.0002.0301] # LATIN CAPITAL LETTER Y WITH ACUTE; QQCM 00FF ; [.0C07.0020.0002.0079][.0000.0047.0002.0308] # LATIN SMALL LETTER Y WITH DIAERESIS; QQCM 007A ; [.0C13.0020.0002.007A] # LATIN SMALL LETTER Z 005A ; [.0C13.0020.0008.005A] # LATIN CAPITAL LETTER Z 00FE ; [.0C3B.0020.0002.00FE] # LATIN SMALL LETTER THORN 00DE ; [.0C3B.0020.0008.00DE] # LATIN CAPITAL LETTER THORN 00B5 ; [.0C9F.0020.0004.00B5] # MICRO SIGN; QQK 1100 ; [.1831.0020.0002.1100] # HANGUL CHOSEONG KIYEOK 1101 ; [.1832.0020.0002.1101] # HANGUL CHOSEONG SSANGKIYEOK 1102 ; [.1833.0020.0002.1102] # HANGUL CHOSEONG NIEUN 1103 ; [.1834.0020.0002.1103] # HANGUL CHOSEONG TIKEUT 1104 ; [.1835.0020.0002.1104] # HANGUL CHOSEONG SSANGTIKEUT 1105 ; [.1836.0020.0002.1105] # HANGUL CHOSEONG RIEUL 1106 ; [.1837.0020.0002.1106] # HANGUL CHOSEONG MIEUM 1107 ; [.1838.0020.0002.1107] # HANGUL CHOSEONG PIEUP 1108 ; [.1839.0020.0002.1108] # HANGUL CHOSEONG SSANGPIEUP 1109 ; [.183A.0020.0002.1109] # HANGUL CHOSEONG SIOS 110A ; [.183B.0020.0002.110A] # HANGUL CHOSEONG SSANGSIOS 110B ; [.183C.0020.0002.110B] # HANGUL CHOSEONG IEUNG 110C ; [.183D.0020.0002.110C] # HANGUL CHOSEONG CIEUC 110D ; [.183E.0020.0002.110D] # HANGUL CHOSEONG SSANGCIEUC 110E ; [.183F.0020.0002.110E] # HANGUL CHOSEONG CHIEUCH 110F ; [.1840.0020.0002.110F] # HANGUL CHOSEONG KHIEUKH 1110 ; [.1841.0020.0002.1110] # HANGUL CHOSEONG THIEUTH 1111 ; [.1842.0020.0002.1111] # HANGUL CHOSEONG PHIEUPH 1112 ; [.1843.0020.0002.1112] # HANGUL CHOSEONG HIEUH 1113 ; [.1844.0020.0002.1113] # HANGUL CHOSEONG NIEUN-KIYEOK 1114 ; [.1845.0020.0002.1114] # HANGUL CHOSEONG SSANGNIEUN 1115 ; [.1846.0020.0002.1115] # HANGUL CHOSEONG NIEUN-TIKEUT 1116 ; [.1847.0020.0002.1116] # HANGUL CHOSEONG NIEUN-PIEUP 1117 ; [.1848.0020.0002.1117] # HANGUL CHOSEONG TIKEUT-KIYEOK 1118 ; [.1849.0020.0002.1118] # HANGUL CHOSEONG RIEUL-NIEUN 1119 ; [.184A.0020.0002.1119] # HANGUL CHOSEONG SSANGRIEUL 111A ; [.184B.0020.0002.111A] # HANGUL CHOSEONG RIEUL-HIEUH 111B ; [.184C.0020.0002.111B] # HANGUL CHOSEONG KAPYEOUNRIEUL 111C ; [.184D.0020.0002.111C] # HANGUL CHOSEONG MIEUM-PIEUP 111D ; [.184E.0020.0002.111D] # HANGUL CHOSEONG KAPYEOUNMIEUM 111E ; [.184F.0020.0002.111E] # HANGUL CHOSEONG PIEUP-KIYEOK 111F ; [.1850.0020.0002.111F] # HANGUL CHOSEONG PIEUP-NIEUN 1120 ; [.1851.0020.0002.1120] # HANGUL CHOSEONG PIEUP-TIKEUT 1121 ; [.1852.0020.0002.1121] # HANGUL CHOSEONG PIEUP-SIOS 1122 ; [.1853.0020.0002.1122] # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK 1123 ; [.1854.0020.0002.1123] # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT 1124 ; [.1855.0020.0002.1124] # HANGUL CHOSEONG PIEUP-SIOS-PIEUP 1125 ; [.1856.0020.0002.1125] # HANGUL CHOSEONG PIEUP-SSANGSIOS 1126 ; [.1857.0020.0002.1126] # HANGUL CHOSEONG PIEUP-SIOS-CIEUC 1127 ; [.1858.0020.0002.1127] # HANGUL CHOSEONG PIEUP-CIEUC 1128 ; [.1859.0020.0002.1128] # HANGUL CHOSEONG PIEUP-CHIEUCH 1129 ; [.185A.0020.0002.1129] # HANGUL CHOSEONG PIEUP-THIEUTH 112A ; [.185B.0020.0002.112A] # HANGUL CHOSEONG PIEUP-PHIEUPH 112B ; [.185C.0020.0002.112B] # HANGUL CHOSEONG KAPYEOUNPIEUP 112C ; [.185D.0020.0002.112C] # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP 112D ; [.185E.0020.0002.112D] # HANGUL CHOSEONG SIOS-KIYEOK 112E ; [.185F.0020.0002.112E] # HANGUL CHOSEONG SIOS-NIEUN 112F ; [.1860.0020.0002.112F] # HANGUL CHOSEONG SIOS-TIKEUT 1130 ; [.1861.0020.0002.1130] # HANGUL CHOSEONG SIOS-RIEUL 1131 ; [.1862.0020.0002.1131] # HANGUL CHOSEONG SIOS-MIEUM 1132 ; [.1863.0020.0002.1132] # HANGUL CHOSEONG SIOS-PIEUP 1133 ; [.1864.0020.0002.1133] # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK 1134 ; [.1865.0020.0002.1134] # HANGUL CHOSEONG SIOS-SSANGSIOS 1135 ; [.1866.0020.0002.1135] # HANGUL CHOSEONG SIOS-IEUNG 1136 ; [.1867.0020.0002.1136] # HANGUL CHOSEONG SIOS-CIEUC 1137 ; [.1868.0020.0002.1137] # HANGUL CHOSEONG SIOS-CHIEUCH 1138 ; [.1869.0020.0002.1138] # HANGUL CHOSEONG SIOS-KHIEUKH 1139 ; [.186A.0020.0002.1139] # HANGUL CHOSEONG SIOS-THIEUTH 113A ; [.186B.0020.0002.113A] # HANGUL CHOSEONG SIOS-PHIEUPH 113B ; [.186C.0020.0002.113B] # HANGUL CHOSEONG SIOS-HIEUH 113C ; [.186D.0020.0002.113C] # HANGUL CHOSEONG CHITUEUMSIOS 113D ; [.186E.0020.0002.113D] # HANGUL CHOSEONG CHITUEUMSSANGSIOS 113E ; [.186F.0020.0002.113E] # HANGUL CHOSEONG CEONGCHIEUMSIOS 113F ; [.1870.0020.0002.113F] # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS 1140 ; [.1871.0020.0002.1140] # HANGUL CHOSEONG PANSIOS 1141 ; [.1872.0020.0002.1141] # HANGUL CHOSEONG IEUNG-KIYEOK 1142 ; [.1873.0020.0002.1142] # HANGUL CHOSEONG IEUNG-TIKEUT 1143 ; [.1874.0020.0002.1143] # HANGUL CHOSEONG IEUNG-MIEUM 1144 ; [.1875.0020.0002.1144] # HANGUL CHOSEONG IEUNG-PIEUP 1145 ; [.1876.0020.0002.1145] # HANGUL CHOSEONG IEUNG-SIOS 1146 ; [.1877.0020.0002.1146] # HANGUL CHOSEONG IEUNG-PANSIOS 1147 ; [.1878.0020.0002.1147] # HANGUL CHOSEONG SSANGIEUNG 1148 ; [.1879.0020.0002.1148] # HANGUL CHOSEONG IEUNG-CIEUC 1149 ; [.187A.0020.0002.1149] # HANGUL CHOSEONG IEUNG-CHIEUCH 114A ; [.187B.0020.0002.114A] # HANGUL CHOSEONG IEUNG-THIEUTH 114B ; [.187C.0020.0002.114B] # HANGUL CHOSEONG IEUNG-PHIEUPH 114C ; [.187D.0020.0002.114C] # HANGUL CHOSEONG YESIEUNG 114D ; [.187E.0020.0002.114D] # HANGUL CHOSEONG CIEUC-IEUNG 114E ; [.187F.0020.0002.114E] # HANGUL CHOSEONG CHITUEUMCIEUC 114F ; [.1880.0020.0002.114F] # HANGUL CHOSEONG CHITUEUMSSANGCIEUC 1150 ; [.1881.0020.0002.1150] # HANGUL CHOSEONG CEONGCHIEUMCIEUC 1151 ; [.1882.0020.0002.1151] # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC 1152 ; [.1883.0020.0002.1152] # HANGUL CHOSEONG CHIEUCH-KHIEUKH 1153 ; [.1884.0020.0002.1153] # HANGUL CHOSEONG CHIEUCH-HIEUH 1154 ; [.1885.0020.0002.1154] # HANGUL CHOSEONG CHITUEUMCHIEUCH 1155 ; [.1886.0020.0002.1155] # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH 1156 ; [.1887.0020.0002.1156] # HANGUL CHOSEONG PHIEUPH-PIEUP 1157 ; [.1888.0020.0002.1157] # HANGUL CHOSEONG KAPYEOUNPHIEUPH 1158 ; [.1889.0020.0002.1158] # HANGUL CHOSEONG SSANGHIEUH 1159 ; [.188A.0020.0002.1159] # HANGUL CHOSEONG YEORINHIEUH 115F ; [.188B.0020.0002.115F] # HANGUL CHOSEONG FILLER 1160 ; [.188C.0020.0002.1160] # HANGUL JUNGSEONG FILLER 1161 ; [.188D.0020.0002.1161] # HANGUL JUNGSEONG A 1162 ; [.188E.0020.0002.1162] # HANGUL JUNGSEONG AE 1163 ; [.188F.0020.0002.1163] # HANGUL JUNGSEONG YA 1164 ; [.1890.0020.0002.1164] # HANGUL JUNGSEONG YAE 1165 ; [.1891.0020.0002.1165] # HANGUL JUNGSEONG EO 1166 ; [.1892.0020.0002.1166] # HANGUL JUNGSEONG E 1167 ; [.1893.0020.0002.1167] # HANGUL JUNGSEONG YEO 1168 ; [.1894.0020.0002.1168] # HANGUL JUNGSEONG YE 1169 ; [.1895.0020.0002.1169] # HANGUL JUNGSEONG O 116A ; [.1896.0020.0002.116A] # HANGUL JUNGSEONG WA 116B ; [.1897.0020.0002.116B] # HANGUL JUNGSEONG WAE 116C ; [.1898.0020.0002.116C] # HANGUL JUNGSEONG OE 116D ; [.1899.0020.0002.116D] # HANGUL JUNGSEONG YO 116E ; [.189A.0020.0002.116E] # HANGUL JUNGSEONG U 116F ; [.189B.0020.0002.116F] # HANGUL JUNGSEONG WEO 1170 ; [.189C.0020.0002.1170] # HANGUL JUNGSEONG WE 1171 ; [.189D.0020.0002.1171] # HANGUL JUNGSEONG WI 1172 ; [.189E.0020.0002.1172] # HANGUL JUNGSEONG YU 1173 ; [.189F.0020.0002.1173] # HANGUL JUNGSEONG EU 1174 ; [.18A0.0020.0002.1174] # HANGUL JUNGSEONG YI 1175 ; [.18A1.0020.0002.1175] # HANGUL JUNGSEONG I 1176 ; [.18A2.0020.0002.1176] # HANGUL JUNGSEONG A-O 1177 ; [.18A3.0020.0002.1177] # HANGUL JUNGSEONG A-U 1178 ; [.18A4.0020.0002.1178] # HANGUL JUNGSEONG YA-O 1179 ; [.18A5.0020.0002.1179] # HANGUL JUNGSEONG YA-YO 117A ; [.18A6.0020.0002.117A] # HANGUL JUNGSEONG EO-O 117B ; [.18A7.0020.0002.117B] # HANGUL JUNGSEONG EO-U 117C ; [.18A8.0020.0002.117C] # HANGUL JUNGSEONG EO-EU 117D ; [.18A9.0020.0002.117D] # HANGUL JUNGSEONG YEO-O 117E ; [.18AA.0020.0002.117E] # HANGUL JUNGSEONG YEO-U 117F ; [.18AB.0020.0002.117F] # HANGUL JUNGSEONG O-EO 1180 ; [.18AC.0020.0002.1180] # HANGUL JUNGSEONG O-E 1181 ; [.18AD.0020.0002.1181] # HANGUL JUNGSEONG O-YE 1182 ; [.18AE.0020.0002.1182] # HANGUL JUNGSEONG O-O 1183 ; [.18AF.0020.0002.1183] # HANGUL JUNGSEONG O-U 1184 ; [.18B0.0020.0002.1184] # HANGUL JUNGSEONG YO-YA 1185 ; [.18B1.0020.0002.1185] # HANGUL JUNGSEONG YO-YAE 1186 ; [.18B2.0020.0002.1186] # HANGUL JUNGSEONG YO-YEO 1187 ; [.18B3.0020.0002.1187] # HANGUL JUNGSEONG YO-O 1188 ; [.18B4.0020.0002.1188] # HANGUL JUNGSEONG YO-I 1189 ; [.18B5.0020.0002.1189] # HANGUL JUNGSEONG U-A 118A ; [.18B6.0020.0002.118A] # HANGUL JUNGSEONG U-AE 118B ; [.18B7.0020.0002.118B] # HANGUL JUNGSEONG U-EO-EU 118C ; [.18B8.0020.0002.118C] # HANGUL JUNGSEONG U-YE 118D ; [.18B9.0020.0002.118D] # HANGUL JUNGSEONG U-U 118E ; [.18BA.0020.0002.118E] # HANGUL JUNGSEONG YU-A 118F ; [.18BB.0020.0002.118F] # HANGUL JUNGSEONG YU-EO 1190 ; [.18BC.0020.0002.1190] # HANGUL JUNGSEONG YU-E 1191 ; [.18BD.0020.0002.1191] # HANGUL JUNGSEONG YU-YEO 1192 ; [.18BE.0020.0002.1192] # HANGUL JUNGSEONG YU-YE 1193 ; [.18BF.0020.0002.1193] # HANGUL JUNGSEONG YU-U 1194 ; [.18C0.0020.0002.1194] # HANGUL JUNGSEONG YU-I 1195 ; [.18C1.0020.0002.1195] # HANGUL JUNGSEONG EU-U 1196 ; [.18C2.0020.0002.1196] # HANGUL JUNGSEONG EU-EU 1197 ; [.18C3.0020.0002.1197] # HANGUL JUNGSEONG YI-U 1198 ; [.18C4.0020.0002.1198] # HANGUL JUNGSEONG I-A 1199 ; [.18C5.0020.0002.1199] # HANGUL JUNGSEONG I-YA 119A ; [.18C6.0020.0002.119A] # HANGUL JUNGSEONG I-O 119B ; [.18C7.0020.0002.119B] # HANGUL JUNGSEONG I-U 119C ; [.18C8.0020.0002.119C] # HANGUL JUNGSEONG I-EU 119D ; [.18C9.0020.0002.119D] # HANGUL JUNGSEONG I-ARAEA 119E ; [.18CA.0020.0002.119E] # HANGUL JUNGSEONG ARAEA 119F ; [.18CB.0020.0002.119F] # HANGUL JUNGSEONG ARAEA-EO 11A0 ; [.18CC.0020.0002.11A0] # HANGUL JUNGSEONG ARAEA-U 11A1 ; [.18CD.0020.0002.11A1] # HANGUL JUNGSEONG ARAEA-I 11A2 ; [.18CE.0020.0002.11A2] # HANGUL JUNGSEONG SSANGARAEA 11A8 ; [.18CF.0020.0002.11A8] # HANGUL JONGSEONG KIYEOK 11A9 ; [.18D0.0020.0002.11A9] # HANGUL JONGSEONG SSANGKIYEOK 11AA ; [.18D1.0020.0002.11AA] # HANGUL JONGSEONG KIYEOK-SIOS 11AB ; [.18D2.0020.0002.11AB] # HANGUL JONGSEONG NIEUN 11AC ; [.18D3.0020.0002.11AC] # HANGUL JONGSEONG NIEUN-CIEUC 11AD ; [.18D4.0020.0002.11AD] # HANGUL JONGSEONG NIEUN-HIEUH 11AE ; [.18D5.0020.0002.11AE] # HANGUL JONGSEONG TIKEUT 11AF ; [.18D6.0020.0002.11AF] # HANGUL JONGSEONG RIEUL 11B0 ; [.18D7.0020.0002.11B0] # HANGUL JONGSEONG RIEUL-KIYEOK 11B1 ; [.18D8.0020.0002.11B1] # HANGUL JONGSEONG RIEUL-MIEUM 11B2 ; [.18D9.0020.0002.11B2] # HANGUL JONGSEONG RIEUL-PIEUP 11B3 ; [.18DA.0020.0002.11B3] # HANGUL JONGSEONG RIEUL-SIOS 11B4 ; [.18DB.0020.0002.11B4] # HANGUL JONGSEONG RIEUL-THIEUTH 11B5 ; [.18DC.0020.0002.11B5] # HANGUL JONGSEONG RIEUL-PHIEUPH 11B6 ; [.18DD.0020.0002.11B6] # HANGUL JONGSEONG RIEUL-HIEUH 11B7 ; [.18DE.0020.0002.11B7] # HANGUL JONGSEONG MIEUM 11B8 ; [.18DF.0020.0002.11B8] # HANGUL JONGSEONG PIEUP 11B9 ; [.18E0.0020.0002.11B9] # HANGUL JONGSEONG PIEUP-SIOS 11BA ; [.18E1.0020.0002.11BA] # HANGUL JONGSEONG SIOS 11BB ; [.18E2.0020.0002.11BB] # HANGUL JONGSEONG SSANGSIOS 11BC ; [.18E3.0020.0002.11BC] # HANGUL JONGSEONG IEUNG 11BD ; [.18E4.0020.0002.11BD] # HANGUL JONGSEONG CIEUC 11BE ; [.18E5.0020.0002.11BE] # HANGUL JONGSEONG CHIEUCH 11BF ; [.18E6.0020.0002.11BF] # HANGUL JONGSEONG KHIEUKH 11C0 ; [.18E7.0020.0002.11C0] # HANGUL JONGSEONG THIEUTH 11C1 ; [.18E8.0020.0002.11C1] # HANGUL JONGSEONG PHIEUPH 11C2 ; [.18E9.0020.0002.11C2] # HANGUL JONGSEONG HIEUH 11C3 ; [.18EA.0020.0002.11C3] # HANGUL JONGSEONG KIYEOK-RIEUL 11C4 ; [.18EB.0020.0002.11C4] # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK 11C5 ; [.18EC.0020.0002.11C5] # HANGUL JONGSEONG NIEUN-KIYEOK 11C6 ; [.18ED.0020.0002.11C6] # HANGUL JONGSEONG NIEUN-TIKEUT 11C7 ; [.18EE.0020.0002.11C7] # HANGUL JONGSEONG NIEUN-SIOS 11C8 ; [.18EF.0020.0002.11C8] # HANGUL JONGSEONG NIEUN-PANSIOS 11C9 ; [.18F0.0020.0002.11C9] # HANGUL JONGSEONG NIEUN-THIEUTH 11CA ; [.18F1.0020.0002.11CA] # HANGUL JONGSEONG TIKEUT-KIYEOK 11CB ; [.18F2.0020.0002.11CB] # HANGUL JONGSEONG TIKEUT-RIEUL 11CC ; [.18F3.0020.0002.11CC] # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS 11CD ; [.18F4.0020.0002.11CD] # HANGUL JONGSEONG RIEUL-NIEUN 11CE ; [.18F5.0020.0002.11CE] # HANGUL JONGSEONG RIEUL-TIKEUT 11CF ; [.18F6.0020.0002.11CF] # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH 11D0 ; [.18F7.0020.0002.11D0] # HANGUL JONGSEONG SSANGRIEUL 11D1 ; [.18F8.0020.0002.11D1] # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK 11D2 ; [.18F9.0020.0002.11D2] # HANGUL JONGSEONG RIEUL-MIEUM-SIOS 11D3 ; [.18FA.0020.0002.11D3] # HANGUL JONGSEONG RIEUL-PIEUP-SIOS 11D4 ; [.18FB.0020.0002.11D4] # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH 11D5 ; [.18FC.0020.0002.11D5] # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP 11D6 ; [.18FD.0020.0002.11D6] # HANGUL JONGSEONG RIEUL-SSANGSIOS 11D7 ; [.18FE.0020.0002.11D7] # HANGUL JONGSEONG RIEUL-PANSIOS 11D8 ; [.18FF.0020.0002.11D8] # HANGUL JONGSEONG RIEUL-KHIEUKH 11D9 ; [.1900.0020.0002.11D9] # HANGUL JONGSEONG RIEUL-YEORINHIEUH 11DA ; [.1901.0020.0002.11DA] # HANGUL JONGSEONG MIEUM-KIYEOK 11DB ; [.1902.0020.0002.11DB] # HANGUL JONGSEONG MIEUM-RIEUL 11DC ; [.1903.0020.0002.11DC] # HANGUL JONGSEONG MIEUM-PIEUP 11DD ; [.1904.0020.0002.11DD] # HANGUL JONGSEONG MIEUM-SIOS 11DE ; [.1905.0020.0002.11DE] # HANGUL JONGSEONG MIEUM-SSANGSIOS 11DF ; [.1906.0020.0002.11DF] # HANGUL JONGSEONG MIEUM-PANSIOS 11E0 ; [.1907.0020.0002.11E0] # HANGUL JONGSEONG MIEUM-CHIEUCH 11E1 ; [.1908.0020.0002.11E1] # HANGUL JONGSEONG MIEUM-HIEUH 11E2 ; [.1909.0020.0002.11E2] # HANGUL JONGSEONG KAPYEOUNMIEUM 11E3 ; [.190A.0020.0002.11E3] # HANGUL JONGSEONG PIEUP-RIEUL 11E4 ; [.190B.0020.0002.11E4] # HANGUL JONGSEONG PIEUP-PHIEUPH 11E5 ; [.190C.0020.0002.11E5] # HANGUL JONGSEONG PIEUP-HIEUH 11E6 ; [.190D.0020.0002.11E6] # HANGUL JONGSEONG KAPYEOUNPIEUP 11E7 ; [.190E.0020.0002.11E7] # HANGUL JONGSEONG SIOS-KIYEOK 11E8 ; [.190F.0020.0002.11E8] # HANGUL JONGSEONG SIOS-TIKEUT 11E9 ; [.1910.0020.0002.11E9] # HANGUL JONGSEONG SIOS-RIEUL 11EA ; [.1911.0020.0002.11EA] # HANGUL JONGSEONG SIOS-PIEUP 11EB ; [.1912.0020.0002.11EB] # HANGUL JONGSEONG PANSIOS 11EC ; [.1913.0020.0002.11EC] # HANGUL JONGSEONG IEUNG-KIYEOK 11ED ; [.1914.0020.0002.11ED] # HANGUL JONGSEONG IEUNG-SSANGKIYEOK 11EE ; [.1915.0020.0002.11EE] # HANGUL JONGSEONG SSANGIEUNG 11EF ; [.1916.0020.0002.11EF] # HANGUL JONGSEONG IEUNG-KHIEUKH 11F0 ; [.1917.0020.0002.11F0] # HANGUL JONGSEONG YESIEUNG 11F1 ; [.1918.0020.0002.11F1] # HANGUL JONGSEONG YESIEUNG-SIOS 11F2 ; [.1919.0020.0002.11F2] # HANGUL JONGSEONG YESIEUNG-PANSIOS 11F3 ; [.191A.0020.0002.11F3] # HANGUL JONGSEONG PHIEUPH-PIEUP 11F4 ; [.191B.0020.0002.11F4] # HANGUL JONGSEONG KAPYEOUNPHIEUPH 11F5 ; [.191C.0020.0002.11F5] # HANGUL JONGSEONG HIEUH-NIEUN 11F6 ; [.191D.0020.0002.11F6] # HANGUL JONGSEONG HIEUH-RIEUL 11F7 ; [.191E.0020.0002.11F7] # HANGUL JONGSEONG HIEUH-MIEUM 11F8 ; [.191F.0020.0002.11F8] # HANGUL JONGSEONG HIEUH-PIEUP 11F9 ; [.1920.0020.0002.11F9] # HANGUL JONGSEONG YEORINHIEUH 3041 ; [.1921.0020.000D.3041] # HIRAGANA LETTER SMALL A 3042 ; [.1921.0020.000E.3042] # HIRAGANA LETTER A 30A1 ; [.1921.0020.000F.30A1] # KATAKANA LETTER SMALL A 30A2 ; [.1921.0020.0011.30A2] # KATAKANA LETTER A 3043 ; [.1922.0020.000D.3043] # HIRAGANA LETTER SMALL I 3044 ; [.1922.0020.000E.3044] # HIRAGANA LETTER I 30A3 ; [.1922.0020.000F.30A3] # KATAKANA LETTER SMALL I 30A4 ; [.1922.0020.0011.30A4] # KATAKANA LETTER I 3045 ; [.1923.0020.000D.3045] # HIRAGANA LETTER SMALL U 3046 ; [.1923.0020.000E.3046] # HIRAGANA LETTER U 30A5 ; [.1923.0020.000F.30A5] # KATAKANA LETTER SMALL U 30A6 ; [.1923.0020.0011.30A6] # KATAKANA LETTER U 3094 ; [.1923.0020.000E.3046][.0000.013D.0002.3099] # HIRAGANA LETTER VU; QQCM 30F4 ; [.1923.0020.0011.30A6][.0000.013D.0002.3099] # KATAKANA LETTER VU; QQCM 3047 ; [.1924.0020.000D.3047] # HIRAGANA LETTER SMALL E 3048 ; [.1924.0020.000E.3048] # HIRAGANA LETTER E 30A7 ; [.1924.0020.000F.30A7] # KATAKANA LETTER SMALL E 30A8 ; [.1924.0020.0011.30A8] # KATAKANA LETTER E 3049 ; [.1925.0020.000D.3049] # HIRAGANA LETTER SMALL O 304A ; [.1925.0020.000E.304A] # HIRAGANA LETTER O 30A9 ; [.1925.0020.000F.30A9] # KATAKANA LETTER SMALL O 30AA ; [.1925.0020.0011.30AA] # KATAKANA LETTER O 304B ; [.1926.0020.000E.304B] # HIRAGANA LETTER KA 30F5 ; [.1926.0020.000F.30F5] # KATAKANA LETTER SMALL KA 30AB ; [.1926.0020.0011.30AB] # KATAKANA LETTER KA 304C ; [.1926.0020.000E.304B][.0000.013D.0002.3099] # HIRAGANA LETTER GA; QQCM 30AC ; [.1926.0020.0011.30AB][.0000.013D.0002.3099] # KATAKANA LETTER GA; QQCM 304D ; [.1927.0020.000E.304D] # HIRAGANA LETTER KI 30AD ; [.1927.0020.0011.30AD] # KATAKANA LETTER KI 304E ; [.1927.0020.000E.304D][.0000.013D.0002.3099] # HIRAGANA LETTER GI; QQCM 30AE ; [.1927.0020.0011.30AD][.0000.013D.0002.3099] # KATAKANA LETTER GI; QQCM 304F ; [.1928.0020.000E.304F] # HIRAGANA LETTER KU 30AF ; [.1928.0020.0011.30AF] # KATAKANA LETTER KU 3050 ; [.1928.0020.000E.304F][.0000.013D.0002.3099] # HIRAGANA LETTER GU; QQCM 30B0 ; [.1928.0020.0011.30AF][.0000.013D.0002.3099] # KATAKANA LETTER GU; QQCM 3051 ; [.1929.0020.000E.3051] # HIRAGANA LETTER KE 30F6 ; [.1929.0020.000F.30F6] # KATAKANA LETTER SMALL KE 30B1 ; [.1929.0020.0011.30B1] # KATAKANA LETTER KE 3052 ; [.1929.0020.000E.3051][.0000.013D.0002.3099] # HIRAGANA LETTER GE; QQCM 30B2 ; [.1929.0020.0011.30B1][.0000.013D.0002.3099] # KATAKANA LETTER GE; QQCM 3053 ; [.192A.0020.000E.3053] # HIRAGANA LETTER KO 30B3 ; [.192A.0020.0011.30B3] # KATAKANA LETTER KO 3054 ; [.192A.0020.000E.3053][.0000.013D.0002.3099] # HIRAGANA LETTER GO; QQCM 30B4 ; [.192A.0020.0011.30B3][.0000.013D.0002.3099] # KATAKANA LETTER GO; QQCM 3055 ; [.192B.0020.000E.3055] # HIRAGANA LETTER SA 30B5 ; [.192B.0020.0011.30B5] # KATAKANA LETTER SA 3056 ; [.192B.0020.000E.3055][.0000.013D.0002.3099] # HIRAGANA LETTER ZA; QQCM 30B6 ; [.192B.0020.0011.30B5][.0000.013D.0002.3099] # KATAKANA LETTER ZA; QQCM 3057 ; [.192C.0020.000E.3057] # HIRAGANA LETTER SI 30B7 ; [.192C.0020.0011.30B7] # KATAKANA LETTER SI 3058 ; [.192C.0020.000E.3057][.0000.013D.0002.3099] # HIRAGANA LETTER ZI; QQCM 30B8 ; [.192C.0020.0011.30B7][.0000.013D.0002.3099] # KATAKANA LETTER ZI; QQCM 3059 ; [.192D.0020.000E.3059] # HIRAGANA LETTER SU 30B9 ; [.192D.0020.0011.30B9] # KATAKANA LETTER SU 305A ; [.192D.0020.000E.3059][.0000.013D.0002.3099] # HIRAGANA LETTER ZU; QQCM 30BA ; [.192D.0020.0011.30B9][.0000.013D.0002.3099] # KATAKANA LETTER ZU; QQCM 305B ; [.192E.0020.000E.305B] # HIRAGANA LETTER SE 30BB ; [.192E.0020.0011.30BB] # KATAKANA LETTER SE 305C ; [.192E.0020.000E.305B][.0000.013D.0002.3099] # HIRAGANA LETTER ZE; QQCM 30BC ; [.192E.0020.0011.30BB][.0000.013D.0002.3099] # KATAKANA LETTER ZE; QQCM 305D ; [.192F.0020.000E.305D] # HIRAGANA LETTER SO 30BD ; [.192F.0020.0011.30BD] # KATAKANA LETTER SO 305E ; [.192F.0020.000E.305D][.0000.013D.0002.3099] # HIRAGANA LETTER ZO; QQCM 30BE ; [.192F.0020.0011.30BD][.0000.013D.0002.3099] # KATAKANA LETTER ZO; QQCM 305F ; [.1930.0020.000E.305F] # HIRAGANA LETTER TA 30BF ; [.1930.0020.0011.30BF] # KATAKANA LETTER TA 3060 ; [.1930.0020.000E.305F][.0000.013D.0002.3099] # HIRAGANA LETTER DA; QQCM 30C0 ; [.1930.0020.0011.30BF][.0000.013D.0002.3099] # KATAKANA LETTER DA; QQCM 3061 ; [.1931.0020.000E.3061] # HIRAGANA LETTER TI 30C1 ; [.1931.0020.0011.30C1] # KATAKANA LETTER TI 3062 ; [.1931.0020.000E.3061][.0000.013D.0002.3099] # HIRAGANA LETTER DI; QQCM 30C2 ; [.1931.0020.0011.30C1][.0000.013D.0002.3099] # KATAKANA LETTER DI; QQCM 3063 ; [.1932.0020.000D.3063] # HIRAGANA LETTER SMALL TU 3064 ; [.1932.0020.000E.3064] # HIRAGANA LETTER TU 30C3 ; [.1932.0020.000F.30C3] # KATAKANA LETTER SMALL TU 30C4 ; [.1932.0020.0011.30C4] # KATAKANA LETTER TU 3065 ; [.1932.0020.000E.3064][.0000.013D.0002.3099] # HIRAGANA LETTER DU; QQCM 30C5 ; [.1932.0020.0011.30C4][.0000.013D.0002.3099] # KATAKANA LETTER DU; QQCM 3066 ; [.1933.0020.000E.3066] # HIRAGANA LETTER TE 30C6 ; [.1933.0020.0011.30C6] # KATAKANA LETTER TE 3067 ; [.1933.0020.000E.3066][.0000.013D.0002.3099] # HIRAGANA LETTER DE; QQCM 30C7 ; [.1933.0020.0011.30C6][.0000.013D.0002.3099] # KATAKANA LETTER DE; QQCM 3068 ; [.1934.0020.000E.3068] # HIRAGANA LETTER TO 30C8 ; [.1934.0020.0011.30C8] # KATAKANA LETTER TO 3069 ; [.1934.0020.000E.3068][.0000.013D.0002.3099] # HIRAGANA LETTER DO; QQCM 30C9 ; [.1934.0020.0011.30C8][.0000.013D.0002.3099] # KATAKANA LETTER DO; QQCM 306A ; [.1935.0020.000E.306A] # HIRAGANA LETTER NA 30CA ; [.1935.0020.0011.30CA] # KATAKANA LETTER NA 306B ; [.1936.0020.000E.306B] # HIRAGANA LETTER NI 30CB ; [.1936.0020.0011.30CB] # KATAKANA LETTER NI 306C ; [.1937.0020.000E.306C] # HIRAGANA LETTER NU 30CC ; [.1937.0020.0011.30CC] # KATAKANA LETTER NU 306D ; [.1938.0020.000E.306D] # HIRAGANA LETTER NE 30CD ; [.1938.0020.0011.30CD] # KATAKANA LETTER NE 306E ; [.1939.0020.000E.306E] # HIRAGANA LETTER NO 30CE ; [.1939.0020.0011.30CE] # KATAKANA LETTER NO 306F ; [.193A.0020.000E.306F] # HIRAGANA LETTER HA 30CF ; [.193A.0020.0011.30CF] # KATAKANA LETTER HA 3070 ; [.193A.0020.000E.306F][.0000.013D.0002.3099] # HIRAGANA LETTER BA; QQCM 30D0 ; [.193A.0020.0011.30CF][.0000.013D.0002.3099] # KATAKANA LETTER BA; QQCM 3071 ; [.193A.0020.000E.306F][.0000.013E.0002.309A] # HIRAGANA LETTER PA; QQCM 30D1 ; [.193A.0020.0011.30CF][.0000.013E.0002.309A] # KATAKANA LETTER PA; QQCM 3072 ; [.193B.0020.000E.3072] # HIRAGANA LETTER HI 30D2 ; [.193B.0020.0011.30D2] # KATAKANA LETTER HI 3073 ; [.193B.0020.000E.3072][.0000.013D.0002.3099] # HIRAGANA LETTER BI; QQCM 30D3 ; [.193B.0020.0011.30D2][.0000.013D.0002.3099] # KATAKANA LETTER BI; QQCM 3074 ; [.193B.0020.000E.3072][.0000.013E.0002.309A] # HIRAGANA LETTER PI; QQCM 30D4 ; [.193B.0020.0011.30D2][.0000.013E.0002.309A] # KATAKANA LETTER PI; QQCM 3075 ; [.193C.0020.000E.3075] # HIRAGANA LETTER HU 30D5 ; [.193C.0020.0011.30D5] # KATAKANA LETTER HU 3076 ; [.193C.0020.000E.3075][.0000.013D.0002.3099] # HIRAGANA LETTER BU; QQCM 30D6 ; [.193C.0020.0011.30D5][.0000.013D.0002.3099] # KATAKANA LETTER BU; QQCM 3077 ; [.193C.0020.000E.3075][.0000.013E.0002.309A] # HIRAGANA LETTER PU; QQCM 30D7 ; [.193C.0020.0011.30D5][.0000.013E.0002.309A] # KATAKANA LETTER PU; QQCM 3078 ; [.193D.0020.000E.3078] # HIRAGANA LETTER HE 30D8 ; [.193D.0020.0011.30D8] # KATAKANA LETTER HE 3079 ; [.193D.0020.000E.3078][.0000.013D.0002.3099] # HIRAGANA LETTER BE; QQCM 30D9 ; [.193D.0020.0011.30D8][.0000.013D.0002.3099] # KATAKANA LETTER BE; QQCM 307A ; [.193D.0020.000E.3078][.0000.013E.0002.309A] # HIRAGANA LETTER PE; QQCM 30DA ; [.193D.0020.0011.30D8][.0000.013E.0002.309A] # KATAKANA LETTER PE; QQCM 307B ; [.193E.0020.000E.307B] # HIRAGANA LETTER HO 30DB ; [.193E.0020.0011.30DB] # KATAKANA LETTER HO 307C ; [.193E.0020.000E.307B][.0000.013D.0002.3099] # HIRAGANA LETTER BO; QQCM 30DC ; [.193E.0020.0011.30DB][.0000.013D.0002.3099] # KATAKANA LETTER BO; QQCM 307D ; [.193E.0020.000E.307B][.0000.013E.0002.309A] # HIRAGANA LETTER PO; QQCM 30DD ; [.193E.0020.0011.30DB][.0000.013E.0002.309A] # KATAKANA LETTER PO; QQCM 307E ; [.193F.0020.000E.307E] # HIRAGANA LETTER MA 30DE ; [.193F.0020.0011.30DE] # KATAKANA LETTER MA 307F ; [.1940.0020.000E.307F] # HIRAGANA LETTER MI 30DF ; [.1940.0020.0011.30DF] # KATAKANA LETTER MI 3080 ; [.1941.0020.000E.3080] # HIRAGANA LETTER MU 30E0 ; [.1941.0020.0011.30E0] # KATAKANA LETTER MU 3081 ; [.1942.0020.000E.3081] # HIRAGANA LETTER ME 30E1 ; [.1942.0020.0011.30E1] # KATAKANA LETTER ME 3082 ; [.1943.0020.000E.3082] # HIRAGANA LETTER MO 30E2 ; [.1943.0020.0011.30E2] # KATAKANA LETTER MO 3083 ; [.1944.0020.000D.3083] # HIRAGANA LETTER SMALL YA 3084 ; [.1944.0020.000E.3084] # HIRAGANA LETTER YA 30E3 ; [.1944.0020.000F.30E3] # KATAKANA LETTER SMALL YA 30E4 ; [.1944.0020.0011.30E4] # KATAKANA LETTER YA 3085 ; [.1945.0020.000D.3085] # HIRAGANA LETTER SMALL YU 3086 ; [.1945.0020.000E.3086] # HIRAGANA LETTER YU 30E5 ; [.1945.0020.000F.30E5] # KATAKANA LETTER SMALL YU 30E6 ; [.1945.0020.0011.30E6] # KATAKANA LETTER YU 3087 ; [.1946.0020.000D.3087] # HIRAGANA LETTER SMALL YO 3088 ; [.1946.0020.000E.3088] # HIRAGANA LETTER YO 30E7 ; [.1946.0020.000F.30E7] # KATAKANA LETTER SMALL YO 30E8 ; [.1946.0020.0011.30E8] # KATAKANA LETTER YO 3089 ; [.1947.0020.000E.3089] # HIRAGANA LETTER RA 30E9 ; [.1947.0020.0011.30E9] # KATAKANA LETTER RA 308A ; [.1948.0020.000E.308A] # HIRAGANA LETTER RI 30EA ; [.1948.0020.0011.30EA] # KATAKANA LETTER RI 308B ; [.1949.0020.000E.308B] # HIRAGANA LETTER RU 30EB ; [.1949.0020.0011.30EB] # KATAKANA LETTER RU 308C ; [.194A.0020.000E.308C] # HIRAGANA LETTER RE 30EC ; [.194A.0020.0011.30EC] # KATAKANA LETTER RE 308D ; [.194B.0020.000E.308D] # HIRAGANA LETTER RO 30ED ; [.194B.0020.0011.30ED] # KATAKANA LETTER RO 308E ; [.194C.0020.000D.308E] # HIRAGANA LETTER SMALL WA 308F ; [.194C.0020.000E.308F] # HIRAGANA LETTER WA 30EE ; [.194C.0020.000F.30EE] # KATAKANA LETTER SMALL WA 30EF ; [.194C.0020.0011.30EF] # KATAKANA LETTER WA 30F7 ; [.194C.0020.0011.30EF][.0000.013D.0002.3099] # KATAKANA LETTER VA; QQCM 3090 ; [.194D.0020.000E.3090] # HIRAGANA LETTER WI 30F0 ; [.194D.0020.0011.30F0] # KATAKANA LETTER WI 30F8 ; [.194D.0020.0011.30F0][.0000.013D.0002.3099] # KATAKANA LETTER VI; QQCM 3091 ; [.194E.0020.000E.3091] # HIRAGANA LETTER WE 30F1 ; [.194E.0020.0011.30F1] # KATAKANA LETTER WE 30F9 ; [.194E.0020.0011.30F1][.0000.013D.0002.3099] # KATAKANA LETTER VE; QQCM 3092 ; [.194F.0020.000E.3092] # HIRAGANA LETTER WO 30F2 ; [.194F.0020.0011.30F2] # KATAKANA LETTER WO 30FA ; [.194F.0020.0011.30F2][.0000.013D.0002.3099] # KATAKANA LETTER VO; QQCM 3093 ; [.1950.0020.000E.3093] # HIRAGANA LETTER N 30F3 ; [.1950.0020.0011.30F3] # KATAKANA LETTER N Unicode/Collate/Locale/cs.pl 0000644 00000002677 15037233320 0011670 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0063 0068 ; [.1D19.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0063 0048 ; [.1D19.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H> 0043 0068 ; [.1D19.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1D19.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 0159 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON 0072 030C ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON 0158 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON 0052 030C ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; Unicode/Collate/Locale/az.pl 0000644 00000007017 15037233320 0011666 0 ustar 00 +{ locale_version => 1.25, # schwa doesn't require tailoring entry => <<'ENTRY', # for DUCET v9.0.0 00E7 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA 0063 0327 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA 00C7 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA 0043 0327 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA 011F ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE 0067 0306 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE 011E ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE 0047 0306 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE 0131 ; [.1D31.0020.0002] # LATIN SMALL LETTER DOTLESS I 0049 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER I 00CC ; [.1D31.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE 00CD ; [.1D31.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE 00CE ; [.1D31.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00CF ; [.1D31.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS 012A ; [.1D31.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON 012C ; [.1D31.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE 012E ; [.1D31.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK 0130 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE 0049 0307 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE 00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 015F ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA 0073 0327 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA 015E ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA 0053 0327 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA 00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0071 ; [.1D66.0020.0002] # LATIN SMALL LETTER Q 0051 ; [.1D66.0020.0008] # LATIN CAPITAL LETTER Q 0078 ; [.1D19.0020.0002] # LATIN SMALL LETTER X 0058 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER X 0077 ; [.1F22.0020.0002] # LATIN SMALL LETTER W 0057 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER W ENTRY }; Unicode/Collate/Locale/ta.pl 0000644 00000007565 15037233320 0011670 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0B82 ; [.27CE.0020.0002][.FFF0.0000.0000] # TAMIL SIGN ANUSVARA 0B83 ; [.27CE.0020.0002][.FFF1.0000.0000] # TAMIL SIGN VISARGA 0B95 0BCD 0BB7 0BCD ; [.27E5.0020.0002][.FFF2.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA, TAMIL LETTER SSA, TAMIL SIGN VIRAMA> 0B95 0BCD 0BB7 ; [.27E5.0020.0002][.FFF3.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA, TAMIL LETTER SSA> 0B95 0BCD ; [.27CF.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA> 0B95 ; [.27CF.0020.0002][.FFF1.0000.0000] # TAMIL LETTER KA 0B99 0BCD ; [.27D0.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NGA, TAMIL SIGN VIRAMA> 0B99 ; [.27D0.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NGA 0B9A 0BCD ; [.27D1.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER CA, TAMIL SIGN VIRAMA> 0B9A ; [.27D1.0020.0002][.FFF1.0000.0000] # TAMIL LETTER CA 0B9E 0BCD ; [.27D2.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NYA, TAMIL SIGN VIRAMA> 0B9E ; [.27D2.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NYA 0B9F 0BCD ; [.27D3.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER TTA, TAMIL SIGN VIRAMA> 0B9F ; [.27D3.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TTA 0BA3 0BCD ; [.27D4.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NNA, TAMIL SIGN VIRAMA> 0BA3 ; [.27D4.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNA 0BA4 0BCD ; [.27D5.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER TA, TAMIL SIGN VIRAMA> 0BA4 ; [.27D5.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TA 0BA8 0BCD ; [.27D6.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NA, TAMIL SIGN VIRAMA> 0BA8 ; [.27D6.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NA 0BAA 0BCD ; [.27D7.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER PA, TAMIL SIGN VIRAMA> 0BAA ; [.27D7.0020.0002][.FFF1.0000.0000] # TAMIL LETTER PA 0BAE 0BCD ; [.27D8.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER MA, TAMIL SIGN VIRAMA> 0BAE ; [.27D8.0020.0002][.FFF1.0000.0000] # TAMIL LETTER MA 0BAF 0BCD ; [.27D9.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER YA, TAMIL SIGN VIRAMA> 0BAF ; [.27D9.0020.0002][.FFF1.0000.0000] # TAMIL LETTER YA 0BB0 0BCD ; [.27DA.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER RA, TAMIL SIGN VIRAMA> 0BB0 ; [.27DA.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RA 0BB2 0BCD ; [.27DB.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER LA, TAMIL SIGN VIRAMA> 0BB2 ; [.27DB.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LA 0BB5 0BCD ; [.27DC.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER VA, TAMIL SIGN VIRAMA> 0BB5 ; [.27DC.0020.0002][.FFF1.0000.0000] # TAMIL LETTER VA 0BB4 0BCD ; [.27DD.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER LLLA, TAMIL SIGN VIRAMA> 0BB4 ; [.27DD.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLLA 0BB3 0BCD ; [.27DE.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER LLA, TAMIL SIGN VIRAMA> 0BB3 ; [.27DE.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLA 0BB1 0BCD ; [.27DF.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER RRA, TAMIL SIGN VIRAMA> 0BB1 ; [.27DF.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RRA 0BA9 0BCD ; [.27E0.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER NNNA, TAMIL SIGN VIRAMA> 0BA9 ; [.27E0.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNNA 0B9C 0BCD ; [.27E1.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER JA, TAMIL SIGN VIRAMA> 0B9C ; [.27E1.0020.0002][.FFF1.0000.0000] # TAMIL LETTER JA 0BB6 0BCD ; [.27E2.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER SHA, TAMIL SIGN VIRAMA> 0BB6 ; [.27E2.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SHA 0BB7 0BCD ; [.27E3.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER SSA, TAMIL SIGN VIRAMA> 0BB7 ; [.27E3.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SSA 0BB8 0BCD ; [.27E4.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER SA, TAMIL SIGN VIRAMA> 0BB8 ; [.27E4.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SA 0BB9 0BCD ; [.27E5.0020.0002][.FFF0.0000.0000] # <TAMIL LETTER HA, TAMIL SIGN VIRAMA> 0BB9 ; [.27E5.0020.0002][.FFF1.0000.0000] # TAMIL LETTER HA ENTRY }; Unicode/Collate/Locale/se.pl 0000644 00000024705 15037233320 0011666 0 ustar 00 +{ locale_version => 1.25, # eng, g-stroke, t-stroke don't require tailoring entry => <<'ENTRY', # for DUCET v9.0.0 00E1 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE 010D ; [.1C8C.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C8C.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C8C.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C8C.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0292 ; [.1C8D.0020.0002] # LATIN SMALL LETTER EZH 01B7 ; [.1C8D.0020.0008] # LATIN CAPITAL LETTER EZH 01EF ; [.1C8E.0020.0002] # LATIN SMALL LETTER EZH WITH CARON 0292 030C ; [.1C8E.0020.0002] # LATIN SMALL LETTER EZH WITH CARON 01EE ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON 01B7 030C ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON 0111 ; [.1CA9.0020.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1CA9.0020.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1CA9.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1CA9.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1CA9.0021.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1CA9.0021.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1CA9.0021.0008] # LATIN CAPITAL LETTER ETH 01E7 ; [.1D00.0020.0002] # LATIN SMALL LETTER G WITH CARON 0067 030C ; [.1D00.0020.0002] # LATIN SMALL LETTER G WITH CARON 01E6 ; [.1D00.0020.0008] # LATIN CAPITAL LETTER G WITH CARON 0047 030C ; [.1D00.0020.0008] # LATIN CAPITAL LETTER G WITH CARON 01E9 ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CARON 006B 030C ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CARON 01E8 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CARON 004B 030C ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CARON 0144 ; [.1DD8.0021.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DD8.0021.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DD8.0021.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DD8.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DD8.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DD8.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE 00F1 ; [.1DD8.0022.0002] # LATIN SMALL LETTER N WITH TILDE 006E 0303 ; [.1DD8.0022.0002] # LATIN SMALL LETTER N WITH TILDE 00D1 ; [.1DD8.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE 004E 0303 ; [.1DD8.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE 0161 ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 00FE ; [.1E9A.0021.0002] # LATIN SMALL LETTER THORN 00DE ; [.1E9A.0021.0008] # LATIN CAPITAL LETTER THORN 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 017E ; [.1F92.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F92.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F92.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F92.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 00F8 ; [.1F93.0020.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F93.0020.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F93.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F93.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F93.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F93.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 0153 ; [.1F93.0021.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F93.0021.0008] # LATIN CAPITAL LIGATURE OE 00E6 ; [.1F94.0020.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F94.0020.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F94.0020.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F94.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F94.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F94.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F94.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F94.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F96.0020.0008] # ANGSTROM SIGN 01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 0227 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE 0061 0307 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE 0226 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE 0041 0307 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE 00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00E3 ; [.1F97.0021.0002] # LATIN SMALL LETTER A WITH TILDE 0061 0303 ; [.1F97.0021.0002] # LATIN SMALL LETTER A WITH TILDE 00C3 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE 0041 0303 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE 00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 00F5 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH TILDE 006F 0303 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH TILDE 00D5 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE 004F 0303 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE 1E4D ; [.1F98.0022.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE 1E4C ; [.1F98.0022.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE 022D ; [.1F98.0022.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON 022C ; [.1F98.0022.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON 1E4F ; [.1F98.0022.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS 1E4E ; [.1F98.0022.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS 1EE1 ; [.1F98.0022.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE 1EE0 ; [.1F98.0022.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE 00F4 ; [.1F98.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 006F 0302 ; [.1F98.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1F98.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 004F 0302 ; [.1F98.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED3 ; [.1F98.0023.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1F98.0023.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED1 ; [.1F98.0023.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1F98.0023.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED7 ; [.1F98.0023.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1F98.0023.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1F98.0023.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1F98.0023.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED9 ; [.1F98.0023.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1F98.0023.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 01EB ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH OGONEK 006F 0328 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH OGONEK 01EA ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK 004F 0328 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK ENTRY }; Unicode/Collate/Locale/af.pl 0000644 00000000235 15037233320 0011635 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0149 ; [.1DB9.0020.0009] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE ENTRY }; Unicode/Collate/Locale/lt.pl 0000644 00000005622 15037233320 0011673 0 ustar 00 +{ locale_version => 1.25, # in cldr test/lt.xml why I-dot-acute > I-dot though i-dot-acute < i-dot ? entry => <<'ENTRY', # for DUCET v9.0.0 0049 0307 ; [.1D32.0020.0008][.0000.002E.0002] # <LATIN CAPITAL LETTER I, COMBINING DOT ABOVE> 0307 0300 ; [.0000.0025.0002] # <COMBINING DOT ABOVE, COMBINING GRAVE ACCENT> 0307 0301 ; [.0000.0024.0002] # <COMBINING DOT ABOVE, COMBINING ACUTE ACCENT> 0307 0303 ; [.0000.002D.0002] # <COMBINING DOT ABOVE, COMBINING TILDE> 0105 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH OGONEK 0061 0328 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH OGONEK 0104 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK 0041 0328 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK 010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0119 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0117 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE 0065 0307 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE 0116 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE 0045 0307 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE 012F ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH OGONEK 0069 0328 ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH OGONEK 012E ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK 0049 0328 ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK 0079 ; [.1D32.0022.0002] # LATIN SMALL LETTER Y 0059 ; [.1D32.0022.0008] # LATIN CAPITAL LETTER Y 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0173 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH OGONEK 0075 0328 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH OGONEK 0172 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK 0055 0328 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK 016B ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON 017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; Unicode/Collate/Locale/te.pl 0000644 00000000547 15037233320 0011665 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0C01 ; [.2802.0020.0002][.FFF1.0000.0000] # TELUGU SIGN CANDRABINDU 0C02 ; [.2802.0020.0002][.FFF2.0000.0000] # TELUGU SIGN ANUSVARA 0C03 ; [.2802.0020.0002][.FFF3.0000.0000] # TELUGU SIGN VISARGA 0C14 ; [.2802.0020.0002][.FFF0.0000.0000] # TELUGU LETTER AU ENTRY }; Unicode/Collate/Locale/nb.pl 0000644 00000012412 15037233320 0011646 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH 00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN 00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE 00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F98.0020.0008] # ANGSTROM SIGN 01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 0061 0061 ; [.1F98.0021.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A> 0041 0061 ; [.1F98.0021.0007] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A> 0041 0041 ; [.1F98.0021.0008] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A> ENTRY }; Unicode/Collate/Locale/fi_phone.pl 0000644 00000011061 15037233320 0013035 0 ustar 00 +{ locale_version => 1.25, # in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ? entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE 01E5 ; [.1CF4.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE 01E4 ; [.1CF4.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE 014B ; [.1DB9.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG 014A ; [.1DB9.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG 0167 ; [.1E95.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE 0166 ; [.1E95.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0292 ; [.1F21.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH 01B7 ; [.1F21.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH 01EF ; [.1F21.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON 01EE ; [.1F21.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON 00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F96.0020.0008] # ANGSTROM SIGN 01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ENTRY }; Unicode/Collate/Locale/si_dict.pl 0000644 00000000630 15037233320 0012664 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0D82 ; [.28E1.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA 0D83 ; [.28E1.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA 0D96 ; [.28E1.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA 0DA5 ; [.28EA.0020.0002][.291C.0020.0002][.28EC.0021.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA ENTRY }; Unicode/Collate/Locale/nso.pl 0000644 00000005475 15037233321 0012062 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00EA ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC1 ; [.1CAB.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAB.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EBF ; [.1CAB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC5 ; [.1CAB.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAB.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAB.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAB.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED1 ; [.1DDE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1DDE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED7 ; [.1DDE.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1DDE.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1DDE.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1DDE.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED9 ; [.1DDE.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1DDE.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON ENTRY }; Unicode/Collate/Locale/sv.pl 0000644 00000014575 15037233321 0011714 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH 00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN 00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN 0077 ; [.1EE3.0021.0002] # LATIN SMALL LETTER W 0057 ; [.1EE3.0021.0008] # LATIN CAPITAL LETTER W 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F96.0020.0008] # ANGSTROM SIGN 01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 0119 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 0151 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0153 ; [.1F98.0023.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F98.0023.0008] # LATIN CAPITAL LIGATURE OE 00F4 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 006F 0302 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 004F 0302 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED3 ; [.1F98.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1F98.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED1 ; [.1F98.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1F98.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED7 ; [.1F98.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1F98.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1F98.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1F98.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED9 ; [.1F98.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1F98.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ENTRY }; Unicode/Collate/Locale/lv.pl 0000644 00000004231 15037233321 0011671 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 010D ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0123 ; [.1D17.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA 0067 0327 ; [.1D17.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA 0122 ; [.1D17.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA 0047 0327 ; [.1D17.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA 0137 ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA 006B 0327 ; [.1D76.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA 0136 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA 004B 0327 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA 013C ; [.1DA9.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA 006C 0327 ; [.1DA9.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA 013B ; [.1DA9.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA 004C 0327 ; [.1DA9.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA 0146 ; [.1DDC.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA 006E 0327 ; [.1DDC.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA 0145 ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA 004E 0327 ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA 0157 ; [.1E70.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA 0072 0327 ; [.1E70.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA 0156 ; [.1E70.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA 0052 0327 ; [.1E70.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA 0161 ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E94.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E94.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 017E ; [.1F3D.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F3D.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F3D.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F3D.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; Unicode/Collate/Locale/fa.pl 0000644 00000006521 15037233321 0011642 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0650 ; [.0000.0077.0002] # ARABIC KASRA 064B ; [.0000.007B.0002] # ARABIC FATHATAN 064D ; [.0000.007C.0002] # ARABIC KASRATAN 064C ; [.0000.007D.0002] # ARABIC DAMMATAN 0622 ; [.230A.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE 0627 0653 ; [.230A.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE 08AC ; [.230A.0020.0002][.FFF0.0000.0000] # ARABIC LETTER ROHINGYA YEH 0671 ; [.230B.0021.0002] # ARABIC LETTER ALEF WASLA 0621 ; [.230C.0020.0002][.FFF0.0000.0000] # ARABIC LETTER HAMZA 0623 ; [.230C.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE 0627 0654 ; [.230C.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE 0672 ; [.230C.0022.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE 0625 ; [.230C.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW 0627 0655 ; [.230C.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW 0673 ; [.230C.0024.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW 0624 ; [.230C.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE 0648 0654 ; [.230C.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE 06CC 0654 ; [.230C.0026.0002][.FFF0.0000.0000] # <ARABIC LETTER FARSI YEH, ARABIC HAMZA ABOVE> 0649 0654 ; [.230C.0026.0003][.FFF0.0000.0000] # <ARABIC LETTER ALEF MAKSURA, ARABIC HAMZA ABOVE> 0626 ; [.230C.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE 064A 0654 ; [.230C.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE 066E ; [.230C.0020.0002][.FFF1.0000.0000] # ARABIC LETTER DOTLESS BEH 06AA ; [.2388.0021.0002] # ARABIC LETTER SWASH KAF 06AB ; [.2388.0022.0002] # ARABIC LETTER KAF WITH RING 0643 ; [.2388.0023.0002] # ARABIC LETTER KAF 06AC ; [.2388.0024.0002] # ARABIC LETTER KAF WITH DOT ABOVE 06AD ; [.2388.0025.0002] # ARABIC LETTER NG 06AE ; [.2388.0026.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW 0647 ; [.23C1.0020.0002][.FFF1.0000.0000] # ARABIC LETTER HEH 06D5 ; [.23C1.0021.0002][.FFF1.0000.0000] # ARABIC LETTER AE 06C1 ; [.23C1.0022.0002][.FFF1.0000.0000] # ARABIC LETTER HEH GOAL 06C2 ; [.23C1.0022.0002][.FFF1.0000.0000][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE 0629 ; [.23C1.0023.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA 06C3 ; [.23C1.0024.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL 06C0 ; [.23C1.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE 06D5 0654 ; [.23C1.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE 06BE ; [.23C1.0026.0002][.FFF1.0000.0000] # ARABIC LETTER HEH DOACHASHMEE 06CF ; [.23C1.0020.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH DOT ABOVE 0649 ; [.23C7.0021.0002] # ARABIC LETTER ALEF MAKSURA 06D2 ; [.23C7.0022.0002] # ARABIC LETTER YEH BARREE 06D3 ; [.23C7.0022.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE 064A ; [.23C7.0023.0002] # ARABIC LETTER YEH 06D0 ; [.23C7.0024.0002] # ARABIC LETTER E 06D1 ; [.23C7.0025.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW 06CD ; [.23C7.0026.0002] # ARABIC LETTER YEH WITH TAIL 06CE ; [.23C7.0027.0002] # ARABIC LETTER YEH WITH SMALL V ENTRY }; Unicode/Collate/Locale/ha.pl 0000644 00000001624 15037233321 0011643 0 ustar 00 +{ locale_version => 1.25, # b-hook, d-hook, k-hook, y-hook don't require tailoring entry => <<'ENTRY', # for DUCET v9.0.0 0073 0068 ; [.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H> 0053 0068 ; [.1E72.0020.0007] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H> 0053 0048 ; [.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER H> 0074 0073 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER S> 0054 0073 ; [.1E96.0020.0007] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER S> 0054 0053 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER S> 02BC 0079 ; [.1F17.0020.0003] # <MODIFIER LETTER APOSTROPHE, LATIN SMALL LETTER Y> 02BC 0059 ; [.1F17.0020.0009] # <MODIFIER LETTER APOSTROPHE, LATIN CAPITAL LETTER Y> 0027 0079 ; [.1F17.0020.0004] # <APOSTROPHE, LATIN SMALL LETTER Y> 0027 0059 ; [.1F17.0020.000A] # <APOSTROPHE, LATIN CAPITAL LETTER Y> ENTRY }; Unicode/Collate/Locale/ug_cyrl.pl 0000644 00000000313 15037233321 0012711 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 04D9 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER SCHWA 04D8 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA ENTRY }; Unicode/Collate/Locale/yo.pl 0000644 00000003314 15037233321 0011700 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 1EB9 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW 0065 0323 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW 1EB8 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW 0045 0323 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW 1EC7 ; [.1CAB.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAB.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 0067 0062 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER B> 0047 0062 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER B> 0047 0042 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER B> 1ECD ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW 006F 0323 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW 1ECC ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW 004F 0323 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW 1ED9 ; [.1DDE.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1DDE.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1EE3 ; [.1DDE.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW 1EE2 ; [.1DDE.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 1E63 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW 0073 0323 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW 1E62 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW 0053 0323 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW ENTRY }; Unicode/Collate/Locale/sv_refo.pl 0000644 00000014421 15037233321 0012715 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH 00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN 00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F96.0020.0008] # ANGSTROM SIGN 01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 0119 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1F97.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 0151 ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F98.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F98.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0153 ; [.1F98.0023.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F98.0023.0008] # LATIN CAPITAL LIGATURE OE 00F4 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 006F 0302 ; [.1F98.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 004F 0302 ; [.1F98.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED3 ; [.1F98.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1F98.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED1 ; [.1F98.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1F98.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED7 ; [.1F98.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1F98.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1F98.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1F98.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED9 ; [.1F98.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1F98.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ENTRY }; Unicode/Collate/Locale/mk.pl 0000644 00000001726 15037233321 0011665 0 ustar 00 +{ locale_version => 1.25, suppress => [0x0418, 0x0438], entry => <<'ENTRY', # for DUCET v9.0.0 0453 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER GJE 0433 0301 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER GJE 0433 0341 ; [.2056.0020.0002] # CYRILLIC SMALL LETTER GJE 0403 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER GJE 0413 0301 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER GJE 0413 0341 ; [.2056.0020.0008] # CYRILLIC CAPITAL LETTER GJE 045C ; [.211A.0020.0002] # CYRILLIC SMALL LETTER KJE 043A 0301 ; [.211A.0020.0002] # CYRILLIC SMALL LETTER KJE 043A 0341 ; [.211A.0020.0002] # CYRILLIC SMALL LETTER KJE 040C ; [.211A.0020.0008] # CYRILLIC CAPITAL LETTER KJE 041A 0301 ; [.211A.0020.0008] # CYRILLIC CAPITAL LETTER KJE 041A 0341 ; [.211A.0020.0008] # CYRILLIC CAPITAL LETTER KJE 0439 ; [.2080.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I 0419 ; [.2080.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I ENTRY }; Unicode/Collate/Locale/th.pl 0000644 00000002240 15037233321 0011661 0 ustar 00 +{ locale_version => 1.25, variable => 'shifted', alternate => 'shifted', entry => <<'ENTRY', # for DUCET v9.0.0 0E2F ; [*03EF.0020.0002][*FFF0.0000.0000] # THAI CHARACTER PAIYANNOI 0E5A ; [*03EF.0020.0002][*FFF1.0000.0000] # THAI CHARACTER ANGKHANKHU 0E46 ; [*03F0.0020.0002][*FFF1.0000.0000] # THAI CHARACTER MAIYAMOK 0E5B ; [*03F0.0020.0002][*FFF0.0000.0000] # THAI CHARACTER KHOMUT 0E4C ; [.0000.00D2.0002] # THAI CHARACTER THANTHAKHAT 0E47 ; [.0000.00D3.0002] # THAI CHARACTER MAITAIKHU 0E48 ; [.0000.00D4.0002] # THAI CHARACTER MAI EK 0E49 ; [.0000.00D5.0002] # THAI CHARACTER MAI THO 0E4A ; [.0000.00D6.0002] # THAI CHARACTER MAI TRI 0E4B ; [.0000.00D7.0002] # THAI CHARACTER MAI CHATTAWA 0E4D ; [.2DA1.0020.0002] # THAI CHARACTER NIKHAHIT 0E45 ; [.2DA4.0020.0003] # THAI CHARACTER LAKKHANGYAO 0E4D 0E32 ; [.2DA4.0020.0002][.2DA1.0020.0003] # THAI CHARACTER SARA AM 0E33 ; [.2DA4.0020.0002][.2DA1.0020.0004] # THAI CHARACTER SARA AM 0E45 0E4D ; [.2DA1.0020.0002][.2DA4.0020.0004] # <THAI CHARACTER LAKKHANGYAO, THAI CHARACTER NIKHAHIT> 0E3A ; [.2DB2.0020.0002] # THAI CHARACTER PHINTHU ENTRY }; Unicode/Collate/Locale/ko.pl 0000644 00000172311 15037233321 0011666 0 ustar 00 use Unicode::Collate::CJK::Korean; +{ locale_version => 1.25, overrideCJK => \&Unicode::Collate::CJK::Korean::weightKorean, entry => <<'ENTRY', # for DUCET v9.0.0 F967 ; [.3BFC.0021.0002.4E0D][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.3BFC.0032.0002.4E26][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.3BF5.0021.0002.4E32][.3C7B.0020.0002][.3CE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 2F801 ; [.3C07.0021.0002.4E38][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.3BF8.0021.0002.4E39][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E F91B ; [.3BFA.0021.0002.4E82][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B F9BA ; [.3BFA.0021.0002.4E86][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA F977 ; [.3BFA.0021.0002.4EAE][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 F9FD ; [.3BFE.0021.0002.4EC0][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD F9A8 ; [.3BFA.0021.0002.4EE4][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 F92D ; [.3BFA.0021.0002.4F86][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D F9B5 ; [.3BFA.0021.0002.4F8B][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.3BFB.0021.0002.4FAE][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.3BFB.0021.0002.4FAE][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 2F806 ; [.3C05.0023.0002.4FBB][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806 F965 ; [.3C06.0021.0002.4FBF][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 2F807 ; [.3BFC.0022.0002.5002][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807 F9D4 ; [.3BFA.0022.0002.502B][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 2F809 ; [.3BFC.0022.0002.5099][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 2F80B ; [.3BFE.0023.0002.50CF][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.3BFA.0022.0002.50DA][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.3BFE.0023.0002.50E7][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.3BFE.0023.0002.50E7][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A FA0C ; [.3C00.0021.0002.5140][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.3C03.0021.0002.5145][.3C80.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.3BFB.0021.0002.514D][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.3BFB.0021.0002.514D][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F814 ; [.3BF7.0022.0002.5167][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814 FA72 ; [.3C01.0024.0002.5168][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.3BFA.0023.0002.5169][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 F9D1 ; [.3BFA.0021.0002.516D][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 2F811 ; [.3BF5.0026.0002.5177][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.3BF5.0024.0002.5180][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F815 ; [.3C01.0021.0002.518D][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 2F8D2 ; [.3BFB.0022.0002.5192][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.3BFB.0022.0002.5195][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F817 ; [.3C00.0023.0002.5197][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 2F818 ; [.3C00.003B.0002.51A4][.3C81.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F81A ; [.3BF8.0022.0002.51AC][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A F92E ; [.3BFA.0021.0002.51B7][.3C74.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E F979 ; [.3BFA.0024.0002.51C9][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 F955 ; [.3BFA.0021.0002.51CC][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.3BFA.0021.0002.51DC][.3C85.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 FA15 ; [.3C07.0022.0002.51DE][.3C86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15 2F81E ; [.3C00.0023.0002.5203][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.3C01.0021.0002.5207][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.3C01.0021.0002.5207][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.3BFA.0022.0002.5217][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C F9DD ; [.3BFA.0022.0002.5229][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.3C01.0022.0002.523A][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.3BF5.0021.0002.523B][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F822 ; [.3C07.0021.0002.5272][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 2F823 ; [.3BFE.002D.0002.5277][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823 F9C7 ; [.3BFA.0021.0002.5289][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 F98A ; [.3BFA.0021.0002.529B][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A F99D ; [.3BFA.0023.0002.52A3][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D FA76 ; [.3C00.0024.0002.52C7][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.3C00.0024.0002.52C7][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.3BFB.0023.0002.52C9][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.3BFB.0023.0002.52C9][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.3BFA.0021.0002.52D2][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 F92F ; [.3BFA.0021.0002.52DE][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.3BF5.0023.0002.52E4][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.3BF5.0023.0002.52E4][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 F97F ; [.3BFA.0023.0002.52F5][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F FA77 ; [.3C01.0022.0002.52FA][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.3C01.0022.0002.52FA][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.3C06.0022.0002.5305][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 F963 ; [.3BFC.0021.0002.5317][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.3BFC.0021.0002.5317][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B F9EB ; [.3BF7.0021.0002.533F][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F82C ; [.3C07.0021.0002.5349][.3C82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.3BFC.0025.0002.5351][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.3BFC.0025.0002.5351][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E ; [.3BFC.0022.0002.535A][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F ; [.3C01.0022.0002.5373][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.3BFA.0022.0002.5375][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F830 ; [.3C01.0021.0002.537D][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830 2F831 ; [.3BF5.0028.0002.537F][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.3BF5.0028.0002.537F][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.3BF5.0028.0002.537F][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 F96B ; [.3C03.0022.0002.53C3][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F836 ; [.3BF5.0022.0002.53CA][.3C85.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 2F837 ; [.3BFE.005E.0002.53DF][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 F906 ; [.3BF5.002A.0002.53E5][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.3BF5.0021.0002.53EB][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A ; [.3C01.0022.0002.53F1][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A F9DE ; [.3BFA.0024.0002.540F][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.3BFA.0021.0002.541D][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.3C07.0021.0002.5438][.3C85.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D F980 ; [.3BFA.0024.0002.5442][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.3C01.0026.0002.5448][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.3C01.0028.0002.5468][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F 2F840 ; [.3C00.0031.0002.54A2][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.3C00.0025.0002.54BD][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F842 ; [.3BF8.0021.0002.5510][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 2F843 ; [.3BF5.0022.0002.5553][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843 2F844 ; [.3C07.0024.0002.5563][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 2F845 ; [.3BFE.0024.0002.5584][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.3BFE.0024.0002.5584][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.3BFA.0021.0002.5587][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.3C07.0022.0002.5599][.3C82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.3C07.0022.0002.5599][.3C82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.3BF5.0022.0002.559D][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.3BF5.0022.0002.559D][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F848 ; [.3BF6.0021.0002.55AB][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 FA7B ; [.3C00.0022.0002.55E2][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B FA37 ; [.3C05.0022.0002.5606][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 2F84C ; [.3C05.0022.0002.5606][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C FA38 ; [.3BF5.0026.0002.5668][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.3BFC.0023.0002.5674][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F F9A9 ; [.3BFA.0023.0002.56F9][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.3BF8.0024.0002.5716][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F855 ; [.3C07.0024.0002.578B][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.3BFE.0021.0002.57CE][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.3BFE.0021.0002.57F4][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F857 ; [.3BFC.0023.0002.5831][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 FA39 ; [.3BFC.0033.0002.5840][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39 FA10 ; [.3C03.0022.0002.585A][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 FA7C ; [.3C03.0022.0002.585A][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C F96C ; [.3BFE.0021.0002.585E][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.3BFB.0021.0002.58A8][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A FA7D ; [.3BFC.0024.0002.58B3][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D F94A ; [.3BFA.0021.0002.58D8][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A F942 ; [.3BFA.0021.0002.58DF][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 2F85C ; [.3BFC.0032.0002.5906][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C 2F85D ; [.3BF8.0021.0002.591A][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D 2F85E ; [.3BFB.0021.0002.5922][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E FA7E ; [.3C00.0024.0002.5944][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.3BF7.0023.0002.5948][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.3BF5.0024.0002.5951][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.3BFC.0025.0002.5954][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.3BFE.0030.0002.5962][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.3BF7.0021.0002.5973][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 2F862 ; [.3C07.0026.0002.59EC][.3C86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 2F863 ; [.3C00.002C.0002.5A1B][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863 2F864 ; [.3C05.0030.0002.5A27][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864 FA80 ; [.3BFC.0027.0002.5A62][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F866 ; [.3BFC.002B.0002.5A66][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 2F986 ; [.3C00.0025.0002.5AB5][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 2F869 ; [.3C00.0041.0002.5B08][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869 FA81 ; [.3C01.003C.0002.5B28][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81 2F86A ; [.3BFA.0029.0002.5B3E][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B ; [.3BFA.0029.0002.5B3E][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B FA04 ; [.3BF8.0021.0002.5B85][.3C74.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 2F86D ; [.3C00.0029.0002.5BC3][.3C81.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D 2F86E ; [.3C03.003B.0002.5BD8][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E F95F ; [.3BF7.0021.0002.5BE7][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F F9AA ; [.3BF7.0021.0002.5BE7][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA 2F86F ; [.3BF7.0021.0002.5BE7][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F F9BC ; [.3BFA.0023.0002.5BEE][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC F9BD ; [.3BF7.0021.0002.5C3F][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.3BF8.0028.0002.5C60][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 F94B ; [.3BFA.0023.0002.5C62][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B FA3B ; [.3C03.0021.0002.5C64][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B F9DF ; [.3BFA.0026.0002.5C65][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF 2F879 ; [.3BFE.002A.0002.5CC0][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879 F9D5 ; [.3BFA.0023.0002.5D19][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 F921 ; [.3BFA.0021.0002.5D50][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 F9AB ; [.3BFA.0025.0002.5DBA][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB 2F881 ; [.3BFE.0021.0002.5DE1][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F882 ; [.3BFE.0027.0002.5DE2][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 2F884 ; [.3BFE.0022.0002.5DFD][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F885 ; [.3BFE.0029.0002.5E28][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885 2F886 ; [.3BFB.0025.0002.5E3D][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 F98E ; [.3BF7.0021.0002.5E74][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E FA01 ; [.3BF8.002B.0002.5EA6][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88C ; [.3BFC.0052.0002.5EB3][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D ; [.3BFE.0025.0002.5EB6][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.3BFA.0021.0002.5EC9][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.3BFA.0021.0002.5ECA][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.3BFA.0021.0002.5ECA][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA0B ; [.3BF5.0021.0002.5ED3][.3C7C.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B F982 ; [.3BFA.0025.0002.5EEC][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 F943 ; [.3BFA.0022.0002.5F04][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 2F894 ; [.3BF8.004B.0002.5F22][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894 2F895 ; [.3BF8.004B.0002.5F22][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895 2F899 ; [.3C07.0025.0002.5F62][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.3C03.0025.0002.5F69][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 2F89A ; [.3C01.0027.0002.5F6B][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A F9D8 ; [.3BFA.0021.0002.5F8B][.3C84.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 F966 ; [.3BFC.0026.0002.5FA9][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.3C00.0043.0002.5FAD][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F89D ; [.3C00.002A.0002.5FCD][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.3C01.0026.0002.5FD7][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.3BF7.0021.0002.5FF5][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 F960 ; [.3BF7.0024.0002.6012][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.3BFA.0026.0002.601C][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC 2F8A0 ; [.3C00.0042.0002.6081][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 FA3D ; [.3C07.0026.0002.6094][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.3C07.0026.0002.6094][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A5 ; [.3BF8.0022.0002.60C7][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 FA86 ; [.3BFB.002D.0002.60D8][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 F9B9 ; [.3C00.0025.0002.60E1][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 FA88 ; [.3C00.002E.0002.6108][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 F9D9 ; [.3BFA.0022.0002.6144][.3C84.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 2F8A6 ; [.3C01.002A.0002.6148][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.3C07.0027.0002.614C][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.3C07.0027.0002.614C][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA8A ; [.3C00.0047.0002.6160][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A FA3E ; [.3BF5.0028.0002.6168][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E 2F8AA ; [.3BFA.0031.0002.617A][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA FA3F ; [.3C01.0022.0002.618E][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.3C01.0022.0002.618E][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.3C01.0022.0002.618E][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB F98F ; [.3BFA.0021.0002.6190][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F 2F8AD ; [.3BFC.0028.0002.61A4][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AE ; [.3C03.0030.0002.61AF][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE 2F8AC ; [.3C07.0021.0002.61B2][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC 2F8AF ; [.3BFB.0025.0002.61DE][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF FA40 ; [.3C01.0022.0002.61F2][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 FA8B ; [.3C01.0022.0002.61F2][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B 2F8B0 ; [.3C01.0022.0002.61F2][.3C87.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 F90D ; [.3BFA.0022.0002.61F6][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D 2F8B1 ; [.3BFA.0022.0002.61F6][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 F990 ; [.3BFA.0022.0002.6200][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 2F8B2 ; [.3BFE.0026.0002.6210][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 F9D2 ; [.3BFA.0022.0002.622E][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.3BF8.0029.0002.6234][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F8B5 ; [.3C06.002B.0002.62B1][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.3BFA.0021.0002.62C9][.3C73.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 F95B ; [.3BF7.0024.0002.62CF][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B FA02 ; [.3C03.0026.0002.62D3][.3C77.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.3BFC.0022.0002.62D4][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 F973 ; [.3BFE.0022.0002.62FE][.3C85.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 2F8B9 ; [.3BFB.0027.0002.633D][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.3C00.0027.0002.6350][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 2F8BB ; [.3BFE.0039.0002.6368][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB F9A4 ; [.3BF7.0024.0002.637B][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 2F8BC ; [.3BFE.0029.0002.6383][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC F975 ; [.3BFA.0021.0002.63A0][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.3C00.0025.0002.63A9][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.3C00.0030.0002.63C4][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D FA8E ; [.3BFE.0030.0002.641C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E 2F8BF ; [.3C01.0025.0002.6422][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF 2F8C3 ; [.3BFB.0021.0002.6469][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 F991 ; [.3BF7.0022.0002.649A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 2F8C5 ; [.3C07.0029.0002.649D][.3C83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 F930 ; [.3BFA.0023.0002.64C4][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930 FA41 ; [.3BFB.0025.0002.654F][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.3BFB.0025.0002.654F][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.3C00.0030.0002.6556][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 2F8C9 ; [.3BF5.0030.0002.656C][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.3BFE.0032.0002.6578][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 F9BE ; [.3BFA.0025.0002.6599][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE F983 ; [.3BFA.0028.0002.65C5][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 2F8CB ; [.3BF5.0035.0002.65E3][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB F9E0 ; [.3C00.0024.0002.6613][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 2F8CD ; [.3C01.0026.0002.6649][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD FA12 ; [.3C03.0022.0002.6674][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.3C03.0022.0002.6674][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 F9C5 ; [.3C07.002A.0002.6688][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 FA43 ; [.3BFE.002B.0002.6691][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.3BFE.002B.0002.6691][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF FA06 ; [.3C06.0022.0002.66B4][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 F98B ; [.3BFA.0022.0002.66C6][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B F901 ; [.3BF5.0033.0002.66F4][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.3BFE.002D.0002.66F8][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.3C03.0023.0002.6700][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 F929 ; [.3BFA.0022.0002.6717][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.3BFA.0022.0002.6717][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.3BFA.0022.0002.6717][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.3BFB.0025.0002.671B][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.3BFB.0025.0002.671B][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 F9E1 ; [.3BFA.0028.0002.674E][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.3C06.0025.0002.6753][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.3C01.002E.0002.6756][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.3BF5.0038.0002.675E][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB F9C8 ; [.3BF7.0021.0002.677B][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8 F9F4 ; [.3BFA.0021.0002.6797][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.3BFA.0023.0002.67F3][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 F9DA ; [.3BFA.0023.0002.6817][.3C84.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA F97A ; [.3BFA.0025.0002.6881][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.3BFB.0027.0002.6885][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.3BFB.0027.0002.6885][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 F9E2 ; [.3BFA.0029.0002.68A8][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 2F8E8 ; [.3BFE.0062.0002.6942][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8EA ; [.3BF5.002A.0002.69EA][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA F914 ; [.3C00.0028.0002.6A02][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 F95C ; [.3C00.0028.0002.6A02][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C F9BF ; [.3C00.0028.0002.6A02][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF F94C ; [.3BFA.0024.0002.6A13][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C F931 ; [.3BFA.0024.0002.6AD3][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 2F8ED ; [.3C01.0021.0002.6ADB][.3C85.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED F91D ; [.3BFA.0023.0002.6B04][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D 2F8EF ; [.3C03.0028.0002.6B21][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F1 ; [.3C07.0025.0002.6B54][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 2F8F3 ; [.3BFE.0023.0002.6B72][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 F98C ; [.3BFA.0023.0002.6B77][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C F9A5 ; [.3BFA.0023.0002.6BAE][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5 F970 ; [.3BFE.0023.0002.6BBA][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 FA96 ; [.3BFE.0023.0002.6BBA][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 2F8F5 ; [.3BFE.0023.0002.6BBA][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8FA ; [.3BFC.0025.0002.6C4E][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA F972 ; [.3C03.0024.0002.6C88][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.3C00.002B.0002.6CBF][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.3C06.0024.0002.6CCC][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 F9E3 ; [.3BF7.0022.0002.6CE5][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 F915 ; [.3BFA.0021.0002.6D1B][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.3BF8.002A.0002.6D1E][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F900 ; [.3C06.0029.0002.6D3E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.3BFA.0025.0002.6D41][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.3BFA.0025.0002.6D41][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.3BFA.0025.0002.6D41][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.3C07.002E.0002.6D69][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.3BFA.0023.0002.6D6A][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.3C07.002A.0002.6D77][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.3C07.002A.0002.6D77][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.3C03.0025.0002.6D78][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.3C00.0022.0002.6D85][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.3BFA.0022.0002.6DCB][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 F94D ; [.3BFA.0025.0002.6DDA][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D F9D6 ; [.3BFA.0024.0002.6DEA][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 2F90E ; [.3C00.0026.0002.6DF9][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.3C01.002C.0002.6E1A][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.3C07.002B.0002.6E2F][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.3C00.002B.0002.6E6E][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 F9CB ; [.3BFA.0026.0002.6E9C][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.3BF7.0022.0002.6EBA][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC FA99 ; [.3C01.002B.0002.6ECB][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.3C01.002B.0002.6ECB][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.3C07.0022.0002.6ED1][.3C7C.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 F94E ; [.3BFA.0026.0002.6F0F][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E FA47 ; [.3C07.0026.0002.6F22][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 FA9A ; [.3C07.0026.0002.6F22][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A F992 ; [.3BFA.0024.0002.6F23][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 2F90F ; [.3C01.0033.0002.6F6E][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F912 ; [.3BFC.003C.0002.6FC6][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 F922 ; [.3BFA.0025.0002.6FEB][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 F984 ; [.3BFA.002A.0002.6FFE][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 2F915 ; [.3C00.002D.0002.701B][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 FA9B ; [.3C01.003D.0002.701E][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F914 ; [.3C01.003D.0002.701E][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914 2F835 ; [.3C07.002D.0002.7070][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 2F918 ; [.3C01.002B.0002.707D][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.3C01.002C.0002.7099][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.3C05.0028.0002.70AD][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A F99F ; [.3BFA.0025.0002.70C8][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.3BFA.0022.0002.70D9][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 F993 ; [.3BFA.0025.0002.7149][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 FA48 ; [.3C01.002D.0002.716E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.3C01.002D.0002.716E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C F9C0 ; [.3BFA.0026.0002.71CE][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 F9EE ; [.3BFA.0023.0002.71D0][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE F932 ; [.3BFA.0027.0002.7210][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 F91E ; [.3BFA.0026.0002.721B][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F920 ; [.3C03.0036.0002.7228][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 FA9E ; [.3C01.0028.0002.7235][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.3C01.0028.0002.7235][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 F946 ; [.3BFA.0023.0002.7262][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 2F924 ; [.3BFE.0030.0002.7280][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 FA9F ; [.3BFC.0027.0002.72AF][.3C77.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F F9FA ; [.3BFE.0035.0002.72C0][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA F92B ; [.3BFA.0024.0002.72FC][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B FA16 ; [.3C01.002E.0002.732A][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 FAA0 ; [.3C01.002E.0002.732A][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 F9A7 ; [.3BFA.0021.0002.7375][.3C79.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 2F928 ; [.3BF8.0023.0002.737A][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 F961 ; [.3BFE.0021.0002.7387][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.3BFE.0021.0002.7387][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F929 ; [.3C00.0025.0002.738B][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 F9AD ; [.3BFA.0027.0002.73B2][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.3BFA.0023.0002.73DE][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.3BFA.002D.0002.7406][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.3BFA.0028.0002.7409][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.3C05.002B.0002.7422][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92F ; [.3C00.003D.0002.745C][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F F9AE ; [.3C07.002D.0002.7469][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE FAA1 ; [.3C01.0057.0002.7471][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1 2F930 ; [.3C01.0057.0002.7471][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930 F994 ; [.3BFA.0026.0002.7489][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994 F9EF ; [.3BFA.0024.0002.7498][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF 2F932 ; [.3BF5.003A.0002.74CA][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 F9CD ; [.3BFA.002A.0002.7559][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.3BFA.0022.0002.7565][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.3C00.002C.0002.7570][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.3C00.002C.0002.7570][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 F9E5 ; [.3BFA.002F.0002.75E2][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.3C00.0059.0002.7610][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A FAA5 ; [.3C00.0023.0002.761F][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 F9C1 ; [.3BFA.0027.0002.7642][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 F90E ; [.3BFA.0023.0002.7669][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E FA17 ; [.3C00.0022.0002.76CA][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.3C00.0022.0002.76CA][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7 ; [.3BFE.002B.0002.76DB][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 F933 ; [.3BFA.0028.0002.76E7][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 FAA8 ; [.3C01.0021.0002.76F4][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.3C01.0021.0002.76F4][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.3BFE.002C.0002.7701][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F945 ; [.3C01.0033.0002.771E][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945 FAAA ; [.3C03.0023.0002.7740][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA 2F94A ; [.3C01.0034.0002.778B][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A F9CE ; [.3BFA.002C.0002.786B][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.3BFA.0021.0002.788C][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.3BFA.0021.0002.788C][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.3BFC.0038.0002.7891][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.3BFA.0024.0002.78CA][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 F964 ; [.3BFC.0032.0002.78FB][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964 F985 ; [.3BFA.002B.0002.792A][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 FA4C ; [.3BFE.0046.0002.793E][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C FA4E ; [.3BF5.004C.0002.7948][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.3C01.0035.0002.7949][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA4F ; [.3C00.0032.0002.7950][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.3C01.0039.0002.7956][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.3C01.0039.0002.7956][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.3C03.0023.0002.795D][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 FA19 ; [.3BFE.002C.0002.795E][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.3BFE.0037.0002.7965][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A F93C ; [.3BFA.0022.0002.797F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C FA52 ; [.3C07.0027.0002.798D][.3C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 FA53 ; [.3C01.0044.0002.798E][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 FA1B ; [.3BFC.0028.0002.798F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.3BFC.0028.0002.798F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 F9B6 ; [.3BFA.0023.0002.79AE][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 F995 ; [.3BF7.0023.0002.79CA][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995 2F957 ; [.3C03.0024.0002.79EB][.3C80.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 F956 ; [.3BFA.0023.0002.7A1C][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 FA54 ; [.3BF5.0025.0002.7A40][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 2F959 ; [.3BF5.0025.0002.7A40][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 FA55 ; [.3BF8.0022.0002.7A81][.3C7B.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 F9F7 ; [.3BFA.0022.0002.7ACB][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 F9F8 ; [.3BFA.0023.0002.7B20][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 FA56 ; [.3C01.0027.0002.7BC0][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 FAAD ; [.3C01.0027.0002.7BC0][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD 2F962 ; [.3C01.003D.0002.7BC6][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 2F963 ; [.3C03.0026.0002.7BC9][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 F9A6 ; [.3BFA.0025.0002.7C3E][.3C79.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 F944 ; [.3BFA.0026.0002.7C60][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 F9F9 ; [.3BFA.0024.0002.7C92][.3C87.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.3C01.0047.0002.7CBE][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D FA03 ; [.3BF8.0029.0002.7CD6][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 F97B ; [.3BFA.0029.0002.7CE7][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B 2F96A ; [.3BF5.004F.0002.7D00][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A F9CF ; [.3BF7.0022.0002.7D10][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF F96A ; [.3BFE.0023.0002.7D22][.3C74.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.3BFA.0028.0002.7D2F][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F FAAF ; [.3C01.0063.0002.7D5B][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF 2F96C ; [.3BFC.0034.0002.7D63][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C F93D ; [.3BFA.0023.0002.7DA0][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D F957 ; [.3BFA.0024.0002.7DBE][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 2F96E ; [.3C03.0030.0002.7DC7][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E F996 ; [.3BFA.0027.0002.7DF4][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 FA57 ; [.3BFA.0027.0002.7DF4][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 FAB0 ; [.3BFA.0027.0002.7DF4][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 FA58 ; [.3C01.0036.0002.7E09][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 F950 ; [.3BFA.0029.0002.7E37][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 FA59 ; [.3BFC.0026.0002.7E41][.3C77.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 2F970 ; [.3BFE.0052.0002.7E45][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970 FAB1 ; [.3BFC.0035.0002.7F3E][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1 FA5A ; [.3BFE.0035.0002.7F72][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.3BFA.0031.0002.7F79][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 F90F ; [.3BFA.0024.0002.7F85][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F F9AF ; [.3BFA.0029.0002.7F9A][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.3C00.0036.0002.7FBD][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E 2F979 ; [.3BF5.005A.0002.7FFA][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979 F934 ; [.3BFA.0029.0002.8001][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 FA5B ; [.3C01.0033.0002.8005][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.3C01.0033.0002.8005][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.3C01.0033.0002.8005][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A F9B0 ; [.3BFA.002B.0002.8046][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 F997 ; [.3BFA.0028.0002.806F][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.3C03.0028.0002.8070][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.3BFA.0027.0002.807E][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 F953 ; [.3BFA.0022.0002.808B][.3C85.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.3BF7.0023.0002.80AD][.3C80.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.3C00.0024.0002.80B2][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F985 ; [.3BFC.003F.0002.813E][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 F926 ; [.3BFA.0022.0002.81D8][.3C73.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 F9F6 ; [.3BFA.0024.0002.81E8][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 FA5C ; [.3C03.002A.0002.81ED][.3C83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F893 ; [.3C00.002E.0002.8201][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.3C00.002E.0002.8201][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B F97C ; [.3BFA.002A.0002.826F][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C 2F990 ; [.3C00.0037.0002.828B][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F991 ; [.3C01.003B.0002.829D][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.3C07.0029.0002.82B1][.3C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.3BFC.0035.0002.82B3][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.3C00.0029.0002.82BD][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.3C00.0023.0002.82E5][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.3C00.0023.0002.82E5][.3C75.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.3BF5.003A.0002.82E6][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 2F999 ; [.3C03.002E.0002.831D][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999 2F99C ; [.3C00.004C.0002.8323][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C F9FE ; [.3BF8.0022.0002.8336][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.3C07.0034.0002.8352][.3C7C.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F99D ; [.3BFB.002A.0002.83BD][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D F93E ; [.3BFA.0024.0002.83C9][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E 2F9A1 ; [.3BF5.0023.0002.83CA][.3C80.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.3BF5.0025.0002.83CC][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.3C03.0029.0002.83DC][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 FAB4 ; [.3C07.002A.0002.83EF][.3C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 F958 ; [.3BFA.0025.0002.83F1][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.3BFA.0025.0002.843D][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 F96E ; [.3C00.0023.0002.8449][.3C79.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E FA5F ; [.3C01.0034.0002.8457][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.3C01.0034.0002.8457][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F F999 ; [.3BFA.0029.0002.84EE][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 2F9A8 ; [.3C06.002A.0002.84F1][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 F9C2 ; [.3BFA.002A.0002.84FC][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 2F9AC ; [.3C00.0062.0002.8564][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC F923 ; [.3BFA.0028.0002.85CD][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 F9F0 ; [.3BFA.0025.0002.85FA][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 F935 ; [.3BFA.002A.0002.8606][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 F91F ; [.3BFA.0027.0002.862D][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F F910 ; [.3BFA.0025.0002.863F][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 2F9B3 ; [.3C07.0023.0002.8650][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 F936 ; [.3BFA.002B.0002.865C][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 2F9B4 ; [.3BFA.002B.0002.865C][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5 ; [.3C07.0025.0002.8667][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B7 ; [.3C03.0034.0002.86A9][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 2F9BC ; [.3C01.0026.0002.8728][.3C77.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC F911 ; [.3BFA.0026.0002.87BA][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 F927 ; [.3BFA.0023.0002.881F][.3C73.0020.0002][.3CE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927 FA08 ; [.3C07.0025.0002.884C][.3C74.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F9C4 ; [.3C00.0030.0002.8863][.3C86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 F9A0 ; [.3BFA.0026.0002.88C2][.3C79.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 F9E7 ; [.3BFA.0034.0002.88CF][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7 F9E8 ; [.3BFA.0035.0002.88E1][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 F912 ; [.3BFA.0027.0002.88F8][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 FA60 ; [.3BF5.0028.0002.8910][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.3BF5.0034.0002.8941][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 F924 ; [.3BFA.0029.0002.8964][.3C73.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 FAB7 ; [.3BFC.002D.0002.8986][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 FA0A ; [.3BF5.0028.0002.898B][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A FA61 ; [.3BFE.0037.0002.8996][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 FAB8 ; [.3BFE.0037.0002.8996][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2F9CF ; [.3BFE.0031.0002.8AA0][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF F96F ; [.3BFE.002B.0002.8AAA][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F F9A1 ; [.3BFE.002B.0002.8AAA][.3C77.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1 FAB9 ; [.3C01.0046.0002.8ABF][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 FABB ; [.3C03.0026.0002.8ACB][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB F97D ; [.3BFA.002B.0002.8AD2][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D F941 ; [.3BFA.0021.0002.8AD6][.3C7B.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 FABE ; [.3C00.0046.0002.8AED][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE 2F9D0 ; [.3C00.0046.0002.8AED][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 FA22 ; [.3C01.0030.0002.8AF8][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 FABA ; [.3C01.0030.0002.8AF8][.3C78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA F95D ; [.3BF7.0021.0002.8AFE][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D FABD ; [.3BF7.0021.0002.8AFE][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD FA62 ; [.3C00.0022.0002.8B01][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 FABC ; [.3C00.0022.0002.8B01][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC FA63 ; [.3BF5.002D.0002.8B39][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 FABF ; [.3BF5.002D.0002.8B39][.3C85.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF F9FC ; [.3BFE.002C.0002.8B58][.3C87.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC F95A ; [.3BF8.002A.0002.8B80][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A FAC0 ; [.3BFC.0023.0002.8B8A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 2F9D1 ; [.3BFC.0023.0002.8B8A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 F900 ; [.3BF5.0057.0002.8C48][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 2F9D2 ; [.3BFE.003B.0002.8C55][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D4 ; [.3BF5.002E.0002.8CAB][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.3BFC.0032.0002.8CC1][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.3BFA.0025.0002.8CC2][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 F903 ; [.3BF5.0039.0002.8CC8][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.3BFC.002D.0002.8CD3][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 FA65 ; [.3C01.002B.0002.8D08][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 FAC1 ; [.3C01.002B.0002.8D08][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 2F9D6 ; [.3BF5.0039.0002.8D1B][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 2F9D7 ; [.3BF5.0058.0002.8D77][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9DA ; [.3BFC.0027.0002.8DCB][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.3BFA.002C.0002.8DEF][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 F902 ; [.3C03.002D.0002.8ECA][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 F998 ; [.3BFA.002A.0002.8F26][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 F9D7 ; [.3BFA.0026.0002.8F2A][.3C84.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 FAC2 ; [.3BFE.004F.0002.8F38][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 2F9DF ; [.3BFE.004F.0002.8F38][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF FA07 ; [.3BFC.002F.0002.8F3B][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 F98D ; [.3BFA.0026.0002.8F62][.3C79.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D F971 ; [.3C01.003E.0002.8FB0][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 F99A ; [.3BFA.002B.0002.9023][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.3C00.0027.0002.9038][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.3C00.0027.0002.9038][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 FAC3 ; [.3C01.0041.0002.9072][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.3BFA.002B.0002.907C][.3C7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.3BFA.0028.0002.908F][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 FA2E ; [.3BFA.0028.0002.90DE][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E FA26 ; [.3BF8.0045.0002.90FD][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 F919 ; [.3BFA.0026.0002.916A][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 F9B7 ; [.3BFA.0024.0002.91B4][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 F9E9 ; [.3BFA.0036.0002.91CC][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.3BFA.002D.0002.91CF][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.3BF5.0021.0002.91D1][.3C87.0020.0002][.3CE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A F9B1 ; [.3BFA.002D.0002.9234][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9E7 ; [.3BFC.002F.0002.9238][.3C73.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 2F9EA ; [.3BFC.0039.0002.927C][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA 2F9E8 ; [.3C07.003F.0002.92D7][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 F93F ; [.3BFA.0025.0002.9304][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F F99B ; [.3BFA.002C.0002.934A][.3C79.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B 2F9EE ; [.3BF5.0033.0002.958B][.3C74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE F986 ; [.3BFA.002E.0002.95AD][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 F9C6 ; [.3C00.0031.0002.962E][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.3BFA.002D.0002.964B][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.3BF5.0037.0002.964D][.3C73.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.3BFA.0026.0002.9675][.3C85.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 F9D3 ; [.3BFA.0023.0002.9678][.3C84.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 FAC6 ; [.3C01.004E.0002.967C][.3C77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6 F9DC ; [.3BFA.0021.0002.9686][.3C84.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9F1 ; [.3BFA.0027.0002.96A3][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1 FA2F ; [.3BFA.0025.0002.96B7][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F F9B8 ; [.3BFA.0026.0002.96B8][.3C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 F9EA ; [.3BFA.0038.0002.96E2][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.3BF7.0023.0002.96E3][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.3BF7.0023.0002.96E3][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 F9B2 ; [.3BFA.002E.0002.96F6][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.3BFA.0028.0002.96F7][.3C7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 2F9F5 ; [.3C00.0031.0002.9723][.3C80.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 F938 ; [.3BFA.002E.0002.9732][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 F9B3 ; [.3BFA.002F.0002.9748][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 FA1C ; [.3C01.0054.0002.9756][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.3C01.0054.0002.9756][.3C77.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 2F9FA ; [.3C06.0034.0002.97E0][.3C87.0020.0002][.3CD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA FA69 ; [.3C07.0026.0002.97FF][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 FACA ; [.3C07.0026.0002.97FF][.3C75.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA F9B4 ; [.3BFA.0030.0002.9818][.3C79.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 FA6A ; [.3BFC.002E.0002.983B][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A FACC ; [.3BFC.002E.0002.983B][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC F9D0 ; [.3BFA.002E.0002.985E][.3C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2FA02 ; [.3BF5.005B.0002.98E2][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.3BFC.0039.0002.98EF][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.3BFE.005A.0002.98FC][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C ; [.3BF5.0030.0002.9928][.3C7C.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C F91A ; [.3BFA.0027.0002.99F1][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A F987 ; [.3BFA.0030.0002.9A6A][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 FACD ; [.3C01.004C.0002.9B12][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD 2FA0A ; [.3C01.004C.0002.9B12][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A F939 ; [.3BFA.002F.0002.9B6F][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 F9F2 ; [.3BFA.0028.0002.9C57][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 FA2D ; [.3C07.0025.0002.9DB4][.3C73.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D F93A ; [.3BFA.0030.0002.9DFA][.3C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.3BFA.0028.0002.9E1E][.3C73.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 F940 ; [.3BFA.0026.0002.9E7F][.3C7B.0020.0002][.3CD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 F988 ; [.3BFA.0031.0002.9E97][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 F9F3 ; [.3BFA.0029.0002.9E9F][.3C87.0020.0002][.3CD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FA15 ; [.3BFB.0028.0002.9EBB][.3C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 F989 ; [.3BFA.0032.0002.9ECE][.3C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 2FA1C ; [.3BFC.004A.0002.9F3B][.3C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C F9C4 ; [.3BFA.0021.0002.9F8D][.3C7F.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 FAD9 ; [.3BFA.002E.0002.9F8E][.3C7B.0020.0002][.3CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9 F907 ; [.3BF5.0056.0002.9F9C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.3BF5.0056.0002.9F9C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.3BF5.0056.0002.9F9C][.3C80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE ENTRY }; Unicode/Collate/Locale/de_phone.pl 0000644 00000004653 15037233321 0013041 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00E4 ; [.1C47.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1C47.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1C47.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1C47.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1C47.0021.0002][.1CAA.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1C47.0021.0008][.1CAA.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00F6 ; [.1DDD.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1DDD.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1DDD.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1DDD.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1DDD.0021.0002][.1CAA.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1DDD.0021.0008][.1CAA.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00FC ; [.1EB5.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB5.0021.0002][.1CAA.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB5.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB5.0021.0008][.1CAA.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1EB5.0021.0002][.1CAA.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0021.0008][.1CAA.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ENTRY }; Unicode/Collate/Locale/de_at_ph.pl 0000644 00000004255 15037233322 0013022 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00E4 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1C48.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1C48.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 00DF ; [.1E71.0020.0002][.1E72.0020.0002] # LATIN SMALL LETTER SHARP S 1E9E ; [.1E71.0020.0008][.1E72.0020.0008] # LATIN CAPITAL LETTER SHARP S ENTRY }; Unicode/Collate/Locale/ja.pl 0000644 00000611243 15037233322 0011652 0 ustar 00 use Unicode::Collate::CJK::JISX0208; +{ locale_version => 1.25, overrideCJK => \&Unicode::Collate::CJK::JISX0208::weightJISX0208, entry => <<'ENTRY', # for DUCET v9.0.0 30A1 ; [.3D5A.0020.000F.0002] # KATAKANA LETTER SMALL A 30A2 ; [.3D5A.0020.0011.0002] # KATAKANA LETTER A 30A3 ; [.3D5B.0020.000F.0002] # KATAKANA LETTER SMALL I 30A4 ; [.3D5B.0020.0011.0002] # KATAKANA LETTER I 30A5 ; [.3D5C.0020.000F.0002] # KATAKANA LETTER SMALL U 30A6 ; [.3D5C.0020.0011.0002] # KATAKANA LETTER U 30A7 ; [.3D5E.0020.000F.0002] # KATAKANA LETTER SMALL E 30A8 ; [.3D5E.0020.0011.0002] # KATAKANA LETTER E 30A9 ; [.3D5F.0020.000F.0002] # KATAKANA LETTER SMALL O 30AA ; [.3D5F.0020.0011.0002] # KATAKANA LETTER O 30AB ; [.3D60.0020.0011.0002] # KATAKANA LETTER KA 30AC ; [.3D60.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GA 30AD ; [.3D61.0020.0011.0002] # KATAKANA LETTER KI 30AE ; [.3D61.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GI 30AF ; [.3D62.0020.0011.0002] # KATAKANA LETTER KU 30B0 ; [.3D62.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GU 30B1 ; [.3D63.0020.0011.0002] # KATAKANA LETTER KE 30B2 ; [.3D63.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GE 30B3 ; [.3D64.0020.0011.0002] # KATAKANA LETTER KO 30B4 ; [.3D64.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GO 30B5 ; [.3D65.0020.0011.0002] # KATAKANA LETTER SA 30B6 ; [.3D65.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZA 30B7 ; [.3D66.0020.0011.0002] # KATAKANA LETTER SI 30B8 ; [.3D66.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZI 30B9 ; [.3D67.0020.0011.0002] # KATAKANA LETTER SU 30BA ; [.3D67.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZU 30BB ; [.3D68.0020.0011.0002] # KATAKANA LETTER SE 30BC ; [.3D68.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZE 30BD ; [.3D69.0020.0011.0002] # KATAKANA LETTER SO 30BE ; [.3D69.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZO 30BF ; [.3D6A.0020.0011.0002] # KATAKANA LETTER TA 30C0 ; [.3D6A.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DA 30C1 ; [.3D6B.0020.0011.0002] # KATAKANA LETTER TI 30C2 ; [.3D6B.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DI 30C3 ; [.3D6C.0020.000F.0002] # KATAKANA LETTER SMALL TU 30C4 ; [.3D6C.0020.0011.0002] # KATAKANA LETTER TU 30C5 ; [.3D6C.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DU 30C6 ; [.3D6D.0020.0011.0002] # KATAKANA LETTER TE 30C7 ; [.3D6D.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DE 30C8 ; [.3D6E.0020.0011.0002] # KATAKANA LETTER TO 30C9 ; [.3D6E.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DO 30CA ; [.3D6F.0020.0011.0002] # KATAKANA LETTER NA 30CB ; [.3D70.0020.0011.0002] # KATAKANA LETTER NI 30CC ; [.3D71.0020.0011.0002] # KATAKANA LETTER NU 30CD ; [.3D72.0020.0011.0002] # KATAKANA LETTER NE 30CE ; [.3D73.0020.0011.0002] # KATAKANA LETTER NO 30CF ; [.3D74.0020.0011.0002] # KATAKANA LETTER HA 30D0 ; [.3D74.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BA 30D1 ; [.3D74.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PA 30D2 ; [.3D75.0020.0011.0002] # KATAKANA LETTER HI 30D3 ; [.3D75.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BI 30D4 ; [.3D75.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PI 30D5 ; [.3D76.0020.0011.0002] # KATAKANA LETTER HU 30D6 ; [.3D76.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BU 30D7 ; [.3D76.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PU 30D8 ; [.3D77.0020.0011.0002] # KATAKANA LETTER HE 30D9 ; [.3D77.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BE 30DA ; [.3D77.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PE 30DB ; [.3D78.0020.0011.0002] # KATAKANA LETTER HO 30DC ; [.3D78.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BO 30DD ; [.3D78.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PO 30DE ; [.3D79.0020.0011.0002] # KATAKANA LETTER MA 30DF ; [.3D7A.0020.0011.0002] # KATAKANA LETTER MI 30E0 ; [.3D7B.0020.0011.0002] # KATAKANA LETTER MU 30E1 ; [.3D7C.0020.0011.0002] # KATAKANA LETTER ME 30E2 ; [.3D7D.0020.0011.0002] # KATAKANA LETTER MO 30E3 ; [.3D7E.0020.000F.0002] # KATAKANA LETTER SMALL YA 30E4 ; [.3D7E.0020.0011.0002] # KATAKANA LETTER YA 30E5 ; [.3D7F.0020.000F.0002] # KATAKANA LETTER SMALL YU 30E6 ; [.3D7F.0020.0011.0002] # KATAKANA LETTER YU 30E7 ; [.3D81.0020.000F.0002] # KATAKANA LETTER SMALL YO 30E8 ; [.3D81.0020.0011.0002] # KATAKANA LETTER YO 30E9 ; [.3D82.0020.0011.0002] # KATAKANA LETTER RA 30EA ; [.3D83.0020.0011.0002] # KATAKANA LETTER RI 30EB ; [.3D84.0020.0011.0002] # KATAKANA LETTER RU 30EC ; [.3D85.0020.0011.0002] # KATAKANA LETTER RE 30ED ; [.3D86.0020.0011.0002] # KATAKANA LETTER RO 30EE ; [.3D87.0020.000F.0002] # KATAKANA LETTER SMALL WA 30EF ; [.3D87.0020.0011.0002] # KATAKANA LETTER WA 30F0 ; [.3D88.0020.0011.0002] # KATAKANA LETTER WI 30F1 ; [.3D89.0020.0011.0002] # KATAKANA LETTER WE 30F2 ; [.3D8A.0020.0011.0002] # KATAKANA LETTER WO 30F3 ; [.3D8B.0020.0011.0002] # KATAKANA LETTER N 30F4 ; [.3D5C.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VU 30F5 ; [.3D60.0020.000F.0002] # KATAKANA LETTER SMALL KA 30F6 ; [.3D63.0020.000F.0002] # KATAKANA LETTER SMALL KE 30F7 ; [.3D87.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VA 30F8 ; [.3D88.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VI 30F9 ; [.3D89.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VE 30FA ; [.3D8A.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VO 30FD ; [.1C0F.0020.0002.0002] # KATAKANA ITERATION MARK 30FE ; [.1C0F.0020.0002.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK 3041 ; [.3D5A.0020.000F.0001] # HIRAGANA LETTER SMALL A 3042 ; [.3D5A.0020.0011.0001] # HIRAGANA LETTER A 3043 ; [.3D5B.0020.000F.0001] # HIRAGANA LETTER SMALL I 3044 ; [.3D5B.0020.0011.0001] # HIRAGANA LETTER I 3045 ; [.3D5C.0020.000F.0001] # HIRAGANA LETTER SMALL U 3046 ; [.3D5C.0020.0011.0001] # HIRAGANA LETTER U 3047 ; [.3D5E.0020.000F.0001] # HIRAGANA LETTER SMALL E 3048 ; [.3D5E.0020.0011.0001] # HIRAGANA LETTER E 3049 ; [.3D5F.0020.000F.0001] # HIRAGANA LETTER SMALL O 304A ; [.3D5F.0020.0011.0001] # HIRAGANA LETTER O 304B ; [.3D60.0020.0011.0001] # HIRAGANA LETTER KA 304C ; [.3D60.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GA 304D ; [.3D61.0020.0011.0001] # HIRAGANA LETTER KI 304E ; [.3D61.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GI 304F ; [.3D62.0020.0011.0001] # HIRAGANA LETTER KU 3050 ; [.3D62.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GU 3051 ; [.3D63.0020.0011.0001] # HIRAGANA LETTER KE 3052 ; [.3D63.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GE 3053 ; [.3D64.0020.0011.0001] # HIRAGANA LETTER KO 3054 ; [.3D64.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GO 3055 ; [.3D65.0020.0011.0001] # HIRAGANA LETTER SA 3056 ; [.3D65.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZA 3057 ; [.3D66.0020.0011.0001] # HIRAGANA LETTER SI 3058 ; [.3D66.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZI 3059 ; [.3D67.0020.0011.0001] # HIRAGANA LETTER SU 305A ; [.3D67.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZU 305B ; [.3D68.0020.0011.0001] # HIRAGANA LETTER SE 305C ; [.3D68.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZE 305D ; [.3D69.0020.0011.0001] # HIRAGANA LETTER SO 305E ; [.3D69.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZO 305F ; [.3D6A.0020.0011.0001] # HIRAGANA LETTER TA 3060 ; [.3D6A.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DA 3061 ; [.3D6B.0020.0011.0001] # HIRAGANA LETTER TI 3062 ; [.3D6B.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DI 3063 ; [.3D6C.0020.000F.0001] # HIRAGANA LETTER SMALL TU 3064 ; [.3D6C.0020.0011.0001] # HIRAGANA LETTER TU 3065 ; [.3D6C.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DU 3066 ; [.3D6D.0020.0011.0001] # HIRAGANA LETTER TE 3067 ; [.3D6D.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DE 3068 ; [.3D6E.0020.0011.0001] # HIRAGANA LETTER TO 3069 ; [.3D6E.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DO 306A ; [.3D6F.0020.0011.0001] # HIRAGANA LETTER NA 306B ; [.3D70.0020.0011.0001] # HIRAGANA LETTER NI 306C ; [.3D71.0020.0011.0001] # HIRAGANA LETTER NU 306D ; [.3D72.0020.0011.0001] # HIRAGANA LETTER NE 306E ; [.3D73.0020.0011.0001] # HIRAGANA LETTER NO 306F ; [.3D74.0020.0011.0001] # HIRAGANA LETTER HA 3070 ; [.3D74.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BA 3071 ; [.3D74.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PA 3072 ; [.3D75.0020.0011.0001] # HIRAGANA LETTER HI 3073 ; [.3D75.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BI 3074 ; [.3D75.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PI 3075 ; [.3D76.0020.0011.0001] # HIRAGANA LETTER HU 3076 ; [.3D76.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BU 3077 ; [.3D76.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PU 3078 ; [.3D77.0020.0011.0001] # HIRAGANA LETTER HE 3079 ; [.3D77.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BE 307A ; [.3D77.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PE 307B ; [.3D78.0020.0011.0001] # HIRAGANA LETTER HO 307C ; [.3D78.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BO 307D ; [.3D78.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PO 307E ; [.3D79.0020.0011.0001] # HIRAGANA LETTER MA 307F ; [.3D7A.0020.0011.0001] # HIRAGANA LETTER MI 3080 ; [.3D7B.0020.0011.0001] # HIRAGANA LETTER MU 3081 ; [.3D7C.0020.0011.0001] # HIRAGANA LETTER ME 3082 ; [.3D7D.0020.0011.0001] # HIRAGANA LETTER MO 3083 ; [.3D7E.0020.000F.0001] # HIRAGANA LETTER SMALL YA 3084 ; [.3D7E.0020.0011.0001] # HIRAGANA LETTER YA 3085 ; [.3D7F.0020.000F.0001] # HIRAGANA LETTER SMALL YU 3086 ; [.3D7F.0020.0011.0001] # HIRAGANA LETTER YU 3087 ; [.3D81.0020.000F.0001] # HIRAGANA LETTER SMALL YO 3088 ; [.3D81.0020.0011.0001] # HIRAGANA LETTER YO 3089 ; [.3D82.0020.0011.0001] # HIRAGANA LETTER RA 308A ; [.3D83.0020.0011.0001] # HIRAGANA LETTER RI 308B ; [.3D84.0020.0011.0001] # HIRAGANA LETTER RU 308C ; [.3D85.0020.0011.0001] # HIRAGANA LETTER RE 308D ; [.3D86.0020.0011.0001] # HIRAGANA LETTER RO 308E ; [.3D87.0020.000F.0001] # HIRAGANA LETTER SMALL WA 308F ; [.3D87.0020.0011.0001] # HIRAGANA LETTER WA 3090 ; [.3D88.0020.0011.0001] # HIRAGANA LETTER WI 3091 ; [.3D89.0020.0011.0001] # HIRAGANA LETTER WE 3092 ; [.3D8A.0020.0011.0001] # HIRAGANA LETTER WO 3093 ; [.3D8B.0020.0011.0001] # HIRAGANA LETTER N 3094 ; [.3D5C.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER VU 3095 ; [.3D60.0020.000F.0001] # HIRAGANA LETTER SMALL KA 3096 ; [.3D63.0020.000F.0001] # HIRAGANA LETTER SMALL KE 309D ; [.1C0F.0020.0002.0001] # HIRAGANA ITERATION MARK 309E ; [.1C0F.0020.0002.0001][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK 3000 ; [*0209.0020.0002] # IDEOGRAPHIC SPACE FF01 ; [*0260.0020.0002] # FULLWIDTH EXCLAMATION MARK FF02 ; [*030C.0020.0002] # FULLWIDTH QUOTATION MARK FF03 ; [*0398.0020.0002] # FULLWIDTH NUMBER SIGN FF04 ; [.1C12.0020.0002] # FULLWIDTH DOLLAR SIGN FF05 ; [*0399.0020.0002] # FULLWIDTH PERCENT SIGN FF06 ; [*0396.0020.0002] # FULLWIDTH AMPERSAND FF07 ; [*0305.0020.0002] # FULLWIDTH APOSTROPHE FF08 ; [*0317.0020.0002] # FULLWIDTH LEFT PARENTHESIS FF09 ; [*0318.0020.0002] # FULLWIDTH RIGHT PARENTHESIS FF0A ; [*038F.0020.0002] # FULLWIDTH ASTERISK FF0B ; [*0616.0020.0002] # FULLWIDTH PLUS SIGN FF0C ; [*0222.0020.0002] # FULLWIDTH COMMA FF0D ; [*020D.0020.0002] # FULLWIDTH HYPHEN-MINUS FF0E ; [*0277.0020.0002] # FULLWIDTH FULL STOP FF0F ; [*0394.0020.0002] # FULLWIDTH SOLIDUS FF10 ; [.1C3D.0020.0002] # FULLWIDTH DIGIT ZERO FF11 ; [.1C3E.0020.0002] # FULLWIDTH DIGIT ONE FF12 ; [.1C3F.0020.0002] # FULLWIDTH DIGIT TWO FF13 ; [.1C40.0020.0002] # FULLWIDTH DIGIT THREE FF14 ; [.1C41.0020.0002] # FULLWIDTH DIGIT FOUR FF15 ; [.1C42.0020.0002] # FULLWIDTH DIGIT FIVE FF16 ; [.1C43.0020.0002] # FULLWIDTH DIGIT SIX FF17 ; [.1C44.0020.0002] # FULLWIDTH DIGIT SEVEN FF18 ; [.1C45.0020.0002] # FULLWIDTH DIGIT EIGHT FF19 ; [.1C46.0020.0002] # FULLWIDTH DIGIT NINE FF1A ; [*0239.0020.0002] # FULLWIDTH COLON FF1B ; [*0234.0020.0002] # FULLWIDTH SEMICOLON FF1C ; [*061A.0020.0002] # FULLWIDTH LESS-THAN SIGN FF1D ; [*061B.0020.0002] # FULLWIDTH EQUALS SIGN FF1E ; [*061C.0020.0002] # FULLWIDTH GREATER-THAN SIGN FF1F ; [*0266.0020.0002] # FULLWIDTH QUESTION MARK FF20 ; [*038E.0020.0002] # FULLWIDTH COMMERCIAL AT FF21 ; [.1C47.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER A FF22 ; [.1C60.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER B FF23 ; [.1C7A.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER C FF24 ; [.1C8F.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER D FF25 ; [.1CAA.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER E FF26 ; [.1CE5.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER F FF27 ; [.1CF4.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER G FF28 ; [.1D18.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER H FF29 ; [.1D32.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER I FF2A ; [.1D4C.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER J FF2B ; [.1D65.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER K FF2C ; [.1D77.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER L FF2D ; [.1DAA.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER M FF2E ; [.1DB9.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER N FF2F ; [.1DDD.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER O FF30 ; [.1E0C.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER P FF31 ; [.1E21.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Q FF32 ; [.1E33.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER R FF33 ; [.1E71.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER S FF34 ; [.1E95.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER T FF35 ; [.1EB5.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER U FF36 ; [.1EE3.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER V FF37 ; [.1EF5.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER W FF38 ; [.1EFF.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER X FF39 ; [.1F0B.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Y FF3A ; [.1F21.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Z FF3B ; [*0319.0020.0002] # FULLWIDTH LEFT SQUARE BRACKET FF3C ; [*0305.0020.0002] # FULLWIDTH REVERSE SOLIDUS FF3D ; [*031A.0020.0002] # FULLWIDTH RIGHT SQUARE BRACKET FF3E ; [*0485.0020.0002] # FULLWIDTH CIRCUMFLEX ACCENT FF3F ; [*020B.0020.0002] # FULLWIDTH LOW LINE FF40 ; [*0482.0020.0002] # FULLWIDTH GRAVE ACCENT FF41 ; [.1C47.0020.0002] # FULLWIDTH LATIN SMALL LETTER A FF42 ; [.1C60.0020.0002] # FULLWIDTH LATIN SMALL LETTER B FF43 ; [.1C7A.0020.0002] # FULLWIDTH LATIN SMALL LETTER C FF44 ; [.1C8F.0020.0002] # FULLWIDTH LATIN SMALL LETTER D FF45 ; [.1CAA.0020.0002] # FULLWIDTH LATIN SMALL LETTER E FF46 ; [.1CE5.0020.0002] # FULLWIDTH LATIN SMALL LETTER F FF47 ; [.1CF4.0020.0002] # FULLWIDTH LATIN SMALL LETTER G FF48 ; [.1D18.0020.0002] # FULLWIDTH LATIN SMALL LETTER H FF49 ; [.1D32.0020.0002] # FULLWIDTH LATIN SMALL LETTER I FF4A ; [.1D4C.0020.0002] # FULLWIDTH LATIN SMALL LETTER J FF4B ; [.1D65.0020.0002] # FULLWIDTH LATIN SMALL LETTER K FF4C ; [.1D77.0020.0002] # FULLWIDTH LATIN SMALL LETTER L FF4D ; [.1DAA.0020.0002] # FULLWIDTH LATIN SMALL LETTER M FF4E ; [.1DB9.0020.0002] # FULLWIDTH LATIN SMALL LETTER N FF4F ; [.1DDD.0020.0002] # FULLWIDTH LATIN SMALL LETTER O FF50 ; [.1E0C.0020.0002] # FULLWIDTH LATIN SMALL LETTER P FF51 ; [.1E21.0020.0002] # FULLWIDTH LATIN SMALL LETTER Q FF52 ; [.1E33.0020.0002] # FULLWIDTH LATIN SMALL LETTER R FF53 ; [.1E71.0020.0002] # FULLWIDTH LATIN SMALL LETTER S FF54 ; [.1E95.0020.0002] # FULLWIDTH LATIN SMALL LETTER T FF55 ; [.1EB5.0020.0002] # FULLWIDTH LATIN SMALL LETTER U FF56 ; [.1EE3.0020.0002] # FULLWIDTH LATIN SMALL LETTER V FF57 ; [.1EF5.0020.0002] # FULLWIDTH LATIN SMALL LETTER W FF58 ; [.1EFF.0020.0002] # FULLWIDTH LATIN SMALL LETTER X FF59 ; [.1F0B.0020.0002] # FULLWIDTH LATIN SMALL LETTER Y FF5A ; [.1F21.0020.0002] # FULLWIDTH LATIN SMALL LETTER Z FF5B ; [*031B.0020.0002] # FULLWIDTH LEFT CURLY BRACKET FF5C ; [*061E.0020.0002] # FULLWIDTH VERTICAL LINE FF5D ; [*031C.0020.0002] # FULLWIDTH RIGHT CURLY BRACKET FF5E ; [*0620.0020.0002] # FULLWIDTH TILDE FF5F ; [*032D.0020.0002] # FULLWIDTH LEFT WHITE PARENTHESIS FF60 ; [*032E.0020.0002] # FULLWIDTH RIGHT WHITE PARENTHESIS FF61 ; [*028A.0020.0002] # HALFWIDTH IDEOGRAPHIC FULL STOP FF62 ; [*0373.0020.0002] # HALFWIDTH LEFT CORNER BRACKET FF63 ; [*0374.0020.0002] # HALFWIDTH RIGHT CORNER BRACKET FF64 ; [*0231.0020.0002] # HALFWIDTH IDEOGRAPHIC COMMA FF65 ; [*0221.0020.0002] # HALFWIDTH KATAKANA MIDDLE DOT FF66 ; [.3D8A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WO FF67 ; [.3D5A.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL A FF68 ; [.3D5B.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL I FF69 ; [.3D5C.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL U FF6A ; [.3D5E.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL E FF6B ; [.3D5F.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL O FF6C ; [.3D7E.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YA FF6D ; [.3D7F.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YU FF6E ; [.3D81.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YO FF6F ; [.3D6C.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL TU FF70 ; [.1C0E.0020.0002] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK FF71 ; [.3D5A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER A FF72 ; [.3D5B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER I FF73 ; [.3D5C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER U FF74 ; [.3D5E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER E FF75 ; [.3D5F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER O FF76 ; [.3D60.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KA FF77 ; [.3D61.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KI FF78 ; [.3D62.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KU FF79 ; [.3D63.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KE FF7A ; [.3D64.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KO FF7B ; [.3D65.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SA FF7C ; [.3D66.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SI FF7D ; [.3D67.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SU FF7E ; [.3D68.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SE FF7F ; [.3D69.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SO FF80 ; [.3D6A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TA FF81 ; [.3D6B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TI FF82 ; [.3D6C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TU FF83 ; [.3D6D.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TE FF84 ; [.3D6E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TO FF85 ; [.3D6F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NA FF86 ; [.3D70.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NI FF87 ; [.3D71.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NU FF88 ; [.3D72.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NE FF89 ; [.3D73.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NO FF8A ; [.3D74.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HA FF8B ; [.3D75.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HI FF8C ; [.3D76.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HU FF8D ; [.3D77.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HE FF8E ; [.3D78.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HO FF8F ; [.3D79.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MA FF90 ; [.3D7A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MI FF91 ; [.3D7B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MU FF92 ; [.3D7C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER ME FF93 ; [.3D7D.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MO FF94 ; [.3D7E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YA FF95 ; [.3D7F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YU FF96 ; [.3D81.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YO FF97 ; [.3D82.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RA FF98 ; [.3D83.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RI FF99 ; [.3D84.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RU FF9A ; [.3D85.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RE FF9B ; [.3D86.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RO FF9C ; [.3D87.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WA FF9D ; [.3D8B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER N FF9E ; [.0000.0037.0002] # HALFWIDTH KATAKANA VOICED SOUND MARK FF9F ; [.0000.0038.0002] # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK FFE0 ; [.1C11.0020.0002] # FULLWIDTH CENT SIGN FFE1 ; [.1C13.0020.0002] # FULLWIDTH POUND SIGN FFE2 ; [*061D.0020.0002] # FULLWIDTH NOT SIGN FFE3 ; [*0209.0020.0002] # FULLWIDTH MACRON FFE4 ; [*061F.0020.0002] # FULLWIDTH BROKEN BAR FFE5 ; [.1C14.0020.0002] # FULLWIDTH YEN SIGN FFE6 ; [.1C27.0020.0002] # FULLWIDTH WON SIGN FFE8 ; [*081A.0020.0002] # HALFWIDTH FORMS LIGHT VERTICAL FFE9 ; [*059C.0020.0002] # HALFWIDTH LEFTWARDS ARROW FFEA ; [*059E.0020.0002] # HALFWIDTH UPWARDS ARROW FFEB ; [*059D.0020.0002] # HALFWIDTH RIGHTWARDS ARROW FFEC ; [*059F.0020.0002] # HALFWIDTH DOWNWARDS ARROW FFED ; [*08B8.0020.0002] # HALFWIDTH BLACK SQUARE FFEE ; [*08E3.0020.0002] # HALFWIDTH WHITE CIRCLE 30A1 30FC ; [.3D5A.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL A, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF67 30FC ; [.3D5A.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL A, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF67 FF70 ; [.3D5A.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL A, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3041 30FC ; [.3D5A.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL A, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A2 30FC ; [.3D5A.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER A, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF71 30FC ; [.3D5A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER A, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF71 FF70 ; [.3D5A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER A, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3042 30FC ; [.3D5A.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER A, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AB 30FC ; [.3D60.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF76 30FC ; [.3D60.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF76 FF70 ; [.3D60.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304B 30FC ; [.3D60.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AC 30FC ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER GA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AB 3099 30FC ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF76 FF9E 30FC ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF76 FF9E FF70 ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304C 30FC ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER GA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304B 3099 30FC ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B5 30FC ; [.3D65.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7B 30FC ; [.3D65.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7B FF70 ; [.3D65.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3055 30FC ; [.3D65.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B6 30FC ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER ZA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B5 3099 30FC ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7B FF9E 30FC ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7B FF9E FF70 ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3056 30FC ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER ZA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3055 3099 30FC ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BF 30FC ; [.3D6A.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER TA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF80 30FC ; [.3D6A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF80 FF70 ; [.3D6A.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305F 30FC ; [.3D6A.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER TA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C0 30FC ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER DA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BF 3099 30FC ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF80 FF9E 30FC ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF80 FF9E FF70 ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3060 30FC ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER DA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305F 3099 30FC ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CA 30FC ; [.3D6F.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER NA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF85 30FC ; [.3D6F.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF85 FF70 ; [.3D6F.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306A 30FC ; [.3D6F.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER NA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CF 30FC ; [.3D74.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8A 30FC ; [.3D74.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8A FF70 ; [.3D74.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306F 30FC ; [.3D74.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D0 30FC ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER BA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CF 3099 30FC ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8A FF9E 30FC ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8A FF9E FF70 ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3070 30FC ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER BA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306F 3099 30FC ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D1 30FC ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER PA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CF 309A 30FC ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8A FF9F 30FC ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8A FF9F FF70 ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3071 30FC ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER PA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306F 309A 30FC ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D5A.0020.0007.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DE 30FC ; [.3D79.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER MA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8F 30FC ; [.3D79.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8F FF70 ; [.3D79.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307E 30FC ; [.3D79.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER MA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E3 30FC ; [.3D7E.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6C 30FC ; [.3D7E.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6C FF70 ; [.3D7E.0020.000F.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3083 30FC ; [.3D7E.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E4 30FC ; [.3D7E.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF94 30FC ; [.3D7E.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF94 FF70 ; [.3D7E.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3084 30FC ; [.3D7E.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER YA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E9 30FC ; [.3D82.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF97 30FC ; [.3D82.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF97 FF70 ; [.3D82.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3089 30FC ; [.3D82.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30EE 30FC ; [.3D87.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 308E 30FC ; [.3D87.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30EF 30FC ; [.3D87.0020.0011.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9C 30FC ; [.3D87.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9C FF70 ; [.3D87.0020.0011.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 308F 30FC ; [.3D87.0020.0011.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER WA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F7 30FC ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER VA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30EF 3099 30FC ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER WA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9C FF9E 30FC ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9C FF9E FF70 ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D5A.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F5 30FC ; [.3D60.0020.000F.0002][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3095 30FC ; [.3D60.0020.000F.0001][.3D5A.0020.0007.0002] # <HIRAGANA LETTER SMALL KA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F5 30FC ; [.3D74.0020.000F][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL HA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31FB 30FC ; [.3D82.0020.000F][.3D5A.0020.0007.0002] # <KATAKANA LETTER SMALL RA, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A3 30FC ; [.3D5B.0020.000F.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL I, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF68 30FC ; [.3D5B.0020.000F.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL I, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF68 FF70 ; [.3D5B.0020.000F.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL I, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3043 30FC ; [.3D5B.0020.000F.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER SMALL I, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A4 30FC ; [.3D5B.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER I, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF72 30FC ; [.3D5B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER I, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF72 FF70 ; [.3D5B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER I, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3044 30FC ; [.3D5B.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER I, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AD 30FC ; [.3D61.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER KI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF77 30FC ; [.3D61.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF77 FF70 ; [.3D61.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304D 30FC ; [.3D61.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER KI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AE 30FC ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER GI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AD 3099 30FC ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF77 FF9E 30FC ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF77 FF9E FF70 ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304E 30FC ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER GI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304D 3099 30FC ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B7 30FC ; [.3D66.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7C 30FC ; [.3D66.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7C FF70 ; [.3D66.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3057 30FC ; [.3D66.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B8 30FC ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER ZI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B7 3099 30FC ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7C FF9E 30FC ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7C FF9E FF70 ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3058 30FC ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER ZI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3057 3099 30FC ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C1 30FC ; [.3D6B.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER TI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF81 30FC ; [.3D6B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF81 FF70 ; [.3D6B.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3061 30FC ; [.3D6B.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER TI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C2 30FC ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER DI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C1 3099 30FC ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF81 FF9E 30FC ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF81 FF9E FF70 ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3062 30FC ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER DI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3061 3099 30FC ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CB 30FC ; [.3D70.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER NI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF86 30FC ; [.3D70.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF86 FF70 ; [.3D70.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306B 30FC ; [.3D70.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER NI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D2 30FC ; [.3D75.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8B 30FC ; [.3D75.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8B FF70 ; [.3D75.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3072 30FC ; [.3D75.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D3 30FC ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER BI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D2 3099 30FC ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8B FF9E 30FC ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8B FF9E FF70 ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3073 30FC ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER BI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3072 3099 30FC ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D4 30FC ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER PI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D2 309A 30FC ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8B FF9F 30FC ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8B FF9F FF70 ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3074 30FC ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER PI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3072 309A 30FC ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D5B.0020.0007.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DF 30FC ; [.3D7A.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER MI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF90 30FC ; [.3D7A.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF90 FF70 ; [.3D7A.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307F 30FC ; [.3D7A.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER MI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30EA 30FC ; [.3D83.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF98 30FC ; [.3D83.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF98 FF70 ; [.3D83.0020.0011.0002][.3D5B.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RI, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 308A 30FC ; [.3D83.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F0 30FC ; [.3D88.0020.0011.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER WI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3090 30FC ; [.3D88.0020.0011.0001][.3D5B.0020.0007.0002] # <HIRAGANA LETTER WI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F8 30FC ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER VI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F0 3099 30FC ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D5B.0020.0007.0002] # <KATAKANA LETTER WI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F1 30FC ; [.3D66.0020.000F][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL SI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F6 30FC ; [.3D75.0020.000F][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL HI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31FC 30FC ; [.3D83.0020.000F][.3D5B.0020.0007.0002] # <KATAKANA LETTER SMALL RI, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A5 30FC ; [.3D5C.0020.000F.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL U, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF69 30FC ; [.3D5C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF69 FF70 ; [.3D5C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3045 30FC ; [.3D5C.0020.000F.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SMALL U, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A6 30FC ; [.3D5C.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER U, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF73 30FC ; [.3D5C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF73 FF70 ; [.3D5C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3046 30FC ; [.3D5C.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER U, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AF 30FC ; [.3D62.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF78 30FC ; [.3D62.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF78 FF70 ; [.3D62.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304F 30FC ; [.3D62.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B0 30FC ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER GU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AF 3099 30FC ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF78 FF9E 30FC ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF78 FF9E FF70 ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3050 30FC ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER GU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304F 3099 30FC ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B9 30FC ; [.3D67.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7D 30FC ; [.3D67.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7D FF70 ; [.3D67.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3059 30FC ; [.3D67.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BA 30FC ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER ZU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B9 3099 30FC ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7D FF9E 30FC ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7D FF9E FF70 ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305A 30FC ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER ZU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3059 3099 30FC ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C3 30FC ; [.3D6C.0020.000F.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6F 30FC ; [.3D6C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6F FF70 ; [.3D6C.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3063 30FC ; [.3D6C.0020.000F.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SMALL TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C4 30FC ; [.3D6C.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF82 30FC ; [.3D6C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF82 FF70 ; [.3D6C.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3064 30FC ; [.3D6C.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER TU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C5 30FC ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER DU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C4 3099 30FC ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF82 FF9E 30FC ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF82 FF9E FF70 ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3065 30FC ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER DU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3064 3099 30FC ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CC 30FC ; [.3D71.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF87 30FC ; [.3D71.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF87 FF70 ; [.3D71.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306C 30FC ; [.3D71.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D5 30FC ; [.3D76.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8C 30FC ; [.3D76.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8C FF70 ; [.3D76.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3075 30FC ; [.3D76.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D6 30FC ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER BU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D5 3099 30FC ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8C FF9E 30FC ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8C FF9E FF70 ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3076 30FC ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER BU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3075 3099 30FC ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D7 30FC ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER PU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D5 309A 30FC ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8C FF9F 30FC ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8C FF9F FF70 ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3077 30FC ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER PU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3075 309A 30FC ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E0 30FC ; [.3D7B.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF91 30FC ; [.3D7B.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF91 FF70 ; [.3D7B.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3080 30FC ; [.3D7B.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E5 30FC ; [.3D7F.0020.000F.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6D 30FC ; [.3D7F.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6D FF70 ; [.3D7F.0020.000F.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3085 30FC ; [.3D7F.0020.000F.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER SMALL YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E6 30FC ; [.3D7F.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF95 30FC ; [.3D7F.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF95 FF70 ; [.3D7F.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3086 30FC ; [.3D7F.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER YU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30EB 30FC ; [.3D84.0020.0011.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF99 30FC ; [.3D84.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF99 FF70 ; [.3D84.0020.0011.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RU, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 308B 30FC ; [.3D84.0020.0011.0001][.3D5C.0020.0007.0002] # <HIRAGANA LETTER RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F4 30FC ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER VU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A6 3099 30FC ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <KATAKANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF73 FF9E 30FC ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF73 FF9E FF70 ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3094 30FC ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER VU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3046 3099 30FC ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0007.0002] # <HIRAGANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F0 30FC ; [.3D62.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL KU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F2 30FC ; [.3D67.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL SU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F4 30FC ; [.3D71.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL NU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F7 30FC ; [.3D76.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL HU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31FA 30FC ; [.3D7B.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL MU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31FD 30FC ; [.3D84.0020.000F][.3D5C.0020.0007.0002] # <KATAKANA LETTER SMALL RU, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A7 30FC ; [.3D5E.0020.000F.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL E, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6A 30FC ; [.3D5E.0020.000F.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL E, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6A FF70 ; [.3D5E.0020.000F.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL E, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3047 30FC ; [.3D5E.0020.000F.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SMALL E, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A8 30FC ; [.3D5E.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER E, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF74 30FC ; [.3D5E.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER E, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF74 FF70 ; [.3D5E.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER E, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3048 30FC ; [.3D5E.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER E, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B1 30FC ; [.3D63.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF79 30FC ; [.3D63.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF79 FF70 ; [.3D63.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3051 30FC ; [.3D63.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B2 30FC ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER GE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B1 3099 30FC ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF79 FF9E 30FC ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF79 FF9E FF70 ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3052 30FC ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER GE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3051 3099 30FC ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BB 30FC ; [.3D68.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7E 30FC ; [.3D68.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7E FF70 ; [.3D68.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305B 30FC ; [.3D68.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BC 30FC ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER ZE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BB 3099 30FC ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7E FF9E 30FC ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7E FF9E FF70 ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305C 30FC ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER ZE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305B 3099 30FC ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C6 30FC ; [.3D6D.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER TE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF83 30FC ; [.3D6D.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF83 FF70 ; [.3D6D.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3066 30FC ; [.3D6D.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER TE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C7 30FC ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER DE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C6 3099 30FC ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF83 FF9E 30FC ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF83 FF9E FF70 ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3067 30FC ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER DE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3066 3099 30FC ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CD 30FC ; [.3D72.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER NE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF88 30FC ; [.3D72.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF88 FF70 ; [.3D72.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306D 30FC ; [.3D72.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER NE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D8 30FC ; [.3D77.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8D 30FC ; [.3D77.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8D FF70 ; [.3D77.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3078 30FC ; [.3D77.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D9 30FC ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER BE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D8 3099 30FC ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8D FF9E 30FC ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8D FF9E FF70 ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3079 30FC ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER BE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3078 3099 30FC ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DA 30FC ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER PE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30D8 309A 30FC ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8D FF9F 30FC ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8D FF9F FF70 ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307A 30FC ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER PE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3078 309A 30FC ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D5E.0020.0007.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E1 30FC ; [.3D7C.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER ME, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF92 30FC ; [.3D7C.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER ME, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF92 FF70 ; [.3D7C.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER ME, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3081 30FC ; [.3D7C.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER ME, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30EC 30FC ; [.3D85.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9A 30FC ; [.3D85.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9A FF70 ; [.3D85.0020.0011.0002][.3D5E.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RE, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 308C 30FC ; [.3D85.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F1 30FC ; [.3D89.0020.0011.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER WE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3091 30FC ; [.3D89.0020.0011.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER WE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F9 30FC ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER VE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F1 3099 30FC ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER WE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F6 30FC ; [.3D63.0020.000F.0002][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3096 30FC ; [.3D63.0020.000F.0001][.3D5E.0020.0007.0002] # <HIRAGANA LETTER SMALL KE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F8 30FC ; [.3D77.0020.000F][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL HE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31FE 30FC ; [.3D85.0020.000F][.3D5E.0020.0007.0002] # <KATAKANA LETTER SMALL RE, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A9 30FC ; [.3D5F.0020.000F.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL O, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6B 30FC ; [.3D5F.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL O, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6B FF70 ; [.3D5F.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL O, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3049 30FC ; [.3D5F.0020.000F.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SMALL O, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30AA 30FC ; [.3D5F.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER O, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF75 30FC ; [.3D5F.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER O, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF75 FF70 ; [.3D5F.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER O, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 304A 30FC ; [.3D5F.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER O, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B3 30FC ; [.3D64.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER KO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7A 30FC ; [.3D64.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7A FF70 ; [.3D64.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3053 30FC ; [.3D64.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER KO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B4 30FC ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER GO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30B3 3099 30FC ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7A FF9E 30FC ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7A FF9E FF70 ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3054 30FC ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER GO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3053 3099 30FC ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BD 30FC ; [.3D69.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7F 30FC ; [.3D69.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7F FF70 ; [.3D69.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305D 30FC ; [.3D69.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BE 30FC ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER ZO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30BD 3099 30FC ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7F FF9E 30FC ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF7F FF9E FF70 ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305E 30FC ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER ZO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 305D 3099 30FC ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C8 30FC ; [.3D6E.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF84 30FC ; [.3D6E.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF84 FF70 ; [.3D6E.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3068 30FC ; [.3D6E.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C9 30FC ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER DO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30C8 3099 30FC ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF84 FF9E 30FC ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF84 FF9E FF70 ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3069 30FC ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER DO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3068 3099 30FC ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30CE 30FC ; [.3D73.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER NO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF89 30FC ; [.3D73.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF89 FF70 ; [.3D73.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER NO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 306E 30FC ; [.3D73.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER NO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DB 30FC ; [.3D78.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8E 30FC ; [.3D78.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8E FF70 ; [.3D78.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307B 30FC ; [.3D78.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DC 30FC ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER BO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DB 3099 30FC ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8E FF9E 30FC ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8E FF9E FF70 ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307C 30FC ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER BO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307B 3099 30FC ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DD 30FC ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER PO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30DB 309A 30FC ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8E FF9F 30FC ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF8E FF9F FF70 ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307D 30FC ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER PO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 307B 309A 30FC ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D5F.0020.0007.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E2 30FC ; [.3D7D.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER MO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF93 30FC ; [.3D7D.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF93 FF70 ; [.3D7D.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER MO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3082 30FC ; [.3D7D.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER MO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E7 30FC ; [.3D81.0020.000F.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6E 30FC ; [.3D81.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF6E FF70 ; [.3D81.0020.000F.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER SMALL YO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3087 30FC ; [.3D81.0020.000F.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER SMALL YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30E8 30FC ; [.3D81.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF96 30FC ; [.3D81.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF96 FF70 ; [.3D81.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER YO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3088 30FC ; [.3D81.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER YO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30ED 30FC ; [.3D86.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9B 30FC ; [.3D86.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF9B FF70 ; [.3D86.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER RO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 308D 30FC ; [.3D86.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F2 30FC ; [.3D8A.0020.0011.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER WO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF66 30FC ; [.3D8A.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF66 FF70 ; [.3D8A.0020.0011.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 3092 30FC ; [.3D8A.0020.0011.0001][.3D5F.0020.0007.0002] # <HIRAGANA LETTER WO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30FA 30FC ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER VO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30F2 3099 30FC ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <KATAKANA LETTER WO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF66 FF9E 30FC ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA-HIRAGANA PROLONGED SOUND MARK> FF66 FF9E FF70 ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D5F.0020.0007.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F3 30FC ; [.3D6E.0020.000F][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL TO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31F9 30FC ; [.3D78.0020.000F][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL HO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 31FF 30FC ; [.3D86.0020.000F][.3D5F.0020.0007.0002] # <KATAKANA LETTER SMALL RO, KATAKANA-HIRAGANA PROLONGED SOUND MARK> 30A1 30FD ; [.3D5A.0020.000F.0002][.3D5A.0020.0010.0002] # <KATAKANA LETTER SMALL A, KATAKANA ITERATION MARK> FF67 30FD ; [.3D5A.0020.000F.0002][.3D5A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL A, KATAKANA ITERATION MARK> 3041 309D ; [.3D5A.0020.000F.0001][.3D5A.0020.0010.0002] # <HIRAGANA LETTER SMALL A, HIRAGANA ITERATION MARK> 30A2 30FD ; [.3D5A.0020.0011.0002][.3D5A.0020.0010.0002] # <KATAKANA LETTER A, KATAKANA ITERATION MARK> FF71 30FD ; [.3D5A.0020.0011.0002][.3D5A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER A, KATAKANA ITERATION MARK> 3042 309D ; [.3D5A.0020.0011.0001][.3D5A.0020.0010.0002] # <HIRAGANA LETTER A, HIRAGANA ITERATION MARK> 30A3 30FD ; [.3D5B.0020.000F.0002][.3D5B.0020.0010.0002] # <KATAKANA LETTER SMALL I, KATAKANA ITERATION MARK> FF68 30FD ; [.3D5B.0020.000F.0002][.3D5B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL I, KATAKANA ITERATION MARK> 3043 309D ; [.3D5B.0020.000F.0001][.3D5B.0020.0010.0002] # <HIRAGANA LETTER SMALL I, HIRAGANA ITERATION MARK> 30A4 30FD ; [.3D5B.0020.0011.0002][.3D5B.0020.0010.0002] # <KATAKANA LETTER I, KATAKANA ITERATION MARK> FF72 30FD ; [.3D5B.0020.0011.0002][.3D5B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER I, KATAKANA ITERATION MARK> 3044 309D ; [.3D5B.0020.0011.0001][.3D5B.0020.0010.0002] # <HIRAGANA LETTER I, HIRAGANA ITERATION MARK> 30A5 30FD ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER SMALL U, KATAKANA ITERATION MARK> FF69 30FD ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, KATAKANA ITERATION MARK> 3045 309D ; [.3D5C.0020.000F.0001][.3D5C.0020.0010.0002] # <HIRAGANA LETTER SMALL U, HIRAGANA ITERATION MARK> 30A5 30FE ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL U, KATAKANA VOICED ITERATION MARK> FF69 30FE ; [.3D5C.0020.000F.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SMALL U, KATAKANA VOICED ITERATION MARK> 3045 309E ; [.3D5C.0020.000F.0001][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL U, HIRAGANA VOICED ITERATION MARK> 30A6 30FD ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER U, KATAKANA ITERATION MARK> FF73 30FD ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER U, KATAKANA ITERATION MARK> 3046 309D ; [.3D5C.0020.0011.0001][.3D5C.0020.0010.0002] # <HIRAGANA LETTER U, HIRAGANA ITERATION MARK> 30A6 30FE ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER U, KATAKANA VOICED ITERATION MARK> FF73 30FE ; [.3D5C.0020.0011.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER U, KATAKANA VOICED ITERATION MARK> 3046 309E ; [.3D5C.0020.0011.0001][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER U, HIRAGANA VOICED ITERATION MARK> 30A7 30FD ; [.3D5E.0020.000F.0002][.3D5E.0020.0010.0002] # <KATAKANA LETTER SMALL E, KATAKANA ITERATION MARK> FF6A 30FD ; [.3D5E.0020.000F.0002][.3D5E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL E, KATAKANA ITERATION MARK> 3047 309D ; [.3D5E.0020.000F.0001][.3D5E.0020.0010.0002] # <HIRAGANA LETTER SMALL E, HIRAGANA ITERATION MARK> 30A8 30FD ; [.3D5E.0020.0011.0002][.3D5E.0020.0010.0002] # <KATAKANA LETTER E, KATAKANA ITERATION MARK> FF74 30FD ; [.3D5E.0020.0011.0002][.3D5E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER E, KATAKANA ITERATION MARK> 3048 309D ; [.3D5E.0020.0011.0001][.3D5E.0020.0010.0002] # <HIRAGANA LETTER E, HIRAGANA ITERATION MARK> 30A9 30FD ; [.3D5F.0020.000F.0002][.3D5F.0020.0010.0002] # <KATAKANA LETTER SMALL O, KATAKANA ITERATION MARK> FF6B 30FD ; [.3D5F.0020.000F.0002][.3D5F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL O, KATAKANA ITERATION MARK> 3049 309D ; [.3D5F.0020.000F.0001][.3D5F.0020.0010.0002] # <HIRAGANA LETTER SMALL O, HIRAGANA ITERATION MARK> 30AA 30FD ; [.3D5F.0020.0011.0002][.3D5F.0020.0010.0002] # <KATAKANA LETTER O, KATAKANA ITERATION MARK> FF75 30FD ; [.3D5F.0020.0011.0002][.3D5F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER O, KATAKANA ITERATION MARK> 304A 309D ; [.3D5F.0020.0011.0001][.3D5F.0020.0010.0002] # <HIRAGANA LETTER O, HIRAGANA ITERATION MARK> 30AB 30FD ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER KA, KATAKANA ITERATION MARK> FF76 30FD ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KA, KATAKANA ITERATION MARK> 304B 309D ; [.3D60.0020.0011.0001][.3D60.0020.0010.0002] # <HIRAGANA LETTER KA, HIRAGANA ITERATION MARK> 30AB 30FE ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KA, KATAKANA VOICED ITERATION MARK> FF76 30FE ; [.3D60.0020.0011.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KA, KATAKANA VOICED ITERATION MARK> 304B 309E ; [.3D60.0020.0011.0001][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KA, HIRAGANA VOICED ITERATION MARK> 30AC 30FD ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER GA, KATAKANA ITERATION MARK> 30AB 3099 30FD ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF76 FF9E 30FD ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 304C 309D ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002] # <HIRAGANA LETTER GA, HIRAGANA ITERATION MARK> 304B 3099 309D ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002] # <HIRAGANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30AC 30FE ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GA, KATAKANA VOICED ITERATION MARK> 30AB 3099 30FE ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF76 FF9E 30FE ; [.3D60.0020.0011.0002][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 304C 309E ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GA, HIRAGANA VOICED ITERATION MARK> 304B 3099 309E ; [.3D60.0020.0011.0001][.0000.0037.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30AD 30FD ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002] # <KATAKANA LETTER KI, KATAKANA ITERATION MARK> FF77 30FD ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KI, KATAKANA ITERATION MARK> 304D 309D ; [.3D61.0020.0011.0001][.3D61.0020.0010.0002] # <HIRAGANA LETTER KI, HIRAGANA ITERATION MARK> 30AD 30FE ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KI, KATAKANA VOICED ITERATION MARK> FF77 30FE ; [.3D61.0020.0011.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KI, KATAKANA VOICED ITERATION MARK> 304D 309E ; [.3D61.0020.0011.0001][.3D61.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KI, HIRAGANA VOICED ITERATION MARK> 30AE 30FD ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002] # <KATAKANA LETTER GI, KATAKANA ITERATION MARK> 30AD 3099 30FD ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002] # <KATAKANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF77 FF9E 30FD ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 304E 309D ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002] # <HIRAGANA LETTER GI, HIRAGANA ITERATION MARK> 304D 3099 309D ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002] # <HIRAGANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30AE 30FE ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GI, KATAKANA VOICED ITERATION MARK> 30AD 3099 30FE ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF77 FF9E 30FE ; [.3D61.0020.0011.0002][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 304E 309E ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GI, HIRAGANA VOICED ITERATION MARK> 304D 3099 309E ; [.3D61.0020.0011.0001][.0000.0037.0002][.3D61.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30AF 30FD ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002] # <KATAKANA LETTER KU, KATAKANA ITERATION MARK> FF78 30FD ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KU, KATAKANA ITERATION MARK> 304F 309D ; [.3D62.0020.0011.0001][.3D62.0020.0010.0002] # <HIRAGANA LETTER KU, HIRAGANA ITERATION MARK> 30AF 30FE ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KU, KATAKANA VOICED ITERATION MARK> FF78 30FE ; [.3D62.0020.0011.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KU, KATAKANA VOICED ITERATION MARK> 304F 309E ; [.3D62.0020.0011.0001][.3D62.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KU, HIRAGANA VOICED ITERATION MARK> 30B0 30FD ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002] # <KATAKANA LETTER GU, KATAKANA ITERATION MARK> 30AF 3099 30FD ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002] # <KATAKANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF78 FF9E 30FD ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3050 309D ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002] # <HIRAGANA LETTER GU, HIRAGANA ITERATION MARK> 304F 3099 309D ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002] # <HIRAGANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30B0 30FE ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GU, KATAKANA VOICED ITERATION MARK> 30AF 3099 30FE ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF78 FF9E 30FE ; [.3D62.0020.0011.0002][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3050 309E ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GU, HIRAGANA VOICED ITERATION MARK> 304F 3099 309E ; [.3D62.0020.0011.0001][.0000.0037.0002][.3D62.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30B1 30FD ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER KE, KATAKANA ITERATION MARK> FF79 30FD ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KE, KATAKANA ITERATION MARK> 3051 309D ; [.3D63.0020.0011.0001][.3D63.0020.0010.0002] # <HIRAGANA LETTER KE, HIRAGANA ITERATION MARK> 30B1 30FE ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KE, KATAKANA VOICED ITERATION MARK> FF79 30FE ; [.3D63.0020.0011.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KE, KATAKANA VOICED ITERATION MARK> 3051 309E ; [.3D63.0020.0011.0001][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KE, HIRAGANA VOICED ITERATION MARK> 30B2 30FD ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER GE, KATAKANA ITERATION MARK> 30B1 3099 30FD ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF79 FF9E 30FD ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3052 309D ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002] # <HIRAGANA LETTER GE, HIRAGANA ITERATION MARK> 3051 3099 309D ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002] # <HIRAGANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30B2 30FE ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GE, KATAKANA VOICED ITERATION MARK> 30B1 3099 30FE ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF79 FF9E 30FE ; [.3D63.0020.0011.0002][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3052 309E ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GE, HIRAGANA VOICED ITERATION MARK> 3051 3099 309E ; [.3D63.0020.0011.0001][.0000.0037.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30B3 30FD ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002] # <KATAKANA LETTER KO, KATAKANA ITERATION MARK> FF7A 30FD ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KO, KATAKANA ITERATION MARK> 3053 309D ; [.3D64.0020.0011.0001][.3D64.0020.0010.0002] # <HIRAGANA LETTER KO, HIRAGANA ITERATION MARK> 30B3 30FE ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KO, KATAKANA VOICED ITERATION MARK> FF7A 30FE ; [.3D64.0020.0011.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KO, KATAKANA VOICED ITERATION MARK> 3053 309E ; [.3D64.0020.0011.0001][.3D64.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KO, HIRAGANA VOICED ITERATION MARK> 30B4 30FD ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002] # <KATAKANA LETTER GO, KATAKANA ITERATION MARK> 30B3 3099 30FD ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002] # <KATAKANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF7A FF9E 30FD ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3054 309D ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002] # <HIRAGANA LETTER GO, HIRAGANA ITERATION MARK> 3053 3099 309D ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002] # <HIRAGANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30B4 30FE ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER GO, KATAKANA VOICED ITERATION MARK> 30B3 3099 30FE ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF7A FF9E 30FE ; [.3D64.0020.0011.0002][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER KO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3054 309E ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER GO, HIRAGANA VOICED ITERATION MARK> 3053 3099 309E ; [.3D64.0020.0011.0001][.0000.0037.0002][.3D64.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER KO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30B5 30FD ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002] # <KATAKANA LETTER SA, KATAKANA ITERATION MARK> FF7B 30FD ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SA, KATAKANA ITERATION MARK> 3055 309D ; [.3D65.0020.0011.0001][.3D65.0020.0010.0002] # <HIRAGANA LETTER SA, HIRAGANA ITERATION MARK> 30B5 30FE ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SA, KATAKANA VOICED ITERATION MARK> FF7B 30FE ; [.3D65.0020.0011.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SA, KATAKANA VOICED ITERATION MARK> 3055 309E ; [.3D65.0020.0011.0001][.3D65.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SA, HIRAGANA VOICED ITERATION MARK> 30B6 30FD ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002] # <KATAKANA LETTER ZA, KATAKANA ITERATION MARK> 30B5 3099 30FD ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002] # <KATAKANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF7B FF9E 30FD ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3056 309D ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002] # <HIRAGANA LETTER ZA, HIRAGANA ITERATION MARK> 3055 3099 309D ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002] # <HIRAGANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30B6 30FE ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZA, KATAKANA VOICED ITERATION MARK> 30B5 3099 30FE ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF7B FF9E 30FE ; [.3D65.0020.0011.0002][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3056 309E ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZA, HIRAGANA VOICED ITERATION MARK> 3055 3099 309E ; [.3D65.0020.0011.0001][.0000.0037.0002][.3D65.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30B7 30FD ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002] # <KATAKANA LETTER SI, KATAKANA ITERATION MARK> FF7C 30FD ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SI, KATAKANA ITERATION MARK> 3057 309D ; [.3D66.0020.0011.0001][.3D66.0020.0010.0002] # <HIRAGANA LETTER SI, HIRAGANA ITERATION MARK> 30B7 30FE ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SI, KATAKANA VOICED ITERATION MARK> FF7C 30FE ; [.3D66.0020.0011.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SI, KATAKANA VOICED ITERATION MARK> 3057 309E ; [.3D66.0020.0011.0001][.3D66.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SI, HIRAGANA VOICED ITERATION MARK> 30B8 30FD ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002] # <KATAKANA LETTER ZI, KATAKANA ITERATION MARK> 30B7 3099 30FD ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002] # <KATAKANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF7C FF9E 30FD ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3058 309D ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002] # <HIRAGANA LETTER ZI, HIRAGANA ITERATION MARK> 3057 3099 309D ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002] # <HIRAGANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30B8 30FE ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZI, KATAKANA VOICED ITERATION MARK> 30B7 3099 30FE ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF7C FF9E 30FE ; [.3D66.0020.0011.0002][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3058 309E ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZI, HIRAGANA VOICED ITERATION MARK> 3057 3099 309E ; [.3D66.0020.0011.0001][.0000.0037.0002][.3D66.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30B9 30FD ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002] # <KATAKANA LETTER SU, KATAKANA ITERATION MARK> FF7D 30FD ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SU, KATAKANA ITERATION MARK> 3059 309D ; [.3D67.0020.0011.0001][.3D67.0020.0010.0002] # <HIRAGANA LETTER SU, HIRAGANA ITERATION MARK> 30B9 30FE ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SU, KATAKANA VOICED ITERATION MARK> FF7D 30FE ; [.3D67.0020.0011.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SU, KATAKANA VOICED ITERATION MARK> 3059 309E ; [.3D67.0020.0011.0001][.3D67.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SU, HIRAGANA VOICED ITERATION MARK> 30BA 30FD ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002] # <KATAKANA LETTER ZU, KATAKANA ITERATION MARK> 30B9 3099 30FD ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002] # <KATAKANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF7D FF9E 30FD ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 305A 309D ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002] # <HIRAGANA LETTER ZU, HIRAGANA ITERATION MARK> 3059 3099 309D ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002] # <HIRAGANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30BA 30FE ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZU, KATAKANA VOICED ITERATION MARK> 30B9 3099 30FE ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF7D FF9E 30FE ; [.3D67.0020.0011.0002][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 305A 309E ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZU, HIRAGANA VOICED ITERATION MARK> 3059 3099 309E ; [.3D67.0020.0011.0001][.0000.0037.0002][.3D67.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30BB 30FD ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002] # <KATAKANA LETTER SE, KATAKANA ITERATION MARK> FF7E 30FD ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SE, KATAKANA ITERATION MARK> 305B 309D ; [.3D68.0020.0011.0001][.3D68.0020.0010.0002] # <HIRAGANA LETTER SE, HIRAGANA ITERATION MARK> 30BB 30FE ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SE, KATAKANA VOICED ITERATION MARK> FF7E 30FE ; [.3D68.0020.0011.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SE, KATAKANA VOICED ITERATION MARK> 305B 309E ; [.3D68.0020.0011.0001][.3D68.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SE, HIRAGANA VOICED ITERATION MARK> 30BC 30FD ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002] # <KATAKANA LETTER ZE, KATAKANA ITERATION MARK> 30BB 3099 30FD ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002] # <KATAKANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF7E FF9E 30FD ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 305C 309D ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002] # <HIRAGANA LETTER ZE, HIRAGANA ITERATION MARK> 305B 3099 309D ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002] # <HIRAGANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30BC 30FE ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZE, KATAKANA VOICED ITERATION MARK> 30BB 3099 30FE ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF7E FF9E 30FE ; [.3D68.0020.0011.0002][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 305C 309E ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZE, HIRAGANA VOICED ITERATION MARK> 305B 3099 309E ; [.3D68.0020.0011.0001][.0000.0037.0002][.3D68.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30BD 30FD ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002] # <KATAKANA LETTER SO, KATAKANA ITERATION MARK> FF7F 30FD ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SO, KATAKANA ITERATION MARK> 305D 309D ; [.3D69.0020.0011.0001][.3D69.0020.0010.0002] # <HIRAGANA LETTER SO, HIRAGANA ITERATION MARK> 30BD 30FE ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SO, KATAKANA VOICED ITERATION MARK> FF7F 30FE ; [.3D69.0020.0011.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SO, KATAKANA VOICED ITERATION MARK> 305D 309E ; [.3D69.0020.0011.0001][.3D69.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SO, HIRAGANA VOICED ITERATION MARK> 30BE 30FD ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002] # <KATAKANA LETTER ZO, KATAKANA ITERATION MARK> 30BD 3099 30FD ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002] # <KATAKANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF7F FF9E 30FD ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 305E 309D ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002] # <HIRAGANA LETTER ZO, HIRAGANA ITERATION MARK> 305D 3099 309D ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002] # <HIRAGANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30BE 30FE ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER ZO, KATAKANA VOICED ITERATION MARK> 30BD 3099 30FE ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF7F FF9E 30FE ; [.3D69.0020.0011.0002][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 305E 309E ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER ZO, HIRAGANA VOICED ITERATION MARK> 305D 3099 309E ; [.3D69.0020.0011.0001][.0000.0037.0002][.3D69.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30BF 30FD ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002] # <KATAKANA LETTER TA, KATAKANA ITERATION MARK> FF80 30FD ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TA, KATAKANA ITERATION MARK> 305F 309D ; [.3D6A.0020.0011.0001][.3D6A.0020.0010.0002] # <HIRAGANA LETTER TA, HIRAGANA ITERATION MARK> 30BF 30FE ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TA, KATAKANA VOICED ITERATION MARK> FF80 30FE ; [.3D6A.0020.0011.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TA, KATAKANA VOICED ITERATION MARK> 305F 309E ; [.3D6A.0020.0011.0001][.3D6A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TA, HIRAGANA VOICED ITERATION MARK> 30C0 30FD ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002] # <KATAKANA LETTER DA, KATAKANA ITERATION MARK> 30BF 3099 30FD ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002] # <KATAKANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF80 FF9E 30FD ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3060 309D ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002] # <HIRAGANA LETTER DA, HIRAGANA ITERATION MARK> 305F 3099 309D ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002] # <HIRAGANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30C0 30FE ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DA, KATAKANA VOICED ITERATION MARK> 30BF 3099 30FE ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF80 FF9E 30FE ; [.3D6A.0020.0011.0002][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3060 309E ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DA, HIRAGANA VOICED ITERATION MARK> 305F 3099 309E ; [.3D6A.0020.0011.0001][.0000.0037.0002][.3D6A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30C1 30FD ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002] # <KATAKANA LETTER TI, KATAKANA ITERATION MARK> FF81 30FD ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TI, KATAKANA ITERATION MARK> 3061 309D ; [.3D6B.0020.0011.0001][.3D6B.0020.0010.0002] # <HIRAGANA LETTER TI, HIRAGANA ITERATION MARK> 30C1 30FE ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TI, KATAKANA VOICED ITERATION MARK> FF81 30FE ; [.3D6B.0020.0011.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TI, KATAKANA VOICED ITERATION MARK> 3061 309E ; [.3D6B.0020.0011.0001][.3D6B.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TI, HIRAGANA VOICED ITERATION MARK> 30C2 30FD ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002] # <KATAKANA LETTER DI, KATAKANA ITERATION MARK> 30C1 3099 30FD ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002] # <KATAKANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF81 FF9E 30FD ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3062 309D ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002] # <HIRAGANA LETTER DI, HIRAGANA ITERATION MARK> 3061 3099 309D ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002] # <HIRAGANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30C2 30FE ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DI, KATAKANA VOICED ITERATION MARK> 30C1 3099 30FE ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF81 FF9E 30FE ; [.3D6B.0020.0011.0002][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3062 309E ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DI, HIRAGANA VOICED ITERATION MARK> 3061 3099 309E ; [.3D6B.0020.0011.0001][.0000.0037.0002][.3D6B.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30C3 30FD ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER SMALL TU, KATAKANA ITERATION MARK> FF6F 30FD ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, KATAKANA ITERATION MARK> 3063 309D ; [.3D6C.0020.000F.0001][.3D6C.0020.0010.0002] # <HIRAGANA LETTER SMALL TU, HIRAGANA ITERATION MARK> 30C3 30FE ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL TU, KATAKANA VOICED ITERATION MARK> FF6F 30FE ; [.3D6C.0020.000F.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER SMALL TU, KATAKANA VOICED ITERATION MARK> 3063 309E ; [.3D6C.0020.000F.0001][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL TU, HIRAGANA VOICED ITERATION MARK> 30C4 30FD ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER TU, KATAKANA ITERATION MARK> FF82 30FD ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TU, KATAKANA ITERATION MARK> 3064 309D ; [.3D6C.0020.0011.0001][.3D6C.0020.0010.0002] # <HIRAGANA LETTER TU, HIRAGANA ITERATION MARK> 30C4 30FE ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TU, KATAKANA VOICED ITERATION MARK> FF82 30FE ; [.3D6C.0020.0011.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TU, KATAKANA VOICED ITERATION MARK> 3064 309E ; [.3D6C.0020.0011.0001][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TU, HIRAGANA VOICED ITERATION MARK> 30C5 30FD ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER DU, KATAKANA ITERATION MARK> 30C4 3099 30FD ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002] # <KATAKANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF82 FF9E 30FD ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3065 309D ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002] # <HIRAGANA LETTER DU, HIRAGANA ITERATION MARK> 3064 3099 309D ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002] # <HIRAGANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30C5 30FE ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DU, KATAKANA VOICED ITERATION MARK> 30C4 3099 30FE ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF82 FF9E 30FE ; [.3D6C.0020.0011.0002][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3065 309E ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DU, HIRAGANA VOICED ITERATION MARK> 3064 3099 309E ; [.3D6C.0020.0011.0001][.0000.0037.0002][.3D6C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30C6 30FD ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002] # <KATAKANA LETTER TE, KATAKANA ITERATION MARK> FF83 30FD ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TE, KATAKANA ITERATION MARK> 3066 309D ; [.3D6D.0020.0011.0001][.3D6D.0020.0010.0002] # <HIRAGANA LETTER TE, HIRAGANA ITERATION MARK> 30C6 30FE ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TE, KATAKANA VOICED ITERATION MARK> FF83 30FE ; [.3D6D.0020.0011.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TE, KATAKANA VOICED ITERATION MARK> 3066 309E ; [.3D6D.0020.0011.0001][.3D6D.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TE, HIRAGANA VOICED ITERATION MARK> 30C7 30FD ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002] # <KATAKANA LETTER DE, KATAKANA ITERATION MARK> 30C6 3099 30FD ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002] # <KATAKANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF83 FF9E 30FD ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3067 309D ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002] # <HIRAGANA LETTER DE, HIRAGANA ITERATION MARK> 3066 3099 309D ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002] # <HIRAGANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30C7 30FE ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DE, KATAKANA VOICED ITERATION MARK> 30C6 3099 30FE ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF83 FF9E 30FE ; [.3D6D.0020.0011.0002][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3067 309E ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DE, HIRAGANA VOICED ITERATION MARK> 3066 3099 309E ; [.3D6D.0020.0011.0001][.0000.0037.0002][.3D6D.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30C8 30FD ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002] # <KATAKANA LETTER TO, KATAKANA ITERATION MARK> FF84 30FD ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TO, KATAKANA ITERATION MARK> 3068 309D ; [.3D6E.0020.0011.0001][.3D6E.0020.0010.0002] # <HIRAGANA LETTER TO, HIRAGANA ITERATION MARK> 30C8 30FE ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TO, KATAKANA VOICED ITERATION MARK> FF84 30FE ; [.3D6E.0020.0011.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TO, KATAKANA VOICED ITERATION MARK> 3068 309E ; [.3D6E.0020.0011.0001][.3D6E.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TO, HIRAGANA VOICED ITERATION MARK> 30C9 30FD ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002] # <KATAKANA LETTER DO, KATAKANA ITERATION MARK> 30C8 3099 30FD ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002] # <KATAKANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF84 FF9E 30FD ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3069 309D ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002] # <HIRAGANA LETTER DO, HIRAGANA ITERATION MARK> 3068 3099 309D ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002] # <HIRAGANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30C9 30FE ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER DO, KATAKANA VOICED ITERATION MARK> 30C8 3099 30FE ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF84 FF9E 30FE ; [.3D6E.0020.0011.0002][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER TO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3069 309E ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER DO, HIRAGANA VOICED ITERATION MARK> 3068 3099 309E ; [.3D6E.0020.0011.0001][.0000.0037.0002][.3D6E.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER TO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30CA 30FD ; [.3D6F.0020.0011.0002][.3D6F.0020.0010.0002] # <KATAKANA LETTER NA, KATAKANA ITERATION MARK> FF85 30FD ; [.3D6F.0020.0011.0002][.3D6F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NA, KATAKANA ITERATION MARK> 306A 309D ; [.3D6F.0020.0011.0001][.3D6F.0020.0010.0002] # <HIRAGANA LETTER NA, HIRAGANA ITERATION MARK> 30CB 30FD ; [.3D70.0020.0011.0002][.3D70.0020.0010.0002] # <KATAKANA LETTER NI, KATAKANA ITERATION MARK> FF86 30FD ; [.3D70.0020.0011.0002][.3D70.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NI, KATAKANA ITERATION MARK> 306B 309D ; [.3D70.0020.0011.0001][.3D70.0020.0010.0002] # <HIRAGANA LETTER NI, HIRAGANA ITERATION MARK> 30CC 30FD ; [.3D71.0020.0011.0002][.3D71.0020.0010.0002] # <KATAKANA LETTER NU, KATAKANA ITERATION MARK> FF87 30FD ; [.3D71.0020.0011.0002][.3D71.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NU, KATAKANA ITERATION MARK> 306C 309D ; [.3D71.0020.0011.0001][.3D71.0020.0010.0002] # <HIRAGANA LETTER NU, HIRAGANA ITERATION MARK> 30CD 30FD ; [.3D72.0020.0011.0002][.3D72.0020.0010.0002] # <KATAKANA LETTER NE, KATAKANA ITERATION MARK> FF88 30FD ; [.3D72.0020.0011.0002][.3D72.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NE, KATAKANA ITERATION MARK> 306D 309D ; [.3D72.0020.0011.0001][.3D72.0020.0010.0002] # <HIRAGANA LETTER NE, HIRAGANA ITERATION MARK> 30CE 30FD ; [.3D73.0020.0011.0002][.3D73.0020.0010.0002] # <KATAKANA LETTER NO, KATAKANA ITERATION MARK> FF89 30FD ; [.3D73.0020.0011.0002][.3D73.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER NO, KATAKANA ITERATION MARK> 306E 309D ; [.3D73.0020.0011.0001][.3D73.0020.0010.0002] # <HIRAGANA LETTER NO, HIRAGANA ITERATION MARK> 30CF 30FD ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER HA, KATAKANA ITERATION MARK> FF8A 30FD ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HA, KATAKANA ITERATION MARK> 306F 309D ; [.3D74.0020.0011.0001][.3D74.0020.0010.0002] # <HIRAGANA LETTER HA, HIRAGANA ITERATION MARK> 30CF 30FE ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HA, KATAKANA VOICED ITERATION MARK> FF8A 30FE ; [.3D74.0020.0011.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HA, KATAKANA VOICED ITERATION MARK> 306F 309E ; [.3D74.0020.0011.0001][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HA, HIRAGANA VOICED ITERATION MARK> 30D0 30FD ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER BA, KATAKANA ITERATION MARK> 30CF 3099 30FD ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8A FF9E 30FD ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3070 309D ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER BA, HIRAGANA ITERATION MARK> 306F 3099 309D ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30D0 30FE ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BA, KATAKANA VOICED ITERATION MARK> 30CF 3099 30FE ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8A FF9E 30FE ; [.3D74.0020.0011.0002][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3070 309E ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BA, HIRAGANA VOICED ITERATION MARK> 306F 3099 309E ; [.3D74.0020.0011.0001][.0000.0037.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30D1 30FD ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER PA, KATAKANA ITERATION MARK> 30CF 309A 30FD ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8A FF9F 30FD ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> 3071 309D ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER PA, HIRAGANA ITERATION MARK> 306F 309A 309D ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30D1 30FE ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PA, KATAKANA VOICED ITERATION MARK> 30CF 309A 30FE ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8A FF9F 30FE ; [.3D74.0020.0011.0002][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HA, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3071 309E ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PA, HIRAGANA VOICED ITERATION MARK> 306F 309A 309E ; [.3D74.0020.0011.0001][.0000.0038.0002][.3D74.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HA, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30D2 30FD ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER HI, KATAKANA ITERATION MARK> FF8B 30FD ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HI, KATAKANA ITERATION MARK> 3072 309D ; [.3D75.0020.0011.0001][.3D75.0020.0010.0002] # <HIRAGANA LETTER HI, HIRAGANA ITERATION MARK> 30D2 30FE ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HI, KATAKANA VOICED ITERATION MARK> FF8B 30FE ; [.3D75.0020.0011.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HI, KATAKANA VOICED ITERATION MARK> 3072 309E ; [.3D75.0020.0011.0001][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HI, HIRAGANA VOICED ITERATION MARK> 30D3 30FD ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER BI, KATAKANA ITERATION MARK> 30D2 3099 30FD ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8B FF9E 30FD ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3073 309D ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER BI, HIRAGANA ITERATION MARK> 3072 3099 309D ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30D3 30FE ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BI, KATAKANA VOICED ITERATION MARK> 30D2 3099 30FE ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8B FF9E 30FE ; [.3D75.0020.0011.0002][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3073 309E ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BI, HIRAGANA VOICED ITERATION MARK> 3072 3099 309E ; [.3D75.0020.0011.0001][.0000.0037.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30D4 30FD ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER PI, KATAKANA ITERATION MARK> 30D2 309A 30FD ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8B FF9F 30FD ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> 3074 309D ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER PI, HIRAGANA ITERATION MARK> 3072 309A 309D ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30D4 30FE ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PI, KATAKANA VOICED ITERATION MARK> 30D2 309A 30FE ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8B FF9F 30FE ; [.3D75.0020.0011.0002][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HI, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3074 309E ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PI, HIRAGANA VOICED ITERATION MARK> 3072 309A 309E ; [.3D75.0020.0011.0001][.0000.0038.0002][.3D75.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HI, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30D5 30FD ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER HU, KATAKANA ITERATION MARK> FF8C 30FD ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HU, KATAKANA ITERATION MARK> 3075 309D ; [.3D76.0020.0011.0001][.3D76.0020.0010.0002] # <HIRAGANA LETTER HU, HIRAGANA ITERATION MARK> 30D5 30FE ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HU, KATAKANA VOICED ITERATION MARK> FF8C 30FE ; [.3D76.0020.0011.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HU, KATAKANA VOICED ITERATION MARK> 3075 309E ; [.3D76.0020.0011.0001][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HU, HIRAGANA VOICED ITERATION MARK> 30D6 30FD ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER BU, KATAKANA ITERATION MARK> 30D5 3099 30FD ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8C FF9E 30FD ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3076 309D ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER BU, HIRAGANA ITERATION MARK> 3075 3099 309D ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30D6 30FE ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BU, KATAKANA VOICED ITERATION MARK> 30D5 3099 30FE ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8C FF9E 30FE ; [.3D76.0020.0011.0002][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3076 309E ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BU, HIRAGANA VOICED ITERATION MARK> 3075 3099 309E ; [.3D76.0020.0011.0001][.0000.0037.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30D7 30FD ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER PU, KATAKANA ITERATION MARK> 30D5 309A 30FD ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8C FF9F 30FD ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> 3077 309D ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER PU, HIRAGANA ITERATION MARK> 3075 309A 309D ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30D7 30FE ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PU, KATAKANA VOICED ITERATION MARK> 30D5 309A 30FE ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8C FF9F 30FE ; [.3D76.0020.0011.0002][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HU, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3077 309E ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PU, HIRAGANA VOICED ITERATION MARK> 3075 309A 309E ; [.3D76.0020.0011.0001][.0000.0038.0002][.3D76.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HU, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30D8 30FD ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER HE, KATAKANA ITERATION MARK> FF8D 30FD ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HE, KATAKANA ITERATION MARK> 3078 309D ; [.3D77.0020.0011.0001][.3D77.0020.0010.0002] # <HIRAGANA LETTER HE, HIRAGANA ITERATION MARK> 30D8 30FE ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HE, KATAKANA VOICED ITERATION MARK> FF8D 30FE ; [.3D77.0020.0011.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HE, KATAKANA VOICED ITERATION MARK> 3078 309E ; [.3D77.0020.0011.0001][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HE, HIRAGANA VOICED ITERATION MARK> 30D9 30FD ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER BE, KATAKANA ITERATION MARK> 30D8 3099 30FD ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8D FF9E 30FD ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3079 309D ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER BE, HIRAGANA ITERATION MARK> 3078 3099 309D ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30D9 30FE ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BE, KATAKANA VOICED ITERATION MARK> 30D8 3099 30FE ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8D FF9E 30FE ; [.3D77.0020.0011.0002][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3079 309E ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BE, HIRAGANA VOICED ITERATION MARK> 3078 3099 309E ; [.3D77.0020.0011.0001][.0000.0037.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30DA 30FD ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER PE, KATAKANA ITERATION MARK> 30D8 309A 30FD ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8D FF9F 30FD ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> 307A 309D ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER PE, HIRAGANA ITERATION MARK> 3078 309A 309D ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30DA 30FE ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PE, KATAKANA VOICED ITERATION MARK> 30D8 309A 30FE ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8D FF9F 30FE ; [.3D77.0020.0011.0002][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HE, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 307A 309E ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PE, HIRAGANA VOICED ITERATION MARK> 3078 309A 309E ; [.3D77.0020.0011.0001][.0000.0038.0002][.3D77.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HE, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30DB 30FD ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER HO, KATAKANA ITERATION MARK> FF8E 30FD ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HO, KATAKANA ITERATION MARK> 307B 309D ; [.3D78.0020.0011.0001][.3D78.0020.0010.0002] # <HIRAGANA LETTER HO, HIRAGANA ITERATION MARK> 30DB 30FE ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HO, KATAKANA VOICED ITERATION MARK> FF8E 30FE ; [.3D78.0020.0011.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HO, KATAKANA VOICED ITERATION MARK> 307B 309E ; [.3D78.0020.0011.0001][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HO, HIRAGANA VOICED ITERATION MARK> 30DC 30FD ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER BO, KATAKANA ITERATION MARK> 30DB 3099 30FD ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8E FF9E 30FD ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 307C 309D ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER BO, HIRAGANA ITERATION MARK> 307B 3099 309D ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30DC 30FE ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER BO, KATAKANA VOICED ITERATION MARK> 30DB 3099 30FE ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8E FF9E 30FE ; [.3D78.0020.0011.0002][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 307C 309E ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER BO, HIRAGANA VOICED ITERATION MARK> 307B 3099 309E ; [.3D78.0020.0011.0001][.0000.0037.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30DD 30FD ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER PO, KATAKANA ITERATION MARK> 30DB 309A 30FD ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> FF8E FF9F 30FD ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA ITERATION MARK> 307D 309D ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER PO, HIRAGANA ITERATION MARK> 307B 309A 309D ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30DD 30FE ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER PO, KATAKANA VOICED ITERATION MARK> 30DB 309A 30FE ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF8E FF9F 30FE ; [.3D78.0020.0011.0002][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER HO, HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 307D 309E ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER PO, HIRAGANA VOICED ITERATION MARK> 307B 309A 309E ; [.3D78.0020.0011.0001][.0000.0038.0002][.3D78.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER HO, COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30DE 30FD ; [.3D79.0020.0011.0002][.3D79.0020.0010.0002] # <KATAKANA LETTER MA, KATAKANA ITERATION MARK> FF8F 30FD ; [.3D79.0020.0011.0002][.3D79.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MA, KATAKANA ITERATION MARK> 307E 309D ; [.3D79.0020.0011.0001][.3D79.0020.0010.0002] # <HIRAGANA LETTER MA, HIRAGANA ITERATION MARK> 30DF 30FD ; [.3D7A.0020.0011.0002][.3D7A.0020.0010.0002] # <KATAKANA LETTER MI, KATAKANA ITERATION MARK> FF90 30FD ; [.3D7A.0020.0011.0002][.3D7A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MI, KATAKANA ITERATION MARK> 307F 309D ; [.3D7A.0020.0011.0001][.3D7A.0020.0010.0002] # <HIRAGANA LETTER MI, HIRAGANA ITERATION MARK> 30E0 30FD ; [.3D7B.0020.0011.0002][.3D7B.0020.0010.0002] # <KATAKANA LETTER MU, KATAKANA ITERATION MARK> FF91 30FD ; [.3D7B.0020.0011.0002][.3D7B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MU, KATAKANA ITERATION MARK> 3080 309D ; [.3D7B.0020.0011.0001][.3D7B.0020.0010.0002] # <HIRAGANA LETTER MU, HIRAGANA ITERATION MARK> 30E1 30FD ; [.3D7C.0020.0011.0002][.3D7C.0020.0010.0002] # <KATAKANA LETTER ME, KATAKANA ITERATION MARK> FF92 30FD ; [.3D7C.0020.0011.0002][.3D7C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER ME, KATAKANA ITERATION MARK> 3081 309D ; [.3D7C.0020.0011.0001][.3D7C.0020.0010.0002] # <HIRAGANA LETTER ME, HIRAGANA ITERATION MARK> 30E2 30FD ; [.3D7D.0020.0011.0002][.3D7D.0020.0010.0002] # <KATAKANA LETTER MO, KATAKANA ITERATION MARK> FF93 30FD ; [.3D7D.0020.0011.0002][.3D7D.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER MO, KATAKANA ITERATION MARK> 3082 309D ; [.3D7D.0020.0011.0001][.3D7D.0020.0010.0002] # <HIRAGANA LETTER MO, HIRAGANA ITERATION MARK> 30E3 30FD ; [.3D7E.0020.000F.0002][.3D7E.0020.0010.0002] # <KATAKANA LETTER SMALL YA, KATAKANA ITERATION MARK> FF6C 30FD ; [.3D7E.0020.000F.0002][.3D7E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL YA, KATAKANA ITERATION MARK> 3083 309D ; [.3D7E.0020.000F.0001][.3D7E.0020.0010.0002] # <HIRAGANA LETTER SMALL YA, HIRAGANA ITERATION MARK> 30E4 30FD ; [.3D7E.0020.0011.0002][.3D7E.0020.0010.0002] # <KATAKANA LETTER YA, KATAKANA ITERATION MARK> FF94 30FD ; [.3D7E.0020.0011.0002][.3D7E.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER YA, KATAKANA ITERATION MARK> 3084 309D ; [.3D7E.0020.0011.0001][.3D7E.0020.0010.0002] # <HIRAGANA LETTER YA, HIRAGANA ITERATION MARK> 30E5 30FD ; [.3D7F.0020.000F.0002][.3D7F.0020.0010.0002] # <KATAKANA LETTER SMALL YU, KATAKANA ITERATION MARK> FF6D 30FD ; [.3D7F.0020.000F.0002][.3D7F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL YU, KATAKANA ITERATION MARK> 3085 309D ; [.3D7F.0020.000F.0001][.3D7F.0020.0010.0002] # <HIRAGANA LETTER SMALL YU, HIRAGANA ITERATION MARK> 30E6 30FD ; [.3D7F.0020.0011.0002][.3D7F.0020.0010.0002] # <KATAKANA LETTER YU, KATAKANA ITERATION MARK> FF95 30FD ; [.3D7F.0020.0011.0002][.3D7F.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER YU, KATAKANA ITERATION MARK> 3086 309D ; [.3D7F.0020.0011.0001][.3D7F.0020.0010.0002] # <HIRAGANA LETTER YU, HIRAGANA ITERATION MARK> 30E7 30FD ; [.3D81.0020.000F.0002][.3D81.0020.0010.0002] # <KATAKANA LETTER SMALL YO, KATAKANA ITERATION MARK> FF6E 30FD ; [.3D81.0020.000F.0002][.3D81.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER SMALL YO, KATAKANA ITERATION MARK> 3087 309D ; [.3D81.0020.000F.0001][.3D81.0020.0010.0002] # <HIRAGANA LETTER SMALL YO, HIRAGANA ITERATION MARK> 30E8 30FD ; [.3D81.0020.0011.0002][.3D81.0020.0010.0002] # <KATAKANA LETTER YO, KATAKANA ITERATION MARK> FF96 30FD ; [.3D81.0020.0011.0002][.3D81.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER YO, KATAKANA ITERATION MARK> 3088 309D ; [.3D81.0020.0011.0001][.3D81.0020.0010.0002] # <HIRAGANA LETTER YO, HIRAGANA ITERATION MARK> 30E9 30FD ; [.3D82.0020.0011.0002][.3D82.0020.0010.0002] # <KATAKANA LETTER RA, KATAKANA ITERATION MARK> FF97 30FD ; [.3D82.0020.0011.0002][.3D82.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RA, KATAKANA ITERATION MARK> 3089 309D ; [.3D82.0020.0011.0001][.3D82.0020.0010.0002] # <HIRAGANA LETTER RA, HIRAGANA ITERATION MARK> 30EA 30FD ; [.3D83.0020.0011.0002][.3D83.0020.0010.0002] # <KATAKANA LETTER RI, KATAKANA ITERATION MARK> FF98 30FD ; [.3D83.0020.0011.0002][.3D83.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RI, KATAKANA ITERATION MARK> 308A 309D ; [.3D83.0020.0011.0001][.3D83.0020.0010.0002] # <HIRAGANA LETTER RI, HIRAGANA ITERATION MARK> 30EB 30FD ; [.3D84.0020.0011.0002][.3D84.0020.0010.0002] # <KATAKANA LETTER RU, KATAKANA ITERATION MARK> FF99 30FD ; [.3D84.0020.0011.0002][.3D84.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RU, KATAKANA ITERATION MARK> 308B 309D ; [.3D84.0020.0011.0001][.3D84.0020.0010.0002] # <HIRAGANA LETTER RU, HIRAGANA ITERATION MARK> 30EC 30FD ; [.3D85.0020.0011.0002][.3D85.0020.0010.0002] # <KATAKANA LETTER RE, KATAKANA ITERATION MARK> FF9A 30FD ; [.3D85.0020.0011.0002][.3D85.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RE, KATAKANA ITERATION MARK> 308C 309D ; [.3D85.0020.0011.0001][.3D85.0020.0010.0002] # <HIRAGANA LETTER RE, HIRAGANA ITERATION MARK> 30ED 30FD ; [.3D86.0020.0011.0002][.3D86.0020.0010.0002] # <KATAKANA LETTER RO, KATAKANA ITERATION MARK> FF9B 30FD ; [.3D86.0020.0011.0002][.3D86.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER RO, KATAKANA ITERATION MARK> 308D 309D ; [.3D86.0020.0011.0001][.3D86.0020.0010.0002] # <HIRAGANA LETTER RO, HIRAGANA ITERATION MARK> 30EE 30FD ; [.3D87.0020.000F.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER SMALL WA, KATAKANA ITERATION MARK> 308E 309D ; [.3D87.0020.000F.0001][.3D87.0020.0010.0002] # <HIRAGANA LETTER SMALL WA, HIRAGANA ITERATION MARK> 30EE 30FE ; [.3D87.0020.000F.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL WA, KATAKANA VOICED ITERATION MARK> 308E 309E ; [.3D87.0020.000F.0001][.3D87.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL WA, HIRAGANA VOICED ITERATION MARK> 30EF 30FD ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER WA, KATAKANA ITERATION MARK> FF9C 30FD ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WA, KATAKANA ITERATION MARK> 308F 309D ; [.3D87.0020.0011.0001][.3D87.0020.0010.0002] # <HIRAGANA LETTER WA, HIRAGANA ITERATION MARK> 30EF 30FE ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WA, KATAKANA VOICED ITERATION MARK> FF9C 30FE ; [.3D87.0020.0011.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WA, KATAKANA VOICED ITERATION MARK> 308F 309E ; [.3D87.0020.0011.0001][.3D87.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WA, HIRAGANA VOICED ITERATION MARK> 30F0 30FD ; [.3D88.0020.0011.0002][.3D88.0020.0010.0002] # <KATAKANA LETTER WI, KATAKANA ITERATION MARK> 3090 309D ; [.3D88.0020.0011.0001][.3D88.0020.0010.0002] # <HIRAGANA LETTER WI, HIRAGANA ITERATION MARK> 30F0 30FE ; [.3D88.0020.0011.0002][.3D88.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WI, KATAKANA VOICED ITERATION MARK> 3090 309E ; [.3D88.0020.0011.0001][.3D88.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WI, HIRAGANA VOICED ITERATION MARK> 30F1 30FD ; [.3D89.0020.0011.0002][.3D89.0020.0010.0002] # <KATAKANA LETTER WE, KATAKANA ITERATION MARK> 3091 309D ; [.3D89.0020.0011.0001][.3D89.0020.0010.0002] # <HIRAGANA LETTER WE, HIRAGANA ITERATION MARK> 30F1 30FE ; [.3D89.0020.0011.0002][.3D89.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WE, KATAKANA VOICED ITERATION MARK> 3091 309E ; [.3D89.0020.0011.0001][.3D89.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WE, HIRAGANA VOICED ITERATION MARK> 30F2 30FD ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002] # <KATAKANA LETTER WO, KATAKANA ITERATION MARK> FF66 30FD ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WO, KATAKANA ITERATION MARK> 3092 309D ; [.3D8A.0020.0011.0001][.3D8A.0020.0010.0002] # <HIRAGANA LETTER WO, HIRAGANA ITERATION MARK> 30F2 30FE ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WO, KATAKANA VOICED ITERATION MARK> FF66 30FE ; [.3D8A.0020.0011.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WO, KATAKANA VOICED ITERATION MARK> 3092 309E ; [.3D8A.0020.0011.0001][.3D8A.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER WO, HIRAGANA VOICED ITERATION MARK> 30F3 30FD ; [.3D8B.0020.0011.0002][.3D8B.0020.0010.0002] # <KATAKANA LETTER N, KATAKANA ITERATION MARK> FF9D 30FD ; [.3D8B.0020.0011.0002][.3D8B.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER N, KATAKANA ITERATION MARK> 3093 309D ; [.3D8B.0020.0011.0001][.3D8B.0020.0010.0002] # <HIRAGANA LETTER N, HIRAGANA ITERATION MARK> 30F4 30FD ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER VU, KATAKANA ITERATION MARK> 30A6 3099 30FD ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002] # <KATAKANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF73 FF9E 30FD ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 3094 309D ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002] # <HIRAGANA LETTER VU, HIRAGANA ITERATION MARK> 3046 3099 309D ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002] # <HIRAGANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA ITERATION MARK> 30F4 30FE ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VU, KATAKANA VOICED ITERATION MARK> 30A6 3099 30FE ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF73 FF9E 30FE ; [.3D5C.0020.0011.0002][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER U, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 3094 309E ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER VU, HIRAGANA VOICED ITERATION MARK> 3046 3099 309E ; [.3D5C.0020.0011.0001][.0000.0037.0002][.3D5C.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER U, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, HIRAGANA VOICED ITERATION MARK> 30F5 30FD ; [.3D60.0020.000F.0002][.3D60.0020.0010.0002] # <KATAKANA LETTER SMALL KA, KATAKANA ITERATION MARK> 3095 309D ; [.3D60.0020.000F.0001][.3D60.0020.0010.0002] # <HIRAGANA LETTER SMALL KA, HIRAGANA ITERATION MARK> 30F5 30FE ; [.3D60.0020.000F.0002][.3D60.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL KA, KATAKANA VOICED ITERATION MARK> 3095 309E ; [.3D60.0020.000F.0001][.3D60.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL KA, HIRAGANA VOICED ITERATION MARK> 30F6 30FD ; [.3D63.0020.000F.0002][.3D63.0020.0010.0002] # <KATAKANA LETTER SMALL KE, KATAKANA ITERATION MARK> 3096 309D ; [.3D63.0020.000F.0001][.3D63.0020.0010.0002] # <HIRAGANA LETTER SMALL KE, HIRAGANA ITERATION MARK> 30F6 30FE ; [.3D63.0020.000F.0002][.3D63.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL KE, KATAKANA VOICED ITERATION MARK> 3096 309E ; [.3D63.0020.000F.0001][.3D63.0020.0010.0002][.0000.0037.0002] # <HIRAGANA LETTER SMALL KE, HIRAGANA VOICED ITERATION MARK> 30F7 30FD ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER VA, KATAKANA ITERATION MARK> 30EF 3099 30FD ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002] # <KATAKANA LETTER WA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF9C FF9E 30FD ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 30F7 30FE ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VA, KATAKANA VOICED ITERATION MARK> 30EF 3099 30FE ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF9C FF9E 30FE ; [.3D87.0020.0011.0002][.0000.0037.0002][.3D87.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WA, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 30F8 30FD ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002] # <KATAKANA LETTER VI, KATAKANA ITERATION MARK> 30F0 3099 30FD ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002] # <KATAKANA LETTER WI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 30F8 30FE ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VI, KATAKANA VOICED ITERATION MARK> 30F0 3099 30FE ; [.3D88.0020.0011.0002][.0000.0037.0002][.3D88.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WI, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 30F9 30FD ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002] # <KATAKANA LETTER VE, KATAKANA ITERATION MARK> 30F1 3099 30FD ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002] # <KATAKANA LETTER WE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 30F9 30FE ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VE, KATAKANA VOICED ITERATION MARK> 30F1 3099 30FE ; [.3D89.0020.0011.0002][.0000.0037.0002][.3D89.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WE, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 30FA 30FD ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002] # <KATAKANA LETTER VO, KATAKANA ITERATION MARK> 30F2 3099 30FD ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002] # <KATAKANA LETTER WO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA ITERATION MARK> FF66 FF9E 30FD ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA ITERATION MARK> 30FA 30FE ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER VO, KATAKANA VOICED ITERATION MARK> 30F2 3099 30FE ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER WO, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> FF66 FF9E 30FE ; [.3D8A.0020.0011.0002][.0000.0037.0002][.3D8A.0020.0010.0002][.0000.0037.0002] # <HALFWIDTH KATAKANA LETTER WO, HALFWIDTH KATAKANA VOICED SOUND MARK, KATAKANA VOICED ITERATION MARK> 31F0 30FD ; [.3D62.0020.000F][.3D62.0020.0010.0002] # <KATAKANA LETTER SMALL KU, KATAKANA ITERATION MARK> 31F0 30FE ; [.3D62.0020.000F][.3D62.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL KU, KATAKANA VOICED ITERATION MARK> 31F1 30FD ; [.3D66.0020.000F][.3D66.0020.0010.0002] # <KATAKANA LETTER SMALL SI, KATAKANA ITERATION MARK> 31F1 30FE ; [.3D66.0020.000F][.3D66.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL SI, KATAKANA VOICED ITERATION MARK> 31F2 30FD ; [.3D67.0020.000F][.3D67.0020.0010.0002] # <KATAKANA LETTER SMALL SU, KATAKANA ITERATION MARK> 31F2 30FE ; [.3D67.0020.000F][.3D67.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL SU, KATAKANA VOICED ITERATION MARK> 31F3 30FD ; [.3D6E.0020.000F][.3D6E.0020.0010.0002] # <KATAKANA LETTER SMALL TO, KATAKANA ITERATION MARK> 31F3 30FE ; [.3D6E.0020.000F][.3D6E.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL TO, KATAKANA VOICED ITERATION MARK> 31F4 30FD ; [.3D71.0020.000F][.3D71.0020.0010.0002] # <KATAKANA LETTER SMALL NU, KATAKANA ITERATION MARK> 31F5 30FD ; [.3D74.0020.000F][.3D74.0020.0010.0002] # <KATAKANA LETTER SMALL HA, KATAKANA ITERATION MARK> 31F5 30FE ; [.3D74.0020.000F][.3D74.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HA, KATAKANA VOICED ITERATION MARK> 31F6 30FD ; [.3D75.0020.000F][.3D75.0020.0010.0002] # <KATAKANA LETTER SMALL HI, KATAKANA ITERATION MARK> 31F6 30FE ; [.3D75.0020.000F][.3D75.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HI, KATAKANA VOICED ITERATION MARK> 31F7 30FD ; [.3D76.0020.000F][.3D76.0020.0010.0002] # <KATAKANA LETTER SMALL HU, KATAKANA ITERATION MARK> 31F7 30FE ; [.3D76.0020.000F][.3D76.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HU, KATAKANA VOICED ITERATION MARK> 31F8 30FD ; [.3D77.0020.000F][.3D77.0020.0010.0002] # <KATAKANA LETTER SMALL HE, KATAKANA ITERATION MARK> 31F8 30FE ; [.3D77.0020.000F][.3D77.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HE, KATAKANA VOICED ITERATION MARK> 31F9 30FD ; [.3D78.0020.000F][.3D78.0020.0010.0002] # <KATAKANA LETTER SMALL HO, KATAKANA ITERATION MARK> 31F9 30FE ; [.3D78.0020.000F][.3D78.0020.0010.0002][.0000.0037.0002] # <KATAKANA LETTER SMALL HO, KATAKANA VOICED ITERATION MARK> 31FA 30FD ; [.3D7B.0020.000F][.3D7B.0020.0010.0002] # <KATAKANA LETTER SMALL MU, KATAKANA ITERATION MARK> 31FB 30FD ; [.3D82.0020.000F][.3D82.0020.0010.0002] # <KATAKANA LETTER SMALL RA, KATAKANA ITERATION MARK> 31FC 30FD ; [.3D83.0020.000F][.3D83.0020.0010.0002] # <KATAKANA LETTER SMALL RI, KATAKANA ITERATION MARK> 31FD 30FD ; [.3D84.0020.000F][.3D84.0020.0010.0002] # <KATAKANA LETTER SMALL RU, KATAKANA ITERATION MARK> 31FE 30FD ; [.3D85.0020.000F][.3D85.0020.0010.0002] # <KATAKANA LETTER SMALL RE, KATAKANA ITERATION MARK> 31FF 30FD ; [.3D86.0020.000F][.3D86.0020.0010.0002] # <KATAKANA LETTER SMALL RO, KATAKANA ITERATION MARK> F967 ; [.8961.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.89AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.828D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 2F801 ; [.81B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.8709.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E F91B ; [.8BA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B F9BA ; [.8B1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA F977 ; [.8B1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 F9FD ; [.84DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD F9A8 ; [.8B44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 F92D ; [.8BC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D F9B5 ; [.8B46.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.897B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.897B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 F965 ; [.89C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 F9D4 ; [.8B34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 2F809 ; [.8926.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 2F80B ; [.8699.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.8B20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.866B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.866B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A FA0C ; [.8C0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.84E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.8A6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.8A6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F ; [.8C0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F FA72 ; [.8651.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.8C12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 F9D1 ; [.8B7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 2F811 ; [.8284.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.8C15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F815 ; [.83D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 2F8D2 ; [.8A0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.8C1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F817 ; [.856C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 2F818 ; [.8C1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F81A ; [.87F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A FA71 ; [.8C29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71 2F81B ; [.8C29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B F92E ; [.8B47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E F979 ; [.8C2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 F955 ; [.8B22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.98D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 2F81D ; [.8C33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F81E ; [.85B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.8619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.8619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.8B56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C F9DD ; [.8AFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.8432.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.839C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F822 ; [.815D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 F9C7 ; [.8B10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 F98A ; [.8B32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A F99D ; [.8B57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D FA76 ; [.8AAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.8AAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.89C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.89C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.9789.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 F92F ; [.8C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.8263.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.8263.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 F97F ; [.8C5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F FA77 ; [.84A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.84A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.89DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A ; [.8C62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A F963 ; [.8A15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.8A15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B F9EB ; [.8832.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F82C ; [.8C73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.890B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.890B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E ; [.88BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F ; [.86A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.8AF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F831 ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 F96B ; [.8C84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F836 ; [.820F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 2F837 ; [.8C87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 F906 ; [.827A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.823E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A ; [.847F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A F9DE ; [.8AFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.8C97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.8210.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D F980 ; [.8B65.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.879F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.84C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F 2F840 ; [.8CA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.8055.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F842 ; [.87F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 2F843 ; [.82AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843 2F844 ; [.8CC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 2F845 ; [.864E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.864E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.8CD7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.815E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.815E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F848 ; [.81FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 FA37 ; [.870B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 2F84C ; [.870B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C FA38 ; [.81C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.8999.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F F9A9 ; [.8D08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.8D12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F855 ; [.82B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.856E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.8580.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F857 ; [.89DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 FA39 ; [.89A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39 FA10 ; [.8784.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 FA7C ; [.8784.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C F96C ; [.83D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.8A18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A FA7D ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D F94A ; [.8D4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A F942 ; [.8D4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 2F851 ; [.8671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851 2F85A ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A 2F85B ; [.8792.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B 2F85D ; [.86BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D 2F85E ; [.8A5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E FA7E ; [.809F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.8853.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.82B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.8A24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.851C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 FA80 ; [.8D83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F866 ; [.8965.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 2F86A ; [.8D99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B ; [.8D99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B FA04 ; [.86EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 2F86D ; [.8DAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D F95F ; [.887C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F F9AA ; [.887C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA 2F86F ; [.887C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F F9BC ; [.8B23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F870 ; [.8DBA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870 2F872 ; [.84BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872 2F873 ; [.8530.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873 2F875 ; [.8DC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875 F9BD ; [.8873.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.87E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 FA3B ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B F9DF ; [.8AFF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF FA3C ; [.8DCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C 2F878 ; [.8DCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878 F9D5 ; [.8DEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 F921 ; [.8AF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 F9AB ; [.8B49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB 2F881 ; [.8509.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F884 ; [.8700.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F886 ; [.8A02.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 F98E ; [.8880.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E FA01 ; [.87EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88D ; [.8513.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.8B5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.8B6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.8B6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA0B ; [.8140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B F982 ; [.8E30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 2F890 ; [.8E36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890 F943 ; [.8B6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 2F874 ; [.880B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874 2F899 ; [.82B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.83D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 2F89A ; [.875D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A F9D8 ; [.8B0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 F966 ; [.8989.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.8E5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F89D ; [.8877.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.843F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.8881.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 F960 ; [.87F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.8B4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC FA6B ; [.82B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B 2F8A0 ; [.8E80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 FA3D ; [.8114.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.8114.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A5 ; [.884A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 FA86 ; [.8E95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 F9B9 ; [.8E8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 FA88 ; [.8AA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 F9D9 ; [.8EAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 2F8A6 ; [.8465.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.835F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.835F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA87 ; [.8596.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87 2F8A8 ; [.8596.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8 FA3E ; [.812D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E FA3F ; [.869B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.869B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.869B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB F98F ; [.8B5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F 2F8AD ; [.899B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AC ; [.82EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC FA40 ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 FA8B ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B 2F8B0 ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 F90D ; [.8ED5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D 2F8B1 ; [.8ED5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 F990 ; [.8EDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 2F8B2 ; [.85ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3 ; [.8EE2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3 F9D2 ; [.8EE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.86D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F8B5 ; [.89E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.8F09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 F95B ; [.8EFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B FA02 ; [.86EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.8EF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 F973 ; [.84CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 2F8B9 ; [.8903.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.8F12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 2F8BB ; [.8495.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB F9A4 ; [.8882.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 2F8BC ; [.867A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC F975 ; [.8B0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.80A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.8F2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D FA8E ; [.8F15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E 2F8C3 ; [.8A29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 F991 ; [.8883.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 FA41 ; [.895F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.895F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.8F64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 2F8C9 ; [.82BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.8F6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 F9BE ; [.8B24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE F983 ; [.8B1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 FA42 ; [.81D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42 F9E0 ; [.8036.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 2F8CD ; [.8F89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD FA12 ; [.85F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.85F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 F9C5 ; [.8F94.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 FA43 ; [.8510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.8510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF FA06 ; [.8A06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 F901 ; [.8366.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.8516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.83D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 F929 ; [.8B70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.8B70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.8B70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.8A07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.8A07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 F9E1 ; [.8B00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.84A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.8576.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.8FB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB 2F8E0 ; [.8FC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0 F9F4 ; [.8B36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.8A9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 F9DA ; [.829B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA F97A ; [.8B25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.88B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.88B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 F9E2 ; [.8B01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 F914 ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 F95C ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C F9BF ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF F94C ; [.9048.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C F931 ; [.8B67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 2F8ED ; [.828E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED F91D ; [.8AF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D 2F8EF ; [.8468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F1 ; [.907B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 FA95 ; [.9080.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95 F970 ; [.840F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 FA96 ; [.840F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 2F8F5 ; [.840F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8F6 ; [.8145.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6 2F8FA ; [.88F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA F972 ; [.8777.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.80A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.8916.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 F9E3 ; [.87BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 F915 ; [.8AF1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.8829.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F900 ; [.889A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.8B11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.8B11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.8B11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.836D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.8B73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.811D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.811D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.859C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.90D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.8B37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 F9D6 ; [.90E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 2F90E ; [.90D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.8512.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.836E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.90E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 F9CB ; [.8B12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.87C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC FA99 ; [.8469.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.8469.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.8163.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 F94E ; [.8B74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E FA47 ; [.8198.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 FA9A ; [.8198.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A F992 ; [.8B5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 2F90F ; [.8763.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F912 ; [.912F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 F922 ; [.8AF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 F984 ; [.913F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 2F915 ; [.9140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 FA9B ; [.8847.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F914 ; [.8847.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914 2F835 ; [.811E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 2F918 ; [.83DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.914B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.8713.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A F99F ; [.8B58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.9156.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 F993 ; [.8B5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 FA48 ; [.8498.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.8498.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C F9C0 ; [.916F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 F9EE ; [.8B38.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE F932 ; [.9178.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 F91E ; [.9179.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F920 ; [.917A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 FA9E ; [.84A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.84A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 F946 ; [.8B75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 2F924 ; [.83DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 FA9F ; [.88F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F F92B ; [.8B76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B FA16 ; [.874F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 FAA0 ; [.874F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 F9A7 ; [.91AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 2F928 ; [.91B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 F961 ; [.8B0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.8B0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F929 ; [.80C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 F9AD ; [.8B4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.91B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.8B02.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.8B13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.86F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92F ; [.91C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F F9AE ; [.91C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE 2F932 ; [.91CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 FAA3 ; [.8103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3 F9CD ; [.8B14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.8B0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.803A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.803A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 F9E5 ; [.8B04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 FAA5 ; [.921B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 F9C1 ; [.8B28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 F90E ; [.922C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E FA17 ; [.8094.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.8094.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7 ; [.85F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 F933 ; [.924A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 FAA8 ; [.8775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.8775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.854D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F945 ; [.9253.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945 2F946 ; [.85A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946 2F947 ; [.85A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947 FAAA ; [.873E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA 2F94A ; [.9263.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A F9CE ; [.8B15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.9281.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.9281.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.8919.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.928D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 F985 ; [.927A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 FA18 ; [.8B4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18 FA4C ; [.8499.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C FA4E ; [.81DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.844C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA4F ; [.8AB9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.8661.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.8661.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.84F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 FA19 ; [.85A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.8550.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A F93C ; [.92A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C FA52 ; [.80ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 FA53 ; [.87AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 FA1B ; [.898C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.898C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 F9B6 ; [.92A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 F956 ; [.8B2A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 FA54 ; [.839F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 2F959 ; [.839F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 2F95B ; [.80D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B FA55 ; [.8840.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 F9F7 ; [.8B0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 F9F8 ; [.8157.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 FA56 ; [.8620.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 FAAD ; [.8620.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD 2F962 ; [.930B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 2F963 ; [.8734.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 F9A6 ; [.8B5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 F944 ; [.9312.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 F9F9 ; [.8B16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.85F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D 2F966 ; [.9341.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966 FA03 ; [.8811.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 F97B ; [.8B2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B 2F96A ; [.81DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A F9CF ; [.8940.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF F96A ; [.8402.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.8B42.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F FAAF ; [.9360.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF 2F96C ; [.935D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C F957 ; [.801C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 2F96E ; [.9368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E F996 ; [.8B60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 FA57 ; [.8B60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 FAB0 ; [.8B60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 FA58 ; [.9380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 F950 ; [.9389.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 FA59 ; [.88FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 FA5A ; [.8515.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.8ED1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 F90F ; [.8AEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F F9AF ; [.93C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.8066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E F934 ; [.8B78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 FA5B ; [.849B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.849B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.849B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A F9B0 ; [.93E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 F997 ; [.8B61.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.93EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.8B79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 F953 ; [.8B7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.93F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.8048.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F985 ; [.9409.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 F926 ; [.942A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 F9F6 ; [.8B3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 FA5C ; [.84D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F893 ; [.9433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.9433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B FA6D ; [.81B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D F97C ; [.8B2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C 2F990 ; [.8051.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F991 ; [.848E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.80F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.89F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.8105.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.84AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.84AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.827F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 2F99C ; [.9478.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C F9FE ; [.873C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.8380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F99D ; [.9493.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D 2F9A1 ; [.81FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.8270.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.83E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 FAB4 ; [.80F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 F958 ; [.8936.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.8AF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 F96E ; [.8ADA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E FA5F ; [.8751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.8751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F F999 ; [.8B62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 F9C2 ; [.94BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 F923 ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 F9F0 ; [.94E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 F935 ; [.94E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 F91F ; [.8AFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F F910 ; [.94E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 2F9B3 ; [.8209.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 F936 ; [.8B1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 2F9B4 ; [.8B1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5 ; [.94EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B7 ; [.94F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 F911 ; [.8AEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 FA08 ; [.8381.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F9C4 ; [.8040.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 F9A0 ; [.8B59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 F9E7 ; [.8B05.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7 F9E8 ; [.8B06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 F912 ; [.8AEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 FA60 ; [.8165.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.9576.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 F924 ; [.9580.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 FAB7 ; [.898F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 FA0A ; [.82FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A FA61 ; [.8454.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 FAB8 ; [.8454.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2F9CF ; [.85FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF FAB9 ; [.876B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 FABB ; [.8600.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB F97D ; [.8B2D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D F941 ; [.8B81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 FABE ; [.8AA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE 2F9D0 ; [.8AA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 FA22 ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 FABA ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA F95D ; [.86F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D FABD ; [.86F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD FA62 ; [.8097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 FABC ; [.8097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC FA63 ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 FABF ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF F9FC ; [.8478.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC F95A ; [.95E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A FAC0 ; [.8F6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 2F9D1 ; [.8F6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 F900 ; [.95ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 2F9D2 ; [.95F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D4 ; [.81AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.9608.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.8B69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 F903 ; [.9607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.895D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 FA65 ; [.869E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 FAC1 ; [.869E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 2F9D7 ; [.81E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9DA ; [.9629.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.8B6A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 F902 ; [.849D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 F998 ; [.966D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 F9D7 ; [.8B3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 FAC2 ; [.8AA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 2F9DF ; [.8AA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF FA07 ; [.966F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 F98D ; [.967A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D 2F98D ; [.8474.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D F971 ; [.86FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 F99A ; [.8B63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.804E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.804E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 FAC3 ; [.96A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.8B2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.96AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 F92C ; [.8B7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C FA26 ; [.87E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 F919 ; [.8AF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 F9B7 ; [.96CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 F9E9 ; [.8B07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.8B2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.8275.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A F9B1 ; [.8B4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9EE ; [.8124.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE F986 ; [.9739.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 F9C6 ; [.974C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.9751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.838C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.8B30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 F9D3 ; [.8B09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 F9DC ; [.8B17.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9F1 ; [.8B3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1 FA2F ; [.8B4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F F9B8 ; [.9765.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 F9EA ; [.8B08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.8864.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.8864.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 F9B2 ; [.8B50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.8AF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 F938 ; [.8B6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 F9B3 ; [.9781.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 FA1C ; [.8A9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.8A9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 FA69 ; [.8254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 FACA ; [.8254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA F9B4 ; [.8B31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 FA6A ; [.895E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A FACC ; [.895E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC F9D0 ; [.8B43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2FA02 ; [.81E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.8902.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.845D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C ; [.81B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C F91A ; [.97E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A F987 ; [.97FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 F939 ; [.8B66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 F9F2 ; [.8B3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 FA2D ; [.8798.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D F93A ; [.83F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.9890.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 F940 ; [.8476.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 F988 ; [.8B52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 F9F3 ; [.8B3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FA15 ; [.8A2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 F989 ; [.98A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 2FA17 ; [.98B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17 2FA1C ; [.892E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C F9C4 ; [.8B19.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 F907 ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE ENTRY }; Unicode/Collate/Locale/eo.pl 0000644 00000003315 15037233322 0011656 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0109 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX 0063 0302 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX 0108 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX 0043 0302 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX 011D ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX 0067 0302 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX 011C ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX 0047 0302 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX 0125 ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX 0068 0302 ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX 0124 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0048 0302 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 0135 ; [.1D4D.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX 006A 0302 ; [.1D4D.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX 0134 ; [.1D4D.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX 004A 0302 ; [.1D4D.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX 015D ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX 0073 0302 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX 015C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX 0053 0302 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX 016D ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH BREVE 0075 0306 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH BREVE 016C ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE 0055 0306 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE ENTRY }; Unicode/Collate/Locale/zh_strk.pl 0000644 00000320164 15037233322 0012743 0 ustar 00 use Unicode::Collate::CJK::Stroke; +{ locale_version => 1.25, overrideCJK => \&Unicode::Collate::CJK::Stroke::weightStroke, entry => <<'ENTRY', # for DUCET v9.0.0 0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON> 004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON> 1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON> 004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON> 006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT> 006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK> 004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT> 004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK> 006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON> 004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON> 0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON> 00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON> 01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON> 00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON> 01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS FDD0 2801 ; [.8000.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1> 2E84 ; [.8007.0020.0002] # CJK RADICAL SECOND THREE 3006 ; [.8012.0020.0002] # IDEOGRAPHIC CLOSING MARK 3007 ; [.8013.0020.0002] # IDEOGRAPHIC NUMBER ZERO 3021 ; [.8014.0020.0002] # HANGZHOU NUMERAL ONE 3025 ; [.8015.0020.0002] # HANGZHOU NUMERAL FIVE 303B ; [.8016.0020.0002] # VERTICAL IDEOGRAPHIC ITERATION MARK FDD0 2802 ; [.8017.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-2> 2E86 ; [.8031.0020.0002] # CJK RADICAL BOX 2E87 ; [.8035.0020.0002] # CJK RADICAL TABLE 2E88 ; [.8038.0020.0002] # CJK RADICAL KNIFE ONE 2E8A ; [.8042.0020.0002] # CJK RADICAL DIVINATION 2E80 ; [.8047.0020.0002] # CJK RADICAL REPEAT 2ECF ; [.804B.0020.0002] # CJK RADICAL CITY 2ED6 ; [.804C.0020.0002] # CJK RADICAL MOUND TWO 3022 ; [.804E.0020.0002] # HANGZHOU NUMERAL TWO 3024 ; [.804F.0020.0002] # HANGZHOU NUMERAL FOUR 3026 ; [.8050.0020.0002] # HANGZHOU NUMERAL SIX FDD0 2803 ; [.8051.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-12> 2E8C ; [.808F.0020.0002] # CJK RADICAL SMALL ONE 2E8D ; [.8090.0020.0002] # CJK RADICAL SMALL TWO 2E95 ; [.80A8.0020.0002] # CJK RADICAL SNOUT TWO 2EBE ; [.80B3.0020.0002] # CJK RADICAL GRASS ONE 2ECC ; [.80B5.0020.0002] # CJK RADICAL SIMPLIFIED WALK 3005 ; [.80BB.0020.0002] # IDEOGRAPHIC ITERATION MARK 3023 ; [.80BC.0020.0002] # HANGZHOU NUMERAL THREE 3027 ; [.80BD.0020.0002] # HANGZHOU NUMERAL SEVEN FDD0 2804 ; [.80BE.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-3> 2E9C ; [.815B.0020.0002] # CJK RADICAL SUN 2E9D ; [.815E.0020.0002] # CJK RADICAL MOON 2EA5 ; [.8170.0020.0002] # CJK RADICAL PAW TWO 2EA7 ; [.817A.0020.0002] # CJK RADICAL COW 2EBC ; [.8185.0020.0002] # CJK RADICAL MEAT 2ECD ; [.818E.0020.0002] # CJK RADICAL WALK ONE 3028 ; [.8193.0020.0002] # HANGZHOU NUMERAL EIGHT 3029 ; [.8194.0020.0002] # HANGZHOU NUMERAL NINE FDD0 2805 ; [.8195.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-13> 2EAA ; [.82B3.0020.0002] # CJK RADICAL BOLT OF CLOTH 2EAC ; [.82BF.0020.0002] # CJK RADICAL SPIRIT ONE FDD0 2806 ; [.82E7.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-23> 2EAE ; [.84B2.0020.0002] # CJK RADICAL BAMBOO 2EB6 ; [.84C6.0020.0002] # CJK RADICAL SHEEP FDD0 2807 ; [.8529.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-123> 2EC6 ; [.887A.0020.0002] # CJK RADICAL SIMPLIFIED HORN 2ECA ; [.889A.0020.0002] # CJK RADICAL FOOT FDD0 2808 ; [.88FA.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-4> FA24 ; [.8E20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA24 2ED7 ; [.8E5B.0020.0002] # CJK RADICAL RAIN FDD0 2809 ; [.8E7C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-14> 2EDE ; [.94AC.0020.0002] # CJK RADICAL EAT TWO 2EE3 ; [.94C3.0020.0002] # CJK RADICAL BONE FDD0 280A ; [.94CA.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-24> FA0F ; [.95F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0F FDD0 280B ; [.9C16.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-124> FA21 ; [.A279.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA21 FA23 ; [.A312.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA23 FDD0 280C ; [.A41D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-34> FA11 ; [.A5A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA11 FDD0 280D ; [.AC7F.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-134> FA0E ; [.ACD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0E FA13 ; [.AEF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA13 FA29 ; [.B3B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA29 FDD0 280E ; [.B44A.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-234> FA14 ; [.B690.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA14 FDD0 280F ; [.BB5A.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1234> FA27 ; [.C173.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA27 FDD0 2810 ; [.C276.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-5> FA28 ; [.C748.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA28 FDD0 2811 ; [.C860.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-15> FDD0 2812 ; [.CD3D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-25> FDD0 2813 ; [.D0E6.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-125> FA1F ; [.D23D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1F FDD0 2814 ; [.D41B.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-35> FDD0 2815 ; [.D68C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-135> FDD0 2816 ; [.D846.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-235> FDD0 2817 ; [.D993.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1235> FDD0 2818 ; [.DA95.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-45> FDD0 2819 ; [.DB3D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-145> FDD0 281A ; [.DBB4.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-245> FDD0 281B ; [.DBF1.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1245> FDD0 281C ; [.DC29.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-345> FDD0 281D ; [.DC4D.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1345> FDD0 281E ; [.DC5C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-2345> FDD0 281F ; [.DC6C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-12345> FDD0 2820 ; [.DC71.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-6> FDD0 2821 ; [.DC76.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-16> FDD0 2823 ; [.DC7C.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-126> FDD0 2824 ; [.DC7E.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-36> FDD0 2827 ; [.DC80.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-1236> FDD0 2830 ; [.DC82.0020.0002] # <noncharacter-FDD0, BRAILLE PATTERN DOTS-56> 3220 ; [*0317.0020.0004][.8001.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE 3226 ; [*0317.0020.0004][.801A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN 3222 ; [*0317.0020.0004][.8054.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE 3228 ; [*0317.0020.0004][.8027.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE 3221 ; [*0317.0020.0004][.802A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO 3224 ; [*0317.0020.0004][.80D7.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE 3239 ; [*0317.0020.0004][.81C2.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT 323D ; [*0317.0020.0004][.831C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE 3241 ; [*0317.0020.0004][.832C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST 3227 ; [*0317.0020.0004][.8030.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT 3225 ; [*0317.0020.0004][.80F5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX 3238 ; [*0317.0020.0004][.85A8.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR 3229 ; [*0317.0020.0004][.8041.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN 323F ; [*0317.0020.0004][.899D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE 3234 ; [*0317.0020.0004][.839D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME 323A ; [*0317.0020.0004][.89D5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL 3223 ; [*0317.0020.0004][.822D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR 322F ; [*0317.0020.0004][.8081.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH 323B ; [*0317.0020.0004][.8A8D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY 3230 ; [*0317.0020.0004][.815C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN 322A ; [*0317.0020.0004][.815F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON 3232 ; [*0317.0020.0004][.845A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE 322D ; [*0317.0020.0004][.8160.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD 3231 ; [*0317.0020.0004][.979F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK 322C ; [*0317.0020.0004][.816D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER 322B ; [*0317.0020.0004][.816E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE 3235 ; [*0317.0020.0004][.9895.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL 323C ; [*0317.0020.0004][.B79A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE 3233 ; [*0317.0020.0004][.8D2E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY 3237 ; [*0317.0020.0004][.9970.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION 3240 ; [*0317.0020.0004][.A100.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL 3242 ; [*0317.0020.0004][.84D8.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF 3243 ; [*0317.0020.0004][.84D9.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH 3236 ; [*0317.0020.0004][.9B3B.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL 323E ; [*0317.0020.0004][.B2A5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE 322E ; [*0317.0020.0004][.8E33.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL 3358 ; [.1C3D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO 33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN 32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER 3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN 33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN 32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER 3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN 33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE 32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER 3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE 33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN 3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN 33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN 3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN 33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN 3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN 33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN 3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN 33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN 3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN 33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN 336A ; [.1C3E.0020.0004][.1C45.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN 33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN 336B ; [.1C3E.0020.0004][.1C46.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN 33E0 ; [.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE 32C0 ; [.1C3E.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY 3359 ; [.1C3E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE 33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY 336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY 33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE 336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE 33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO 336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO 33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE 336F ; [.1C3F.0020.0004][.1C40.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE 33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR 3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR 33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE 33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX 33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN 33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT 33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE 33E1 ; [.1C3F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO 32C1 ; [.1C3F.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY 335A ; [.1C3F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO 33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY 33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE 33E2 ; [.1C40.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE 32C2 ; [.1C40.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH 335B ; [.1C40.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE 33E3 ; [.1C41.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR 32C3 ; [.1C41.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL 335C ; [.1C41.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR 33E4 ; [.1C42.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE 32C4 ; [.1C42.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY 335D ; [.1C42.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE 33E5 ; [.1C43.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX 32C5 ; [.1C43.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE 335E ; [.1C43.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX 33E6 ; [.1C44.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN 32C6 ; [.1C44.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY 335F ; [.1C44.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN 33E7 ; [.1C45.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT 32C7 ; [.1C45.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST 3360 ; [.1C45.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT 33E8 ; [.1C46.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE 32C8 ; [.1C46.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER 3361 ; [.1C46.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE 1F241 ; [*0379.0020.0004][.8054.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 1F242 ; [*0379.0020.0004][.802A.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C 1F247 ; [*0379.0020.0004][.A465.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD 1F243 ; [*0379.0020.0004][.83F0.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 1F245 ; [*0379.0020.0004][.8277.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 1F248 ; [*0379.0020.0004][.9EDA.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 1F240 ; [*0379.0020.0004][.8283.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C 1F244 ; [*0379.0020.0004][.9216.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 1F246 ; [*0379.0020.0004][.A0BD.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 2F00 ; [.8001.0020.0004] # KANGXI RADICAL ONE 3192 ; [.8001.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK 3280 ; [.8001.0020.0006] # CIRCLED IDEOGRAPH ONE 1F229 ; [.8001.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E00 319C ; [.8018.0020.0014] # IDEOGRAPHIC ANNOTATION FOURTH MARK 3286 ; [.801A.0020.0006] # CIRCLED IDEOGRAPH SEVEN 3194 ; [.8054.0020.0014] # IDEOGRAPHIC ANNOTATION THREE MARK 3282 ; [.8054.0020.0006] # CIRCLED IDEOGRAPH THREE 1F22A ; [.8054.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E09 3196 ; [.8055.0020.0014] # IDEOGRAPHIC ANNOTATION TOP MARK 32A4 ; [.8055.0020.0006] # CIRCLED IDEOGRAPH HIGH 3198 ; [.8056.0020.0014] # IDEOGRAPHIC ANNOTATION BOTTOM MARK 32A6 ; [.8056.0020.0006] # CIRCLED IDEOGRAPH LOW 319B ; [.819C.0020.0014] # IDEOGRAPHIC ANNOTATION THIRD MARK 2F01 ; [.8002.0020.0004] # KANGXI RADICAL LINE 3197 ; [.80C6.0020.0014] # IDEOGRAPHIC ANNOTATION MIDDLE MARK 32A5 ; [.80C6.0020.0006] # CIRCLED IDEOGRAPH CENTRE 1F22D ; [.80C6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D 2F02 ; [.8003.0020.0004] # KANGXI RADICAL DOT 2F03 ; [.8004.0020.0004] # KANGXI RADICAL SLASH 2F04 ; [.8008.0020.0004] # KANGXI RADICAL SECOND 319A ; [.8008.0020.0014] # IDEOGRAPHIC ANNOTATION SECOND MARK 3288 ; [.8027.0020.0006] # CIRCLED IDEOGRAPH NINE 2F05 ; [.8010.0020.0004] # KANGXI RADICAL HOOK 2F06 ; [.802A.0020.0004] # KANGXI RADICAL TWO 3193 ; [.802A.0020.0014] # IDEOGRAPHIC ANNOTATION TWO MARK 3281 ; [.802A.0020.0006] # CIRCLED IDEOGRAPH TWO 1F214 ; [.802A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C 3284 ; [.80D7.0020.0006] # CIRCLED IDEOGRAPH FIVE 2F07 ; [.802B.0020.0004] # KANGXI RADICAL LID 1F218 ; [.8300.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4 2F08 ; [.802C.0020.0004] # KANGXI RADICAL MAN 319F ; [.802C.0020.0014] # IDEOGRAPHIC ANNOTATION MAN MARK 32AD ; [.831C.0020.0006] # CIRCLED IDEOGRAPH ENTERPRISE 32A1 ; [.832C.0020.0006] # CIRCLED IDEOGRAPH REST 329D ; [.C86C.0020.0006] # CIRCLED IDEOGRAPH EXCELLENT 2F09 ; [.802E.0020.0004] # KANGXI RADICAL LEGS 2F0A ; [.802F.0020.0004] # KANGXI RADICAL ENTER 2F0B ; [.8030.0020.0004] # KANGXI RADICAL EIGHT 3287 ; [.8030.0020.0006] # CIRCLED IDEOGRAPH EIGHT 3285 ; [.80F5.0020.0006] # CIRCLED IDEOGRAPH SIX 2F0C ; [.8032.0020.0004] # KANGXI RADICAL DOWN BOX 1F21E ; [.8356.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-518D 2F0D ; [.8033.0020.0004] # KANGXI RADICAL COVER 32A2 ; [.81D8.0020.0006] # CIRCLED IDEOGRAPH COPY 2F0E ; [.8034.0020.0004] # KANGXI RADICAL ICE 2F0F ; [.8036.0020.0004] # KANGXI RADICAL TABLE 2F10 ; [.8037.0020.0004] # KANGXI RADICAL OPEN BOX 2F11 ; [.8039.0020.0004] # KANGXI RADICAL KNIFE 1F220 ; [.858C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-521D 1F21C ; [.8EE7.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-524D 1F239 ; [.A45F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5272 2F12 ; [.803C.0020.0004] # KANGXI RADICAL POWER 3298 ; [.85A8.0020.0006] # CIRCLED IDEOGRAPH LABOR 2F13 ; [.803D.0020.0004] # KANGXI RADICAL WRAP 2F14 ; [.803E.0020.0004] # KANGXI RADICAL SPOON 2F15 ; [.803F.0020.0004] # KANGXI RADICAL RIGHT OPEN BOX 2F16 ; [.8040.0020.0004] # KANGXI RADICAL HIDING ENCLOSURE 32A9 ; [.85B0.0020.0006] # CIRCLED IDEOGRAPH MEDICINE 2F17 ; [.8041.0020.0004] # KANGXI RADICAL TEN 3038 ; [.8041.0020.0004] # HANGZHOU NUMERAL TEN 3289 ; [.8041.0020.0006] # CIRCLED IDEOGRAPH TEN 3039 ; [.8059.0020.0004] # HANGZHOU NUMERAL TWENTY 303A ; [.8118.0020.0004] # HANGZHOU NUMERAL THIRTY 32AF ; [.899D.0020.0006] # CIRCLED IDEOGRAPH ALLIANCE 2F18 ; [.8043.0020.0004] # KANGXI RADICAL DIVINATION 2F19 ; [.8044.0020.0004] # KANGXI RADICAL SEAL 329E ; [.8384.0020.0006] # CIRCLED IDEOGRAPH PRINT 2F1A ; [.8045.0020.0004] # KANGXI RADICAL CLIFF 2F1B ; [.8046.0020.0004] # KANGXI RADICAL PRIVATE 2F1C ; [.8048.0020.0004] # KANGXI RADICAL AGAIN 1F212 ; [.8128.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53CC 2F1D ; [.807F.0020.0004] # KANGXI RADICAL MOUTH 1F251 ; [.8218.0020.0006] # CIRCLED IDEOGRAPH ACCEPT 32A8 ; [.821C.0020.0006] # CIRCLED IDEOGRAPH RIGHT 1F22E ; [.821C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53F3 1F234 ; [.8398.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5408 3294 ; [.839D.0020.0006] # CIRCLED IDEOGRAPH NAME 1F225 ; [.85E1.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5439 3244 ; [.9CC0.0020.0006] # CIRCLED IDEOGRAPH QUESTION 1F23A ; [.9CFD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-55B6 2F1E ; [.8080.0020.0004] # KANGXI RADICAL ENCLOSURE 3195 ; [.822D.0020.0014] # IDEOGRAPHIC ANNOTATION FOUR MARK 3283 ; [.822D.0020.0006] # CIRCLED IDEOGRAPH FOUR 2F1F ; [.8081.0020.0004] # KANGXI RADICAL EARTH 328F ; [.8081.0020.0006] # CIRCLED IDEOGRAPH EARTH 319E ; [.83B9.0020.0014] # IDEOGRAPHIC ANNOTATION EARTH MARK 2F20 ; [.8082.0020.0004] # KANGXI RADICAL SCHOLAR 1F224 ; [.8649.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-58F0 2F21 ; [.8083.0020.0004] # KANGXI RADICAL GO 2F22 ; [.8084.0020.0004] # KANGXI RADICAL GO SLOWLY 2F23 ; [.8085.0020.0004] # KANGXI RADICAL EVENING 1F215 ; [.83C8.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-591A 32B0 ; [.8A3E.0020.0006] # CIRCLED IDEOGRAPH NIGHT 2F24 ; [.8086.0020.0004] # KANGXI RADICAL BIG 337D ; [.8086.0020.001C][.8288.0020.001C] # SQUARE ERA NAME TAISYOU 319D ; [.8130.0020.0014] # IDEOGRAPHIC ANNOTATION HEAVEN MARK 1F217 ; [.8130.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5929 2F25 ; [.8088.0020.0004] # KANGXI RADICAL WOMAN 329B ; [.8088.0020.0006] # CIRCLED IDEOGRAPH FEMALE 2F26 ; [.8089.0020.0004] # KANGXI RADICAL CHILD 1F211 ; [.83E8.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5B57 32AB ; [.8A8D.0020.0006] # CIRCLED IDEOGRAPH STUDY 2F27 ; [.808D.0020.0004] # KANGXI RADICAL ROOF 32AA ; [.8A94.0020.0006] # CIRCLED IDEOGRAPH RELIGION 2F28 ; [.808E.0020.0004] # KANGXI RADICAL INCH 2F29 ; [.8091.0020.0004] # KANGXI RADICAL SMALL 2F2A ; [.8092.0020.0004] # KANGXI RADICAL LAME 2F2B ; [.8095.0020.0004] # KANGXI RADICAL CORPSE 2F2C ; [.8096.0020.0004] # KANGXI RADICAL SPROUT 2F2D ; [.8097.0020.0004] # KANGXI RADICAL MOUNTAIN 2F2E ; [.8098.0020.0004] # KANGXI RADICAL RIVER 2F2F ; [.809B.0020.0004] # KANGXI RADICAL WORK 32A7 ; [.8256.0020.0006] # CIRCLED IDEOGRAPH LEFT 1F22C ; [.8256.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6 2F30 ; [.809C.0020.0004] # KANGXI RADICAL ONESELF 2F31 ; [.809F.0020.0004] # KANGXI RADICAL TURBAN 2F32 ; [.80A0.0020.0004] # KANGXI RADICAL DRY 337B ; [.825F.0020.001C][.8435.0020.001C] # SQUARE ERA NAME HEISEI 2F33 ; [.80A2.0020.0004] # KANGXI RADICAL SHORT THREAD 3245 ; [.8260.0020.0006] # CIRCLED IDEOGRAPH KINDERGARTEN 2F34 ; [.80A3.0020.0004] # KANGXI RADICAL DOTTED CLIFF 2F35 ; [.80A4.0020.0004] # KANGXI RADICAL LONG STRIDE 2F36 ; [.80A5.0020.0004] # KANGXI RADICAL TWO HANDS 2F37 ; [.80A6.0020.0004] # KANGXI RADICAL SHOOT 2F38 ; [.80A7.0020.0004] # KANGXI RADICAL BOW 2F39 ; [.80A9.0020.0004] # KANGXI RADICAL SNOUT 2F3A ; [.80AB.0020.0004] # KANGXI RADICAL BRISTLE 2F3B ; [.80AC.0020.0004] # KANGXI RADICAL STEP 1F21D ; [.9050.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C 1F250 ; [.9E0E.0020.0006] # CIRCLED IDEOGRAPH ADVANTAGE 2F3C ; [.8149.0020.0004] # KANGXI RADICAL HEART 2F3D ; [.814B.0020.0004] # KANGXI RADICAL HALBERD 2F3E ; [.814C.0020.0004] # KANGXI RADICAL DOOR 2F3F ; [.814F.0020.0004] # KANGXI RADICAL HAND 1F210 ; [.814F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-624B 1F231 ; [.8277.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6253 1F227 ; [.873A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6295 1F22F ; [.90B6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6307 1F228 ; [.9724.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6355 2F40 ; [.8152.0020.0004] # KANGXI RADICAL BRANCH 2F41 ; [.8153.0020.0004] # KANGXI RADICAL RAP 2F42 ; [.8155.0020.0004] # KANGXI RADICAL SCRIPT 3246 ; [.8155.0020.0006] # CIRCLED IDEOGRAPH SCHOOL 2F43 ; [.8156.0020.0004] # KANGXI RADICAL DIPPER 1F21B ; [.9745.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6599 2F44 ; [.8157.0020.0004] # KANGXI RADICAL AXE 1F21F ; [.AE69.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-65B0 2F45 ; [.8158.0020.0004] # KANGXI RADICAL SQUARE 2F46 ; [.8159.0020.0004] # KANGXI RADICAL NOT 2F47 ; [.815C.0020.0004] # KANGXI RADICAL SUN 3290 ; [.815C.0020.0006] # CIRCLED IDEOGRAPH SUN 337E ; [.8BBF.0020.001C][.8C54.0020.001C] # SQUARE ERA NAME MEIZI 1F219 ; [.90F3.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6620 337C ; [.9100.0020.001C][.89E5.0020.001C] # SQUARE ERA NAME SYOUWA 2F48 ; [.815D.0020.0004] # KANGXI RADICAL SAY 2F49 ; [.815F.0020.0004] # KANGXI RADICAL MOON 328A ; [.815F.0020.0006] # CIRCLED IDEOGRAPH MOON 1F237 ; [.815F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6708 3292 ; [.845A.0020.0006] # CIRCLED IDEOGRAPH HAVE 1F236 ; [.845A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6709 2F4A ; [.8160.0020.0004] # KANGXI RADICAL TREE 328D ; [.8160.0020.0006] # CIRCLED IDEOGRAPH WOOD 3291 ; [.979F.0020.0006] # CIRCLED IDEOGRAPH STOCK 337F ; [.979F.0020.001C][.841D.0020.001C][.8335.0020.001C][.8D2E.0020.001C] # SQUARE CORPORATION 2F4B ; [.8163.0020.0004] # KANGXI RADICAL LACK 2F4C ; [.8164.0020.0004] # KANGXI RADICAL STOP 32A3 ; [.8288.0020.0006] # CIRCLED IDEOGRAPH CORRECT 2F4D ; [.8165.0020.0004] # KANGXI RADICAL DEATH 2F4E ; [.8166.0020.0004] # KANGXI RADICAL WEAPON 2F4F ; [.8167.0020.0004] # KANGXI RADICAL DO NOT 2E9F ; [.828A.0020.0004] # CJK RADICAL MOTHER 2F50 ; [.8169.0020.0004] # KANGXI RADICAL COMPARE 2F51 ; [.816A.0020.0004] # KANGXI RADICAL FUR 2F52 ; [.816B.0020.0004] # KANGXI RADICAL CLAN 2F53 ; [.816C.0020.0004] # KANGXI RADICAL STEAM 2F54 ; [.816D.0020.0004] # KANGXI RADICAL WATER 328C ; [.816D.0020.0006] # CIRCLED IDEOGRAPH WATER 329F ; [.8C7F.0020.0006] # CIRCLED IDEOGRAPH ATTENTION 1F235 ; [.A7C6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6E80 1F226 ; [.B6D2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6F14 2F55 ; [.816E.0020.0004] # KANGXI RADICAL FIRE 328B ; [.816E.0020.0006] # CIRCLED IDEOGRAPH FIRE 1F21A ; [.A7EB.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7121 2F56 ; [.8171.0020.0004] # KANGXI RADICAL CLAW 2F57 ; [.8173.0020.0004] # KANGXI RADICAL FATHER 2F58 ; [.8174.0020.0004] # KANGXI RADICAL DOUBLE X 2F59 ; [.8176.0020.0004] # KANGXI RADICAL HALF TREE TRUNK 2F5A ; [.8177.0020.0004] # KANGXI RADICAL SLICE 2F5B ; [.8179.0020.0004] # KANGXI RADICAL FANG 2F5C ; [.817B.0020.0004] # KANGXI RADICAL COW 3295 ; [.9895.0020.0006] # CIRCLED IDEOGRAPH SPECIAL 2F5D ; [.817D.0020.0004] # KANGXI RADICAL DOG 2F5E ; [.82A2.0020.0004] # KANGXI RADICAL PROFOUND 2F5F ; [.82A3.0020.0004] # KANGXI RADICAL JADE 2F60 ; [.82A7.0020.0004] # KANGXI RADICAL MELON 2F61 ; [.82A8.0020.0004] # KANGXI RADICAL TILE 2F62 ; [.82A9.0020.0004] # KANGXI RADICAL SWEET 2F63 ; [.82AA.0020.0004] # KANGXI RADICAL LIFE 1F222 ; [.82AA.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-751F 2F64 ; [.82AB.0020.0004] # KANGXI RADICAL USE 2F65 ; [.82AD.0020.0004] # KANGXI RADICAL FIELD 3199 ; [.82AF.0020.0014] # IDEOGRAPHIC ANNOTATION FIRST MARK 1F238 ; [.82B0.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7533 329A ; [.8815.0020.0006] # CIRCLED IDEOGRAPH MALE 2F66 ; [.82B4.0020.0004] # KANGXI RADICAL BOLT OF CLOTH 2F67 ; [.82B6.0020.0004] # KANGXI RADICAL SICKNESS 2F68 ; [.82B7.0020.0004] # KANGXI RADICAL DOTTED TENT 2F69 ; [.82B8.0020.0004] # KANGXI RADICAL WHITE 2F6A ; [.82B9.0020.0004] # KANGXI RADICAL SKIN 2F6B ; [.82BA.0020.0004] # KANGXI RADICAL DISH 32AC ; [.B79A.0020.0006] # CIRCLED IDEOGRAPH SUPERVISE 2F6C ; [.82BB.0020.0004] # KANGXI RADICAL EYE 2F6D ; [.82BC.0020.0004] # KANGXI RADICAL SPEAR 2F6E ; [.82BD.0020.0004] # KANGXI RADICAL ARROW 2F6F ; [.82BE.0020.0004] # KANGXI RADICAL STONE 2F70 ; [.82C0.0020.0004] # KANGXI RADICAL SPIRIT 3293 ; [.8D2E.0020.0006] # CIRCLED IDEOGRAPH SOCIETY 3297 ; [.9970.0020.0006] # CIRCLED IDEOGRAPH CONGRATULATION 1F232 ; [.B0A6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7981 2F71 ; [.82C1.0020.0004] # KANGXI RADICAL TRACK 2F72 ; [.82C2.0020.0004] # KANGXI RADICAL GRAIN 3299 ; [.9977.0020.0006] # CIRCLED IDEOGRAPH SECRET 2F73 ; [.82C3.0020.0004] # KANGXI RADICAL CAVE 1F233 ; [.8D3E.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A 2F74 ; [.82C4.0020.0004] # KANGXI RADICAL STAND 2F75 ; [.84B5.0020.0004] # KANGXI RADICAL BAMBOO 3247 ; [.B822.0020.0006] # CIRCLED IDEOGRAPH KOTO 2F76 ; [.84B6.0020.0004] # KANGXI RADICAL RICE 2F77 ; [.84B7.0020.0004] # KANGXI RADICAL SILK 1F221 ; [.A172.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7D42 2F78 ; [.84C4.0020.0004] # KANGXI RADICAL JAR 2F79 ; [.84C5.0020.0004] # KANGXI RADICAL NET 2F7A ; [.84C7.0020.0004] # KANGXI RADICAL SHEEP 2F7B ; [.84CA.0020.0004] # KANGXI RADICAL FEATHER 2F7C ; [.84CB.0020.0004] # KANGXI RADICAL OLD 2F7D ; [.84CD.0020.0004] # KANGXI RADICAL AND 2F7E ; [.84CE.0020.0004] # KANGXI RADICAL PLOW 2F7F ; [.84CF.0020.0004] # KANGXI RADICAL EAR 2F80 ; [.84D0.0020.0004] # KANGXI RADICAL BRUSH 2F81 ; [.84D2.0020.0004] # KANGXI RADICAL MEAT 2F82 ; [.84D7.0020.0004] # KANGXI RADICAL MINISTER 2F83 ; [.84D8.0020.0004] # KANGXI RADICAL SELF 2F84 ; [.84D9.0020.0004] # KANGXI RADICAL ARRIVE 2F85 ; [.84DA.0020.0004] # KANGXI RADICAL MORTAR 2F86 ; [.84DC.0020.0004] # KANGXI RADICAL TONGUE 2F87 ; [.84DD.0020.0004] # KANGXI RADICAL OPPOSE 2F88 ; [.84DE.0020.0004] # KANGXI RADICAL BOAT 2F89 ; [.84DF.0020.0004] # KANGXI RADICAL STOPPING 2F8A ; [.84E0.0020.0004] # KANGXI RADICAL COLOR 2F8B ; [.84E1.0020.0004] # KANGXI RADICAL GRASS 2F8C ; [.84EA.0020.0004] # KANGXI RADICAL TIGER 2F8D ; [.84EB.0020.0004] # KANGXI RADICAL INSECT 2F8E ; [.84EC.0020.0004] # KANGXI RADICAL BLOOD 2F8F ; [.84ED.0020.0004] # KANGXI RADICAL WALK ENCLOSURE 2F90 ; [.84EE.0020.0004] # KANGXI RADICAL CLOTHES 2F91 ; [.84EF.0020.0004] # KANGXI RADICAL WEST 2F92 ; [.8878.0020.0004] # KANGXI RADICAL SEE 2F93 ; [.887B.0020.0004] # KANGXI RADICAL HORN 1F216 ; [.B258.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-89E3 2F94 ; [.887D.0020.0004] # KANGXI RADICAL SPEECH 2F95 ; [.8891.0020.0004] # KANGXI RADICAL VALLEY 2F96 ; [.8892.0020.0004] # KANGXI RADICAL BEAN 2F97 ; [.8893.0020.0004] # KANGXI RADICAL PIG 2F98 ; [.8894.0020.0004] # KANGXI RADICAL BADGER 2F99 ; [.8895.0020.0004] # KANGXI RADICAL SHELL 3296 ; [.9B3B.0020.0006] # CIRCLED IDEOGRAPH FINANCIAL 1F223 ; [.A2FD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9 32AE ; [.B2A5.0020.0006] # CIRCLED IDEOGRAPH RESOURCE 2F9A ; [.8898.0020.0004] # KANGXI RADICAL RED 2F9B ; [.8899.0020.0004] # KANGXI RADICAL RUN 1F230 ; [.8899.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8D70 2F9C ; [.889B.0020.0004] # KANGXI RADICAL FOOT 2F9D ; [.889C.0020.0004] # KANGXI RADICAL BODY 2F9E ; [.889D.0020.0004] # KANGXI RADICAL CART 2F9F ; [.88A1.0020.0004] # KANGXI RADICAL BITTER 2FA0 ; [.88A2.0020.0004] # KANGXI RADICAL MORNING 2FA1 ; [.88A3.0020.0004] # KANGXI RADICAL WALK 1F22B ; [.B30B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-904A 329C ; [.C10A.0020.0006] # CIRCLED IDEOGRAPH SUITABLE 2FA2 ; [.88B4.0020.0004] # KANGXI RADICAL CITY 2FA3 ; [.88C5.0020.0004] # KANGXI RADICAL WINE 2FA4 ; [.88C6.0020.0004] # KANGXI RADICAL DISTINGUISH 2FA5 ; [.88C7.0020.0004] # KANGXI RADICAL VILLAGE 2FA6 ; [.8E33.0020.0004] # KANGXI RADICAL GOLD 328E ; [.8E33.0020.0006] # CIRCLED IDEOGRAPH METAL 2FA7 ; [.8E40.0020.0004] # KANGXI RADICAL LONG 2FA8 ; [.8E42.0020.0004] # KANGXI RADICAL GATE 2FA9 ; [.8E45.0020.0004] # KANGXI RADICAL MOUND 2FAA ; [.8E59.0020.0004] # KANGXI RADICAL SLAVE 2FAB ; [.8E5A.0020.0004] # KANGXI RADICAL SHORT TAILED BIRD 2FAC ; [.8E5C.0020.0004] # KANGXI RADICAL RAIN 2FAD ; [.8E5D.0020.0004] # KANGXI RADICAL BLUE 2FAE ; [.8E5F.0020.0004] # KANGXI RADICAL WRONG 2FAF ; [.949C.0020.0004] # KANGXI RADICAL FACE 2FB0 ; [.949D.0020.0004] # KANGXI RADICAL LEATHER 2FB1 ; [.949E.0020.0004] # KANGXI RADICAL TANNED LEATHER 2FB2 ; [.94A0.0020.0004] # KANGXI RADICAL LEEK 2FB3 ; [.94A1.0020.0004] # KANGXI RADICAL SOUND 2FB4 ; [.94A2.0020.0004] # KANGXI RADICAL LEAF 32A0 ; [.AC44.0020.0006] # CIRCLED IDEOGRAPH ITEM 2FB5 ; [.94A7.0020.0004] # KANGXI RADICAL WIND 2FB6 ; [.94AB.0020.0004] # KANGXI RADICAL FLY 2FB7 ; [.94AD.0020.0004] # KANGXI RADICAL EAT 2FB8 ; [.94B7.0020.0004] # KANGXI RADICAL HEAD 2FB9 ; [.94B9.0020.0004] # KANGXI RADICAL FRAGRANT 2FBA ; [.9BF9.0020.0004] # KANGXI RADICAL HORSE 2FBB ; [.9C00.0020.0004] # KANGXI RADICAL BONE 2FBC ; [.9C01.0020.0004] # KANGXI RADICAL TALL 2FBD ; [.9C02.0020.0004] # KANGXI RADICAL HAIR 2FBE ; [.9C03.0020.0004] # KANGXI RADICAL FIGHT 2FBF ; [.9C04.0020.0004] # KANGXI RADICAL SACRIFICIAL WINE 2FC0 ; [.9C05.0020.0004] # KANGXI RADICAL CAULDRON 2FC1 ; [.9C06.0020.0004] # KANGXI RADICAL GHOST 2FC2 ; [.A408.0020.0004] # KANGXI RADICAL FISH 2FC3 ; [.A40A.0020.0004] # KANGXI RADICAL BIRD 2FC4 ; [.A414.0020.0004] # KANGXI RADICAL SALT 2FC5 ; [.A415.0020.0004] # KANGXI RADICAL DEER 2FC6 ; [.A416.0020.0004] # KANGXI RADICAL WHEAT 2FC7 ; [.A418.0020.0004] # KANGXI RADICAL HEMP 2FC8 ; [.AC78.0020.0004] # KANGXI RADICAL YELLOW 2FC9 ; [.AC7A.0020.0004] # KANGXI RADICAL MILLET 2FCA ; [.AC7B.0020.0004] # KANGXI RADICAL BLACK 2FCB ; [.AC7C.0020.0004] # KANGXI RADICAL EMBROIDERY 2FCC ; [.B440.0020.0004] # KANGXI RADICAL FROG 2FCD ; [.B442.0020.0004] # KANGXI RADICAL TRIPOD 2FCE ; [.B443.0020.0004] # KANGXI RADICAL DRUM 2FCF ; [.B445.0020.0004] # KANGXI RADICAL RAT 2FD0 ; [.BB56.0020.0004] # KANGXI RADICAL NOSE 2FD1 ; [.BB57.0020.0004] # KANGXI RADICAL EVEN 2FD2 ; [.C273.0020.0004] # KANGXI RADICAL TOOTH 2FD3 ; [.C85E.0020.0004] # KANGXI RADICAL DRAGON 2FD4 ; [.C85F.0020.0004] # KANGXI RADICAL TURTLE 2EF3 ; [.88F9.0020.0004] # CJK RADICAL C-SIMPLIFIED TURTLE 2FD5 ; [.CD3C.0020.0004] # KANGXI RADICAL FLUTE F967 ; [.80BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.88FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.852F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 2F801 ; [.805D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.80CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E 2F800 ; [.852D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800 2F802 ; [.8006.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F802 F91B ; [.AC80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B F9BA ; [.8028.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA F977 ; [.8E86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 F9FD ; [.80DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD 2F819 ; [.80E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F819 F9A8 ; [.81C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 2F804 ; [.856D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804 FA73 ; [.8928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73 F92D ; [.892E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D F9B5 ; [.8933.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.8E8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.8E8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 2F806 ; [.8E98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806 F965 ; [.8E9C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 2F807 ; [.94E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807 F9D4 ; [.950F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 2F808 ; [.9C54.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808 2F809 ; [.A43E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 2F80B ; [.B44E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.B459.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.B466.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.B466.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A FA0C ; [.8070.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.81D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.8578.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.8578.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F ; [.895B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F 2F810 ; [.D692.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F810 2F814 ; [.80F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814 FA72 ; [.8350.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.895F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 F9D1 ; [.80F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 2F811 ; [.8961.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.C28C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F815 ; [.8356.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 2F8D2 ; [.8ED4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.9C63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F817 ; [.80FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 2F818 ; [.9535.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F81A ; [.81DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A FA71 ; [.8582.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71 2F81B ; [.8582.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B F92E ; [.8584.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E F979 ; [.953F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 F955 ; [.9542.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.BB7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 FA15 ; [.C28F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15 2F81D ; [.8037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F81E ; [.8075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.8107.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.8107.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.836E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C F9DD ; [.8598.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.897C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.897D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F821 ; [.8986.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821 2F822 ; [.A45F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 2F823 ; [.ACB4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823 F9C7 ; [.BB84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 F98A ; [.803C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A F99D ; [.8373.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D 2F992 ; [.85A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992 FA76 ; [.8EF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.8EF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.8EF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.8EF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.9C76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 F92F ; [.A466.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.ACC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.ACC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 F97F ; [.C879.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F FA77 ; [.8078.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.8078.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.81F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A ; [.81F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A F963 ; [.81F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.81F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B F9EB ; [.9C89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F82C ; [.81F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E ; [.A46C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F ; [.85B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.85B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F830 ; [.8F00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830 2F831 ; [.9569.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.9569.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.9569.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 F96B ; [.9C93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F836 ; [.8126.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 2F837 ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 F906 ; [.820E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.8214.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A ; [.821A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A 2F83B ; [.8396.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B F9DE ; [.839F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.85C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.85E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D F980 ; [.85EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.85F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.89C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F 2F83C ; [.8F0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83C 2F840 ; [.8F13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.8F2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F841 ; [.9589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F841 2F842 ; [.95A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 2F843 ; [.9CC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843 FA79 ; [.9CC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79 2F844 ; [.9CD2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 2F845 ; [.A485.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.A485.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.A488.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.A499.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.A499.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.A49D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.A49D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F848 ; [.A4AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 2F849 ; [.A4B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849 FA0D ; [.ACD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D 2F84A ; [.ACDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A FA7B ; [.ACF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B FA37 ; [.B4AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 2F84C ; [.B4AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C 2F84E ; [.B4CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84E FA38 ; [.C2AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.BBCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F F9A9 ; [.8A04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.B4DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F84D ; [.B4DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84D 2F855 ; [.8F63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.8F8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.9D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F854 ; [.9D37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854 2F857 ; [.A4EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 2F856 ; [.95F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856 FA39 ; [.A4F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39 FA10 ; [.AD39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 FA7C ; [.AD39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C F96C ; [.AD3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.C26D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A 2F858 ; [.BBE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858 FA7D ; [.BBEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D F94A ; [.CD66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A F942 ; [.D106.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 2F851 ; [.83C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851 2F85A ; [.864B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A 2F85B ; [.9D44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B 2F85C ; [.864D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C 2F85D ; [.83C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D 2F85E ; [.B513.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E FA7E ; [.8A41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.8A45.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.8F99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.8A4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.9D4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.8088.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 2F865 ; [.8FA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865 2F862 ; [.960A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 2F863 ; [.961C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863 2F864 ; [.9628.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864 FA80 ; [.9D80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F866 ; [.9D84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 2F986 ; [.AD61.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 2F869 ; [.BC16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869 FA81 ; [.C2FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81 2F86A ; [.D110.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B ; [.D110.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B FA04 ; [.83EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 2F86D ; [.9DA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D 2F86E ; [.AD8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E F95F ; [.B554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F F9AA ; [.B554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA 2F86F ; [.B554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F F9BC ; [.BC2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F870 ; [.D116.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870 2F872 ; [.868E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872 2F873 ; [.8FE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873 2F875 ; [.8092.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875 F9BD ; [.8695.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.9DB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 F94B ; [.B558.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B FA3B ; [.BC33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B F9DF ; [.BC34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF FA3C ; [.8096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C 2F878 ; [.8096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878 2F87A ; [.86B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A 2F879 ; [.8AD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879 F9D5 ; [.9DCB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 2F87C ; [.A589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C F921 ; [.A595.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 2F87F ; [.A5A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F 2F87E ; [.ADAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87E 2F880 ; [.B563.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880 2F9F4 ; [.C30C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4 F9AB ; [.C8D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB 2F881 ; [.88A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F882 ; [.9DE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 2F884 ; [.A5AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F885 ; [.9681.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885 2F886 ; [.A5AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 2F887 ; [.BC5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887 F98E ; [.8414.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E FA01 ; [.9036.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88B ; [.9038.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B 2F88C ; [.9DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D ; [.9DFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.ADC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.A5C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.A5C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA82 ; [.B587.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82 FA0B ; [.B588.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B FA83 ; [.B58E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83 F982 ; [.D123.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 2F890 ; [.80A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890 F943 ; [.86D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 2F894 ; [.8AF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894 2F895 ; [.8AF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895 2F874 ; [.8423.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874 2F899 ; [.86D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.9E0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 2F89A ; [.9E0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A F9D8 ; [.904F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 2F89C ; [.A5CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89C F966 ; [.A5D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.ADD2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F89D ; [.86E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.86E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.8B15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 2F89F ; [.8702.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89F F960 ; [.9054.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.8B2D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC FA6B ; [.96BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B 2F8A0 ; [.96C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 FA3D ; [.96D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.96D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A5 ; [.9E43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 FA86 ; [.9E4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 F9B9 ; [.A5E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 FA88 ; [.ADDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 F9D9 ; [.ADFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 2F8A6 ; [.B5A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.AE01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.AE01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA87 ; [.AE03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87 2F8A8 ; [.AE03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8 FA8A ; [.B5B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A FA3E ; [.A614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E 2F8AA ; [.B5C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA FA3F ; [.BC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.BC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.BC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB F98F ; [.BC91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F 2F8AD ; [.BC9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AE ; [.BCA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE 2F8AC ; [.C332.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC 2F8AF ; [.C8EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF FA40 ; [.D12A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 FA8B ; [.D12A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B 2F8B0 ; [.D12A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 F90D ; [.D12C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D 2F8B1 ; [.D12C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 F990 ; [.D9A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 2F8B2 ; [.8435.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3 ; [.9E66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3 F9D2 ; [.BCAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.C8FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F8B4 ; [.843C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B4 2F8B5 ; [.8B64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.8B7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 F95B ; [.9096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B FA02 ; [.8B85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.8B86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 2F8BA ; [.90AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA F973 ; [.90AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 2F8B9 ; [.970C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.971F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 2F8BB ; [.9E77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB F9A4 ; [.9E8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 2F8BC ; [.9E92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC F975 ; [.9EAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.9EB5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.A62A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D 2F8C0 ; [.AE5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0 2F8BD ; [.9737.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD FA8E ; [.AE2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E 2F8BF ; [.AE34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF FA8F ; [.A667.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F 2F8C3 ; [.BCB3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 2F8C6 ; [.B603.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6 2F8C4 ; [.B609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C4 F991 ; [.BCCE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 2F8C5 ; [.BCD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 F930 ; [.C35E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930 FA41 ; [.9ED2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.9ED2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.9ED9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 2F8C9 ; [.AE62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.BCF5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 F9BE ; [.9745.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE F983 ; [.974C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 FA42 ; [.90EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42 2F8CB ; [.9EF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB F9E0 ; [.8BC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 2F8CD ; [.9758.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD FA12 ; [.A69D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.A69D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 F9C5 ; [.AE80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 FA43 ; [.A6AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.A6AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF 2F8D5 ; [.B627.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D5 FA06 ; [.BD0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 F98B ; [.C39E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B F901 ; [.875D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.976A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.A454.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 F929 ; [.9773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.9773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.9773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.9F11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.9F11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 2F8DA ; [.AE99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA F9E1 ; [.876E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.8773.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.8776.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.877E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB F9C8 ; [.8BEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8 2F8E0 ; [.8BF5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0 F9F4 ; [.8C07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.9164.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 2F8DF ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF F9DA ; [.978C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA 2F8E5 ; [.9794.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5 2F8E1 ; [.9181.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E1 F97A ; [.9F37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.9F3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.9F3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 2F8E4 ; [.9F44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E4 F9E2 ; [.9F5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 2F8E6 ; [.A716.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6 2F8E8 ; [.AEAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8E9 ; [.B650.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9 2F8EA ; [.BD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA F914 ; [.BD3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 F95C ; [.BD3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C F9BF ; [.BD3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF F94C ; [.BD4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C 2F8EB ; [.C959.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB F931 ; [.D157.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 2F8ED ; [.C962.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED F91D ; [.D6D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D 2F8EF ; [.846F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F1 ; [.C403.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 2F8F3 ; [.AF0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 F98C ; [.C40A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C FA95 ; [.8165.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95 2F8F4 ; [.B6A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4 F9A5 ; [.C969.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5 F970 ; [.9F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 FA96 ; [.9F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 2F8F5 ; [.9F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8F6 ; [.9F8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6 2F8FA ; [.847F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA 2F8FE ; [.879D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE F972 ; [.87BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.8C58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.8C64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 2F8FD ; [.8C65.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD F9E3 ; [.8C7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 2F8FF ; [.980A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF F915 ; [.91C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.91C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F907 ; [.91D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907 2F900 ; [.91E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.91E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.91E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.91E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.981E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.981F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.982C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.982C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.982D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.983A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.9FBA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 F94D ; [.9FC9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D F9D6 ; [.9FD9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 2F90E ; [.9FE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.A004.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.A777.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.A7B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 F9CB ; [.AF31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.AF4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC 2F90C ; [.AF5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C FA99 ; [.A7D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.A7D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.AF63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 FA98 ; [.AF6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA98 F94E ; [.B6CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E FA47 ; [.B6E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 FA9A ; [.B6E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A F992 ; [.B6E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 2F90F ; [.BDAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F912 ; [.BDE2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 F922 ; [.C98A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 F984 ; [.CDED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 2F915 ; [.D17C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 FA9B ; [.D17F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F914 ; [.D17F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914 2F913 ; [.D488.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913 2F917 ; [.D6DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917 2F835 ; [.8497.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 2F919 ; [.87E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F919 2F918 ; [.87E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.8CB0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.920A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A F99F ; [.9864.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.9875.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 2F91C ; [.AF89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C F993 ; [.AF8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 FA48 ; [.A80B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.A80B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C 2F91E ; [.BDE7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E F9C0 ; [.C477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 F9EE ; [.C479.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE F932 ; [.D496.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 F91E ; [.D6E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F920 ; [.DC4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 FA49 ; [.8172.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA49 FA9E ; [.C9BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.C9BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 2F922 ; [.AFC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F922 F946 ; [.87ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 2F924 ; [.A81A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 2F925 ; [.B745.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925 FA9F ; [.82A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F F9FA ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA F92B ; [.98A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B FA16 ; [.A066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 FAA0 ; [.A066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 F9A7 ; [.CE18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 2F928 ; [.D1A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 F961 ; [.A067.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.A067.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F929 ; [.817E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 2F92B ; [.8CEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B F9AD ; [.924C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.98BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.A07D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.98D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.A852.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92E ; [.AFF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92E 2F92F ; [.B008.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F F9AE ; [.BE24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE FAA1 ; [.B763.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1 2F930 ; [.B763.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930 2F931 ; [.BE35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931 F994 ; [.BE39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994 F9EF ; [.C4A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF 2F932 ; [.D1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 FAA2 ; [.B77A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA2 2F934 ; [.A882.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F934 FAA3 ; [.8D01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3 2F936 ; [.8D03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936 F9CD ; [.98E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.A09D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.A0A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.A0A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 F9E5 ; [.A8A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.B047.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A FAA4 ; [.BE59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4 FAA5 ; [.BE52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 F9C1 ; [.C9EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 F90E ; [.D6F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E FA17 ; [.990E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.990E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7 ; [.A0BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 F933 ; [.C4E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 FAA8 ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.92B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F945 ; [.9928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945 2F946 ; [.9929.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946 2F947 ; [.9929.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947 FAAA ; [.A0D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA FAA9 ; [.A8C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9 2F948 ; [.A8C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948 2F94A ; [.BE77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A FA9D ; [.CA05.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D 2F94E ; [.A0E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E F9CE ; [.A8DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.B08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.B08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.B090.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.BE90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 FAAB ; [.BE92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB 2F950 ; [.BE92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950 F964 ; [.CA26.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964 F985 ; [.D4C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 FA18 ; [.84B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18 FA4C ; [.8D2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C FA4E ; [.92EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.92ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA4F ; [.9963.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.9969.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.9969.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.9970.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 FA19 ; [.9971.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.A0F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A F93C ; [.B0A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C FA52 ; [.B7DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 FA53 ; [.B7DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 FA1B ; [.B7DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.B7DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 F9B6 ; [.CE6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 F995 ; [.8D3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995 2F957 ; [.998A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 F956 ; [.B0BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 FA54 ; [.BEBC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 2F959 ; [.BEBC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 2F95A ; [.B7F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A 2F95B ; [.C523.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B FA55 ; [.930C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 FAAC ; [.BEC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC F9F7 ; [.82C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 2F95F ; [.B805.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F F9F8 ; [.A12C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 FA56 ; [.B101.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 FAAD ; [.B101.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD 2F962 ; [.BEEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 2F963 ; [.C53D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 F9A6 ; [.D1F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 F944 ; [.D8B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 FAAE ; [.9327.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE F9F9 ; [.A14C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.B84B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D 2F966 ; [.C563.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966 FA03 ; [.C567.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 2F969 ; [.CE97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F969 F97B ; [.CE9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B 2F968 ; [.CA8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968 2F96A ; [.9332.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A F9CF ; [.99CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF F96A ; [.99E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.A15F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F FAAF ; [.B111.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF 2F96C ; [.A95F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C F93D ; [.B85B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D F957 ; [.B879.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 2F96E ; [.B882.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E F996 ; [.BF35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 FA57 ; [.BF35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 FAB0 ; [.BF35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 2F96F ; [.BF43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96F FA58 ; [.C56B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 F950 ; [.CA9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 FA59 ; [.CAA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 2F970 ; [.CAA9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970 FAB1 ; [.A98D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1 FA5A ; [.B149.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.C591.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 2F976 ; [.C592.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976 F90F ; [.D220.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F 2F978 ; [.A19D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978 F9AF ; [.A19E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.84CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E 2F979 ; [.CEC9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979 F934 ; [.84CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 FA5B ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.8D66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A F9B0 ; [.A1BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 2F97D ; [.A9A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97D F997 ; [.CAC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.CAC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.D8C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 F953 ; [.84D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.8D78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.8D7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F983 ; [.9A39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F983 2F985 ; [.A9B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 F926 ; [.D22E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 F9F6 ; [.CAE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 FA5C ; [.9A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F893 ; [.9A50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.9A50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C ; [.A9E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C FA6D ; [.C5C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D F97C ; [.885F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C FA5D ; [.80B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D FA5E ; [.80B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E 2F990 ; [.8868.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F98F ; [.886E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F 2F991 ; [.8D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.8DAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.8DB1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.8DBA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.93A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.93A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.93A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 2F999 ; [.A1FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999 2F99C ; [.A1FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C F9FE ; [.9A84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.9A9C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F9A0 ; [.9ABD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0 2F99A ; [.9AAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A 2F99B ; [.A24D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99B 2F99D ; [.A249.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D F93E ; [.A9FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E 2F9A1 ; [.A9FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.AA00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.AA0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 2F99E ; [.AA1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E FAB4 ; [.AA22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 F958 ; [.AA24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.B1A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 F96E ; [.B1B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E FA5F ; [.AA5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.AA5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F F999 ; [.BF9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 2F9A8 ; [.B208.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 2F9A9 ; [.BF9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9 F9C2 ; [.BFA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 2F9AA ; [.BFC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA 2F9AC ; [.C5F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC F923 ; [.CF09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 F9F0 ; [.D510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 F935 ; [.D51C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 FA20 ; [.D52F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA20 F91F ; [.D73C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F F910 ; [.D9F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 2F9B3 ; [.93DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 F936 ; [.B20A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 2F9B4 ; [.B20A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5 ; [.CB2D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B6 ; [.CF14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6 2F9B8 ; [.AA6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B8 2F9B7 ; [.9AE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 2F9BA ; [.AA7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA 2F9B9 ; [.B227.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9 2F9BC ; [.B95E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC 2F9BD ; [.B981.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD FAB5 ; [.C612.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5 2F9BB ; [.C612.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB 2F9BE ; [.C617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BE F911 ; [.CB41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 2F9C0 ; [.C027.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0 2F9C1 ; [.D264.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1 F927 ; [.D748.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927 FA08 ; [.84ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F9C3 ; [.C63E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C3 2F9C4 ; [.84EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 F9A0 ; [.AAAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 F9E7 ; [.B239.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7 2F9C6 ; [.AAB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6 2F9C7 ; [.B247.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7 F9E8 ; [.B24A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 F912 ; [.B995.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 2F9C9 ; [.B997.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9 FA60 ; [.C03D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.CB6A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 F924 ; [.D53F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 FAB7 ; [.CF49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 FA0A ; [.8878.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A FA61 ; [.A103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 FAB8 ; [.A103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2F9CF ; [.B289.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF F96F ; [.B9C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F F9A1 ; [.B9C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1 FAB9 ; [.C06A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 FABB ; [.C076.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB F97D ; [.C07D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D F941 ; [.C081.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 FABE ; [.C671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE 2F9D0 ; [.C671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 FA22 ; [.C08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 FABA ; [.C08B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA F95D ; [.C681.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D FABD ; [.C681.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD FA62 ; [.C684.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 FABC ; [.C684.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC FA63 ; [.CF67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 FABF ; [.CF67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF F9FC ; [.D2AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC F95A ; [.D8E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A FAC0 ; [.DA06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 2F9D1 ; [.DA06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 F900 ; [.9B36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 2F9D2 ; [.8893.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D4 ; [.A2FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.AB15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.B2A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 F903 ; [.B2A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.B9E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 FA65 ; [.D2BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 FAC1 ; [.D2BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 2F9D6 ; [.DADB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 2F9D7 ; [.9B4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9DB ; [.B2C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DA ; [.AB38.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.B2D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 2F9DC ; [.B2D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC F902 ; [.889D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 2F9DE ; [.9B5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE F998 ; [.C0FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 F9D7 ; [.C0FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 FAC2 ; [.C6C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 2F9DF ; [.C6C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF FA07 ; [.C6CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 F98D ; [.D8FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D 2F98D ; [.B2F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D F971 ; [.88A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 FA66 ; [.818F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66 F99A ; [.A353.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.AB86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.AB86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 FAC3 ; [.C6D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.C6DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.DA18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 2F9E2 ; [.850D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2 F92C ; [.945D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C FA2E ; [.9B86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E 2F9E3 ; [.9465.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3 FA26 ; [.A369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 2F9E4 ; [.B321.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4 2F9E6 ; [.BA32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6 F919 ; [.B32C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 FAC4 ; [.CBE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4 F9B7 ; [.D582.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 F9E9 ; [.88C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.ABA9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.8E33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A F9B1 ; [.B33B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9E7 ; [.B33F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 FAC5 ; [.BA52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5 2F9EA ; [.BA91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA 2F9E8 ; [.C154.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 2F9E9 ; [.C155.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9 F93F ; [.C705.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F F99B ; [.CBF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B 2F9EB ; [.D330.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB 2F9EC ; [.D5A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC 2F9EE ; [.ABFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE F986 ; [.C18F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 2F9F0 ; [.CC4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0 F9C6 ; [.88DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.948F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.9491.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.A3DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 F9D3 ; [.A3E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 FAC6 ; [.A3E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6 F9DC ; [.AC1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9F1 ; [.C19A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1 FA2F ; [.C776.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F F9B8 ; [.CC60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 2F9F3 ; [.AC28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3 F9EA ; [.D014.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.D345.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.D345.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 F9B2 ; [.B3BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.B3BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 2F9F5 ; [.D017.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 F938 ; [.D7AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 F9B3 ; [.DAFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 FA1C ; [.B3C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.B3C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 FAC9 ; [.D5DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC9 2F9FA ; [.D5DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA FA69 ; [.D5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 FACA ; [.D5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA FACB ; [.B3D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACB 2F9FE ; [.B3D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FE 2F9FF ; [.B3D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FF F9B4 ; [.BAE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 2FA00 ; [.C1C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00 FA6A ; [.C7A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A FACC ; [.C7A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC F9D0 ; [.D369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2FA02 ; [.9BF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.AC59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.B3F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C ; [.C7C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C 2FA04 ; [.C7C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04 2FA05 ; [.D37A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05 2FA06 ; [.BB13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06 F91A ; [.C7DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A 2FA07 ; [.CCB3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07 F987 ; [.DC56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 FACD ; [.D619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD 2FA0A ; [.D619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A F939 ; [.C225.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 2FA0B ; [.D645.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B F9F2 ; [.DA5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 2FA0C ; [.C247.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C 2FA0F ; [.CD1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F FA2D ; [.D80D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D F93A ; [.DB1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.DC69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 F940 ; [.A415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 F988 ; [.D407.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 F9F3 ; [.DA80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FA15 ; [.A418.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 F989 ; [.C26C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 2FA17 ; [.AC7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17 2FA18 ; [.8E79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18 2FA19 ; [.D834.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA19 2FA1A ; [.C26F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A 2FA1B ; [.D0DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B 2FA1C ; [.BB56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C FAD8 ; [.DA8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8 F9C4 ; [.C85E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 FAD9 ; [.D0E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9 F907 ; [.C85F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.C85F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.C85F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE 2F81F ; [.858A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81F 2F888 ; [.C311.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F888 2F8D0 ; [.AE77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D0 2F8CE ; [.C38A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CE 2F8DE ; [.8BD3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DE 2F8EE ; [.D879.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EE 2F90A ; [.AF20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90A 2F92C ; [.98A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92C 2F92D ; [.98A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92D FAD4 ; [.A8B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD4 2F949 ; [.A8B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F949 2F960 ; [.B808.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F960 2F96D ; [.BF14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96D 2F8D7 ; [.8D6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D7 2FA0E ; [.D64A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0E 2F8F9 ; [.B6A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F9 FA6C ; [.AFBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6C 2F93C ; [.D6F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93C ENTRY }; Unicode/Collate/Locale/nn.pl 0000644 00000012412 15037233322 0011664 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH 00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN 00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE 00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F98.0020.0008] # ANGSTROM SIGN 01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 0061 0061 ; [.1F98.0021.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A> 0041 0061 ; [.1F98.0021.0007] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A> 0041 0041 ; [.1F98.0021.0008] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A> ENTRY }; Unicode/Collate/Locale/zh_pin.pl 0000644 00000306015 15037233323 0012546 0 ustar 00 use Unicode::Collate::CJK::Pinyin; +{ locale_version => 1.25, overrideCJK => \&Unicode::Collate::CJK::Pinyin::weightPinyin, entry => <<'ENTRY', # for DUCET v9.0.0 0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON> 004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON> 1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON> 004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON> 006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT> 006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK> 004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT> 004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK> 006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON> 004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON> 0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON> 00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON> 01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON> 00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON> 01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS FDD0 0041 ; [.8000.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER A> FDD0 0042 ; [.80C5.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER B> FDD0 0043 ; [.8441.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER C> FDD0 0044 ; [.897D.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER D> FDD0 0045 ; [.8D61.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER E> FDD0 0046 ; [.8E1B.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER F> FDD0 0047 ; [.9089.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER G> FDD0 0048 ; [.93C4.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER H> FDD0 004A ; [.97EC.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER J> FDD0 004B ; [.9E32.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER K> FDD0 004C ; [.A05D.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER L> 3007 ; [.A401.0020.0002] # IDEOGRAPHIC NUMBER ZERO FDD0 004D ; [.A680.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER M> FDD0 004E ; [.A9A9.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER N> FDD0 004F ; [.AB89.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER O> FDD0 0050 ; [.ABAC.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER P> FDD0 0051 ; [.AE02.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER Q> FDD0 0052 ; [.B1F1.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER R> FDD0 0053 ; [.B337.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER S> FDD0 0054 ; [.B858.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER T> FDD0 0057 ; [.BBD3.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER W> FDD0 0058 ; [.BE4A.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER X> FDD0 0059 ; [.C382.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER Y> FDD0 005A ; [.CB22.0020.0002] # <noncharacter-FDD0, LATIN CAPITAL LETTER Z> 3220 ; [*0317.0020.0004][.C5CF.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE 3226 ; [*0317.0020.0004][.AE03.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN 3222 ; [*0317.0020.0004][.B35F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE 3228 ; [*0317.0020.0004][.9C92.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE 3221 ; [*0317.0020.0004][.8E0E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO 3224 ; [*0317.0020.0004][.BDF1.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE 3239 ; [*0317.0020.0004][.89B6.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT 323D ; [*0317.0020.0004][.AE82.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE 3241 ; [*0317.0020.0004][.C1F9.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST 3227 ; [*0317.0020.0004][.80C6.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT 3225 ; [*0317.0020.0004][.A49F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX 3238 ; [*0317.0020.0004][.A132.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR 3229 ; [*0317.0020.0004][.B57B.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN 323F ; [*0317.0020.0004][.C10A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE 3234 ; [*0317.0020.0004][.A8EB.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME 323A ; [*0317.0020.0004][.9589.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL 3223 ; [*0317.0020.0004][.B715.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR 322F ; [*0317.0020.0004][.BB2D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH 323B ; [*0317.0020.0004][.C304.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY 3230 ; [*0317.0020.0004][.B272.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN 322A ; [*0317.0020.0004][.CA96.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON 3232 ; [*0317.0020.0004][.C8D2.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE 322D ; [*0317.0020.0004][.A98A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD 3231 ; [*0317.0020.0004][.CF58.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK 322C ; [*0317.0020.0004][.B6BA.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER 322B ; [*0317.0020.0004][.97BC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE 3235 ; [*0317.0020.0004][.B980.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL 323C ; [*0317.0020.0004][.999B.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE 3233 ; [*0317.0020.0004][.B4AC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY 3237 ; [*0317.0020.0004][.CFAD.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION 3240 ; [*0317.0020.0004][.98D6.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL 3242 ; [*0317.0020.0004][.D0D4.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF 3243 ; [*0317.0020.0004][.CE51.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH 3236 ; [*0317.0020.0004][.844F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL 323E ; [*0317.0020.0004][.D0A3.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE 322E ; [*0317.0020.0004][.9B96.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL 3358 ; [.1C3D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO 33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN 32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER 3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN 33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN 32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER 3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN 33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE 32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER 3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE 33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN 3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN 33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN 3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN 33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN 3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN 33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN 3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN 33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN 3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN 33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN 336A ; [.1C3E.0020.0004][.1C45.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN 33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN 336B ; [.1C3E.0020.0004][.1C46.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN 33E0 ; [.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE 32C0 ; [.1C3E.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY 3359 ; [.1C3E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE 33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY 336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY 33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE 336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE 33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO 336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO 33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE 336F ; [.1C3F.0020.0004][.1C40.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE 33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR 3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR 33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE 33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX 33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN 33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT 33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE 33E1 ; [.1C3F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO 32C1 ; [.1C3F.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY 335A ; [.1C3F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO 33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY 33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE 33E2 ; [.1C40.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE 32C2 ; [.1C40.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH 335B ; [.1C40.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE 33E3 ; [.1C41.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR 32C3 ; [.1C41.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL 335C ; [.1C41.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR 33E4 ; [.1C42.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE 32C4 ; [.1C42.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY 335D ; [.1C42.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE 33E5 ; [.1C43.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX 32C5 ; [.1C43.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE 335E ; [.1C43.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX 33E6 ; [.1C44.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN 32C6 ; [.1C44.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY 335F ; [.1C44.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN 33E7 ; [.1C45.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT 32C7 ; [.1C45.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST 3360 ; [.1C45.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT 33E8 ; [.1C46.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE 32C8 ; [.1C46.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER 3361 ; [.1C46.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE 1F241 ; [*0379.0020.0004][.B35F.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 1F242 ; [*0379.0020.0004][.8E0E.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C 1F247 ; [*0379.0020.0004][.B548.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD 1F243 ; [*0379.0020.0004][.8049.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 1F245 ; [*0379.0020.0004][.89A6.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 1F248 ; [*0379.0020.0004][.811B.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 1F240 ; [*0379.0020.0004][.81FC.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C 1F244 ; [*0379.0020.0004][.8B60.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 1F246 ; [*0379.0020.0004][.8A91.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 2F00 ; [.C5CF.0020.0004] # KANGXI RADICAL ONE 3192 ; [.C5CF.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK 3280 ; [.C5CF.0020.0006] # CIRCLED IDEOGRAPH ONE 1F229 ; [.C5CF.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E00 319C ; [.8BE6.0020.0014] # IDEOGRAPHIC ANNOTATION FOURTH MARK 3286 ; [.AE03.0020.0006] # CIRCLED IDEOGRAPH SEVEN 3194 ; [.B35F.0020.0014] # IDEOGRAPHIC ANNOTATION THREE MARK 3282 ; [.B35F.0020.0006] # CIRCLED IDEOGRAPH THREE 1F22A ; [.B35F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E09 3196 ; [.B46D.0020.0014] # IDEOGRAPHIC ANNOTATION TOP MARK 32A4 ; [.B46D.0020.0006] # CIRCLED IDEOGRAPH HIGH 3198 ; [.BF75.0020.0014] # IDEOGRAPHIC ANNOTATION BOTTOM MARK 32A6 ; [.BF75.0020.0006] # CIRCLED IDEOGRAPH LOW 319B ; [.8382.0020.0014] # IDEOGRAPHIC ANNOTATION THIRD MARK 2F01 ; [.937A.0020.0004] # KANGXI RADICAL LINE 3197 ; [.CECC.0020.0014] # IDEOGRAPHIC ANNOTATION MIDDLE MARK 32A5 ; [.CECC.0020.0006] # CIRCLED IDEOGRAPH CENTRE 1F22D ; [.CECC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D 2F02 ; [.CF8B.0020.0004] # KANGXI RADICAL DOT 2F03 ; [.AD44.0020.0004] # KANGXI RADICAL SLASH 2F04 ; [.C643.0020.0004] # KANGXI RADICAL SECOND 319A ; [.C643.0020.0014] # IDEOGRAPHIC ANNOTATION SECOND MARK 3288 ; [.9C92.0020.0006] # CIRCLED IDEOGRAPH NINE 2F05 ; [.9D9D.0020.0004] # KANGXI RADICAL HOOK 2F06 ; [.8E0E.0020.0004] # KANGXI RADICAL TWO 3193 ; [.8E0E.0020.0014] # IDEOGRAPHIC ANNOTATION TWO MARK 3281 ; [.8E0E.0020.0006] # CIRCLED IDEOGRAPH TWO 1F214 ; [.8E0E.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C 3284 ; [.BDF1.0020.0006] # CIRCLED IDEOGRAPH FIVE 2F07 ; [.BAE9.0020.0004] # KANGXI RADICAL LID 1F218 ; [.9A8F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4 2F08 ; [.B22F.0020.0004] # KANGXI RADICAL MAN 319F ; [.B22F.0020.0014] # IDEOGRAPHIC ANNOTATION MAN MARK 32AD ; [.AE82.0020.0006] # CIRCLED IDEOGRAPH ENTERPRISE 32A1 ; [.C1F9.0020.0006] # CIRCLED IDEOGRAPH REST 329D ; [.C8A5.0020.0006] # CIRCLED IDEOGRAPH EXCELLENT 2F09 ; [.8DE5.0020.0004] # KANGXI RADICAL LEGS 2F0A ; [.B2E8.0020.0004] # KANGXI RADICAL ENTER 2F0B ; [.80C6.0020.0004] # KANGXI RADICAL EIGHT 3287 ; [.80C6.0020.0006] # CIRCLED IDEOGRAPH EIGHT 3285 ; [.A49F.0020.0006] # CIRCLED IDEOGRAPH SIX 2F0C ; [.9C60.0020.0004] # KANGXI RADICAL DOWN BOX 1F21E ; [.CB49.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-518D 2F0D ; [.A832.0020.0004] # KANGXI RADICAL COVER 32A2 ; [.C132.0020.0006] # CIRCLED IDEOGRAPH COPY 2F0E ; [.837B.0020.0004] # KANGXI RADICAL ICE 2F0F ; [.989A.0020.0004] # KANGXI RADICAL TABLE 2F10 ; [.AF3D.0020.0004] # KANGXI RADICAL OPEN BOX 2F11 ; [.8A71.0020.0004] # KANGXI RADICAL KNIFE 1F220 ; [.8779.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-521D 1F21C ; [.AF1F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-524D 1F239 ; [.9162.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5272 2F12 ; [.A237.0020.0004] # KANGXI RADICAL POWER 3298 ; [.A132.0020.0006] # CIRCLED IDEOGRAPH LABOR 2F13 ; [.8175.0020.0004] # KANGXI RADICAL WRAP 2F14 ; [.8238.0020.0004] # KANGXI RADICAL SPOON 2F15 ; [.8E8F.0020.0004] # KANGXI RADICAL RIGHT OPEN BOX 2F16 ; [.BF01.0020.0004] # KANGXI RADICAL HIDING ENCLOSURE 32A9 ; [.C5D4.0020.0006] # CIRCLED IDEOGRAPH MEDICINE 2F17 ; [.B57B.0020.0004] # KANGXI RADICAL TEN 3038 ; [.B57B.0020.0004] # HANGZHOU NUMERAL TEN 3289 ; [.B57B.0020.0006] # CIRCLED IDEOGRAPH TEN 3039 ; [.AAA8.0020.0004] # HANGZHOU NUMERAL TWENTY 303A ; [.B342.0020.0004] # HANGZHOU NUMERAL THIRTY 32AF ; [.C10A.0020.0006] # CIRCLED IDEOGRAPH ALLIANCE 2F18 ; [.8410.0020.0004] # KANGXI RADICAL DIVINATION 2F19 ; [.9B2A.0020.0004] # KANGXI RADICAL SEAL 329E ; [.C7AF.0020.0006] # CIRCLED IDEOGRAPH PRINT 2F1A ; [.85AC.0020.0004] # KANGXI RADICAL CLIFF 2F1B ; [.B6E4.0020.0004] # KANGXI RADICAL PRIVATE 2F1C ; [.C8E8.0020.0004] # KANGXI RADICAL AGAIN 1F212 ; [.B6A1.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53CC 2F1D ; [.9F2E.0020.0004] # KANGXI RADICAL MOUTH 1F251 ; [.9ED7.0020.0006] # CIRCLED IDEOGRAPH ACCEPT 32A8 ; [.C8E9.0020.0006] # CIRCLED IDEOGRAPH RIGHT 1F22E ; [.C8E9.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53F3 1F234 ; [.9499.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5408 3294 ; [.A8EB.0020.0006] # CIRCLED IDEOGRAPH NAME 1F225 ; [.8816.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5439 3244 ; [.BD6F.0020.0006] # CIRCLED IDEOGRAPH QUESTION 1F23A ; [.C804.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-55B6 2F1E ; [.BC8F.0020.0004] # KANGXI RADICAL ENCLOSURE 3195 ; [.B715.0020.0014] # IDEOGRAPHIC ANNOTATION FOUR MARK 3283 ; [.B715.0020.0006] # CIRCLED IDEOGRAPH FOUR 2F1F ; [.BB2D.0020.0004] # KANGXI RADICAL EARTH 328F ; [.BB2D.0020.0006] # CIRCLED IDEOGRAPH EARTH 319E ; [.8AAF.0020.0014] # IDEOGRAPHIC ANNOTATION EARTH MARK 2F20 ; [.B5A9.0020.0004] # KANGXI RADICAL SCHOLAR 1F224 ; [.B526.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-58F0 2F21 ; [.CE2D.0020.0004] # KANGXI RADICAL GO 2F22 ; [.B7D9.0020.0004] # KANGXI RADICAL GO SLOWLY 2F23 ; [.BE4B.0020.0004] # KANGXI RADICAL EVENING 1F215 ; [.8D1C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-591A 32B0 ; [.C59A.0020.0006] # CIRCLED IDEOGRAPH NIGHT 2F24 ; [.89A7.0020.0004] # KANGXI RADICAL BIG 337D ; [.89A7.0020.001C][.CDCB.0020.001C] # SQUARE ERA NAME TAISYOU 319D ; [.B9F9.0020.0014] # IDEOGRAPHIC ANNOTATION HEAVEN MARK 1F217 ; [.B9F9.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5929 2F25 ; [.AB5E.0020.0004] # KANGXI RADICAL WOMAN 329B ; [.AB5E.0020.0006] # CIRCLED IDEOGRAPH FEMALE 2F26 ; [.D0E1.0020.0004] # KANGXI RADICAL CHILD 1F211 ; [.D0D3.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5B57 32AB ; [.C304.0020.0006] # CIRCLED IDEOGRAPH STUDY 2F27 ; [.A858.0020.0004] # KANGXI RADICAL ROOF 32AA ; [.D0E4.0020.0006] # CIRCLED IDEOGRAPH RELIGION 2F28 ; [.8955.0020.0004] # KANGXI RADICAL INCH 2F29 ; [.C0DE.0020.0004] # KANGXI RADICAL SMALL 2F2A ; [.C8AC.0020.0004] # KANGXI RADICAL LAME 2F2B ; [.B554.0020.0004] # KANGXI RADICAL CORPSE 2F2C ; [.85F7.0020.0004] # KANGXI RADICAL SPROUT 2F2D ; [.B3FD.0020.0004] # KANGXI RADICAL MOUNTAIN 2F2E ; [.87DC.0020.0004] # KANGXI RADICAL RIVER 2F2F ; [.91CB.0020.0004] # KANGXI RADICAL WORK 32A7 ; [.D19D.0020.0006] # CIRCLED IDEOGRAPH LEFT 1F22C ; [.D19D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6 2F30 ; [.989B.0020.0004] # KANGXI RADICAL ONESELF 2F31 ; [.9B91.0020.0004] # KANGXI RADICAL TURBAN 2F32 ; [.90EE.0020.0004] # KANGXI RADICAL DRY 337B ; [.AD6D.0020.001C][.866D.0020.001C] # SQUARE ERA NAME HEISEI 2F33 ; [.C50D.0020.0004] # KANGXI RADICAL SHORT THREAD 3245 ; [.C8EA.0020.0006] # CIRCLED IDEOGRAPH KINDERGARTEN 2F34 ; [.9307.0020.0004] # KANGXI RADICAL DOTTED CLIFF 2F35 ; [.C792.0020.0004] # KANGXI RADICAL LONG STRIDE 2F36 ; [.91E7.0020.0004] # KANGXI RADICAL TWO HANDS 2F37 ; [.C66C.0020.0004] # KANGXI RADICAL SHOOT 2F38 ; [.91CC.0020.0004] # KANGXI RADICAL BOW 2F39 ; [.98AF.0020.0004] # KANGXI RADICAL SNOUT 2F3A ; [.B3FE.0020.0004] # KANGXI RADICAL BRISTLE 2F3B ; [.86F1.0020.0004] # KANGXI RADICAL STEP 1F21D ; [.957C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C 1F250 ; [.8AB1.0020.0006] # CIRCLED IDEOGRAPH ADVANTAGE 2F3C ; [.C178.0020.0004] # KANGXI RADICAL HEART 2F3D ; [.9153.0020.0004] # KANGXI RADICAL HALBERD 2F3E ; [.95D9.0020.0004] # KANGXI RADICAL DOOR 2F3F ; [.B60C.0020.0004] # KANGXI RADICAL HAND 1F210 ; [.B60C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-624B 1F231 ; [.89A6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6253 1F227 ; [.BAEB.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6295 1F22F ; [.CE40.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6307 1F228 ; [.8420.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6355 2F40 ; [.CDDA.0020.0004] # KANGXI RADICAL BRANCH 2F41 ; [.ADCC.0020.0004] # KANGXI RADICAL RAP 2F42 ; [.BD44.0020.0004] # KANGXI RADICAL SCRIPT 3246 ; [.BD44.0020.0006] # CIRCLED IDEOGRAPH SCHOOL 2F43 ; [.8C5E.0020.0004] # KANGXI RADICAL DIPPER 1F21B ; [.A385.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6599 2F44 ; [.9B93.0020.0004] # KANGXI RADICAL AXE 1F21F ; [.C188.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-65B0 2F45 ; [.8E90.0020.0004] # KANGXI RADICAL SQUARE 2F46 ; [.BDD2.0020.0004] # KANGXI RADICAL NOT 2F47 ; [.B272.0020.0004] # KANGXI RADICAL SUN 3290 ; [.B272.0020.0006] # CIRCLED IDEOGRAPH SUN 337E ; [.A8EC.0020.001C][.CE5C.0020.001C] # SQUARE ERA NAME MEIZI 1F219 ; [.C83C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6620 337C ; [.CCD5.0020.001C][.949E.0020.001C] # SQUARE ERA NAME SYOUWA 2F48 ; [.CA8E.0020.0004] # KANGXI RADICAL SAY 2F49 ; [.CA96.0020.0004] # KANGXI RADICAL MOON 328A ; [.CA96.0020.0006] # CIRCLED IDEOGRAPH MOON 1F237 ; [.CA96.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6708 3292 ; [.C8D2.0020.0006] # CIRCLED IDEOGRAPH HAVE 1F236 ; [.C8D2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6709 2F4A ; [.A98A.0020.0004] # KANGXI RADICAL TREE 328D ; [.A98A.0020.0006] # CIRCLED IDEOGRAPH WOOD 3291 ; [.CF58.0020.0006] # CIRCLED IDEOGRAPH STOCK 337F ; [.CF58.0020.001C][.B5B3.0020.001C][.9737.0020.001C][.B4AC.0020.001C] # SQUARE CORPORATION 2F4B ; [.AF4C.0020.0004] # KANGXI RADICAL LACK 2F4C ; [.CE2E.0020.0004] # KANGXI RADICAL STOP 32A3 ; [.CDCB.0020.0006] # CIRCLED IDEOGRAPH CORRECT 2F4D ; [.89B3.0020.0004] # KANGXI RADICAL DEATH 2F4E ; [.B623.0020.0004] # KANGXI RADICAL WEAPON 2F4F ; [.BDD3.0020.0004] # KANGXI RADICAL DO NOT 2E9F ; [.A97A.0020.0004] # CJK RADICAL MOTHER 2F50 ; [.8239.0020.0004] # KANGXI RADICAL COMPARE 2F51 ; [.A71D.0020.0004] # KANGXI RADICAL FUR 2F52 ; [.B5AA.0020.0004] # KANGXI RADICAL CLAN 2F53 ; [.AE99.0020.0004] # KANGXI RADICAL STEAM 2F54 ; [.B6BA.0020.0004] # KANGXI RADICAL WATER 328C ; [.B6BA.0020.0006] # CIRCLED IDEOGRAPH WATER 329F ; [.CFA5.0020.0006] # CIRCLED IDEOGRAPH ATTENTION 1F235 ; [.A6DD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6E80 1F226 ; [.C445.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6F14 2F55 ; [.97BC.0020.0004] # KANGXI RADICAL FIRE 328B ; [.97BC.0020.0006] # CIRCLED IDEOGRAPH FIRE 1F21A ; [.BDE3.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7121 2F56 ; [.CCDE.0020.0004] # KANGXI RADICAL CLAW 2F57 ; [.9046.0020.0004] # KANGXI RADICAL FATHER 2F58 ; [.C51B.0020.0004] # KANGXI RADICAL DOUBLE X 2F59 ; [.ABD3.0020.0004] # KANGXI RADICAL HALF TREE TRUNK 2F5A ; [.AD1C.0020.0004] # KANGXI RADICAL SLICE 2F5B ; [.C397.0020.0004] # KANGXI RADICAL FANG 2F5C ; [.AB21.0020.0004] # KANGXI RADICAL COW 3295 ; [.B980.0020.0006] # CIRCLED IDEOGRAPH SPECIAL 2F5D ; [.B1B4.0020.0004] # KANGXI RADICAL DOG 2F5E ; [.C2C8.0020.0004] # KANGXI RADICAL PROFOUND 2F5F ; [.C99A.0020.0004] # KANGXI RADICAL JADE 2F60 ; [.928E.0020.0004] # KANGXI RADICAL MELON 2F61 ; [.BBE5.0020.0004] # KANGXI RADICAL TILE 2F62 ; [.90BE.0020.0004] # KANGXI RADICAL SWEET 2F63 ; [.B523.0020.0004] # KANGXI RADICAL LIFE 1F222 ; [.B523.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-751F 2F64 ; [.C894.0020.0004] # KANGXI RADICAL USE 2F65 ; [.BA01.0020.0004] # KANGXI RADICAL FIELD 3199 ; [.9955.0020.0014] # IDEOGRAPHIC ANNOTATION FIRST MARK 1F238 ; [.B4C6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7533 329A ; [.A9E0.0020.0006] # CIRCLED IDEOGRAPH MALE 2F66 ; [.ACE2.0020.0004] # KANGXI RADICAL BOLT OF CLOTH 2F67 ; [.AA2F.0020.0004] # KANGXI RADICAL SICKNESS 2F68 ; [.83AC.0020.0004] # KANGXI RADICAL DOTTED TENT 2F69 ; [.810B.0020.0004] # KANGXI RADICAL WHITE 2F6A ; [.ACBB.0020.0004] # KANGXI RADICAL SKIN 2F6B ; [.A8CF.0020.0004] # KANGXI RADICAL DISH 32AC ; [.999B.0020.0006] # CIRCLED IDEOGRAPH SUPERVISE 2F6C ; [.A98D.0020.0004] # KANGXI RADICAL EYE 2F6D ; [.A71E.0020.0004] # KANGXI RADICAL SPEAR 2F6E ; [.B59D.0020.0004] # KANGXI RADICAL ARROW 2F6F ; [.B57D.0020.0004] # KANGXI RADICAL STONE 2F70 ; [.B5B0.0020.0004] # KANGXI RADICAL SPIRIT 3293 ; [.B4AC.0020.0006] # CIRCLED IDEOGRAPH SOCIETY 3297 ; [.CFAD.0020.0006] # CIRCLED IDEOGRAPH CONGRATULATION 1F232 ; [.9BD6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7981 2F71 ; [.B2AC.0020.0004] # KANGXI RADICAL TRACK 2F72 ; [.9498.0020.0004] # KANGXI RADICAL GRAIN 3299 ; [.A83C.0020.0006] # CIRCLED IDEOGRAPH SECRET 2F73 ; [.C301.0020.0004] # KANGXI RADICAL CAVE 1F233 ; [.9F18.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A 2F74 ; [.A23B.0020.0004] # KANGXI RADICAL STAND 2F75 ; [.CF74.0020.0004] # KANGXI RADICAL BAMBOO 3247 ; [.CDBB.0020.0006] # CIRCLED IDEOGRAPH KOTO 2F76 ; [.A821.0020.0004] # KANGXI RADICAL RICE 2F77 ; [.A833.0020.0004] # KANGXI RADICAL SILK 1F221 ; [.CEDC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7D42 2F78 ; [.8F9E.0020.0004] # KANGXI RADICAL JAR 2F79 ; [.BC56.0020.0004] # KANGXI RADICAL NET 2F7A ; [.C4C4.0020.0004] # KANGXI RADICAL SHEEP 2F7B ; [.C975.0020.0004] # KANGXI RADICAL FEATHER 2F7C ; [.A149.0020.0004] # KANGXI RADICAL OLD 2F7D ; [.8DE6.0020.0004] # KANGXI RADICAL AND 2F7E ; [.A19B.0020.0004] # KANGXI RADICAL PLOW 2F7F ; [.8E00.0020.0004] # KANGXI RADICAL EAR 2F80 ; [.C99D.0020.0004] # KANGXI RADICAL BRUSH 2F81 ; [.B2C1.0020.0004] # KANGXI RADICAL MEAT 2F82 ; [.8612.0020.0004] # KANGXI RADICAL MINISTER 2F83 ; [.D0D4.0020.0004] # KANGXI RADICAL SELF 2F84 ; [.CE51.0020.0004] # KANGXI RADICAL ARRIVE 2F85 ; [.9CA1.0020.0004] # KANGXI RADICAL MORTAR 2F86 ; [.B4A3.0020.0004] # KANGXI RADICAL TONGUE 2F87 ; [.87EF.0020.0004] # KANGXI RADICAL OPPOSE 2F88 ; [.CF09.0020.0004] # KANGXI RADICAL BOAT 2F89 ; [.91A3.0020.0004] # KANGXI RADICAL STOPPING 2F8A ; [.B3A0.0020.0004] # KANGXI RADICAL COLOR 2F8B ; [.84B1.0020.0004] # KANGXI RADICAL GRASS 2F8C ; [.9588.0020.0004] # KANGXI RADICAL TIGER 2F8D ; [.872E.0020.0004] # KANGXI RADICAL INSECT 2F8E ; [.C317.0020.0004] # KANGXI RADICAL BLOOD 2F8F ; [.C1BA.0020.0004] # KANGXI RADICAL WALK ENCLOSURE 2F90 ; [.C5D3.0020.0004] # KANGXI RADICAL CLOTHES 2F91 ; [.C3B8.0020.0004] # KANGXI RADICAL WEST 2F92 ; [.99FE.0020.0004] # KANGXI RADICAL SEE 2F93 ; [.9AB8.0020.0004] # KANGXI RADICAL HORN 1F216 ; [.9B6C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-89E3 2F94 ; [.C3F5.0020.0004] # KANGXI RADICAL SPEECH 2F95 ; [.924B.0020.0004] # KANGXI RADICAL VALLEY 2F96 ; [.8C5F.0020.0004] # KANGXI RADICAL BEAN 2F97 ; [.B59F.0020.0004] # KANGXI RADICAL PIG 2F98 ; [.CE56.0020.0004] # KANGXI RADICAL BADGER 2F99 ; [.81CA.0020.0004] # KANGXI RADICAL SHELL 3296 ; [.844F.0020.0006] # CIRCLED IDEOGRAPH FINANCIAL 1F223 ; [.8E87.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9 32AE ; [.D0A3.0020.0006] # CIRCLED IDEOGRAPH RESOURCE 2F9A ; [.86F6.0020.0004] # KANGXI RADICAL RED 2F9B ; [.D138.0020.0004] # KANGXI RADICAL RUN 1F230 ; [.D138.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8D70 2F9C ; [.D141.0020.0004] # KANGXI RADICAL FOOT 2F9D ; [.B4CA.0020.0004] # KANGXI RADICAL BODY 2F9E ; [.85ED.0020.0004] # KANGXI RADICAL CART 2F9F ; [.C17D.0020.0004] # KANGXI RADICAL BITTER 2FA0 ; [.8616.0020.0004] # KANGXI RADICAL MORNING 2FA1 ; [.8858.0020.0004] # KANGXI RADICAL WALK 1F22B ; [.C8C4.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-904A 329C ; [.B5EC.0020.0006] # CIRCLED IDEOGRAPH SUITABLE 2FA2 ; [.C682.0020.0004] # KANGXI RADICAL CITY 2FA3 ; [.C8D6.0020.0004] # KANGXI RADICAL WINE 2FA4 ; [.82F0.0020.0004] # KANGXI RADICAL DISTINGUISH 2FA5 ; [.A21E.0020.0004] # KANGXI RADICAL VILLAGE 2FA6 ; [.9B96.0020.0004] # KANGXI RADICAL GOLD 328E ; [.9B96.0020.0006] # CIRCLED IDEOGRAPH METAL 2FA7 ; [.CCB5.0020.0004] # KANGXI RADICAL LONG 2FA8 ; [.A7B4.0020.0004] # KANGXI RADICAL GATE 2FA9 ; [.904E.0020.0004] # KANGXI RADICAL MOUND 2FAA ; [.A24C.0020.0004] # KANGXI RADICAL SLAVE 2FAB ; [.D014.0020.0004] # KANGXI RADICAL SHORT TAILED BIRD 2FAC ; [.C976.0020.0004] # KANGXI RADICAL RAIN 2FAD ; [.B063.0020.0004] # KANGXI RADICAL BLUE 2FAE ; [.8EB9.0020.0004] # KANGXI RADICAL WRONG 2FAF ; [.A882.0020.0004] # KANGXI RADICAL FACE 2FB0 ; [.9173.0020.0004] # KANGXI RADICAL LEATHER 2FB1 ; [.BC9A.0020.0004] # KANGXI RADICAL TANNED LEATHER 2FB2 ; [.9C9A.0020.0004] # KANGXI RADICAL LEEK 2FB3 ; [.C745.0020.0004] # KANGXI RADICAL SOUND 2FB4 ; [.C59E.0020.0004] # KANGXI RADICAL LEAF 32A0 ; [.C084.0020.0006] # CIRCLED IDEOGRAPH ITEM 2FB5 ; [.8F57.0020.0004] # KANGXI RADICAL WIND 2FB6 ; [.8EBA.0020.0004] # KANGXI RADICAL FLY 2FB7 ; [.B58A.0020.0004] # KANGXI RADICAL EAT 2FB8 ; [.B60F.0020.0004] # KANGXI RADICAL HEAD 2FB9 ; [.C044.0020.0004] # KANGXI RADICAL FRAGRANT 2FBA ; [.A690.0020.0004] # KANGXI RADICAL HORSE 2FBB ; [.924E.0020.0004] # KANGXI RADICAL BONE 2FBC ; [.9124.0020.0004] # KANGXI RADICAL TALL 2FBD ; [.830C.0020.0004] # KANGXI RADICAL HAIR 2FBE ; [.8C65.0020.0004] # KANGXI RADICAL FIGHT 2FBF ; [.85BA.0020.0004] # KANGXI RADICAL SACRIFICIAL WINE 2FC0 ; [.9176.0020.0004] # KANGXI RADICAL CAULDRON 2FC1 ; [.934D.0020.0004] # KANGXI RADICAL GHOST 2FC2 ; [.C936.0020.0004] # KANGXI RADICAL FISH 2FC3 ; [.AABB.0020.0004] # KANGXI RADICAL BIRD 2FC4 ; [.A552.0020.0004] # KANGXI RADICAL SALT 2FC5 ; [.A57C.0020.0004] # KANGXI RADICAL DEER 2FC6 ; [.A6C0.0020.0004] # KANGXI RADICAL WHEAT 2FC7 ; [.A687.0020.0004] # KANGXI RADICAL HEMP 2FC8 ; [.96C2.0020.0004] # KANGXI RADICAL YELLOW 2FC9 ; [.B656.0020.0004] # KANGXI RADICAL MILLET 2FCA ; [.94F2.0020.0004] # KANGXI RADICAL BLACK 2FCB ; [.CE4C.0020.0004] # KANGXI RADICAL EMBROIDERY 2FCC ; [.A87C.0020.0004] # KANGXI RADICAL FROG 2FCD ; [.8BF6.0020.0004] # KANGXI RADICAL TRIPOD 2FCE ; [.9261.0020.0004] # KANGXI RADICAL DRUM 2FCF ; [.B659.0020.0004] # KANGXI RADICAL RAT 2FD0 ; [.8237.0020.0004] # KANGXI RADICAL NOSE 2FD1 ; [.AE64.0020.0004] # KANGXI RADICAL EVEN 2FD2 ; [.86F0.0020.0004] # KANGXI RADICAL TOOTH 2FD3 ; [.A4C6.0020.0004] # KANGXI RADICAL DRAGON 2FD4 ; [.9336.0020.0004] # KANGXI RADICAL TURTLE 2EF3 ; [.9317.0020.0004] # CJK RADICAL C-SIMPLIFIED TURTLE 2FD5 ; [.CAB5.0020.0004] # KANGXI RADICAL FLUTE F967 ; [.8424.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.839A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.87F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 2F801 ; [.BC07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.89E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E 2F800 ; [.A23E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800 2F802 ; [.C5F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F802 F91B ; [.A613.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B F9BA ; [.A17A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA F977 ; [.A342.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 F9FD ; [.B4F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD 2F819 ; [.837C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F819 F9A8 ; [.A453.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 2F804 ; [.AA66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804 FA73 ; [.C1BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73 F92D ; [.A084.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D F9B5 ; [.A245.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.BDFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.BDFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 2F806 ; [.BB64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806 F965 ; [.82F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 2F807 ; [.839E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807 F9D4 ; [.A624.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 2F808 ; [.CB31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808 2F809 ; [.81DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 2F80B ; [.C085.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.A356.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.B3C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.B3C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A FA0C ; [.BE12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.871C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.A86B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.A86B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F ; [.BB34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F 2F810 ; [.96DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F810 2F814 ; [.AA3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814 FA72 ; [.B186.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.A338.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 F9D1 ; [.A49F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 2F811 ; [.9D2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.98F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F815 ; [.CB49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 2F8D2 ; [.A744.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.A872.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F817 ; [.B2A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 2F818 ; [.CA20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F81A ; [.8C16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A FA71 ; [.9FAC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71 2F81B ; [.9FAC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B F92E ; [.A1CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E F979 ; [.A329.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 F955 ; [.A412.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.A3E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 FA15 ; [.BEA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15 2F81D ; [.AF3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F81E ; [.B244.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.AFFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.AFFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.A38C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C F9DD ; [.A23F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.88A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.9EE2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F821 ; [.A65E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821 2F822 ; [.9162.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 2F823 ; [.8564.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823 F9C7 ; [.A474.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 F98A ; [.A237.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A F99D ; [.A38D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D 2F992 ; [.A131.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992 FA76 ; [.C87B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.C87B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.A86E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.A86E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.A17D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 F92F ; [.A139.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.B039.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.B039.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 F97F ; [.A284.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F FA77 ; [.B486.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.B486.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.8176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A ; [.88AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A F963 ; [.81C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.81C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B F9EB ; [.AA7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F82C ; [.9735.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.81B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.81B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E ; [.83E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F ; [.9856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.A610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F830 ; [.985E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830 2F831 ; [.B068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.B068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.B068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 F96B ; [.8464.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F836 ; [.984E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 2F837 ; [.B77F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 F906 ; [.9D21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.9AED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A ; [.86F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A 2F83B ; [.C50F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B F9DE ; [.A23C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.A3EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.BE4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D F980 ; [.A5C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.866F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.CF0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F 2F83C ; [.C009.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83C 2F840 ; [.8D98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.C468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F841 ; [.A8A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F841 2F842 ; [.B912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 2F843 ; [.AE8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843 FA79 ; [.B968.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79 2F844 ; [.BFC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 2F845 ; [.B434.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.B434.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.A06A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.9747.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.9747.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.9494.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.9494.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F848 ; [.86B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 2F849 ; [.CC0F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849 FA0D ; [.95EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D 2F84A ; [.C52C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A FA7B ; [.BBEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B FA37 ; [.B8FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 2F84C ; [.B8FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C 2F84E ; [.9460.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84E FA38 ; [.AEBB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.AC52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F F9A9 ; [.A404.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.BB20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F84D ; [.BB21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84D 2F855 ; [.C1C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.CE0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F854 ; [.BB35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854 2F857 ; [.81A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 2F856 ; [.887F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856 FA39 ; [.AD95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39 FA10 ; [.CEEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 FA7C ; [.CEEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C F96C ; [.B352.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.A952.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A 2F858 ; [.8B3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858 FA7D ; [.8F25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D F94A ; [.A1A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A F942 ; [.A4EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 2F851 ; [.D00A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851 2F85A ; [.A6BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A 2F85B ; [.95AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B 2F85C ; [.8F78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C 2F85D ; [.8D1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D 2F85E ; [.A7F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E FA7E ; [.C42B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.A9D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.AEA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.81F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.B49A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.AB5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 2F865 ; [.AD48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865 2F862 ; [.9802.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 2F863 ; [.C92A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863 2F864 ; [.BB66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864 FA80 ; [.826B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F866 ; [.905C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 2F986 ; [.C83F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 2F869 ; [.B221.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869 FA81 ; [.888D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81 2F86A ; [.A0ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B ; [.A0ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B FA04 ; [.CC49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 2F86D ; [.CA24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D 2F86E ; [.CE90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E F95F ; [.AB0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F F9AA ; [.AB0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA 2F86F ; [.AB0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F F9BC ; [.A35E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F870 ; [.819A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870 2F872 ; [.B611.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872 2F873 ; [.9A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873 2F875 ; [.C8AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875 F9BD ; [.AAC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.BB13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 F94B ; [.A5D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B FA3B ; [.84DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B F9DF ; [.A5D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF FA3C ; [.85F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C 2F878 ; [.85F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878 2F87A ; [.AEE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A 2F879 ; [.C218.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879 F9D5 ; [.A629.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 2F87C ; [.C438.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C F921 ; [.A0B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 2F87F ; [.D096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F 2F87E ; [.8B4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87E 2F880 ; [.8565.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880 2F9F4 ; [.BE9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4 F9AB ; [.A452.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB 2F881 ; [.C33F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F882 ; [.85D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 2F884 ; [.C372.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F885 ; [.B6BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885 2F886 ; [.A74C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 2F887 ; [.8F26.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887 F98E ; [.AA90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E FA01 ; [.8CB0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88B ; [.839D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B 2F88C ; [.826C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D ; [.B673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.A2D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.A10D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.A10D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA82 ; [.8093.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82 FA0B ; [.A051.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B FA83 ; [.C6DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83 F982 ; [.A537.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 2F890 ; [.91E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890 F943 ; [.AB44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 2F894 ; [.B94A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894 2F895 ; [.B94A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895 2F874 ; [.8A3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874 2F899 ; [.C1BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.8458.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 2F89A ; [.8B8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A F9D8 ; [.A5E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 2F89C ; [.8C26.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89C F966 ; [.9060.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.C52E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F89D ; [.B23C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.CE53.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.AAAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 2F89F ; [.9F9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89F F960 ; [.AB5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.A2CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC FA6B ; [.9741.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B 2F8A0 ; [.CA21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 FA3D ; [.972E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.972E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A5 ; [.8CF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 FA86 ; [.BC5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 F9B9 ; [.8DAF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 FA88 ; [.C9CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 F9D9 ; [.A276.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 2F8A6 ; [.8883.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.96B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.96B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA87 ; [.B516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87 2F8A8 ; [.B516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8 FA8A ; [.80BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A FA3E ; [.9E4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E 2F8AA ; [.A500.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA FA3F ; [.CBF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.CBF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.CBF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB F98F ; [.A2E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F 2F8AD ; [.8F40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AE ; [.847C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE 2F8AC ; [.C030.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC 2F8AF ; [.A7D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF FA40 ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 FA8B ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B 2F8B0 ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 F90D ; [.A0EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D 2F8B1 ; [.A0EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 F990 ; [.A324.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 2F8B2 ; [.866D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3 ; [.9945.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3 F9D2 ; [.A591.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.89D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F8B4 ; [.9F3F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B4 2F8B5 ; [.819F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.A05F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 F95B ; [.A9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B FA02 ; [.B86F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.80E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 2F8BA ; [.AD49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA F973 ; [.B600.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 2F8B9 ; [.BC1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.9D69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 2F8BB ; [.B4A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB F9A4 ; [.AA99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 2F8BC ; [.B397.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC F975 ; [.8DA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.C433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.C93D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D 2F8C0 ; [.C40D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0 2F8BD ; [.9865.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD FA8E ; [.B76C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E 2F8BF ; [.9BD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF FA8F ; [.8391.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F 2F8C3 ; [.A914.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 2F8C6 ; [.9AD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6 2F8C4 ; [.9A82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C4 F991 ; [.AA9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 2F8C5 ; [.9712.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 F930 ; [.A55B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930 FA41 ; [.A8D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.A8D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.808D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 2F8C9 ; [.9C49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.B682.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 F9BE ; [.A385.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE F983 ; [.A5CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 FA42 ; [.98C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42 2F8CB ; [.98D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB F9E0 ; [.C689.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 2F8CD ; [.9BCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD FA12 ; [.B07B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.B07B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 F9C5 ; [.CAC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 FA43 ; [.B654.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.B654.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF 2F8D5 ; [.9BDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D5 FA06 ; [.81AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 F98B ; [.A285.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B F901 ; [.91C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.B62E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.D171.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 F929 ; [.A11F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.A11F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.A11F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.BC6C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.BC6C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 2F8DA ; [.D0F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA F9E1 ; [.A2BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.8308.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.CCBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.AE88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB F9C8 ; [.876A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8 2F8E0 ; [.97FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0 F9F4 ; [.A3B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.A490.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 2F8DF ; [.92B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF F9DA ; [.A259.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA 2F8E5 ; [.81F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5 2F8E1 ; [.B37D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E1 F97A ; [.A32A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.A76C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.A76C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 2F8E4 ; [.808A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E4 F9E2 ; [.A1DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 2F8E6 ; [.D097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6 2F8E8 ; [.CC12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8E9 ; [.C536.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9 2F8EA ; [.90BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA F914 ; [.A176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 F95C ; [.A176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C F9BF ; [.A176.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF F94C ; [.A504.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C 2F8EB ; [.B4A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB F931 ; [.A562.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 2F8ED ; [.CEB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED F91D ; [.A0D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D 2F8EF ; [.889D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F1 ; [.C249.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 2F8F3 ; [.B7FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 F98C ; [.A286.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C FA95 ; [.89B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95 2F8F4 ; [.BD36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4 F9A5 ; [.A31E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5 F970 ; [.B3CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 FA96 ; [.B3CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 2F8F5 ; [.B3CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8F6 ; [.AFE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6 2F8FA ; [.8E7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA 2F8FE ; [.AEE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE F972 ; [.8614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.C3F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.A837.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 2F8FD ; [.81F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD F9E3 ; [.AA4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 2F8FF ; [.BDDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF F915 ; [.A66A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.8C3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F907 ; [.AD78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907 2F900 ; [.ABCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.9477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.A129.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.93D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.93D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.9BCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.AACC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.A3BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 F94D ; [.A1B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D F9D6 ; [.A62B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 2F90E ; [.C3DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.CF91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.911B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.C3E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 F9CB ; [.A45B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.AA85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC 2F90C ; [.8B4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C FA99 ; [.D099.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.D099.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.9618.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 FA98 ; [.C781.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA98 F94E ; [.A51A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E FA47 ; [.942D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 FA9A ; [.942D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A F992 ; [.A2D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 2F90F ; [.85DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F912 ; [.8F27.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 F922 ; [.A0FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 F984 ; [.A5EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 2F915 ; [.C823.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 FA9B ; [.9C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F914 ; [.9C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914 2F913 ; [.CAB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913 2F917 ; [.AF3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917 2F835 ; [.96F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 2F919 ; [.CFEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F919 2F918 ; [.CB3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.CE5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.B8F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A F99F ; [.A39A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.A157.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 2F91C ; [.8CCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C F993 ; [.A318.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 FA48 ; [.CF92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.CF92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C 2F91E ; [.88BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E F9C0 ; [.A366.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 F9EE ; [.A3CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE F932 ; [.A53F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 F91E ; [.A0FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F920 ; [.891A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 FA49 ; [.CCFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA49 FA9E ; [.9DDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.9DDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 2F922 ; [.CC22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F922 F946 ; [.A133.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 2F924 ; [.BE7F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 2F925 ; [.81E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925 FA9F ; [.8E7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F F9FA ; [.D00D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA F92B ; [.A10A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B FA16 ; [.CF5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 FAA0 ; [.CF5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 F9A7 ; [.A3AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 2F928 ; [.B86C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 F961 ; [.A5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.A5E2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F929 ; [.BC50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 2F92B ; [.CA9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B F9AD ; [.A410.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.A66F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.A226.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.A465.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.D199.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92E ; [.89CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92E 2F92F ; [.C94D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F F9AE ; [.C813.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE FAA1 ; [.CD92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1 2F930 ; [.CD92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930 2F931 ; [.B84D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931 F994 ; [.A303.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994 F9EF ; [.A3CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF 2F932 ; [.B0BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 FAA2 ; [.8884.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA2 2F934 ; [.B309.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F934 FAA3 ; [.9628.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3 2F936 ; [.CB3F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936 F9CD ; [.A463.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.8DA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.C6B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.C6B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 F9E5 ; [.A26F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.C98A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A FAA4 ; [.92C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4 FAA5 ; [.BD3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 F9C1 ; [.A369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 F90E ; [.A0B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E FA17 ; [.C6A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.C6A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7 ; [.B546.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 F933 ; [.A533.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 FAA8 ; [.CE08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.CE08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.B53E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F945 ; [.CD43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945 2F946 ; [.CD44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946 2F947 ; [.CD44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947 FAAA ; [.CD35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA FAA9 ; [.9D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9 2F948 ; [.9D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948 2F94A ; [.860C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A FA9D ; [.AFD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D 2F94E ; [.C1C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E F9CE ; [.A467.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.A586.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.A586.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.81C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.A1A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 FAAB ; [.BA14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB 2F950 ; [.BA14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950 F964 ; [.ABDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964 F985 ; [.A29F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 FA18 ; [.A21D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18 FA4C ; [.B4AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C FA4E ; [.AE35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.CE3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA4F ; [.C8F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.D153.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.D153.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.CFAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 FA19 ; [.B4F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.C062.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A F93C ; [.A580.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C FA52 ; [.97D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 FA53 ; [.CD54.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 FA1B ; [.900A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.900A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 F9B6 ; [.A22F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 F995 ; [.AA91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995 2F957 ; [.B64A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 F956 ; [.A1CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 FA54 ; [.9267.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 2F959 ; [.9267.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 2F95A ; [.98E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A 2F95B ; [.BD69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B FA55 ; [.BAFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 FAAC ; [.BA57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC F9F7 ; [.A23B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 2F95F ; [.AD6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F F9F8 ; [.A265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 FA56 ; [.9B51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 FAAD ; [.9B51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD 2F962 ; [.CFF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 2F963 ; [.CF80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 F9A6 ; [.A2F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 F944 ; [.A4D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 FAAE ; [.A1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE F9F9 ; [.A266.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.9C0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D 2F966 ; [.81EF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966 FA03 ; [.B929.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 2F969 ; [.B36D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F969 F97B ; [.A335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B 2F968 ; [.9A87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968 2F96A ; [.98C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A F9CF ; [.AB29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF F96A ; [.B844.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.A1B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F FAAF ; [.B94E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF 2F96C ; [.8211.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C F93D ; [.A5E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D F957 ; [.A432.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 2F96E ; [.D0A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E F996 ; [.A31B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 FA57 ; [.A31B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 FAB0 ; [.A31B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 2F96F ; [.D113.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96F FA58 ; [.9BE4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 F950 ; [.A5DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 FA59 ; [.8E69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 2F970 ; [.B38F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970 FAB1 ; [.AD85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1 FA5A ; [.B657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.A1FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 2F976 ; [.85DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976 F90F ; [.A64E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F 2F978 ; [.C504.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978 F9AF ; [.A422.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.C975.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E 2F979 ; [.80A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979 F934 ; [.A149.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 FA5B ; [.CD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.CD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.CD23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A F9B0 ; [.A424.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 2F97D ; [.AD69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97D F997 ; [.A2F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.88C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.A4DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 F953 ; [.A167.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.A9B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.C9A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F983 ; [.8934.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F983 2F985 ; [.ACD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 F926 ; [.A078.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 F9F6 ; [.A3D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 FA5C ; [.8772.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F893 ; [.C928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.C928.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C ; [.BF1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C FA6D ; [.92D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D F97C ; [.A327.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C FA5D ; [.84B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D FA5E ; [.84B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E 2F990 ; [.C99E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F98F ; [.AE85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F 2F991 ; [.CDDD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.960B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.8E93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.C39B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.B328.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.B328.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.9F4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 2F999 ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999 2F99C ; [.BDDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C F9FE ; [.84F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.96AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F9A0 ; [.AD7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0 2F99A ; [.B27F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A 2F99B ; [.9B40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99B 2F99D ; [.A713.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D F93E ; [.A57A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E 2F9A1 ; [.9CF4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.9E06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.845F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 2F99E ; [.8B10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E FAB4 ; [.9614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 F958 ; [.A426.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.A673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 F96E ; [.C5A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E FA5F ; [.CD36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.CD36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F F999 ; [.A2D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 2F9A8 ; [.AD86.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 2F9A9 ; [.9BB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9 F9C2 ; [.A37C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 2F9AA ; [.8966.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA 2F9AC ; [.B30B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC F923 ; [.A0C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 F9F0 ; [.A3FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 F935 ; [.A53C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 FA20 ; [.B110.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA20 F91F ; [.A0D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F F910 ; [.A656.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 2F9B3 ; [.AB6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 F936 ; [.A555.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 2F9B4 ; [.A555.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5 ; [.9FD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B6 ; [.BF2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6 2F9B8 ; [.AEF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B8 2F9B7 ; [.86AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 2F9BA ; [.AD87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA 2F9B9 ; [.CA2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9 2F9BC ; [.8BD5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC 2F9BD ; [.CF66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD FAB5 ; [.CACA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5 2F9BB ; [.CACA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB 2F9BE ; [.88A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BE F911 ; [.A64D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 2F9C0 ; [.9359.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0 2F9C1 ; [.C072.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1 F927 ; [.A07D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927 FA08 ; [.C1BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F9C3 ; [.D03A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C3 2F9C4 ; [.C5D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 F9A0 ; [.A39F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 F9E7 ; [.A229.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7 2F9C6 ; [.A468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6 2F9C7 ; [.B6C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7 F9E8 ; [.A2C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 F912 ; [.A661.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 2F9C9 ; [.C444.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9 FA60 ; [.94E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.AFA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 F924 ; [.A0CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 FAB7 ; [.907C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 FA0A ; [.99FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A FA61 ; [.B5D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 FAB8 ; [.B5D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2F9CF ; [.8692.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF F96F ; [.B6D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F F9A1 ; [.B6D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1 FAB9 ; [.8BAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 FABB ; [.B08C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB F97D ; [.A34C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D F941 ; [.A63B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 FABE ; [.C9F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE 2F9D0 ; [.C9F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 FA22 ; [.CF69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 FABA ; [.CF69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA F95D ; [.AB81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D FABD ; [.AB81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD FA62 ; [.C5BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 FABC ; [.C5BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC FA63 ; [.9BBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 FABF ; [.9BBE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF F9FC ; [.B608.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC F95A ; [.8C98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A FAC0 ; [.8304.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 2F9D1 ; [.8304.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 F900 ; [.AE8C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 2F9D2 ; [.B59F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D4 ; [.92E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.827C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.A588.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 F903 ; [.9963.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.835E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 FA65 ; [.CC04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 FAC1 ; [.CC04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 2F9D6 ; [.90FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 2F9D7 ; [.AE8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9DB ; [.99CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DA ; [.80E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.A589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 2F9DC ; [.AD12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC F902 ; [.85ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 2F9DE ; [.B25D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE F998 ; [.AAA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 F9D7 ; [.A632.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 FAC2 ; [.B644.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 2F9DF ; [.B644.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF FA07 ; [.901F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 F98D ; [.A2B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D 2F98D ; [.8885.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D F971 ; [.8616.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 FA66 ; [.8857.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66 F99A ; [.A2CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.C6BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.C6BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 FAC3 ; [.86DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.A364.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.A657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 2F9E2 ; [.AE81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2 F92C ; [.A107.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C FA2E ; [.A108.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E 2F9E3 ; [.AD74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3 FA26 ; [.8C50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 2F9E4 ; [.D09D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4 2F9E6 ; [.85D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6 F919 ; [.A159.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 FAC4 ; [.B778.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4 F9B7 ; [.A232.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 F9E9 ; [.A21E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.A34A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.9B96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A F9B1 ; [.A42E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9E7 ; [.83E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 FAC5 ; [.C1CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5 2F9EA ; [.8395.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA 2F9E8 ; [.C2BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 2F9E9 ; [.961F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9 F93F ; [.A59D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F F99B ; [.A31F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B 2F9EB ; [.AFA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB 2F9EC ; [.CB58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC 2F9EE ; [.9E42.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE F986 ; [.A5BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 2F9F0 ; [.B3FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0 F9C6 ; [.B2FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.A518.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.9A78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.A418.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 F9D3 ; [.A574.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 FAC6 ; [.CF90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6 F9DC ; [.A4BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9F1 ; [.A3C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1 FA2F ; [.A288.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F F9B8 ; [.A28E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 2F9F3 ; [.AEFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3 F9EA ; [.A206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.A9EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.A9EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 F9B2 ; [.A430.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.A17E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 2F9F5 ; [.CB01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 F938 ; [.A5AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 F9B3 ; [.A448.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 FA1C ; [.9C4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.9C4E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 FAC9 ; [.8121.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC9 2F9FA ; [.82B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA FA69 ; [.C075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 FACA ; [.C075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA FACB ; [.8D88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACB 2F9FE ; [.8D88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FE 2F9FF ; [.8D88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FF F9B4 ; [.A451.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 2FA00 ; [.AD6C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00 FA6A ; [.AD55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A FACC ; [.AD55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC F9D0 ; [.A1BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2FA02 ; [.9806.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.8E89.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.B734.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C ; [.92D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C 2FA04 ; [.8DCB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04 2FA05 ; [.CACE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05 2FA06 ; [.8195.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06 F91A ; [.A67A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A 2FA07 ; [.BB6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07 F987 ; [.A21A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 FACD ; [.CD7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD 2FA0A ; [.CD7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A F939 ; [.A55A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 2FA0B ; [.990A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B F9F2 ; [.A3DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 2FA0C ; [.99A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C 2FA0F ; [.ACDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F FA2D ; [.94EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D F93A ; [.A5B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.A60F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 F940 ; [.A57C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 F988 ; [.A2A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 F9F3 ; [.A3DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FA15 ; [.A687.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 F989 ; [.A1FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 2FA17 ; [.CE4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17 2FA18 ; [.A86D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18 2FA19 ; [.CE04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA19 2FA1A ; [.A84E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A 2FA1B ; [.8F2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B 2FA1C ; [.8237.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C FAD8 ; [.8DD6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8 F9C4 ; [.A4C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 FAD9 ; [.AC0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9 F907 ; [.9336.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.9336.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.9336.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE ENTRY }; Unicode/Collate/Locale/bn.pl 0000644 00000000553 15037233323 0011654 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0982 ; [.26CD.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA 0983 ; [.26CD.0020.0002][.FFF2.0000.0000] # BENGALI SIGN VISARGA 0981 ; [.26CD.0020.0002][.FFF3.0000.0000] # BENGALI SIGN CANDRABINDU 0994 ; [.26CD.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU ENTRY }; Unicode/Collate/Locale/uk.pl 0000644 00000001174 15037233323 0011674 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0491 ; [.2037.0020.0002] # CYRILLIC SMALL LETTER GHE WITH UPTURN 0490 ; [.2037.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN A647 ; [.2089.0020.0002] # CYRILLIC SMALL LETTER IOTA A646 ; [.2089.0020.0008] # CYRILLIC CAPITAL LETTER IOTA 0457 ; [.208A.0020.0002] # CYRILLIC SMALL LETTER YI 0456 0308 ; [.208A.0020.0002] # CYRILLIC SMALL LETTER YI 0407 ; [.208A.0020.0008] # CYRILLIC CAPITAL LETTER YI 0406 0308 ; [.208A.0020.0008] # CYRILLIC CAPITAL LETTER YI A676 ; [.208A.0020.0004] # COMBINING CYRILLIC LETTER YI ENTRY }; Unicode/Collate/Locale/he.pl 0000644 00000000310 15037233323 0011640 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 05F3 ; [*0305.001F.0002] # HEBREW PUNCTUATION GERESH 05F4 ; [*030C.001F.0002] # HEBREW PUNCTUATION GERSHAYIM ENTRY }; Unicode/Collate/Locale/vi.pl 0000644 00000054400 15037233324 0011674 0 ustar 00 +{ locale_version => 1.25, # 0306 is not a Vietnamese tone, just to avoid \x{306} eq. to something. entry => <<'ENTRY', # for DUCET v9.0.0 0309 ; [.0000.0026.0002][.0000.00F0.0000] # COMBINING HOOK ABOVE 1EA3 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH HOOK ABOVE 1EA2 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH HOOK ABOVE 1EBB ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH HOOK ABOVE 1EBA ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH HOOK ABOVE 1EC9 ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER I WITH HOOK ABOVE 1EC8 ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER I WITH HOOK ABOVE 1ECF ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HOOK ABOVE 1ECE ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HOOK ABOVE 1EE7 ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HOOK ABOVE 1EE6 ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HOOK ABOVE 1EF7 ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER Y WITH HOOK ABOVE 1EF6 ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE 0303 ; [.0000.0026.0002][.0000.00F1.0000] # COMBINING TILDE 00E3 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH TILDE 00C3 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH TILDE 1EBD ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH TILDE 1EBC ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH TILDE 0129 ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER I WITH TILDE 0128 ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER I WITH TILDE 00F5 ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH TILDE 00D5 ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH TILDE 0169 ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH TILDE 0168 ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH TILDE 1EF9 ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER Y WITH TILDE 1EF8 ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER Y WITH TILDE 0301 ; [.0000.0026.0002][.0000.00F2.0000] # COMBINING ACUTE ACCENT 00E1 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH ACUTE 00E9 ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH ACUTE 00ED ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER I WITH ACUTE 00F3 ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH ACUTE 00FA ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH ACUTE 00FD ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER Y WITH ACUTE 00DD ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER Y WITH ACUTE 0341 ; [.0000.0026.0002][.0000.00F2.0000] # COMBINING ACUTE TONE MARK 0323 ; [.0000.0026.0002][.0000.00F3.0000] # COMBINING DOT BELOW 1EA1 ; [.1C47.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH DOT BELOW 1EA0 ; [.1C47.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH DOT BELOW 1EB9 ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH DOT BELOW 1EB8 ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH DOT BELOW 1ECB ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER I WITH DOT BELOW 1ECA ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER I WITH DOT BELOW 1ECD ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH DOT BELOW 1ECC ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH DOT BELOW 1EE5 ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH DOT BELOW 1EE4 ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH DOT BELOW 1EF5 ; [.1F0B.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER Y WITH DOT BELOW 1EF4 ; [.1F0B.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER Y WITH DOT BELOW 0306 ; [.0000.0026.0002][.0000.00F4.0000] # COMBINING BREVE 0115 ; [.1CAA.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER E WITH BREVE 0114 ; [.1CAA.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER E WITH BREVE 012D ; [.1D32.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER I WITH BREVE 012C ; [.1D32.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER I WITH BREVE 014F ; [.1DDD.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER O WITH BREVE 014E ; [.1DDD.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER O WITH BREVE 016D ; [.1EB5.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER U WITH BREVE 016C ; [.1EB5.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER U WITH BREVE 0103 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE 0061 0306 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE 0102 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE 0041 0306 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE 1EB1 ; [.1C48.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE 1EB0 ; [.1C48.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE 1EAF ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH BREVE AND ACUTE 1EAE ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE 1EB5 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH BREVE AND TILDE 1EB4 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE 1EB3 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE 1EB2 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 1EB7 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW 1EB6 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW 00E2 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX 0061 0302 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX 00C2 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0041 0302 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 1EA7 ; [.1C49.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA6 ; [.1C49.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA5 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA4 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1EAB ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE 1EAA ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1EA9 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EA8 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EAD ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAC ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 0111 ; [.1C90.0020.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C90.0020.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C90.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C90.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE 00EA ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC1 ; [.1CAB.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAB.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EBF ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC5 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED1 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED7 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED9 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 01A1 ; [.1DDF.0020.0002] # LATIN SMALL LETTER O WITH HORN 006F 031B ; [.1DDF.0020.0002] # LATIN SMALL LETTER O WITH HORN 01A0 ; [.1DDF.0020.0008] # LATIN CAPITAL LETTER O WITH HORN 004F 031B ; [.1DDF.0020.0008] # LATIN CAPITAL LETTER O WITH HORN 1EDD ; [.1DDF.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE 1EDC ; [.1DDF.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE 1EDB ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH HORN AND ACUTE 1EDA ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE 1EE1 ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH HORN AND TILDE 1EE0 ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH HORN AND TILDE 1EDF ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE 1EDE ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE 1EE3 ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW 1EE2 ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 01B0 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH HORN 0075 031B ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH HORN 01AF ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH HORN 0055 031B ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH HORN 1EEB ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE 1EEA ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE 1EE9 ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH HORN AND ACUTE 1EE8 ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE 1EEF ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH HORN AND TILDE 1EEE ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH HORN AND TILDE 1EED ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE 1EEC ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE 1EF1 ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW 1EF0 ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW 1EA1 0306 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A WITH DOT BELOW, COMBINING BREVE> 1EA0 0306 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A WITH DOT BELOW, COMBINING BREVE> 1EA1 0302 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 1EA0 0302 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 1EB9 0302 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER E WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 1EB8 0302 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER E WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 1ECD 0302 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 1ECC 0302 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O WITH DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 00F2 031B ; [.1DDF.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER O WITH GRAVE, COMBINING HORN> 1ECF 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER O WITH HOOK ABOVE, COMBINING HORN> 00F5 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER O WITH TILDE, COMBINING HORN> 00F3 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER O WITH ACUTE, COMBINING HORN> 1ECD 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O WITH DOT BELOW, COMBINING HORN> 00D2 031B ; [.1DDF.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER O WITH GRAVE, COMBINING HORN> 1ECE 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER O WITH HOOK ABOVE, COMBINING HORN> 00D5 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER O WITH TILDE, COMBINING HORN> 00D3 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER O WITH ACUTE, COMBINING HORN> 1ECC 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O WITH DOT BELOW, COMBINING HORN> 00F9 031B ; [.1EB6.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER U WITH GRAVE, COMBINING HORN> 1EE7 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER U WITH HOOK ABOVE, COMBINING HORN> 0169 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER U WITH TILDE, COMBINING HORN> 00FA 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER U WITH ACUTE, COMBINING HORN> 1EE5 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER U WITH DOT BELOW, COMBINING HORN> 00D9 031B ; [.1EB6.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER U WITH GRAVE, COMBINING HORN> 1EE6 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER U WITH HOOK ABOVE, COMBINING HORN> 0168 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER U WITH TILDE, COMBINING HORN> 00DA 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER U WITH ACUTE, COMBINING HORN> 1EE4 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER U WITH DOT BELOW, COMBINING HORN> 0061 0323 0306 ; [.1C48.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A, COMBINING DOT BELOW, COMBINING BREVE> 0041 0323 0306 ; [.1C48.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A, COMBINING DOT BELOW, COMBINING BREVE> 0061 0323 0302 ; [.1C49.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER A, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 0041 0323 0302 ; [.1C49.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER A, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 0065 0323 0302 ; [.1CAB.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER E, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 0045 0323 0302 ; [.1CAB.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER E, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 006F 0323 0302 ; [.1DDE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 004F 0323 0302 ; [.1DDE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O, COMBINING DOT BELOW, COMBINING CIRCUMFLEX ACCENT> 006F 0300 031B ; [.1DDF.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER O, COMBINING GRAVE ACCENT, COMBINING HORN> 006F 0340 031B ; [.1DDF.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER O, COMBINING GRAVE TONE MARK, COMBINING HORN> 006F 0309 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER O, COMBINING HOOK ABOVE, COMBINING HORN> 006F 0303 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER O, COMBINING TILDE, COMBINING HORN> 006F 0301 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER O, COMBINING ACUTE ACCENT, COMBINING HORN> 006F 0341 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER O, COMBINING ACUTE TONE MARK, COMBINING HORN> 006F 0323 031B ; [.1DDF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER O, COMBINING DOT BELOW, COMBINING HORN> 004F 0300 031B ; [.1DDF.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER O, COMBINING GRAVE ACCENT, COMBINING HORN> 004F 0340 031B ; [.1DDF.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER O, COMBINING GRAVE TONE MARK, COMBINING HORN> 004F 0309 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER O, COMBINING HOOK ABOVE, COMBINING HORN> 004F 0303 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER O, COMBINING TILDE, COMBINING HORN> 004F 0301 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER O, COMBINING ACUTE ACCENT, COMBINING HORN> 004F 0341 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER O, COMBINING ACUTE TONE MARK, COMBINING HORN> 004F 0323 031B ; [.1DDF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER O, COMBINING DOT BELOW, COMBINING HORN> 0075 0300 031B ; [.1EB6.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER U, COMBINING GRAVE ACCENT, COMBINING HORN> 0075 0340 031B ; [.1EB6.0020.0002][.0000.0025.0002] # <LATIN SMALL LETTER U, COMBINING GRAVE TONE MARK, COMBINING HORN> 0075 0309 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F0.0000] # <LATIN SMALL LETTER U, COMBINING HOOK ABOVE, COMBINING HORN> 0075 0303 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F1.0000] # <LATIN SMALL LETTER U, COMBINING TILDE, COMBINING HORN> 0075 0301 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER U, COMBINING ACUTE ACCENT, COMBINING HORN> 0075 0341 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F2.0000] # <LATIN SMALL LETTER U, COMBINING ACUTE TONE MARK, COMBINING HORN> 0075 0323 031B ; [.1EB6.0020.0002][.0000.0026.0002][.0000.00F3.0000] # <LATIN SMALL LETTER U, COMBINING DOT BELOW, COMBINING HORN> 0055 0300 031B ; [.1EB6.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER U, COMBINING GRAVE ACCENT, COMBINING HORN> 0055 0340 031B ; [.1EB6.0020.0008][.0000.0025.0002] # <LATIN CAPITAL LETTER U, COMBINING GRAVE TONE MARK, COMBINING HORN> 0055 0309 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F0.0000] # <LATIN CAPITAL LETTER U, COMBINING HOOK ABOVE, COMBINING HORN> 0055 0303 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F1.0000] # <LATIN CAPITAL LETTER U, COMBINING TILDE, COMBINING HORN> 0055 0301 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER U, COMBINING ACUTE ACCENT, COMBINING HORN> 0055 0341 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F2.0000] # <LATIN CAPITAL LETTER U, COMBINING ACUTE TONE MARK, COMBINING HORN> 0055 0323 031B ; [.1EB6.0020.0008][.0000.0026.0002][.0000.00F3.0000] # <LATIN CAPITAL LETTER U, COMBINING DOT BELOW, COMBINING HORN> ENTRY }; Unicode/Collate/Locale/sq.pl 0000644 00000007277 15037233324 0011713 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00E7 ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA 0063 0327 ; [.1C8E.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA 00C7 ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA 0043 0327 ; [.1C8E.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA 0064 0068 ; [.1CA9.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER H> 0064 0048 ; [.1CA9.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER H> 0044 0068 ; [.1CA9.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER H> 0044 0048 ; [.1CA9.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER H> 00EB ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS 0065 0308 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS 00CB ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS 0045 0308 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS 0067 006A ; [.1D17.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER J> 0067 004A ; [.1D17.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER J> 0047 006A ; [.1D17.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER J> 0047 004A ; [.1D17.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER J> 006C 006C ; [.1DA9.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L> 006C 004C ; [.1DA9.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L> 004C 006C ; [.1DA9.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L> 004C 004C ; [.1DA9.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L> 006E 006A ; [.1DDC.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER J> 006E 004A ; [.1DDC.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER J> 004E 006A ; [.1DDC.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER J> 004E 004A ; [.1DDC.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER J> 0072 0072 ; [.1E70.0020.0002] # <LATIN SMALL LETTER R, LATIN SMALL LETTER R> 0072 0052 ; [.1E70.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER R, LATIN CAPITAL LETTER R> 0052 0072 ; [.1E70.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER R, LATIN SMALL LETTER R> 0052 0052 ; [.1E70.0020.0008] # <LATIN CAPITAL LETTER R, LATIN CAPITAL LETTER R> 0073 0068 ; [.1E94.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H> 0073 0048 ; [.1E94.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER H> 0053 0068 ; [.1E94.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H> 0053 0048 ; [.1E94.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER H> 0074 0068 ; [.1EB4.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER H> 0074 0048 ; [.1EB4.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER H> 0054 0068 ; [.1EB4.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER H> 0054 0048 ; [.1EB4.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER H> 0078 0068 ; [.1F0A.0020.0002] # <LATIN SMALL LETTER X, LATIN SMALL LETTER H> 0078 0048 ; [.1F0A.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER X, LATIN CAPITAL LETTER H> 0058 0068 ; [.1F0A.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER X, LATIN SMALL LETTER H> 0058 0048 ; [.1F0A.0020.0008] # <LATIN CAPITAL LETTER X, LATIN CAPITAL LETTER H> 007A 0068 ; [.1F3D.0020.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER H> 007A 0048 ; [.1F3D.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER H> 005A 0068 ; [.1F3D.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER H> 005A 0048 ; [.1F3D.0020.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER H> ENTRY }; Unicode/Collate/Locale/dsb.pl 0000644 00000007145 15037233324 0012032 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0107 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0063 0301 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0063 0341 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0106 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0043 0301 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0043 0341 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 011B ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CARON 0065 030C ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CARON 0045 030C ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CARON 0063 0068 ; [.1D19.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0063 0048 ; [.1D19.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H> 0043 0068 ; [.1D19.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1D19.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 0142 ; [.1D76.0020.0002] # LATIN SMALL LETTER L WITH STROKE 006C 0335 ; [.1D76.0020.0002] # LATIN SMALL LETTER L WITH STROKE 0141 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE 004C 0335 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE 0144 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE 0155 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH ACUTE 0072 0301 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH ACUTE 0072 0341 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH ACUTE 0154 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH ACUTE 0052 0301 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH ACUTE 0052 0341 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH ACUTE 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 015B ; [.1E73.0020.0002] # LATIN SMALL LETTER S WITH ACUTE 0073 0301 ; [.1E73.0020.0002] # LATIN SMALL LETTER S WITH ACUTE 0073 0341 ; [.1E73.0020.0002] # LATIN SMALL LETTER S WITH ACUTE 015A ; [.1E73.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE 0053 0301 ; [.1E73.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE 0053 0341 ; [.1E73.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE 017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 017A ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE 007A 0301 ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE 007A 0341 ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE 0179 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE 005A 0301 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE 005A 0341 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE ENTRY }; Unicode/Collate/Locale/gu.pl 0000644 00000000550 15037233324 0011666 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0A82 ; [.2739.0020.0002][.FFF1.0000.0000] # GUJARATI SIGN ANUSVARA 0A81 ; [.2739.0021.0002][.FFF1.0000.0000] # GUJARATI SIGN CANDRABINDU 0A83 ; [.2739.0020.0002][.FFF2.0000.0000] # GUJARATI SIGN VISARGA 0AD0 ; [.2739.0020.0002][.FFF0.0000.0000] # GUJARATI OM ENTRY }; Unicode/Collate/Locale/ln.pl 0000644 00000000746 15037233325 0011674 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 025B ; [.1CAB.0020.0002] # LATIN SMALL LETTER OPEN E 0190 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER OPEN E 2107 ; [.1CAB.0020.000A] # EULER CONSTANT 1D4B ; [.1CAB.0020.0014] # MODIFIER LETTER SMALL OPEN E 0254 ; [.1DDD.0021.0002] # LATIN SMALL LETTER OPEN O 0186 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER OPEN O 1D53 ; [.1DDD.0021.0014] # MODIFIER LETTER SMALL OPEN O ENTRY }; Unicode/Collate/Locale/vo.pl 0000644 00000004023 15037233325 0011677 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00E4 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1C48.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1C48.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ENTRY }; Unicode/Collate/Locale/ee.pl 0000644 00000004773 15037233325 0011660 0 ustar 00 +{ locale_version => 1.25, # d-tail, open-e, f-hook, gamma, eng, open-o, v-hook don't require tailoring entry => <<'ENTRY', # for DUCET v9.0.0 0302 ; [.0000.0029.0002] # COMBINING CIRCUMFLEX ACCENT 00E2 ; [.1C47.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX 00C2 ; [.1C47.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00EA ; [.1CAA.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00EE ; [.1D32.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX 00CE ; [.1D32.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00F4 ; [.1DDD.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1DDD.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00FB ; [.1EB5.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX 00DB ; [.1EB5.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0177 ; [.1F0B.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX 0176 ; [.1F0B.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 0064 007A ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z> 0044 007A ; [.1C90.0020.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z> 0044 005A ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z> 0067 0062 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER B> 0047 0062 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER B> 0047 0042 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER B> 0078 ; [.1D19.0020.0002] # LATIN SMALL LETTER X 0058 ; [.1D19.0020.0008] # LATIN CAPITAL LETTER X 006B 0070 ; [.1D66.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER P> 004B 0070 ; [.1D66.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER P> 004B 0050 ; [.1D66.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER P> 006E 0079 ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y> 004E 0079 ; [.1DBA.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y> 004E 0059 ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y> 0074 0073 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER S> 0054 0073 ; [.1E96.0020.0007] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER S> 0054 0053 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER S> ENTRY }; Unicode/Collate/Locale/fo.pl 0000644 00000012635 15037233325 0011667 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH 00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN 00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE 00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F98.0020.0008] # ANGSTROM SIGN 01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 0061 0061 ; [.1F98.0020.001C][.0000.0000.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A> 0061 0041 ; [.1F98.0020.001C][.0000.0000.0008] # <LATIN SMALL LETTER A, LATIN CAPITAL LETTER A> 0041 0061 ; [.1F98.0020.001D][.0000.0000.0002] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A> 0041 0041 ; [.1F98.0020.001D][.0000.0000.0008] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A> ENTRY }; Unicode/Collate/Locale/da.pl 0000644 00000013060 15037233325 0011640 0 ustar 00 +{ locale_version => 1.25, upper_before_lower => 1, entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH 00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN 00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE 00E5 ; [.1F98.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F98.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F98.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F98.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F98.0020.0008][.0000.0000.0001] # ANGSTROM SIGN 01FB ; [.1F98.0020.0002][.0000.0000.0001][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F98.0020.0008][.0000.0000.0001][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 0061 0061 ; [.1F98.0020.0002][.0000.0000.0007] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A> 0041 0061 ; [.1F98.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER A, LATIN SMALL LETTER A> 0061 0041 ; [.1F98.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER A, LATIN CAPITAL LETTER A> 0041 0041 ; [.1F98.0020.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER A, LATIN CAPITAL LETTER A> ENTRY }; Unicode/Collate/Locale/zh_big5.pl 0000644 00000173455 15037233326 0012623 0 ustar 00 use Unicode::Collate::CJK::Big5; +{ locale_version => 1.25, overrideCJK => \&Unicode::Collate::CJK::Big5::weightBig5, entry => <<'ENTRY', # for DUCET v9.0.0 0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON> 004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON> 1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON> 004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON> 006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT> 006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK> 004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT> 004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK> 006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON> 004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON> 0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON> 00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON> 01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON> 00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON> 01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS F967 ; [.804A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.82DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.81CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 2F801 ; [.8022.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.804D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E F91B ; [.8B74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B F9BA ; [.800F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA F977 ; [.845B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 F9FD ; [.8057.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD F9A8 ; [.80B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 2F804 ; [.81E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804 FA73 ; [.96AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73 F92D ; [.82EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D F9B5 ; [.82ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.846A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.846A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 2F806 ; [.981A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806 F965 ; [.845F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 F9D4 ; [.8607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 2F808 ; [.87B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808 2F809 ; [.89A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 2F80B ; [.8D3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.8D39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.8D34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.8D34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A FA0C ; [.802A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.80B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.81EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.81EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F ; [.82FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F 2F814 ; [.8061.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814 FA72 ; [.8142.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.82FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 F9D1 ; [.8062.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 2F811 ; [.82FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.9045.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F815 ; [.8144.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 2F8D2 ; [.8473.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.87C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F817 ; [.8065.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 2F818 ; [.860A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F81A ; [.80BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A F92E ; [.81EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E F955 ; [.860E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.8EC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 FA15 ; [.A8BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15 2F81D ; [.9524.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F81E ; [.802B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.8068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.8068.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.8146.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C F9DD ; [.81F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.8306.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.8303.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F821 ; [.96CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821 2F822 ; [.89A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 2F823 ; [.8B81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823 F9C7 ; [.8EC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 F98A ; [.8018.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A F99D ; [.814B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D FA76 ; [.847D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.847D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.847E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.847E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.87CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 F92F ; [.89AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.8B85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.8B85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 F97F ; [.916E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F FA77 ; [.802C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.802C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.80C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A ; [.80C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A F963 ; [.80C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.80C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B F9EB ; [.87D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F82C ; [.80C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.8310.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.8310.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E ; [.89AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F ; [.81F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.81FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F831 ; [.8617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.8617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.8617.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 F96B ; [.87D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F836 ; [.8075.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 2F837 ; [.861A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 F906 ; [.80DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.80D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A ; [.80DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A 2F83B ; [.815E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B F9DE ; [.8152.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.81FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.820C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D F980 ; [.8206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.8205.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.832A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F 2F840 ; [.983D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.8490.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F842 ; [.861C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 FA79 ; [.87E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79 2F844 ; [.87E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 2F845 ; [.8AD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.8AD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.89BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.89CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.89CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.89B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.89B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F848 ; [.89CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 2F849 ; [.89BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849 FA0D ; [.A137.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D 2F84A ; [.A146.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A FA7B ; [.A140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B FA37 ; [.8D4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 2F84C ; [.8D4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C FA38 ; [.9052.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.8ED2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F F9A9 ; [.96EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.8D57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F855 ; [.849E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.84A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.9C30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F854 ; [.9C49.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854 2F857 ; [.89D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 2F856 ; [.9A14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856 FA10 ; [.8BA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 FA7C ; [.8BA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C F96C ; [.8B9C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.903E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A 2F858 ; [.A65C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858 FA7D ; [.8ED9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D F94A ; [.9282.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A F942 ; [.932E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 2F85C ; [.960C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C 2F85D ; [.816B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D 2F85E ; [.8D62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E FA7E ; [.833B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.833A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.84A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.833C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.87FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.8034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 2F865 ; [.84AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865 2F862 ; [.8641.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 2F863 ; [.863F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863 FA80 ; [.8803.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F866 ; [.87FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 2F986 ; [.A15F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 2F869 ; [.8EE4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869 FA81 ; [.A8D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81 2F86A ; [.AE41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B ; [.AE41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B FA04 ; [.8179.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 2F86E ; [.A16E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E F95F ; [.8D6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F F9AA ; [.8D6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA 2F86F ; [.8D6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F F9BC ; [.8EE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F875 ; [.803A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875 F9BD ; [.823D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.8811.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 F94B ; [.8D78.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B FA3B ; [.8EE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B F9DF ; [.8EEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF FA3C ; [.952C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C 2F878 ; [.952C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878 2F87A ; [.961C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A F9D5 ; [.881D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 2F87C ; [.9ECC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C F921 ; [.89E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 2F87F ; [.9ECD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F 2F880 ; [.A424.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880 2F9F4 ; [.A8E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4 F9AB ; [.9180.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB 2F881 ; [.82D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F882 ; [.8821.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 2F884 ; [.89EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F885 ; [.9A3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885 2F886 ; [.89EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 2F887 ; [.A67A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887 F98E ; [.8181.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E FA01 ; [.84C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88B ; [.9885.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B 2F88C ; [.9C88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D ; [.8828.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.8BB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.89F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.89F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA82 ; [.A432.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82 FA0B ; [.8D80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B FA83 ; [.A431.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83 F982 ; [.9332.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 2F890 ; [.8044.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890 F943 ; [.8249.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 2F894 ; [.9729.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894 2F895 ; [.9729.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895 2F899 ; [.824C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.882F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 2F89A ; [.8830.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A F9D8 ; [.84D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 F966 ; [.89F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.A189.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F89D ; [.8252.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.8251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.8378.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 F960 ; [.84D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.9746.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC 2F8A0 ; [.9A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 FA3D ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.8675.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A5 ; [.884C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 FA86 ; [.8846.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 F9B9 ; [.89FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 FA88 ; [.8BC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 F9D9 ; [.8BC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 2F8A6 ; [.8BBF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.8BC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.8BC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA87 ; [.8BC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87 2F8A8 ; [.8BC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8 FA3E ; [.8A07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E 2F8AA ; [.A445.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA FA3F ; [.8F07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.8F07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.8F07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB F98F ; [.8F05.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F 2F8AD ; [.8F0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AE ; [.A68D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE 2F8AC ; [.9064.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC 2F8AF ; [.AB1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF FA40 ; [.9333.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 FA8B ; [.9333.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B 2F8B0 ; [.9333.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 F90D ; [.9335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D 2F8B1 ; [.9335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 F990 ; [.94AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 2F8B2 ; [.8189.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3 ; [.884E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3 F9D2 ; [.8F0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.918C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F8B5 ; [.83A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.838C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 F95B ; [.98A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B FA02 ; [.8395.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.8396.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 2F8BA ; [.84E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA F973 ; [.84F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 2F8B9 ; [.8687.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.8686.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 2F8BB ; [.886B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB F9A4 ; [.8869.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 2F8BC ; [.885D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC F975 ; [.8850.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.885B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.9F18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D 2F8C0 ; [.A19C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0 2F8BD ; [.9A60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD FA8E ; [.8BDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E 2F8BF ; [.A1AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF FA8F ; [.8A23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F 2F8C3 ; [.8F0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 2F8C6 ; [.A469.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6 F991 ; [.8F1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 2F8C5 ; [.9F0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 F930 ; [.9074.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930 FA41 ; [.8873.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.8873.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.886E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 2F8C9 ; [.8BE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.8F25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 F9BE ; [.868F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE F983 ; [.8691.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 FA42 ; [.84FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42 F9E0 ; [.83AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 2F8CD ; [.8693.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD FA12 ; [.8A2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.8A2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 F9C5 ; [.8BE7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 FA43 ; [.8A32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.8A32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF FA06 ; [.8F28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 F98B ; [.907D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B F901 ; [.8271.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.869A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.89A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 F929 ; [.869D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.869D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.869D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.8886.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.8886.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 2F8DA ; [.A2D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA F9E1 ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.827D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.8278.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.8279.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB F9C8 ; [.976E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8 2F8E0 ; [.9769.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0 F9F4 ; [.83C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.8519.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 2F8DF ; [.98ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF F9DA ; [.86A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA 2F8E5 ; [.9A80.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5 F97A ; [.8887.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.8896.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.8896.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 F9E2 ; [.8899.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 2F8E6 ; [.9F53.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6 2F8E8 ; [.A1D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8E9 ; [.8DB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9 F914 ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 F95C ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C F9BF ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF F94C ; [.8F32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C 2F8EB ; [.AB36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB F931 ; [.933E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 2F8ED ; [.91A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED F91D ; [.942D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D 2F8EF ; [.8199.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F1 ; [.A93D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 2F8F3 ; [.8C01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 F98C ; [.9093.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C FA95 ; [.8096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95 2F8F4 ; [.A49C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4 F9A5 ; [.91A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5 F970 ; [.889E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 FA96 ; [.889E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 2F8F5 ; [.889E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8FA ; [.81A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA 2F8FE ; [.9667.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE F972 ; [.8285.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.83EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.83DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 2F8FD ; [.979E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD F9E3 ; [.83DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 2F8FF ; [.9ACA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF F915 ; [.8534.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.852E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F907 ; [.98FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907 2F900 ; [.8532.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.852A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.852A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.852A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.86CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.86BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.86C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.86D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.88AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 F94D ; [.88BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D F9D6 ; [.88BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 2F90E ; [.88B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.88B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.8A5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.8A6A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 F9CB ; [.8C16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.8C12.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC 2F90C ; [.8C0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C FA99 ; [.8A75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.8A75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.8C14.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 F94E ; [.8DC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E FA47 ; [.8DC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 FA9A ; [.8DC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A F992 ; [.8DCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 2F90F ; [.8F48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F912 ; [.A6E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 F922 ; [.91B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 F984 ; [.929E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 2F915 ; [.933F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 2F913 ; [.AFA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913 2F917 ; [.B08F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917 2F835 ; [.81A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 2F918 ; [.829E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.83FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.8543.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A F99F ; [.86D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.86D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 F993 ; [.8C20.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 FA48 ; [.8A84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.8A84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C 2F91E ; [.A719.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E F9C0 ; [.90AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 F9EE ; [.90A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE F932 ; [.93D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 F91E ; [.9431.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F920 ; [.951C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 FA9E ; [.91C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.91C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 F946 ; [.82A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 2F924 ; [.8A88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 2F925 ; [.A4DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925 FA9F ; [.810B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F F9FA ; [.8401.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA F92B ; [.86DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B F9A7 ; [.92A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 2F928 ; [.934B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 F961 ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F929 ; [.80A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 2F92B ; [.840A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B F9AD ; [.8551.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.86E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.88D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.86E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.8A90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92F ; [.8C3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F F9AE ; [.8F5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE FAA1 ; [.A4E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1 2F930 ; [.A4E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930 2F931 ; [.A72F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931 F994 ; [.A72A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994 F9EF ; [.90B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF 2F932 ; [.934D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 2F936 ; [.97C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936 F9CD ; [.86EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.88E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.88E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.88E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 F9E5 ; [.8A9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.A26E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A FAA4 ; [.A739.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4 FAA5 ; [.8F63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 F9C1 ; [.91CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 F90E ; [.9435.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E FA17 ; [.86F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.86F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7 ; [.88EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 F933 ; [.90BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 FAA8 ; [.8412.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.8412.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.8568.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F946 ; [.86FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946 2F947 ; [.86FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947 FAA9 ; [.9FEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9 2F948 ; [.9FEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948 2F94A ; [.8F6F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A FA9D ; [.91D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D 2F94E ; [.88F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E F9CE ; [.88F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.8C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.8C59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.8C5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.8F73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 FAAB ; [.A74A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB 2F950 ; [.A74A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950 F964 ; [.AB7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964 F985 ; [.93DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 FA4C ; [.8415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C FA4E ; [.8577.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.8576.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA4F ; [.870D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.8712.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 FA19 ; [.8711.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.88F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A F93C ; [.8C60.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C FA52 ; [.8DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 FA53 ; [.8DFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 FA1B ; [.8DFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.8DFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 F9B6 ; [.92B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 2F957 ; [.9B31.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 F956 ; [.8C64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 FA54 ; [.8F7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 2F959 ; [.8F7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 2F95A ; [.A517.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A FA55 ; [.857F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 FAAC ; [.A9B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC F9F7 ; [.8123.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 2F95F ; [.A51F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F F9F8 ; [.88FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 FA56 ; [.8C6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 FAAD ; [.8C6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD 2F962 ; [.8F84.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 2F963 ; [.90CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 F9A6 ; [.9358.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 F944 ; [.9486.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 F9F9 ; [.8906.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.8E10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D 2F966 ; [.A9C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966 FA03 ; [.90D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 F97B ; [.92C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B 2F968 ; [.ABA1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968 2F96A ; [.8585.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A F9CF ; [.8729.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF F96A ; [.8727.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.8913.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F FAAF ; [.8C79.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF 2F96C ; [.A019.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C F93D ; [.8E16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D F957 ; [.8E15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 2F96E ; [.8E22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E F996 ; [.8F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 FA57 ; [.8F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 FAB0 ; [.8F8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 FA58 ; [.90DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 F950 ; [.91EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 FA59 ; [.91F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 2F970 ; [.91F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970 FAB1 ; [.A028.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1 FA5A ; [.8C7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.90DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 2F976 ; [.A9DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976 F90F ; [.9363.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F 2F978 ; [.9DAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978 F9AF ; [.8919.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.81B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E F934 ; [.81B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 FA5B ; [.8421.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.8421.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.8421.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A F9B0 ; [.891F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 F997 ; [.9202.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.9201.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.9488.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 F953 ; [.81B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.97E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.82B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F985 ; [.8ADE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 F926 ; [.9368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 F9F6 ; [.920D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 FA5C ; [.874A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F893 ; [.9B73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.9B73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C ; [.A042.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C F97C ; [.82BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C 2F990 ; [.82BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F98F ; [.9698.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F 2F991 ; [.8430.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.8436.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.842F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.8433.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.85A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.85A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.85A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 F9FE ; [.875F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.8754.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F9A0 ; [.9B92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0 2F99D ; [.8932.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D F93E ; [.A062.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E 2F9A1 ; [.8AF6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.8AF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 2F99E ; [.A04E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E FAB4 ; [.8AEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 F958 ; [.8AED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.8C93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 F96E ; [.8C98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E FA5F ; [.8AEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.8AEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F F999 ; [.8FA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 2F9A8 ; [.A2E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 2F9A9 ; [.A7A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9 F9C2 ; [.A7AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 2F9AA ; [.A7AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA 2F9AC ; [.A9FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC F923 ; [.92D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 F9F0 ; [.93F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 F935 ; [.93F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 F91F ; [.943C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F F910 ; [.94BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 2F9B3 ; [.85B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 F936 ; [.8CA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 2F9B4 ; [.8CA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5 ; [.921B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B6 ; [.AD63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6 2F9B7 ; [.876A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 2F9BA ; [.A07B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA 2F9B9 ; [.A327.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9 2F9BC ; [.A587.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC 2F9BD ; [.A588.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD FAB5 ; [.AA1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5 2F9BB ; [.AA1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB F911 ; [.9223.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 2F9C0 ; [.A7C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0 2F9C1 ; [.AD77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1 F927 ; [.9441.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927 FA08 ; [.81C7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F9C4 ; [.81C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 F9A0 ; [.8B09.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 2F9C6 ; [.A08D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6 2F9C7 ; [.A331.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7 F9E8 ; [.8CB7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 F912 ; [.8E56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 2F9C9 ; [.A5A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9 FA60 ; [.8FC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.AC06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 F924 ; [.93F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 FAB7 ; [.92DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 FA0A ; [.82BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A FA61 ; [.8B0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 FAB8 ; [.8B0C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2F9CF ; [.8CC6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF F96F ; [.8E63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F F9A1 ; [.8E63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1 FAB9 ; [.8FD1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 FABB ; [.8FCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB F97D ; [.8FC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D F941 ; [.8FD3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 FABE ; [.910F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE 2F9D0 ; [.910F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 FA22 ; [.8FCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 FABA ; [.8FCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA F95D ; [.910B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D FABD ; [.910B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD FA62 ; [.910C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 FABC ; [.910C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC FA63 ; [.92E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 FABF ; [.92E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF F9FC ; [.937B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC F95A ; [.948E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A FAC0 ; [.94C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 2F9D1 ; [.94C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 F900 ; [.877F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 2F9D2 ; [.82C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D4 ; [.8961.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.8B21.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.8CDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 F903 ; [.8CD6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.8E6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 FA65 ; [.9382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 FAC1 ; [.9382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 2F9D6 ; [.94E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 2F9D7 ; [.8784.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9DB ; [.9E2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DA ; [.8B2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.8CDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 2F9DC ; [.A362.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC F902 ; [.82C9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 2F9DE ; [.8787.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE F998 ; [.8FF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 F9D7 ; [.8FF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 FAC2 ; [.911F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 2F9DF ; [.911F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF FA07 ; [.911D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 F98D ; [.B17B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D F971 ; [.82CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 F99A ; [.896F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.8B3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.8B3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 FAC3 ; [.9126.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.9127.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.94C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 2F9E2 ; [.95D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2 F92C ; [.85D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C 2F9E3 ; [.99C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3 FA26 ; [.897D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 2F9E4 ; [.A380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4 2F9E6 ; [.A5E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6 F919 ; [.8CFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 FAC4 ; [.AC37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4 F9B7 ; [.9406.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 F9E9 ; [.82D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.8B44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.844C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A F9B1 ; [.8D0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9E7 ; [.8D03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 FAC5 ; [.A5E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5 2F9EA ; [.8E92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA 2F9E8 ; [.A850.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 2F9E9 ; [.A84E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9 F93F ; [.9133.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F F99B ; [.9255.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B 2F9EB ; [.AF08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB 2F9EC ; [.B00B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC 2F9EE ; [.8B50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE F986 ; [.9016.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 2F9F0 ; [.AC62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0 F9C6 ; [.82DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.85DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.85DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.8988.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 F9D3 ; [.898A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 FAC6 ; [.9E5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6 F9DC ; [.8B5A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9B8 ; [.9265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 2F9F3 ; [.A10C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3 F9EA ; [.9304.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.93A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.93A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 F9B2 ; [.8D1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.8D1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 2F9F5 ; [.ADDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 F938 ; [.9459.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 F9B3 ; [.94E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 FA1C ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.8D1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 FA69 ; [.945A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 FACA ; [.945A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA F9B4 ; [.8EA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 2FA00 ; [.A87A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00 FA6A ; [.914C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A FACC ; [.914C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC F9D0 ; [.93A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2FA02 ; [.87AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.8B6B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.8D27.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C ; [.9152.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C 2FA04 ; [.AAB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04 2FA05 ; [.AF33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05 2FA06 ; [.A624.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06 F91A ; [.9159.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A 2FA07 ; [.AC8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07 F987 ; [.951D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 FACD ; [.B044.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD 2FA0A ; [.B044.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A F939 ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 2FA0B ; [.B04C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B F9F2 ; [.94D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 2FA0C ; [.A8A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C 2FA0F ; [.ACA6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F FA2D ; [.9468.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D F93A ; [.94F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.9520.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 F940 ; [.899A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 F988 ; [.93BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 F9F3 ; [.94D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FA15 ; [.899C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 F989 ; [.903D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 2FA17 ; [.A116.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17 2FA1A ; [.A8B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A 2FA1B ; [.AE29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B 2FA1C ; [.8EB5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C FAD8 ; [.B230.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8 F9C4 ; [.9168.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 F907 ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.9169.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE ENTRY }; Unicode/Collate/Locale/om.pl 0000644 00000002616 15037233326 0011675 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0063 0068 ; [.1F22.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0043 0068 ; [.1F22.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1F22.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 0064 0068 ; [.1F23.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER H> 0044 0068 ; [.1F23.0020.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER H> 0044 0048 ; [.1F23.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER H> 006B 0068 ; [.1F24.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER H> 004B 0068 ; [.1F24.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER H> 004B 0048 ; [.1F24.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER H> 006E 0079 ; [.1F25.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y> 004E 0079 ; [.1F25.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y> 004E 0059 ; [.1F25.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y> 0070 0068 ; [.1F26.0020.0002] # <LATIN SMALL LETTER P, LATIN SMALL LETTER H> 0050 0068 ; [.1F26.0020.0007] # <LATIN CAPITAL LETTER P, LATIN SMALL LETTER H> 0050 0048 ; [.1F26.0020.0008] # <LATIN CAPITAL LETTER P, LATIN CAPITAL LETTER H> 0073 0068 ; [.1F27.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H> 0053 0068 ; [.1F27.0020.0007] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H> ENTRY }; Unicode/Collate/Locale/hu.pl 0000644 00000041711 15037233326 0011675 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0063 0073 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER S> 0063 0053 ; [.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER S> 0043 0073 ; [.1C7B.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER S> 0043 0053 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER S> 0064 007A ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z> 0064 005A ; [.1C90.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z> 0044 007A ; [.1C90.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z> 0044 005A ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z> 0064 007A 0073 ; [.1C91.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 0064 007A 0053 ; [.1C91.0020.0007][.0000.0000.0002][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 0064 005A 0073 ; [.1C91.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 0064 005A 0053 ; [.1C91.0020.0007][.0000.0000.0002][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 0044 007A 0073 ; [.1C91.0020.0007][.0000.0000.0008][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 0044 007A 0053 ; [.1C91.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 0044 005A 0073 ; [.1C91.0020.0007][.0000.0000.0008][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 0044 005A 0053 ; [.1C91.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 0067 0079 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER Y> 0067 0059 ; [.1CF5.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER Y> 0047 0079 ; [.1CF5.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER Y> 0047 0059 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER Y> 006C 0079 ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER Y> 006C 0059 ; [.1D78.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER Y> 004C 0079 ; [.1D78.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER Y> 004C 0059 ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER Y> 006E 0079 ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y> 006E 0059 ; [.1DBA.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER Y> 004E 0079 ; [.1DBA.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y> 004E 0059 ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y> 0073 007A ; [.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER Z> 0073 005A ; [.1E72.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER Z> 0053 007A ; [.1E72.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER Z> 0053 005A ; [.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER Z> 0074 0079 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER Y> 0074 0059 ; [.1E96.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER Y> 0054 0079 ; [.1E96.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER Y> 0054 0059 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER Y> 007A 0073 ; [.1F22.0020.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 007A 0053 ; [.1F22.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 005A 0073 ; [.1F22.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 005A 0053 ; [.1F22.0020.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1DDE.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1DDE.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1DDE.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1DDE.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1EB6.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1EB6.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1EB6.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1EB6.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0063 0063 0073 ; [.1C7B.0020.0002][.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER C, LATIN SMALL LETTER S> 0063 0063 0053 ; [.1C7B.0020.0002][.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER C, LATIN CAPITAL LETTER S> 0063 0043 0073 ; [.1C7B.0020.0002][.1C7B.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, LATIN SMALL LETTER S> 0063 0043 0053 ; [.1C7B.0020.0002][.1C7B.0020.0008] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER S> 0043 0063 0073 ; [.1C7B.0020.0008][.1C7B.0020.0002] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER C, LATIN SMALL LETTER S> 0043 0063 0053 ; [.1C7B.0020.0008][.1C7B.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER C, LATIN CAPITAL LETTER S> 0043 0043 0073 ; [.1C7B.0020.0008][.1C7B.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER C, LATIN SMALL LETTER S> 0043 0043 0053 ; [.1C7B.0020.0008][.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER S> 0064 0064 007A ; [.1C90.0020.0002][.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z> 0064 0064 005A ; [.1C90.0020.0002][.1C90.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z> 0064 0044 007A ; [.1C90.0020.0002][.1C90.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z> 0064 0044 005A ; [.1C90.0020.0002][.1C90.0020.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z> 0044 0064 007A ; [.1C90.0020.0008][.1C90.0020.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z> 0044 0064 005A ; [.1C90.0020.0008][.1C90.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z> 0044 0044 007A ; [.1C90.0020.0008][.1C90.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z> 0044 0044 005A ; [.1C90.0020.0008][.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z> 0064 0064 007A 0073 ; [.1C91.0020.0002][.1C91.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 0064 0064 007A 0053 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 0064 0064 005A 0073 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 0064 0064 005A 0053 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 0064 0044 007A 0073 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0002] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 0064 0044 007A 0053 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 0064 0044 005A 0073 ; [.1C91.0020.0002][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 0064 0044 005A 0053 ; [.1C91.0020.0002][.1C91.0020.0008] # <LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 0044 0064 007A 0073 ; [.1C91.0020.0008][.1C91.0020.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 0044 0064 007A 0053 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 0044 0064 005A 0073 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 0044 0064 005A 0053 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0002][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 0044 0044 007A 0073 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0002] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 0044 0044 007A 0053 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 0044 0044 005A 0073 ; [.1C91.0020.0008][.1C91.0020.0007][.0000.0000.0008][.0000.0000.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 0044 0044 005A 0053 ; [.1C91.0020.0008][.1C91.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 0067 0067 0079 ; [.1CF5.0020.0002][.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER G, LATIN SMALL LETTER Y> 0067 0067 0059 ; [.1CF5.0020.0002][.1CF5.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER G, LATIN CAPITAL LETTER Y> 0067 0047 0079 ; [.1CF5.0020.0002][.1CF5.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, LATIN SMALL LETTER Y> 0067 0047 0059 ; [.1CF5.0020.0002][.1CF5.0020.0008] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER Y> 0047 0067 0079 ; [.1CF5.0020.0008][.1CF5.0020.0002] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER G, LATIN SMALL LETTER Y> 0047 0067 0059 ; [.1CF5.0020.0008][.1CF5.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER G, LATIN CAPITAL LETTER Y> 0047 0047 0079 ; [.1CF5.0020.0008][.1CF5.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER G, LATIN SMALL LETTER Y> 0047 0047 0059 ; [.1CF5.0020.0008][.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER Y> 006C 006C 0079 ; [.1D78.0020.0002][.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L, LATIN SMALL LETTER Y> 006C 006C 0059 ; [.1D78.0020.0002][.1D78.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L, LATIN CAPITAL LETTER Y> 006C 004C 0079 ; [.1D78.0020.0002][.1D78.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, LATIN SMALL LETTER Y> 006C 004C 0059 ; [.1D78.0020.0002][.1D78.0020.0008] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER Y> 004C 006C 0079 ; [.1D78.0020.0008][.1D78.0020.0002] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L, LATIN SMALL LETTER Y> 004C 006C 0059 ; [.1D78.0020.0008][.1D78.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L, LATIN CAPITAL LETTER Y> 004C 004C 0079 ; [.1D78.0020.0008][.1D78.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L, LATIN SMALL LETTER Y> 004C 004C 0059 ; [.1D78.0020.0008][.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER Y> 006E 006E 0079 ; [.1DBA.0020.0002][.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER N, LATIN SMALL LETTER Y> 006E 006E 0059 ; [.1DBA.0020.0002][.1DBA.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER N, LATIN CAPITAL LETTER Y> 006E 004E 0079 ; [.1DBA.0020.0002][.1DBA.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y> 006E 004E 0059 ; [.1DBA.0020.0002][.1DBA.0020.0008] # <LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y> 004E 006E 0079 ; [.1DBA.0020.0008][.1DBA.0020.0002] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER N, LATIN SMALL LETTER Y> 004E 006E 0059 ; [.1DBA.0020.0008][.1DBA.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER N, LATIN CAPITAL LETTER Y> 004E 004E 0079 ; [.1DBA.0020.0008][.1DBA.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y> 004E 004E 0059 ; [.1DBA.0020.0008][.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y> 0073 0073 007A ; [.1E72.0020.0002][.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER S, LATIN SMALL LETTER Z> 0073 0073 005A ; [.1E72.0020.0002][.1E72.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER S, LATIN CAPITAL LETTER Z> 0073 0053 007A ; [.1E72.0020.0002][.1E72.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, LATIN SMALL LETTER Z> 0073 0053 005A ; [.1E72.0020.0002][.1E72.0020.0008] # <LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER Z> 0053 0073 007A ; [.1E72.0020.0008][.1E72.0020.0002] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER S, LATIN SMALL LETTER Z> 0053 0073 005A ; [.1E72.0020.0008][.1E72.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER S, LATIN CAPITAL LETTER Z> 0053 0053 007A ; [.1E72.0020.0008][.1E72.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER S, LATIN SMALL LETTER Z> 0053 0053 005A ; [.1E72.0020.0008][.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER Z> 0074 0074 0079 ; [.1E96.0020.0002][.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER T, LATIN SMALL LETTER Y> 0074 0074 0059 ; [.1E96.0020.0002][.1E96.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER T, LATIN CAPITAL LETTER Y> 0074 0054 0079 ; [.1E96.0020.0002][.1E96.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, LATIN SMALL LETTER Y> 0074 0054 0059 ; [.1E96.0020.0002][.1E96.0020.0008] # <LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER Y> 0054 0074 0079 ; [.1E96.0020.0008][.1E96.0020.0002] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER T, LATIN SMALL LETTER Y> 0054 0074 0059 ; [.1E96.0020.0008][.1E96.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER T, LATIN CAPITAL LETTER Y> 0054 0054 0079 ; [.1E96.0020.0008][.1E96.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER T, LATIN SMALL LETTER Y> 0054 0054 0059 ; [.1E96.0020.0008][.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER Y> 007A 007A 0073 ; [.1F22.0020.0002][.1F22.0020.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 007A 007A 0053 ; [.1F22.0020.0002][.1F22.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER Z, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 007A 005A 0073 ; [.1F22.0020.0002][.1F22.0020.0007][.0000.0000.0008] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 007A 005A 0053 ; [.1F22.0020.0002][.1F22.0020.0008] # <LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> 005A 007A 0073 ; [.1F22.0020.0008][.1F22.0020.0002] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER Z, LATIN SMALL LETTER S> 005A 007A 0053 ; [.1F22.0020.0008][.1F22.0020.0007][.0000.0000.0002] # <LATIN CAPITAL LETTER Z, LATIN SMALL LETTER Z, LATIN CAPITAL LETTER S> 005A 005A 0073 ; [.1F22.0020.0008][.1F22.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER Z, LATIN SMALL LETTER S> 005A 005A 0053 ; [.1F22.0020.0008][.1F22.0020.0008] # <LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER Z, LATIN CAPITAL LETTER S> ENTRY }; Unicode/Collate/Locale/lkt.pl 0000644 00000002545 15037233326 0012055 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 01E7 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CARON 0067 030C ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH CARON 01E6 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CARON 0047 030C ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH CARON 021F ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CARON 0068 030C ; [.1D19.0020.0002] # LATIN SMALL LETTER H WITH CARON 021E ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CARON 0048 030C ; [.1D19.0020.0008] # LATIN CAPITAL LETTER H WITH CARON 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; Unicode/Collate/Locale/kl.pl 0000644 00000012231 15037233326 0011662 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C8F.0022.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C8F.0022.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C8F.0022.0008] # LATIN CAPITAL LETTER ETH 0138 ; [.1E21.0021.0002] # LATIN SMALL LETTER KRA 004B 0027 ; [.1E21.0021.0008] # <LATIN CAPITAL LETTER K, APOSTROPHE> 00FE ; [.1E95.0020.0003][.1D18.0020.0003] # LATIN SMALL LETTER THORN 00DE ; [.1E95.0020.0009][.1D18.0020.0009] # LATIN CAPITAL LETTER THORN 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0171 ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0075 030B ; [.1F0B.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0055 030B ; [.1F0B.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 0119 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1F96.0022.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1F96.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK 00F8 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F97.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 00F6 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 006F 030B ; [.1F97.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 004F 030B ; [.1F97.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 0153 ; [.1F97.0023.0002] # LATIN SMALL LIGATURE OE 0152 ; [.1F97.0023.0008] # LATIN CAPITAL LIGATURE OE 00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F98.0020.0008] # ANGSTROM SIGN 01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ENTRY }; Unicode/Collate/Locale/hi.pl 0000644 00000000560 15037233326 0011656 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA 0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU 0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA 0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM ENTRY }; Unicode/Collate/Locale/sk.pl 0000644 00000006211 15037233326 0011672 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00E4 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1C48.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1C48.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0063 0068 ; [.1D19.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0063 0048 ; [.1D19.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H> 0043 0068 ; [.1D19.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1D19.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED1 ; [.1DDE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1DDE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED7 ; [.1DDE.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1DDE.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1DDE.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1DDE.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED9 ; [.1DDE.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1DDE.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 0159 ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON 0072 030C ; [.1E34.0020.0002] # LATIN SMALL LETTER R WITH CARON 0158 ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON 0052 030C ; [.1E34.0020.0008] # LATIN CAPITAL LETTER R WITH CARON 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; Unicode/Collate/Locale/hr.pl 0000644 00000006305 15037233326 0011672 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0107 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0063 0301 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0063 0341 ; [.1C7C.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0106 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0043 0301 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0043 0341 ; [.1C7C.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0064 017E ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z WITH CARON> 01C6 ; [.1C90.0020.0003] # LATIN SMALL LETTER DZ WITH CARON 0044 017E ; [.1C90.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z WITH CARON> 01C5 ; [.1C90.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON 0044 017D ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z WITH CARON> 01C4 ; [.1C90.0020.0009] # LATIN CAPITAL LETTER DZ WITH CARON 0064 007A 030C ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z, COMBINING CARON> 0044 007A 030C ; [.1C90.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z, COMBINING CARON> 0044 005A 030C ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z, COMBINING CARON> 0111 ; [.1C91.0020.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C91.0020.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C91.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C91.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE 006C 006A ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER J> 01C9 ; [.1D78.0020.0003] # LATIN SMALL LETTER LJ 004C 006A ; [.1D78.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER J> 01C8 ; [.1D78.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER L WITH SMALL LETTER J 004C 004A ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER J> 01C7 ; [.1D78.0020.0009] # LATIN CAPITAL LETTER LJ 006E 006A ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER J> 01CC ; [.1DBA.0020.0003] # LATIN SMALL LETTER NJ 004E 006A ; [.1DBA.0020.0007][.0000.0000.0001] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER J> 01CB ; [.1DBA.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER N WITH SMALL LETTER J 004E 004A ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER J> 01CA ; [.1DBA.0020.0009] # LATIN CAPITAL LETTER NJ 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; Unicode/Collate/Locale/ml.pl 0000644 00000003152 15037233326 0011666 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0D3D ; [.0000.00C6.0002] # MALAYALAM SIGN AVAGRAHA 0D57 ; [.28CD.0020.0002] # MALAYALAM AU LENGTH MARK 0D4C ; [.28CD.0020.0003] # MALAYALAM VOWEL SIGN AU 0D46 0D57 ; [.28CD.0020.0003] # MALAYALAM VOWEL SIGN AU 0D15 0D4D 200D ; [.2898.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER KA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER> 0D7F ; [.2898.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU K 0D23 0D4D 200D ; [.28A6.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER NNA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER> 0D7A ; [.28A6.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU NN 0D28 0D4D 200D ; [.28AB.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER NA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER> 0D7B ; [.28AB.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU N 0D30 0D4D 200D ; [.28B3.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER RA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER> 0D7C ; [.28B3.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU RR 0D32 0D4D 200D ; [.28B4.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER LA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER> 0D7D ; [.28B4.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU L 0D33 0D4D 200D ; [.28BA.0020.0002][.28CF.0021.0002] # <MALAYALAM LETTER LLA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER> 0D7E ; [.28BA.0020.0003][.28CF.0021.0002] # MALAYALAM LETTER CHILLU LL 0D02 ; [.28B1.0020.0002][.28CF.0021.0002] # MALAYALAM SIGN ANUSVARA 0D7B 0D4D ; [.28AB.0020.0002][.28CF.0020.0003] # <MALAYALAM LETTER CHILLU N, MALAYALAM SIGN VIRAMA> ENTRY }; Unicode/Collate/Locale/si.pl 0000644 00000000670 15037233326 0011673 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0D82 ; [.28E1.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA 0D83 ; [.28E1.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA 0D96 ; [.28E1.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA 0DA5 ; [.28EC.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA 0DA4 ; [.28ED.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA ENTRY }; Unicode/Collate/Locale/zh_gb.pl 0000644 00000122571 15037233326 0012356 0 ustar 00 use Unicode::Collate::CJK::GB2312; +{ locale_version => 1.25, overrideCJK => \&Unicode::Collate::CJK::GB2312::weightGB2312, entry => <<'ENTRY', # for DUCET v9.0.0 0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON> 004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON> 1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON> 004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON> 006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT> 006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK> 004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT> 004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK> 006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON> 004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON> 0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON> 00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON> 01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON> 00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON> 01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS E2D8 ; [.8EAB.0020.0002] # <unknown> E2D9 ; [.8EAC.0020.0002] # <unknown> E2DA ; [.8EAD.0020.0002] # <unknown> E2DB ; [.8EAE.0020.0002] # <unknown> E2DC ; [.8EAF.0020.0002] # <unknown> F967 ; [.80D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 F905 ; [.8185.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 2F801 ; [.8AED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.81D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E 2F800 ; [.8635.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800 F9BA ; [.8668.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA F977 ; [.865E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 F9FD ; [.899D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD F9A8 ; [.868B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 2F804 ; [.879A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804 F9B5 ; [.863C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.8B4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.8B4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 F965 ; [.80A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 2F80B ; [.8BB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.8662.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.893B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.893B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A FA0C ; [.8EB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.815D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.873B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.873B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F ; [.8AC8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F FA72 ; [.88DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 F9D1 ; [.8696.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 2F811 ; [.8562.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.8484.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F815 ; [.8D70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 2F8D2 ; [.8709.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.873A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F817 ; [.890E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 2F818 ; [.8D40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F81A ; [.823F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A FA71 ; [.85D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71 2F81B ; [.85D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B F92E ; [.8623.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E F979 ; [.8656.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 F955 ; [.8685.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 2F81D ; [.8FF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F81E ; [.88FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.88A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.88A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.866D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C F9DD ; [.863A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.81A3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.85AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F822 ; [.833D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 F98A ; [.8643.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A F99D ; [.8670.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D 2F992 ; [.860C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992 FA76 ; [.8CFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.8CFB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.873C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.873C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.8614.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 FA34 ; [.88AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.88AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 FA77 ; [.8964.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.8964.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.805B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A ; [.81A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A F963 ; [.806E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.806E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B F9EB ; [.879B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F82C ; [.8445.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.806D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.806D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E ; [.80C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F ; [.847B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.86CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F831 ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.88B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 2F836 ; [.8477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 2F837 ; [.8FEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 F906 ; [.8567.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.84F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A ; [.9154.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A 2F83B ; [.915B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B F9DE ; [.8633.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.867C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.8B5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D 2F83E ; [.8143.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.8E2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F F99E ; [.8C47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F842 ; [.8A6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 FA79 ; [.919C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79 2F845 ; [.8953.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.8953.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.85ED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.91B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.91B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.83D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.83D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F849 ; [.8D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849 FA38 ; [.886A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 F9A9 ; [.91F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F855 ; [.8BEC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.8140.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.9023.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F854 ; [.9029.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854 F96C ; [.892A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.8762.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A 2F851 ; [.8E64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851 2F85D ; [.8273.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D FA7E ; [.8C56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.8785.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.8868.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.8079.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.896A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.87C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 2F865 ; [.93E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865 2F862 ; [.846E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 FA80 ; [.93F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F986 ; [.95FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 FA04 ; [.8DA1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 F9BC ; [.9391.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F872 ; [.89C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872 2F873 ; [.84D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873 2F875 ; [.910F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875 F9BD ; [.87A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.8AC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 F9DF ; [.86BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF FA3C ; [.93CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C 2F878 ; [.93CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878 2F87A ; [.9206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A 2F87F ; [.922E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F 2F881 ; [.8C2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F882 ; [.812B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 2F884 ; [.8F50.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F886 ; [.870A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 F98E ; [.87A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E FA01 ; [.825B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88C ; [.9293.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D ; [.89E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.864B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.8607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.8607.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA82 ; [.9295.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82 FA0B ; [.85E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B 2F890 ; [.9106.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890 F943 ; [.87BF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 2F874 ; [.81E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874 2F899 ; [.8BED.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.80E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 F9D8 ; [.86C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 FA85 ; [.9243.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F89D ; [.88FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.8E11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.87A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 F960 ; [.87C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.864C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC FA3D ; [.8443.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.8443.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 FA86 ; [.92C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 FA88 ; [.8D33.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 2F8A6 ; [.819F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.842E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.842E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA87 ; [.8984.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87 2F8A8 ; [.8984.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8 FA3E ; [.858F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E FA3F ; [.8D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.8D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.8D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB 2F8B2 ; [.8142.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3 ; [.9554.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3 F9D2 ; [.86B9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.81CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F8B5 ; [.8064.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.85EC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 FA02 ; [.8ADD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.802D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 2F8BA ; [.8827.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA F973 ; [.899B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 2F8B9 ; [.8AF1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.856B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 F9A4 ; [.87A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 F975 ; [.86CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.8C57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.9130.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D FA8E ; [.8A1A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E FA8F ; [.9133.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F 2F8C3 ; [.875D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 FA41 ; [.874D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.874D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.801C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 2F8C9 ; [.8537.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F9BE ; [.866C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE F983 ; [.86BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 FA42 ; [.848F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42 F9E0 ; [.8CB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 FA12 ; [.88B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.88B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 FA43 ; [.89D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.89D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF FA06 ; [.8066.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 F901 ; [.834B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8D4 ; [.8E9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 F929 ; [.8609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.8609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.8609.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.8B00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.8B00.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 F9E1 ; [.862D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.94AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.8DBD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.94AC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB F9F4 ; [.8673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.8695.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 F9DA ; [.8634.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA F97A ; [.8657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.8710.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 F9E2 ; [.8625.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 2F8E8 ; [.94F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8EF ; [.81A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF FA95 ; [.81CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95 F972 ; [.897F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.8C55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.8733.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 F9E3 ; [.8797.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 F915 ; [.86E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.8247.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F900 ; [.87DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.8694.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.8694.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.8694.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.83D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.860A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.83AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.83AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.8523.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.87B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.8679.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 2F90E ; [.8C4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.9335.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.832A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.9345.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 F9CB ; [.868C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.879E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC 2F90C ; [.8216.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C FA99 ; [.8E7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.8E7D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.8415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 F94E ; [.86A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E 2F90F ; [.812A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F915 ; [.9382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 2F913 ; [.9383.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913 2F835 ; [.843B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 F9FB ; [.8E1E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.8A66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A F99F ; [.866F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.8612.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 2F91C ; [.9638.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C FA48 ; [.8E46.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.8E46.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C F9C0 ; [.8664.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 2F920 ; [.9647.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 FA9E ; [.8577.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.8577.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 F946 ; [.860D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 2F924 ; [.8B6D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 FA9F ; [.82A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F F92B ; [.8606.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B FA16 ; [.8E40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 FAA0 ; [.8E40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 F961 ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.86C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F929 ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 F9AD ; [.867E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.9484.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.862C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.868D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.8E72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92F ; [.9493.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F FAA3 ; [.8416.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3 2F936 ; [.946F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936 F9CD ; [.8691.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.86CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 F9E5 ; [.863E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.97D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A FAA5 ; [.8B24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 FA17 ; [.8CC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.8CC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7 ; [.898D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 FAA8 ; [.8E04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.8E04.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.898C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F946 ; [.8DDB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946 2F947 ; [.8DDB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947 FAAA ; [.8E76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA FA9D ; [.8897.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D 2F94E ; [.968F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E F9CE ; [.868F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.86B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.86B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.806B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.8619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 FA18 ; [.8630.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18 FA4C ; [.8974.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C FA4E ; [.8860.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.9654.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA50 ; [.8E97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.8E97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.8E54.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 FA19 ; [.897E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.8BAA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A FA1B ; [.82F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.82F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 2F957 ; [.9779.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 FA55 ; [.8AC0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 F9F7 ; [.863F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 F9F8 ; [.98CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 2F962 ; [.8E5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 FAAE ; [.861F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE F9F9 ; [.8640.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.852E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D FA03 ; [.8A6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 2F968 ; [.9934.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968 F96A ; [.8A40.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.861A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F FA59 ; [.82A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 FA5A ; [.89DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.96E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 F9AF ; [.8684.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.8D29.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E F934 ; [.860E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 FA5B ; [.8DD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.8DD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.8DD4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A F9B0 ; [.9833.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 F953 ; [.861E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.95D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.8D36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F985 ; [.8815.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 FA5C ; [.816D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F893 ; [.98FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.98FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C ; [.9901.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C F97C ; [.8659.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C FA5D ; [.903A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D FA5E ; [.903A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E 2F990 ; [.8D2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F98F ; [.9042.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F 2F991 ; [.8DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.8411.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.82AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.8C3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.8923.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.8923.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.85C1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 F9FE ; [.8103.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.842D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F99A ; [.8908.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A 2F99D ; [.8700.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D 2F9A1 ; [.8558.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.857D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.80E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 F958 ; [.867F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.86DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 FA5F ; [.8E4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.8E4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F F9C2 ; [.90E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 2F9AC ; [.90EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC 2F9B3 ; [.87C5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 2F9B7 ; [.985A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 F911 ; [.86D8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 FA08 ; [.8BEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F9C4 ; [.8C9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 F9A0 ; [.866E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 F912 ; [.86DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 FA60 ; [.83E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.981C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 FAB7 ; [.8301.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 2F9D2 ; [.996E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D7 ; [.8863.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9DB ; [.9977.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DA ; [.802E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.86B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 2F98D ; [.819E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D F971 ; [.8136.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 FA66 ; [.9396.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66 FA25 ; [.8CB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.8CB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 F92C ; [.8608.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C FA26 ; [.824F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 F919 ; [.8611.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 F9B7 ; [.996C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 F9E9 ; [.862E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.865C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.8515.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A F9C6 ; [.891D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.86A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.84DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.8687.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 F9DC ; [.869C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9B2 ; [.8680.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.8616.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 F938 ; [.86B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 FA1C ; [.853B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.853B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 F940 ; [.86B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 F9F3 ; [.9A5C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FA15 ; [.86E4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 F989 ; [.8627.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 2FA17 ; [.96AE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17 2FA18 ; [.99CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18 2FA1C ; [.8084.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C ENTRY }; Unicode/Collate/Locale/hy.pl 0000644 00000000646 15037233326 0011703 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0587 ; [.22B3.0020.0002][.FFF1.0000.0000] # ARMENIAN SMALL LIGATURE ECH YIWN 0584 ; [.22B3.0020.0002][.FFF0.0000.0000] # ARMENIAN SMALL LETTER KEH 0535 0582 ; [.22B3.0020.0008][.FFF1.0000.0000] # <ARMENIAN CAPITAL LETTER ECH, ARMENIAN SMALL LETTER YIWN> 0554 ; [.22B3.0020.0008][.FFF0.0000.0000] # ARMENIAN CAPITAL LETTER KEH ENTRY }; Unicode/Collate/Locale/fi.pl 0000644 00000011235 15037233326 0011655 0 ustar 00 +{ locale_version => 1.25, # in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ? entry => <<'ENTRY', # for DUCET v9.0.0 0111 ; [.1C8F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE 01E5 ; [.1CF4.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE 01E4 ; [.1CF4.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE 014B ; [.1DB9.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG 014A ; [.1DB9.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG 0167 ; [.1E95.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE 0166 ; [.1E95.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE 0077 ; [.1EE3.0021.0002] # LATIN SMALL LETTER W 0057 ; [.1EE3.0021.0008] # LATIN CAPITAL LETTER W 00FC ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1F0B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1F0B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1F0B.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1F0B.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1F0B.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1F0B.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1F0B.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1F0B.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1F0B.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1F0B.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0292 ; [.1F21.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH 01B7 ; [.1F21.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH 01EF ; [.1F21.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON 01EE ; [.1F21.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON 00E5 ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F96.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F96.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F96.0020.0008] # ANGSTROM SIGN 01FB ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 00E4 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00E6 ; [.1F97.0021.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F97.0021.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F97.0021.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F97.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F97.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00F6 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F98.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00F8 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F98.0021.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F98.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F98.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F98.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ENTRY }; Unicode/Collate/Locale/ig.pl 0000644 00000007474 15037233326 0011670 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0063 0068 ; [.1C61.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0043 0068 ; [.1C61.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1C61.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 0067 0062 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER B> 0047 0062 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER B> 0047 0042 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER B> 0067 0068 ; [.1CF6.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER H> 0047 0068 ; [.1CF6.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER H> 0047 0048 ; [.1CF6.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER H> 0067 0077 ; [.1CF7.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER W> 0047 0077 ; [.1CF7.0020.0007] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER W> 0047 0057 ; [.1CF7.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER W> 1ECB ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW 0069 0323 ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW 1ECA ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW 0049 0323 ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW 006B 0070 ; [.1D66.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER P> 004B 0070 ; [.1D66.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER P> 004B 0050 ; [.1D66.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER P> 006B 0077 ; [.1D67.0020.0002] # <LATIN SMALL LETTER K, LATIN SMALL LETTER W> 004B 0077 ; [.1D67.0020.0007] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER W> 004B 0057 ; [.1D67.0020.0008] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER W> 1E45 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE 006E 0307 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE 1E44 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE 004E 0307 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE 006E 0077 ; [.1DBB.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER W> 004E 0077 ; [.1DBB.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER W> 004E 0057 ; [.1DBB.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER W> 006E 0079 ; [.1DBC.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y> 004E 0079 ; [.1DBC.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y> 004E 0059 ; [.1DBC.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y> 1ECD ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW 006F 0323 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW 1ECC ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW 004F 0323 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW 1ED9 ; [.1DDE.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1DDE.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1EE3 ; [.1DDE.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW 1EE2 ; [.1DDE.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 0073 0068 ; [.1E72.0020.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER H> 0053 0068 ; [.1E72.0020.0007] # <LATIN CAPITAL LETTER S, LATIN SMALL LETTER H> 0053 0048 ; [.1E72.0020.0008] # <LATIN CAPITAL LETTER S, LATIN CAPITAL LETTER H> 1EE5 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW 0075 0323 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW 1EE4 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW 0055 0323 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW 1EF1 ; [.1EB6.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW 1EF0 ; [.1EB6.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ENTRY }; Unicode/Collate/Locale/pa.pl 0000644 00000002506 15037233326 0011660 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0A71 ; [.0000.00C3.0002] # GURMUKHI ADDAK 0A03 ; [.0000.00C2.0002] # GURMUKHI SIGN VISARGA 0A70 ; [.0000.00C4.0002] # GURMUKHI TIPPI 0A02 ; [.0000.00C5.0002] # GURMUKHI SIGN BINDI 0A01 ; [.0000.00C6.0002] # GURMUKHI SIGN ADAK BINDI 0A3C ; [.0000.00C7.0002] # GURMUKHI SIGN NUKTA 0A33 ; [.272C.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER LLA 0A36 ; [.270D.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER SHA 0A59 ; [.2711.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER KHHA 0A5A ; [.2712.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER GHHA 0A5B ; [.2717.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER ZA 0A5E ; [.2725.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER FA 0A4D ; [.272F.0020.0002] # GURMUKHI SIGN VIRAMA 0A3E ; [.2730.0020.0002] # GURMUKHI VOWEL SIGN AA 0A3F ; [.2731.0020.0002] # GURMUKHI VOWEL SIGN I 0A40 ; [.2732.0020.0002] # GURMUKHI VOWEL SIGN II 0A41 ; [.2733.0020.0002] # GURMUKHI VOWEL SIGN U 0A42 ; [.2734.0020.0002] # GURMUKHI VOWEL SIGN UU 0A47 ; [.2735.0020.0002] # GURMUKHI VOWEL SIGN EE 0A48 ; [.2736.0020.0002] # GURMUKHI VOWEL SIGN AI 0A4B ; [.2737.0020.0002] # GURMUKHI VOWEL SIGN OO 0A4C ; [.2738.0020.0002] # GURMUKHI VOWEL SIGN AU ENTRY }; Unicode/Collate/Locale/sr.pl 0000644 00000000422 15037233326 0011677 0 ustar 00 +{ locale_version => 1.25, suppress => [0x0418, 0x0438], entry => <<'ENTRY', # for DUCET v9.0.0 0439 ; [.2080.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I 0419 ; [.2080.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I ENTRY }; Unicode/Collate/Locale/kn.pl 0000644 00000000665 15037233326 0011674 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0C82 ; [.284C.0020.0002][.FFF1.0000.0000] # KANNADA SIGN ANUSVARA 0C83 ; [.284C.0020.0002][.FFF2.0000.0000] # KANNADA SIGN VISARGA 0CF1 ; [.284C.0020.0002][.FFF3.0000.0000] # KANNADA SIGN JIHVAMULIYA 0CF2 ; [.284C.0020.0002][.FFF4.0000.0000] # KANNADA SIGN UPADHMANIYA 0C94 ; [.284C.0020.0002][.FFF0.0000.0000] # KANNADA LETTER AU ENTRY }; Unicode/Collate/Locale/wae.pl 0000644 00000004522 15037233326 0012034 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0061 0061 ; [.1C47.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A> 00E4 00E4 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER A WITH DIAERESIS> 00E4 0061 0308 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER A, COMBINING DIAERESIS> 0061 0308 00E4 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A, COMBINING DIAERESIS, LATIN SMALL LETTER A WITH DIAERESIS> 0061 0308 0061 0308 ; [.1C47.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER A, COMBINING DIAERESIS, LATIN SMALL LETTER A, COMBINING DIAERESIS> 0065 0065 ; [.1CAA.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER E, LATIN SMALL LETTER E> 0069 0069 ; [.1D32.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER I, LATIN SMALL LETTER I> 006F 006F ; [.1DDD.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER O, LATIN SMALL LETTER O> 00F6 00F6 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O WITH DIAERESIS, LATIN SMALL LETTER O WITH DIAERESIS> 00F6 006F 0308 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O WITH DIAERESIS, LATIN SMALL LETTER O, COMBINING DIAERESIS> 006F 0308 00F6 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O, COMBINING DIAERESIS, LATIN SMALL LETTER O WITH DIAERESIS> 006F 0308 006F 0308 ; [.1DDD.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER O, COMBINING DIAERESIS, LATIN SMALL LETTER O, COMBINING DIAERESIS> 0063 0068 ; [.1C7A.0020.0002][.0000.0028.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0073 0063 0068 ; [.1E71.0020.0002][.0000.0028.0002] # <LATIN SMALL LETTER S, LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0075 0075 ; [.1EB5.0020.0002][.0000.0024.0002] # <LATIN SMALL LETTER U, LATIN SMALL LETTER U> 00FC 00FC ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, LATIN SMALL LETTER U WITH DIAERESIS> 00FC 0075 0308 ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, LATIN SMALL LETTER U, COMBINING DIAERESIS> 0075 0308 00FC ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U, COMBINING DIAERESIS, LATIN SMALL LETTER U WITH DIAERESIS> 0075 0308 0075 0308 ; [.1EB5.0020.0002][.0000.002D.0002] # <LATIN SMALL LETTER U, COMBINING DIAERESIS, LATIN SMALL LETTER U, COMBINING DIAERESIS> ENTRY }; Unicode/Collate/Locale/kk.pl 0000644 00000001135 15037233326 0011662 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0451 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO 0435 0308 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO 0401 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO 0415 0308 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO 04AF ; [.2126.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U 04AE ; [.2126.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U 0456 ; [.2197.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 0406 ; [.2197.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I ENTRY }; Unicode/Collate/Locale/haw.pl 0000644 00000002746 15037233326 0012045 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0065 ; [.1C48.0020.0002][.FFF1.0000.0000] # LATIN SMALL LETTER E 0045 ; [.1C48.0020.0008][.FFF1.0000.0000] # LATIN CAPITAL LETTER E 0069 ; [.1C48.0020.0002][.FFF2.0000.0000] # LATIN SMALL LETTER I 0049 ; [.1C48.0020.0008][.FFF2.0000.0000] # LATIN CAPITAL LETTER I 006F ; [.1C48.0020.0002][.FFF3.0000.0000] # LATIN SMALL LETTER O 004F ; [.1C48.0020.0008][.FFF3.0000.0000] # LATIN CAPITAL LETTER O 0075 ; [.1C48.0020.0002][.FFF4.0000.0000] # LATIN SMALL LETTER U 0055 ; [.1C48.0020.0008][.FFF4.0000.0000] # LATIN CAPITAL LETTER U 02BB ; [.1EF6.0020.0002] # MODIFIER LETTER TURNED COMMA 0113 ; [.1C48.0020.0002][.FFF1.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1C48.0020.0008][.FFF1.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON 012B ; [.1C48.0020.0002][.FFF2.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1C48.0020.0008][.FFF2.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON 014D ; [.1C48.0020.0002][.FFF3.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1C48.0020.0008][.FFF3.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON 016B ; [.1C48.0020.0002][.FFF4.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1C48.0020.0008][.FFF4.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON ENTRY }; Unicode/Collate/Locale/ca.pl 0000644 00000002467 15037233326 0011651 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0063 0048 ; [.1C7B.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER C, LATIN CAPITAL LETTER H> 0043 0068 ; [.1C7B.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 006C 006C ; [.1D78.0020.0002][.0000.0000.0001] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L> 006C 00B7 006C ; [.1D78.0020.0002][.0000.0000.0007] # <LATIN SMALL LETTER L, MIDDLE DOT, LATIN SMALL LETTER L> 006C 004C ; [.1D78.0020.0007][.0000.0000.0002][.0000.0000.0001] # <LATIN SMALL LETTER L, LATIN CAPITAL LETTER L> 006C 00B7 004C ; [.1D78.0020.0007][.0000.0000.0002][.0000.0000.0007] # <LATIN SMALL LETTER L, MIDDLE DOT, LATIN CAPITAL LETTER L> 004C 006C ; [.1D78.0020.0007][.0000.0000.0008][.0000.0000.0001] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L> 004C 00B7 006C ; [.1D78.0020.0007][.0000.0000.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER L, MIDDLE DOT, LATIN SMALL LETTER L> 004C 004C ; [.1D78.0020.0008][.0000.0000.0001] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L> 004C 00B7 004C ; [.1D78.0020.0008][.0000.0000.0007] # <LATIN CAPITAL LETTER L, MIDDLE DOT, LATIN CAPITAL LETTER L> ENTRY }; Unicode/Collate/Locale/mr.pl 0000644 00000001516 15037233327 0011677 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA 0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU 0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA 0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM 0933 ; [.269E.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA 0934 ; [.269E.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA 0915 094D 0937 ; [.269E.0020.0002][.FFF2.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA> 091C 094D 091E ; [.269E.0020.0002][.FFF3.0000.0000] # <DEVANAGARI LETTER JA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER NYA> 0939 ; [.269E.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA ENTRY }; Unicode/Collate/Locale/zh.pl 0000644 00000035675 15037233327 0011717 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON> 004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON> 1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON> 004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON> 006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT> 006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK> 004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT> 004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK> 006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON> 004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON> 0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON> 00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON> 01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON> 00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON> 01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS ENTRY }; Unicode/Collate/Locale/fil.pl 0000644 00000001102 15037233327 0012022 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE 004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE 006E 0067 ; [.1DBB.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER G> 004E 0067 ; [.1DBB.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER G> 004E 0047 ; [.1DBB.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER G> ENTRY }; Unicode/Collate/Locale/ar.pl 0000644 00000001534 15037233327 0011663 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0629 ; [.231D.0021.0002] # ARABIC LETTER TEH MARBUTA FE94 ; [.231D.0021.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM FE93 ; [.231D.0021.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM 0649 ; [.23C6.0021.0002] # ARABIC LETTER ALEF MAKSURA FBE8 ; [.23C6.0021.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM FBE9 ; [.23C6.0021.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM FEF0 ; [.23C6.0021.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM FEEF ; [.23C6.0021.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM FC90 ; [.23C6.0021.001B] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM FC5D ; [.23C6.0021.001C] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM ENTRY }; Unicode/Collate/Locale/ur.pl 0000644 00000014337 15037233327 0011714 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0623 ; [.230B.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE 0627 0654 ; [.230B.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE 0622 ; [.230C.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE 0627 0653 ; [.230C.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE 0628 ; [.230C.0020.0002][.FFC1.0000.0000] # ARABIC LETTER BEH 0628 06BE ; [.230C.0020.0002][.FFC2.0000.0000] # <ARABIC LETTER BEH, ARABIC LETTER HEH DOACHASHMEE> 067E ; [.230C.0020.0002][.FFC3.0000.0000] # ARABIC LETTER PEH 067E 06BE ; [.230C.0020.0002][.FFC4.0000.0000] # <ARABIC LETTER PEH, ARABIC LETTER HEH DOACHASHMEE> 062A ; [.230C.0020.0002][.FFC5.0000.0000] # ARABIC LETTER TEH 062A 06BE ; [.230C.0020.0002][.FFC6.0000.0000] # <ARABIC LETTER TEH, ARABIC LETTER HEH DOACHASHMEE> 0679 ; [.230C.0020.0002][.FFC7.0000.0000] # ARABIC LETTER TTEH 0679 06BE ; [.230C.0020.0002][.FFC8.0000.0000] # <ARABIC LETTER TTEH, ARABIC LETTER HEH DOACHASHMEE> 062B ; [.230C.0020.0002][.FFC9.0000.0000] # ARABIC LETTER THEH 062C ; [.230C.0020.0002][.FFCA.0000.0000] # ARABIC LETTER JEEM 062C 06BE ; [.230C.0020.0002][.FFCB.0000.0000] # <ARABIC LETTER JEEM, ARABIC LETTER HEH DOACHASHMEE> 0686 ; [.230C.0020.0002][.FFCC.0000.0000] # ARABIC LETTER TCHEH 0686 06BE ; [.230C.0020.0002][.FFCD.0000.0000] # <ARABIC LETTER TCHEH, ARABIC LETTER HEH DOACHASHMEE> 062D ; [.230C.0020.0002][.FFCE.0000.0000] # ARABIC LETTER HAH 062E ; [.230C.0020.0002][.FFCF.0000.0000] # ARABIC LETTER KHAH 062F ; [.230C.0020.0002][.FFD0.0000.0000] # ARABIC LETTER DAL 062F 06BE ; [.230C.0020.0002][.FFD1.0000.0000] # <ARABIC LETTER DAL, ARABIC LETTER HEH DOACHASHMEE> 0688 ; [.230C.0020.0002][.FFD2.0000.0000] # ARABIC LETTER DDAL 0688 06BE ; [.230C.0020.0002][.FFD3.0000.0000] # <ARABIC LETTER DDAL, ARABIC LETTER HEH DOACHASHMEE> 0630 ; [.230C.0020.0002][.FFD4.0000.0000] # ARABIC LETTER THAL 0631 ; [.230C.0020.0002][.FFD5.0000.0000] # ARABIC LETTER REH 0631 06BE ; [.230C.0020.0002][.FFD6.0000.0000] # <ARABIC LETTER REH, ARABIC LETTER HEH DOACHASHMEE> 0691 ; [.230C.0020.0002][.FFD7.0000.0000] # ARABIC LETTER RREH 0691 06BE ; [.230C.0020.0002][.FFD8.0000.0000] # <ARABIC LETTER RREH, ARABIC LETTER HEH DOACHASHMEE> 0632 ; [.230C.0020.0002][.FFD9.0000.0000] # ARABIC LETTER ZAIN 0698 ; [.230C.0020.0002][.FFDA.0000.0000] # ARABIC LETTER JEH 0633 ; [.230C.0020.0002][.FFDB.0000.0000] # ARABIC LETTER SEEN 0634 ; [.230C.0020.0002][.FFDC.0000.0000] # ARABIC LETTER SHEEN 0635 ; [.230C.0020.0002][.FFDD.0000.0000] # ARABIC LETTER SAD 0636 ; [.230C.0020.0002][.FFDE.0000.0000] # ARABIC LETTER DAD 0637 ; [.230C.0020.0002][.FFDF.0000.0000] # ARABIC LETTER TAH 0638 ; [.230C.0020.0002][.FFE0.0000.0000] # ARABIC LETTER ZAH 0639 ; [.230C.0020.0002][.FFE1.0000.0000] # ARABIC LETTER AIN 063A ; [.230C.0020.0002][.FFE2.0000.0000] # ARABIC LETTER GHAIN 0641 ; [.230C.0020.0002][.FFE3.0000.0000] # ARABIC LETTER FEH 0642 ; [.230C.0020.0002][.FFE4.0000.0000] # ARABIC LETTER QAF 06A9 ; [.230C.0020.0002][.FFE5.0000.0000] # ARABIC LETTER KEHEH 06A9 06BE ; [.230C.0020.0002][.FFE6.0000.0000] # <ARABIC LETTER KEHEH, ARABIC LETTER HEH DOACHASHMEE> 06AF ; [.230C.0020.0002][.FFE7.0000.0000] # ARABIC LETTER GAF 06AF 06BE ; [.230C.0020.0002][.FFE8.0000.0000] # <ARABIC LETTER GAF, ARABIC LETTER HEH DOACHASHMEE> 0644 ; [.230C.0020.0002][.FFE9.0000.0000] # ARABIC LETTER LAM 0644 06BE ; [.230C.0020.0002][.FFEA.0000.0000] # <ARABIC LETTER LAM, ARABIC LETTER HEH DOACHASHMEE> 0645 ; [.230C.0020.0002][.FFEB.0000.0000] # ARABIC LETTER MEEM 0645 06BE ; [.230C.0020.0002][.FFEC.0000.0000] # <ARABIC LETTER MEEM, ARABIC LETTER HEH DOACHASHMEE> 0646 ; [.230C.0020.0002][.FFED.0000.0000] # ARABIC LETTER NOON 0646 06BE ; [.230C.0020.0002][.FFEE.0000.0000] # <ARABIC LETTER NOON, ARABIC LETTER HEH DOACHASHMEE> 06BA ; [.230C.0020.0002][.FFEF.0000.0000] # ARABIC LETTER NOON GHUNNA 06BA 06BE ; [.230C.0020.0002][.FFF0.0000.0000] # <ARABIC LETTER NOON GHUNNA, ARABIC LETTER HEH DOACHASHMEE> 0648 ; [.230C.0020.0002][.FFF1.0000.0000] # ARABIC LETTER WAW 0624 ; [.230C.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE 0648 0654 ; [.230C.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE 0648 06BE ; [.230C.0020.0002][.FFF2.0000.0000] # <ARABIC LETTER WAW, ARABIC LETTER HEH DOACHASHMEE> 06C1 ; [.230C.0020.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL 06C2 ; [.230C.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE 06C1 0654 ; [.230C.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE 06BE ; [.230C.0020.0002][.FFF4.0000.0000] # ARABIC LETTER HEH DOACHASHMEE 06C3 ; [.230C.0020.0002][.FFF5.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL 0621 ; [.230C.0020.0002][.FFF6.0000.0000] # ARABIC LETTER HAMZA 06CC ; [.230C.0020.0002][.FFF7.0000.0000] # ARABIC LETTER FARSI YEH 0626 ; [.230C.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE 064A 0654 ; [.230C.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE 06CC 06BE ; [.230C.0020.0002][.FFF8.0000.0000] # <ARABIC LETTER FARSI YEH, ARABIC LETTER HEH DOACHASHMEE> 06D2 ; [.230C.0020.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE 06D3 ; [.230C.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE 06D2 0654 ; [.230C.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE 066E ; [.230C.0020.0002][.FFFA.0000.0000] # ARABIC LETTER DOTLESS BEH 0652 ; [.0000.0074.0002] # ARABIC SUKUN 064E ; [.0000.0075.0002] # ARABIC FATHA 0650 ; [.0000.0076.0002] # ARABIC KASRA 064F ; [.0000.0077.0002] # ARABIC DAMMA 0670 ; [.0000.0078.0002] # ARABIC LETTER SUPERSCRIPT ALEF 0656 ; [.0000.0079.0002] # ARABIC SUBSCRIPT ALEF 0657 ; [.0000.007A.0002] # ARABIC INVERTED DAMMA 064B ; [.0000.007B.0002] # ARABIC FATHATAN 064D ; [.0000.007C.0002] # ARABIC KASRATAN 064C ; [.0000.007D.0002] # ARABIC DAMMATAN 0654 ; [.0000.007E.0002] # ARABIC HAMZA ABOVE 0651 ; [.0000.007F.0002] # ARABIC SHADDA 0658 ; [.0000.0080.0002] # ARABIC MARK NOON GHUNNA 0653 ; [.0000.0081.0002] # ARABIC MADDAH ABOVE ENTRY }; Unicode/Collate/Locale/tr.pl 0000644 00000006251 15037233327 0011707 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00E7 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA 0063 0327 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA 00C7 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA 0043 0327 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA 011F ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE 0067 0306 ; [.1CF5.0020.0002] # LATIN SMALL LETTER G WITH BREVE 011E ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE 0047 0306 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE 0131 ; [.1D31.0020.0002] # LATIN SMALL LETTER DOTLESS I 0049 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER I 00CC ; [.1D31.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE 00CD ; [.1D31.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE 00CE ; [.1D31.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00CF ; [.1D31.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS 012A ; [.1D31.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON 012C ; [.1D31.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE 012E ; [.1D31.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK 0130 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE 0049 0307 ; [.1D32.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE 00F6 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1DDE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1DDE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 015F ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA 0073 0327 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA 015E ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA 0053 0327 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA 00FC ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB6.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB6.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1EB6.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB6.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1EB6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1EB6.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB6.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1EB6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ENTRY }; Unicode/Collate/Locale/tn.pl 0000644 00000005475 15037233327 0011712 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00EA ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC1 ; [.1CAB.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAB.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EBF ; [.1CAB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC5 ; [.1CAB.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAB.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAB.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAB.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 00F4 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 006F 0302 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 004F 0302 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED3 ; [.1DDE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1DDE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED1 ; [.1DDE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1DDE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED7 ; [.1DDE.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1DDE.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1DDE.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1DDE.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED9 ; [.1DDE.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1DDE.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON ENTRY }; Unicode/Collate/Locale/as.pl 0000644 00000001440 15037233327 0011660 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0982 ; [.26CD.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA 0981 ; [.26CD.0020.0002][.FFF2.0000.0000] # BENGALI SIGN CANDRABINDU 0983 ; [.26CD.0020.0002][.FFF3.0000.0000] # BENGALI SIGN VISARGA 0994 ; [.26CD.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU 09CE ; [.26DD.0020.0002][.FFF0.0000.0000] # BENGALI LETTER KHANDA TA 09A4 09CD 200D ; [.26DD.0020.0002][.FFF0.0000.0000] # <BENGALI LETTER TA, BENGALI SIGN VIRAMA, ZERO WIDTH JOINER> 09A4 ; [.26DD.0020.0002][.FFF1.0000.0000] # BENGALI LETTER TA 0995 09CD 09B7 ; [.26EF.0020.0002][.FFF1.0000.0000] # <BENGALI LETTER KA, BENGALI SIGN VIRAMA, BENGALI LETTER SSA> 09B9 ; [.26EF.0020.0002][.FFF0.0000.0000] # BENGALI LETTER HA ENTRY }; Unicode/Collate/Locale/is.pl 0000644 00000012333 15037233327 0011673 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00E1 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C5F.0020.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C5F.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0111 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0064 0335 ; [.1C8F.0021.0002] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 0044 0335 ; [.1C8F.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1C90.0020.0002] # LATIN SMALL LETTER ETH 1DD9 ; [.1C90.0020.0002] # COMBINING LATIN SMALL LETTER ETH 00D0 ; [.1C90.0020.0008] # LATIN CAPITAL LETTER ETH 00E9 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CE4.0020.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CE4.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE 00ED ; [.1D4B.0020.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D4B.0020.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D4B.0020.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D4B.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D4B.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D4B.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE 00F3 ; [.1E0B.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1E0B.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1E0B.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1E0B.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1E0B.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1E0B.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 00FA ; [.1EE2.0020.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EE2.0020.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EE2.0020.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EE2.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EE2.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EE2.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE 00FD ; [.1F20.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE 0079 0301 ; [.1F20.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE 0079 0341 ; [.1F20.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE 00DD ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE 0059 0301 ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE 0059 0341 ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE 00E6 ; [.1F96.0020.0002] # LATIN SMALL LETTER AE 1DD4 ; [.1F96.0020.0002] # COMBINING LATIN SMALL LETTER AE 00C6 ; [.1F96.0020.0008] # LATIN CAPITAL LETTER AE 1D2D ; [.1F96.0020.0014] # MODIFIER LETTER CAPITAL AE 01FD ; [.1F96.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.1F96.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.1F96.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.1F96.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON 00E4 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1F96.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1F96.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1F96.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1F96.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00F6 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1F97.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1F97.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1F97.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1F97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00F8 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH STROKE 006F 0338 ; [.1F97.0021.0002] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 004F 0338 ; [.1F97.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1F97.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1F97.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 00E5 ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 0061 030A ; [.1F98.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 0041 030A ; [.1F98.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.1F98.0020.0008] # ANGSTROM SIGN 01FB ; [.1F98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.1F98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ENTRY }; Unicode/Collate/Locale/zh_zhu.pl 0000644 00000314540 15037233327 0012574 0 ustar 00 use Unicode::Collate::CJK::Zhuyin; +{ locale_version => 1.25, overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin, entry => <<'ENTRY', # for DUCET v9.0.0 02C9 ; [.0000.0199.0002] # MODIFIER LETTER MACRON 02CA ; [.019A.0020.0002] # MODIFIER LETTER ACUTE ACCENT 02C7 ; [.019B.0020.0002] # CARON 02CB ; [.019C.0020.0002] # MODIFIER LETTER GRAVE ACCENT 02D9 ; [.019D.0020.0002] # DOT ABOVE 02EA ; [.019E.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK 02EB ; [.019F.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK 0101 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0061 0304 ; [.1C47.001C.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 0041 0304 ; [.1C47.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON 00E1 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C47.001D.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C47.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE 01CE ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 0061 030C ; [.1C47.001E.0002] # LATIN SMALL LETTER A WITH CARON 01CD ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 0041 030C ; [.1C47.001E.0008] # LATIN CAPITAL LETTER A WITH CARON 00E0 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0300 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0340 ; [.1C47.001F.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0300 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0340 ; [.1C47.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0113 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0065 0304 ; [.1CAA.001C.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 0045 0304 ; [.1CAA.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON 00E9 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAA.001D.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAA.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE 011B ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 0065 030C ; [.1CAA.001E.0002] # LATIN SMALL LETTER E WITH CARON 011A ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 0045 030C ; [.1CAA.001E.0008] # LATIN CAPITAL LETTER E WITH CARON 00E8 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0300 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 0065 0340 ; [.1CAA.001F.0002] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0300 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 0045 0340 ; [.1CAA.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE 00EA 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 00CA 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON> 0065 0302 0304 ; [.1CAA.0021.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 0045 0302 0304 ; [.1CAA.0021.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON> 1EBF ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0301 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 0065 0302 0341 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0301 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 0045 0302 0341 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 00EA 0301 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00EA 0341 ; [.1CAA.0022.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00CA 0301 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT> 00CA 0341 ; [.1CAA.0022.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK> 00EA 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 00CA 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON> 0065 0302 030C ; [.1CAA.0023.0002] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 0045 0302 030C ; [.1CAA.0023.0008] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON> 1EC1 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0300 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 0065 0302 0340 ; [.1CAA.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0300 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 0045 0302 0340 ; [.1CAA.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 00EA 0300 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00EA 0340 ; [.1CAA.0024.0002] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00CA 0300 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT> 00CA 0340 ; [.1CAA.0024.0008] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK> 00EA ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 0065 0302 ; [.1CAA.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0045 0302 ; [.1CAA.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EC5 ; [.1CAA.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.1CAA.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.1CAA.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.1CAA.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC7 ; [.1CAA.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.1CAA.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 012B ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 0069 0304 ; [.1D32.001C.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 0049 0304 ; [.1D32.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON 00ED ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D32.001D.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D32.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE 01D0 ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 0069 030C ; [.1D32.001E.0002] # LATIN SMALL LETTER I WITH CARON 01CF ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 0049 030C ; [.1D32.001E.0008] # LATIN CAPITAL LETTER I WITH CARON 00EC ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0300 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 0069 0340 ; [.1D32.001F.0002] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0300 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 0049 0340 ; [.1D32.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE 006D 0304 ; [.1DAA.001C.0002] # <LATIN SMALL LETTER M, COMBINING MACRON> 004D 0304 ; [.1DAA.001C.0008] # <LATIN CAPITAL LETTER M, COMBINING MACRON> 1E3F ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0301 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 006D 0341 ; [.1DAA.001D.0002] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0301 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 004D 0341 ; [.1DAA.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE 006D 030C ; [.1DAA.001E.0002] # <LATIN SMALL LETTER M, COMBINING CARON> 004D 030C ; [.1DAA.001E.0008] # <LATIN CAPITAL LETTER M, COMBINING CARON> 006D 0300 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT> 006D 0340 ; [.1DAA.001F.0002] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK> 004D 0300 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT> 004D 0340 ; [.1DAA.001F.0008] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK> 006E 0304 ; [.1DB9.001C.0002] # <LATIN SMALL LETTER N, COMBINING MACRON> 004E 0304 ; [.1DB9.001C.0008] # <LATIN CAPITAL LETTER N, COMBINING MACRON> 0144 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DB9.001D.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DB9.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE 0148 ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 006E 030C ; [.1DB9.001E.0002] # LATIN SMALL LETTER N WITH CARON 0147 ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 004E 030C ; [.1DB9.001E.0008] # LATIN CAPITAL LETTER N WITH CARON 01F9 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0300 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 006E 0340 ; [.1DB9.001F.0002] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0300 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 004E 0340 ; [.1DB9.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE 014D ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 006F 0304 ; [.1DDD.001C.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 004F 0304 ; [.1DDD.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON 00F3 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDD.001D.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDD.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE 01D2 ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 006F 030C ; [.1DDD.001E.0002] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 004F 030C ; [.1DDD.001E.0008] # LATIN CAPITAL LETTER O WITH CARON 00F2 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0300 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 006F 0340 ; [.1DDD.001F.0002] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0300 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 004F 0340 ; [.1DDD.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE 016B ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.001C.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON 00FA ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EB5.001D.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EB5.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE 01D4 ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 0075 030C ; [.1EB5.001E.0002] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 0055 030C ; [.1EB5.001E.0008] # LATIN CAPITAL LETTER U WITH CARON 00F9 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0300 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 0075 0340 ; [.1EB5.001F.0002] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0300 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 0055 0340 ; [.1EB5.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE 01D6 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 0075 0308 0304 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0055 0308 0304 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 00FC 0304 ; [.1EB5.0021.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON> 00DC 0304 ; [.1EB5.0021.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON> 01D8 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0301 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 0075 0308 0341 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0301 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 0055 0308 0341 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 00FC 0301 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00FC 0341 ; [.1EB5.0022.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 00DC 0301 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT> 00DC 0341 ; [.1EB5.0022.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK> 01DA ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 0075 0308 030C ; [.1EB5.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 0055 0308 030C ; [.1EB5.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 00FC 030C ; [.1EB5.0023.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON> 00DC 030C ; [.1EB5.0023.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON> 01DC ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0300 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 0075 0308 0340 ; [.1EB5.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0300 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 0055 0308 0340 ; [.1EB5.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 00FC 0300 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00FC 0340 ; [.1EB5.0024.0002] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00DC 0300 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT> 00DC 0340 ; [.1EB5.0024.0008] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK> 00FC ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EB5.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EB5.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS FDD0 3105 ; [.8000.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER B> 2E8A ; [.80B5.0020.0002] # CJK RADICAL DIVINATION FDD0 3106 ; [.83B1.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER P> FDD0 3107 ; [.8626.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER M> FDD0 3108 ; [.897F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER F> 2ECF ; [.8BC0.0020.0002] # CJK RADICAL CITY 2ED6 ; [.8BC1.0020.0002] # CJK RADICAL MOUND TWO FDD0 3109 ; [.8C0D.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER D> 2E88 ; [.8C86.0020.0002] # CJK RADICAL KNIFE ONE FDD0 310A ; [.901F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER T> FDD0 310B ; [.93D9.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER N> 2EA7 ; [.9525.0020.0002] # CJK RADICAL COW FDD0 310C ; [.95D9.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER L> 3007 ; [.9A41.0020.0002] # IDEOGRAPHIC NUMBER ZERO FDD0 310D ; [.9C5F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER G> 2EE3 ; [.9E0A.0020.0002] # CJK RADICAL BONE FDD0 310E ; [.9FD2.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER K> FDD0 310F ; [.A223.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER H> FDD0 3110 ; [.A697.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER J> 2E95 ; [.A762.0020.0002] # CJK RADICAL SNOUT TWO 2E86 ; [.AD18.0020.0002] # CJK RADICAL BOX FDD0 3111 ; [.AD38.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER Q> FDD0 3112 ; [.B164.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER X> 2E8C ; [.B383.0020.0002] # CJK RADICAL SMALL ONE 2E8D ; [.B384.0020.0002] # CJK RADICAL SMALL TWO FDD0 3113 ; [.B6E9.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ZH> 2EA5 ; [.B8AC.0020.0002] # CJK RADICAL PAW TWO FDD0 3114 ; [.BBAC.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER CH> 2ECC ; [.BE9D.0020.0002] # CJK RADICAL SIMPLIFIED WALK 2ECD ; [.BE9E.0020.0002] # CJK RADICAL WALK ONE FDD0 3115 ; [.BF5A.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER SH> 2EAC ; [.BFBC.0020.0002] # CJK RADICAL SPIRIT ONE 2EAE ; [.BFC1.0020.0002] # CJK RADICAL BAMBOO FDD0 3116 ; [.C2A2.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER R> 2E9C ; [.C2A3.0020.0002] # CJK RADICAL SUN 2EBC ; [.C2D3.0020.0002] # CJK RADICAL MEAT 2EB6 ; [.C311.0020.0002] # CJK RADICAL SHEEP FDD0 3117 ; [.C402.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER Z> FDD0 3118 ; [.C630.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER C> 2EBE ; [.C6CA.0020.0002] # CJK RADICAL GRASS ONE FDD0 3119 ; [.C7F6.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER S> FDD0 311A ; [.CA13.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER A> FDD0 311B ; [.CA19.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER O> FDD0 311C ; [.CA1E.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER E> FDD0 311E ; [.CAA0.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER AI> FDD0 311F ; [.CAE8.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER EI> FDD0 3120 ; [.CAEB.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER AU> FDD0 3121 ; [.CB2E.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER OU> FDD0 3122 ; [.CB51.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER AN> FDD0 3123 ; [.CB8B.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER EN> FDD0 3124 ; [.CB94.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ANG> FDD0 3125 ; [.CBA0.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ENG> FDD0 3126 ; [.CBA2.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER ER> FDD0 3127 ; [.CBDB.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER I> 2E84 ; [.CDB5.0020.0002] # CJK RADICAL SECOND THREE 2E80 ; [.CEDF.0020.0002] # CJK RADICAL REPEAT FDD0 3128 ; [.D16F.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER U> FDD0 3129 ; [.D403.0020.0002] # <noncharacter-FDD0, BOPOMOFO LETTER IU> 2ED7 ; [.D47E.0020.0002] # CJK RADICAL RAIN 2E9D ; [.D53B.0020.0002] # CJK RADICAL MOON 3220 ; [*0317.0020.0004][.CBDC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ONE 3226 ; [*0317.0020.0004][.AD39.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN 3222 ; [*0317.0020.0004][.C8DF.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH THREE 3228 ; [*0317.0020.0004][.A95D.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NINE 3221 ; [*0317.0020.0004][.CBCD.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TWO 3224 ; [*0317.0020.0004][.D1A9.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE 3239 ; [*0317.0020.0004][.8C57.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT 323D ; [*0317.0020.0004][.ADC1.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE 3241 ; [*0317.0020.0004][.B3A8.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REST 3227 ; [*0317.0020.0004][.8001.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT 3225 ; [*0317.0020.0004][.9953.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SIX 3238 ; [*0317.0020.0004][.969E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR 3229 ; [*0317.0020.0004][.BF85.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH TEN 323F ; [*0317.0020.0004][.B2BC.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE 3234 ; [*0317.0020.0004][.892A.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH NAME 323A ; [*0317.0020.0004][.A3B5.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CALL 3223 ; [*0317.0020.0004][.C82E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR 322F ; [*0317.0020.0004][.92EA.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH 323B ; [*0317.0020.0004][.B5F0.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY 3230 ; [*0317.0020.0004][.C2A4.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUN 322A ; [*0317.0020.0004][.D53C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH MOON 3232 ; [*0317.0020.0004][.CEC7.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE 322D ; [*0317.0020.0004][.895F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD 3231 ; [*0317.0020.0004][.BA36.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK 322C ; [*0317.0020.0004][.C26E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH WATER 322B ; [*0317.0020.0004][.A48C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE 3235 ; [*0317.0020.0004][.9060.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL 323C ; [*0317.0020.0004][.A9B3.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE 3233 ; [*0317.0020.0004][.C05E.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY 3237 ; [*0317.0020.0004][.BA90.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION 3240 ; [*0317.0020.0004][.A78C.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL 3242 ; [*0317.0020.0004][.C457.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH SELF 3243 ; [*0317.0020.0004][.B766.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH REACH 3236 ; [*0317.0020.0004][.C69F.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL 323E ; [*0317.0020.0004][.C421.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE 322E ; [*0317.0020.0004][.AA72.0020.0004][*0318.0020.0004] # PARENTHESIZED IDEOGRAPH METAL 3358 ; [.1C3D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO 33E9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN 32C9 ; [.1C3E.0020.0004][.1C3D.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER 3362 ; [.1C3E.0020.0004][.1C3D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN 33EA ; [.1C3E.0020.0004][.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN 32CA ; [.1C3E.0020.0004][.1C3E.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER 3363 ; [.1C3E.0020.0004][.1C3E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN 33EB ; [.1C3E.0020.0004][.1C3F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE 32CB ; [.1C3E.0020.0004][.1C3F.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER 3364 ; [.1C3E.0020.0004][.1C3F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE 33EC ; [.1C3E.0020.0004][.1C40.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN 3365 ; [.1C3E.0020.0004][.1C40.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN 33ED ; [.1C3E.0020.0004][.1C41.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN 3366 ; [.1C3E.0020.0004][.1C41.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN 33EE ; [.1C3E.0020.0004][.1C42.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN 3367 ; [.1C3E.0020.0004][.1C42.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN 33EF ; [.1C3E.0020.0004][.1C43.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN 3368 ; [.1C3E.0020.0004][.1C43.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN 33F0 ; [.1C3E.0020.0004][.1C44.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN 3369 ; [.1C3E.0020.0004][.1C44.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN 33F1 ; [.1C3E.0020.0004][.1C45.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN 336A ; [.1C3E.0020.0004][.1C45.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN 33F2 ; [.1C3E.0020.0004][.1C46.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN 336B ; [.1C3E.0020.0004][.1C46.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN 33E0 ; [.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE 32C0 ; [.1C3E.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY 3359 ; [.1C3E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE 33F3 ; [.1C3F.0020.0004][.1C3D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY 336C ; [.1C3F.0020.0004][.1C3D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY 33F4 ; [.1C3F.0020.0004][.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE 336D ; [.1C3F.0020.0004][.1C3E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE 33F5 ; [.1C3F.0020.0004][.1C3F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO 336E ; [.1C3F.0020.0004][.1C3F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO 33F6 ; [.1C3F.0020.0004][.1C40.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE 336F ; [.1C3F.0020.0004][.1C40.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE 33F7 ; [.1C3F.0020.0004][.1C41.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR 3370 ; [.1C3F.0020.0004][.1C41.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR 33F8 ; [.1C3F.0020.0004][.1C42.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE 33F9 ; [.1C3F.0020.0004][.1C43.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX 33FA ; [.1C3F.0020.0004][.1C44.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN 33FB ; [.1C3F.0020.0004][.1C45.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT 33FC ; [.1C3F.0020.0004][.1C46.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE 33E1 ; [.1C3F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO 32C1 ; [.1C3F.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY 335A ; [.1C3F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO 33FD ; [.1C40.0020.0004][.1C3D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY 33FE ; [.1C40.0020.0004][.1C3E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE 33E2 ; [.1C40.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE 32C2 ; [.1C40.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH 335B ; [.1C40.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE 33E3 ; [.1C41.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR 32C3 ; [.1C41.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL 335C ; [.1C41.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR 33E4 ; [.1C42.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE 32C4 ; [.1C42.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY 335D ; [.1C42.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE 33E5 ; [.1C43.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX 32C5 ; [.1C43.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE 335E ; [.1C43.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX 33E6 ; [.1C44.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN 32C6 ; [.1C44.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY 335F ; [.1C44.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN 33E7 ; [.1C45.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT 32C7 ; [.1C45.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST 3360 ; [.1C45.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT 33E8 ; [.1C46.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE 32C8 ; [.1C46.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER 3361 ; [.1C46.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE 1F241 ; [*0379.0020.0004][.C8DF.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 1F242 ; [*0379.0020.0004][.CBCD.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C 1F247 ; [*0379.0020.0004][.C1CC.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD 1F243 ; [*0379.0020.0004][.CB52.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 1F245 ; [*0379.0020.0004][.8C38.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 1F248 ; [*0379.0020.0004][.80CD.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 1F240 ; [*0379.0020.0004][.819A.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C 1F244 ; [*0379.0020.0004][.8E99.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 1F246 ; [*0379.0020.0004][.8CA9.0020.0004][*037A.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 2F00 ; [.CBDC.0020.0004] # KANGXI RADICAL ONE 3192 ; [.CBDC.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK 3280 ; [.CBDC.0020.0006] # CIRCLED IDEOGRAPH ONE 1F229 ; [.CBDC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E00 319C ; [.8EC1.0020.0014] # IDEOGRAPHIC ANNOTATION FOURTH MARK 3286 ; [.AD39.0020.0006] # CIRCLED IDEOGRAPH SEVEN 3194 ; [.C8DF.0020.0014] # IDEOGRAPHIC ANNOTATION THREE MARK 3282 ; [.C8DF.0020.0006] # CIRCLED IDEOGRAPH THREE 1F22A ; [.C8DF.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E09 3196 ; [.C19C.0020.0014] # IDEOGRAPHIC ANNOTATION TOP MARK 32A4 ; [.C19C.0020.0006] # CIRCLED IDEOGRAPH HIGH 3198 ; [.B2A0.0020.0014] # IDEOGRAPHIC ANNOTATION BOTTOM MARK 32A6 ; [.B2A0.0020.0006] # CIRCLED IDEOGRAPH LOW 319B ; [.8355.0020.0014] # IDEOGRAPHIC ANNOTATION THIRD MARK 2F01 ; [.9F64.0020.0004] # KANGXI RADICAL LINE 3197 ; [.BB6D.0020.0014] # IDEOGRAPHIC ANNOTATION MIDDLE MARK 32A5 ; [.BB6D.0020.0006] # CIRCLED IDEOGRAPH CENTRE 1F22D ; [.BB6D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D 2F02 ; [.BA6A.0020.0004] # KANGXI RADICAL DOT 2F03 ; [.8558.0020.0004] # KANGXI RADICAL SLASH 2F04 ; [.CC59.0020.0004] # KANGXI RADICAL SECOND 319A ; [.CC59.0020.0014] # IDEOGRAPHIC ANNOTATION SECOND MARK 3288 ; [.A95D.0020.0006] # CIRCLED IDEOGRAPH NINE 2F05 ; [.AC3C.0020.0004] # KANGXI RADICAL HOOK 2F06 ; [.CBCD.0020.0004] # KANGXI RADICAL TWO 3193 ; [.CBCD.0020.0014] # IDEOGRAPHIC ANNOTATION TWO MARK 3281 ; [.CBCD.0020.0006] # CIRCLED IDEOGRAPH TWO 1F214 ; [.CBCD.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C 3284 ; [.D1A9.0020.0006] # CIRCLED IDEOGRAPH FIVE 2F07 ; [.90D4.0020.0004] # KANGXI RADICAL LID 1F218 ; [.A8BE.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4 2F08 ; [.C2EF.0020.0004] # KANGXI RADICAL MAN 319F ; [.C2EF.0020.0014] # IDEOGRAPHIC ANNOTATION MAN MARK 32AD ; [.ADC1.0020.0006] # CIRCLED IDEOGRAPH ENTERPRISE 32A1 ; [.B3A8.0020.0006] # CIRCLED IDEOGRAPH REST 329D ; [.CE97.0020.0006] # CIRCLED IDEOGRAPH EXCELLENT 2F09 ; [.CBA3.0020.0004] # KANGXI RADICAL LEGS 2F0A ; [.C376.0020.0004] # KANGXI RADICAL ENTER 2F0B ; [.8001.0020.0004] # KANGXI RADICAL EIGHT 3287 ; [.8001.0020.0006] # CIRCLED IDEOGRAPH EIGHT 3285 ; [.9953.0020.0006] # CIRCLED IDEOGRAPH SIX 2F0C ; [.AD19.0020.0004] # KANGXI RADICAL DOWN BOX 1F21E ; [.C4C2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-518D 2F0D ; [.8867.0020.0004] # KANGXI RADICAL COVER 32A2 ; [.B2E9.0020.0006] # CIRCLED IDEOGRAPH COPY 2F0E ; [.834E.0020.0004] # KANGXI RADICAL ICE 2F0F ; [.A74C.0020.0004] # KANGXI RADICAL TABLE 2F10 ; [.AF59.0020.0004] # KANGXI RADICAL OPEN BOX 2F11 ; [.8C87.0020.0004] # KANGXI RADICAL KNIFE 1F220 ; [.BE3B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-521D 1F21C ; [.AF3B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-524D 1F239 ; [.9C7B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5272 2F12 ; [.9804.0020.0004] # KANGXI RADICAL POWER 3298 ; [.969E.0020.0006] # CIRCLED IDEOGRAPH LABOR 2F13 ; [.811A.0020.0004] # KANGXI RADICAL WRAP 2F14 ; [.81FC.0020.0004] # KANGXI RADICAL SPOON 2F15 ; [.8A9F.0020.0004] # KANGXI RADICAL RIGHT OPEN BOX 2F16 ; [.B224.0020.0004] # KANGXI RADICAL HIDING ENCLOSURE 32A9 ; [.CBE1.0020.0006] # CIRCLED IDEOGRAPH MEDICINE 2F17 ; [.BF85.0020.0004] # KANGXI RADICAL TEN 3038 ; [.BF85.0020.0004] # HANGZHOU NUMERAL TEN 3289 ; [.BF85.0020.0006] # CIRCLED IDEOGRAPH TEN 3039 ; [.954F.0020.0004] # HANGZHOU NUMERAL TWENTY 303A ; [.C861.0020.0004] # HANGZHOU NUMERAL THIRTY 32AF ; [.B2BC.0020.0006] # CIRCLED IDEOGRAPH ALLIANCE 2F18 ; [.80B6.0020.0004] # KANGXI RADICAL DIVINATION 2F19 ; [.A84F.0020.0004] # KANGXI RADICAL SEAL 329E ; [.D06B.0020.0006] # CIRCLED IDEOGRAPH PRINT 2F1A ; [.BDC0.0020.0004] # KANGXI RADICAL CLIFF 2F1B ; [.C7F7.0020.0004] # KANGXI RADICAL PRIVATE 2F1C ; [.CEE0.0020.0004] # KANGXI RADICAL AGAIN 1F212 ; [.C28A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53CC 2F1D ; [.A070.0020.0004] # KANGXI RADICAL MOUTH 1F251 ; [.A007.0020.0006] # CIRCLED IDEOGRAPH ACCEPT 32A8 ; [.CEE1.0020.0006] # CIRCLED IDEOGRAPH RIGHT 1F22E ; [.CEE1.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-53F3 1F234 ; [.A232.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5408 3294 ; [.892A.0020.0006] # CIRCLED IDEOGRAPH NAME 1F225 ; [.BEBE.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5439 3244 ; [.D3B7.0020.0006] # CIRCLED IDEOGRAPH QUESTION 1F23A ; [.D120.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-55B6 2F1E ; [.D27D.0020.0004] # KANGXI RADICAL ENCLOSURE 3195 ; [.C82E.0020.0014] # IDEOGRAPHIC ANNOTATION FOUR MARK 3283 ; [.C82E.0020.0006] # CIRCLED IDEOGRAPH FOUR 2F1F ; [.92EA.0020.0004] # KANGXI RADICAL EARTH 328F ; [.92EA.0020.0006] # CIRCLED IDEOGRAPH EARTH 319E ; [.8C4B.0020.0014] # IDEOGRAPHIC ANNOTATION EARTH MARK 2F20 ; [.BFB5.0020.0004] # KANGXI RADICAL SCHOLAR 1F224 ; [.C1A8.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-58F0 2F21 ; [.B740.0020.0004] # KANGXI RADICAL GO 2F22 ; [.C986.0020.0004] # KANGXI RADICAL GO SLOWLY 2F23 ; [.B165.0020.0004] # KANGXI RADICAL EVENING 1F215 ; [.8F35.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-591A 32B0 ; [.CDD7.0020.0006] # CIRCLED IDEOGRAPH NIGHT 2F24 ; [.8C39.0020.0004] # KANGXI RADICAL BIG 337D ; [.8C39.0020.001C][.BA1E.0020.001C] # SQUARE ERA NAME TAISYOU 319D ; [.923B.0020.0014] # IDEOGRAPHIC ANNOTATION HEAVEN MARK 1F217 ; [.923B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5929 2F25 ; [.95CC.0020.0004] # KANGXI RADICAL WOMAN 329B ; [.95CC.0020.0006] # CIRCLED IDEOGRAPH FEMALE 2F26 ; [.C466.0020.0004] # KANGXI RADICAL CHILD 1F211 ; [.C456.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5B57 32AB ; [.B5F0.0020.0006] # CIRCLED IDEOGRAPH STUDY 2F27 ; [.88BF.0020.0004] # KANGXI RADICAL ROOF 32AA ; [.C5ED.0020.0006] # CIRCLED IDEOGRAPH RELIGION 2F28 ; [.C7B4.0020.0004] # KANGXI RADICAL INCH 2F29 ; [.B385.0020.0004] # KANGXI RADICAL SMALL 2F2A ; [.CE9E.0020.0004] # KANGXI RADICAL LAME 2F2B ; [.BF5B.0020.0004] # KANGXI RADICAL CORPSE 2F2C ; [.BC63.0020.0004] # KANGXI RADICAL SPROUT 2F2D ; [.C0C5.0020.0004] # KANGXI RADICAL MOUNTAIN 2F2E ; [.BED1.0020.0004] # KANGXI RADICAL RIVER 2F2F ; [.9F9E.0020.0004] # KANGXI RADICAL WORK 32A7 ; [.C593.0020.0006] # CIRCLED IDEOGRAPH LEFT 1F22C ; [.C593.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6 2F30 ; [.A74D.0020.0004] # KANGXI RADICAL ONESELF 2F31 ; [.AA6D.0020.0004] # KANGXI RADICAL TURBAN 2F32 ; [.9D7F.0020.0004] # KANGXI RADICAL DRY 337B ; [.85BF.0020.001C][.BDFC.0020.001C] # SQUARE ERA NAME HEISEI 2F33 ; [.CE11.0020.0004] # KANGXI RADICAL SHORT THREAD 3245 ; [.CEE2.0020.0006] # CIRCLED IDEOGRAPH KINDERGARTEN 2F34 ; [.9F8F.0020.0004] # KANGXI RADICAL DOTTED CLIFF 2F35 ; [.D04E.0020.0004] # KANGXI RADICAL LONG STRIDE 2F36 ; [.9FBB.0020.0004] # KANGXI RADICAL TWO HANDS 2F37 ; [.CC86.0020.0004] # KANGXI RADICAL SHOOT 2F38 ; [.9F9F.0020.0004] # KANGXI RADICAL BOW 2F39 ; [.A763.0020.0004] # KANGXI RADICAL SNOUT 2F3A ; [.C0C6.0020.0004] # KANGXI RADICAL BRISTLE 2F3B ; [.BBF9.0020.0004] # KANGXI RADICAL STEP 1F21D ; [.A30D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C 1F250 ; [.8C4D.0020.0006] # CIRCLED IDEOGRAPH ADVANTAGE 2F3C ; [.B4AB.0020.0004] # KANGXI RADICAL HEART 2F3D ; [.9C6C.0020.0004] # KANGXI RADICAL HALBERD 2F3E ; [.A40C.0020.0004] # KANGXI RADICAL DOOR 2F3F ; [.C0AE.0020.0004] # KANGXI RADICAL HAND 1F210 ; [.C0AE.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-624B 1F231 ; [.8C38.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6253 1F227 ; [.90D6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6295 1F22F ; [.B753.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6307 1F228 ; [.838E.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6355 2F40 ; [.B6EB.0020.0004] # KANGXI RADICAL BRANCH 2F41 ; [.85EC.0020.0004] # KANGXI RADICAL RAP 2F42 ; [.D38D.0020.0004] # KANGXI RADICAL SCRIPT 3246 ; [.D38D.0020.0006] # CIRCLED IDEOGRAPH SCHOOL 2F43 ; [.8CCF.0020.0004] # KANGXI RADICAL DIPPER 1F21B ; [.9905.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6599 2F44 ; [.AA6F.0020.0004] # KANGXI RADICAL AXE 1F21F ; [.B4BC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-65B0 2F45 ; [.8AA0.0020.0004] # KANGXI RADICAL SQUARE 2F46 ; [.D18A.0020.0004] # KANGXI RADICAL NOT 2F47 ; [.C2A4.0020.0004] # KANGXI RADICAL SUN 3290 ; [.C2A4.0020.0006] # CIRCLED IDEOGRAPH SUN 337E ; [.892B.0020.001C][.B773.0020.001C] # SQUARE ERA NAME MEIZI 1F219 ; [.D15D.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6620 337C ; [.B884.0020.001C][.A237.0020.001C] # SQUARE ERA NAME SYOUWA 2F48 ; [.D533.0020.0004] # KANGXI RADICAL SAY 2F49 ; [.D53C.0020.0004] # KANGXI RADICAL MOON 328A ; [.D53C.0020.0006] # CIRCLED IDEOGRAPH MOON 1F237 ; [.D53C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6708 3292 ; [.CEC7.0020.0006] # CIRCLED IDEOGRAPH HAVE 1F236 ; [.CEC7.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6709 2F4A ; [.895F.0020.0004] # KANGXI RADICAL TREE 328D ; [.895F.0020.0006] # CIRCLED IDEOGRAPH WOOD 3291 ; [.BA36.0020.0006] # CIRCLED IDEOGRAPH STOCK 337F ; [.BA36.0020.001C][.BFBF.0020.001C][.A51A.0020.001C][.C05E.0020.001C] # SQUARE CORPORATION 2F4B ; [.AF68.0020.0004] # KANGXI RADICAL LACK 2F4C ; [.B741.0020.0004] # KANGXI RADICAL STOP 32A3 ; [.BA1E.0020.0006] # CIRCLED IDEOGRAPH CORRECT 2F4D ; [.8C53.0020.0004] # KANGXI RADICAL DEATH 2F4E ; [.C1D9.0020.0004] # KANGXI RADICAL WEAPON 2F4F ; [.D18B.0020.0004] # KANGXI RADICAL DO NOT 2E9F ; [.894D.0020.0004] # CJK RADICAL MOTHER 2F50 ; [.81FD.0020.0004] # KANGXI RADICAL COMPARE 2F51 ; [.8727.0020.0004] # KANGXI RADICAL FUR 2F52 ; [.BFB6.0020.0004] # KANGXI RADICAL CLAN 2F53 ; [.ADDA.0020.0004] # KANGXI RADICAL STEAM 2F54 ; [.C26E.0020.0004] # KANGXI RADICAL WATER 328C ; [.C26E.0020.0006] # CIRCLED IDEOGRAPH WATER 329F ; [.BA84.0020.0006] # CIRCLED IDEOGRAPH ATTENTION 1F235 ; [.8793.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6E80 1F226 ; [.CF75.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-6F14 2F55 ; [.A48C.0020.0004] # KANGXI RADICAL FIRE 328B ; [.A48C.0020.0006] # CIRCLED IDEOGRAPH FIRE 1F21A ; [.D19A.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7121 2F56 ; [.B88D.0020.0004] # KANGXI RADICAL CLAW 2F57 ; [.8BC3.0020.0004] # KANGXI RADICAL FATHER 2F58 ; [.CE21.0020.0004] # KANGXI RADICAL DOUBLE X 2F59 ; [.8453.0020.0004] # KANGXI RADICAL HALF TREE TRUNK 2F5A ; [.8593.0020.0004] # KANGXI RADICAL SLICE 2F5B ; [.CD78.0020.0004] # KANGXI RADICAL FANG 2F5C ; [.9526.0020.0004] # KANGXI RADICAL COW 3295 ; [.9060.0020.0006] # CIRCLED IDEOGRAPH SPECIAL 2F5D ; [.B123.0020.0004] # KANGXI RADICAL DOG 2F5E ; [.B63A.0020.0004] # KANGXI RADICAL PROFOUND 2F5F ; [.D4A7.0020.0004] # KANGXI RADICAL JADE 2F60 ; [.9E4D.0020.0004] # KANGXI RADICAL MELON 2F61 ; [.D216.0020.0004] # KANGXI RADICAL TILE 2F62 ; [.9D4E.0020.0004] # KANGXI RADICAL SWEET 2F63 ; [.C1A6.0020.0004] # KANGXI RADICAL LIFE 1F222 ; [.C1A6.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-751F 2F64 ; [.D68B.0020.0004] # KANGXI RADICAL USE 2F65 ; [.9245.0020.0004] # KANGXI RADICAL FIELD 3199 ; [.A814.0020.0014] # IDEOGRAPHIC ANNOTATION FIRST MARK 1F238 ; [.C125.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7533 329A ; [.9459.0020.0006] # CIRCLED IDEOGRAPH MALE 2F66 ; [.852E.0020.0004] # KANGXI RADICAL BOLT OF CLOTH 2F67 ; [.93F9.0020.0004] # KANGXI RADICAL SICKNESS 2F68 ; [.8046.0020.0004] # KANGXI RADICAL DOTTED TENT 2F69 ; [.80BD.0020.0004] # KANGXI RADICAL WHITE 2F6A ; [.8504.0020.0004] # KANGXI RADICAL SKIN 2F6B ; [.890B.0020.0004] # KANGXI RADICAL DISH 32AC ; [.A9B3.0020.0006] # CIRCLED IDEOGRAPH SUPERVISE 2F6C ; [.8962.0020.0004] # KANGXI RADICAL EYE 2F6D ; [.8728.0020.0004] # KANGXI RADICAL SPEAR 2F6E ; [.BFA9.0020.0004] # KANGXI RADICAL ARROW 2F6F ; [.BF87.0020.0004] # KANGXI RADICAL STONE 2F70 ; [.BFBD.0020.0004] # KANGXI RADICAL SPIRIT 3293 ; [.C05E.0020.0006] # CIRCLED IDEOGRAPH SOCIETY 3297 ; [.BA90.0020.0006] # CIRCLED IDEOGRAPH CONGRATULATION 1F232 ; [.AAB2.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7981 2F71 ; [.C2BD.0020.0004] # KANGXI RADICAL TRACK 2F72 ; [.A231.0020.0004] # KANGXI RADICAL GRAIN 3299 ; [.8871.0020.0006] # CIRCLED IDEOGRAPH SECRET 2F73 ; [.B5ED.0020.0004] # KANGXI RADICAL CAVE 1F233 ; [.A211.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A 2F74 ; [.9808.0020.0004] # KANGXI RADICAL STAND 2F75 ; [.BA53.0020.0004] # KANGXI RADICAL BAMBOO 3247 ; [.BA0D.0020.0006] # CIRCLED IDEOGRAPH KOTO 2F76 ; [.8856.0020.0004] # KANGXI RADICAL RICE 2F77 ; [.8868.0020.0004] # KANGXI RADICAL SILK 1F221 ; [.BB7F.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-7D42 2F78 ; [.89F6.0020.0004] # KANGXI RADICAL JAR 2F79 ; [.D3D1.0020.0004] # KANGXI RADICAL NET 2F7A ; [.D08F.0020.0004] # KANGXI RADICAL SHEEP 2F7B ; [.D47D.0020.0004] # KANGXI RADICAL FEATHER 2F7C ; [.96B7.0020.0004] # KANGXI RADICAL OLD 2F7D ; [.CBA4.0020.0004] # KANGXI RADICAL AND 2F7E ; [.966B.0020.0004] # KANGXI RADICAL PLOW 2F7F ; [.CBBF.0020.0004] # KANGXI RADICAL EAR 2F80 ; [.D4AA.0020.0004] # KANGXI RADICAL BRUSH 2F81 ; [.C2D4.0020.0004] # KANGXI RADICAL MEAT 2F82 ; [.BD5B.0020.0004] # KANGXI RADICAL MINISTER 2F83 ; [.C457.0020.0004] # KANGXI RADICAL SELF 2F84 ; [.B766.0020.0004] # KANGXI RADICAL ARRIVE 2F85 ; [.A96D.0020.0004] # KANGXI RADICAL MORTAR 2F86 ; [.C053.0020.0004] # KANGXI RADICAL TONGUE 2F87 ; [.BEE4.0020.0004] # KANGXI RADICAL OPPOSE 2F88 ; [.B8B0.0020.0004] # KANGXI RADICAL BOAT 2F89 ; [.9D94.0020.0004] # KANGXI RADICAL STOPPING 2F8A ; [.C870.0020.0004] # KANGXI RADICAL COLOR 2F8B ; [.C6C2.0020.0004] # KANGXI RADICAL GRASS 2F8C ; [.A3B4.0020.0004] # KANGXI RADICAL TIGER 2F8D ; [.BF4A.0020.0004] # KANGXI RADICAL INSECT 2F8E ; [.B604.0020.0004] # KANGXI RADICAL BLOOD 2F8F ; [.B543.0020.0004] # KANGXI RADICAL WALK ENCLOSURE 2F90 ; [.CBE0.0020.0004] # KANGXI RADICAL CLOTHES 2F91 ; [.CD9C.0020.0004] # KANGXI RADICAL WEST 2F92 ; [.AA1C.0020.0004] # KANGXI RADICAL SEE 2F93 ; [.A8EB.0020.0004] # KANGXI RADICAL HORN 1F216 ; [.A898.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-89E3 2F94 ; [.CF21.0020.0004] # KANGXI RADICAL SPEECH 2F95 ; [.9E07.0020.0004] # KANGXI RADICAL VALLEY 2F96 ; [.8CD0.0020.0004] # KANGXI RADICAL BEAN 2F97 ; [.BFAB.0020.0004] # KANGXI RADICAL PIG 2F98 ; [.B76C.0020.0004] # KANGXI RADICAL BADGER 2F99 ; [.80EB.0020.0004] # KANGXI RADICAL SHELL 3296 ; [.C69F.0020.0006] # CIRCLED IDEOGRAPH FINANCIAL 1F223 ; [.8A4B.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9 32AE ; [.C421.0020.0006] # CIRCLED IDEOGRAPH RESOURCE 2F9A ; [.BBFE.0020.0004] # KANGXI RADICAL RED 2F9B ; [.C50C.0020.0004] # KANGXI RADICAL RUN 1F230 ; [.C50C.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-8D70 2F9C ; [.C571.0020.0004] # KANGXI RADICAL FOOT 2F9D ; [.C129.0020.0004] # KANGXI RADICAL BODY 2F9E ; [.BC58.0020.0004] # KANGXI RADICAL CART 2F9F ; [.B4AE.0020.0004] # KANGXI RADICAL BITTER 2FA0 ; [.BD5F.0020.0004] # KANGXI RADICAL MORNING 2FA1 ; [.BEA0.0020.0004] # KANGXI RADICAL WALK 1F22B ; [.CEBC.0020.001C] # SQUARED CJK UNIFIED IDEOGRAPH-904A 329C ; [.BFFC.0020.0006] # CIRCLED IDEOGRAPH SUITABLE 2FA2 ; [.CC9C.0020.0004] # KANGXI RADICAL CITY 2FA3 ; [.CECA.0020.0004] # KANGXI RADICAL WINE 2FA4 ; [.8308.0020.0004] # KANGXI RADICAL DISTINGUISH 2FA5 ; [.97EB.0020.0004] # KANGXI RADICAL VILLAGE 2FA6 ; [.AA72.0020.0004] # KANGXI RADICAL GOLD 328E ; [.AA72.0020.0006] # CIRCLED IDEOGRAPH METAL 2FA7 ; [.B9D1.0020.0004] # KANGXI RADICAL LONG 2FA8 ; [.87B7.0020.0004] # KANGXI RADICAL GATE 2FA9 ; [.8BCB.0020.0004] # KANGXI RADICAL MOUND 2FAA ; [.9819.0020.0004] # KANGXI RADICAL SLAVE 2FAB ; [.BAFD.0020.0004] # KANGXI RADICAL SHORT TAILED BIRD 2FAC ; [.D47F.0020.0004] # KANGXI RADICAL RAIN 2FAD ; [.B01B.0020.0004] # KANGXI RADICAL BLUE 2FAE ; [.89A9.0020.0004] # KANGXI RADICAL WRONG 2FAF ; [.88EB.0020.0004] # KANGXI RADICAL FACE 2FB0 ; [.9C8F.0020.0004] # KANGXI RADICAL LEATHER 2FB1 ; [.D288.0020.0004] # KANGXI RADICAL TANNED LEATHER 2FB2 ; [.A965.0020.0004] # KANGXI RADICAL LEEK 2FB3 ; [.CFF8.0020.0004] # KANGXI RADICAL SOUND 2FB4 ; [.CDDC.0020.0004] # KANGXI RADICAL LEAF 32A0 ; [.B520.0020.0006] # CIRCLED IDEOGRAPH ITEM 2FB5 ; [.8AD5.0020.0004] # KANGXI RADICAL WIND 2FB6 ; [.89AA.0020.0004] # KANGXI RADICAL FLY 2FB7 ; [.BF93.0020.0004] # KANGXI RADICAL EAT 2FB8 ; [.C0B1.0020.0004] # KANGXI RADICAL HEAD 2FB9 ; [.B4E1.0020.0004] # KANGXI RADICAL FRAGRANT 2FBA ; [.8637.0020.0004] # KANGXI RADICAL HORSE 2FBB ; [.9E10.0020.0004] # KANGXI RADICAL BONE 2FBC ; [.9CEC.0020.0004] # KANGXI RADICAL TALL 2FBD ; [.82AD.0020.0004] # KANGXI RADICAL HAIR 2FBE ; [.8CD4.0020.0004] # KANGXI RADICAL FIGHT 2FBF ; [.BDCE.0020.0004] # KANGXI RADICAL SACRIFICIAL WINE 2FC0 ; [.9C94.0020.0004] # KANGXI RADICAL CAULDRON 2FC1 ; [.9EF1.0020.0004] # KANGXI RADICAL GHOST 2FC2 ; [.D436.0020.0004] # KANGXI RADICAL FISH 2FC3 ; [.9519.0020.0004] # KANGXI RADICAL BIRD 2FC4 ; [.9AD5.0020.0004] # KANGXI RADICAL SALT 2FC5 ; [.9AFD.0020.0004] # KANGXI RADICAL DEER 2FC6 ; [.86CC.0020.0004] # KANGXI RADICAL WHEAT 2FC7 ; [.862D.0020.0004] # KANGXI RADICAL HEMP 2FC8 ; [.A607.0020.0004] # KANGXI RADICAL YELLOW 2FC9 ; [.C20C.0020.0004] # KANGXI RADICAL MILLET 2FCA ; [.A2AD.0020.0004] # KANGXI RADICAL BLACK 2FCB ; [.B762.0020.0004] # KANGXI RADICAL EMBROIDERY 2FCC ; [.88E4.0020.0004] # KANGXI RADICAL FROG 2FCD ; [.8ED2.0020.0004] # KANGXI RADICAL TRIPOD 2FCE ; [.9E1D.0020.0004] # KANGXI RADICAL DRUM 2FCF ; [.C210.0020.0004] # KANGXI RADICAL RAT 2FD0 ; [.81FB.0020.0004] # KANGXI RADICAL NOSE 2FD1 ; [.ADA1.0020.0004] # KANGXI RADICAL EVEN 2FD2 ; [.BBF7.0020.0004] # KANGXI RADICAL TOOTH 2FD3 ; [.9BE4.0020.0004] # KANGXI RADICAL DRAGON 2FD4 ; [.9ED7.0020.0004] # KANGXI RADICAL TURTLE 2EF3 ; [.9EB8.0020.0004] # CJK RADICAL C-SIMPLIFIED TURTLE 2FD5 ; [.D560.0020.0004] # KANGXI RADICAL FLUTE F967 ; [.8392.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.836F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.BEEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 2F801 ; [.D334.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.8CEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E 2F800 ; [.980B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F800 2F802 ; [.CC07.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F802 F91B ; [.9BA8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B F9BA ; [.9615.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA F977 ; [.9A32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 F9FD ; [.C151.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD 2F819 ; [.834F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F819 F9A8 ; [.9A9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 2F804 ; [.94AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F804 FA73 ; [.B546.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA73 F92D ; [.9619.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D F9B5 ; [.9811.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 FA30 ; [.D1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 2F805 ; [.D1B4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 2F806 ; [.935A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806 F965 ; [.830C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 2F807 ; [.8373.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807 F9D4 ; [.9BB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 2F808 ; [.C477.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F808 2F809 ; [.80FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 2F80B ; [.B522.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B F9BB ; [.98D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB FA31 ; [.C90E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 2F80A ; [.C90E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A FA0C ; [.D1CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C FA74 ; [.BF37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 FA32 ; [.88D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 2F80E ; [.88D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E 2F80F ; [.92F0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80F 2F810 ; [.A627.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F810 2F814 ; [.9422.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814 FA72 ; [.B0F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.9A28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 F9D1 ; [.9953.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 2F811 ; [.ABF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.A7A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F815 ; [.C4C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 2F8D2 ; [.874F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 2F8D3 ; [.88DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 2F817 ; [.C3F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 2F818 ; [.D571.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 2F81A ; [.8FE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A FA71 ; [.A1F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA71 2F81B ; [.A1F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81B F92E ; [.9793.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E F979 ; [.9A18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 F955 ; [.9A51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.99F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 FA15 ; [.B1BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15 2F81D ; [.AF59.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F81E ; [.C305.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.AE24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 2F850 ; [.AE24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 F99C ; [.98A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C F9DD ; [.980C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD F9FF ; [.C66A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF 2F820 ; [.A014.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 2F821 ; [.9B64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F821 2F822 ; [.9C7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 2F823 ; [.BD2E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823 F9C7 ; [.9926.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 F98A ; [.9804.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A F99D ; [.98A2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D 2F992 ; [.969D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F992 FA76 ; [.D671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.D671.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.88D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.964C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 F92F ; [.96A5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.AFAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.AFAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 F97F ; [.985C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F FA77 ; [.C096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 2F828 ; [.C096.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 2F829 ; [.811B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 2F82A ; [.C7B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82A F963 ; [.80E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 2F82B ; [.80E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B F9EB ; [.94CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F82C ; [.A518.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.80D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.80D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D 2F82E ; [.807E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F82F ; [.A6FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.9BA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F830 ; [.A70A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830 2F831 ; [.B020.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 2F832 ; [.B020.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.B020.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 F96B ; [.C6D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F836 ; [.A6FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 2F837 ; [.C8D2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 F906 ; [.ABEE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 2F839 ; [.A922.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 2F83A ; [.BBFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A 2F83B ; [.CE13.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83B F9DE ; [.9809.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.9A03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED 2F83D ; [.B16A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D F980 ; [.9C24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.BDFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.B8B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F 2F83C ; [.B473.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83C 2F840 ; [.CA56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.CF9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E 2F841 ; [.8891.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F841 2F842 ; [.9144.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 2F843 ; [.ADCE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843 FA79 ; [.90B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA79 2F844 ; [.B415.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 2F845 ; [.C100.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 2F846 ; [.C100.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 F90B ; [.95E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B FA7A ; [.A52B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A 2F847 ; [.A52B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 FA36 ; [.A22D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 FA78 ; [.A22D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 2F848 ; [.BBB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 2F849 ; [.B7F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F849 FA0D ; [.A422.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0D 2F84A ; [.CE34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84A FA7B ; [.D21D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B FA37 ; [.912C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 2F84C ; [.912C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C 2F84E ; [.A2BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84E FA38 ; [.ADFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.847B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F F9A9 ; [.9A44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.92DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F84D ; [.92DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84D 2F855 ; [.B548.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 2F852 ; [.BE03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 2F853 ; [.B720.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 2F854 ; [.92F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F854 2F857 ; [.8151.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 2F856 ; [.C642.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F856 FA39 ; [.85EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39 FA10 ; [.BB92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 FA7C ; [.BB92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C F96C ; [.C892.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C FA3A ; [.86A0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A 2F858 ; [.8E0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F858 FA7D ; [.8A7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D F94A ; [.9679.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A F942 ; [.9C0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 2F851 ; [.BB63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F851 2F85A ; [.86C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85A 2F85B ; [.A3DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85B 2F85C ; [.8AFA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C 2F85D ; [.8F35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D 2F85E ; [.882A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E FA7E ; [.CF5B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E F90C ; [.9410.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C F909 ; [.ADE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 FA7F ; [.8193.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F 2F85F ; [.C04A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F F981 ; [.95CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 2F865 ; [.8598.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F865 2F862 ; [.A6AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 2F863 ; [.D42A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863 2F864 ; [.935B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864 FA80 ; [.8232.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 2F866 ; [.8BDA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 2F986 ; [.D15F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 2F869 ; [.C2B1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869 FA81 ; [.C657.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81 2F86A ; [.9741.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A 2F86B ; [.9741.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B FA04 ; [.B874.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 2F86D ; [.D575.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D 2F86E ; [.B7AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E F95F ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F F9AA ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA 2F86F ; [.9570.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F F9BC ; [.98DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F870 ; [.8143.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F870 2F872 ; [.C0B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F872 2F873 ; [.AAD5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F873 2F875 ; [.CE9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F875 F9BD ; [.9522.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.92CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 F94B ; [.9C34.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B FA3B ; [.C71D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B F9DF ; [.9C36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF FA3C ; [.BC63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3C 2F878 ; [.BC63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F878 2F87A ; [.AEFF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87A 2F879 ; [.B3C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879 F9D5 ; [.9BB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 2F87C ; [.CF66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87C F921 ; [.970A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 2F87F ; [.C416.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87F 2F87E ; [.8E87.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F87E 2F880 ; [.BD30.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F880 2F9F4 ; [.B1BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F4 F9AB ; [.9A9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB 2F881 ; [.B68C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 2F882 ; [.BC98.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 2F884 ; [.B6C0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 2F885 ; [.C26F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885 2F886 ; [.8758.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 2F887 ; [.8A7B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F887 F98E ; [.9537.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E FA01 ; [.8F28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 2F88B ; [.8372.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88B 2F88C ; [.8233.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C 2F88D ; [.C22B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D F9A2 ; [.996E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 F928 ; [.9766.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 2F88E ; [.9766.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E FA82 ; [.CAF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA82 FA0B ; [.A11E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B FA83 ; [.CCFF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA83 F982 ; [.9AB9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 2F890 ; [.9FBB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F890 F943 ; [.95C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 2F894 ; [.9097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894 2F895 ; [.9097.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895 2F874 ; [.8D4C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F874 2F899 ; [.B544.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 FA84 ; [.C6A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 2F89A ; [.8E55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A F9D8 ; [.9C41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 2F89C ; [.8FF3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89C F966 ; [.8BDF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.CE36.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F89D ; [.C2FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.B768.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E F9A3 ; [.9551.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 2F89F ; [.A1E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89F F960 ; [.958F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 F9AC ; [.9965.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC FA6B ; [.A524.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6B 2F8A0 ; [.D572.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 FA3D ; [.A510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D 2F8A3 ; [.A510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 2F8A5 ; [.8FBB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 FA86 ; [.D3D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 F9B9 ; [.CA70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 FA88 ; [.D4DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 F9D9 ; [.9846.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 2F8A6 ; [.C64C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 2F8A7 ; [.A5FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 2F8A9 ; [.A5FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 FA87 ; [.C178.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA87 2F8A8 ; [.C178.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A8 FA8A ; [.CB23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A FA3E ; [.A03D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E 2F8AA ; [.96E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA FA3F ; [.C55C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F FA89 ; [.C55C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 2F8AB ; [.C55C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB F98F ; [.997C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F 2F8AD ; [.8A96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD 2F8AE ; [.C6EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE 2F8AC ; [.B498.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC 2F8AF ; [.8803.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF FA40 ; [.BE2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 FA8B ; [.BE2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B 2F8B0 ; [.BE2C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 F90D ; [.9742.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D 2F8B1 ; [.9742.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 F990 ; [.99C4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 2F8B2 ; [.BDFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 2F8B3 ; [.A802.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B3 F9D2 ; [.9B16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 FA8C ; [.8C7A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F8B4 ; [.A0E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B4 2F8B5 ; [.814B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 F925 ; [.95DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 F95B ; [.93DB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B FA02 ; [.9037.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 2F8B6 ; [.801D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 2F8BA ; [.8599.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BA F973 ; [.C00F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 2F8B9 ; [.D348.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 2F8B7 ; [.ACA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 2F8BB ; [.C05A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB F9A4 ; [.9540.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 2F8BC ; [.C8AF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC F975 ; [.CA67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 2F8C1 ; [.CF63.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 FA8D ; [.D43E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D 2F8C0 ; [.CF39.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C0 2F8BD ; [.A70F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BD FA8E ; [.C8BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E 2F8BF ; [.AAB0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF FA8F ; [.8365.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8F 2F8C3 ; [.865D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 2F8C6 ; [.A904.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C6 2F8C4 ; [.AB0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C4 F991 ; [.9546.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 2F8C5 ; [.A4F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 F930 ; [.9ADE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930 FA41 ; [.8915.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.8915.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.CAF2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 2F8C9 ; [.AB74.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.C23A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 F9BE ; [.9905.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE F983 ; [.9C2B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 FA42 ; [.A775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA42 2F8CB ; [.A789.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB F9E0 ; [.CCA3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 2F8CD ; [.AAA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD FA12 ; [.B034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 FA91 ; [.B034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 F9C5 ; [.D5E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 FA43 ; [.C20B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 2F8CF ; [.C20B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF 2F8D5 ; [.AAB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D5 FA06 ; [.8156.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 F98B ; [.9855.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B F901 ; [.9DDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.C1E5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.C5BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 F929 ; [.9775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 FA92 ; [.9775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 2F8D8 ; [.9775.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 FA93 ; [.D3E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.D3E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 2F8DA ; [.C5F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DA F9E1 ; [.9897.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.82A9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.B9DA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 2F8DB ; [.ADC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB F9C8 ; [.BCDE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8 2F8E0 ; [.A6A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E0 F9F4 ; [.99CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 F9C9 ; [.9944.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 2F8DF ; [.9EAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DF F9DA ; [.9826.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA 2F8E5 ; [.8196.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E5 2F8E1 ; [.C902.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E1 F97A ; [.9A19.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A FA44 ; [.86DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 2F8E2 ; [.86DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 2F8E4 ; [.CAEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E4 F9E2 ; [.979F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 2F8E6 ; [.C417.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E6 2F8E8 ; [.B7F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 2F8E9 ; [.CE3D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E9 2F8EA ; [.9CE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA F914 ; [.9610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 F95C ; [.9610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C F9BF ; [.9610.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF F94C ; [.96E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C 2F8EB ; [.C052.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EB F931 ; [.9AE5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 2F8ED ; [.B7D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED F91D ; [.9726.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D 2F8EF ; [.C667.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF 2F8F1 ; [.B58D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 2F8F3 ; [.C9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 F98C ; [.9856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C FA95 ; [.8C53.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA95 2F8F4 ; [.D380.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F4 F9A5 ; [.99BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5 F970 ; [.C025.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 FA96 ; [.C025.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 2F8F5 ; [.C025.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 2F8F6 ; [.AE8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F6 2F8FA ; [.8A3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA 2F8FE ; [.AF01.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FE F972 ; [.BD5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 2F8FC ; [.CF25.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC F968 ; [.886C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 2F8FD ; [.8194.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FD F9E3 ; [.9490.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 2F8FF ; [.D193.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FF F915 ; [.9B72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 FA05 ; [.900E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 2F907 ; [.85C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F907 2F900 ; [.83F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 F9CA ; [.9912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA FA97 ; [.9912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 2F902 ; [.9912.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 2F903 ; [.A2D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 F92A ; [.9781.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A FA45 ; [.A29A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 2F901 ; [.A29A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 2F904 ; [.AAA7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 2F905 ; [.94E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 F9F5 ; [.99D1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 F94D ; [.9688.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D F9D6 ; [.9BB8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 2F90E ; [.CF08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E FA46 ; [.BA70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 2F908 ; [.9DB6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 2F909 ; [.CF0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 F9CB ; [.990C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB F9EC ; [.94CE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC 2F90C ; [.8E88.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90C FA99 ; [.C419.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 2F90B ; [.C419.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B F904 ; [.A44F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 FA98 ; [.D03B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA98 F94E ; [.96FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E FA47 ; [.A368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 FA9A ; [.A368.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A F992 ; [.9974.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 2F90F ; [.BCA0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F 2F912 ; [.8A7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 F922 ; [.9751.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 F984 ; [.9C51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 2F915 ; [.D142.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 FA9B ; [.AB83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F914 ; [.AB83.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914 2F913 ; [.D563.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F913 2F917 ; [.AF57.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F917 2F835 ; [.A4D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 2F919 ; [.BB35.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F919 2F918 ; [.C4B5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.B774.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.9126.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A F99F ; [.98B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.96C6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 2F91C ; [.8FAD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91C F993 ; [.99B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 FA48 ; [.BA72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 FA9C ; [.BA72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C 2F91E ; [.C7CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91E F9C0 ; [.98E3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 F9EE ; [.99E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE F932 ; [.9AC1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 F91E ; [.9753.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F920 ; [.C7A8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 FA49 ; [.B8AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA49 FA9E ; [.AC81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.AC81.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 2F922 ; [.B809.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F922 F946 ; [.969F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 2F924 ; [.B19A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 2F925 ; [.810B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F925 FA9F ; [.8A3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F F9FA ; [.BB66.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA F92B ; [.975E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B FA16 ; [.BA3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 FAA0 ; [.BA3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 F9A7 ; [.98C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 2F928 ; [.9034.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 F961 ; [.9C43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.9C43.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F929 ; [.D3CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 2F92B ; [.D544.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92B F9AD ; [.9A4F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.9B76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 F9E4 ; [.97F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 F9CC ; [.9914.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC FA4A ; [.C58E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A 2F92E ; [.8C72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92E 2F92F ; [.D44E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F F9AE ; [.D131.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE FAA1 ; [.B9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1 2F930 ; [.B9AB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930 2F931 ; [.C979.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F931 F994 ; [.999F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994 F9EF ; [.99E1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF 2F932 ; [.B15E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 FAA2 ; [.C64D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA2 2F934 ; [.C397.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F934 FAA3 ; [.A462.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA3 2F936 ; [.C4B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F936 F9CD ; [.9915.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD F976 ; [.CA68.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.CCD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.CCD0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 F9E5 ; [.983F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.D494.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A FAA4 ; [.9F2F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA4 FAA5 ; [.D382.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 F9C1 ; [.98E8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 F90E ; [.9649.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E FA17 ; [.CCC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.CCC7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 FAA7 ; [.C1CA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 F933 ; [.9AB5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 FAA8 ; [.B71A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.B71A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.C1C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D 2F945 ; [.B959.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945 2F946 ; [.B95A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F946 2F947 ; [.B95A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F947 FAAA ; [.B869.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA FAA9 ; [.ACC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA9 2F948 ; [.ACC5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F948 2F94A ; [.BD55.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A FA9D ; [.AE77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9D 2F94E ; [.B54F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94E F9CE ; [.9918.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE F93B ; [.9B0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B 2F94F ; [.9B0A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F FA4B ; [.80DF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B F947 ; [.9673.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 FAAB ; [.9259.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAB 2F950 ; [.9259.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F950 F964 ; [.845F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964 F985 ; [.9878.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 FA18 ; [.97EA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA18 FA4C ; [.C05E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C FA4E ; [.AD73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.B757.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D FA4F ; [.CEF0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.C583.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.C583.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.BA90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 FA19 ; [.C153.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.B4FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A F93C ; [.9B0B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C FA52 ; [.A4A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 FA53 ; [.B971.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 FA1B ; [.8B8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B 2F956 ; [.8B8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 F9B6 ; [.97FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 F995 ; [.9538.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995 2F957 ; [.C201.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 F956 ; [.978F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 FA54 ; [.9E24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 2F959 ; [.9E24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 2F95A ; [.A79C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95A 2F95B ; [.D3B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95B FA55 ; [.92B6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 FAAC ; [.9231.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAC F9F7 ; [.9808.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 2F95F ; [.85BC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F95F F9F8 ; [.9833.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 FA56 ; [.A87C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 FAAD ; [.A87C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD 2F962 ; [.BB3E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 2F963 ; [.BA5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 F9A6 ; [.9992.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 F944 ; [.9BF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 FAAE ; [.9686.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAE F9F9 ; [.9834.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 FA1D ; [.AB32.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D 2F966 ; [.8114.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F966 FA03 ; [.915F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 2F969 ; [.C8EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F969 F97B ; [.9A24.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B 2F968 ; [.AB10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F968 2F96A ; [.A778.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A F9CF ; [.952E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF F96A ; [.C970.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A F94F ; [.9689.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F FAAF ; [.90A1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF 2F96C ; [.81D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C F93D ; [.9C4A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D F957 ; [.9A73.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 2F96E ; [.C427.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E F996 ; [.99BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 FA57 ; [.99BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 FAB0 ; [.99BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 2F96F ; [.C61F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96F FA58 ; [.AAC3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 F950 ; [.9C3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 FA59 ; [.8A28.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 2F970 ; [.C8A7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970 FAB1 ; [.85D7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1 FA5A ; [.C20E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.97C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 2F976 ; [.BCA2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F976 F90F ; [.9B52.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F 2F978 ; [.D0D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F978 F9AF ; [.9A62.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF FA1E ; [.D47D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E 2F979 ; [.CB06.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979 F934 ; [.96B7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 FA5B ; [.B856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B FAB2 ; [.B856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 2F97A ; [.B856.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A F9B0 ; [.9A64.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 2F97D ; [.85BA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97D F997 ; [.9989.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.C7D5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.9BF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 F953 ; [.9600.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.93E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.D4B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 2F983 ; [.C780.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F983 2F985 ; [.851D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 F926 ; [.95F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 F9F6 ; [.99E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 FA5C ; [.BCE6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F893 ; [.D42F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.D42F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C ; [.B23F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98C FA6D ; [.9F3F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6D F97C ; [.9A16.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C FA5D ; [.C6CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5D FA5E ; [.C6CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5E 2F990 ; [.D4AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F98F ; [.ADCA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98F 2F991 ; [.B6F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 2F993 ; [.A43F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 2F994 ; [.8AA5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 2F995 ; [.CD7E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 F974 ; [.C386.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 2F998 ; [.C386.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 2F996 ; [.A0F5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 2F999 ; [.BC82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999 2F99C ; [.D198.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C F9FE ; [.BC3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE FAB3 ; [.A5F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 2F9A0 ; [.85CF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A0 2F99A ; [.C3D3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99A 2F99B ; [.A86D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99B 2F99D ; [.87E9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D F93E ; [.9B03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E 2F9A1 ; [.ABC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 2F9A2 ; [.ACE3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 2F9A3 ; [.C6B0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 2F99E ; [.8DE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99E FAB4 ; [.A44D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 F958 ; [.9A69.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 F918 ; [.9B7C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 F96E ; [.CDE9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E FA5F ; [.B86A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F 2F99F ; [.B86A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F F999 ; [.9980.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 2F9A8 ; [.85DC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 2F9A9 ; [.AA97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A9 F9C2 ; [.98FD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 2F9AA ; [.C74F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AA 2F9AC ; [.C399.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC F923 ; [.971B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 F9F0 ; [.9A11.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 F935 ; [.9AC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 FA20 ; [.AEF5.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA20 F91F ; [.9728.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F F910 ; [.9B5D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 2F9B3 ; [.95D6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 F936 ; [.9AD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 2F9B4 ; [.9AD8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 2F9B5 ; [.A14D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 2F9B6 ; [.B256.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B6 2F9B8 ; [.AF15.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B8 2F9B7 ; [.BBB2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 2F9BA ; [.85D9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BA 2F9B9 ; [.D57F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B9 2F9BC ; [.8E3B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC 2F9BD ; [.BA44.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BD FAB5 ; [.D5EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB5 2F9BB ; [.D5EE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BB 2F9BE ; [.C674.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BE F911 ; [.9B51.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 2F9C0 ; [.9EFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C0 2F9C1 ; [.B510.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C1 F927 ; [.95F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927 FA08 ; [.B543.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 2F9C3 ; [.BB4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C3 2F9C4 ; [.CBE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 F9A0 ; [.98B8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 F9E7 ; [.97F6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7 2F9C6 ; [.9919.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C6 2F9C7 ; [.C276.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C7 F9E8 ; [.989C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 F912 ; [.9B67.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 2F9C9 ; [.CF76.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C9 FA60 ; [.A282.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 FAB6 ; [.B011.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 F924 ; [.9724.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 FAB7 ; [.8BFE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 FA0A ; [.AA1C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A FA61 ; [.BFE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 FAB8 ; [.BFE1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2F9CF ; [.BE22.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF F96F ; [.C24F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F F9A1 ; [.C24F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1 FAB9 ; [.8E75.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 FABB ; [.B047.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB F97D ; [.9A3C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D F941 ; [.9BCB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 FABE ; [.D502.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE 2F9D0 ; [.D502.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 FA22 ; [.BA48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 FABA ; [.BA48.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA F95D ; [.95A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D FABD ; [.95A4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD FA62 ; [.CDF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 FABC ; [.CDF9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC FA63 ; [.AA9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 FABF ; [.AA9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF F9FC ; [.C017.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC F95A ; [.8F10.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A FAC0 ; [.831E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 2F9D1 ; [.831E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 F900 ; [.ADCC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 2F9D2 ; [.BFAB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 2F9D4 ; [.9F4B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.8245.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.9B0D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 F903 ; [.A822.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.8331.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 FA65 ; [.C56B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 FAC1 ; [.C56B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 2F9D6 ; [.9D8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 2F9D7 ; [.ADCD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9DB ; [.A9FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DA ; [.8024.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.9B0E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 2F9DC ; [.8589.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DC F902 ; [.BC58.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 2F9DE ; [.C321.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DE F998 ; [.9549.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 F9D7 ; [.9BC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 FAC2 ; [.C1FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 2F9DF ; [.C1FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF FA07 ; [.8B97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 F98D ; [.988A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D 2F98D ; [.C64B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98D F971 ; [.BD5F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 FA66 ; [.BE9F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA66 F99A ; [.996B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.CCEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.CCEA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 FAC3 ; [.BBE0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.98E6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.9B5E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 2F9E2 ; [.ADC4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E2 F92C ; [.975C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92C FA2E ; [.975F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E 2F9E3 ; [.85CC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E3 FA26 ; [.8CC2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 2F9E4 ; [.C423.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E4 2F9E6 ; [.BC9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E6 F919 ; [.96C8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 FAC4 ; [.C8CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC4 F9B7 ; [.97FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 F9E9 ; [.97EB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.9A3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.AA72.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A F9B1 ; [.9A6E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9E7 ; [.8086.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 FAC5 ; [.B553.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC5 2F9EA ; [.8369.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA 2F9E8 ; [.B62C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 2F9E9 ; [.A455.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E9 F93F ; [.9B23.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F F99B ; [.99BE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B 2F9EB ; [.B013.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EB 2F9EC ; [.C516.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EC 2F9EE ; [.A032.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE F986 ; [.9C1F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 2F9F0 ; [.C083.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F0 F9C6 ; [.C3B3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.96FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 FA09 ; [.AB03.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 F959 ; [.9A68.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 F9D3 ; [.9AFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 FAC6 ; [.BA71.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6 F9DC ; [.9BDC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC F9F1 ; [.99DD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1 FA2F ; [.9859.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F F9B8 ; [.985F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 2F9F3 ; [.AF18.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F3 F9EA ; [.97D0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.9467.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.9467.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 F9B2 ; [.9A70.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.964D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 2F9F5 ; [.D625.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 F938 ; [.9B37.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 F9B3 ; [.9A8D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 FA1C ; [.AB77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C FAC8 ; [.AB77.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 FAC9 ; [.80D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC9 2F9FA ; [.8286.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA FA69 ; [.B512.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 FACA ; [.B512.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA FACB ; [.CA47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACB 2F9FE ; [.CA47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FE 2F9FF ; [.CA47.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FF F9B4 ; [.9A99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 2FA00 ; [.85BD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA00 FA6A ; [.85A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A FACC ; [.85A6.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC F9D0 ; [.9693.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2FA02 ; [.A6B2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.8A4D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.C84E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B FA2C ; [.9F41.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C 2FA04 ; [.CA8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA04 2FA05 ; [.D5F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA05 2FA06 ; [.813C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA06 F91A ; [.9B82.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A 2FA07 ; [.9361.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA07 F987 ; [.97E7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 FACD ; [.B997.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD 2FA0A ; [.B997.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A F939 ; [.9ADD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 2FA0B ; [.A7C3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0B F9F2 ; [.99F1.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 2FA0C ; [.A9BB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0C 2FA0F ; [.8528.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0F FA2D ; [.A28C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D F93A ; [.9B3A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.9BA4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 F940 ; [.9AFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 F988 ; [.9871.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 F9F3 ; [.99F2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 2FA15 ; [.862D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 F989 ; [.97C2.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 2FA17 ; [.B762.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA17 2FA18 ; [.88D4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA18 2FA19 ; [.B715.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA19 2FA1A ; [.8885.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1A 2FA1B ; [.8A85.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1B 2FA1C ; [.81FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C FAD8 ; [.CA9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD8 F9C4 ; [.9BE4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 FAD9 ; [.8497.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9 F907 ; [.9ED7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.9ED7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.9ED7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE 2F81F ; [.8505.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81F 2F888 ; [.87AA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F888 2F8D0 ; [.D37C.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D0 2F8CE ; [.D2E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CE 2F8DE ; [.A447.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DE 2F8EE ; [.CC56.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EE 2F90A ; [.9C08.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90A 2F92C ; [.85CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92C 2F92D ; [.85CD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92D FAD4 ; [.A871.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD4 2F949 ; [.A871.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F949 2F960 ; [.85E0.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F960 2F96D ; [.CE1D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96D 2F8D7 ; [.9118.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D7 2FA0E ; [.A746.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0E ENTRY }; Unicode/Collate/Locale/kok.pl 0000644 00000001322 15037233330 0012032 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA 0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU 0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA 0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM 0933 ; [.269E.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA 0934 ; [.269E.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA 0915 094D 0937 ; [.269E.0020.0002][.FFF2.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA> 0939 ; [.269E.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA ENTRY }; Unicode/Collate/Locale/sa.pl 0000644 00000001516 15037233330 0011656 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0902 ; [.265B.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA 0901 ; [.265B.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU 0903 ; [.265B.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA 0950 ; [.265B.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM 0933 ; [.269E.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA 0934 ; [.269E.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA 0915 094D 0937 ; [.269E.0020.0002][.FFF2.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA> 091C 094D 091E ; [.269E.0020.0002][.FFF3.0000.0000] # <DEVANAGARI LETTER JA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER NYA> 0939 ; [.269E.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA ENTRY }; Unicode/Collate/Locale/be.pl 0000644 00000001065 15037233330 0011640 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0451 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO 0435 0308 ; [.205B.0020.0002] # CYRILLIC SMALL LETTER IO 0401 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO 0415 0308 ; [.205B.0020.0008] # CYRILLIC CAPITAL LETTER IO 045E ; [.211E.0020.0002] # CYRILLIC SMALL LETTER SHORT U 0443 0306 ; [.211E.0020.0002] # CYRILLIC SMALL LETTER SHORT U 040E ; [.211E.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U 0423 0306 ; [.211E.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U ENTRY }; Unicode/Collate/Locale/sl.pl 0000644 00000001535 15037233330 0011672 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 010D ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 0063 030C ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH CARON 010C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0043 030C ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH CARON 0161 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 017E ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; Unicode/Collate/Locale/es.pl 0000644 00000000525 15037233330 0011661 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE 004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE ENTRY }; Unicode/Collate/Locale/or.pl 0000644 00000001102 15037233330 0011662 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0B01 ; [.278B.0020.0002][.FFF1.0000.0000] # ORIYA SIGN CANDRABINDU 0B02 ; [.278B.0020.0002][.FFF2.0000.0000] # ORIYA SIGN ANUSVARA 0B03 ; [.278B.0020.0002][.FFF3.0000.0000] # ORIYA SIGN VISARGA 0B14 ; [.278B.0020.0002][.FFF0.0000.0000] # ORIYA LETTER AU 0B15 0B4D 0B37 ; [.27AF.0020.0002][.FFF1.0000.0000] # <ORIYA LETTER KA, ORIYA SIGN VIRAMA, ORIYA LETTER SSA> 0B39 ; [.27AF.0020.0002][.FFF0.0000.0000] # ORIYA LETTER HA 0B5F ; [.27A5.0021.0002] # ORIYA LETTER YYA ENTRY }; Unicode/Collate/Locale/pl.pl 0000644 00000006033 15037233330 0011665 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0105 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH OGONEK 0061 0328 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH OGONEK 0104 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK 0041 0328 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK 0107 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0063 0301 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0063 0341 ; [.1C7B.0020.0002] # LATIN SMALL LETTER C WITH ACUTE 0106 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0043 0301 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0043 0341 ; [.1C7B.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE 0119 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH OGONEK 0065 0328 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0045 0328 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK 0142 ; [.1D78.0020.0002] # LATIN SMALL LETTER L WITH STROKE 006C 0335 ; [.1D78.0020.0002] # LATIN SMALL LETTER L WITH STROKE 0141 ; [.1D78.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE 004C 0335 ; [.1D78.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE 0144 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0301 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE 006E 0341 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0301 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE 004E 0341 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE 00F3 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 015B ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH ACUTE 0073 0301 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH ACUTE 0073 0341 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH ACUTE 015A ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE 0053 0301 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE 0053 0341 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE 017A ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE 007A 0301 ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE 007A 0341 ; [.1F22.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE 0179 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE 005A 0301 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE 005A 0341 ; [.1F22.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE 017C ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE 007A 0307 ; [.1F23.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE 017B ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE 005A 0307 ; [.1F23.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE ENTRY }; Unicode/Collate/Locale/mt.pl 0000644 00000004155 15037233330 0011675 0 ustar 00 +{ locale_version => 1.25, upper_before_lower => 1, entry => <<'ENTRY', # for DUCET v9.0.0 010B ; [.1C79.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE 0063 0307 ; [.1C79.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE 010A ; [.1C79.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE 0043 0307 ; [.1C79.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE 0121 ; [.1CF3.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE 0067 0307 ; [.1CF3.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE 0120 ; [.1CF3.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE 0047 0307 ; [.1CF3.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE 0067 0127 ; [.1D17.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER H WITH STROKE> 0067 0126 ; [.1D17.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER H WITH STROKE> 0047 0127 ; [.1D17.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER H WITH STROKE> 0047 0126 ; [.1D17.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER H WITH STROKE> 0067 0068 0335 ; [.1D17.0020.0002] # <LATIN SMALL LETTER G, LATIN SMALL LETTER H, COMBINING SHORT STROKE OVERLAY> 0067 0048 0335 ; [.1D17.0020.0007][.0000.0000.0002] # <LATIN SMALL LETTER G, LATIN CAPITAL LETTER H, COMBINING SHORT STROKE OVERLAY> 0047 0068 0335 ; [.1D17.0020.0007][.0000.0000.0008] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER H, COMBINING SHORT STROKE OVERLAY> 0047 0048 0335 ; [.1D17.0020.0008] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER H, COMBINING SHORT STROKE OVERLAY> 0127 ; [.1D31.0020.0002] # LATIN SMALL LETTER H WITH STROKE 0068 0335 ; [.1D31.0020.0002] # LATIN SMALL LETTER H WITH STROKE 210F ; [.1D31.0020.0002] # PLANCK CONSTANT OVER TWO PI 0126 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE 0048 0335 ; [.1D31.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE 017C ; [.1F20.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE 007A 0307 ; [.1F20.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE 017B ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE 005A 0307 ; [.1F20.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE ENTRY }; Unicode/Collate/Locale/cy.pl 0000644 00000003671 15037233330 0011672 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0043 0068 ; [.1C7B.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 0064 0064 ; [.1C90.0020.0002] # <LATIN SMALL LETTER D, LATIN SMALL LETTER D> 0044 0064 ; [.1C90.0020.0007] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER D> 0044 0044 ; [.1C90.0020.0008] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER D> 0066 0066 ; [.1CE6.0020.0002] # <LATIN SMALL LETTER F, LATIN SMALL LETTER F> 0046 0066 ; [.1CE6.0020.0007] # <LATIN CAPITAL LETTER F, LATIN SMALL LETTER F> 0046 0046 ; [.1CE6.0020.0008] # <LATIN CAPITAL LETTER F, LATIN CAPITAL LETTER F> 006E 0067 ; [.1CF5.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER G> 004E 0067 ; [.1CF5.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER G> 004E 0047 ; [.1CF5.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER G> 006C 006C ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L> 004C 006C ; [.1D78.0020.0007] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L> 004C 004C ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L> 0070 0068 ; [.1E0D.0020.0002] # <LATIN SMALL LETTER P, LATIN SMALL LETTER H> 0050 0068 ; [.1E0D.0020.0007] # <LATIN CAPITAL LETTER P, LATIN SMALL LETTER H> 0050 0048 ; [.1E0D.0020.0008] # <LATIN CAPITAL LETTER P, LATIN CAPITAL LETTER H> 0072 0068 ; [.1E34.0020.0002] # <LATIN SMALL LETTER R, LATIN SMALL LETTER H> 0052 0068 ; [.1E34.0020.0007] # <LATIN CAPITAL LETTER R, LATIN SMALL LETTER H> 0052 0048 ; [.1E34.0020.0008] # <LATIN CAPITAL LETTER R, LATIN CAPITAL LETTER H> 0074 0068 ; [.1E96.0020.0002] # <LATIN SMALL LETTER T, LATIN SMALL LETTER H> 0054 0068 ; [.1E96.0020.0007] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER H> 0054 0048 ; [.1E96.0020.0008] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER H> ENTRY }; Unicode/Collate/Locale/ro.pl 0000644 00000007533 15037233330 0011700 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0103 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE 0061 0306 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH BREVE 0102 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE 0041 0306 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE 1EB1 ; [.1C48.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE 1EB0 ; [.1C48.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE 1EAF ; [.1C48.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE 1EAE ; [.1C48.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE 1EB5 ; [.1C48.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE 1EB4 ; [.1C48.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE 1EB3 ; [.1C48.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE 1EB2 ; [.1C48.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 1EB7 ; [.1C48.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW 1EB6 ; [.1C48.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW 00E2 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX 0061 0302 ; [.1C49.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX 00C2 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0041 0302 ; [.1C49.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 1EA7 ; [.1C49.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA6 ; [.1C49.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA5 ; [.1C49.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA4 ; [.1C49.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1EAB ; [.1C49.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE 1EAA ; [.1C49.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1EA9 ; [.1C49.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EA8 ; [.1C49.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EAD ; [.1C49.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAC ; [.1C49.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 00EE ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX 0069 0302 ; [.1D33.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX 00CE ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0049 0302 ; [.1D33.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 015F ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA 0073 0327 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA 0219 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW 0073 0326 ; [.1E72.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW 015E ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA 0053 0327 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA 0218 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW 0053 0326 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW 0163 ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA 0074 0327 ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA 021B ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW 0074 0326 ; [.1E96.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW 0162 ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA 0054 0327 ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA 021A ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW 0054 0326 ; [.1E96.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW ENTRY }; Unicode/Collate/Locale/wo.pl 0000644 00000003433 15037233330 0011700 0 ustar 00 +{ locale_version => 1.25, # eng doesn't require tailoring entry => <<'ENTRY', # for DUCET v9.0.0 00E0 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0300 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH GRAVE 0061 0340 ; [.1C48.0020.0002] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0300 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE 0041 0340 ; [.1C48.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE 00E9 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAB.0020.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAB.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE 00EB ; [.1CAC.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS 0065 0308 ; [.1CAC.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS 00CB ; [.1CAC.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS 0045 0308 ; [.1CAC.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS 00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE 004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE 00F3 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDE.0020.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE ENTRY }; Unicode/Collate/Locale/fr_ca.pl 0000644 00000000064 15037233330 0012322 0 ustar 00 +{ locale_version => 1.25, backwards => 2, }; Unicode/Collate/Locale/es_trad.pl 0000644 00000001457 15037233330 0012700 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0063 0068 ; [.1C7B.0020.0002] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H> 0043 0068 ; [.1C7B.0020.0007] # <LATIN CAPITAL LETTER C, LATIN SMALL LETTER H> 0043 0048 ; [.1C7B.0020.0008] # <LATIN CAPITAL LETTER C, LATIN CAPITAL LETTER H> 006C 006C ; [.1D78.0020.0002] # <LATIN SMALL LETTER L, LATIN SMALL LETTER L> 004C 006C ; [.1D78.0020.0007] # <LATIN CAPITAL LETTER L, LATIN SMALL LETTER L> 004C 004C ; [.1D78.0020.0008] # <LATIN CAPITAL LETTER L, LATIN CAPITAL LETTER L> 00F1 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 006E 0303 ; [.1DBA.0020.0002] # LATIN SMALL LETTER N WITH TILDE 00D1 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE 004E 0303 ; [.1DBA.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE ENTRY }; Unicode/Collate/Locale/to.pl 0000644 00000007360 15037233331 0011701 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 006E 0067 ; [.1DBA.0020.0002] # <LATIN SMALL LETTER N, LATIN SMALL LETTER G> 004E 0067 ; [.1DBA.0020.0007] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER G> 004E 0047 ; [.1DBA.0020.0008] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER G> 014B ; [.1DBA.0020.001C] # LATIN SMALL LETTER ENG 014A ; [.1DBA.0020.001D] # LATIN CAPITAL LETTER ENG 02BB ; [.1F22.0020.0002] # MODIFIER LETTER TURNED COMMA 02BD ; [.1F22.0020.0003] # MODIFIER LETTER REVERSED COMMA 00E1 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0301 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH ACUTE 0061 0341 ; [.1C47.0021.0002] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0301 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0041 0341 ; [.1C47.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE 0101 ; [.1C47.0022.0002] # LATIN SMALL LETTER A WITH MACRON 0061 0304 ; [.1C47.0022.0002] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.1C47.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON 0041 0304 ; [.1C47.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON 00E9 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0301 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH ACUTE 0065 0341 ; [.1CAA.0021.0002] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0301 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0045 0341 ; [.1CAA.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE 0113 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH MACRON 0065 0304 ; [.1CAA.0022.0002] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON 0045 0304 ; [.1CAA.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON 00ED ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0301 ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH ACUTE 0069 0341 ; [.1D32.0021.0002] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0301 ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE 0049 0341 ; [.1D32.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE 012B ; [.1D32.0022.0002] # LATIN SMALL LETTER I WITH MACRON 0069 0304 ; [.1D32.0022.0002] # LATIN SMALL LETTER I WITH MACRON 012A ; [.1D32.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON 0049 0304 ; [.1D32.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON 00F3 ; [.1DDD.0021.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0301 ; [.1DDD.0021.0002] # LATIN SMALL LETTER O WITH ACUTE 006F 0341 ; [.1DDD.0021.0002] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0301 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE 004F 0341 ; [.1DDD.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE 014D ; [.1DDD.0022.0002] # LATIN SMALL LETTER O WITH MACRON 006F 0304 ; [.1DDD.0022.0002] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1DDD.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON 004F 0304 ; [.1DDD.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON 00FA ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0301 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH ACUTE 0075 0341 ; [.1EB5.0021.0002] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0301 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE 0055 0341 ; [.1EB5.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE 016B ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON 0075 0304 ; [.1EB5.0022.0002] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON 0055 0304 ; [.1EB5.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON ENTRY }; Unicode/Collate/Locale/et.pl 0000644 00000007163 15037233331 0011670 0 ustar 00 +{ locale_version => 1.25, entry => <<'ENTRY', # for DUCET v9.0.0 0161 ; [.1E92.0020.0002] # LATIN SMALL LETTER S WITH CARON 0073 030C ; [.1E92.0020.0002] # LATIN SMALL LETTER S WITH CARON 0160 ; [.1E92.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 0053 030C ; [.1E92.0020.0008] # LATIN CAPITAL LETTER S WITH CARON 007A ; [.1E93.0020.0002] # LATIN SMALL LETTER Z 005A ; [.1E93.0020.0008] # LATIN CAPITAL LETTER Z 017E ; [.1E94.0020.0002] # LATIN SMALL LETTER Z WITH CARON 007A 030C ; [.1E94.0020.0002] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1E94.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 005A 030C ; [.1E94.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON 00F5 ; [.1EFB.0020.0002] # LATIN SMALL LETTER O WITH TILDE 006F 0303 ; [.1EFB.0020.0002] # LATIN SMALL LETTER O WITH TILDE 00D5 ; [.1EFB.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE 004F 0303 ; [.1EFB.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE 1E4D ; [.1EFB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE 1E4C ; [.1EFB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE 022D ; [.1EFB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON 022C ; [.1EFB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON 1E4F ; [.1EFB.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS 1E4E ; [.1EFB.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS 1EE1 ; [.1EFB.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE 1EE0 ; [.1EFB.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE 00E4 ; [.1EFC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 0061 0308 ; [.1EFC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 0041 0308 ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.1EFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.1EFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00F6 ; [.1EFD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 006F 0308 ; [.1EFD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1EFD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 004F 0308 ; [.1EFD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1EFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1EFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 00FC ; [.1EFE.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 0075 0308 ; [.1EFE.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1EFE.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 0055 0308 ; [.1EFE.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS 01DC ; [.1EFE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1EFE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01D8 ; [.1EFE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1EFE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01D6 ; [.1EFE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1EFE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 01DA ; [.1EFE.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1EFE.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ENTRY }; Unicode/Normalize.pm 0000644 00000044654 15037233331 0010445 0 ustar 00 package Unicode::Normalize; BEGIN { unless ('A' eq pack('U', 0x41)) { die "Unicode::Normalize cannot stringify a Unicode code point\n"; } unless (0x41 == unpack('U', 'A')) { die "Unicode::Normalize cannot get Unicode code point\n"; } } use 5.006; use strict; use warnings; use Carp; no warnings 'utf8'; our $VERSION = '1.25'; our $PACKAGE = __PACKAGE__; our @EXPORT = qw( NFC NFD NFKC NFKD ); our @EXPORT_OK = qw( normalize decompose reorder compose checkNFD checkNFKD checkNFC checkNFKC check getCanon getCompat getComposite getCombinClass isExclusion isSingleton isNonStDecomp isComp2nd isComp_Ex isNFD_NO isNFC_NO isNFC_MAYBE isNFKD_NO isNFKC_NO isNFKC_MAYBE FCD checkFCD FCC checkFCC composeContiguous splitOnLastStarter normalize_partial NFC_partial NFD_partial NFKC_partial NFKD_partial ); our %EXPORT_TAGS = ( all => [ @EXPORT, @EXPORT_OK ], normalize => [ @EXPORT, qw/normalize decompose reorder compose/ ], check => [ qw/checkNFD checkNFKD checkNFC checkNFKC check/ ], fast => [ qw/FCD checkFCD FCC checkFCC composeContiguous/ ], ); ## ## utilities for tests ## sub pack_U { return pack('U*', @_); } sub unpack_U { # The empty pack returns an empty UTF-8 string, so the effect is to force # the shifted parameter into being UTF-8. This allows this to work on # Perl 5.6, where there is no utf8::upgrade(). return unpack('U*', shift(@_).pack('U*')); } require Exporter; ##### The above part is common to XS and PP ##### our @ISA = qw(Exporter DynaLoader); require DynaLoader; bootstrap Unicode::Normalize $VERSION; ##### The below part is common to XS and PP ##### ## ## normalize ## sub FCD ($) { my $str = shift; return checkFCD($str) ? $str : NFD($str); } our %formNorm = ( NFC => \&NFC, C => \&NFC, NFD => \&NFD, D => \&NFD, NFKC => \&NFKC, KC => \&NFKC, NFKD => \&NFKD, KD => \&NFKD, FCD => \&FCD, FCC => \&FCC, ); sub normalize($$) { my $form = shift; my $str = shift; if (exists $formNorm{$form}) { return $formNorm{$form}->($str); } croak($PACKAGE."::normalize: invalid form name: $form"); } ## ## partial ## sub normalize_partial ($$) { if (exists $formNorm{$_[0]}) { my $n = normalize($_[0], $_[1]); my($p, $u) = splitOnLastStarter($n); $_[1] = $u; return $p; } croak($PACKAGE."::normalize_partial: invalid form name: $_[0]"); } sub NFD_partial ($) { return normalize_partial('NFD', $_[0]) } sub NFC_partial ($) { return normalize_partial('NFC', $_[0]) } sub NFKD_partial($) { return normalize_partial('NFKD',$_[0]) } sub NFKC_partial($) { return normalize_partial('NFKC',$_[0]) } ## ## check ## our %formCheck = ( NFC => \&checkNFC, C => \&checkNFC, NFD => \&checkNFD, D => \&checkNFD, NFKC => \&checkNFKC, KC => \&checkNFKC, NFKD => \&checkNFKD, KD => \&checkNFKD, FCD => \&checkFCD, FCC => \&checkFCC, ); sub check($$) { my $form = shift; my $str = shift; if (exists $formCheck{$form}) { return $formCheck{$form}->($str); } croak($PACKAGE."::check: invalid form name: $form"); } 1; __END__ =head1 NAME Unicode::Normalize - Unicode Normalization Forms =head1 SYNOPSIS (1) using function names exported by default: use Unicode::Normalize; $NFD_string = NFD($string); # Normalization Form D $NFC_string = NFC($string); # Normalization Form C $NFKD_string = NFKD($string); # Normalization Form KD $NFKC_string = NFKC($string); # Normalization Form KC (2) using function names exported on request: use Unicode::Normalize 'normalize'; $NFD_string = normalize('D', $string); # Normalization Form D $NFC_string = normalize('C', $string); # Normalization Form C $NFKD_string = normalize('KD', $string); # Normalization Form KD $NFKC_string = normalize('KC', $string); # Normalization Form KC =head1 DESCRIPTION Parameters: C<$string> is used as a string under character semantics (see F<perlunicode>). C<$code_point> should be an unsigned integer representing a Unicode code point. Note: Between XSUB and pure Perl, there is an incompatibility about the interpretation of C<$code_point> as a decimal number. XSUB converts C<$code_point> to an unsigned integer, but pure Perl does not. Do not use a floating point nor a negative sign in C<$code_point>. =head2 Normalization Forms =over 4 =item C<$NFD_string = NFD($string)> It returns the Normalization Form D (formed by canonical decomposition). =item C<$NFC_string = NFC($string)> It returns the Normalization Form C (formed by canonical decomposition followed by canonical composition). =item C<$NFKD_string = NFKD($string)> It returns the Normalization Form KD (formed by compatibility decomposition). =item C<$NFKC_string = NFKC($string)> It returns the Normalization Form KC (formed by compatibility decomposition followed by B<canonical> composition). =item C<$FCD_string = FCD($string)> If the given string is in FCD ("Fast C or D" form; cf. UTN #5), it returns the string without modification; otherwise it returns an FCD string. Note: FCD is not always unique, then plural forms may be equivalent each other. C<FCD()> will return one of these equivalent forms. =item C<$FCC_string = FCC($string)> It returns the FCC form ("Fast C Contiguous"; cf. UTN #5). Note: FCC is unique, as well as four normalization forms (NF*). =item C<$normalized_string = normalize($form_name, $string)> It returns the normalization form of C<$form_name>. As C<$form_name>, one of the following names must be given. 'C' or 'NFC' for Normalization Form C (UAX #15) 'D' or 'NFD' for Normalization Form D (UAX #15) 'KC' or 'NFKC' for Normalization Form KC (UAX #15) 'KD' or 'NFKD' for Normalization Form KD (UAX #15) 'FCD' for "Fast C or D" Form (UTN #5) 'FCC' for "Fast C Contiguous" (UTN #5) =back =head2 Decomposition and Composition =over 4 =item C<$decomposed_string = decompose($string [, $useCompatMapping])> It returns the concatenation of the decomposition of each character in the string. If the second parameter (a boolean) is omitted or false, the decomposition is canonical decomposition; if the second parameter (a boolean) is true, the decomposition is compatibility decomposition. The string returned is not always in NFD/NFKD. Reordering may be required. $NFD_string = reorder(decompose($string)); # eq. to NFD() $NFKD_string = reorder(decompose($string, TRUE)); # eq. to NFKD() =item C<$reordered_string = reorder($string)> It returns the result of reordering the combining characters according to Canonical Ordering Behavior. For example, when you have a list of NFD/NFKD strings, you can get the concatenated NFD/NFKD string from them, by saying $concat_NFD = reorder(join '', @NFD_strings); $concat_NFKD = reorder(join '', @NFKD_strings); =item C<$composed_string = compose($string)> It returns the result of canonical composition without applying any decomposition. For example, when you have a NFD/NFKD string, you can get its NFC/NFKC string, by saying $NFC_string = compose($NFD_string); $NFKC_string = compose($NFKD_string); =item C<($processed, $unprocessed) = splitOnLastStarter($normalized)> It returns two strings: the first one, C<$processed>, is a part before the last starter, and the second one, C<$unprocessed> is another part after the first part. A starter is a character having a combining class of zero (see UAX #15). Note that C<$processed> may be empty (when C<$normalized> contains no starter or starts with the last starter), and then C<$unprocessed> should be equal to the entire C<$normalized>. When you have a C<$normalized> string and an C<$unnormalized> string following it, a simple concatenation is wrong: $concat = $normalized . normalize($form, $unnormalized); # wrong! Instead of it, do like this: ($processed, $unprocessed) = splitOnLastStarter($normalized); $concat = $processed . normalize($form, $unprocessed.$unnormalized); C<splitOnLastStarter()> should be called with a pre-normalized parameter C<$normalized>, that is in the same form as C<$form> you want. If you have an array of C<@string> that should be concatenated and then normalized, you can do like this: my $result = ""; my $unproc = ""; foreach my $str (@string) { $unproc .= $str; my $n = normalize($form, $unproc); my($p, $u) = splitOnLastStarter($n); $result .= $p; $unproc = $u; } $result .= $unproc; # instead of normalize($form, join('', @string)) =item C<$processed = normalize_partial($form, $unprocessed)> A wrapper for the combination of C<normalize()> and C<splitOnLastStarter()>. Note that C<$unprocessed> will be modified as a side-effect. If you have an array of C<@string> that should be concatenated and then normalized, you can do like this: my $result = ""; my $unproc = ""; foreach my $str (@string) { $unproc .= $str; $result .= normalize_partial($form, $unproc); } $result .= $unproc; # instead of normalize($form, join('', @string)) =item C<$processed = NFD_partial($unprocessed)> It does like C<normalize_partial('NFD', $unprocessed)>. Note that C<$unprocessed> will be modified as a side-effect. =item C<$processed = NFC_partial($unprocessed)> It does like C<normalize_partial('NFC', $unprocessed)>. Note that C<$unprocessed> will be modified as a side-effect. =item C<$processed = NFKD_partial($unprocessed)> It does like C<normalize_partial('NFKD', $unprocessed)>. Note that C<$unprocessed> will be modified as a side-effect. =item C<$processed = NFKC_partial($unprocessed)> It does like C<normalize_partial('NFKC', $unprocessed)>. Note that C<$unprocessed> will be modified as a side-effect. =back =head2 Quick Check (see Annex 8, UAX #15; and F<DerivedNormalizationProps.txt>) The following functions check whether the string is in that normalization form. The result returned will be one of the following: YES The string is in that normalization form. NO The string is not in that normalization form. MAYBE Dubious. Maybe yes, maybe no. =over 4 =item C<$result = checkNFD($string)> It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>. =item C<$result = checkNFC($string)> It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>; C<undef> if C<MAYBE>. =item C<$result = checkNFKD($string)> It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>. =item C<$result = checkNFKC($string)> It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>; C<undef> if C<MAYBE>. =item C<$result = checkFCD($string)> It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>. =item C<$result = checkFCC($string)> It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>; C<undef> if C<MAYBE>. Note: If a string is not in FCD, it must not be in FCC. So C<checkFCC($not_FCD_string)> should return C<NO>. =item C<$result = check($form_name, $string)> It returns true (C<1>) if C<YES>; false (C<empty string>) if C<NO>; C<undef> if C<MAYBE>. As C<$form_name>, one of the following names must be given. 'C' or 'NFC' for Normalization Form C (UAX #15) 'D' or 'NFD' for Normalization Form D (UAX #15) 'KC' or 'NFKC' for Normalization Form KC (UAX #15) 'KD' or 'NFKD' for Normalization Form KD (UAX #15) 'FCD' for "Fast C or D" Form (UTN #5) 'FCC' for "Fast C Contiguous" (UTN #5) =back B<Note> In the cases of NFD, NFKD, and FCD, the answer must be either C<YES> or C<NO>. The answer C<MAYBE> may be returned in the cases of NFC, NFKC, and FCC. A C<MAYBE> string should contain at least one combining character or the like. For example, C<COMBINING ACUTE ACCENT> has the MAYBE_NFC/MAYBE_NFKC property. Both C<checkNFC("A\N{COMBINING ACUTE ACCENT}")> and C<checkNFC("B\N{COMBINING ACUTE ACCENT}")> will return C<MAYBE>. C<"A\N{COMBINING ACUTE ACCENT}"> is not in NFC (its NFC is C<"\N{LATIN CAPITAL LETTER A WITH ACUTE}">), while C<"B\N{COMBINING ACUTE ACCENT}"> is in NFC. If you want to check exactly, compare the string with its NFC/NFKC/FCC. if ($string eq NFC($string)) { # $string is exactly normalized in NFC; } else { # $string is not normalized in NFC; } if ($string eq NFKC($string)) { # $string is exactly normalized in NFKC; } else { # $string is not normalized in NFKC; } =head2 Character Data These functions are interface of character data used internally. If you want only to get Unicode normalization forms, you don't need call them yourself. =over 4 =item C<$canonical_decomposition = getCanon($code_point)> If the character is canonically decomposable (including Hangul Syllables), it returns the (full) canonical decomposition as a string. Otherwise it returns C<undef>. B<Note:> According to the Unicode standard, the canonical decomposition of the character that is not canonically decomposable is same as the character itself. =item C<$compatibility_decomposition = getCompat($code_point)> If the character is compatibility decomposable (including Hangul Syllables), it returns the (full) compatibility decomposition as a string. Otherwise it returns C<undef>. B<Note:> According to the Unicode standard, the compatibility decomposition of the character that is not compatibility decomposable is same as the character itself. =item C<$code_point_composite = getComposite($code_point_here, $code_point_next)> If two characters here and next (as code points) are composable (including Hangul Jamo/Syllables and Composition Exclusions), it returns the code point of the composite. If they are not composable, it returns C<undef>. =item C<$combining_class = getCombinClass($code_point)> It returns the combining class (as an integer) of the character. =item C<$may_be_composed_with_prev_char = isComp2nd($code_point)> It returns a boolean whether the character of the specified codepoint may be composed with the previous one in a certain composition (including Hangul Compositions, but excluding Composition Exclusions and Non-Starter Decompositions). =item C<$is_exclusion = isExclusion($code_point)> It returns a boolean whether the code point is a composition exclusion. =item C<$is_singleton = isSingleton($code_point)> It returns a boolean whether the code point is a singleton =item C<$is_non_starter_decomposition = isNonStDecomp($code_point)> It returns a boolean whether the code point has Non-Starter Decomposition. =item C<$is_Full_Composition_Exclusion = isComp_Ex($code_point)> It returns a boolean of the derived property Comp_Ex (Full_Composition_Exclusion). This property is generated from Composition Exclusions + Singletons + Non-Starter Decompositions. =item C<$NFD_is_NO = isNFD_NO($code_point)> It returns a boolean of the derived property NFD_NO (NFD_Quick_Check=No). =item C<$NFC_is_NO = isNFC_NO($code_point)> It returns a boolean of the derived property NFC_NO (NFC_Quick_Check=No). =item C<$NFC_is_MAYBE = isNFC_MAYBE($code_point)> It returns a boolean of the derived property NFC_MAYBE (NFC_Quick_Check=Maybe). =item C<$NFKD_is_NO = isNFKD_NO($code_point)> It returns a boolean of the derived property NFKD_NO (NFKD_Quick_Check=No). =item C<$NFKC_is_NO = isNFKC_NO($code_point)> It returns a boolean of the derived property NFKC_NO (NFKC_Quick_Check=No). =item C<$NFKC_is_MAYBE = isNFKC_MAYBE($code_point)> It returns a boolean of the derived property NFKC_MAYBE (NFKC_Quick_Check=Maybe). =back =head1 EXPORT C<NFC>, C<NFD>, C<NFKC>, C<NFKD>: by default. C<normalize> and other some functions: on request. =head1 CAVEATS =over 4 =item Perl's version vs. Unicode version Since this module refers to perl core's Unicode database in the directory F</lib/unicore> (or formerly F</lib/unicode>), the Unicode version of normalization implemented by this module depends on what has been compiled into your perl. The following table lists the default Unicode version that comes with various perl versions. (It is possible to change the Unicode version in any perl version to be any earlier Unicode version, so one could cause Unicode 3.2 to be used in any perl version starting with 5.8.0. See C<$Config{privlib}>/F<unicore/README.perl>. perl's version implemented Unicode version 5.6.1 3.0.1 5.7.2 3.1.0 5.7.3 3.1.1 (normalization is same as 3.1.0) 5.8.0 3.2.0 5.8.1-5.8.3 4.0.0 5.8.4-5.8.6 4.0.1 (normalization is same as 4.0.0) 5.8.7-5.8.8 4.1.0 5.10.0 5.0.0 5.8.9, 5.10.1 5.1.0 5.12.x 5.2.0 5.14.x 6.0.0 5.16.x 6.1.0 5.18.x 6.2.0 5.20.x 6.3.0 5.22.x 7.0.0 =item Correction of decomposition mapping In older Unicode versions, a small number of characters (all of which are CJK compatibility ideographs as far as they have been found) may have an erroneous decomposition mapping (see F<NormalizationCorrections.txt>). Anyhow, this module will neither refer to F<NormalizationCorrections.txt> nor provide any specific version of normalization. Therefore this module running on an older perl with an older Unicode database may use the erroneous decomposition mapping blindly conforming to the Unicode database. =item Revised definition of canonical composition In Unicode 4.1.0, the definition D2 of canonical composition (which affects NFC and NFKC) has been changed (see Public Review Issue #29 and recent UAX #15). This module has used the newer definition since the version 0.07 (Oct 31, 2001). This module will not support the normalization according to the older definition, even if the Unicode version implemented by perl is lower than 4.1.0. =back =head1 AUTHOR SADAHIRO Tomoyuki <SADAHIRO@cpan.org> Currently maintained by <perl5-porters@perl.org> Copyright(C) 2001-2012, SADAHIRO Tomoyuki. Japan. All rights reserved. =head1 LICENSE This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO =over 4 =item http://www.unicode.org/reports/tr15/ Unicode Normalization Forms - UAX #15 =item http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt Composition Exclusion Table =item http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt Derived Normalization Properties =item http://www.unicode.org/Public/UNIDATA/NormalizationCorrections.txt Normalization Corrections =item http://www.unicode.org/review/pr-29.html Public Review Issue #29: Normalization Issue =item http://www.unicode.org/notes/tn5/ Canonical Equivalence in Applications - UTN #5 =back =cut List/Util.pm 0000644 00000050056 15037233331 0006740 0 ustar 00 # Copyright (c) 1997-2009 Graham Barr <gbarr@pobox.com>. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # Maintained since 2013 by Paul Evans <leonerd@leonerd.org.uk> package List::Util; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw( all any first min max minstr maxstr none notall product reduce sum sum0 shuffle uniq uniqnum uniqstr pairs unpairs pairkeys pairvalues pairmap pairgrep pairfirst ); our $VERSION = "1.49"; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; require XSLoader; XSLoader::load('List::Util', $XS_VERSION); sub import { my $pkg = caller; # (RT88848) Touch the caller's $a and $b, to avoid the warning of # Name "main::a" used only once: possible typo" warning no strict 'refs'; ${"${pkg}::a"} = ${"${pkg}::a"}; ${"${pkg}::b"} = ${"${pkg}::b"}; goto &Exporter::import; } # For objects returned by pairs() sub List::Util::_Pair::key { shift->[0] } sub List::Util::_Pair::value { shift->[1] } =head1 NAME List::Util - A selection of general-utility list subroutines =head1 SYNOPSIS use List::Util qw( reduce any all none notall first max maxstr min minstr product sum sum0 pairs unpairs pairkeys pairvalues pairfirst pairgrep pairmap shuffle uniq uniqnum uniqstr ); =head1 DESCRIPTION C<List::Util> contains a selection of subroutines that people have expressed would be nice to have in the perl core, but the usage would not really be high enough to warrant the use of a keyword, and the size so small such that being individual extensions would be wasteful. By default C<List::Util> does not export any subroutines. =cut =head1 LIST-REDUCTION FUNCTIONS The following set of functions all reduce a list down to a single value. =cut =head2 reduce $result = reduce { BLOCK } @list Reduces C<@list> by calling C<BLOCK> in a scalar context multiple times, setting C<$a> and C<$b> each time. The first call will be with C<$a> and C<$b> set to the first two elements of the list, subsequent calls will be done by setting C<$a> to the result of the previous call and C<$b> to the next element in the list. Returns the result of the last call to the C<BLOCK>. If C<@list> is empty then C<undef> is returned. If C<@list> only contains one element then that element is returned and C<BLOCK> is not executed. The following examples all demonstrate how C<reduce> could be used to implement the other list-reduction functions in this module. (They are not in fact implemented like this, but instead in a more efficient manner in individual C functions). $foo = reduce { defined($a) ? $a : $code->(local $_ = $b) ? $b : undef } undef, @list # first $foo = reduce { $a > $b ? $a : $b } 1..10 # max $foo = reduce { $a gt $b ? $a : $b } 'A'..'Z' # maxstr $foo = reduce { $a < $b ? $a : $b } 1..10 # min $foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr $foo = reduce { $a + $b } 1 .. 10 # sum $foo = reduce { $a . $b } @bar # concat $foo = reduce { $a || $code->(local $_ = $b) } 0, @bar # any $foo = reduce { $a && $code->(local $_ = $b) } 1, @bar # all $foo = reduce { $a && !$code->(local $_ = $b) } 1, @bar # none $foo = reduce { $a || !$code->(local $_ = $b) } 0, @bar # notall # Note that these implementations do not fully short-circuit If your algorithm requires that C<reduce> produce an identity value, then make sure that you always pass that identity value as the first argument to prevent C<undef> being returned $foo = reduce { $a + $b } 0, @values; # sum with 0 identity value The above example code blocks also suggest how to use C<reduce> to build a more efficient combined version of one of these basic functions and a C<map> block. For example, to find the total length of all the strings in a list, we could use $total = sum map { length } @strings; However, this produces a list of temporary integer values as long as the original list of strings, only to reduce it down to a single value again. We can compute the same result more efficiently by using C<reduce> with a code block that accumulates lengths by writing this instead as: $total = reduce { $a + length $b } 0, @strings The remaining list-reduction functions are all specialisations of this generic idea. =head2 any my $bool = any { BLOCK } @list; I<Since version 1.33.> Similar to C<grep> in that it evaluates C<BLOCK> setting C<$_> to each element of C<@list> in turn. C<any> returns true if any element makes the C<BLOCK> return a true value. If C<BLOCK> never returns true or C<@list> was empty then it returns false. Many cases of using C<grep> in a conditional can be written using C<any> instead, as it can short-circuit after the first true result. if( any { length > 10 } @strings ) { # at least one string has more than 10 characters } Note: Due to XS issues the block passed may be able to access the outer @_ directly. This is not intentional and will break under debugger. =head2 all my $bool = all { BLOCK } @list; I<Since version 1.33.> Similar to L</any>, except that it requires all elements of the C<@list> to make the C<BLOCK> return true. If any element returns false, then it returns false. If the C<BLOCK> never returns false or the C<@list> was empty then it returns true. Note: Due to XS issues the block passed may be able to access the outer @_ directly. This is not intentional and will break under debugger. =head2 none =head2 notall my $bool = none { BLOCK } @list; my $bool = notall { BLOCK } @list; I<Since version 1.33.> Similar to L</any> and L</all>, but with the return sense inverted. C<none> returns true only if no value in the C<@list> causes the C<BLOCK> to return true, and C<notall> returns true only if not all of the values do. Note: Due to XS issues the block passed may be able to access the outer @_ directly. This is not intentional and will break under debugger. =head2 first my $val = first { BLOCK } @list; Similar to C<grep> in that it evaluates C<BLOCK> setting C<$_> to each element of C<@list> in turn. C<first> returns the first element where the result from C<BLOCK> is a true value. If C<BLOCK> never returns true or C<@list> was empty then C<undef> is returned. $foo = first { defined($_) } @list # first defined value in @list $foo = first { $_ > $value } @list # first value in @list which # is greater than $value =head2 max my $num = max @list; Returns the entry in the list with the highest numerical value. If the list is empty then C<undef> is returned. $foo = max 1..10 # 10 $foo = max 3,9,12 # 12 $foo = max @bar, @baz # whatever =head2 maxstr my $str = maxstr @list; Similar to L</max>, but treats all the entries in the list as strings and returns the highest string as defined by the C<gt> operator. If the list is empty then C<undef> is returned. $foo = maxstr 'A'..'Z' # 'Z' $foo = maxstr "hello","world" # "world" $foo = maxstr @bar, @baz # whatever =head2 min my $num = min @list; Similar to L</max> but returns the entry in the list with the lowest numerical value. If the list is empty then C<undef> is returned. $foo = min 1..10 # 1 $foo = min 3,9,12 # 3 $foo = min @bar, @baz # whatever =head2 minstr my $str = minstr @list; Similar to L</min>, but treats all the entries in the list as strings and returns the lowest string as defined by the C<lt> operator. If the list is empty then C<undef> is returned. $foo = minstr 'A'..'Z' # 'A' $foo = minstr "hello","world" # "hello" $foo = minstr @bar, @baz # whatever =head2 product my $num = product @list; I<Since version 1.35.> Returns the numerical product of all the elements in C<@list>. If C<@list> is empty then C<1> is returned. $foo = product 1..10 # 3628800 $foo = product 3,9,12 # 324 =head2 sum my $num_or_undef = sum @list; Returns the numerical sum of all the elements in C<@list>. For backwards compatibility, if C<@list> is empty then C<undef> is returned. $foo = sum 1..10 # 55 $foo = sum 3,9,12 # 24 $foo = sum @bar, @baz # whatever =head2 sum0 my $num = sum0 @list; I<Since version 1.26.> Similar to L</sum>, except this returns 0 when given an empty list, rather than C<undef>. =cut =head1 KEY/VALUE PAIR LIST FUNCTIONS The following set of functions, all inspired by L<List::Pairwise>, consume an even-sized list of pairs. The pairs may be key/value associations from a hash, or just a list of values. The functions will all preserve the original ordering of the pairs, and will not be confused by multiple pairs having the same "key" value - nor even do they require that the first of each pair be a plain string. B<NOTE>: At the time of writing, the following C<pair*> functions that take a block do not modify the value of C<$_> within the block, and instead operate using the C<$a> and C<$b> globals instead. This has turned out to be a poor design, as it precludes the ability to provide a C<pairsort> function. Better would be to pass pair-like objects as 2-element array references in C<$_>, in a style similar to the return value of the C<pairs> function. At some future version this behaviour may be added. Until then, users are alerted B<NOT> to rely on the value of C<$_> remaining unmodified between the outside and the inside of the control block. In particular, the following example is B<UNSAFE>: my @kvlist = ... foreach (qw( some keys here )) { my @items = pairgrep { $a eq $_ } @kvlist; ... } Instead, write this using a lexical variable: foreach my $key (qw( some keys here )) { my @items = pairgrep { $a eq $key } @kvlist; ... } =cut =head2 pairs my @pairs = pairs @kvlist; I<Since version 1.29.> A convenient shortcut to operating on even-sized lists of pairs, this function returns a list of C<ARRAY> references, each containing two items from the given list. It is a more efficient version of @pairs = pairmap { [ $a, $b ] } @kvlist It is most convenient to use in a C<foreach> loop, for example: foreach my $pair ( pairs @kvlist ) { my ( $key, $value ) = @$pair; ... } Since version C<1.39> these C<ARRAY> references are blessed objects, recognising the two methods C<key> and C<value>. The following code is equivalent: foreach my $pair ( pairs @kvlist ) { my $key = $pair->key; my $value = $pair->value; ... } =head2 unpairs my @kvlist = unpairs @pairs I<Since version 1.42.> The inverse function to C<pairs>; this function takes a list of C<ARRAY> references containing two elements each, and returns a flattened list of the two values from each of the pairs, in order. This is notionally equivalent to my @kvlist = map { @{$_}[0,1] } @pairs except that it is implemented more efficiently internally. Specifically, for any input item it will extract exactly two values for the output list; using C<undef> if the input array references are short. Between C<pairs> and C<unpairs>, a higher-order list function can be used to operate on the pairs as single scalars; such as the following near-equivalents of the other C<pair*> higher-order functions: @kvlist = unpairs grep { FUNC } pairs @kvlist # Like pairgrep, but takes $_ instead of $a and $b @kvlist = unpairs map { FUNC } pairs @kvlist # Like pairmap, but takes $_ instead of $a and $b Note however that these versions will not behave as nicely in scalar context. Finally, this technique can be used to implement a sort on a keyvalue pair list; e.g.: @kvlist = unpairs sort { $a->key cmp $b->key } pairs @kvlist =head2 pairkeys my @keys = pairkeys @kvlist; I<Since version 1.29.> A convenient shortcut to operating on even-sized lists of pairs, this function returns a list of the the first values of each of the pairs in the given list. It is a more efficient version of @keys = pairmap { $a } @kvlist =head2 pairvalues my @values = pairvalues @kvlist; I<Since version 1.29.> A convenient shortcut to operating on even-sized lists of pairs, this function returns a list of the the second values of each of the pairs in the given list. It is a more efficient version of @values = pairmap { $b } @kvlist =head2 pairgrep my @kvlist = pairgrep { BLOCK } @kvlist; my $count = pairgrep { BLOCK } @kvlist; I<Since version 1.29.> Similar to perl's C<grep> keyword, but interprets the given list as an even-sized list of pairs. It invokes the C<BLOCK> multiple times, in scalar context, with C<$a> and C<$b> set to successive pairs of values from the C<@kvlist>. Returns an even-sized list of those pairs for which the C<BLOCK> returned true in list context, or the count of the B<number of pairs> in scalar context. (Note, therefore, in scalar context that it returns a number half the size of the count of items it would have returned in list context). @subset = pairgrep { $a =~ m/^[[:upper:]]+$/ } @kvlist As with C<grep> aliasing C<$_> to list elements, C<pairgrep> aliases C<$a> and C<$b> to elements of the given list. Any modifications of it by the code block will be visible to the caller. =head2 pairfirst my ( $key, $val ) = pairfirst { BLOCK } @kvlist; my $found = pairfirst { BLOCK } @kvlist; I<Since version 1.30.> Similar to the L</first> function, but interprets the given list as an even-sized list of pairs. It invokes the C<BLOCK> multiple times, in scalar context, with C<$a> and C<$b> set to successive pairs of values from the C<@kvlist>. Returns the first pair of values from the list for which the C<BLOCK> returned true in list context, or an empty list of no such pair was found. In scalar context it returns a simple boolean value, rather than either the key or the value found. ( $key, $value ) = pairfirst { $a =~ m/^[[:upper:]]+$/ } @kvlist As with C<grep> aliasing C<$_> to list elements, C<pairfirst> aliases C<$a> and C<$b> to elements of the given list. Any modifications of it by the code block will be visible to the caller. =head2 pairmap my @list = pairmap { BLOCK } @kvlist; my $count = pairmap { BLOCK } @kvlist; I<Since version 1.29.> Similar to perl's C<map> keyword, but interprets the given list as an even-sized list of pairs. It invokes the C<BLOCK> multiple times, in list context, with C<$a> and C<$b> set to successive pairs of values from the C<@kvlist>. Returns the concatenation of all the values returned by the C<BLOCK> in list context, or the count of the number of items that would have been returned in scalar context. @result = pairmap { "The key $a has value $b" } @kvlist As with C<map> aliasing C<$_> to list elements, C<pairmap> aliases C<$a> and C<$b> to elements of the given list. Any modifications of it by the code block will be visible to the caller. See L</KNOWN BUGS> for a known-bug with C<pairmap>, and a workaround. =cut =head1 OTHER FUNCTIONS =cut =head2 shuffle my @values = shuffle @values; Returns the values of the input in a random order @cards = shuffle 0..51 # 0..51 in a random order =head2 uniq my @subset = uniq @values I<Since version 1.45.> Filters a list of values to remove subsequent duplicates, as judged by a DWIM-ish string equality or C<undef> test. Preserves the order of unique elements, and retains the first value of any duplicate set. my $count = uniq @values In scalar context, returns the number of elements that would have been returned as a list. The C<undef> value is treated by this function as distinct from the empty string, and no warning will be produced. It is left as-is in the returned list. Subsequent C<undef> values are still considered identical to the first, and will be removed. =head2 uniqnum my @subset = uniqnum @values I<Since version 1.44.> Filters a list of values to remove subsequent duplicates, as judged by a numerical equality test. Preserves the order of unique elements, and retains the first value of any duplicate set. my $count = uniqnum @values In scalar context, returns the number of elements that would have been returned as a list. Note that C<undef> is treated much as other numerical operations treat it; it compares equal to zero but additionally produces a warning if such warnings are enabled (C<use warnings 'uninitialized';>). In addition, an C<undef> in the returned list is coerced into a numerical zero, so that the entire list of values returned by C<uniqnum> are well-behaved as numbers. Note also that multiple IEEE C<NaN> values are treated as duplicates of each other, regardless of any differences in their payloads, and despite the fact that C<< 0+'NaN' == 0+'NaN' >> yields false. =head2 uniqstr my @subset = uniqstr @values I<Since version 1.45.> Filters a list of values to remove subsequent duplicates, as judged by a string equality test. Preserves the order of unique elements, and retains the first value of any duplicate set. my $count = uniqstr @values In scalar context, returns the number of elements that would have been returned as a list. Note that C<undef> is treated much as other string operations treat it; it compares equal to the empty string but additionally produces a warning if such warnings are enabled (C<use warnings 'uninitialized';>). In addition, an C<undef> in the returned list is coerced into an empty string, so that the entire list of values returned by C<uniqstr> are well-behaved as strings. =cut =head1 KNOWN BUGS =head2 RT #95409 L<https://rt.cpan.org/Ticket/Display.html?id=95409> If the block of code given to L</pairmap> contains lexical variables that are captured by a returned closure, and the closure is executed after the block has been re-used for the next iteration, these lexicals will not see the correct values. For example: my @subs = pairmap { my $var = "$a is $b"; sub { print "$var\n" }; } one => 1, two => 2, three => 3; $_->() for @subs; Will incorrectly print three is 3 three is 3 three is 3 This is due to the performance optimisation of using C<MULTICALL> for the code block, which means that fresh SVs do not get allocated for each call to the block. Instead, the same SV is re-assigned for each iteration, and all the closures will share the value seen on the final iteration. To work around this bug, surround the code with a second set of braces. This creates an inner block that defeats the C<MULTICALL> logic, and does get fresh SVs allocated each time: my @subs = pairmap { { my $var = "$a is $b"; sub { print "$var\n"; } } } one => 1, two => 2, three => 3; This bug only affects closures that are generated by the block but used afterwards. Lexical variables that are only used during the lifetime of the block's execution will take their individual values for each invocation, as normal. =head2 uniqnum() on oversized bignums Due to the way that C<uniqnum()> compares numbers, it cannot distinguish differences between bignums (especially bigints) that are too large to fit in the native platform types. For example, my $x = Math::BigInt->new( "1" x 100 ); my $y = $x + 1; say for uniqnum( $x, $y ); Will print just the value of C<$x>, believing that C<$y> is a numerically- equivalent value. This bug does not affect C<uniqstr()>, which will correctly observe that the two values stringify to different strings. =head1 SUGGESTED ADDITIONS The following are additions that have been requested, but I have been reluctant to add due to them being very simple to implement in perl # How many elements are true sub true { scalar grep { $_ } @_ } # How many elements are false sub false { scalar grep { !$_ } @_ } =head1 SEE ALSO L<Scalar::Util>, L<List::MoreUtils> =head1 COPYRIGHT Copyright (c) 1997-2007 Graham Barr <gbarr@pobox.com>. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Recent additions and current maintenance by Paul Evans, <leonerd@leonerd.org.uk>. =cut 1; List/Util/XS.pm 0000644 00000001772 15037233331 0007273 0 ustar 00 package List::Util::XS; use strict; use warnings; use List::Util; our $VERSION = "1.49"; # FIXUP $VERSION = eval $VERSION; # FIXUP 1; __END__ =head1 NAME List::Util::XS - Indicate if List::Util was compiled with a C compiler =head1 SYNOPSIS use List::Util::XS 1.20; =head1 DESCRIPTION C<List::Util::XS> can be used as a dependency to ensure List::Util was installed using a C compiler and that the XS version is installed. During installation C<$List::Util::XS::VERSION> will be set to C<undef> if the XS was not compiled. Starting with release 1.23_03, Scalar-List-Util is B<always> using the XS implementation, but for backwards compatibility, we still ship the C<List::Util::XS> module which just loads C<List::Util>. =head1 SEE ALSO L<Scalar::Util>, L<List::Util>, L<List::MoreUtils> =head1 COPYRIGHT Copyright (c) 2008 Graham Barr <gbarr@pobox.com>. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut Math/BigInt/FastCalc.pm 0000644 00000010017 15037233331 0010626 0 ustar 00 package Math::BigInt::FastCalc; use 5.006; use strict; use warnings; use Math::BigInt::Calc 1.999801; our @ISA = qw< Math::BigInt::Calc >; our $VERSION = '0.5006'; ############################################################################## # global constants, flags and accessory # announce that we are compatible with MBI v1.83 and up sub api_version () { 2; } # use Calc to override the methods that we do not provide in XS require XSLoader; XSLoader::load(__PACKAGE__, $VERSION, Math::BigInt::Calc->_base_len()); ############################################################################## ############################################################################## 1; __END__ =pod =head1 NAME Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed =head1 SYNOPSIS # to use it with Math::BigInt use Math::BigInt lib => 'FastCalc'; # to use it with Math::BigFloat use Math::BigFloat lib => 'FastCalc'; # to use it with Math::BigRat use Math::BigRat lib => 'FastCalc'; =head1 DESCRIPTION Math::BigInt::FastCalc inherits from Math::BigInt::Calc. Provides support for big integer calculations. Not intended to be used by other modules. Other modules which sport the same functions can also be used to support Math::BigInt, like L<Math::BigInt::GMP> or L<Math::BigInt::Pari>. In order to allow for multiple big integer libraries, Math::BigInt was rewritten to use library modules for core math routines. Any module which follows the same API as this can be used instead by using the following: use Math::BigInt lib => 'libname'; 'libname' is either the long name ('Math::BigInt::Pari'), or only the short version like 'Pari'. To use this library: use Math::BigInt lib => 'FastCalc'; =head1 STORAGE Math::BigInt::FastCalc works exactly like Math::BigInt::Calc. Numbers are stored in decimal form chopped into parts. =head1 METHODS The following functions are now implemented in FastCalc.xs: _is_odd _is_even _is_one _is_zero _is_two _is_ten _zero _one _two _ten _acmp _len _inc _dec __strip_zeros _copy =head1 BUGS Please report any bugs or feature requests to C<bug-math-bigint-fastcalc at rt.cpan.org>, or through the web interface at L<https://rt.cpan.org/Ticket/Create.html?Queue=Math-BigInt-FastCalc> (requires login). We will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Math::BigInt::FastCalc You can also look for information at: =over 4 =item * RT: CPAN's request tracker L<https://rt.cpan.org/Public/Dist/Display.html?Name=Math-BigInt-FastCalc> =item * AnnoCPAN: Annotated CPAN documentation L<http://annocpan.org/dist/Math-BigInt-FastCalc> =item * CPAN Ratings L<http://cpanratings.perl.org/dist/Math-BigInt-FastCalc> =item * Search CPAN L<http://search.cpan.org/dist/Math-BigInt-FastCalc/> =item * CPAN Testers Matrix L<http://matrix.cpantesters.org/?dist=Math-BigInt-FastCalc> =item * The Bignum mailing list =over 4 =item * Post to mailing list C<bignum at lists.scsys.co.uk> =item * View mailing list L<http://lists.scsys.co.uk/pipermail/bignum/> =item * Subscribe/Unsubscribe L<http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/bignum> =back =back =head1 LICENSE This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHORS Original math code by Mark Biggar, rewritten by Tels L<http://bloodgate.com/> in late 2000. Separated from BigInt and shaped API with the help of John Peacock. Fixed, sped-up and enhanced by Tels http://bloodgate.com 2001-2003. Further streamlining (api_version 1 etc.) by Tels 2004-2007. Bug-fixing by Peter John Acklam E<lt>pjacklam@online.noE<gt> 2010-2016. =head1 SEE ALSO L<Math::BigInt::Lib> for a description of the API. Alternative libraries L<Math::BigInt::Calc>, L<Math::BigInt::GMP>, and L<Math::BigInt::Pari>. Some of the modules that use these libraries L<Math::BigInt>, L<Math::BigFloat>, and L<Math::BigRat>. =cut File/Spec.pm 0000644 00000024513 15037233331 0006660 0 ustar 00 package File::Spec; use strict; our $VERSION = '3.74'; $VERSION =~ tr/_//d; my %module = ( MSWin32 => 'Win32', os2 => 'OS2', VMS => 'VMS', NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare. symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian. dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP. cygwin => 'Cygwin', amigaos => 'AmigaOS'); my $module = $module{$^O} || 'Unix'; require "File/Spec/$module.pm"; our @ISA = ("File::Spec::$module"); 1; __END__ =head1 NAME File::Spec - portably perform operations on file names =head1 SYNOPSIS use File::Spec; $x=File::Spec->catfile('a', 'b', 'c'); which returns 'a/b/c' under Unix. Or: use File::Spec::Functions; $x = catfile('a', 'b', 'c'); =head1 DESCRIPTION This module is designed to support operations commonly performed on file specifications (usually called "file names", but not to be confused with the contents of a file, or Perl's file handles), such as concatenating several directory and file names into a single path, or determining whether a path is rooted. It is based on code directly taken from MakeMaker 5.17, code written by Andreas KE<ouml>nig, Andy Dougherty, Charles Bailey, Ilya Zakharevich, Paul Schinder, and others. Since these functions are different for most operating systems, each set of OS specific routines is available in a separate module, including: File::Spec::Unix File::Spec::Mac File::Spec::OS2 File::Spec::Win32 File::Spec::VMS The module appropriate for the current OS is automatically loaded by File::Spec. Since some modules (like VMS) make use of facilities available only under that OS, it may not be possible to load all modules under all operating systems. Since File::Spec is object oriented, subroutines should not be called directly, as in: File::Spec::catfile('a','b'); but rather as class methods: File::Spec->catfile('a','b'); For simple uses, L<File::Spec::Functions> provides convenient functional forms of these methods. =head1 METHODS =over 2 =item canonpath X<canonpath> No physical check on the filesystem, but a logical cleanup of a path. $cpath = File::Spec->canonpath( $path ) ; Note that this does *not* collapse F<x/../y> sections into F<y>. This is by design. If F</foo> on your system is a symlink to F</bar/baz>, then F</foo/../quux> is actually F</bar/quux>, not F</quux> as a naive F<../>-removal would give you. If you want to do this kind of processing, you probably want C<Cwd>'s C<realpath()> function to actually traverse the filesystem cleaning up paths like this. =item catdir X<catdir> Concatenate two or more directory names to form a complete path ending with a directory. But remove the trailing slash from the resulting string, because it doesn't look good, isn't necessary and confuses OS/2. Of course, if this is the root directory, don't cut off the trailing slash :-) $path = File::Spec->catdir( @directories ); =item catfile X<catfile> Concatenate one or more directory names and a filename to form a complete path ending with a filename $path = File::Spec->catfile( @directories, $filename ); =item curdir X<curdir> Returns a string representation of the current directory. $curdir = File::Spec->curdir(); =item devnull X<devnull> Returns a string representation of the null device. $devnull = File::Spec->devnull(); =item rootdir X<rootdir> Returns a string representation of the root directory. $rootdir = File::Spec->rootdir(); =item tmpdir X<tmpdir> Returns a string representation of the first writable directory from a list of possible temporary directories. Returns the current directory if no writable temporary directories are found. The list of directories checked depends on the platform; e.g. File::Spec::Unix checks C<$ENV{TMPDIR}> (unless taint is on) and F</tmp>. $tmpdir = File::Spec->tmpdir(); =item updir X<updir> Returns a string representation of the parent directory. $updir = File::Spec->updir(); =item no_upwards Given a list of files in a directory (such as from C<readdir()>), strip out C<'.'> and C<'..'>. B<SECURITY NOTE:> This does NOT filter paths containing C<'..'>, like C<'../../../../etc/passwd'>, only literal matches to C<'.'> and C<'..'>. @paths = File::Spec->no_upwards( readdir $dirhandle ); =item case_tolerant Returns a true or false value indicating, respectively, that alphabetic case is not or is significant when comparing file specifications. Cygwin and Win32 accept an optional drive argument. $is_case_tolerant = File::Spec->case_tolerant(); =item file_name_is_absolute Takes as its argument a path, and returns true if it is an absolute path. $is_absolute = File::Spec->file_name_is_absolute( $path ); This does not consult the local filesystem on Unix, Win32, OS/2, or Mac OS (Classic). It does consult the working environment for VMS (see L<File::Spec::VMS/file_name_is_absolute>). =item path X<path> Takes no argument. Returns the environment variable C<PATH> (or the local platform's equivalent) as a list. @PATH = File::Spec->path(); =item join X<join, path> join is the same as catfile. =item splitpath X<splitpath> X<split, path> Splits a path in to volume, directory, and filename portions. On systems with no concept of volume, returns '' for volume. ($volume,$directories,$file) = File::Spec->splitpath( $path ); ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); For systems with no syntax differentiating filenames from directories, assumes that the last file is a path unless C<$no_file> is true or a trailing separator or F</.> or F</..> is present. On Unix, this means that C<$no_file> true makes this return ( '', $path, '' ). The directory portion may or may not be returned with a trailing '/'. The results can be passed to L</catpath()> to get back a path equivalent to (usually identical to) the original path. =item splitdir X<splitdir> X<split, dir> The opposite of L</catdir>. @dirs = File::Spec->splitdir( $directories ); C<$directories> must be only the directory portion of the path on systems that have the concept of a volume or that have path syntax that differentiates files from directories. Unlike just splitting the directories on the separator, empty directory names (C<''>) can be returned, because these are significant on some OSes. =item catpath() Takes volume, directory and file portions and returns an entire path. Under Unix, C<$volume> is ignored, and directory and file are concatenated. A '/' is inserted if need be. On other OSes, C<$volume> is significant. $full_path = File::Spec->catpath( $volume, $directory, $file ); =item abs2rel X<abs2rel> X<absolute, path> X<relative, path> Takes a destination path and an optional base path returns a relative path from the base path to the destination path: $rel_path = File::Spec->abs2rel( $path ) ; $rel_path = File::Spec->abs2rel( $path, $base ) ; If C<$base> is not present or '', then L<Cwd::cwd()|Cwd> is used. If C<$base> is relative, then it is converted to absolute form using L</rel2abs()>. This means that it is taken to be relative to L<Cwd::cwd()|Cwd>. On systems with the concept of volume, if C<$path> and C<$base> appear to be on two different volumes, we will not attempt to resolve the two paths, and we will instead simply return C<$path>. Note that previous versions of this module ignored the volume of C<$base>, which resulted in garbage results part of the time. On systems that have a grammar that indicates filenames, this ignores the C<$base> filename as well. Otherwise all path components are assumed to be directories. If C<$path> is relative, it is converted to absolute form using L</rel2abs()>. This means that it is taken to be relative to L<Cwd::cwd()|Cwd>. No checks against the filesystem are made. On VMS, there is interaction with the working environment, as logicals and macros are expanded. Based on code written by Shigio Yamaguchi. =item rel2abs() X<rel2abs> X<absolute, path> X<relative, path> Converts a relative path to an absolute path. $abs_path = File::Spec->rel2abs( $path ) ; $abs_path = File::Spec->rel2abs( $path, $base ) ; If C<$base> is not present or '', then L<Cwd::cwd()|Cwd> is used. If C<$base> is relative, then it is converted to absolute form using L</rel2abs()>. This means that it is taken to be relative to L<Cwd::cwd()|Cwd>. On systems with the concept of volume, if C<$path> and C<$base> appear to be on two different volumes, we will not attempt to resolve the two paths, and we will instead simply return C<$path>. Note that previous versions of this module ignored the volume of C<$base>, which resulted in garbage results part of the time. On systems that have a grammar that indicates filenames, this ignores the C<$base> filename as well. Otherwise all path components are assumed to be directories. If C<$path> is absolute, it is cleaned up and returned using L</canonpath>. No checks against the filesystem are made. On VMS, there is interaction with the working environment, as logicals and macros are expanded. Based on code written by Shigio Yamaguchi. =back For further information, please see L<File::Spec::Unix>, L<File::Spec::Mac>, L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>. =head1 SEE ALSO L<File::Spec::Unix>, L<File::Spec::Mac>, L<File::Spec::OS2>, L<File::Spec::Win32>, L<File::Spec::VMS>, L<File::Spec::Functions>, L<ExtUtils::MakeMaker> =head1 AUTHOR Currently maintained by Ken Williams C<< <KWILLIAMS@cpan.org> >>. The vast majority of the code was written by Kenneth Albanowski C<< <kjahds@kjahds.com> >>, Andy Dougherty C<< <doughera@lafayette.edu> >>, Andreas KE<ouml>nig C<< <A.Koenig@franz.ww.TU-Berlin.DE> >>, Tim Bunce C<< <Tim.Bunce@ig.co.uk> >>. VMS support by Charles Bailey C<< <bailey@newman.upenn.edu> >>. OS/2 support by Ilya Zakharevich C<< <ilya@math.ohio-state.edu> >>. Mac support by Paul Schinder C<< <schinder@pobox.com> >>, and Thomas Wegner C<< <wegner_thomas@yahoo.com> >>. abs2rel() and rel2abs() written by Shigio Yamaguchi C<< <shigio@tamacom.com> >>, modified by Barrie Slaymaker C<< <barries@slaysys.com> >>. splitpath(), splitdir(), catpath() and catdir() by Barrie Slaymaker. =head1 COPYRIGHT Copyright (c) 2004-2013 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut File/Spec/Mac.pm 0000644 00000053402 15037233331 0007357 0 ustar 00 package File::Spec::Mac; use strict; use Cwd (); require File::Spec::Unix; our $VERSION = '3.74'; $VERSION =~ tr/_//d; our @ISA = qw(File::Spec::Unix); sub case_tolerant { 1 } =head1 NAME File::Spec::Mac - File::Spec for Mac OS (Classic) =head1 SYNOPSIS require File::Spec::Mac; # Done internally by File::Spec if needed =head1 DESCRIPTION Methods for manipulating file specifications. =head1 METHODS =over 2 =item canonpath On Mac OS, there's nothing to be done. Returns what it's given. =cut sub canonpath { my ($self,$path) = @_; return $path; } =item catdir() Concatenate two or more directory names to form a path separated by colons (":") ending with a directory. Resulting paths are B<relative> by default, but can be forced to be absolute (but avoid this, see below). Automatically puts a trailing ":" on the end of the complete path, because that's what's done in MacPerl's environment and helps to distinguish a file path from a directory path. B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the resulting path is relative by default and I<not> absolute. This decision was made due to portability reasons. Since C<File::Spec-E<gt>catdir()> returns relative paths on all other operating systems, it will now also follow this convention on Mac OS. Note that this may break some existing scripts. The intended purpose of this routine is to concatenate I<directory names>. But because of the nature of Macintosh paths, some additional possibilities are allowed to make using this routine give reasonable results for some common situations. In other words, you are also allowed to concatenate I<paths> instead of directory names (strictly speaking, a string like ":a" is a path, but not a name, since it contains a punctuation character ":"). So, beside calls like catdir("a") = ":a:" catdir("a","b") = ":a:b:" catdir() = "" (special case) calls like the following catdir(":a:") = ":a:" catdir(":a","b") = ":a:b:" catdir(":a:","b") = ":a:b:" catdir(":a:",":b:") = ":a:b:" catdir(":") = ":" are allowed. Here are the rules that are used in C<catdir()>; note that we try to be as compatible as possible to Unix: =over 2 =item 1. The resulting path is relative by default, i.e. the resulting path will have a leading colon. =item 2. A trailing colon is added automatically to the resulting path, to denote a directory. =item 3. Generally, each argument has one leading ":" and one trailing ":" removed (if any). They are then joined together by a ":". Special treatment applies for arguments denoting updir paths like "::lib:", see (4), or arguments consisting solely of colons ("colon paths"), see (5). =item 4. When an updir path like ":::lib::" is passed as argument, the number of directories to climb up is handled correctly, not removing leading or trailing colons when necessary. E.g. catdir(":::a","::b","c") = ":::a::b:c:" catdir(":::a::","::b","c") = ":::a:::b:c:" =item 5. Adding a colon ":" or empty string "" to a path at I<any> position doesn't alter the path, i.e. these arguments are ignored. (When a "" is passed as the first argument, it has a special meaning, see (6)). This way, a colon ":" is handled like a "." (curdir) on Unix, while an empty string "" is generally ignored (see L<File::Spec::Unix/canonpath()> ). Likewise, a "::" is handled like a ".." (updir), and a ":::" is handled like a "../.." etc. E.g. catdir("a",":",":","b") = ":a:b:" catdir("a",":","::",":b") = ":a::b:" =item 6. If the first argument is an empty string "" or is a volume name, i.e. matches the pattern /^[^:]+:/, the resulting path is B<absolute>. =item 7. Passing an empty string "" as the first argument to C<catdir()> is like passingC<File::Spec-E<gt>rootdir()> as the first argument, i.e. catdir("","a","b") is the same as catdir(rootdir(),"a","b"). This is true on Unix, where C<catdir("","a","b")> yields "/a/b" and C<rootdir()> is "/". Note that C<rootdir()> on Mac OS is the startup volume, which is the closest in concept to Unix' "/". This should help to run existing scripts originally written for Unix. =item 8. For absolute paths, some cleanup is done, to ensure that the volume name isn't immediately followed by updirs. This is invalid, because this would go beyond "root". Generally, these cases are handled like their Unix counterparts: Unix: Unix->catdir("","") = "/" Unix->catdir("",".") = "/" Unix->catdir("","..") = "/" # can't go # beyond root Unix->catdir("",".","..","..","a") = "/a" Mac: Mac->catdir("","") = rootdir() # (e.g. "HD:") Mac->catdir("",":") = rootdir() Mac->catdir("","::") = rootdir() # can't go # beyond root Mac->catdir("",":","::","::","a") = rootdir() . "a:" # (e.g. "HD:a:") However, this approach is limited to the first arguments following "root" (again, see L<File::Spec::Unix/canonpath()>. If there are more arguments that move up the directory tree, an invalid path going beyond root can be created. =back As you've seen, you can force C<catdir()> to create an absolute path by passing either an empty string or a path that begins with a volume name as the first argument. However, you are strongly encouraged not to do so, since this is done only for backward compatibility. Newer versions of File::Spec come with a method called C<catpath()> (see below), that is designed to offer a portable solution for the creation of absolute paths. It takes volume, directory and file portions and returns an entire path. While C<catdir()> is still suitable for the concatenation of I<directory names>, you are encouraged to use C<catpath()> to concatenate I<volume names> and I<directory paths>. E.g. $dir = File::Spec->catdir("tmp","sources"); $abs_path = File::Spec->catpath("MacintoshHD:", $dir,""); yields "MacintoshHD:tmp:sources:" . =cut sub catdir { my $self = shift; return '' unless @_; my @args = @_; my $first_arg; my $relative; # take care of the first argument if ($args[0] eq '') { # absolute path, rootdir shift @args; $relative = 0; $first_arg = $self->rootdir; } elsif ($args[0] =~ /^[^:]+:/) { # absolute path, volume name $relative = 0; $first_arg = shift @args; # add a trailing ':' if need be (may be it's a path like HD:dir) $first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/); } else { # relative path $relative = 1; if ( $args[0] =~ /^::+\Z(?!\n)/ ) { # updir colon path ('::', ':::' etc.), don't shift $first_arg = ':'; } elsif ($args[0] eq ':') { $first_arg = shift @args; } else { # add a trailing ':' if need be $first_arg = shift @args; $first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/); } } # For all other arguments, # (a) ignore arguments that equal ':' or '', # (b) handle updir paths specially: # '::' -> concatenate '::' # '::' . '::' -> concatenate ':::' etc. # (c) add a trailing ':' if need be my $result = $first_arg; while (@args) { my $arg = shift @args; unless (($arg eq '') || ($arg eq ':')) { if ($arg =~ /^::+\Z(?!\n)/ ) { # updir colon path like ':::' my $updir_count = length($arg) - 1; while ((@args) && ($args[0] =~ /^::+\Z(?!\n)/) ) { # while updir colon path $arg = shift @args; $updir_count += (length($arg) - 1); } $arg = (':' x $updir_count); } else { $arg =~ s/^://s; # remove a leading ':' if any $arg = "$arg:" unless ($arg =~ /:\Z(?!\n)/); # ensure trailing ':' } $result .= $arg; }#unless } if ( ($relative) && ($result !~ /^:/) ) { # add a leading colon if need be $result = ":$result"; } unless ($relative) { # remove updirs immediately following the volume name $result =~ s/([^:]+:)(:*)(.*)\Z(?!\n)/$1$3/; } return $result; } =item catfile Concatenate one or more directory names and a filename to form a complete path ending with a filename. Resulting paths are B<relative> by default, but can be forced to be absolute (but avoid this). B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the resulting path is relative by default and I<not> absolute. This decision was made due to portability reasons. Since C<File::Spec-E<gt>catfile()> returns relative paths on all other operating systems, it will now also follow this convention on Mac OS. Note that this may break some existing scripts. The last argument is always considered to be the file portion. Since C<catfile()> uses C<catdir()> (see above) for the concatenation of the directory portions (if any), the following with regard to relative and absolute paths is true: catfile("") = "" catfile("file") = "file" but catfile("","") = rootdir() # (e.g. "HD:") catfile("","file") = rootdir() . file # (e.g. "HD:file") catfile("HD:","file") = "HD:file" This means that C<catdir()> is called only when there are two or more arguments, as one might expect. Note that the leading ":" is removed from the filename, so that catfile("a","b","file") = ":a:b:file" and catfile("a","b",":file") = ":a:b:file" give the same answer. To concatenate I<volume names>, I<directory paths> and I<filenames>, you are encouraged to use C<catpath()> (see below). =cut sub catfile { my $self = shift; return '' unless @_; my $file = pop @_; return $file unless @_; my $dir = $self->catdir(@_); $file =~ s/^://s; return $dir.$file; } =item curdir Returns a string representing the current directory. On Mac OS, this is ":". =cut sub curdir { return ":"; } =item devnull Returns a string representing the null device. On Mac OS, this is "Dev:Null". =cut sub devnull { return "Dev:Null"; } =item rootdir Returns the empty string. Mac OS has no real root directory. =cut sub rootdir { '' } =item tmpdir Returns the contents of $ENV{TMPDIR}, if that directory exits or the current working directory otherwise. Under MacPerl, $ENV{TMPDIR} will contain a path like "MacintoshHD:Temporary Items:", which is a hidden directory on your startup volume. =cut sub tmpdir { my $cached = $_[0]->_cached_tmpdir('TMPDIR'); return $cached if defined $cached; $_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR} ), 'TMPDIR'); } =item updir Returns a string representing the parent directory. On Mac OS, this is "::". =cut sub updir { return "::"; } =item file_name_is_absolute Takes as argument a path and returns true, if it is an absolute path. If the path has a leading ":", it's a relative path. Otherwise, it's an absolute path, unless the path doesn't contain any colons, i.e. it's a name like "a". In this particular case, the path is considered to be relative (i.e. it is considered to be a filename). Use ":" in the appropriate place in the path if you want to distinguish unambiguously. As a special case, the filename '' is always considered to be absolute. Note that with version 1.2 of File::Spec::Mac, this does no longer consult the local filesystem. E.g. File::Spec->file_name_is_absolute("a"); # false (relative) File::Spec->file_name_is_absolute(":a:b:"); # false (relative) File::Spec->file_name_is_absolute("MacintoshHD:"); # true (absolute) File::Spec->file_name_is_absolute(""); # true (absolute) =cut sub file_name_is_absolute { my ($self,$file) = @_; if ($file =~ /:/) { return (! ($file =~ m/^:/s) ); } elsif ( $file eq '' ) { return 1 ; } else { return 0; # i.e. a file like "a" } } =item path Returns the null list for the MacPerl application, since the concept is usually meaningless under Mac OS. But if you're using the MacPerl tool under MPW, it gives back $ENV{Commands} suitably split, as is done in :lib:ExtUtils:MM_Mac.pm. =cut sub path { # # The concept is meaningless under the MacPerl application. # Under MPW, it has a meaning. # return unless exists $ENV{Commands}; return split(/,/, $ENV{Commands}); } =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); Splits a path into volume, directory, and filename portions. On Mac OS, assumes that the last part of the path is a filename unless $no_file is true or a trailing separator ":" is present. The volume portion is always returned with a trailing ":". The directory portion is always returned with a leading (to denote a relative path) and a trailing ":" (to denote a directory). The file portion is always returned I<without> a leading ":". Empty portions are returned as empty string ''. The results can be passed to C<catpath()> to get back a path equivalent to (usually identical to) the original path. =cut sub splitpath { my ($self,$path, $nofile) = @_; my ($volume,$directory,$file); if ( $nofile ) { ( $volume, $directory ) = $path =~ m|^((?:[^:]+:)?)(.*)|s; } else { $path =~ m|^( (?: [^:]+: )? ) ( (?: .*: )? ) ( .* ) |xs; $volume = $1; $directory = $2; $file = $3; } $volume = '' unless defined($volume); $directory = ":$directory" if ( $volume && $directory ); # take care of "HD::dir" if ($directory) { # Make sure non-empty directories begin and end in ':' $directory .= ':' unless (substr($directory,-1) eq ':'); $directory = ":$directory" unless (substr($directory,0,1) eq ':'); } else { $directory = ''; } $file = '' unless defined($file); return ($volume,$directory,$file); } =item splitdir The opposite of C<catdir()>. @dirs = File::Spec->splitdir( $directories ); $directories should be only the directory portion of the path on systems that have the concept of a volume or that have path syntax that differentiates files from directories. Consider using C<splitpath()> otherwise. Unlike just splitting the directories on the separator, empty directory names (C<"">) can be returned. Since C<catdir()> on Mac OS always appends a trailing colon to distinguish a directory path from a file path, a single trailing colon will be ignored, i.e. there's no empty directory name after it. Hence, on Mac OS, both File::Spec->splitdir( ":a:b::c:" ); and File::Spec->splitdir( ":a:b::c" ); yield: ( "a", "b", "::", "c") while File::Spec->splitdir( ":a:b::c::" ); yields: ( "a", "b", "::", "c", "::") =cut sub splitdir { my ($self, $path) = @_; my @result = (); my ($head, $sep, $tail, $volume, $directories); return @result if ( (!defined($path)) || ($path eq '') ); return (':') if ($path eq ':'); ( $volume, $sep, $directories ) = $path =~ m|^((?:[^:]+:)?)(:*)(.*)|s; # deprecated, but handle it correctly if ($volume) { push (@result, $volume); $sep .= ':'; } while ($sep || $directories) { if (length($sep) > 1) { my $updir_count = length($sep) - 1; for (my $i=0; $i<$updir_count; $i++) { # push '::' updir_count times; # simulate Unix '..' updirs push (@result, '::'); } } $sep = ''; if ($directories) { ( $head, $sep, $tail ) = $directories =~ m|^((?:[^:]+)?)(:*)(.*)|s; push (@result, $head); $directories = $tail; } } return @result; } =item catpath $path = File::Spec->catpath($volume,$directory,$file); Takes volume, directory and file portions and returns an entire path. On Mac OS, $volume, $directory and $file are concatenated. A ':' is inserted if need be. You may pass an empty string for each portion. If all portions are empty, the empty string is returned. If $volume is empty, the result will be a relative path, beginning with a ':'. If $volume and $directory are empty, a leading ":" (if any) is removed form $file and the remainder is returned. If $file is empty, the resulting path will have a trailing ':'. =cut sub catpath { my ($self,$volume,$directory,$file) = @_; if ( (! $volume) && (! $directory) ) { $file =~ s/^:// if $file; return $file ; } # We look for a volume in $volume, then in $directory, but not both my ($dir_volume, $dir_dirs) = $self->splitpath($directory, 1); $volume = $dir_volume unless length $volume; my $path = $volume; # may be '' $path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':' if ($directory) { $directory = $dir_dirs if $volume; $directory =~ s/^://; # remove leading ':' if any $path .= $directory; $path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':' } if ($file) { $file =~ s/^://; # remove leading ':' if any $path .= $file; } return $path; } =item abs2rel Takes a destination path and an optional base path and returns a relative path from the base path to the destination path: $rel_path = File::Spec->abs2rel( $path ) ; $rel_path = File::Spec->abs2rel( $path, $base ) ; Note that both paths are assumed to have a notation that distinguishes a directory path (with trailing ':') from a file path (without trailing ':'). If $base is not present or '', then the current working directory is used. If $base is relative, then it is converted to absolute form using C<rel2abs()>. This means that it is taken to be relative to the current working directory. If $path and $base appear to be on two different volumes, we will not attempt to resolve the two paths, and we will instead simply return $path. Note that previous versions of this module ignored the volume of $base, which resulted in garbage results part of the time. If $base doesn't have a trailing colon, the last element of $base is assumed to be a filename. This filename is ignored. Otherwise all path components are assumed to be directories. If $path is relative, it is converted to absolute form using C<rel2abs()>. This means that it is taken to be relative to the current working directory. Based on code written by Shigio Yamaguchi. =cut # maybe this should be done in canonpath() ? sub _resolve_updirs { my $path = shift @_; my $proceed; # resolve any updirs, e.g. "HD:tmp::file" -> "HD:file" do { $proceed = ($path =~ s/^(.*):[^:]+::(.*?)\z/$1:$2/); } while ($proceed); return $path; } sub abs2rel { my($self,$path,$base) = @_; # Clean up $path if ( ! $self->file_name_is_absolute( $path ) ) { $path = $self->rel2abs( $path ) ; } # Figure out the effective $base and clean it up. if ( !defined( $base ) || $base eq '' ) { $base = Cwd::getcwd(); } elsif ( ! $self->file_name_is_absolute( $base ) ) { $base = $self->rel2abs( $base ) ; $base = _resolve_updirs( $base ); # resolve updirs in $base } else { $base = _resolve_updirs( $base ); } # Split up paths - ignore $base's file my ( $path_vol, $path_dirs, $path_file ) = $self->splitpath( $path ); my ( $base_vol, $base_dirs ) = $self->splitpath( $base ); return $path unless lc( $path_vol ) eq lc( $base_vol ); # Now, remove all leading components that are the same my @pathchunks = $self->splitdir( $path_dirs ); my @basechunks = $self->splitdir( $base_dirs ); while ( @pathchunks && @basechunks && lc( $pathchunks[0] ) eq lc( $basechunks[0] ) ) { shift @pathchunks ; shift @basechunks ; } # @pathchunks now has the directories to descend in to. # ensure relative path, even if @pathchunks is empty $path_dirs = $self->catdir( ':', @pathchunks ); # @basechunks now contains the number of directories to climb out of. $base_dirs = (':' x @basechunks) . ':' ; return $self->catpath( '', $self->catdir( $base_dirs, $path_dirs ), $path_file ) ; } =item rel2abs Converts a relative path to an absolute path: $abs_path = File::Spec->rel2abs( $path ) ; $abs_path = File::Spec->rel2abs( $path, $base ) ; Note that both paths are assumed to have a notation that distinguishes a directory path (with trailing ':') from a file path (without trailing ':'). If $base is not present or '', then $base is set to the current working directory. If $base is relative, then it is converted to absolute form using C<rel2abs()>. This means that it is taken to be relative to the current working directory. If $base doesn't have a trailing colon, the last element of $base is assumed to be a filename. This filename is ignored. Otherwise all path components are assumed to be directories. If $path is already absolute, it is returned and $base is ignored. Based on code written by Shigio Yamaguchi. =cut sub rel2abs { my ($self,$path,$base) = @_; if ( ! $self->file_name_is_absolute($path) ) { # Figure out the effective $base and clean it up. if ( !defined( $base ) || $base eq '' ) { $base = Cwd::getcwd(); } elsif ( ! $self->file_name_is_absolute($base) ) { $base = $self->rel2abs($base) ; } # Split up paths # ignore $path's volume my ( $path_dirs, $path_file ) = ($self->splitpath($path))[1,2] ; # ignore $base's file part my ( $base_vol, $base_dirs ) = $self->splitpath($base) ; # Glom them together $path_dirs = ':' if ($path_dirs eq ''); $base_dirs =~ s/:$//; # remove trailing ':', if any $base_dirs = $base_dirs . $path_dirs; $path = $self->catpath( $base_vol, $base_dirs, $path_file ); } return $path; } =back =head1 AUTHORS See the authors list in I<File::Spec>. Mac OS support by Paul Schinder <schinder@pobox.com> and Thomas Wegner <wegner_thomas@yahoo.com>. =head1 COPYRIGHT Copyright (c) 2004 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L<File::Spec> and L<File::Spec::Unix>. This package overrides the implementation of these methods, not the semantics. =cut 1; File/Spec/Epoc.pm 0000644 00000003043 15037233331 0007541 0 ustar 00 package File::Spec::Epoc; use strict; our $VERSION = '3.74'; $VERSION =~ tr/_//d; require File::Spec::Unix; our @ISA = qw(File::Spec::Unix); =head1 NAME File::Spec::Epoc - methods for Epoc file specs =head1 SYNOPSIS require File::Spec::Epoc; # Done internally by File::Spec if needed =head1 DESCRIPTION See File::Spec::Unix for a documentation of the methods provided there. This package overrides the implementation of these methods, not the semantics. This package is still a work in progress. ;-) =cut sub case_tolerant { return 1; } =pod =over 4 =item canonpath() No physical check on the filesystem, but a logical cleanup of a path. On UNIX eliminated successive slashes and successive "/.". =back =cut sub canonpath { my ($self,$path) = @_; return unless defined $path; $path =~ s|/+|/|g; # xx////xx -> xx/xx $path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx $path =~ s|^/(\.\./)+|/|s; # /../../xx -> xx $path =~ s|/\Z(?!\n)|| unless $path eq "/"; # xx/ -> xx return $path; } =pod =head1 AUTHOR o.flebbe@gmx.de =head1 COPYRIGHT Copyright (c) 2004 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L<File::Spec> and L<File::Spec::Unix>. This package overrides the implementation of these methods, not the semantics. =cut 1; File/Spec/Functions.pm 0000644 00000004454 15037233331 0010632 0 ustar 00 package File::Spec::Functions; use File::Spec; use strict; our $VERSION = '3.74'; $VERSION =~ tr/_//d; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw( canonpath catdir catfile curdir rootdir updir no_upwards file_name_is_absolute path ); our @EXPORT_OK = qw( devnull tmpdir splitpath splitdir catpath abs2rel rel2abs case_tolerant ); our %EXPORT_TAGS = ( ALL => [ @EXPORT_OK, @EXPORT ] ); require File::Spec::Unix; my %udeps = ( canonpath => [], catdir => [qw(canonpath)], catfile => [qw(canonpath catdir)], case_tolerant => [], curdir => [], devnull => [], rootdir => [], updir => [], ); foreach my $meth (@EXPORT, @EXPORT_OK) { my $sub = File::Spec->can($meth); no strict 'refs'; if (exists($udeps{$meth}) && $sub == File::Spec::Unix->can($meth) && !(grep { File::Spec->can($_) != File::Spec::Unix->can($_) } @{$udeps{$meth}}) && defined(&{"File::Spec::Unix::_fn_$meth"})) { *{$meth} = \&{"File::Spec::Unix::_fn_$meth"}; } else { *{$meth} = sub {&$sub('File::Spec', @_)}; } } 1; __END__ =head1 NAME File::Spec::Functions - portably perform operations on file names =head1 SYNOPSIS use File::Spec::Functions; $x = catfile('a','b'); =head1 DESCRIPTION This module exports convenience functions for all of the class methods provided by File::Spec. For a reference of available functions, please consult L<File::Spec::Unix>, which contains the entire set, and which is inherited by the modules for other platforms. For further information, please see L<File::Spec::Mac>, L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>. =head2 Exports The following functions are exported by default. canonpath catdir catfile curdir rootdir updir no_upwards file_name_is_absolute path The following functions are exported only by request. devnull tmpdir splitpath splitdir catpath abs2rel rel2abs case_tolerant All the functions may be imported using the C<:ALL> tag. =head1 COPYRIGHT Copyright (c) 2004 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO File::Spec, File::Spec::Unix, File::Spec::Mac, File::Spec::OS2, File::Spec::Win32, File::Spec::VMS, ExtUtils::MakeMaker =cut File/Spec/Cygwin.pm 0000644 00000007032 15037233332 0010116 0 ustar 00 package File::Spec::Cygwin; use strict; require File::Spec::Unix; our $VERSION = '3.74'; $VERSION =~ tr/_//d; our @ISA = qw(File::Spec::Unix); =head1 NAME File::Spec::Cygwin - methods for Cygwin file specs =head1 SYNOPSIS require File::Spec::Cygwin; # Done internally by File::Spec if needed =head1 DESCRIPTION See L<File::Spec> and L<File::Spec::Unix>. This package overrides the implementation of these methods, not the semantics. This module is still in beta. Cygwin-knowledgeable folks are invited to offer patches and suggestions. =cut =pod =over 4 =item canonpath Any C<\> (backslashes) are converted to C</> (forward slashes), and then File::Spec::Unix canonpath() is called on the result. =cut sub canonpath { my($self,$path) = @_; return unless defined $path; $path =~ s|\\|/|g; # Handle network path names beginning with double slash my $node = ''; if ( $path =~ s@^(//[^/]+)(?:/|\z)@/@s ) { $node = $1; } return $node . $self->SUPER::canonpath($path); } sub catdir { my $self = shift; return unless @_; # Don't create something that looks like a //network/path if ($_[0] and ($_[0] eq '/' or $_[0] eq '\\')) { shift; return $self->SUPER::catdir('', @_); } $self->SUPER::catdir(@_); } =pod =item file_name_is_absolute True is returned if the file name begins with C<drive_letter:>, and if not, File::Spec::Unix file_name_is_absolute() is called. =cut sub file_name_is_absolute { my ($self,$file) = @_; return 1 if $file =~ m{^([a-z]:)?[\\/]}is; # C:/test return $self->SUPER::file_name_is_absolute($file); } =item tmpdir (override) Returns a string representation of the first existing directory from the following list: $ENV{TMPDIR} /tmp $ENV{'TMP'} $ENV{'TEMP'} C:/temp If running under taint mode, and if the environment variables are tainted, they are not used. =cut sub tmpdir { my $cached = $_[0]->_cached_tmpdir(qw 'TMPDIR TMP TEMP'); return $cached if defined $cached; $_[0]->_cache_tmpdir( $_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp", $ENV{'TMP'}, $ENV{'TEMP'}, 'C:/temp' ), qw 'TMPDIR TMP TEMP' ); } =item case_tolerant Override Unix. Cygwin case-tolerance depends on managed mount settings and as with MsWin32 on GetVolumeInformation() $ouFsFlags == FS_CASE_SENSITIVE, indicating the case significance when comparing file specifications. Default: 1 =cut sub case_tolerant { return 1 unless $^O eq 'cygwin' and defined &Cygwin::mount_flags; my $drive = shift; if (! $drive) { my @flags = split(/,/, Cygwin::mount_flags('/cygwin')); my $prefix = pop(@flags); if (! $prefix || $prefix eq 'cygdrive') { $drive = '/cygdrive/c'; } elsif ($prefix eq '/') { $drive = '/c'; } else { $drive = "$prefix/c"; } } my $mntopts = Cygwin::mount_flags($drive); if ($mntopts and ($mntopts =~ /,managed/)) { return 0; } eval { local @INC = @INC; pop @INC if $INC[-1] eq '.'; require Win32API::File; } or return 1; my $osFsType = "\0"x256; my $osVolName = "\0"x256; my $ouFsFlags = 0; Win32API::File::GetVolumeInformation($drive, $osVolName, 256, [], [], $ouFsFlags, $osFsType, 256 ); if ($ouFsFlags & Win32API::File::FS_CASE_SENSITIVE()) { return 0; } else { return 1; } } =back =head1 COPYRIGHT Copyright (c) 2004,2007 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; File/Spec/AmigaOS.pm 0000644 00000001726 15037233332 0010142 0 ustar 00 package File::Spec::AmigaOS; use strict; require File::Spec::Unix; our $VERSION = '3.74'; $VERSION =~ tr/_//d; our @ISA = qw(File::Spec::Unix); =head1 NAME File::Spec::AmigaOS - File::Spec for AmigaOS =head1 SYNOPSIS require File::Spec::AmigaOS; # Done automatically by File::Spec # if needed =head1 DESCRIPTION Methods for manipulating file specifications. =head1 METHODS =over 2 =item tmpdir Returns $ENV{TMPDIR} or if that is unset, "/t". =cut my $tmpdir; sub tmpdir { return $tmpdir if defined $tmpdir; $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/t" ); } =item file_name_is_absolute Returns true if there's a colon in the file name, or if it begins with a slash. =cut sub file_name_is_absolute { my ($self, $file) = @_; # Not 100% robust as a "/" must not preceded a ":" # but this cannot happen in a well formed path. return $file =~ m{^/|:}s; } =back All the other methods are from L<File::Spec::Unix>. =cut 1; File/Spec/Unix.pm 0000644 00000037021 15037233332 0007602 0 ustar 00 package File::Spec::Unix; use strict; use Cwd (); our $VERSION = '3.74'; $VERSION =~ tr/_//d; =head1 NAME File::Spec::Unix - File::Spec for Unix, base for other File::Spec modules =head1 SYNOPSIS require File::Spec::Unix; # Done automatically by File::Spec =head1 DESCRIPTION Methods for manipulating file specifications. Other File::Spec modules, such as File::Spec::Mac, inherit from File::Spec::Unix and override specific methods. =head1 METHODS =over 2 =item canonpath() No physical check on the filesystem, but a logical cleanup of a path. On UNIX eliminates successive slashes and successive "/.". $cpath = File::Spec->canonpath( $path ) ; Note that this does *not* collapse F<x/../y> sections into F<y>. This is by design. If F</foo> on your system is a symlink to F</bar/baz>, then F</foo/../quux> is actually F</bar/quux>, not F</quux> as a naive F<../>-removal would give you. If you want to do this kind of processing, you probably want C<Cwd>'s C<realpath()> function to actually traverse the filesystem cleaning up paths like this. =cut sub _pp_canonpath { my ($self,$path) = @_; return unless defined $path; # Handle POSIX-style node names beginning with double slash (qnx, nto) # (POSIX says: "a pathname that begins with two successive slashes # may be interpreted in an implementation-defined manner, although # more than two leading slashes shall be treated as a single slash.") my $node = ''; my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto'; if ( $double_slashes_special && ( $path =~ s{^(//[^/]+)/?\z}{}s || $path =~ s{^(//[^/]+)/}{/}s ) ) { $node = $1; } # This used to be # $path =~ s|/+|/|g unless ($^O eq 'cygwin'); # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail # (Mainly because trailing "" directories didn't get stripped). # Why would cygwin avoid collapsing multiple slashes into one? --jhi $path =~ s|/{2,}|/|g; # xx////xx -> xx/xx $path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx $path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx $path =~ s|^/\.\.$|/|; # /.. -> / $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx return "$node$path"; } *canonpath = \&_pp_canonpath unless defined &canonpath; =item catdir() Concatenate two or more directory names to form a complete path ending with a directory. But remove the trailing slash from the resulting string, because it doesn't look good, isn't necessary and confuses OS2. Of course, if this is the root directory, don't cut off the trailing slash :-) =cut sub _pp_catdir { my $self = shift; $self->canonpath(join('/', @_, '')); # '' because need a trailing '/' } *catdir = \&_pp_catdir unless defined &catdir; =item catfile Concatenate one or more directory names and a filename to form a complete path ending with a filename =cut sub _pp_catfile { my $self = shift; my $file = $self->canonpath(pop @_); return $file unless @_; my $dir = $self->catdir(@_); $dir .= "/" unless substr($dir,-1) eq "/"; return $dir.$file; } *catfile = \&_pp_catfile unless defined &catfile; =item curdir Returns a string representation of the current directory. "." on UNIX. =cut sub curdir { '.' } use constant _fn_curdir => "."; =item devnull Returns a string representation of the null device. "/dev/null" on UNIX. =cut sub devnull { '/dev/null' } use constant _fn_devnull => "/dev/null"; =item rootdir Returns a string representation of the root directory. "/" on UNIX. =cut sub rootdir { '/' } use constant _fn_rootdir => "/"; =item tmpdir Returns a string representation of the first writable directory from the following list or the current directory if none from the list are writable: $ENV{TMPDIR} /tmp If running under taint mode, and if $ENV{TMPDIR} is tainted, it is not used. =cut my ($tmpdir, %tmpenv); # Cache and return the calculated tmpdir, recording which env vars # determined it. sub _cache_tmpdir { @tmpenv{@_[2..$#_]} = @ENV{@_[2..$#_]}; return $tmpdir = $_[1]; } # Retrieve the cached tmpdir, checking first whether relevant env vars have # changed and invalidated the cache. sub _cached_tmpdir { shift; local $^W; return if grep $ENV{$_} ne $tmpenv{$_}, @_; return $tmpdir; } sub _tmpdir { my $self = shift; my @dirlist = @_; my $taint = do { no strict 'refs'; ${"\cTAINT"} }; if ($taint) { # Check for taint mode on perl >= 5.8.0 require Scalar::Util; @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist; } elsif ($] < 5.007) { # No ${^TAINT} before 5.8 @dirlist = grep { !defined($_) || eval { eval('1'.substr $_,0,0) } } @dirlist; } foreach (@dirlist) { next unless defined && -d && -w _; $tmpdir = $_; last; } $tmpdir = $self->curdir unless defined $tmpdir; $tmpdir = defined $tmpdir && $self->canonpath($tmpdir); if ( !$self->file_name_is_absolute($tmpdir) ) { # See [perl #120593] for the full details # If possible, return a full path, rather than '.' or 'lib', but # jump through some hoops to avoid returning a tainted value. ($tmpdir) = grep { $taint ? ! Scalar::Util::tainted($_) : $] < 5.007 ? eval { eval('1'.substr $_,0,0) } : 1 } $self->rel2abs($tmpdir), $tmpdir; } return $tmpdir; } sub tmpdir { my $cached = $_[0]->_cached_tmpdir('TMPDIR'); return $cached if defined $cached; $_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" ), 'TMPDIR'); } =item updir Returns a string representation of the parent directory. ".." on UNIX. =cut sub updir { '..' } use constant _fn_updir => ".."; =item no_upwards Given a list of file names, strip out those that refer to a parent directory. (Does not strip symlinks, only '.', '..', and equivalents.) =cut sub no_upwards { my $self = shift; return grep(!/^\.{1,2}\z/s, @_); } =item case_tolerant Returns a true or false value indicating, respectively, that alphabetic is not or is significant when comparing file specifications. =cut sub case_tolerant { 0 } use constant _fn_case_tolerant => 0; =item file_name_is_absolute Takes as argument a path and returns true if it is an absolute path. This does not consult the local filesystem on Unix, Win32, OS/2 or Mac OS (Classic). It does consult the working environment for VMS (see L<File::Spec::VMS/file_name_is_absolute>). =cut sub file_name_is_absolute { my ($self,$file) = @_; return scalar($file =~ m:^/:s); } =item path Takes no argument, returns the environment variable PATH as an array. =cut sub path { return () unless exists $ENV{PATH}; my @path = split(':', $ENV{PATH}); foreach (@path) { $_ = '.' if $_ eq '' } return @path; } =item join join is the same as catfile. =cut sub join { my $self = shift; return $self->catfile(@_); } =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); Splits a path into volume, directory, and filename portions. On systems with no concept of volume, returns '' for volume. For systems with no syntax differentiating filenames from directories, assumes that the last file is a path unless $no_file is true or a trailing separator or /. or /.. is present. On Unix this means that $no_file true makes this return ( '', $path, '' ). The directory portion may or may not be returned with a trailing '/'. The results can be passed to L</catpath()> to get back a path equivalent to (usually identical to) the original path. =cut sub splitpath { my ($self,$path, $nofile) = @_; my ($volume,$directory,$file) = ('','',''); if ( $nofile ) { $directory = $path; } else { $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs; $directory = $1; $file = $2; } return ($volume,$directory,$file); } =item splitdir The opposite of L</catdir()>. @dirs = File::Spec->splitdir( $directories ); $directories must be only the directory portion of the path on systems that have the concept of a volume or that have path syntax that differentiates files from directories. Unlike just splitting the directories on the separator, empty directory names (C<''>) can be returned, because these are significant on some OSs. On Unix, File::Spec->splitdir( "/a/b//c/" ); Yields: ( '', 'a', 'b', '', 'c', '' ) =cut sub splitdir { return split m|/|, $_[1], -1; # Preserve trailing fields } =item catpath() Takes volume, directory and file portions and returns an entire path. Under Unix, $volume is ignored, and directory and file are concatenated. A '/' is inserted if needed (though if the directory portion doesn't start with '/' it is not added). On other OSs, $volume is significant. =cut sub catpath { my ($self,$volume,$directory,$file) = @_; if ( $directory ne '' && $file ne '' && substr( $directory, -1 ) ne '/' && substr( $file, 0, 1 ) ne '/' ) { $directory .= "/$file" ; } else { $directory .= $file ; } return $directory ; } =item abs2rel Takes a destination path and an optional base path returns a relative path from the base path to the destination path: $rel_path = File::Spec->abs2rel( $path ) ; $rel_path = File::Spec->abs2rel( $path, $base ) ; If $base is not present or '', then L<cwd()|Cwd> is used. If $base is relative, then it is converted to absolute form using L</rel2abs()>. This means that it is taken to be relative to L<cwd()|Cwd>. On systems that have a grammar that indicates filenames, this ignores the $base filename. Otherwise all path components are assumed to be directories. If $path is relative, it is converted to absolute form using L</rel2abs()>. This means that it is taken to be relative to L<cwd()|Cwd>. No checks against the filesystem are made, so the result may not be correct if C<$base> contains symbolic links. (Apply L<Cwd::abs_path()|Cwd/abs_path> beforehand if that is a concern.) On VMS, there is interaction with the working environment, as logicals and macros are expanded. Based on code written by Shigio Yamaguchi. =cut sub abs2rel { my($self,$path,$base) = @_; $base = Cwd::getcwd() unless defined $base and length $base; ($path, $base) = map $self->canonpath($_), $path, $base; my $path_directories; my $base_directories; if (grep $self->file_name_is_absolute($_), $path, $base) { ($path, $base) = map $self->rel2abs($_), $path, $base; my ($path_volume) = $self->splitpath($path, 1); my ($base_volume) = $self->splitpath($base, 1); # Can't relativize across volumes return $path unless $path_volume eq $base_volume; $path_directories = ($self->splitpath($path, 1))[1]; $base_directories = ($self->splitpath($base, 1))[1]; # For UNC paths, the user might give a volume like //foo/bar that # strictly speaking has no directory portion. Treat it as if it # had the root directory for that volume. if (!length($base_directories) and $self->file_name_is_absolute($base)) { $base_directories = $self->rootdir; } } else { my $wd= ($self->splitpath(Cwd::getcwd(), 1))[1]; $path_directories = $self->catdir($wd, $path); $base_directories = $self->catdir($wd, $base); } # Now, remove all leading components that are the same my @pathchunks = $self->splitdir( $path_directories ); my @basechunks = $self->splitdir( $base_directories ); if ($base_directories eq $self->rootdir) { return $self->curdir if $path_directories eq $self->rootdir; shift @pathchunks; return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') ); } my @common; while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) { push @common, shift @pathchunks ; shift @basechunks ; } return $self->curdir unless @pathchunks || @basechunks; # @basechunks now contains the directories the resulting relative path # must ascend out of before it can descend to $path_directory. If there # are updir components, we must descend into the corresponding directories # (this only works if they are no symlinks). my @reverse_base; while( defined(my $dir= shift @basechunks) ) { if( $dir ne $self->updir ) { unshift @reverse_base, $self->updir; push @common, $dir; } elsif( @common ) { if( @reverse_base && $reverse_base[0] eq $self->updir ) { shift @reverse_base; pop @common; } else { unshift @reverse_base, pop @common; } } } my $result_dirs = $self->catdir( @reverse_base, @pathchunks ); return $self->canonpath( $self->catpath('', $result_dirs, '') ); } sub _same { $_[1] eq $_[2]; } =item rel2abs() Converts a relative path to an absolute path. $abs_path = File::Spec->rel2abs( $path ) ; $abs_path = File::Spec->rel2abs( $path, $base ) ; If $base is not present or '', then L<cwd()|Cwd> is used. If $base is relative, then it is converted to absolute form using L</rel2abs()>. This means that it is taken to be relative to L<cwd()|Cwd>. On systems that have a grammar that indicates filenames, this ignores the $base filename. Otherwise all path components are assumed to be directories. If $path is absolute, it is cleaned up and returned using L</canonpath()>. No checks against the filesystem are made. On VMS, there is interaction with the working environment, as logicals and macros are expanded. Based on code written by Shigio Yamaguchi. =cut sub rel2abs { my ($self,$path,$base ) = @_; # Clean up $path if ( ! $self->file_name_is_absolute( $path ) ) { # Figure out the effective $base and clean it up. if ( !defined( $base ) || $base eq '' ) { $base = Cwd::getcwd(); } elsif ( ! $self->file_name_is_absolute( $base ) ) { $base = $self->rel2abs( $base ) ; } else { $base = $self->canonpath( $base ) ; } # Glom them together $path = $self->catdir( $base, $path ) ; } return $self->canonpath( $path ) ; } =back =head1 COPYRIGHT Copyright (c) 2004 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Please submit bug reports and patches to perlbug@perl.org. =head1 SEE ALSO L<File::Spec> =cut # Internal method to reduce xx\..\yy -> yy sub _collapse { my($fs, $path) = @_; my $updir = $fs->updir; my $curdir = $fs->curdir; my($vol, $dirs, $file) = $fs->splitpath($path); my @dirs = $fs->splitdir($dirs); pop @dirs if @dirs && $dirs[-1] eq ''; my @collapsed; foreach my $dir (@dirs) { if( $dir eq $updir and # if we have an updir @collapsed and # and something to collapse length $collapsed[-1] and # and its not the rootdir $collapsed[-1] ne $updir and # nor another updir $collapsed[-1] ne $curdir # nor the curdir ) { # then pop @collapsed; # collapse } else { # else push @collapsed, $dir; # just hang onto it } } return $fs->catpath($vol, $fs->catdir(@collapsed), $file ); } 1; File/Spec/OS2.pm 0000644 00000015156 15037233332 0007267 0 ustar 00 package File::Spec::OS2; use strict; use Cwd (); require File::Spec::Unix; our $VERSION = '3.74'; $VERSION =~ tr/_//d; our @ISA = qw(File::Spec::Unix); sub devnull { return "/dev/nul"; } sub case_tolerant { return 1; } sub file_name_is_absolute { my ($self,$file) = @_; return scalar($file =~ m{^([a-z]:)?[\\/]}is); } sub path { my $path = $ENV{PATH}; $path =~ s:\\:/:g; my @path = split(';',$path); foreach (@path) { $_ = '.' if $_ eq '' } return @path; } sub tmpdir { my $cached = $_[0]->_cached_tmpdir(qw 'TMPDIR TEMP TMP'); return $cached if defined $cached; my @d = @ENV{qw(TMPDIR TEMP TMP)}; # function call could autovivivy $_[0]->_cache_tmpdir( $_[0]->_tmpdir( @d, '/tmp', '/' ), qw 'TMPDIR TEMP TMP' ); } sub catdir { my $self = shift; my @args = @_; foreach (@args) { tr[\\][/]; # append a backslash to each argument unless it has one there $_ .= "/" unless m{/$}; } return $self->canonpath(join('', @args)); } sub canonpath { my ($self,$path) = @_; return unless defined $path; $path =~ s/^([a-z]:)/\l$1/s; $path =~ s|\\|/|g; $path =~ s|([^/])/+|$1/|g; # xx////xx -> xx/xx $path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx $path =~ s|^(\./)+(?=[^/])||s; # ./xx -> xx $path =~ s|/\Z(?!\n)|| unless $path =~ m#^([a-z]:)?/\Z(?!\n)#si;# xx/ -> xx $path =~ s{^/\.\.$}{/}; # /.. -> / 1 while $path =~ s{^/\.\.}{}; # /../xx -> /xx return $path; } sub splitpath { my ($self,$path, $nofile) = @_; my ($volume,$directory,$file) = ('','',''); if ( $nofile ) { $path =~ m{^( (?:[a-zA-Z]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? ) (.*) }xs; $volume = $1; $directory = $2; } else { $path =~ m{^ ( (?: [a-zA-Z]: | (?:\\\\|//)[^\\/]+[\\/][^\\/]+ )? ) ( (?:.*[\\\\/](?:\.\.?\Z(?!\n))?)? ) (.*) }xs; $volume = $1; $directory = $2; $file = $3; } return ($volume,$directory,$file); } sub splitdir { my ($self,$directories) = @_ ; split m|[\\/]|, $directories, -1; } sub catpath { my ($self,$volume,$directory,$file) = @_; # If it's UNC, make sure the glue separator is there, reusing # whatever separator is first in the $volume $volume .= $1 if ( $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s && $directory =~ m@^[^\\/]@s ) ; $volume .= $directory ; # If the volume is not just A:, make sure the glue separator is # there, reusing whatever separator is first in the $volume if possible. if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s && $volume =~ m@[^\\/]\Z(?!\n)@ && $file =~ m@[^\\/]@ ) { $volume =~ m@([\\/])@ ; my $sep = $1 ? $1 : '/' ; $volume .= $sep ; } $volume .= $file ; return $volume ; } sub abs2rel { my($self,$path,$base) = @_; # Clean up $path if ( ! $self->file_name_is_absolute( $path ) ) { $path = $self->rel2abs( $path ) ; } else { $path = $self->canonpath( $path ) ; } # Figure out the effective $base and clean it up. if ( !defined( $base ) || $base eq '' ) { $base = Cwd::getcwd(); } elsif ( ! $self->file_name_is_absolute( $base ) ) { $base = $self->rel2abs( $base ) ; } else { $base = $self->canonpath( $base ) ; } # Split up paths my ( $path_volume, $path_directories, $path_file ) = $self->splitpath( $path, 1 ) ; my ( $base_volume, $base_directories ) = $self->splitpath( $base, 1 ) ; return $path unless $path_volume eq $base_volume; # Now, remove all leading components that are the same my @pathchunks = $self->splitdir( $path_directories ); my @basechunks = $self->splitdir( $base_directories ); while ( @pathchunks && @basechunks && lc( $pathchunks[0] ) eq lc( $basechunks[0] ) ) { shift @pathchunks ; shift @basechunks ; } # No need to catdir, we know these are well formed. $path_directories = CORE::join( '/', @pathchunks ); $base_directories = CORE::join( '/', @basechunks ); # $base_directories now contains the directories the resulting relative # path must ascend out of before it can descend to $path_directory. So, # replace all names with $parentDir #FA Need to replace between backslashes... $base_directories =~ s|[^\\/]+|..|g ; # Glue the two together, using a separator if necessary, and preventing an # empty result. #FA Must check that new directories are not empty. if ( $path_directories ne '' && $base_directories ne '' ) { $path_directories = "$base_directories/$path_directories" ; } else { $path_directories = "$base_directories$path_directories" ; } return $self->canonpath( $self->catpath( "", $path_directories, $path_file ) ) ; } sub rel2abs { my ($self,$path,$base ) = @_; if ( ! $self->file_name_is_absolute( $path ) ) { if ( !defined( $base ) || $base eq '' ) { $base = Cwd::getcwd(); } elsif ( ! $self->file_name_is_absolute( $base ) ) { $base = $self->rel2abs( $base ) ; } else { $base = $self->canonpath( $base ) ; } my ( $path_directories, $path_file ) = ($self->splitpath( $path, 1 ))[1,2] ; my ( $base_volume, $base_directories ) = $self->splitpath( $base, 1 ) ; $path = $self->catpath( $base_volume, $self->catdir( $base_directories, $path_directories ), $path_file ) ; } return $self->canonpath( $path ) ; } 1; __END__ =head1 NAME File::Spec::OS2 - methods for OS/2 file specs =head1 SYNOPSIS require File::Spec::OS2; # Done internally by File::Spec if needed =head1 DESCRIPTION See L<File::Spec> and L<File::Spec::Unix>. This package overrides the implementation of these methods, not the semantics. Amongst the changes made for OS/2 are... =over 4 =item tmpdir Modifies the list of places temp directory information is looked for. $ENV{TMPDIR} $ENV{TEMP} $ENV{TMP} /tmp / =item splitpath Volumes can be drive letters or UNC sharenames (\\server\share). =back =head1 COPYRIGHT Copyright (c) 2004 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut File/Spec/Win32.pm 0000644 00000025721 15037233332 0007565 0 ustar 00 package File::Spec::Win32; use strict; use Cwd (); require File::Spec::Unix; our $VERSION = '3.74'; $VERSION =~ tr/_//d; our @ISA = qw(File::Spec::Unix); # Some regexes we use for path splitting my $DRIVE_RX = '[a-zA-Z]:'; my $UNC_RX = '(?:\\\\\\\\|//)[^\\\\/]+[\\\\/][^\\\\/]+'; my $VOL_RX = "(?:$DRIVE_RX|$UNC_RX)"; =head1 NAME File::Spec::Win32 - methods for Win32 file specs =head1 SYNOPSIS require File::Spec::Win32; # Done internally by File::Spec if needed =head1 DESCRIPTION See File::Spec::Unix for a documentation of the methods provided there. This package overrides the implementation of these methods, not the semantics. =over 4 =item devnull Returns a string representation of the null device. =cut sub devnull { return "nul"; } sub rootdir { '\\' } =item tmpdir Returns a string representation of the first existing directory from the following list: $ENV{TMPDIR} $ENV{TEMP} $ENV{TMP} SYS:/temp C:\system\temp C:/temp /tmp / The SYS:/temp is preferred in Novell NetWare and the C:\system\temp for Symbian (the File::Spec::Win32 is used also for those platforms). If running under taint mode, and if the environment variables are tainted, they are not used. =cut sub tmpdir { my $tmpdir = $_[0]->_cached_tmpdir(qw(TMPDIR TEMP TMP)); return $tmpdir if defined $tmpdir; $tmpdir = $_[0]->_tmpdir( map( $ENV{$_}, qw(TMPDIR TEMP TMP) ), 'SYS:/temp', 'C:\system\temp', 'C:/temp', '/tmp', '/' ); $_[0]->_cache_tmpdir($tmpdir, qw(TMPDIR TEMP TMP)); } =item case_tolerant MSWin32 case-tolerance depends on GetVolumeInformation() $ouFsFlags == FS_CASE_SENSITIVE, indicating the case significance when comparing file specifications. Since XP FS_CASE_SENSITIVE is effectively disabled for the NT subsubsystem. See http://cygwin.com/ml/cygwin/2007-07/msg00891.html Default: 1 =cut sub case_tolerant { eval { local @INC = @INC; pop @INC if $INC[-1] eq '.'; require Win32API::File; } or return 1; my $drive = shift || "C:"; my $osFsType = "\0"x256; my $osVolName = "\0"x256; my $ouFsFlags = 0; Win32API::File::GetVolumeInformation($drive, $osVolName, 256, [], [], $ouFsFlags, $osFsType, 256 ); if ($ouFsFlags & Win32API::File::FS_CASE_SENSITIVE()) { return 0; } else { return 1; } } =item file_name_is_absolute As of right now, this returns 2 if the path is absolute with a volume, 1 if it's absolute with no volume, 0 otherwise. =cut sub file_name_is_absolute { my ($self,$file) = @_; if ($file =~ m{^($VOL_RX)}o) { my $vol = $1; return ($vol =~ m{^$UNC_RX}o ? 2 : $file =~ m{^$DRIVE_RX[\\/]}o ? 2 : 0); } return $file =~ m{^[\\/]} ? 1 : 0; } =item catfile Concatenate one or more directory names and a filename to form a complete path ending with a filename =cut sub catfile { shift; # Legacy / compatibility support # shift, return _canon_cat( "/", @_ ) if $_[0] eq ""; # Compatibility with File::Spec <= 3.26: # catfile('A:', 'foo') should return 'A:\foo'. return _canon_cat( ($_[0].'\\'), @_[1..$#_] ) if $_[0] =~ m{^$DRIVE_RX\z}o; return _canon_cat( @_ ); } sub catdir { shift; # Legacy / compatibility support # return "" unless @_; shift, return _canon_cat( "/", @_ ) if $_[0] eq ""; # Compatibility with File::Spec <= 3.26: # catdir('A:', 'foo') should return 'A:\foo'. return _canon_cat( ($_[0].'\\'), @_[1..$#_] ) if $_[0] =~ m{^$DRIVE_RX\z}o; return _canon_cat( @_ ); } sub path { my @path = split(';', $ENV{PATH}); s/"//g for @path; @path = grep length, @path; unshift(@path, "."); return @path; } =item canonpath No physical check on the filesystem, but a logical cleanup of a path. On UNIX eliminated successive slashes and successive "/.". On Win32 makes dir1\dir2\dir3\..\..\dir4 -> \dir\dir4 and even dir1\dir2\dir3\...\dir4 -> \dir\dir4 =cut sub canonpath { # Legacy / compatibility support # return $_[1] if !defined($_[1]) or $_[1] eq ''; return _canon_cat( $_[1] ); } =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); Splits a path into volume, directory, and filename portions. Assumes that the last file is a path unless the path ends in '\\', '\\.', '\\..' or $no_file is true. On Win32 this means that $no_file true makes this return ( $volume, $path, '' ). Separators accepted are \ and /. Volumes can be drive letters or UNC sharenames (\\server\share). The results can be passed to L</catpath> to get back a path equivalent to (usually identical to) the original path. =cut sub splitpath { my ($self,$path, $nofile) = @_; my ($volume,$directory,$file) = ('','',''); if ( $nofile ) { $path =~ m{^ ( $VOL_RX ? ) (.*) }sox; $volume = $1; $directory = $2; } else { $path =~ m{^ ( $VOL_RX ? ) ( (?:.*[\\/](?:\.\.?\Z(?!\n))?)? ) (.*) }sox; $volume = $1; $directory = $2; $file = $3; } return ($volume,$directory,$file); } =item splitdir The opposite of L<catdir()|File::Spec/catdir>. @dirs = File::Spec->splitdir( $directories ); $directories must be only the directory portion of the path on systems that have the concept of a volume or that have path syntax that differentiates files from directories. Unlike just splitting the directories on the separator, leading empty and trailing directory entries can be returned, because these are significant on some OSs. So, File::Spec->splitdir( "/a/b/c" ); Yields: ( '', 'a', 'b', '', 'c', '' ) =cut sub splitdir { my ($self,$directories) = @_ ; # # split() likes to forget about trailing null fields, so here we # check to be sure that there will not be any before handling the # simple case. # if ( $directories !~ m|[\\/]\Z(?!\n)| ) { return split( m|[\\/]|, $directories ); } else { # # since there was a trailing separator, add a file name to the end, # then do the split, then replace it with ''. # my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ; $directories[ $#directories ]= '' ; return @directories ; } } =item catpath Takes volume, directory and file portions and returns an entire path. Under Unix, $volume is ignored, and this is just like catfile(). On other OSs, the $volume become significant. =cut sub catpath { my ($self,$volume,$directory,$file) = @_; # If it's UNC, make sure the glue separator is there, reusing # whatever separator is first in the $volume my $v; $volume .= $v if ( (($v) = $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s) && $directory =~ m@^[^\\/]@s ) ; $volume .= $directory ; # If the volume is not just A:, make sure the glue separator is # there, reusing whatever separator is first in the $volume if possible. if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s && $volume =~ m@[^\\/]\Z(?!\n)@ && $file =~ m@[^\\/]@ ) { $volume =~ m@([\\/])@ ; my $sep = $1 ? $1 : '\\' ; $volume .= $sep ; } $volume .= $file ; return $volume ; } sub _same { lc($_[1]) eq lc($_[2]); } sub rel2abs { my ($self,$path,$base ) = @_; my $is_abs = $self->file_name_is_absolute($path); # Check for volume (should probably document the '2' thing...) return $self->canonpath( $path ) if $is_abs == 2; if ($is_abs) { # It's missing a volume, add one my $vol = ($self->splitpath( Cwd::getcwd() ))[0]; return $self->canonpath( $vol . $path ); } if ( !defined( $base ) || $base eq '' ) { $base = Cwd::getdcwd( ($self->splitpath( $path ))[0] ) if defined &Cwd::getdcwd ; $base = Cwd::getcwd() unless defined $base ; } elsif ( ! $self->file_name_is_absolute( $base ) ) { $base = $self->rel2abs( $base ) ; } else { $base = $self->canonpath( $base ) ; } my ( $path_directories, $path_file ) = ($self->splitpath( $path, 1 ))[1,2] ; my ( $base_volume, $base_directories ) = $self->splitpath( $base, 1 ) ; $path = $self->catpath( $base_volume, $self->catdir( $base_directories, $path_directories ), $path_file ) ; return $self->canonpath( $path ) ; } =back =head2 Note For File::Spec::Win32 Maintainers Novell NetWare inherits its File::Spec behaviour from File::Spec::Win32. =head1 COPYRIGHT Copyright (c) 2004,2007 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L<File::Spec> and L<File::Spec::Unix>. This package overrides the implementation of these methods, not the semantics. =cut sub _canon_cat # @path -> path { my ($first, @rest) = @_; my $volume = $first =~ s{ \A ([A-Za-z]:) ([\\/]?) }{}x # drive letter ? ucfirst( $1 ).( $2 ? "\\" : "" ) : $first =~ s{ \A (?:\\\\|//) ([^\\/]+) (?: [\\/] ([^\\/]+) )? [\\/]? }{}xs # UNC volume ? "\\\\$1".( defined $2 ? "\\$2" : "" )."\\" : $first =~ s{ \A [\\/] }{}x # root dir ? "\\" : ""; my $path = join "\\", $first, @rest; $path =~ tr#\\/#\\\\#s; # xx/yy --> xx\yy & xx\\yy --> xx\yy # xx/././yy --> xx/yy $path =~ s{(?: (?:\A|\\) # at begin or after a slash \. (?:\\\.)* # and more (?:\\|\z) # at end or followed by slash )+ # performance boost -- I do not know why }{\\}gx; # XXX I do not know whether more dots are supported by the OS supporting # this ... annotation (NetWare or symbian but not MSWin32). # Then .... could easily become ../../.. etc: # Replace \.\.\. by (\.\.\.+) and substitute with # { $1 . ".." . "\\.." x (length($2)-2) }gex # ... --> ../.. $path =~ s{ (\A|\\) # at begin or after a slash \.\.\. (?=\\|\z) # at end or followed by slash }{$1..\\..}gx; # xx\yy\..\zz --> xx\zz while ( $path =~ s{(?: (?:\A|\\) # at begin or after a slash [^\\]+ # rip this 'yy' off \\\.\. (?<!\A\.\.\\\.\.) # do *not* replace ^..\.. (?<!\\\.\.\\\.\.) # do *not* replace \..\.. (?:\\|\z) # at end or followed by slash )+ # performance boost -- I do not know why }{\\}sx ) {} $path =~ s#\A\\##; # \xx --> xx NOTE: this is *not* root $path =~ s#\\\z##; # xx\ --> xx if ( $volume =~ m#\\\z# ) { # <vol>\.. --> <vol>\ $path =~ s{ \A # at begin \.\. (?:\\\.\.)* # and more (?:\\|\z) # at end or followed by slash }{}x; return $1 # \\HOST\SHARE\ --> \\HOST\SHARE if $path eq "" and $volume =~ m#\A(\\\\.*)\\\z#s; } return $path ne "" || $volume ? $volume.$path : "."; } 1; Devel/PPPort.pm 0000644 00000676213 15037233332 0007345 0 ustar 00 ################################################################################ # # !!!!! Do NOT edit this file directly! -- Edit PPPort_pm.PL instead. !!!!! # # This file was automatically generated from the definition files in the # parts/inc/ subdirectory by PPPort_pm.PL. To learn more about how all this # works, please read the F<HACKERS> file that came with this distribution. # ################################################################################ # # Perl/Pollution/Portability # ################################################################################ # # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # ################################################################################ =head1 NAME Devel::PPPort - Perl/Pollution/Portability =head1 SYNOPSIS Devel::PPPort::WriteFile(); # defaults to ./ppport.h Devel::PPPort::WriteFile('someheader.h'); # Same as above but retrieve contents rather than write file my $contents = Devel::PPPort::GetFileContents(); my $contents = Devel::PPPort::GetFileContents('someheader.h'); =head1 DESCRIPTION Perl's API has changed over time, gaining new features, new functions, increasing its flexibility, and reducing the impact on the C namespace environment (reduced pollution). The header file written by this module, typically F<ppport.h>, attempts to bring some of the newer Perl API features to older versions of Perl, so that you can worry less about keeping track of old releases, but users can still reap the benefit. C<Devel::PPPort> contains two functions, C<WriteFile> and C<GetFileContents>. C<WriteFile>'s only purpose is to write the F<ppport.h> C header file. This file contains a series of macros and, if explicitly requested, functions that allow XS modules to be built using older versions of Perl. Currently, Perl versions from 5.003 to 5.20 are supported. C<GetFileContents> can be used to retrieve the file contents rather than writing it out. This module is used by C<h2xs> to write the file F<ppport.h>. =head2 Why use ppport.h? You should use F<ppport.h> in modern code so that your code will work with the widest range of Perl interpreters possible, without significant additional work. You should attempt older code to fully use F<ppport.h>, because the reduced pollution of newer Perl versions is an important thing. It's so important that the old polluting ways of original Perl modules will not be supported very far into the future, and your module will almost certainly break! By adapting to it now, you'll gain compatibility and a sense of having done the electronic ecology some good. =head2 How to use ppport.h Don't direct the users of your module to download C<Devel::PPPort>. They are most probably no XS writers. Also, don't make F<ppport.h> optional. Rather, just take the most recent copy of F<ppport.h> that you can find (e.g. by generating it with the latest C<Devel::PPPort> release from CPAN), copy it into your project, adjust your project to use it, and distribute the header along with your module. =head2 Running ppport.h But F<ppport.h> is more than just a C header. It's also a Perl script that can check your source code. It will suggest hints and portability notes, and can even make suggestions on how to change your code. You can run it like any other Perl program: perl ppport.h [options] [files] It also has embedded documentation, so you can use perldoc ppport.h to find out more about how to use it. =head1 FUNCTIONS =head2 WriteFile C<WriteFile> takes one optional argument. When called with one argument, it expects to be passed a filename. When called with no arguments, it defaults to the filename F<ppport.h>. The function returns a true value if the file was written successfully. Otherwise it returns a false value. =head2 GetFileContents C<GetFileContents> behaves like C<WriteFile> above, but returns the contents of the would-be file rather than writing it out. =head1 COMPATIBILITY F<ppport.h> supports Perl versions from 5.003 to 5.20 in threaded and non-threaded configurations. =head2 Provided Perl compatibility API The header file written by this module, typically F<ppport.h>, provides access to the following elements of the Perl API that is not available in older Perl releases: _aMY_CXT _pMY_CXT aMY_CXT aMY_CXT_ aTHX aTHX_ aTHXR aTHXR_ AvFILLp boolSV C_ARRAY_END C_ARRAY_LENGTH call_argv call_method call_pv call_sv caller_cx cBOOL ckWARN CopFILE CopFILE_set CopFILEAV CopFILEGV CopFILEGV_set CopFILESV CopSTASH CopSTASH_eq CopSTASH_set CopSTASHPV CopSTASHPV_set CopyD CPERLscope dAX dAXMARK DEFSV DEFSV_set dITEMS dMY_CXT dMY_CXT_SV dNOOP dTHR dTHX dTHXa dTHXoa dTHXR dUNDERBAR dVAR dXCPT dXSTARG END_EXTERN_C ERRSV eval_pv eval_sv EXTERN_C G_METHOD get_av get_cv get_cvs get_hv get_sv grok_bin grok_hex grok_number GROK_NUMERIC_RADIX grok_numeric_radix grok_oct gv_fetchpvn_flags gv_fetchpvs gv_stashpvn gv_stashpvs HEf_SVKEY HeUTF8 hv_fetchs hv_stores HvNAME_get HvNAMELEN_get IN_LOCALE IN_LOCALE_COMPILETIME IN_LOCALE_RUNTIME IN_PERL_COMPILETIME INT2PTR IS_NUMBER_GREATER_THAN_UV_MAX IS_NUMBER_IN_UV IS_NUMBER_INFINITY IS_NUMBER_NAN IS_NUMBER_NEG IS_NUMBER_NOT_INT isALNUMC isASCII isBLANK isCNTRL isGRAPH isPRINT isPSXSPC isPUNCT isXDIGIT IVdf IVSIZE IVTYPE load_module memEQ memEQs memNE memNEs mg_findext MoveD mPUSHi mPUSHn mPUSHp mPUSHs mPUSHu MUTABLE_PTR MUTABLE_SV mXPUSHi mXPUSHn mXPUSHp mXPUSHs mXPUSHu MY_CXT MY_CXT_CLONE MY_CXT_INIT my_snprintf my_sprintf my_strlcat my_strlcpy newCONSTSUB newRV_inc newRV_noinc newSV_type newSVpvn newSVpvn_flags newSVpvn_share newSVpvn_utf8 newSVpvs newSVpvs_flags newSVpvs_share newSVuv Newx Newxc Newxz NOOP NUM2PTR NVef NVff NVgf NVTYPE OpHAS_SIBLING OpLASTSIB_set OpMAYBESIB_set OpMORESIB_set OpSIBLING packWARN PERL_ABS PERL_BCDVERSION PERL_GCC_BRACE_GROUPS_FORBIDDEN PERL_HASH PERL_INT_MAX PERL_INT_MIN PERL_LONG_MAX PERL_LONG_MIN PERL_MAGIC_arylen PERL_MAGIC_backref PERL_MAGIC_bm PERL_MAGIC_collxfrm PERL_MAGIC_dbfile PERL_MAGIC_dbline PERL_MAGIC_defelem PERL_MAGIC_env PERL_MAGIC_envelem PERL_MAGIC_ext PERL_MAGIC_fm PERL_MAGIC_glob PERL_MAGIC_isa PERL_MAGIC_isaelem PERL_MAGIC_mutex PERL_MAGIC_nkeys PERL_MAGIC_overload PERL_MAGIC_overload_elem PERL_MAGIC_overload_table PERL_MAGIC_pos PERL_MAGIC_qr PERL_MAGIC_regdata PERL_MAGIC_regdatum PERL_MAGIC_regex_global PERL_MAGIC_shared PERL_MAGIC_shared_scalar PERL_MAGIC_sig PERL_MAGIC_sigelem PERL_MAGIC_substr PERL_MAGIC_sv PERL_MAGIC_taint PERL_MAGIC_tied PERL_MAGIC_tiedelem PERL_MAGIC_tiedscalar PERL_MAGIC_utf8 PERL_MAGIC_uvar PERL_MAGIC_uvar_elem PERL_MAGIC_vec PERL_MAGIC_vstring PERL_PV_ESCAPE_ALL PERL_PV_ESCAPE_FIRSTCHAR PERL_PV_ESCAPE_NOBACKSLASH PERL_PV_ESCAPE_NOCLEAR PERL_PV_ESCAPE_QUOTE PERL_PV_ESCAPE_RE PERL_PV_ESCAPE_UNI PERL_PV_ESCAPE_UNI_DETECT PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES PERL_PV_PRETTY_LTGT PERL_PV_PRETTY_NOCLEAR PERL_PV_PRETTY_QUOTE PERL_PV_PRETTY_REGPROP PERL_QUAD_MAX PERL_QUAD_MIN PERL_REVISION PERL_SCAN_ALLOW_UNDERSCORES PERL_SCAN_DISALLOW_PREFIX PERL_SCAN_GREATER_THAN_UV_MAX PERL_SCAN_SILENT_ILLDIGIT PERL_SHORT_MAX PERL_SHORT_MIN PERL_SIGNALS_UNSAFE_FLAG PERL_SUBVERSION PERL_UCHAR_MAX PERL_UCHAR_MIN PERL_UINT_MAX PERL_UINT_MIN PERL_ULONG_MAX PERL_ULONG_MIN PERL_UNUSED_ARG PERL_UNUSED_CONTEXT PERL_UNUSED_DECL PERL_UNUSED_RESULT PERL_UNUSED_VAR PERL_UQUAD_MAX PERL_UQUAD_MIN PERL_USE_GCC_BRACE_GROUPS PERL_USHORT_MAX PERL_USHORT_MIN PERL_VERSION Perl_warner Perl_warner_nocontext PERLIO_FUNCS_CAST PERLIO_FUNCS_DECL PL_bufend PL_bufptr PL_compiling PL_copline PL_curcop PL_curstash PL_DBsignal PL_DBsingle PL_DBsub PL_DBtrace PL_debstash PL_defgv PL_diehook PL_dirty PL_dowarn PL_errgv PL_error_count PL_expect PL_hexdigit PL_hints PL_in_my PL_in_my_stash PL_laststatval PL_lex_state PL_lex_stuff PL_linestr PL_na PL_no_modify PL_parser PL_perl_destruct_level PL_perldb PL_ppaddr PL_rsfp PL_rsfp_filters PL_signals PL_stack_base PL_stack_sp PL_statcache PL_stdingv PL_Sv PL_sv_arenaroot PL_sv_no PL_sv_undef PL_sv_yes PL_tainted PL_tainting PL_tokenbuf pMY_CXT pMY_CXT_ Poison PoisonFree PoisonNew PoisonWith pTHX pTHX_ PTR2IV PTR2nat PTR2NV PTR2ul PTR2UV PTRV PUSHmortal PUSHu pv_display pv_escape pv_pretty SAVE_DEFSV START_EXTERN_C START_MY_CXT STMT_END STMT_START STR_WITH_LEN sv_2pv_flags sv_2pv_nolen sv_2pvbyte sv_2pvbyte_nolen sv_2uv sv_catpv_mg sv_catpvf_mg sv_catpvf_mg_nocontext sv_catpvn_mg sv_catpvn_nomg sv_catpvs sv_catsv_mg sv_catsv_nomg SV_CONST_RETURN SV_COW_DROP_PV SV_COW_SHARED_HASH_KEYS SV_GMAGIC SV_HAS_TRAILING_NUL SV_IMMEDIATE_UNREF sv_magic_portable SV_MUTABLE_RETURN SV_NOSTEAL sv_pvn_force_flags sv_pvn_nomg sv_setiv_mg sv_setnv_mg sv_setpv_mg sv_setpvf_mg sv_setpvf_mg_nocontext sv_setpvn_mg sv_setpvs sv_setsv_mg sv_setsv_nomg sv_setuv sv_setuv_mg SV_SMAGIC sv_unmagicext sv_usepvn_mg SV_UTF8_NO_ENCODING sv_uv sv_vcatpvf sv_vcatpvf_mg sv_vsetpvf sv_vsetpvf_mg SVf SVf_UTF8 SVfARG SvGETMAGIC SvIV_nomg SvMAGIC_set SvPV_const SvPV_flags SvPV_flags_const SvPV_flags_const_nolen SvPV_flags_mutable SvPV_force SvPV_force_flags SvPV_force_flags_mutable SvPV_force_flags_nolen SvPV_force_mutable SvPV_force_nolen SvPV_force_nomg SvPV_force_nomg_nolen SvPV_mutable SvPV_nolen SvPV_nolen_const SvPV_nomg SvPV_nomg_const SvPV_nomg_const_nolen SvPV_nomg_nolen SvPV_renew SvPVbyte SvPVX_const SvPVX_mutable SvREFCNT_inc SvREFCNT_inc_NN SvREFCNT_inc_simple SvREFCNT_inc_simple_NN SvREFCNT_inc_simple_void SvREFCNT_inc_simple_void_NN SvREFCNT_inc_void SvREFCNT_inc_void_NN SvRV_set SvRX SvRXOK SvSHARED_HASH SvSTASH_set SvUOK SvUV SvUV_nomg SvUV_set SvUVX SvUVx SvUVXx SvVSTRING_mg UNDERBAR UTF8_MAXBYTES UVof UVSIZE UVTYPE UVuf UVXf UVxf vload_module vnewSVpvf WARN_ALL WARN_AMBIGUOUS WARN_ASSERTIONS WARN_BAREWORD WARN_CLOSED WARN_CLOSURE WARN_DEBUGGING WARN_DEPRECATED WARN_DIGIT WARN_EXEC WARN_EXITING WARN_GLOB WARN_INPLACE WARN_INTERNAL WARN_IO WARN_LAYER WARN_MALLOC WARN_MISC WARN_NEWLINE WARN_NUMERIC WARN_ONCE WARN_OVERFLOW WARN_PACK WARN_PARENTHESIS WARN_PIPE WARN_PORTABLE WARN_PRECEDENCE WARN_PRINTF WARN_PROTOTYPE WARN_QW WARN_RECURSION WARN_REDEFINE WARN_REGEXP WARN_RESERVED WARN_SEMICOLON WARN_SEVERE WARN_SIGNAL WARN_SUBSTR WARN_SYNTAX WARN_TAINT WARN_THREADS WARN_UNINITIALIZED WARN_UNOPENED WARN_UNPACK WARN_UNTIE WARN_UTF8 WARN_VOID warner WIDEST_UTYPE XCPT_CATCH XCPT_RETHROW XCPT_TRY_END XCPT_TRY_START XPUSHmortal XPUSHu XSprePUSH XSPROTO XSRETURN XSRETURN_UV XST_mUV ZeroD =head2 Perl API not supported by ppport.h There is still a big part of the API not supported by F<ppport.h>. Either because it doesn't make sense to back-port that part of the API, or simply because it hasn't been implemented yet. Patches welcome! Here's a list of the currently unsupported API, and also the version of Perl below which it is unsupported: =over 4 =item perl 5.24.0 BhkDISABLE BhkENABLE BhkENTRY_set MULTICALL PERL_SYS_TERM POP_MULTICALL PUSH_MULTICALL PadARRAY PadMAX PadlistARRAY PadlistMAX PadlistNAMES PadlistNAMESARRAY PadlistNAMESMAX PadnameLEN PadnamePV PadnameREFCNT PadnameREFCNT_dec PadnameSV PadnamelistARRAY PadnamelistMAX PadnamelistREFCNT PadnamelistREFCNT_dec RESTORE_LC_NUMERIC STORE_LC_NUMERIC_FORCE_TO_UNDERLYING STORE_LC_NUMERIC_SET_TO_NEEDED XS_APIVERSION_BOOTCHECK XS_EXTERNAL XS_INTERNAL XS_VERSION_BOOTCHECK XopDISABLE XopENABLE XopENTRY XopENTRYCUSTOM XopENTRY_set cophh_new_empty my_lstat my_stat reentrant_free reentrant_init reentrant_retry reentrant_size ref sv_setref_pvs =item perl 5.23.9 toFOLD_uvchr toLOWER_uvchr toTITLE_uvchr toUPPER_uvchr =item perl 5.23.8 clear_defarray cx_popblock cx_popeval cx_popformat cx_popgiven cx_poploop cx_popsub cx_popsub_args cx_popsub_common cx_popwhen cx_pushblock cx_pusheval cx_pushformat cx_pushgiven cx_pushloop_for cx_pushloop_plain cx_pushsub cx_pushwhen cx_topblock leave_adjust_stacks savetmps =item perl 5.22.0 UVCHR_SKIP =item perl 5.21.10 DECLARATION_FOR_LC_NUMERIC_MANIPULATION =item perl 5.21.8 sv_get_backrefs =item perl 5.21.7 PadnameUTF8 is_invariant_string newPADNAMELIST newPADNAMEouter newPADNAMEpvn newUNOP_AUX padnamelist_fetch padnamelist_store =item perl 5.21.6 newDEFSVOP op_convert_list =item perl 5.21.5 cv_name newMETHOP newMETHOP_named =item perl 5.21.4 cv_set_call_checker_flags grok_infnan isinfnan sync_locale =item perl 5.21.2 grok_number_flags op_sibling_splice =item perl 5.21.1 _is_in_locale_category _is_utf8_char_slow _is_utf8_idcont _is_utf8_idstart _is_utf8_xidcont _is_utf8_xidstart isALNUM_lazy isIDFIRST_lazy isUTF8_CHAR markstack_grow my_strerror =item perl 5.19.10 OP_TYPE_IS_OR_WAS =item perl 5.19.9 _to_utf8_fold_flags _to_utf8_lower_flags _to_utf8_title_flags _to_utf8_upper_flags =item perl 5.19.7 OP_TYPE_IS =item perl 5.19.4 append_utf8_from_native_byte is_safe_syscall uvoffuni_to_utf8_flags =item perl 5.19.3 croak_memory_wrap sv_pos_b2u_flags =item perl 5.19.2 SVt_INVLIST =item perl 5.19.1 re_intuit_start toFOLD toFOLD_utf8 toLOWER_L1 toTITLE =item perl 5.18.0 hv_rand_set =item perl 5.17.9 av_tindex av_top_index =item perl 5.17.8 _is_uni_FOO _is_uni_perl_idcont _is_utf8_FOO _is_utf8_mark _is_utf8_perl_idcont isALPHANUMERIC isIDCONT =item perl 5.17.7 SvREFCNT_dec_NN _is_uni_perl_idstart _is_utf8_perl_idstart is_uni_alnumc is_uni_alnumc_lc is_utf8_alnumc =item perl 5.17.6 READ_XDIGIT =item perl 5.17.4 PL_comppad_name PadlistREFCNT newMYSUB newSVpadname =item perl 5.17.2 is_uni_blank is_uni_blank_lc is_utf8_blank sv_copypv_flags sv_copypv_nomg sv_vcatpvfn_flags =item perl 5.15.9 utf8_to_uvchr_buf utf8_to_uvuni_buf valid_utf8_to_uvchr valid_utf8_to_uvuni =item perl 5.15.8 is_utf8_char_buf wrap_op_checker =item perl 5.15.7 toLOWER_utf8 toTITLE_utf8 toUPPER_utf8 to_utf8_fold to_utf8_lower to_utf8_title to_utf8_upper =item perl 5.15.6 newCONSTSUB_flags =item perl 5.15.4 HvENAMELEN HvENAMEUTF8 HvNAMELEN HvNAMEUTF8 gv_autoload_pv gv_autoload_pvn gv_autoload_sv gv_fetchmeth_pv gv_fetchmeth_pv_autoload gv_fetchmeth_pvn gv_fetchmeth_pvn_autoload gv_fetchmeth_sv gv_fetchmeth_sv_autoload gv_fetchmethod_pv_flags gv_fetchmethod_pvn_flags gv_fetchmethod_sv_flags gv_init_pv gv_init_sv newGVgen_flags sv_derived_from_pv sv_derived_from_pvn sv_derived_from_sv sv_does_pv sv_does_pvn sv_does_sv sv_ref whichsig_pv whichsig_pvn whichsig_sv =item perl 5.15.1 cop_fetch_label cop_store_label pad_add_name_pv pad_add_name_pvn pad_add_name_pvs pad_add_name_sv pad_findmy_pv pad_findmy_pvn pad_findmy_pvs pad_findmy_sv =item perl 5.14.0 _to_uni_fold_flags =item perl 5.13.10 foldEQ_utf8_flags is_utf8_xidcont is_utf8_xidfirst =item perl 5.13.8 foldEQ_latin1 parse_arithexpr parse_fullexpr parse_listexpr parse_termexpr =item perl 5.13.7 HvENAME OP_CLASS XopFLAGS amagic_deref_call bytes_cmp_utf8 cop_hints_2hv cop_hints_fetch_pv cop_hints_fetch_pvn cop_hints_fetch_pvs cop_hints_fetch_sv cophh_2hv cophh_copy cophh_delete_pv cophh_delete_pvn cophh_delete_pvs cophh_delete_sv cophh_fetch_pv cophh_fetch_pvn cophh_fetch_pvs cophh_fetch_sv cophh_free cophh_store_pv cophh_store_pvn cophh_store_pvs cophh_store_sv custom_op_register custom_op_xop newFOROP newWHILEOP op_lvalue op_scope parse_barestmt parse_block parse_label =item perl 5.13.6 LINKLIST SvTRUE_nomg ck_entersub_args_list ck_entersub_args_proto ck_entersub_args_proto_or_list cv_get_call_checker cv_set_call_checker isWORDCHAR lex_stuff_pv mg_free_type newSVpv_share op_append_elem op_append_list op_contextualize op_linklist op_prepend_elem parse_stmtseq rv2cv_op_cv savesharedpvs savesharedsvpv sv_2bool_flags sv_catpv_flags sv_catpv_nomg sv_catpvs_flags sv_catpvs_mg sv_catpvs_nomg sv_cmp_flags sv_cmp_locale_flags sv_collxfrm_flags sv_eq_flags sv_setpvs_mg =item perl 5.13.5 PL_rpeepp isOCTAL lex_stuff_pvs parse_fullstmt =item perl 5.13.3 blockhook_register croak_no_modify =item perl 5.13.2 SvNV_nomg find_rundefsv foldEQ foldEQ_locale foldEQ_utf8 hv_fill sv_dec_nomg sv_inc_nomg =item perl 5.13.1 croak_sv die_sv mess_sv sv_2nv_flags warn_sv =item perl 5.11.5 sv_pos_u2b_flags =item perl 5.11.4 prescan_version =item perl 5.11.2 PL_keyword_plugin lex_bufutf8 lex_discard_to lex_grow_linestr lex_next_chunk lex_peek_unichar lex_read_space lex_read_to lex_read_unichar lex_stuff_pvn lex_stuff_sv lex_unstuff =item perl 5.11.1 ck_warner ck_warner_d is_utf8_perl_space is_utf8_perl_word is_utf8_posix_digit =item perl 5.11.0 Gv_AMupdate PL_opfreehook SVt_REGEXP SvOOK_offset av_iter_p gv_add_by_type is_ascii_string pregfree2 save_adelete save_aelem_flags save_hdelete save_helem_flags sv_utf8_upgrade_flags_grow =item perl 5.10.1 croak_xs_usage mro_get_from_name mro_get_private_data mro_register mro_set_mro mro_set_private_data save_hints save_padsv_and_mortalize save_pushi32ptr save_pushptr save_pushptrptr sv_insert_flags =item perl 5.10.0 hv_common hv_common_key_len sv_destroyable sys_init sys_init3 sys_term =item perl 5.9.5 Perl_signbit av_create_and_push av_create_and_unshift_one gv_fetchfile_flags lex_start mro_get_linear_isa mro_method_changed_in my_dirfd pregcomp ptr_table_clear ptr_table_fetch ptr_table_free ptr_table_new ptr_table_split ptr_table_store re_compile reg_named_buff_all reg_named_buff_exists reg_named_buff_fetch reg_named_buff_firstkey reg_named_buff_nextkey reg_named_buff_scalar regfree_internal savesharedpvn scan_vstring upg_version =item perl 5.9.4 PerlIO_context_layers gv_name_set hv_copy_hints_hv my_vsnprintf newXS_flags regclass_swash sv_does sv_usepvn_flags =item perl 5.9.3 av_arylen_p ckwarn ckwarn_d csighandler dMULTICALL doref gv_const_sv hv_eiter_p hv_eiter_set hv_name_set hv_placeholders_get hv_placeholders_set hv_riter_p hv_riter_set is_utf8_string_loclen newGIVENOP newSVhek newWHENOP pad_compname_type savepvs sortsv_flags vverify =item perl 5.9.2 SvPVbyte_force find_rundefsvoffset op_refcnt_lock op_refcnt_unlock savesvpv vnormal =item perl 5.9.1 hv_clear_placeholders hv_scalar scan_version sv_2iv_flags sv_2uv_flags =item perl 5.9.0 new_version save_set_svflags vcmp vnumify vstringify =item perl 5.8.3 SvIsCOW SvIsCOW_shared_hash =item perl 5.8.1 CvPADLIST PL_comppad SvVOK doing_taint find_runcv is_utf8_string_loc packlist pad_add_anon pad_new pad_tidy save_bool savestack_grow_cnt seed sv_cat_decode sv_setpviv sv_setpviv_mg unpackstring =item perl 5.8.0 HeUTF8 hv_iternext_flags hv_store_flags is_utf8_idcont nothreadhook =item perl 5.7.3 OP_DESC OP_NAME PL_peepp PerlIO_clearerr PerlIO_close PerlIO_eof PerlIO_error PerlIO_fileno PerlIO_fill PerlIO_flush PerlIO_get_base PerlIO_get_bufsiz PerlIO_get_cnt PerlIO_get_ptr PerlIO_read PerlIO_seek PerlIO_set_cnt PerlIO_set_ptrcnt PerlIO_setlinebuf PerlIO_stderr PerlIO_stdin PerlIO_stdout PerlIO_tell PerlIO_unread PerlIO_write SvLOCK SvSHARE SvUNLOCK atfork_lock atfork_unlock custom_op_desc custom_op_name deb debstack debstackptrs gv_fetchmeth_autoload ibcmp_utf8 my_fork my_socketpair pack_cat perl_destruct pv_uni_display save_shared_pvref savesharedpv sortsv sv_magicext sv_nolocking sv_nosharing sv_recode_to_utf8 sv_uni_display to_uni_fold to_uni_lower to_uni_title to_uni_upper to_utf8_case unpack_str uvchr_to_utf8_flags uvuni_to_utf8_flags vdeb =item perl 5.7.2 calloc getcwd_sv init_tm malloc mfree mini_mktime my_atof2 my_strftime op_null realloc sv_catpvn_flags sv_catsv_flags sv_setsv_flags sv_utf8_upgrade_flags sv_utf8_upgrade_nomg swash_fetch =item perl 5.7.1 ASCII_TO_NEED NATIVE_TO_NEED POPpbytex bytes_from_utf8 despatch_signals do_openn gv_handler is_lvalue_sub my_popen_list save_mortalizesv scan_num sv_force_normal_flags sv_setref_uv sv_unref_flags sv_utf8_upgrade utf8_length utf8_to_uvchr utf8_to_uvuni utf8n_to_uvchr utf8n_to_uvuni uvchr_to_utf8 uvuni_to_utf8 =item perl 5.6.1 SvGAMAGIC apply_attrs_string bytes_to_utf8 gv_efullname4 gv_fullname4 is_utf8_string save_generic_pvref utf16_to_utf8 utf16_to_utf8_reversed utf8_to_bytes =item perl 5.6.0 DO_UTF8 PERL_SYS_INIT3 PL_check POPul SvIOK_UV SvIOK_notUV SvIOK_only_UV SvPOK_only_UTF8 SvPVbyte_nolen SvPVbytex SvPVbytex_force SvPVutf8 SvPVutf8_force SvPVutf8_nolen SvPVutf8x SvPVutf8x_force SvUOK SvUTF8 SvUTF8_off SvUTF8_on UTF8SKIP av_delete av_exists call_atexit caller_cx cast_i32 cast_iv cast_ulong cast_uv do_gv_dump do_gvgv_dump do_hv_dump do_magic_dump do_op_dump do_open9 do_pmop_dump do_sv_dump dump_all dump_eval dump_form dump_indent dump_packsubs dump_sub dump_vindent get_context get_ppaddr gv_dump init_i18nl10n init_i18nl14n is_uni_alnum is_uni_alnum_lc is_uni_alpha is_uni_alpha_lc is_uni_ascii is_uni_ascii_lc is_uni_cntrl is_uni_cntrl_lc is_uni_digit is_uni_digit_lc is_uni_graph is_uni_graph_lc is_uni_idfirst is_uni_idfirst_lc is_uni_lower is_uni_lower_lc is_uni_print is_uni_print_lc is_uni_punct is_uni_punct_lc is_uni_space is_uni_space_lc is_uni_upper is_uni_upper_lc is_uni_xdigit is_uni_xdigit_lc is_utf8_alnum is_utf8_alpha is_utf8_ascii is_utf8_char is_utf8_cntrl is_utf8_digit is_utf8_graph is_utf8_idfirst is_utf8_lower is_utf8_mark is_utf8_print is_utf8_punct is_utf8_space is_utf8_upper is_utf8_xdigit magic_dump mess my_atof my_fflush_all newANONATTRSUB newATTRSUB newXS newXSproto new_collate new_ctype new_numeric op_dump perl_parse pmop_dump re_intuit_string reginitcolors require_pv safesyscalloc safesysfree safesysmalloc safesysrealloc save_I8 save_alloc save_destructor save_destructor_x save_re_context save_vptr scan_bin set_context set_numeric_local set_numeric_radix set_numeric_standard str_to_version sv_2pvutf8 sv_2pvutf8_nolen sv_force_normal sv_len_utf8 sv_pos_b2u sv_pos_u2b sv_pv sv_pvbyte sv_pvbyten sv_pvbyten_force sv_pvutf8 sv_pvutf8n sv_pvutf8n_force sv_rvweaken sv_utf8_decode sv_utf8_downgrade sv_utf8_encode swash_init to_uni_lower_lc to_uni_title_lc to_uni_upper_lc utf8_distance utf8_hop vcroak vform vmess vwarn vwarner =item perl 5.005_03 POPpx get_vtbl save_generic_svref =item perl 5.005 PL_curpad PL_modglobal cx_dump debop debprofdump fbm_compile fbm_instr get_op_descs get_op_names init_stacks mg_length mg_size newHVhv new_stackinfo regdump regexec_flags regnext runops_debug runops_standard save_iv save_op sv_iv sv_nv sv_peek sv_pvn sv_pvn_nomg sv_true =item perl 5.004_05 CopyD MoveD do_binmode my_bcopy save_aelem save_helem =item perl 5.004 GIMME_V G_VOID HePV HeSVKEY_set POPu SvSetMagicSV SvSetMagicSV_nosteal SvSetSV_nosteal SvTAINTED SvTAINTED_off SvTAINTED_on block_end block_gimme block_start call_list delimcpy form gv_autoload4 gv_fetchmethod_autoload hv_delayfree_ent hv_free_ent ibcmp_locale intro_my my_failure_exit newSVpvf rsignal rsignal_state save_I16 save_gp share_hek start_subparse sv_catpvf sv_catpvf_mg sv_cmp_locale sv_derived_from sv_magic_portable sv_setpvf sv_setpvf_mg sv_taint sv_tainted sv_untaint sv_vcatpvf sv_vcatpvf_mg sv_vcatpvfn sv_vsetpvf sv_vsetpvf_mg sv_vsetpvfn toLOWER_LC vnewSVpvf warner =item perl 5.003_07 HeHASH HeKEY HeKLEN HeSVKEY HeSVKEY_force HeVAL cv_const_sv do_open gv_efullname3 gv_fullname3 hv_delete_ent hv_exists_ent hv_fetch_ent hv_iterkeysv hv_ksplit hv_store_ent my_pclose my_popen sv_gets unsharepvn =back =head1 BUGS If you find any bugs, C<Devel::PPPort> doesn't seem to build on your system, or any of its tests fail, please file an issue here: L<https://github.com/mhx/Devel-PPPort/issues/> =head1 AUTHORS =over 2 =item * Version 1.x of Devel::PPPort was written by Kenneth Albanowski. =item * Version 2.x was ported to the Perl core by Paul Marquess. =item * Version 3.x was ported back to CPAN by Marcus Holland-Moritz. =item * Versions >= 3.22 are maintained with support from Matthew Horsfall (alh). =back =head1 COPYRIGHT Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. Version 1.x, Copyright (C) 1999, Kenneth Albanowski. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L<h2xs>, L<ppport.h>. =cut package Devel::PPPort; use strict; use vars qw($VERSION $data); $VERSION = '3.36'; sub _init_data { $data = do { local $/; <DATA> }; my $pkg = 'Devel::PPPort'; $data =~ s/__PERL_VERSION__/$]/g; $data =~ s/__VERSION__/$VERSION/g; $data =~ s/__PKG__/$pkg/g; $data =~ s/^\|>//gm; } sub GetFileContents { my $file = shift || 'ppport.h'; defined $data or _init_data(); my $copy = $data; $copy =~ s/\bppport\.h\b/$file/g; return $copy; } sub WriteFile { my $file = shift || 'ppport.h'; my $data = GetFileContents($file); open F, ">$file" or return undef; print F $data; close F; return 1; } 1; __DATA__ #if 0 <<'SKIP'; #endif /* ---------------------------------------------------------------------- ppport.h -- Perl/Pollution/Portability Version __VERSION__ Automatically created by __PKG__ running under perl __PERL_VERSION__. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. Use 'perldoc ppport.h' to view the documentation below. ---------------------------------------------------------------------- SKIP |>=pod |> |>=head1 NAME |> |>ppport.h - Perl/Pollution/Portability version __VERSION__ |> |>=head1 SYNOPSIS |> |> perl ppport.h [options] [source files] |> |> Searches current directory for files if no [source files] are given |> |> --help show short help |> |> --version show version |> |> --patch=file write one patch file with changes |> --copy=suffix write changed copies with suffix |> --diff=program use diff program and options |> |> --compat-version=version provide compatibility with Perl version |> --cplusplus accept C++ comments |> |> --quiet don't output anything except fatal errors |> --nodiag don't show diagnostics |> --nohints don't show hints |> --nochanges don't suggest changes |> --nofilter don't filter input files |> |> --strip strip all script and doc functionality from |> ppport.h |> |> --list-provided list provided API |> --list-unsupported list unsupported API |> --api-info=name show Perl API portability information |> |>=head1 COMPATIBILITY |> |>This version of F<ppport.h> is designed to support operation with Perl |>installations back to 5.003, and has been tested up to 5.20. |> |>=head1 OPTIONS |> |>=head2 --help |> |>Display a brief usage summary. |> |>=head2 --version |> |>Display the version of F<ppport.h>. |> |>=head2 --patch=I<file> |> |>If this option is given, a single patch file will be created if |>any changes are suggested. This requires a working diff program |>to be installed on your system. |> |>=head2 --copy=I<suffix> |> |>If this option is given, a copy of each file will be saved with |>the given suffix that contains the suggested changes. This does |>not require any external programs. Note that this does not |>automagically add a dot between the original filename and the |>suffix. If you want the dot, you have to include it in the option |>argument. |> |>If neither C<--patch> or C<--copy> are given, the default is to |>simply print the diffs for each file. This requires either |>C<Text::Diff> or a C<diff> program to be installed. |> |>=head2 --diff=I<program> |> |>Manually set the diff program and options to use. The default |>is to use C<Text::Diff>, when installed, and output unified |>context diffs. |> |>=head2 --compat-version=I<version> |> |>Tell F<ppport.h> to check for compatibility with the given |>Perl version. The default is to check for compatibility with Perl |>version 5.003. You can use this option to reduce the output |>of F<ppport.h> if you intend to be backward compatible only |>down to a certain Perl version. |> |>=head2 --cplusplus |> |>Usually, F<ppport.h> will detect C++ style comments and |>replace them with C style comments for portability reasons. |>Using this option instructs F<ppport.h> to leave C++ |>comments untouched. |> |>=head2 --quiet |> |>Be quiet. Don't print anything except fatal errors. |> |>=head2 --nodiag |> |>Don't output any diagnostic messages. Only portability |>alerts will be printed. |> |>=head2 --nohints |> |>Don't output any hints. Hints often contain useful portability |>notes. Warnings will still be displayed. |> |>=head2 --nochanges |> |>Don't suggest any changes. Only give diagnostic output and hints |>unless these are also deactivated. |> |>=head2 --nofilter |> |>Don't filter the list of input files. By default, files not looking |>like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. |> |>=head2 --strip |> |>Strip all script and documentation functionality from F<ppport.h>. |>This reduces the size of F<ppport.h> dramatically and may be useful |>if you want to include F<ppport.h> in smaller modules without |>increasing their distribution size too much. |> |>The stripped F<ppport.h> will have a C<--unstrip> option that allows |>you to undo the stripping, but only if an appropriate C<Devel::PPPort> |>module is installed. |> |>=head2 --list-provided |> |>Lists the API elements for which compatibility is provided by |>F<ppport.h>. Also lists if it must be explicitly requested, |>if it has dependencies, and if there are hints or warnings for it. |> |>=head2 --list-unsupported |> |>Lists the API elements that are known not to be supported by |>F<ppport.h> and below which version of Perl they probably |>won't be available or work. |> |>=head2 --api-info=I<name> |> |>Show portability information for API elements matching I<name>. |>If I<name> is surrounded by slashes, it is interpreted as a regular |>expression. |> |>=head1 DESCRIPTION |> |>In order for a Perl extension (XS) module to be as portable as possible |>across differing versions of Perl itself, certain steps need to be taken. |> |>=over 4 |> |>=item * |> |>Including this header is the first major one. This alone will give you |>access to a large part of the Perl API that hasn't been available in |>earlier Perl releases. Use |> |> perl ppport.h --list-provided |> |>to see which API elements are provided by ppport.h. |> |>=item * |> |>You should avoid using deprecated parts of the API. For example, using |>global Perl variables without the C<PL_> prefix is deprecated. Also, |>some API functions used to have a C<perl_> prefix. Using this form is |>also deprecated. You can safely use the supported API, as F<ppport.h> |>will provide wrappers for older Perl versions. |> |>=item * |> |>If you use one of a few functions or variables that were not present in |>earlier versions of Perl, and that can't be provided using a macro, you |>have to explicitly request support for these functions by adding one or |>more C<#define>s in your source code before the inclusion of F<ppport.h>. |> |>These functions or variables will be marked C<explicit> in the list shown |>by C<--list-provided>. |> |>Depending on whether you module has a single or multiple files that |>use such functions or variables, you want either C<static> or global |>variants. |> |>For a C<static> function or variable (used only in a single source |>file), use: |> |> #define NEED_function |> #define NEED_variable |> |>For a global function or variable (used in multiple source files), |>use: |> |> #define NEED_function_GLOBAL |> #define NEED_variable_GLOBAL |> |>Note that you mustn't have more than one global request for the |>same function or variable in your project. |> |> Function / Variable Static Request Global Request |> ----------------------------------------------------------------------------------------- |> PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL |> PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL |> SvRX() NEED_SvRX NEED_SvRX_GLOBAL |> caller_cx() NEED_caller_cx NEED_caller_cx_GLOBAL |> eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL |> grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL |> grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL |> grok_number() NEED_grok_number NEED_grok_number_GLOBAL |> grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL |> grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL |> gv_fetchpvn_flags() NEED_gv_fetchpvn_flags NEED_gv_fetchpvn_flags_GLOBAL |> load_module() NEED_load_module NEED_load_module_GLOBAL |> mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL |> my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL |> my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL |> my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL |> my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL |> newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL |> newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL |> newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL |> newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL |> newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL |> pv_display() NEED_pv_display NEED_pv_display_GLOBAL |> pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL |> pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL |> sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL |> sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL |> sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL |> sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL |> sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL |> sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL |> sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL |> sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL |> vload_module() NEED_vload_module NEED_vload_module_GLOBAL |> vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL |> warner() NEED_warner NEED_warner_GLOBAL |> |>To avoid namespace conflicts, you can change the namespace of the |>explicitly exported functions / variables using the C<DPPP_NAMESPACE> |>macro. Just C<#define> the macro before including C<ppport.h>: |> |> #define DPPP_NAMESPACE MyOwnNamespace_ |> #include "ppport.h" |> |>The default namespace is C<DPPP_>. |> |>=back |> |>The good thing is that most of the above can be checked by running |>F<ppport.h> on your source code. See the next section for |>details. |> |>=head1 EXAMPLES |> |>To verify whether F<ppport.h> is needed for your module, whether you |>should make any changes to your code, and whether any special defines |>should be used, F<ppport.h> can be run as a Perl script to check your |>source code. Simply say: |> |> perl ppport.h |> |>The result will usually be a list of patches suggesting changes |>that should at least be acceptable, if not necessarily the most |>efficient solution, or a fix for all possible problems. |> |>If you know that your XS module uses features only available in |>newer Perl releases, if you're aware that it uses C++ comments, |>and if you want all suggestions as a single patch file, you could |>use something like this: |> |> perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff |> |>If you only want your code to be scanned without any suggestions |>for changes, use: |> |> perl ppport.h --nochanges |> |>You can specify a different C<diff> program or options, using |>the C<--diff> option: |> |> perl ppport.h --diff='diff -C 10' |> |>This would output context diffs with 10 lines of context. |> |>If you want to create patched copies of your files instead, use: |> |> perl ppport.h --copy=.new |> |>To display portability information for the C<newSVpvn> function, |>use: |> |> perl ppport.h --api-info=newSVpvn |> |>Since the argument to C<--api-info> can be a regular expression, |>you can use |> |> perl ppport.h --api-info=/_nomg$/ |> |>to display portability information for all C<_nomg> functions or |> |> perl ppport.h --api-info=/./ |> |>to display information for all known API elements. |> |>=head1 BUGS |> |>If this version of F<ppport.h> is causing failure during |>the compilation of this module, please check if newer versions |>of either this module or C<Devel::PPPort> are available on CPAN |>before sending a bug report. |> |>If F<ppport.h> was generated using the latest version of |>C<Devel::PPPort> and is causing failure of this module, please |>file a bug report here: L<https://github.com/mhx/Devel-PPPort/issues/> |> |>Please include the following information: |> |>=over 4 |> |>=item 1. |> |>The complete output from running "perl -V" |> |>=item 2. |> |>This file. |> |>=item 3. |> |>The name and version of the module you were trying to build. |> |>=item 4. |> |>A full log of the build that failed. |> |>=item 5. |> |>Any other information that you think could be relevant. |> |>=back |> |>For the latest version of this code, please get the C<Devel::PPPort> |>module from CPAN. |> |>=head1 COPYRIGHT |> |>Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz. |> |>Version 2.x, Copyright (C) 2001, Paul Marquess. |> |>Version 1.x, Copyright (C) 1999, Kenneth Albanowski. |> |>This program is free software; you can redistribute it and/or |>modify it under the same terms as Perl itself. |> |>=head1 SEE ALSO |> |>See L<Devel::PPPort>. |> |>=cut use strict; # Disable broken TRIE-optimization BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } my $VERSION = __VERSION__; my %opt = ( quiet => 0, diag => 1, hints => 1, changes => 1, cplusplus => 0, filter => 1, strip => 0, version => 0, ); my($ppport) = $0 =~ /([\w.]+)$/; my $LF = '(?:\r\n|[\r\n])'; # line feed my $HS = "[ \t]"; # horizontal whitespace # Never use C comments in this file! my $ccs = '/'.'*'; my $cce = '*'.'/'; my $rccs = quotemeta $ccs; my $rcce = quotemeta $cce; eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( help quiet diag! filter! hints! changes! cplusplus strip version patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); }; if ($@ and grep /^-/, @ARGV) { usage() if "@ARGV" =~ /^--?h(?:elp)?$/; die "Getopt::Long not found. Please don't use any options.\n"; } if ($opt{version}) { print "This is $0 $VERSION.\n"; exit 0; } usage() if $opt{help}; strip() if $opt{strip}; if (exists $opt{'compat-version'}) { my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; if ($@) { die "Invalid version number format: '$opt{'compat-version'}'\n"; } die "Only Perl 5 is supported\n" if $r != 5; die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; } else { $opt{'compat-version'} = 5; } my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ ? ( $1 => { ($2 ? ( base => $2 ) : ()), ($3 ? ( todo => $3 ) : ()), (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), } ) : die "invalid spec: $_" } qw( ASCII_TO_NEED||5.007001|n AvFILLp|5.004050||p AvFILL||| BhkDISABLE||5.024000| BhkENABLE||5.024000| BhkENTRY_set||5.024000| BhkENTRY||| BhkFLAGS||| CALL_BLOCK_HOOKS||| CLASS|||n CPERLscope|5.005000||p CX_CURPAD_SAVE||| CX_CURPAD_SV||| C_ARRAY_END|5.013002||p C_ARRAY_LENGTH|5.008001||p CopFILEAV|5.006000||p CopFILEGV_set|5.006000||p CopFILEGV|5.006000||p CopFILESV|5.006000||p CopFILE_set|5.006000||p CopFILE|5.006000||p CopSTASHPV_set|5.006000||p CopSTASHPV|5.006000||p CopSTASH_eq|5.006000||p CopSTASH_set|5.006000||p CopSTASH|5.006000||p CopyD|5.009002|5.004050|p Copy||| CvPADLIST||5.008001| CvSTASH||| CvWEAKOUTSIDE||| DECLARATION_FOR_LC_NUMERIC_MANIPULATION||5.021010|n DEFSV_set|5.010001||p DEFSV|5.004050||p DO_UTF8||5.006000| END_EXTERN_C|5.005000||p ENTER||| ERRSV|5.004050||p EXTEND||| EXTERN_C|5.005000||p F0convert|||n FREETMPS||| GIMME_V||5.004000|n GIMME|||n GROK_NUMERIC_RADIX|5.007002||p G_ARRAY||| G_DISCARD||| G_EVAL||| G_METHOD|5.006001||p G_NOARGS||| G_SCALAR||| G_VOID||5.004000| GetVars||| GvAV||| GvCV||| GvHV||| GvSV||| Gv_AMupdate||5.011000| HEf_SVKEY|5.003070||p HeHASH||5.003070| HeKEY||5.003070| HeKLEN||5.003070| HePV||5.004000| HeSVKEY_force||5.003070| HeSVKEY_set||5.004000| HeSVKEY||5.003070| HeUTF8|5.010001|5.008000|p HeVAL||5.003070| HvENAMELEN||5.015004| HvENAMEUTF8||5.015004| HvENAME||5.013007| HvNAMELEN_get|5.009003||p HvNAMELEN||5.015004| HvNAMEUTF8||5.015004| HvNAME_get|5.009003||p HvNAME||| INT2PTR|5.006000||p IN_LOCALE_COMPILETIME|5.007002||p IN_LOCALE_RUNTIME|5.007002||p IN_LOCALE|5.007002||p IN_PERL_COMPILETIME|5.008001||p IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p IS_NUMBER_INFINITY|5.007002||p IS_NUMBER_IN_UV|5.007002||p IS_NUMBER_NAN|5.007003||p IS_NUMBER_NEG|5.007002||p IS_NUMBER_NOT_INT|5.007002||p IVSIZE|5.006000||p IVTYPE|5.006000||p IVdf|5.006000||p LEAVE||| LINKLIST||5.013006| LVRET||| MARK||| MULTICALL||5.024000| MUTABLE_PTR|5.010001||p MUTABLE_SV|5.010001||p MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p MoveD|5.009002|5.004050|p Move||| NATIVE_TO_NEED||5.007001|n NOOP|5.005000||p NUM2PTR|5.006000||p NVTYPE|5.006000||p NVef|5.006001||p NVff|5.006001||p NVgf|5.006001||p Newxc|5.009003||p Newxz|5.009003||p Newx|5.009003||p Nullav||| Nullch||| Nullcv||| Nullhv||| Nullsv||| OP_CLASS||5.013007| OP_DESC||5.007003| OP_NAME||5.007003| OP_TYPE_IS_OR_WAS||5.019010| OP_TYPE_IS||5.019007| ORIGMARK||| OpHAS_SIBLING|5.021007||p OpLASTSIB_set|5.021011||p OpMAYBESIB_set|5.021011||p OpMORESIB_set|5.021011||p OpSIBLING|5.021007||p PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| PAD_COMPNAME_GEN_set||| PAD_COMPNAME_GEN||| PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| PAD_COMPNAME_TYPE||| PAD_RESTORE_LOCAL||| PAD_SAVE_LOCAL||| PAD_SAVE_SETNULLPAD||| PAD_SETSV||| PAD_SET_CUR_NOSAVE||| PAD_SET_CUR||| PAD_SVl||| PAD_SV||| PERLIO_FUNCS_CAST|5.009003||p PERLIO_FUNCS_DECL|5.009003||p PERL_ABS|5.008001||p PERL_BCDVERSION|5.024000||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p PERL_HASH|5.003070||p PERL_INT_MAX|5.003070||p PERL_INT_MIN|5.003070||p PERL_LONG_MAX|5.003070||p PERL_LONG_MIN|5.003070||p PERL_MAGIC_arylen|5.007002||p PERL_MAGIC_backref|5.007002||p PERL_MAGIC_bm|5.007002||p PERL_MAGIC_collxfrm|5.007002||p PERL_MAGIC_dbfile|5.007002||p PERL_MAGIC_dbline|5.007002||p PERL_MAGIC_defelem|5.007002||p PERL_MAGIC_envelem|5.007002||p PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p PERL_MAGIC_glob|5.024000||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p PERL_MAGIC_mutex|5.024000||p PERL_MAGIC_nkeys|5.007002||p PERL_MAGIC_overload_elem|5.024000||p PERL_MAGIC_overload_table|5.007002||p PERL_MAGIC_overload|5.024000||p PERL_MAGIC_pos|5.007002||p PERL_MAGIC_qr|5.007002||p PERL_MAGIC_regdata|5.007002||p PERL_MAGIC_regdatum|5.007002||p PERL_MAGIC_regex_global|5.007002||p PERL_MAGIC_shared_scalar|5.007003||p PERL_MAGIC_shared|5.007003||p PERL_MAGIC_sigelem|5.007002||p PERL_MAGIC_sig|5.007002||p PERL_MAGIC_substr|5.007002||p PERL_MAGIC_sv|5.007002||p PERL_MAGIC_taint|5.007002||p PERL_MAGIC_tiedelem|5.007002||p PERL_MAGIC_tiedscalar|5.007002||p PERL_MAGIC_tied|5.007002||p PERL_MAGIC_utf8|5.008001||p PERL_MAGIC_uvar_elem|5.007003||p PERL_MAGIC_uvar|5.007002||p PERL_MAGIC_vec|5.007002||p PERL_MAGIC_vstring|5.008001||p PERL_PV_ESCAPE_ALL|5.009004||p PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p PERL_PV_ESCAPE_NOCLEAR|5.009004||p PERL_PV_ESCAPE_QUOTE|5.009004||p PERL_PV_ESCAPE_RE|5.009005||p PERL_PV_ESCAPE_UNI_DETECT|5.009004||p PERL_PV_ESCAPE_UNI|5.009004||p PERL_PV_PRETTY_DUMP|5.009004||p PERL_PV_PRETTY_ELLIPSES|5.010000||p PERL_PV_PRETTY_LTGT|5.009004||p PERL_PV_PRETTY_NOCLEAR|5.010000||p PERL_PV_PRETTY_QUOTE|5.009004||p PERL_PV_PRETTY_REGPROP|5.009004||p PERL_QUAD_MAX|5.003070||p PERL_QUAD_MIN|5.003070||p PERL_REVISION|5.006000||p PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p PERL_SCAN_DISALLOW_PREFIX|5.007003||p PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p PERL_SHORT_MAX|5.003070||p PERL_SHORT_MIN|5.003070||p PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_SYS_INIT3||5.006000| PERL_SYS_INIT||| PERL_SYS_TERM||5.024000| PERL_UCHAR_MAX|5.003070||p PERL_UCHAR_MIN|5.003070||p PERL_UINT_MAX|5.003070||p PERL_UINT_MIN|5.003070||p PERL_ULONG_MAX|5.003070||p PERL_ULONG_MIN|5.003070||p PERL_UNUSED_ARG|5.009003||p PERL_UNUSED_CONTEXT|5.009004||p PERL_UNUSED_DECL|5.007002||p PERL_UNUSED_RESULT|5.021001||p PERL_UNUSED_VAR|5.007002||p PERL_UQUAD_MAX|5.003070||p PERL_UQUAD_MIN|5.003070||p PERL_USE_GCC_BRACE_GROUPS|5.009004||p PERL_USHORT_MAX|5.003070||p PERL_USHORT_MIN|5.003070||p PERL_VERSION|5.006000||p PL_DBsignal|5.005000||p PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||pn PL_Sv|5.005000||p PL_bufend|5.024000||p PL_bufptr|5.024000||p PL_check||5.006000| PL_compiling|5.004050||p PL_comppad_name||5.017004| PL_comppad||5.008001| PL_copline|5.024000||p PL_curcop|5.004050||p PL_curpad||5.005000| PL_curstash|5.004050||p PL_debstash|5.004050||p PL_defgv|5.004050||p PL_diehook|5.004050||p PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p PL_error_count|5.024000||p PL_expect|5.024000||p PL_hexdigit|5.005000||p PL_hints|5.005000||p PL_in_my_stash|5.024000||p PL_in_my|5.024000||p PL_keyword_plugin||5.011002| PL_last_in_gv|||n PL_laststatval|5.005000||p PL_lex_state|5.024000||p PL_lex_stuff|5.024000||p PL_linestr|5.024000||p PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofsgv|||n PL_opfreehook||5.011000|n PL_parser|5.009005||p PL_peepp||5.007003|n PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p PL_rpeepp||5.013005|n PL_rsfp_filters|5.024000||p PL_rsfp|5.024000||p PL_rs|||n PL_signals|5.008001||p PL_stack_base|5.004050||p PL_stack_sp|5.004050||p PL_statcache|5.005000||p PL_stdingv|5.004050||p PL_sv_arenaroot|5.004050||p PL_sv_no|5.004050||pn PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p PL_tokenbuf|5.024000||p POP_MULTICALL||5.024000| POPi|||n POPl|||n POPn|||n POPpbytex||5.007001|n POPpx||5.005030|n POPp|||n POPs|||n POPul||5.006000|n POPu||5.004000|n PTR2IV|5.006000||p PTR2NV|5.006000||p PTR2UV|5.006000||p PTR2nat|5.009003||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| PUSH_MULTICALL||5.024000| PUSHi||| PUSHmortal|5.009002||p PUSHn||| PUSHp||| PUSHs||| PUSHu|5.004000||p PUTBACK||| PadARRAY||5.024000| PadMAX||5.024000| PadlistARRAY||5.024000| PadlistMAX||5.024000| PadlistNAMESARRAY||5.024000| PadlistNAMESMAX||5.024000| PadlistNAMES||5.024000| PadlistREFCNT||5.017004| PadnameIsOUR||| PadnameIsSTATE||| PadnameLEN||5.024000| PadnameOURSTASH||| PadnameOUTER||| PadnamePV||5.024000| PadnameREFCNT_dec||5.024000| PadnameREFCNT||5.024000| PadnameSV||5.024000| PadnameTYPE||| PadnameUTF8||5.021007| PadnamelistARRAY||5.024000| PadnamelistMAX||5.024000| PadnamelistREFCNT_dec||5.024000| PadnamelistREFCNT||5.024000| PerlIO_clearerr||5.007003| PerlIO_close||5.007003| PerlIO_context_layers||5.009004| PerlIO_eof||5.007003| PerlIO_error||5.007003| PerlIO_fileno||5.007003| PerlIO_fill||5.007003| PerlIO_flush||5.007003| PerlIO_get_base||5.007003| PerlIO_get_bufsiz||5.007003| PerlIO_get_cnt||5.007003| PerlIO_get_ptr||5.007003| PerlIO_read||5.007003| PerlIO_restore_errno||| PerlIO_save_errno||| PerlIO_seek||5.007003| PerlIO_set_cnt||5.007003| PerlIO_set_ptrcnt||5.007003| PerlIO_setlinebuf||5.007003| PerlIO_stderr||5.007003| PerlIO_stdin||5.007003| PerlIO_stdout||5.007003| PerlIO_tell||5.007003| PerlIO_unread||5.007003| PerlIO_write||5.007003| Perl_signbit||5.009005|n PoisonFree|5.009004||p PoisonNew|5.009004||p PoisonWith|5.009004||p Poison|5.008000||p READ_XDIGIT||5.017006| RESTORE_LC_NUMERIC||5.024000| RETVAL|||n Renewc||| Renew||| SAVECLEARSV||| SAVECOMPPAD||| SAVEPADSV||| SAVETMPS||| SAVE_DEFSV|5.004050||p SPAGAIN||| SP||| START_EXTERN_C|5.005000||p START_MY_CXT|5.007003||p STMT_END|||p STMT_START|||p STORE_LC_NUMERIC_FORCE_TO_UNDERLYING||5.024000| STORE_LC_NUMERIC_SET_TO_NEEDED||5.024000| STR_WITH_LEN|5.009003||p ST||| SV_CONST_RETURN|5.009003||p SV_COW_DROP_PV|5.008001||p SV_COW_SHARED_HASH_KEYS|5.009005||p SV_GMAGIC|5.007002||p SV_HAS_TRAILING_NUL|5.009004||p SV_IMMEDIATE_UNREF|5.007001||p SV_MUTABLE_RETURN|5.009003||p SV_NOSTEAL|5.009002||p SV_SMAGIC|5.009003||p SV_UTF8_NO_ENCODING|5.008001||p SVfARG|5.009005||p SVf_UTF8|5.006000||p SVf|5.006000||p SVt_INVLIST||5.019002| SVt_IV||| SVt_NULL||| SVt_NV||| SVt_PVAV||| SVt_PVCV||| SVt_PVFM||| SVt_PVGV||| SVt_PVHV||| SVt_PVIO||| SVt_PVIV||| SVt_PVLV||| SVt_PVMG||| SVt_PVNV||| SVt_PV||| SVt_REGEXP||5.011000| Safefree||| Slab_Alloc||| Slab_Free||| Slab_to_ro||| Slab_to_rw||| StructCopy||| SvCUR_set||| SvCUR||| SvEND||| SvGAMAGIC||5.006001| SvGETMAGIC|5.004050||p SvGROW||| SvIOK_UV||5.006000| SvIOK_notUV||5.006000| SvIOK_off||| SvIOK_only_UV||5.006000| SvIOK_only||| SvIOK_on||| SvIOKp||| SvIOK||| SvIVX||| SvIV_nomg|5.009001||p SvIV_set||| SvIVx||| SvIV||| SvIsCOW_shared_hash||5.008003| SvIsCOW||5.008003| SvLEN_set||| SvLEN||| SvLOCK||5.007003| SvMAGIC_set|5.009003||p SvNIOK_off||| SvNIOKp||| SvNIOK||| SvNOK_off||| SvNOK_only||| SvNOK_on||| SvNOKp||| SvNOK||| SvNVX||| SvNV_nomg||5.013002| SvNV_set||| SvNVx||| SvNV||| SvOK||| SvOOK_offset||5.011000| SvOOK||| SvPOK_off||| SvPOK_only_UTF8||5.006000| SvPOK_only||| SvPOK_on||| SvPOKp||| SvPOK||| SvPVX_const|5.009003||p SvPVX_mutable|5.009003||p SvPVX||| SvPV_const|5.009003||p SvPV_flags_const_nolen|5.009003||p SvPV_flags_const|5.009003||p SvPV_flags_mutable|5.009003||p SvPV_flags|5.007002||p SvPV_force_flags_mutable|5.009003||p SvPV_force_flags_nolen|5.009003||p SvPV_force_flags|5.007002||p SvPV_force_mutable|5.009003||p SvPV_force_nolen|5.009003||p SvPV_force_nomg_nolen|5.009003||p SvPV_force_nomg|5.007002||p SvPV_force|||p SvPV_mutable|5.009003||p SvPV_nolen_const|5.009003||p SvPV_nolen|5.006000||p SvPV_nomg_const_nolen|5.009003||p SvPV_nomg_const|5.009003||p SvPV_nomg_nolen|5.013007||p SvPV_nomg|5.007002||p SvPV_renew|5.009003||p SvPV_set||| SvPVbyte_force||5.009002| SvPVbyte_nolen||5.006000| SvPVbytex_force||5.006000| SvPVbytex||5.006000| SvPVbyte|5.006000||p SvPVutf8_force||5.006000| SvPVutf8_nolen||5.006000| SvPVutf8x_force||5.006000| SvPVutf8x||5.006000| SvPVutf8||5.006000| SvPVx||| SvPV||| SvREFCNT_dec_NN||5.017007| SvREFCNT_dec||| SvREFCNT_inc_NN|5.009004||p SvREFCNT_inc_simple_NN|5.009004||p SvREFCNT_inc_simple_void_NN|5.009004||p SvREFCNT_inc_simple_void|5.009004||p SvREFCNT_inc_simple|5.009004||p SvREFCNT_inc_void_NN|5.009004||p SvREFCNT_inc_void|5.009004||p SvREFCNT_inc|||p SvREFCNT||| SvROK_off||| SvROK_on||| SvROK||| SvRV_set|5.009003||p SvRV||| SvRXOK|5.009005||p SvRX|5.009005||p SvSETMAGIC||| SvSHARED_HASH|5.009003||p SvSHARE||5.007003| SvSTASH_set|5.009003||p SvSTASH||| SvSetMagicSV_nosteal||5.004000| SvSetMagicSV||5.004000| SvSetSV_nosteal||5.004000| SvSetSV||| SvTAINTED_off||5.004000| SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| SvTHINKFIRST||| SvTRUE_nomg||5.013006| SvTRUE||| SvTYPE||| SvUNLOCK||5.007003| SvUOK|5.007001|5.006000|p SvUPGRADE||| SvUTF8_off||5.006000| SvUTF8_on||5.006000| SvUTF8||5.006000| SvUVXx|5.004000||p SvUVX|5.004000||p SvUV_nomg|5.009001||p SvUV_set|5.009003||p SvUVx|5.004000||p SvUV|5.004000||p SvVOK||5.008001| SvVSTRING_mg|5.009004||p THIS|||n UNDERBAR|5.009002||p UTF8SKIP||5.006000| UTF8_MAXBYTES|5.009002||p UVCHR_SKIP||5.022000| UVSIZE|5.006000||p UVTYPE|5.006000||p UVXf|5.007001||p UVof|5.006000||p UVuf|5.006000||p UVxf|5.006000||p WARN_ALL|5.006000||p WARN_AMBIGUOUS|5.006000||p WARN_ASSERTIONS|5.024000||p WARN_BAREWORD|5.006000||p WARN_CLOSED|5.006000||p WARN_CLOSURE|5.006000||p WARN_DEBUGGING|5.006000||p WARN_DEPRECATED|5.006000||p WARN_DIGIT|5.006000||p WARN_EXEC|5.006000||p WARN_EXITING|5.006000||p WARN_GLOB|5.006000||p WARN_INPLACE|5.006000||p WARN_INTERNAL|5.006000||p WARN_IO|5.006000||p WARN_LAYER|5.008000||p WARN_MALLOC|5.006000||p WARN_MISC|5.006000||p WARN_NEWLINE|5.006000||p WARN_NUMERIC|5.006000||p WARN_ONCE|5.006000||p WARN_OVERFLOW|5.006000||p WARN_PACK|5.006000||p WARN_PARENTHESIS|5.006000||p WARN_PIPE|5.006000||p WARN_PORTABLE|5.006000||p WARN_PRECEDENCE|5.006000||p WARN_PRINTF|5.006000||p WARN_PROTOTYPE|5.006000||p WARN_QW|5.006000||p WARN_RECURSION|5.006000||p WARN_REDEFINE|5.006000||p WARN_REGEXP|5.006000||p WARN_RESERVED|5.006000||p WARN_SEMICOLON|5.006000||p WARN_SEVERE|5.006000||p WARN_SIGNAL|5.006000||p WARN_SUBSTR|5.006000||p WARN_SYNTAX|5.006000||p WARN_TAINT|5.006000||p WARN_THREADS|5.008000||p WARN_UNINITIALIZED|5.006000||p WARN_UNOPENED|5.006000||p WARN_UNPACK|5.006000||p WARN_UNTIE|5.006000||p WARN_UTF8|5.006000||p WARN_VOID|5.006000||p WIDEST_UTYPE|5.015004||p XCPT_CATCH|5.009002||p XCPT_RETHROW|5.009002||p XCPT_TRY_END|5.009002||p XCPT_TRY_START|5.009002||p XPUSHi||| XPUSHmortal|5.009002||p XPUSHn||| XPUSHp||| XPUSHs||| XPUSHu|5.004000||p XSPROTO|5.010000||p XSRETURN_EMPTY||| XSRETURN_IV||| XSRETURN_NO||| XSRETURN_NV||| XSRETURN_PV||| XSRETURN_UNDEF||| XSRETURN_UV|5.008001||p XSRETURN_YES||| XSRETURN|||p XST_mIV||| XST_mNO||| XST_mNV||| XST_mPV||| XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| XS_APIVERSION_BOOTCHECK||5.024000| XS_EXTERNAL||5.024000| XS_INTERNAL||5.024000| XS_VERSION_BOOTCHECK||5.024000| XS_VERSION||| XSprePUSH|5.006000||p XS||| XopDISABLE||5.024000| XopENABLE||5.024000| XopENTRYCUSTOM||5.024000| XopENTRY_set||5.024000| XopENTRY||5.024000| XopFLAGS||5.013007| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p _add_range_to_invlist||| _append_range_to_invlist||| _core_swash_init||| _get_encoding||| _get_regclass_nonbitmap_data||| _get_swash_invlist||| _invlistEQ||| _invlist_array_init|||n _invlist_contains_cp|||n _invlist_dump||| _invlist_intersection_maybe_complement_2nd||| _invlist_intersection||| _invlist_invert||| _invlist_len|||n _invlist_populate_swatch|||n _invlist_search|||n _invlist_subtract||| _invlist_union_maybe_complement_2nd||| _invlist_union||| _is_cur_LC_category_utf8||| _is_in_locale_category||5.021001| _is_uni_FOO||5.017008| _is_uni_perl_idcont||5.017008| _is_uni_perl_idstart||5.017007| _is_utf8_FOO||5.017008| _is_utf8_char_slow||5.021001|n _is_utf8_idcont||5.021001| _is_utf8_idstart||5.021001| _is_utf8_mark||5.017008| _is_utf8_perl_idcont||5.017008| _is_utf8_perl_idstart||5.017007| _is_utf8_xidcont||5.021001| _is_utf8_xidstart||5.021001| _load_PL_utf8_foldclosures||| _make_exactf_invlist||| _new_invlist_C_array||| _new_invlist||| _pMY_CXT|5.007003||p _setlocale_debug_string|||n _setup_canned_invlist||| _swash_inversion_hash||| _swash_to_invlist||| _to_fold_latin1||| _to_uni_fold_flags||5.014000| _to_upper_title_latin1||| _to_utf8_case||| _to_utf8_fold_flags||5.019009| _to_utf8_lower_flags||5.019009| _to_utf8_title_flags||5.019009| _to_utf8_upper_flags||5.019009| _warn_problematic_locale|||n aMY_CXT_|5.007003||p aMY_CXT|5.007003||p aTHXR_|5.024000||p aTHXR|5.024000||p aTHX_|5.006000||p aTHX|5.006000||p add_above_Latin1_folds||| add_cp_to_invlist||| add_data|||n add_multi_match||| add_utf16_textfilter||| adjust_size_and_find_bucket|||n advance_one_LB||| advance_one_SB||| advance_one_WB||| alloc_maybe_populate_EXACT||| alloccopstash||| allocmy||| amagic_call||| amagic_cmp_locale||| amagic_cmp||| amagic_deref_call||5.013007| amagic_i_ncmp||| amagic_is_enabled||| amagic_ncmp||| anonymise_cv_maybe||| any_dup||| ao||| append_utf8_from_native_byte||5.019004|n apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| assert_uft8_cache_coherent||| assignment_type||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| av_clear||| av_create_and_push||5.009005| av_create_and_unshift_one||5.009005| av_delete||5.006000| av_exists||5.006000| av_extend_guts||| av_extend||| av_fetch||| av_fill||| av_iter_p||5.011000| av_len||| av_make||| av_pop||| av_push||| av_reify||| av_shift||| av_store||| av_tindex||5.017009| av_top_index||5.017009| av_undef||| av_unshift||| ax|||n backup_one_LB||| backup_one_SB||| backup_one_WB||| bad_type_gv||| bad_type_pv||| bind_match||| block_end||5.004000| block_gimme||5.004000| block_start||5.004000| blockhook_register||5.013003| boolSV|5.004000||p boot_core_PerlIO||| boot_core_UNIVERSAL||| boot_core_mro||| bytes_cmp_utf8||5.013007| bytes_from_utf8||5.007001| bytes_to_utf8||5.006001| cBOOL|5.013000||p call_argv|5.006000||p call_atexit||5.006000| call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p caller_cx|5.013005|5.006000|p calloc||5.007002|n cando||| cast_i32||5.006000|n cast_iv||5.006000|n cast_ulong||5.006000|n cast_uv||5.006000|n check_locale_boundary_crossing||| check_type_and_open||| check_uni||| check_utf8_print||| checkcomma||| ckWARN|5.006000||p ck_entersub_args_core||| ck_entersub_args_list||5.013006| ck_entersub_args_proto_or_list||5.013006| ck_entersub_args_proto||5.013006| ck_warner_d||5.011001|v ck_warner||5.011001|v ckwarn_common||| ckwarn_d||5.009003| ckwarn||5.009003| clear_defarray||5.023008| clear_placeholders||| clear_special_blocks||| clone_params_del|||n clone_params_new|||n closest_cop||| cntrl_to_mnemonic|||n compute_EXACTish|||n construct_ahocorasick_from_trie||| cop_fetch_label||5.015001| cop_free||| cop_hints_2hv||5.013007| cop_hints_fetch_pvn||5.013007| cop_hints_fetch_pvs||5.013007| cop_hints_fetch_pv||5.013007| cop_hints_fetch_sv||5.013007| cop_store_label||5.015001| cophh_2hv||5.013007| cophh_copy||5.013007| cophh_delete_pvn||5.013007| cophh_delete_pvs||5.013007| cophh_delete_pv||5.013007| cophh_delete_sv||5.013007| cophh_fetch_pvn||5.013007| cophh_fetch_pvs||5.013007| cophh_fetch_pv||5.013007| cophh_fetch_sv||5.013007| cophh_free||5.013007| cophh_new_empty||5.024000| cophh_store_pvn||5.013007| cophh_store_pvs||5.013007| cophh_store_pv||5.013007| cophh_store_sv||5.013007| core_prototype||| coresub_op||| cr_textfilter||| create_eval_scope||| croak_memory_wrap||5.019003|n croak_no_mem|||n croak_no_modify||5.013003|n croak_nocontext|||vn croak_popstack|||n croak_sv||5.013001| croak_xs_usage||5.010001|n croak|||v csighandler||5.009003|n current_re_engine||| curse||| custom_op_desc||5.007003| custom_op_get_field||| custom_op_name||5.007003| custom_op_register||5.013007| custom_op_xop||5.013007| cv_ckproto_len_flags||| cv_clone_into||| cv_clone||| cv_const_sv_or_av|||n cv_const_sv||5.003070|n cv_dump||| cv_forget_slab||| cv_get_call_checker||5.013006| cv_name||5.021005| cv_set_call_checker_flags||5.021004| cv_set_call_checker||5.013006| cv_undef_flags||| cv_undef||| cvgv_from_hek||| cvgv_set||| cvstash_set||| cx_dump||5.005000| cx_dup||| cx_popblock||5.023008| cx_popeval||5.023008| cx_popformat||5.023008| cx_popgiven||5.023008| cx_poploop||5.023008| cx_popsub_args||5.023008| cx_popsub_common||5.023008| cx_popsub||5.023008| cx_popwhen||5.023008| cx_pushblock||5.023008| cx_pusheval||5.023008| cx_pushformat||5.023008| cx_pushgiven||5.023008| cx_pushloop_for||5.023008| cx_pushloop_plain||5.023008| cx_pushsub||5.023008| cx_pushwhen||5.023008| cx_topblock||5.023008| cxinc||| dAXMARK|5.009003||p dAX|5.007002||p dITEMS|5.007002||p dMARK||| dMULTICALL||5.009003| dMY_CXT_SV|5.007003||p dMY_CXT|5.007003||p dNOOP|5.006000||p dORIGMARK||| dSP||| dTHR|5.004050||p dTHXR|5.024000||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p dUNDERBAR|5.009002||p dVAR|5.009003||p dXCPT|5.009002||p dXSARGS||| dXSI32||| dXSTARG|5.006000||p deb_curcv||| deb_nocontext|||vn deb_stack_all||| deb_stack_n||| debop||5.005000| debprofdump||5.005000| debprof||| debstackptrs||5.007003| debstack||5.007003| debug_start_match||| deb||5.007003|v defelem_target||| del_sv||| delete_eval_scope||| delimcpy||5.004000|n deprecate_commaless_var_list||| despatch_signals||5.007001| destroy_matcher||| die_nocontext|||vn die_sv||5.013001| die_unwind||| die|||v dirp_dup||| div128||| djSP||| do_aexec5||| do_aexec||| do_aspawn||| do_binmode||5.004050| do_chomp||| do_close||| do_delete_local||| do_dump_pad||| do_eof||| do_exec3||| do_execfree||| do_exec||| do_gv_dump||5.006000| do_gvgv_dump||5.006000| do_hv_dump||5.006000| do_ipcctl||| do_ipcget||| do_join||| do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| do_ncmp||| do_oddball||| do_op_dump||5.006000| do_open6||| do_open9||5.006000| do_open_raw||| do_openn||5.007001| do_open||5.003070| do_pmop_dump||5.006000| do_print||| do_readline||| do_seek||| do_semop||| do_shmio||| do_smartmatch||| do_spawn_nowait||| do_spawn||| do_sprintf||| do_sv_dump||5.006000| do_sysseek||| do_tell||| do_trans_complex_utf8||| do_trans_complex||| do_trans_count_utf8||| do_trans_count||| do_trans_simple_utf8||| do_trans_simple||| do_trans||| do_vecget||| do_vecset||| do_vop||| docatch||| doeval_compile||| dofile||| dofindlabel||| doform||| doing_taint||5.008001|n dooneliner||| doopen_pm||| doparseform||| dopoptoeval||| dopoptogivenfor||| dopoptolabel||| dopoptoloop||| dopoptosub_at||| dopoptowhen||| doref||5.009003| dounwind||| dowantarray||| drand48_init_r|||n drand48_r|||n dtrace_probe_call||| dtrace_probe_load||| dtrace_probe_op||| dtrace_probe_phase||| dump_all_perl||| dump_all||5.006000| dump_c_backtrace||| dump_eval||5.006000| dump_exec_pos||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| dump_packsubs_perl||| dump_packsubs||5.006000| dump_sub_perl||| dump_sub||5.006000| dump_sv_child||| dump_trie_interim_list||| dump_trie_interim_table||| dump_trie||| dump_vindent||5.006000| dumpuntil||| dup_attrlist||| edit_distance|||n emulate_cop_io||| eval_pv|5.006000||p eval_sv|5.006000||p exec_failed||| expect_number||| fbm_compile||5.005000| fbm_instr||5.005000| feature_is_enabled||| filter_add||| filter_del||| filter_gets||| filter_read||| finalize_optree||| finalize_op||| find_and_forget_pmops||| find_array_subscript||| find_beginning||| find_byclass||| find_default_stash||| find_hash_subscript||| find_in_my_stash||| find_lexical_cv||| find_runcv_where||| find_runcv||5.008001| find_rundefsvoffset||5.009002| find_rundefsv||5.013002| find_script||| find_uninit_var||| first_symbol|||n fixup_errno_string||| foldEQ_latin1||5.013008|n foldEQ_locale||5.013002|n foldEQ_utf8_flags||5.013010| foldEQ_utf8||5.013002| foldEQ||5.013002|n fold_constants||| forbid_setid||| force_ident_maybe_lex||| force_ident||| force_list||| force_next||| force_strict_version||| force_version||| force_word||| forget_pmop||| form_nocontext|||vn form_short_octal_warning||| form||5.004000|v fp_dup||| fprintf_nocontext|||vn free_c_backtrace||| free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| get_ANYOF_cp_list_for_ssc||| get_and_check_backslash_N_name||| get_aux_mg||| get_av|5.006000||p get_c_backtrace_dump||| get_c_backtrace||| get_context||5.006000|n get_cvn_flags||| get_cvs|5.011000||p get_cv|5.006000||p get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p get_invlist_iter_addr|||n get_invlist_offset_addr|||n get_invlist_previous_index_addr|||n get_mstats||| get_no_modify||| get_num||| get_op_descs||5.005000| get_op_names||5.005000| get_opargs||| get_ppaddr||5.006000| get_re_arg||| get_sv|5.006000||p get_vtbl||5.005030| getcwd_sv||5.007002| getenv_len||| glob_2number||| glob_assign_glob||| gp_dup||| gp_free||| gp_ref||| grok_atoUV|||n grok_bin|5.007003||p grok_bslash_N||| grok_bslash_c||| grok_bslash_o||| grok_bslash_x||| grok_hex|5.007003||p grok_infnan||5.021004| grok_number_flags||5.021002| grok_number|5.007002||p grok_numeric_radix|5.007002||p grok_oct|5.007003||p group_end||| gv_AVadd||| gv_HVadd||| gv_IOadd||| gv_SVadd||| gv_add_by_type||5.011000| gv_autoload4||5.004000| gv_autoload_pvn||5.015004| gv_autoload_pv||5.015004| gv_autoload_sv||5.015004| gv_check||| gv_const_sv||5.009003| gv_dump||5.006000| gv_efullname3||5.003070| gv_efullname4||5.006001| gv_efullname||| gv_fetchfile_flags||5.009005| gv_fetchfile||| gv_fetchmeth_autoload||5.007003| gv_fetchmeth_internal||| gv_fetchmeth_pv_autoload||5.015004| gv_fetchmeth_pvn_autoload||5.015004| gv_fetchmeth_pvn||5.015004| gv_fetchmeth_pv||5.015004| gv_fetchmeth_sv_autoload||5.015004| gv_fetchmeth_sv||5.015004| gv_fetchmethod_autoload||5.004000| gv_fetchmethod_pv_flags||5.015004| gv_fetchmethod_pvn_flags||5.015004| gv_fetchmethod_sv_flags||5.015004| gv_fetchmethod||| gv_fetchmeth||| gv_fetchpvn_flags|5.009002||p gv_fetchpvs|5.009004||p gv_fetchpv||| gv_fetchsv||| gv_fullname3||5.003070| gv_fullname4||5.006001| gv_fullname||| gv_handler||5.007001| gv_init_pvn||| gv_init_pv||5.015004| gv_init_svtype||| gv_init_sv||5.015004| gv_init||| gv_is_in_main||| gv_magicalize_isa||| gv_magicalize||| gv_name_set||5.009004| gv_override||| gv_setref||| gv_stashpvn_internal||| gv_stashpvn|5.003070||p gv_stashpvs|5.009003||p gv_stashpv||| gv_stashsvpvn_cached||| gv_stashsv||| gv_try_downgrade||| handle_named_backref||| handle_possible_posix||| handle_regex_sets||| he_dup||| hek_dup||| hfree_next_entry||| hfreeentries||| hsplit||| hv_assert||| hv_auxinit_internal|||n hv_auxinit||| hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| hv_common_key_len||5.010000| hv_common||5.010000| hv_copy_hints_hv||5.009004| hv_delayfree_ent||5.004000| hv_delete_common||| hv_delete_ent||5.003070| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| hv_ename_add||| hv_ename_delete||| hv_exists_ent||5.003070| hv_exists||| hv_fetch_ent||5.003070| hv_fetchs|5.009003||p hv_fetch||| hv_fill||5.013002| hv_free_ent_ret||| hv_free_ent||5.004000| hv_iterinit||| hv_iterkeysv||5.003070| hv_iterkey||| hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| hv_kill_backrefs||| hv_ksplit||5.003070| hv_magic_check|||n hv_magic||| hv_name_set||5.009003| hv_notallowed||| hv_placeholders_get||5.009003| hv_placeholders_p||| hv_placeholders_set||5.009003| hv_rand_set||5.018000| hv_riter_p||5.009003| hv_riter_set||5.009003| hv_scalar||5.009001| hv_store_ent||5.003070| hv_store_flags||5.008000| hv_stores|5.009004||p hv_store||| hv_undef_flags||| hv_undef||| ibcmp_locale||5.004000| ibcmp_utf8||5.007003| ibcmp||| incline||| incpush_if_exists||| incpush_use_sep||| incpush||| ingroup||| init_argv_symbols||| init_constants||| init_dbargs||| init_debugger||| init_global_struct||| init_i18nl10n||5.006000| init_i18nl14n||5.006000| init_ids||| init_interp||| init_main_stash||| init_perllib||| init_postdump_symbols||| init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| inplace_aassign||| instr|||n intro_my||5.004000| intuit_method||| intuit_more||| invert||| invlist_array|||n invlist_clear||| invlist_clone||| invlist_contents||| invlist_extend||| invlist_highest|||n invlist_is_iterating|||n invlist_iterfinish|||n invlist_iterinit|||n invlist_iternext|||n invlist_max|||n invlist_previous_index|||n invlist_replace_list_destroys_src||| invlist_set_len||| invlist_set_previous_index|||n invlist_trim|||n invoke_exception_hook||| io_close||| isALNUMC|5.006000||p isALNUM_lazy||5.021001| isALPHANUMERIC||5.017008| isALPHA||| isASCII|5.006000||p isBLANK|5.006001||p isCNTRL|5.006000||p isDIGIT||| isFOO_lc||| isFOO_utf8_lc||| isGCB|||n isGRAPH|5.006000||p isIDCONT||5.017008| isIDFIRST_lazy||5.021001| isIDFIRST||| isLB||| isLOWER||| isOCTAL||5.013005| isPRINT|5.004000||p isPSXSPC|5.006001||p isPUNCT|5.006000||p isSB||| isSPACE||| isUPPER||| isUTF8_CHAR||5.021001| isWB||| isWORDCHAR||5.013006| isXDIGIT|5.006000||p is_an_int||| is_ascii_string||5.011000| is_handle_constructor|||n is_invariant_string||5.021007|n is_lvalue_sub||5.007001| is_safe_syscall||5.019004| is_ssc_worth_it|||n is_uni_alnum_lc||5.006000| is_uni_alnumc_lc||5.017007| is_uni_alnumc||5.017007| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| is_uni_ascii_lc||5.006000| is_uni_ascii||5.006000| is_uni_blank_lc||5.017002| is_uni_blank||5.017002| is_uni_cntrl_lc||5.006000| is_uni_cntrl||5.006000| is_uni_digit_lc||5.006000| is_uni_digit||5.006000| is_uni_graph_lc||5.006000| is_uni_graph||5.006000| is_uni_idfirst_lc||5.006000| is_uni_idfirst||5.006000| is_uni_lower_lc||5.006000| is_uni_lower||5.006000| is_uni_print_lc||5.006000| is_uni_print||5.006000| is_uni_punct_lc||5.006000| is_uni_punct||5.006000| is_uni_space_lc||5.006000| is_uni_space||5.006000| is_uni_upper_lc||5.006000| is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| is_utf8_alnumc||5.017007| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| is_utf8_blank||5.017002| is_utf8_char_buf||5.015008|n is_utf8_char||5.006000|n is_utf8_cntrl||5.006000| is_utf8_common||| is_utf8_digit||5.006000| is_utf8_graph||5.006000| is_utf8_idcont||5.008000| is_utf8_idfirst||5.006000| is_utf8_lower||5.006000| is_utf8_mark||5.006000| is_utf8_perl_space||5.011001| is_utf8_perl_word||5.011001| is_utf8_posix_digit||5.011001| is_utf8_print||5.006000| is_utf8_punct||5.006000| is_utf8_space||5.006000| is_utf8_string_loclen||5.009003|n is_utf8_string_loc||5.008001|n is_utf8_string||5.006001|n is_utf8_upper||5.006000| is_utf8_xdigit||5.006000| is_utf8_xidcont||5.013010| is_utf8_xidfirst||5.013010| isa_lookup||| isinfnansv||| isinfnan||5.021004|n items|||n ix|||n jmaybe||| join_exact||| keyword_plugin_standard||| keyword||| leave_adjust_stacks||5.023008| leave_scope||| lex_bufutf8||5.011002| lex_discard_to||5.011002| lex_grow_linestr||5.011002| lex_next_chunk||5.011002| lex_peek_unichar||5.011002| lex_read_space||5.011002| lex_read_to||5.011002| lex_read_unichar||5.011002| lex_start||5.009005| lex_stuff_pvn||5.011002| lex_stuff_pvs||5.013005| lex_stuff_pv||5.013006| lex_stuff_sv||5.011002| lex_unstuff||5.011002| listkids||| list||| load_module_nocontext|||vn load_module|5.006000||pv localize||| looks_like_bool||| looks_like_number||| lop||| mPUSHi|5.009002||p mPUSHn|5.009002||p mPUSHp|5.009002||p mPUSHs|5.010001||p mPUSHu|5.009002||p mXPUSHi|5.009002||p mXPUSHn|5.009002||p mXPUSHp|5.009002||p mXPUSHs|5.010001||p mXPUSHu|5.009002||p magic_clear_all_env||| magic_cleararylen_p||| magic_clearenv||| magic_clearhints||| magic_clearhint||| magic_clearisa||| magic_clearpack||| magic_clearsig||| magic_copycallchecker||| magic_dump||5.006000| magic_existspack||| magic_freearylen_p||| magic_freeovrld||| magic_getarylen||| magic_getdebugvar||| magic_getdefelem||| magic_getnkeys||| magic_getpack||| magic_getpos||| magic_getsig||| magic_getsubstr||| magic_gettaint||| magic_getuvar||| magic_getvec||| magic_get||| magic_killbackrefs||| magic_methcall1||| magic_methcall|||v magic_methpack||| magic_nextpack||| magic_regdata_cnt||| magic_regdatum_get||| magic_regdatum_set||| magic_scalarpack||| magic_set_all_env||| magic_setarylen||| magic_setcollxfrm||| magic_setdbline||| magic_setdebugvar||| magic_setdefelem||| magic_setenv||| magic_sethint||| magic_setisa||| magic_setlvref||| magic_setmglob||| magic_setnkeys||| magic_setpack||| magic_setpos||| magic_setregexp||| magic_setsig||| magic_setsubstr||| magic_settaint||| magic_setutf8||| magic_setuvar||| magic_setvec||| magic_set||| magic_sizepack||| magic_wipepack||| make_matcher||| make_trie||| malloc_good_size|||n malloced_size|||n malloc||5.007002|n markstack_grow||5.021001| matcher_matches_sv||| maybe_multimagic_gv||| mayberelocate||| measure_struct||| memEQs|5.009005||p memEQ|5.004000||p memNEs|5.009005||p memNE|5.004000||p mem_collxfrm||| mem_log_alloc|||n mem_log_common|||n mem_log_free|||n mem_log_realloc|||n mess_alloc||| mess_nocontext|||vn mess_sv||5.013001| mess||5.006000|v mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| mg_find_mglob||| mg_findext|5.013008||pn mg_find|||n mg_free_type||5.013006| mg_free||| mg_get||| mg_length||5.005000| mg_localize||| mg_magical|||n mg_set||| mg_size||5.005000| mini_mktime||5.007002|n minus_v||| missingterm||| mode_from_discipline||| modkids||| more_bodies||| more_sv||| moreswitches||| move_proto_attr||| mro_clean_isarev||| mro_gather_and_rename||| mro_get_from_name||5.010001| mro_get_linear_isa_dfs||| mro_get_linear_isa||5.009005| mro_get_private_data||5.010001| mro_isa_changed_in||| mro_meta_dup||| mro_meta_init||| mro_method_changed_in||5.009005| mro_package_moved||| mro_register||5.010001| mro_set_mro||5.010001| mro_set_private_data||5.010001| mul128||| mulexp10|||n multideref_stringify||| my_atof2||5.007002| my_atof||5.006000| my_attrs||| my_bcopy||5.004050|n my_bytes_to_utf8|||n my_bzero|||n my_chsize||| my_clearenv||| my_cxt_index||| my_cxt_init||| my_dirfd||5.009005|n my_exit_jump||| my_exit||| my_failure_exit||5.004000| my_fflush_all||5.006000| my_fork||5.007003|n my_kid||| my_lstat_flags||| my_lstat||5.024000| my_memcmp|||n my_memset|||n my_pclose||5.003070| my_popen_list||5.007001| my_popen||5.003070| my_setenv||| my_setlocale||| my_snprintf|5.009004||pvn my_socketpair||5.007003|n my_sprintf|5.009003||pvn my_stat_flags||| my_stat||5.024000| my_strerror||5.021001| my_strftime||5.007002| my_strlcat|5.009004||pn my_strlcpy|5.009004||pn my_unexec||| my_vsnprintf||5.009004|n need_utf8|||n newANONATTRSUB||5.006000| newANONHASH||| newANONLIST||| newANONSUB||| newASSIGNOP||| newATTRSUB_x||| newATTRSUB||5.006000| newAVREF||| newAV||| newBINOP||| newCONDOP||| newCONSTSUB_flags||5.015006| newCONSTSUB|5.004050||p newCVREF||| newDEFSVOP||5.021006| newFORM||| newFOROP||5.013007| newGIVENOP||5.009003| newGIVWHENOP||| newGP||| newGVOP||| newGVREF||| newGVgen_flags||5.015004| newGVgen||| newHVREF||| newHVhv||5.005000| newHV||| newIO||| newLISTOP||| newLOGOP||| newLOOPEX||| newLOOPOP||| newMETHOP_internal||| newMETHOP_named||5.021005| newMETHOP||5.021005| newMYSUB||5.017004| newNULLLIST||| newOP||| newPADNAMELIST||5.021007|n newPADNAMEouter||5.021007|n newPADNAMEpvn||5.021007|n newPADOP||| newPMOP||| newPROG||| newPVOP||| newRANGE||| newRV_inc|5.004000||p newRV_noinc|5.004000||p newRV||| newSLICEOP||| newSTATEOP||| newSTUB||| newSUB||| newSVOP||| newSVREF||| newSV_type|5.009005||p newSVavdefelem||| newSVhek||5.009003| newSViv||| newSVnv||| newSVpadname||5.017004| newSVpv_share||5.013006| newSVpvf_nocontext|||vn newSVpvf||5.004000|v newSVpvn_flags|5.010001||p newSVpvn_share|5.007001||p newSVpvn_utf8|5.010001||p newSVpvn|5.004050||p newSVpvs_flags|5.010001||p newSVpvs_share|5.009003||p newSVpvs|5.009003||p newSVpv||| newSVrv||| newSVsv||| newSVuv|5.006000||p newSV||| newUNOP_AUX||5.021007| newUNOP||| newWHENOP||5.009003| newWHILEOP||5.013007| newXS_deffile||| newXS_flags||5.009004| newXS_len_flags||| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| new_constant||| new_ctype||5.006000| new_he||| new_logop||| new_numeric||5.006000| new_stackinfo||5.005000| new_version||5.009000| new_warnings_bitfield||| next_symbol||| nextargv||| nextchar||| ninstr|||n no_bareword_allowed||| no_fh_allowed||| no_op||| noperl_die|||vn not_a_number||| not_incrementable||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n oopsAV||| oopsHV||| op_append_elem||5.013006| op_append_list||5.013006| op_clear||| op_contextualize||5.013006| op_convert_list||5.021006| op_dump||5.006000| op_free||| op_integerize||| op_linklist||5.013006| op_lvalue_flags||| op_lvalue||5.013007| op_null||5.007002| op_parent|||n op_prepend_elem||5.013006| op_refcnt_dec||| op_refcnt_inc||| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| op_relocate_sv||| op_scope||5.013007| op_sibling_splice||5.021002|n op_std_init||| op_unscope||| open_script||| openn_cleanup||| openn_setup||| opmethod_stash||| opslab_force_free||| opslab_free_nopad||| opslab_free||| output_or_return_posix_warnings||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p pTHX|5.006000||p packWARN|5.007003||p pack_cat||5.007003| pack_rec||| package_version||| package||| packlist||5.008001| pad_add_anon||5.008001| pad_add_name_pvn||5.015001| pad_add_name_pvs||5.015001| pad_add_name_pv||5.015001| pad_add_name_sv||5.015001| pad_add_weakref||| pad_alloc_name||| pad_alloc||| pad_block_start||| pad_check_dup||| pad_compname_type||5.009003| pad_findlex||| pad_findmy_pvn||5.015001| pad_findmy_pvs||5.015001| pad_findmy_pv||5.015001| pad_findmy_sv||5.015001| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| pad_new||5.008001| pad_push||| pad_reset||| pad_setsv||| pad_sv||| pad_swipe||| pad_tidy||5.008001| padlist_dup||| padlist_store||| padname_dup||| padname_free||| padnamelist_dup||| padnamelist_fetch||5.021007|n padnamelist_free||| padnamelist_store||5.021007| parse_arithexpr||5.013008| parse_barestmt||5.013007| parse_block||5.013007| parse_body||| parse_fullexpr||5.013008| parse_fullstmt||5.013005| parse_gv_stash_name||| parse_ident||| parse_label||5.013007| parse_listexpr||5.013008| parse_lparen_question_flags||| parse_stmtseq||5.013006| parse_subsignature||| parse_termexpr||5.013008| parse_unicode_opts||| parser_dup||| parser_free_nexttoke_ops||| parser_free||| path_is_searchable|||n peep||| pending_ident||| perl_alloc_using|||n perl_alloc|||n perl_clone_using|||n perl_clone|||n perl_construct|||n perl_destruct||5.007003|n perl_free|||n perl_parse||5.006000|n perl_run|||n pidgone||| pm_description||| pmop_dump||5.006000| pmruntime||| pmtrans||| pop_scope||| populate_ANYOF_from_invlist||| populate_isa|||v pregcomp||5.009005| pregexec||| pregfree2||5.011000| pregfree||| prescan_version||5.011004| printbuf||| printf_nocontext|||vn process_special_blocks||| ptr_hash|||n ptr_table_clear||5.009005| ptr_table_fetch||5.009005| ptr_table_find|||n ptr_table_free||5.009005| ptr_table_new||5.009005| ptr_table_split||5.009005| ptr_table_store||5.009005| push_scope||| put_charclass_bitmap_innards_common||| put_charclass_bitmap_innards_invlist||| put_charclass_bitmap_innards||| put_code_point||| put_range||| pv_display|5.006000||p pv_escape|5.009004||p pv_pretty|5.009004||p pv_uni_display||5.007003| qerror||| qsortsvu||| quadmath_format_needed|||n quadmath_format_single|||n re_compile||5.009005| re_croak2||| re_dup_guts||| re_exec_indentf|||v re_indentf|||v re_intuit_start||5.019001| re_intuit_string||5.006000| re_op_compile||| re_printf|||v realloc||5.007002|n reentrant_free||5.024000| reentrant_init||5.024000| reentrant_retry||5.024000|vn reentrant_size||5.024000| ref_array_or_hash||| refcounted_he_chain_2hv||| refcounted_he_fetch_pvn||| refcounted_he_fetch_pvs||| refcounted_he_fetch_pv||| refcounted_he_fetch_sv||| refcounted_he_free||| refcounted_he_inc||| refcounted_he_new_pvn||| refcounted_he_new_pvs||| refcounted_he_new_pv||| refcounted_he_new_sv||| refcounted_he_value||| refkids||| refto||| ref||5.024000| reg2Lanode||| reg_check_named_buff_matched|||n reg_named_buff_all||5.009005| reg_named_buff_exists||5.009005| reg_named_buff_fetch||5.009005| reg_named_buff_firstkey||5.009005| reg_named_buff_iter||| reg_named_buff_nextkey||5.009005| reg_named_buff_scalar||5.009005| reg_named_buff||| reg_node||| reg_numbered_buff_fetch||| reg_numbered_buff_length||| reg_numbered_buff_store||| reg_qr_package||| reg_recode||| reg_scan_name||| reg_skipcomment|||n reg_temp_copy||| reganode||| regatom||| regbranch||| regclass_swash||5.009004| regclass||| regcppop||| regcppush||| regcurly|||n regdump_extflags||| regdump_intflags||| regdump||5.005000| regdupe_internal||| regex_set_precedence|||n regexec_flags||5.005000| regfree_internal||5.009005| reghop3|||n reghop4|||n reghopmaybe3|||n reginclass||| reginitcolors||5.006000| reginsert||| regmatch||| regnext||5.005000| regnode_guts||| regpiece||| regprop||| regrepeat||| regtail_study||| regtail||| regtry||| reg||| repeatcpy|||n report_evil_fh||| report_redefined_cv||| report_uninit||| report_wrongway_fh||| require_pv||5.006000| require_tie_mod||| restore_magic||| rninstr|||n rpeep||| rsignal_restore||| rsignal_save||| rsignal_state||5.004000| rsignal||5.004000| run_body||| run_user_filter||| runops_debug||5.005000| runops_standard||5.005000| rv2cv_op_cv||5.013006| rvpv_dup||| rxres_free||| rxres_restore||| rxres_save||| safesyscalloc||5.006000|n safesysfree||5.006000|n safesysmalloc||5.006000|n safesysrealloc||5.006000|n same_dirent||| save_I16||5.004000| save_I32||| save_I8||5.006000| save_adelete||5.011000| save_aelem_flags||5.011000| save_aelem||5.004050| save_alloc||5.006000| save_aptr||| save_ary||| save_bool||5.008001| save_clearsv||| save_delete||| save_destructor_x||5.006000| save_destructor||5.006000| save_freeop||| save_freepv||| save_freesv||| save_generic_pvref||5.006001| save_generic_svref||5.005030| save_gp||5.004000| save_hash||| save_hdelete||5.011000| save_hek_flags|||n save_helem_flags||5.011000| save_helem||5.004050| save_hints||5.010001| save_hptr||| save_int||| save_item||| save_iv||5.005000| save_lines||| save_list||| save_long||| save_magic_flags||| save_mortalizesv||5.007001| save_nogv||| save_op||5.005000| save_padsv_and_mortalize||5.010001| save_pptr||| save_pushi32ptr||5.010001| save_pushptri32ptr||| save_pushptrptr||5.010001| save_pushptr||5.010001| save_re_context||5.006000| save_scalar_at||| save_scalar||| save_set_svflags||5.009000| save_shared_pvref||5.007003| save_sptr||| save_strlen||| save_svref||| save_vptr||5.006000| savepvn||| savepvs||5.009003| savepv||| savesharedpvn||5.009005| savesharedpvs||5.013006| savesharedpv||5.007003| savesharedsvpv||5.013006| savestack_grow_cnt||5.008001| savestack_grow||| savesvpv||5.009002| savetmps||5.023008| sawparens||| scalar_mod_type|||n scalarboolean||| scalarkids||| scalarseq||| scalarvoid||| scalar||| scan_bin||5.006000| scan_commit||| scan_const||| scan_formline||| scan_heredoc||| scan_hex||| scan_ident||| scan_inputsymbol||| scan_num||5.007001| scan_oct||| scan_pat||| scan_str||| scan_subst||| scan_trans||| scan_version||5.009001| scan_vstring||5.009005| scan_word||| search_const||| seed||5.008001| sequence_num||| set_ANYOF_arg||| set_caret_X||| set_context||5.006000|n set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| set_padlist|||n setdefout||| share_hek_flags||| share_hek||5.004000| should_warn_nl|||n si_dup||| sighandler|||n simplify_sort||| skip_to_be_ignored_text||| skipspace_flags||| softref2xv||| sortcv_stacked||| sortcv_xsub||| sortcv||| sortsv_flags||5.009003| sortsv||5.007003| space_join_names_mortal||| ss_dup||| ssc_add_range||| ssc_and||| ssc_anything||| ssc_clear_locale|||n ssc_cp_and||| ssc_finalize||| ssc_init||| ssc_intersection||| ssc_is_anything|||n ssc_is_cp_posixl_init|||n ssc_or||| ssc_union||| stack_grow||| start_glob||| start_subparse||5.004000| stdize_locale||| strEQ||| strGE||| strGT||| strLE||| strLT||| strNE||| str_to_version||5.006000| strip_return||| strnEQ||| strnNE||| study_chunk||| sub_crush_depth||| sublex_done||| sublex_push||| sublex_start||| sv_2bool_flags||5.013006| sv_2bool||| sv_2cv||| sv_2io||| sv_2iuv_common||| sv_2iuv_non_preserve||| sv_2iv_flags||5.009001| sv_2iv||| sv_2mortal||| sv_2num||| sv_2nv_flags||5.013001| sv_2pv_flags|5.007002||p sv_2pv_nolen|5.006000||p sv_2pvbyte_nolen|5.006000||p sv_2pvbyte|5.006000||p sv_2pvutf8_nolen||5.006000| sv_2pvutf8||5.006000| sv_2pv||| sv_2uv_flags||5.009001| sv_2uv|5.004000||p sv_add_arena||| sv_add_backref||| sv_backoff|||n sv_bless||| sv_buf_to_ro||| sv_buf_to_rw||| sv_cat_decode||5.008001| sv_catpv_flags||5.013006| sv_catpv_mg|5.004050||p sv_catpv_nomg||5.013006| sv_catpvf_mg_nocontext|||pvn sv_catpvf_mg|5.006000|5.004000|pv sv_catpvf_nocontext|||vn sv_catpvf||5.004000|v sv_catpvn_flags||5.007002| sv_catpvn_mg|5.004050||p sv_catpvn_nomg|5.007002||p sv_catpvn||| sv_catpvs_flags||5.013006| sv_catpvs_mg||5.013006| sv_catpvs_nomg||5.013006| sv_catpvs|5.009003||p sv_catpv||| sv_catsv_flags||5.007002| sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| sv_clear||| sv_cmp_flags||5.013006| sv_cmp_locale_flags||5.013006| sv_cmp_locale||5.004000| sv_cmp||| sv_collxfrm_flags||5.013006| sv_collxfrm||| sv_copypv_flags||5.017002| sv_copypv_nomg||5.017002| sv_copypv||| sv_dec_nomg||5.013002| sv_dec||| sv_del_backref||| sv_derived_from_pvn||5.015004| sv_derived_from_pv||5.015004| sv_derived_from_sv||5.015004| sv_derived_from||5.004000| sv_destroyable||5.010000| sv_display||| sv_does_pvn||5.015004| sv_does_pv||5.015004| sv_does_sv||5.015004| sv_does||5.009004| sv_dump||| sv_dup_common||| sv_dup_inc_multiple||| sv_dup_inc||| sv_dup||| sv_eq_flags||5.013006| sv_eq||| sv_exp_grow||| sv_force_normal_flags||5.007001| sv_force_normal||5.006000| sv_free2||| sv_free_arenas||| sv_free||| sv_get_backrefs||5.021008|n sv_gets||5.003070| sv_grow||| sv_i_ncmp||| sv_inc_nomg||5.013002| sv_inc||| sv_insert_flags||5.010001| sv_insert||| sv_isa||| sv_isobject||| sv_iv||5.005000| sv_kill_backrefs||| sv_len_utf8_nomg||| sv_len_utf8||5.006000| sv_len||| sv_magic_portable|5.024000|5.004000|p sv_magicext_mglob||| sv_magicext||5.007003| sv_magic||| sv_mortalcopy_flags||| sv_mortalcopy||| sv_ncmp||| sv_newmortal||| sv_newref||| sv_nolocking||5.007003| sv_nosharing||5.007003| sv_nounlocking||| sv_nv||5.005000| sv_only_taint_gmagic|||n sv_or_pv_pos_u2b||| sv_peek||5.005000| sv_pos_b2u_flags||5.019003| sv_pos_b2u_midway||| sv_pos_b2u||5.006000| sv_pos_u2b_cached||| sv_pos_u2b_flags||5.011005| sv_pos_u2b_forwards|||n sv_pos_u2b_midway|||n sv_pos_u2b||5.006000| sv_pvbyten_force||5.006000| sv_pvbyten||5.006000| sv_pvbyte||5.006000| sv_pvn_force_flags|5.007002||p sv_pvn_force||| sv_pvn_nomg|5.007003|5.005000|p sv_pvn||5.005000| sv_pvutf8n_force||5.006000| sv_pvutf8n||5.006000| sv_pvutf8||5.006000| sv_pv||5.006000| sv_recode_to_utf8||5.007003| sv_reftype||| sv_ref||5.015004| sv_replace||| sv_report_used||| sv_resetpvn||| sv_reset||| sv_rvweaken||5.006000| sv_sethek||| sv_setiv_mg|5.004050||p sv_setiv||| sv_setnv_mg|5.006000||p sv_setnv||| sv_setpv_mg|5.004050||p sv_setpvf_mg_nocontext|||pvn sv_setpvf_mg|5.006000|5.004000|pv sv_setpvf_nocontext|||vn sv_setpvf||5.004000|v sv_setpviv_mg||5.008001| sv_setpviv||5.008001| sv_setpvn_mg|5.004050||p sv_setpvn||| sv_setpvs_mg||5.013006| sv_setpvs|5.009004||p sv_setpv||| sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| sv_setref_pvs||5.024000| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| sv_setsv_flags||5.007002| sv_setsv_mg|5.004050||p sv_setsv_nomg|5.007002||p sv_setsv||| sv_setuv_mg|5.004050||p sv_setuv|5.004000||p sv_tainted||5.004000| sv_taint||5.004000| sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| sv_unmagicext|5.013008||p sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| sv_untaint||5.004000| sv_upgrade||| sv_usepvn_flags||5.009004| sv_usepvn_mg|5.004050||p sv_usepvn||| sv_utf8_decode||5.006000| sv_utf8_downgrade||5.006000| sv_utf8_encode||5.006000| sv_utf8_upgrade_flags_grow||5.011000| sv_utf8_upgrade_flags||5.007002| sv_utf8_upgrade_nomg||5.007002| sv_utf8_upgrade||5.007001| sv_uv|5.005000||p sv_vcatpvf_mg|5.006000|5.004000|p sv_vcatpvfn_flags||5.017002| sv_vcatpvfn||5.004000| sv_vcatpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn||5.004000| sv_vsetpvf|5.006000|5.004000|p svtype||| swallow_bom||| swash_fetch||5.007002| swash_init||5.006000| swash_scan_list_line||| swatch_get||| sync_locale||5.021004| sys_init3||5.010000|n sys_init||5.010000|n sys_intern_clear||| sys_intern_dup||| sys_intern_init||| sys_term||5.010000|n taint_env||| taint_proper||| tied_method|||v tmps_grow_p||| toFOLD_utf8||5.019001| toFOLD_uvchr||5.023009| toFOLD||5.019001| toLOWER_L1||5.019001| toLOWER_LC||5.004000| toLOWER_utf8||5.015007| toLOWER_uvchr||5.023009| toLOWER||| toTITLE_utf8||5.015007| toTITLE_uvchr||5.023009| toTITLE||5.019001| toUPPER_utf8||5.015007| toUPPER_uvchr||5.023009| toUPPER||| to_byte_substr||| to_lower_latin1|||n to_uni_fold||5.007003| to_uni_lower_lc||5.006000| to_uni_lower||5.007003| to_uni_title_lc||5.006000| to_uni_title||5.007003| to_uni_upper_lc||5.006000| to_uni_upper||5.007003| to_utf8_case||5.007003| to_utf8_fold||5.015007| to_utf8_lower||5.015007| to_utf8_substr||| to_utf8_title||5.015007| to_utf8_upper||5.015007| tokenize_use||| tokeq||| tokereport||| too_few_arguments_pv||| too_many_arguments_pv||| translate_substr_offsets|||n try_amagic_bin||| try_amagic_un||| uiv_2buf|||n unlnk||| unpack_rec||| unpack_str||5.007003| unpackstring||5.008001| unreferenced_to_tmp_stack||| unshare_hek_or_pvn||| unshare_hek||| unsharepvn||5.003070| unwind_handler_stack||| update_debugger_info||| upg_version||5.009005| usage||| utf16_textfilter||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf8_distance||5.006000| utf8_hop||5.006000|n utf8_length||5.007001| utf8_mg_len_cache_update||| utf8_mg_pos_cache_update||| utf8_to_bytes||5.006001| utf8_to_uvchr_buf||5.015009| utf8_to_uvchr||5.007001| utf8_to_uvuni_buf||5.015009| utf8_to_uvuni||5.007001| utf8n_to_uvchr||5.007001| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| uvchr_to_utf8||5.007001| uvoffuni_to_utf8_flags||5.019004| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| valid_utf8_to_uvchr||5.015009| valid_utf8_to_uvuni||5.015009| validate_proto||| validate_suid||| varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| vform||5.006000| visit||| vivify_defelem||| vivify_ref||| vload_module|5.006000||p vmess||5.006000| vnewSVpvf|5.006000|5.004000|p vnormal||5.009002| vnumify||5.009000| vstringify||5.009000| vverify||5.009003| vwarner||5.006000| vwarn||5.006000| wait4pid||| warn_nocontext|||vn warn_sv||5.013001| warner_nocontext|||vn warner|5.006000|5.004000|pv warn|||v was_lvalue_sub||| watch||| whichsig_pvn||5.015004| whichsig_pv||5.015004| whichsig_sv||5.015004| whichsig||| win32_croak_not_implemented|||n with_queued_errors||| wrap_op_checker||5.015008| write_to_stderr||| xs_boot_epilog||| xs_handshake|||vn xs_version_bootcheck||| yyerror_pvn||| yyerror_pv||| yyerror||| yylex||| yyparse||| yyunlex||| yywarn||| ); if (exists $opt{'list-unsupported'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{todo}; print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; } exit 0; } # Scan for possible replacement candidates my(%replace, %need, %hints, %warnings, %depends); my $replace = 0; my($hint, $define, $function); sub find_api { my $code = shift; $code =~ s{ / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; grep { exists $API{$_} } $code =~ /(\w+)/mg; } while (<DATA>) { if ($hint) { my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; if (m{^\s*\*\s(.*?)\s*$}) { for (@{$hint->[1]}) { $h->{$_} ||= ''; # suppress warning with older perls $h->{$_} .= "$1\n"; } } else { undef $hint } } $hint = [$1, [split /,?\s+/, $2]] if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; if ($define) { if ($define->[1] =~ /\\$/) { $define->[1] .= $_; } else { if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { my @n = find_api($define->[1]); push @{$depends{$define->[0]}}, @n if @n } undef $define; } } $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; if ($function) { if (/^}/) { if (exists $API{$function->[0]}) { my @n = find_api($function->[1]); push @{$depends{$function->[0]}}, @n if @n } undef $function; } else { $function->[1] .= $_; } } $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { my @deps = map { s/\s+//g; $_ } split /,/, $3; my $d; for $d (map { s/\s+//g; $_ } split /,/, $1) { push @{$depends{$d}}, @deps; } } $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; } for (values %depends) { my %s; $_ = [sort grep !$s{$_}++, @$_]; } if (exists $opt{'api-info'}) { my $f; my $count = 0; my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $f =~ /$match/; print "\n=== $f ===\n\n"; my $info = 0; if ($API{$f}{base} || $API{$f}{todo}) { my $base = format_version($API{$f}{base} || $API{$f}{todo}); print "Supported at least starting from perl-$base.\n"; $info++; } if ($API{$f}{provided}) { my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; print "Support by $ppport provided back to perl-$todo.\n"; print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; print "\n$hints{$f}" if exists $hints{$f}; print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; $info++; } print "No portability information available.\n" unless $info; $count++; } $count or print "Found no API matching '$opt{'api-info'}'."; print "\n"; exit 0; } if (exists $opt{'list-provided'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{provided}; my @flags; push @flags, 'explicit' if exists $need{$f}; push @flags, 'depend' if exists $depends{$f}; push @flags, 'hint' if exists $hints{$f}; push @flags, 'warning' if exists $warnings{$f}; my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; print "$f$flags\n"; } exit 0; } my @files; my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); my $srcext = join '|', map { quotemeta $_ } @srcext; if (@ARGV) { my %seen; for (@ARGV) { if (-e) { if (-f) { push @files, $_ unless $seen{$_}++; } else { warn "'$_' is not a file.\n" } } else { my @new = grep { -f } glob $_ or warn "'$_' does not exist.\n"; push @files, grep { !$seen{$_}++ } @new; } } } else { eval { require File::Find; File::Find::find(sub { $File::Find::name =~ /($srcext)$/i and push @files, $File::Find::name; }, '.'); }; if ($@) { @files = map { glob "*$_" } @srcext; } } if (!@ARGV || $opt{filter}) { my(@in, @out); my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; for (@files) { my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; push @{ $out ? \@out : \@in }, $_; } if (@ARGV && @out) { warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); } @files = @in; } die "No input files given!\n" unless @files; my(%files, %global, %revreplace); %revreplace = reverse %replace; my $filename; my $patch_opened = 0; for $filename (@files) { unless (open IN, "<$filename") { warn "Unable to read from $filename: $!\n"; next; } info("Scanning $filename ..."); my $c = do { local $/; <IN> }; close IN; my %file = (orig => $c, changes => 0); # Temporarily remove C/XS comments and strings from the code my @ccom; $c =~ s{ ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) | ( ^$HS*\#[^\r\n]* | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) }{ defined $2 and push @ccom, $2; defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; $file{ccom} = \@ccom; $file{code} = $c; $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; my $func; for $func (keys %API) { my $match = $func; $match .= "|$revreplace{$func}" if exists $revreplace{$func}; if ($c =~ /\b(?:Perl_)?($match)\b/) { $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; if (exists $API{$func}{provided}) { $file{uses_provided}{$func}++; if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { $file{uses}{$func}++; my @deps = rec_depend($func); if (@deps) { $file{uses_deps}{$func} = \@deps; for (@deps) { $file{uses}{$_} = 0 unless exists $file{uses}{$_}; } } for ($func, @deps) { $file{needs}{$_} = 'static' if exists $need{$_}; } } } if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { if ($c =~ /\b$func\b/) { $file{uses_todo}{$func}++; } } } } while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { if (exists $need{$2}) { $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; } else { warning("Possibly wrong #define $1 in $filename") } } for (qw(uses needs uses_todo needed_global needed_static)) { for $func (keys %{$file{$_}}) { push @{$global{$_}{$func}}, $filename; } } $files{$filename} = \%file; } # Globally resolve NEED_'s my $need; for $need (keys %{$global{needs}}) { if (@{$global{needs}{$need}} > 1) { my @targets = @{$global{needs}{$need}}; my @t = grep $files{$_}{needed_global}{$need}, @targets; @targets = @t if @t; @t = grep /\.xs$/i, @targets; @targets = @t if @t; my $target = shift @targets; $files{$target}{needs}{$need} = 'global'; for (@{$global{needs}{$need}}) { $files{$_}{needs}{$need} = 'extern' if $_ ne $target; } } } for $filename (@files) { exists $files{$filename} or next; info("=== Analyzing $filename ==="); my %file = %{$files{$filename}}; my $func; my $c = $file{code}; my $warnings = 0; for $func (sort keys %{$file{uses_Perl}}) { if ($API{$func}{varargs}) { unless ($API{$func}{nothxarg}) { my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); if ($changes) { warning("Doesn't pass interpreter argument aTHX to Perl_$func"); $file{changes} += $changes; } } } else { warning("Uses Perl_$func instead of $func"); $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} {$func$1(}g); } } for $func (sort keys %{$file{uses_replace}}) { warning("Uses $func instead of $replace{$func}"); $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); } for $func (sort keys %{$file{uses_provided}}) { if ($file{uses}{$func}) { if (exists $file{uses_deps}{$func}) { diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); } else { diag("Uses $func"); } } $warnings += hint($func); } unless ($opt{quiet}) { for $func (sort keys %{$file{uses_todo}}) { print "*** WARNING: Uses $func, which may not be portable below perl ", format_version($API{$func}{todo}), ", even with '$ppport'\n"; $warnings++; } } for $func (sort keys %{$file{needed_static}}) { my $message = ''; if (not exists $file{uses}{$func}) { $message = "No need to define NEED_$func if $func is never used"; } elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { $message = "No need to define NEED_$func when already needed globally"; } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); } } for $func (sort keys %{$file{needed_global}}) { my $message = ''; if (not exists $global{uses}{$func}) { $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; } elsif (exists $file{needs}{$func}) { if ($file{needs}{$func} eq 'extern') { $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; } elsif ($file{needs}{$func} eq 'static') { $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; } } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); } } $file{needs_inc_ppport} = keys %{$file{uses}}; if ($file{needs_inc_ppport}) { my $pp = ''; for $func (sort keys %{$file{needs}}) { my $type = $file{needs}{$func}; next if $type eq 'extern'; my $suffix = $type eq 'global' ? '_GLOBAL' : ''; unless (exists $file{"needed_$type"}{$func}) { if ($type eq 'global') { diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); } else { diag("File needs $func, adding static request"); } $pp .= "#define NEED_$func$suffix\n"; } } if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { $pp = ''; $file{changes}++; } unless ($file{has_inc_ppport}) { diag("Needs to include '$ppport'"); $pp .= qq(#include "$ppport"\n) } if ($pp) { $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) || ($c =~ s/^/$pp/); } } else { if ($file{has_inc_ppport}) { diag("No need to include '$ppport'"); $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); } } # put back in our C comments my $ix; my $cppc = 0; my @ccom = @{$file{ccom}}; for $ix (0 .. $#ccom) { if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { $cppc++; $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; } else { $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; } } if ($cppc) { my $s = $cppc != 1 ? 's' : ''; warning("Uses $cppc C++ style comment$s, which is not portable"); } my $s = $warnings != 1 ? 's' : ''; my $warn = $warnings ? " ($warnings warning$s)" : ''; info("Analysis completed$warn"); if ($file{changes}) { if (exists $opt{copy}) { my $newfile = "$filename$opt{copy}"; if (-e $newfile) { error("'$newfile' already exists, refusing to write copy of '$filename'"); } else { local *F; if (open F, ">$newfile") { info("Writing copy of '$filename' with changes to '$newfile'"); print F $c; close F; } else { error("Cannot open '$newfile' for writing: $!"); } } } elsif (exists $opt{patch} || $opt{changes}) { if (exists $opt{patch}) { unless ($patch_opened) { if (open PATCH, ">$opt{patch}") { $patch_opened = 1; } else { error("Cannot open '$opt{patch}' for writing: $!"); delete $opt{patch}; $opt{changes} = 1; goto fallback; } } mydiff(\*PATCH, $filename, $c); } else { fallback: info("Suggested changes:"); mydiff(\*STDOUT, $filename, $c); } } else { my $s = $file{changes} == 1 ? '' : 's'; info("$file{changes} potentially required change$s detected"); } } else { info("Looks good"); } } close PATCH if $patch_opened; exit 0; sub try_use { eval "use @_;"; return $@ eq '' } sub mydiff { local *F = shift; my($file, $str) = @_; my $diff; if (exists $opt{diff}) { $diff = run_diff($opt{diff}, $file, $str); } if (!defined $diff and try_use('Text::Diff')) { $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); $diff = <<HEADER . $diff; --- $file +++ $file.patched HEADER } if (!defined $diff) { $diff = run_diff('diff -u', $file, $str); } if (!defined $diff) { $diff = run_diff('diff', $file, $str); } if (!defined $diff) { error("Cannot generate a diff. Please install Text::Diff or use --copy."); return; } print F $diff; } sub run_diff { my($prog, $file, $str) = @_; my $tmp = 'dppptemp'; my $suf = 'aaa'; my $diff = ''; local *F; while (-e "$tmp.$suf") { $suf++ } $tmp = "$tmp.$suf"; if (open F, ">$tmp") { print F $str; close F; if (open F, "$prog $file $tmp |") { while (<F>) { s/\Q$tmp\E/$file.patched/; $diff .= $_; } close F; unlink $tmp; return $diff; } unlink $tmp; } else { error("Cannot open '$tmp' for writing: $!"); } return undef; } sub rec_depend { my($func, $seen) = @_; return () unless exists $depends{$func}; $seen = {%{$seen||{}}}; return () if $seen->{$func}++; my %s; grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; } sub parse_version { my $ver = shift; if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { return ($1, $2, $3); } elsif ($ver !~ /^\d+\.[\d_]+$/) { die "cannot parse version '$ver'\n"; } $ver =~ s/_//g; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "cannot parse version '$ver'\n"; } } return ($r, $v, $s); } sub format_version { my $ver = shift; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "invalid version '$ver'\n"; } $s /= 10; $ver = sprintf "%d.%03d", $r, $v; $s > 0 and $ver .= sprintf "_%02d", $s; return $ver; } return sprintf "%d.%d.%d", $r, $v, $s; } sub info { $opt{quiet} and return; print @_, "\n"; } sub diag { $opt{quiet} and return; $opt{diag} and print @_, "\n"; } sub warning { $opt{quiet} and return; print "*** ", @_, "\n"; } sub error { print "*** ERROR: ", @_, "\n"; } my %given_hints; my %given_warnings; sub hint { $opt{quiet} and return; my $func = shift; my $rv = 0; if (exists $warnings{$func} && !$given_warnings{$func}++) { my $warn = $warnings{$func}; $warn =~ s!^!*** !mg; print "*** WARNING: $func\n", $warn; $rv++; } if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { my $hint = $hints{$func}; $hint =~ s/^/ /mg; print " --- hint for $func ---\n", $hint; } $rv; } sub usage { my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; my %M = ( 'I' => '*' ); $usage =~ s/^\s*perl\s+\S+/$^X $0/; $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; print <<ENDUSAGE; Usage: $usage See perldoc $0 for details. ENDUSAGE exit 2; } sub strip { my $self = do { local(@ARGV,$/)=($0); <> }; my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; $copy =~ s/^(?=\S+)/ /gms; $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; $self =~ s/^SKIP.*(?=^__DATA__)/SKIP if (\@ARGV && \$ARGV[0] eq '--unstrip') { eval { require Devel::PPPort }; \$@ and die "Cannot require Devel::PPPort, please install.\\n"; if (eval \$Devel::PPPort::VERSION < $VERSION) { die "$0 was originally generated with Devel::PPPort $VERSION.\\n" . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" . "Please install a newer version, or --unstrip will not work.\\n"; } Devel::PPPort::WriteFile(\$0); exit 0; } print <<END; Sorry, but this is a stripped version of \$0. To be able to use its original script and doc functionality, please try to regenerate this file using: \$^X \$0 --unstrip END /ms; my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms; $c =~ s{ / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) | ( "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' ) | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex; $c =~ s!\s+$!!mg; $c =~ s!^$LF!!mg; $c =~ s!^\s*#\s*!#!mg; $c =~ s!^\s+!!mg; open OUT, ">$0" or die "cannot strip $0: $!\n"; print OUT "$pl$c\n"; exit 0; } __DATA__ */ #ifndef _P_P_PORTABILITY_H_ #define _P_P_PORTABILITY_H_ #ifndef DPPP_NAMESPACE # define DPPP_NAMESPACE DPPP_ #endif #define DPPP_CAT2(x,y) CAT2(x,y) #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) #ifndef PERL_REVISION # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) # define PERL_PATCHLEVEL_H_IMPLICIT # include <patchlevel.h> # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include <could_not_find_Perl_patchlevel.h> # endif # ifndef PERL_REVISION # define PERL_REVISION (5) /* Replace: 1 */ # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION /* Replace PERL_PATCHLEVEL with PERL_VERSION */ /* Replace: 0 */ # endif #endif #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) /* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 # error ppport.h only works with Perl version 5 #endif /* PERL_REVISION != 5 */ #ifndef dTHR # define dTHR dNOOP #endif #ifndef dTHX # define dTHX dNOOP #endif #ifndef dTHXa # define dTHXa(x) dNOOP #endif #ifndef pTHX # define pTHX void #endif #ifndef pTHX_ # define pTHX_ #endif #ifndef aTHX # define aTHX #endif #ifndef aTHX_ # define aTHX_ #endif #if (PERL_BCDVERSION < 0x5006000) # ifdef USE_THREADS # define aTHXR thr # define aTHXR_ thr, # else # define aTHXR # define aTHXR_ # endif # define dTHXR dTHR #else # define aTHXR aTHX # define aTHXR_ aTHX_ # define dTHXR dTHX #endif #ifndef dTHXoa # define dTHXoa(x) dTHXa(x) #endif #ifdef I_LIMITS # include <limits.h> #endif #ifndef PERL_UCHAR_MIN # define PERL_UCHAR_MIN ((unsigned char)0) #endif #ifndef PERL_UCHAR_MAX # ifdef UCHAR_MAX # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) # else # ifdef MAXUCHAR # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) # else # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) # endif # endif #endif #ifndef PERL_USHORT_MIN # define PERL_USHORT_MIN ((unsigned short)0) #endif #ifndef PERL_USHORT_MAX # ifdef USHORT_MAX # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) # else # ifdef MAXUSHORT # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) # else # ifdef USHRT_MAX # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) # else # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) # endif # endif # endif #endif #ifndef PERL_SHORT_MAX # ifdef SHORT_MAX # define PERL_SHORT_MAX ((short)SHORT_MAX) # else # ifdef MAXSHORT /* Often used in <values.h> */ # define PERL_SHORT_MAX ((short)MAXSHORT) # else # ifdef SHRT_MAX # define PERL_SHORT_MAX ((short)SHRT_MAX) # else # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) # endif # endif # endif #endif #ifndef PERL_SHORT_MIN # ifdef SHORT_MIN # define PERL_SHORT_MIN ((short)SHORT_MIN) # else # ifdef MINSHORT # define PERL_SHORT_MIN ((short)MINSHORT) # else # ifdef SHRT_MIN # define PERL_SHORT_MIN ((short)SHRT_MIN) # else # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif #ifndef PERL_UINT_MAX # ifdef UINT_MAX # define PERL_UINT_MAX ((unsigned int)UINT_MAX) # else # ifdef MAXUINT # define PERL_UINT_MAX ((unsigned int)MAXUINT) # else # define PERL_UINT_MAX (~(unsigned int)0) # endif # endif #endif #ifndef PERL_UINT_MIN # define PERL_UINT_MIN ((unsigned int)0) #endif #ifndef PERL_INT_MAX # ifdef INT_MAX # define PERL_INT_MAX ((int)INT_MAX) # else # ifdef MAXINT /* Often used in <values.h> */ # define PERL_INT_MAX ((int)MAXINT) # else # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) # endif # endif #endif #ifndef PERL_INT_MIN # ifdef INT_MIN # define PERL_INT_MIN ((int)INT_MIN) # else # ifdef MININT # define PERL_INT_MIN ((int)MININT) # else # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) # endif # endif #endif #ifndef PERL_ULONG_MAX # ifdef ULONG_MAX # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) # else # ifdef MAXULONG # define PERL_ULONG_MAX ((unsigned long)MAXULONG) # else # define PERL_ULONG_MAX (~(unsigned long)0) # endif # endif #endif #ifndef PERL_ULONG_MIN # define PERL_ULONG_MIN ((unsigned long)0L) #endif #ifndef PERL_LONG_MAX # ifdef LONG_MAX # define PERL_LONG_MAX ((long)LONG_MAX) # else # ifdef MAXLONG # define PERL_LONG_MAX ((long)MAXLONG) # else # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) # endif # endif #endif #ifndef PERL_LONG_MIN # ifdef LONG_MIN # define PERL_LONG_MIN ((long)LONG_MIN) # else # ifdef MINLONG # define PERL_LONG_MIN ((long)MINLONG) # else # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) # endif # endif #endif #if defined(HAS_QUAD) && (defined(convex) || defined(uts)) # ifndef PERL_UQUAD_MAX # ifdef ULONGLONG_MAX # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) # else # ifdef MAXULONGLONG # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) # else # define PERL_UQUAD_MAX (~(unsigned long long)0) # endif # endif # endif # ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN ((unsigned long long)0L) # endif # ifndef PERL_QUAD_MAX # ifdef LONGLONG_MAX # define PERL_QUAD_MAX ((long long)LONGLONG_MAX) # else # ifdef MAXLONGLONG # define PERL_QUAD_MAX ((long long)MAXLONGLONG) # else # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) # endif # endif # endif # ifndef PERL_QUAD_MIN # ifdef LONGLONG_MIN # define PERL_QUAD_MIN ((long long)LONGLONG_MIN) # else # ifdef MINLONGLONG # define PERL_QUAD_MIN ((long long)MINLONGLONG) # else # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif /* This is based on code from 5.003 perl.h */ #ifdef HAS_QUAD # ifdef cray #ifndef IVTYPE # define IVTYPE int #endif #ifndef IV_MIN # define IV_MIN PERL_INT_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_INT_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UINT_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UINT_MAX #endif # ifdef INTSIZE #ifndef IVSIZE # define IVSIZE INTSIZE #endif # endif # else # if defined(convex) || defined(uts) #ifndef IVTYPE # define IVTYPE long long #endif #ifndef IV_MIN # define IV_MIN PERL_QUAD_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_QUAD_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UQUAD_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UQUAD_MAX #endif # ifdef LONGLONGSIZE #ifndef IVSIZE # define IVSIZE LONGLONGSIZE #endif # endif # else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif # ifdef LONGSIZE #ifndef IVSIZE # define IVSIZE LONGSIZE #endif # endif # endif # endif #ifndef IVSIZE # define IVSIZE 8 #endif #ifndef LONGSIZE # define LONGSIZE 8 #endif #ifndef PERL_QUAD_MIN # define PERL_QUAD_MIN IV_MIN #endif #ifndef PERL_QUAD_MAX # define PERL_QUAD_MAX IV_MAX #endif #ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN UV_MIN #endif #ifndef PERL_UQUAD_MAX # define PERL_UQUAD_MAX UV_MAX #endif #else #ifndef IVTYPE # define IVTYPE long #endif #ifndef LONGSIZE # define LONGSIZE 4 #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef UVTYPE # define UVTYPE unsigned IVTYPE #endif #ifndef UVSIZE # define UVSIZE IVSIZE #endif #ifndef sv_setuv # define sv_setuv(sv, uv) \ STMT_START { \ UV TeMpUv = uv; \ if (TeMpUv <= IV_MAX) \ sv_setiv(sv, TeMpUv); \ else \ sv_setnv(sv, (double)TeMpUv); \ } STMT_END #endif #ifndef newSVuv # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) #endif #ifndef sv_2uv # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) #endif #ifndef SvUVX # define SvUVX(sv) ((UV)SvIVX(sv)) #endif #ifndef SvUVXx # define SvUVXx(sv) SvUVX(sv) #endif #ifndef SvUV # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) #endif #ifndef SvUVx # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) #endif /* Hint: sv_uv * Always use the SvUVx() macro instead of sv_uv(). */ #ifndef sv_uv # define sv_uv(sv) SvUVx(sv) #endif #if !defined(SvUOK) && defined(SvIOK_UV) # define SvUOK(sv) SvIOK_UV(sv) #endif #ifndef XST_mUV # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) #endif #ifndef XSRETURN_UV # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END #endif #ifndef PUSHu # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END #endif #ifndef XPUSHu # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END #endif #ifdef HAS_MEMCMP #ifndef memNE # define memNE(s1,s2,l) (memcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) #endif #else #ifndef memNE # define memNE(s1,s2,l) (bcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) #endif #endif #ifndef memEQs # define memEQs(s1, l, s2) \ (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1))) #endif #ifndef memNEs # define memNEs(s1, l, s2) !memEQs(s1, l, s2) #endif #ifndef MoveD # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifndef CopyD # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifdef HAS_MEMSET #ifndef ZeroD # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) #endif #else #ifndef ZeroD # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) #endif #endif #ifndef PoisonWith # define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) #endif #ifndef PoisonNew # define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) #endif #ifndef PoisonFree # define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) #endif #ifndef Poison # define Poison(d,n,t) PoisonFree(d,n,t) #endif #ifndef Newx # define Newx(v,n,t) New(0,v,n,t) #endif #ifndef Newxc # define Newxc(v,n,t,c) Newc(0,v,n,t,c) #endif #ifndef Newxz # define Newxz(v,n,t) Newz(0,v,n,t) #endif #ifndef PERL_MAGIC_qr # define PERL_MAGIC_qr 'r' #endif #ifndef cBOOL # define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0) #endif #ifndef OpHAS_SIBLING # define OpHAS_SIBLING(o) (cBOOL((o)->op_sibling)) #endif #ifndef OpSIBLING # define OpSIBLING(o) (0 + (o)->op_sibling) #endif #ifndef OpMORESIB_set # define OpMORESIB_set(o, sib) ((o)->op_sibling = (sib)) #endif #ifndef OpLASTSIB_set # define OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL) #endif #ifndef OpMAYBESIB_set # define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib)) #endif #ifndef SvRX #if defined(NEED_SvRX) static void * DPPP_(my_SvRX)(pTHX_ SV *rv); static #else extern void * DPPP_(my_SvRX)(pTHX_ SV *rv); #endif #ifdef SvRX # undef SvRX #endif #define SvRX(a) DPPP_(my_SvRX)(aTHX_ a) #if defined(NEED_SvRX) || defined(NEED_SvRX_GLOBAL) void * DPPP_(my_SvRX)(pTHX_ SV *rv) { if (SvROK(rv)) { SV *sv = SvRV(rv); if (SvMAGICAL(sv)) { MAGIC *mg = mg_find(sv, PERL_MAGIC_qr); if (mg && mg->mg_obj) { return mg->mg_obj; } } } return 0; } #endif #endif #ifndef SvRXOK # define SvRXOK(sv) (!!SvRX(sv)) #endif #ifndef PERL_UNUSED_DECL # ifdef HASATTRIBUTE # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) # define PERL_UNUSED_DECL # else # define PERL_UNUSED_DECL __attribute__((unused)) # endif # else # define PERL_UNUSED_DECL # endif #endif #ifndef PERL_UNUSED_ARG # if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ # include <note.h> # define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) # else # define PERL_UNUSED_ARG(x) ((void)x) # endif #endif #ifndef PERL_UNUSED_VAR # define PERL_UNUSED_VAR(x) ((void)x) #endif #ifndef PERL_UNUSED_CONTEXT # ifdef USE_ITHREADS # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) # else # define PERL_UNUSED_CONTEXT # endif #endif #ifndef PERL_UNUSED_RESULT # if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT) # define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END # else # define PERL_UNUSED_RESULT(v) ((void)(v)) # endif #endif #ifndef NOOP # define NOOP /*EMPTY*/(void)0 #endif #ifndef dNOOP # define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL #endif #ifndef NVTYPE # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) # define NVTYPE long double # else # define NVTYPE double # endif typedef NVTYPE NV; #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif #endif #ifndef PTR2ul # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif #ifndef PTR2nat # define PTR2nat(p) (PTRV)(p) #endif #ifndef NUM2PTR # define NUM2PTR(any,d) (any)PTR2nat(d) #endif #ifndef PTR2IV # define PTR2IV(p) INT2PTR(IV,p) #endif #ifndef PTR2UV # define PTR2UV(p) INT2PTR(UV,p) #endif #ifndef PTR2NV # define PTR2NV(p) NUM2PTR(NV,p) #endif #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C #ifdef __cplusplus # define START_EXTERN_C extern "C" { # define END_EXTERN_C } # define EXTERN_C extern "C" #else # define START_EXTERN_C # define END_EXTERN_C # define EXTERN_C extern #endif #if defined(PERL_GCC_PEDANTIC) # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN # define PERL_GCC_BRACE_GROUPS_FORBIDDEN # endif #endif #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) # ifndef PERL_USE_GCC_BRACE_GROUPS # define PERL_USE_GCC_BRACE_GROUPS # endif #endif #undef STMT_START #undef STMT_END #ifdef PERL_USE_GCC_BRACE_GROUPS # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ # define STMT_END ) #else # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) # define STMT_START if (1) # define STMT_END else (void)0 # else # define STMT_START do # define STMT_END while (0) # endif #endif #ifndef boolSV # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #endif /* DEFSV appears first in 5.004_56 */ #ifndef DEFSV # define DEFSV GvSV(PL_defgv) #endif #ifndef SAVE_DEFSV # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif #ifndef DEFSV_set # define DEFSV_set(sv) (DEFSV = (sv)) #endif /* Older perls (<=5.003) lack AvFILLp */ #ifndef AvFILLp # define AvFILLp AvFILL #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif /* Hint: gv_stashpvn * This function's backport doesn't support the length parameter, but * rather ignores it. Portability can only be ensured if the length * parameter is used for speed reasons, but the length can always be * correctly computed from the string argument. */ #ifndef gv_stashpvn # define gv_stashpvn(str,len,create) gv_stashpv(str,create) #endif /* Replace: 1 */ #ifndef get_cv # define get_cv perl_get_cv #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef get_av # define get_av perl_get_av #endif #ifndef get_hv # define get_hv perl_get_hv #endif /* Replace: 0 */ #ifndef dUNDERBAR # define dUNDERBAR dNOOP #endif #ifndef UNDERBAR # define UNDERBAR DEFSV #endif #ifndef dAX # define dAX I32 ax = MARK - PL_stack_base + 1 #endif #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif #ifndef dXSTARG # define dXSTARG SV * targ = sv_newmortal() #endif #ifndef dAXMARK # define dAXMARK I32 ax = POPMARK; \ register SV ** const mark = PL_stack_base + ax++ #endif #ifndef XSprePUSH # define XSprePUSH (sp = PL_stack_base + ax - 1) #endif #if (PERL_BCDVERSION < 0x5005000) # undef XSRETURN # define XSRETURN(off) \ STMT_START { \ PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ return; \ } STMT_END #endif #ifndef XSPROTO # define XSPROTO(name) void name(pTHX_ CV* cv) #endif #ifndef SVfARG # define SVfARG(p) ((void*)(p)) #endif #ifndef PERL_ABS # define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) #endif #ifndef dVAR # define dVAR dNOOP #endif #ifndef SVf # define SVf "_" #endif #ifndef UTF8_MAXBYTES # define UTF8_MAXBYTES UTF8_MAXLEN #endif #ifndef CPERLscope # define CPERLscope(x) x #endif #ifndef PERL_HASH # define PERL_HASH(hash,str,len) \ STMT_START { \ const char *s_PeRlHaSh = str; \ I32 i_PeRlHaSh = len; \ U32 hash_PeRlHaSh = 0; \ while (i_PeRlHaSh--) \ hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ (hash) = hash_PeRlHaSh; \ } STMT_END #endif #ifndef PERLIO_FUNCS_DECL # ifdef PERLIO_FUNCS_CONST # define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) # else # define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (funcs) # endif #endif /* provide these typedefs for older perls */ #if (PERL_BCDVERSION < 0x5009003) # ifdef ARGSproto typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto); # else typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX); # endif typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); #endif #ifndef isPSXSPC # define isPSXSPC(c) (isSPACE(c) || (c) == '\v') #endif #ifndef isBLANK # define isBLANK(c) ((c) == ' ' || (c) == '\t') #endif #ifdef EBCDIC #ifndef isALNUMC # define isALNUMC(c) isalnum(c) #endif #ifndef isASCII # define isASCII(c) isascii(c) #endif #ifndef isCNTRL # define isCNTRL(c) iscntrl(c) #endif #ifndef isGRAPH # define isGRAPH(c) isgraph(c) #endif #ifndef isPRINT # define isPRINT(c) isprint(c) #endif #ifndef isPUNCT # define isPUNCT(c) ispunct(c) #endif #ifndef isXDIGIT # define isXDIGIT(c) isxdigit(c) #endif #else # if (PERL_BCDVERSION < 0x5010000) /* Hint: isPRINT * The implementation in older perl versions includes all of the * isSPACE() characters, which is wrong. The version provided by * Devel::PPPort always overrides a present buggy version. */ # undef isPRINT # endif #ifdef HAS_QUAD # ifdef U64TYPE # define WIDEST_UTYPE U64TYPE # else # define WIDEST_UTYPE Quad_t # endif #else # define WIDEST_UTYPE U32 #endif #ifndef isALNUMC # define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) #endif #ifndef isASCII # define isASCII(c) ((WIDEST_UTYPE) (c) <= 127) #endif #ifndef isCNTRL # define isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127) #endif #ifndef isGRAPH # define isGRAPH(c) (isALNUM(c) || isPUNCT(c)) #endif #ifndef isPRINT # define isPRINT(c) (((c) >= 32 && (c) < 127)) #endif #ifndef isPUNCT # define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126)) #endif #ifndef isXDIGIT # define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) #endif #endif /* Until we figure out how to support this in older perls... */ #if (PERL_BCDVERSION >= 0x5008000) #ifndef HeUTF8 # define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \ SvUTF8(HeKEY_sv(he)) : \ (U32)HeKUTF8(he)) #endif #endif #ifndef C_ARRAY_LENGTH # define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0])) #endif #ifndef C_ARRAY_END # define C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a)) #endif #ifndef PERL_SIGNALS_UNSAFE_FLAG #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 #if (PERL_BCDVERSION < 0x5008000) # define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG #else # define D_PPP_PERL_SIGNALS_INIT 0 #endif #if defined(NEED_PL_signals) static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #elif defined(NEED_PL_signals_GLOBAL) U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #else extern U32 DPPP_(my_PL_signals); #endif #define PL_signals DPPP_(my_PL_signals) #endif /* Hint: PL_ppaddr * Calling an op via PL_ppaddr requires passing a context argument * for threaded builds. Since the context argument is different for * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will * automatically be defined as the correct argument. */ #if (PERL_BCDVERSION <= 0x5005005) /* Replace: 1 */ # define PL_ppaddr ppaddr # define PL_no_modify no_modify /* Replace: 0 */ #endif #if (PERL_BCDVERSION <= 0x5004005) /* Replace: 1 */ # define PL_DBsignal DBsignal # define PL_DBsingle DBsingle # define PL_DBsub DBsub # define PL_DBtrace DBtrace # define PL_Sv Sv # define PL_bufend bufend # define PL_bufptr bufptr # define PL_compiling compiling # define PL_copline copline # define PL_curcop curcop # define PL_curstash curstash # define PL_debstash debstash # define PL_defgv defgv # define PL_diehook diehook # define PL_dirty dirty # define PL_dowarn dowarn # define PL_errgv errgv # define PL_error_count error_count # define PL_expect expect # define PL_hexdigit hexdigit # define PL_hints hints # define PL_in_my in_my # define PL_laststatval laststatval # define PL_lex_state lex_state # define PL_lex_stuff lex_stuff # define PL_linestr linestr # define PL_na na # define PL_perl_destruct_level perl_destruct_level # define PL_perldb perldb # define PL_rsfp_filters rsfp_filters # define PL_rsfp rsfp # define PL_stack_base stack_base # define PL_stack_sp stack_sp # define PL_statcache statcache # define PL_stdingv stdingv # define PL_sv_arenaroot sv_arenaroot # define PL_sv_no sv_no # define PL_sv_undef sv_undef # define PL_sv_yes sv_yes # define PL_tainted tainted # define PL_tainting tainting # define PL_tokenbuf tokenbuf /* Replace: 0 */ #endif /* Warning: PL_parser * For perl versions earlier than 5.9.5, this is an always * non-NULL dummy. Also, it cannot be dereferenced. Don't * use it if you can avoid is and unless you absolutely know * what you're doing. * If you always check that PL_parser is non-NULL, you can * define DPPP_PL_parser_NO_DUMMY to avoid the creation of * a dummy parser structure. */ #if (PERL_BCDVERSION >= 0x5009005) # ifdef DPPP_PL_parser_NO_DUMMY # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (croak("panic: PL_parser == NULL in %s:%d", \ __FILE__, __LINE__), (yy_parser *) NULL))->var) # else # ifdef DPPP_PL_parser_NO_DUMMY_WARNING # define D_PPP_parser_dummy_warning(var) # else # define D_PPP_parser_dummy_warning(var) \ warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__), # endif # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var) #if defined(NEED_PL_parser) static yy_parser DPPP_(dummy_PL_parser); #elif defined(NEED_PL_parser_GLOBAL) yy_parser DPPP_(dummy_PL_parser); #else extern yy_parser DPPP_(dummy_PL_parser); #endif # endif /* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */ /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf * Do not use this variable unless you know exactly what you're * doing. It is internal to the perl parser and may change or even * be removed in the future. As of perl 5.9.5, you have to check * for (PL_parser != NULL) for this variable to have any effect. * An always non-NULL PL_parser dummy is provided for earlier * perl versions. * If PL_parser is NULL when you try to access this variable, a * dummy is being accessed instead and a warning is issued unless * you define DPPP_PL_parser_NO_DUMMY_WARNING. * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access * this variable will croak with a panic message. */ # define PL_expect D_PPP_my_PL_parser_var(expect) # define PL_copline D_PPP_my_PL_parser_var(copline) # define PL_rsfp D_PPP_my_PL_parser_var(rsfp) # define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters) # define PL_linestr D_PPP_my_PL_parser_var(linestr) # define PL_bufptr D_PPP_my_PL_parser_var(bufptr) # define PL_bufend D_PPP_my_PL_parser_var(bufend) # define PL_lex_state D_PPP_my_PL_parser_var(lex_state) # define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff) # define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf) # define PL_in_my D_PPP_my_PL_parser_var(in_my) # define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash) # define PL_error_count D_PPP_my_PL_parser_var(error_count) #else /* ensure that PL_parser != NULL and cannot be dereferenced */ # define PL_parser ((void *) 1) #endif #ifndef mPUSHs # define mPUSHs(s) PUSHs(sv_2mortal(s)) #endif #ifndef PUSHmortal # define PUSHmortal PUSHs(sv_newmortal()) #endif #ifndef mPUSHp # define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) #endif #ifndef mPUSHn # define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) #endif #ifndef mPUSHi # define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) #endif #ifndef mPUSHu # define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) #endif #ifndef mXPUSHs # define mXPUSHs(s) XPUSHs(sv_2mortal(s)) #endif #ifndef XPUSHmortal # define XPUSHmortal XPUSHs(sv_newmortal()) #endif #ifndef mXPUSHp # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END #endif #ifndef mXPUSHn # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END #endif #ifndef mXPUSHi # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END #endif #ifndef mXPUSHu # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END #endif /* Replace: 1 */ #ifndef call_sv # define call_sv perl_call_sv #endif #ifndef call_pv # define call_pv perl_call_pv #endif #ifndef call_argv # define call_argv perl_call_argv #endif #ifndef call_method # define call_method perl_call_method #endif #ifndef eval_sv # define eval_sv perl_eval_sv #endif /* Replace: 0 */ #ifndef PERL_LOADMOD_DENY # define PERL_LOADMOD_DENY 0x1 #endif #ifndef PERL_LOADMOD_NOIMPORT # define PERL_LOADMOD_NOIMPORT 0x2 #endif #ifndef PERL_LOADMOD_IMPORT_OPS # define PERL_LOADMOD_IMPORT_OPS 0x4 #endif #ifndef G_METHOD # define G_METHOD 64 # ifdef call_sv # undef call_sv # endif # if (PERL_BCDVERSION < 0x5006000) # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) # else # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) # endif #endif /* Replace perl_eval_pv with eval_pv */ #ifndef eval_pv #if defined(NEED_eval_pv) static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); static #else extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); #endif #ifdef eval_pv # undef eval_pv #endif #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) #define Perl_eval_pv DPPP_(my_eval_pv) #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error) { dSP; SV* sv = newSVpv(p, 0); PUSHMARK(sp); eval_sv(sv, G_SCALAR); SvREFCNT_dec(sv); SPAGAIN; sv = POPs; PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) croak(SvPVx(GvSV(errgv), na)); return sv; } #endif #endif #ifndef vload_module #if defined(NEED_vload_module) static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); static #else extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); #endif #ifdef vload_module # undef vload_module #endif #define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) #define Perl_vload_module DPPP_(my_vload_module) #if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) { dTHR; dVAR; OP *veop, *imop; OP * const modname = newSVOP(OP_CONST, 0, name); /* 5.005 has a somewhat hacky force_normal that doesn't croak on SvREADONLY() if PL_compling is true. Current perls take care in ck_require() to correctly turn off SvREADONLY before calling force_normal_flags(). This seems a better fix than fudging PL_compling */ SvREADONLY_off(((SVOP*)modname)->op_sv); modname->op_private |= OPpCONST_BARE; if (ver) { veop = newSVOP(OP_CONST, 0, ver); } else veop = NULL; if (flags & PERL_LOADMOD_NOIMPORT) { imop = sawparens(newNULLLIST()); } else if (flags & PERL_LOADMOD_IMPORT_OPS) { imop = va_arg(*args, OP*); } else { SV *sv; imop = NULL; sv = va_arg(*args, SV*); while (sv) { imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); sv = va_arg(*args, SV*); } } { const line_t ocopline = PL_copline; COP * const ocurcop = PL_curcop; const int oexpect = PL_expect; #if (PERL_BCDVERSION >= 0x5004000) utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), veop, modname, imop); #elif (PERL_BCDVERSION > 0x5003000) utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), veop, modname, imop); #else utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), modname, imop); #endif PL_expect = oexpect; PL_copline = ocopline; PL_curcop = ocurcop; } } #endif #endif #ifndef load_module #if defined(NEED_load_module) static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); static #else extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); #endif #ifdef load_module # undef load_module #endif #define load_module DPPP_(my_load_module) #define Perl_load_module DPPP_(my_load_module) #if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) { va_list args; va_start(args, ver); vload_module(flags, name, ver, &args); va_end(args); } #endif #endif #ifndef newRV_inc # define newRV_inc(sv) newRV(sv) /* Replace */ #endif #ifndef newRV_noinc #if defined(NEED_newRV_noinc) static SV * DPPP_(my_newRV_noinc)(SV *sv); static #else extern SV * DPPP_(my_newRV_noinc)(SV *sv); #endif #ifdef newRV_noinc # undef newRV_noinc #endif #define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) #define Perl_newRV_noinc DPPP_(my_newRV_noinc) #if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) SV * DPPP_(my_newRV_noinc)(SV *sv) { SV *rv = (SV *)newRV(sv); SvREFCNT_dec(sv); return rv; } #endif #endif /* Hint: newCONSTSUB * Returns a CV* as of perl-5.7.1. This return value is not supported * by Devel::PPPort. */ /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ #if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) #if defined(NEED_newCONSTSUB) static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); static #else extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); #endif #ifdef newCONSTSUB # undef newCONSTSUB #endif #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */ /* (There's no PL_parser in perl < 5.005, so this is completely safe) */ #define D_PPP_PL_copline PL_copline void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) { U32 oldhints = PL_hints; HV *old_cop_stash = PL_curcop->cop_stash; HV *old_curstash = PL_curstash; line_t oldline = PL_curcop->cop_line; PL_curcop->cop_line = D_PPP_PL_copline; PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) PL_curstash = PL_curcop->cop_stash = stash; newSUB( #if (PERL_BCDVERSION < 0x5003022) start_subparse(), #elif (PERL_BCDVERSION == 0x5003022) start_subparse(0), #else /* 5.003_23 onwards */ start_subparse(FALSE, 0), #endif newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); PL_hints = oldhints; PL_curcop->cop_stash = old_cop_stash; PL_curstash = old_curstash; PL_curcop->cop_line = oldline; } #endif #endif /* * Boilerplate macros for initializing and accessing interpreter-local * data from C. All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe. See ext/re/re.xs * for an example of the use of these macros. * * Code that uses these macros is responsible for the following: * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" * 2. Declare a typedef named my_cxt_t that is a structure that contains * all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. * 4. Use the MY_CXT_INIT macro such that it is called exactly once * (typically put in the BOOT: section). * 5. Use the members of the my_cxt_t structure everywhere as * MY_CXT.member. * 6. Use the dMY_CXT macro (a declaration) in all the functions that * access MY_CXT. */ #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) #ifndef START_MY_CXT /* This must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope). The non-threads * case below uses it to declare the data as static. */ #define START_MY_CXT #if (PERL_BCDVERSION < 0x5004068) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ #define dMY_CXT \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ dMY_CXT_SV; \ /* newSV() allocates one more than needed */ \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Zero(my_cxtp, 1, my_cxt_t); \ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ #define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ #define pMY_CXT my_cxt_t *my_cxtp #define pMY_CXT_ pMY_CXT, #define _pMY_CXT ,pMY_CXT #define aMY_CXT my_cxtp #define aMY_CXT_ aMY_CXT, #define _aMY_CXT ,aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE /* Clones the per-interpreter data. */ #define MY_CXT_CLONE \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) #endif #else /* single interpreter */ #ifndef START_MY_CXT #define START_MY_CXT static my_cxt_t my_cxt; #define dMY_CXT_SV dNOOP #define dMY_CXT dNOOP #define MY_CXT_INIT NOOP #define MY_CXT my_cxt #define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT #define aMY_CXT_ #define _aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE #define MY_CXT_CLONE NOOP #endif #endif #ifndef IVdf # if IVSIZE == LONGSIZE # define IVdf "ld" # define UVuf "lu" # define UVof "lo" # define UVxf "lx" # define UVXf "lX" # elif IVSIZE == INTSIZE # define IVdf "d" # define UVuf "u" # define UVof "o" # define UVxf "x" # define UVXf "X" # else # error "cannot define IV/UV formats" # endif #endif #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl # else # define NVef "e" # define NVff "f" # define NVgf "g" # endif #endif #ifndef SvREFCNT_inc # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (SvREFCNT(_sv))++; \ _sv; \ }) # else # define SvREFCNT_inc(sv) \ ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) # endif #endif #ifndef SvREFCNT_inc_simple # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_simple(sv) \ ({ \ if (sv) \ (SvREFCNT(sv))++; \ (SV *)(sv); \ }) # else # define SvREFCNT_inc_simple(sv) \ ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) # endif #endif #ifndef SvREFCNT_inc_NN # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_NN(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ SvREFCNT(_sv)++; \ _sv; \ }) # else # define SvREFCNT_inc_NN(sv) \ (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) # endif #endif #ifndef SvREFCNT_inc_void # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_void(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (void)(SvREFCNT(_sv)++); \ }) # else # define SvREFCNT_inc_void(sv) \ (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) # endif #endif #ifndef SvREFCNT_inc_simple_void # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END #endif #ifndef SvREFCNT_inc_simple_NN # define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) #endif #ifndef SvREFCNT_inc_void_NN # define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef SvREFCNT_inc_simple_void_NN # define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef newSV_type #if defined(NEED_newSV_type) static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); static #else extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); #endif #ifdef newSV_type # undef newSV_type #endif #define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a) #define Perl_newSV_type DPPP_(my_newSV_type) #if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL) SV* DPPP_(my_newSV_type)(pTHX_ svtype const t) { SV* const sv = newSV(0); sv_upgrade(sv, t); return sv; } #endif #endif #if (PERL_BCDVERSION < 0x5006000) # define D_PPP_CONSTPV_ARG(x) ((char *) (x)) #else # define D_PPP_CONSTPV_ARG(x) (x) #endif #ifndef newSVpvn # define newSVpvn(data,len) ((data) \ ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ : newSV(0)) #endif #ifndef newSVpvn_utf8 # define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) #endif #ifndef SVf_UTF8 # define SVf_UTF8 0 #endif #ifndef newSVpvn_flags #if defined(NEED_newSVpvn_flags) static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); static #else extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); #endif #ifdef newSVpvn_flags # undef newSVpvn_flags #endif #define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c) #define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags) #if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL) SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags) { SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len); SvFLAGS(sv) |= (flags & SVf_UTF8); return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv; } #endif #endif /* Backwards compatibility stuff... :-( */ #if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) # define NEED_sv_2pv_flags #endif #if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) # define NEED_sv_2pv_flags_GLOBAL #endif /* Hint: sv_2pv_nolen * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). */ #ifndef sv_2pv_nolen # define sv_2pv_nolen(sv) SvPV_nolen(sv) #endif #ifdef SvPVbyte /* Hint: SvPVbyte * Does not work in perl-5.6.1, ppport.h implements a version * borrowed from perl-5.7.3. */ #if (PERL_BCDVERSION < 0x5007000) #if defined(NEED_sv_2pvbyte) static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); static #else extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); #endif #ifdef sv_2pvbyte # undef sv_2pvbyte #endif #define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) #define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) { sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } #endif /* Hint: sv_2pvbyte * Use the SvPVbyte() macro instead of sv_2pvbyte(). */ #undef SvPVbyte #define SvPVbyte(sv, lp) \ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) #endif #else # define SvPVbyte SvPV # define sv_2pvbyte sv_2pv #endif #ifndef sv_2pvbyte_nolen # define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) #endif /* Hint: sv_pvn * Always use the SvPV() macro instead of sv_pvn(). */ /* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ /* If these are undefined, they're not handled by the core anyway */ #ifndef SV_IMMEDIATE_UNREF # define SV_IMMEDIATE_UNREF 0 #endif #ifndef SV_GMAGIC # define SV_GMAGIC 0 #endif #ifndef SV_COW_DROP_PV # define SV_COW_DROP_PV 0 #endif #ifndef SV_UTF8_NO_ENCODING # define SV_UTF8_NO_ENCODING 0 #endif #ifndef SV_NOSTEAL # define SV_NOSTEAL 0 #endif #ifndef SV_CONST_RETURN # define SV_CONST_RETURN 0 #endif #ifndef SV_MUTABLE_RETURN # define SV_MUTABLE_RETURN 0 #endif #ifndef SV_SMAGIC # define SV_SMAGIC 0 #endif #ifndef SV_HAS_TRAILING_NUL # define SV_HAS_TRAILING_NUL 0 #endif #ifndef SV_COW_SHARED_HASH_KEYS # define SV_COW_SHARED_HASH_KEYS 0 #endif #if (PERL_BCDVERSION < 0x5007002) #if defined(NEED_sv_2pv_flags) static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_2pv_flags # undef sv_2pv_flags #endif #define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) #define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) #if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_2pv(sv, lp ? lp : &n_a); } #endif #if defined(NEED_sv_pvn_force_flags) static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_pvn_force_flags # undef sv_pvn_force_flags #endif #define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) #define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) #if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_pvn_force(sv, lp ? lp : &n_a); } #endif #endif #if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) ) # define DPPP_SVPV_NOLEN_LP_ARG &PL_na #else # define DPPP_SVPV_NOLEN_LP_ARG 0 #endif #ifndef SvPV_const # define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_mutable # define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_flags # define SvPV_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) #endif #ifndef SvPV_flags_const # define SvPV_flags_const(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_const_nolen # define SvPV_flags_const_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : \ (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_mutable # define SvPV_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_force # define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nolen # define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) #endif #ifndef SvPV_force_mutable # define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nomg # define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) #endif #ifndef SvPV_force_nomg_nolen # define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) #endif #ifndef SvPV_force_flags # define SvPV_force_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) #endif #ifndef SvPV_force_flags_nolen # define SvPV_force_flags_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags)) #endif #ifndef SvPV_force_flags_mutable # define SvPV_force_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_nolen # define SvPV_nolen(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC)) #endif #ifndef SvPV_nolen_const # define SvPV_nolen_const(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN)) #endif #ifndef SvPV_nomg # define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) #endif #ifndef SvPV_nomg_const # define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) #endif #ifndef SvPV_nomg_const_nolen # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) #endif #ifndef SvPV_nomg_nolen # define SvPV_nomg_nolen(sv) ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0)) #endif #ifndef SvPV_renew # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ SvPV_set((sv), (char *) saferealloc( \ (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \ } STMT_END #endif #ifndef SvMAGIC_set # define SvMAGIC_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5009003) #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) (0 + SvPVX(sv)) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END #endif #else #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ ((sv)->sv_u.svu_rv = (val)); } STMT_END #endif #endif #ifndef SvSTASH_set # define SvSTASH_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5004000) #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END #endif #else #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) #if defined(NEED_vnewSVpvf) static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); static #else extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); #endif #ifdef vnewSVpvf # undef vnewSVpvf #endif #define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) #define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) #if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) { register SV *sv = newSV(0); sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); return sv; } #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ #ifndef sv_catpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext # else # define sv_catpvf_mg Perl_sv_catpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) # define sv_vcatpvf_mg(sv, pat, args) \ STMT_START { \ sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ #ifndef sv_setpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext # else # define sv_setpvf_mg Perl_sv_setpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) # define sv_vsetpvf_mg(sv, pat, args) \ STMT_START { \ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif /* Hint: newSVpvn_share * The SVs created by this function only mimic the behaviour of * shared PVs without really being shared. Only use if you know * what you're doing. */ #ifndef newSVpvn_share #if defined(NEED_newSVpvn_share) static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); static #else extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); #endif #ifdef newSVpvn_share # undef newSVpvn_share #endif #define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) #define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) #if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) { SV *sv; if (len < 0) len = -len; if (!hash) PERL_HASH(hash, (char*) src, len); sv = newSVpvn((char *) src, len); sv_upgrade(sv, SVt_PVIV); SvIVX(sv) = hash; SvREADONLY_on(sv); SvPOK_on(sv); return sv; } #endif #endif #ifndef SvSHARED_HASH # define SvSHARED_HASH(sv) (0 + SvUVX(sv)) #endif #ifndef HvNAME_get # define HvNAME_get(hv) HvNAME(hv) #endif #ifndef HvNAMELEN_get # define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0) #endif #ifndef gv_fetchpvn_flags #if defined(NEED_gv_fetchpvn_flags) static GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types); static #else extern GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types); #endif #ifdef gv_fetchpvn_flags # undef gv_fetchpvn_flags #endif #define gv_fetchpvn_flags(a,b,c,d) DPPP_(my_gv_fetchpvn_flags)(aTHX_ a,b,c,d) #define Perl_gv_fetchpvn_flags DPPP_(my_gv_fetchpvn_flags) #if defined(NEED_gv_fetchpvn_flags) || defined(NEED_gv_fetchpvn_flags_GLOBAL) GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types) { char *namepv = savepvn(name, len); GV* stash = gv_fetchpv(namepv, TRUE, SVt_PVHV); Safefree(namepv); return stash; } #endif #endif #ifndef GvSVn # define GvSVn(gv) GvSV(gv) #endif #ifndef isGV_with_GP # define isGV_with_GP(gv) isGV(gv) #endif #ifndef gv_fetchsv # define gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt) #endif #ifndef get_cvn_flags # define get_cvn_flags(name, namelen, flags) get_cv(name, flags) #endif #ifndef gv_init_pvn # define gv_init_pvn(gv, stash, ptr, len, flags) gv_init(gv, stash, ptr, len, flags & GV_ADDMULTI ? TRUE : FALSE) #endif #ifndef WARN_ALL # define WARN_ALL 0 #endif #ifndef WARN_CLOSURE # define WARN_CLOSURE 1 #endif #ifndef WARN_DEPRECATED # define WARN_DEPRECATED 2 #endif #ifndef WARN_EXITING # define WARN_EXITING 3 #endif #ifndef WARN_GLOB # define WARN_GLOB 4 #endif #ifndef WARN_IO # define WARN_IO 5 #endif #ifndef WARN_CLOSED # define WARN_CLOSED 6 #endif #ifndef WARN_EXEC # define WARN_EXEC 7 #endif #ifndef WARN_LAYER # define WARN_LAYER 8 #endif #ifndef WARN_NEWLINE # define WARN_NEWLINE 9 #endif #ifndef WARN_PIPE # define WARN_PIPE 10 #endif #ifndef WARN_UNOPENED # define WARN_UNOPENED 11 #endif #ifndef WARN_MISC # define WARN_MISC 12 #endif #ifndef WARN_NUMERIC # define WARN_NUMERIC 13 #endif #ifndef WARN_ONCE # define WARN_ONCE 14 #endif #ifndef WARN_OVERFLOW # define WARN_OVERFLOW 15 #endif #ifndef WARN_PACK # define WARN_PACK 16 #endif #ifndef WARN_PORTABLE # define WARN_PORTABLE 17 #endif #ifndef WARN_RECURSION # define WARN_RECURSION 18 #endif #ifndef WARN_REDEFINE # define WARN_REDEFINE 19 #endif #ifndef WARN_REGEXP # define WARN_REGEXP 20 #endif #ifndef WARN_SEVERE # define WARN_SEVERE 21 #endif #ifndef WARN_DEBUGGING # define WARN_DEBUGGING 22 #endif #ifndef WARN_INPLACE # define WARN_INPLACE 23 #endif #ifndef WARN_INTERNAL # define WARN_INTERNAL 24 #endif #ifndef WARN_MALLOC # define WARN_MALLOC 25 #endif #ifndef WARN_SIGNAL # define WARN_SIGNAL 26 #endif #ifndef WARN_SUBSTR # define WARN_SUBSTR 27 #endif #ifndef WARN_SYNTAX # define WARN_SYNTAX 28 #endif #ifndef WARN_AMBIGUOUS # define WARN_AMBIGUOUS 29 #endif #ifndef WARN_BAREWORD # define WARN_BAREWORD 30 #endif #ifndef WARN_DIGIT # define WARN_DIGIT 31 #endif #ifndef WARN_PARENTHESIS # define WARN_PARENTHESIS 32 #endif #ifndef WARN_PRECEDENCE # define WARN_PRECEDENCE 33 #endif #ifndef WARN_PRINTF # define WARN_PRINTF 34 #endif #ifndef WARN_PROTOTYPE # define WARN_PROTOTYPE 35 #endif #ifndef WARN_QW # define WARN_QW 36 #endif #ifndef WARN_RESERVED # define WARN_RESERVED 37 #endif #ifndef WARN_SEMICOLON # define WARN_SEMICOLON 38 #endif #ifndef WARN_TAINT # define WARN_TAINT 39 #endif #ifndef WARN_THREADS # define WARN_THREADS 40 #endif #ifndef WARN_UNINITIALIZED # define WARN_UNINITIALIZED 41 #endif #ifndef WARN_UNPACK # define WARN_UNPACK 42 #endif #ifndef WARN_UNTIE # define WARN_UNTIE 43 #endif #ifndef WARN_UTF8 # define WARN_UTF8 44 #endif #ifndef WARN_VOID # define WARN_VOID 45 #endif #ifndef WARN_ASSERTIONS # define WARN_ASSERTIONS 46 #endif #ifndef packWARN # define packWARN(a) (a) #endif #ifndef ckWARN # ifdef G_WARN_ON # define ckWARN(a) (PL_dowarn & G_WARN_ON) # else # define ckWARN(a) PL_dowarn # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) #if defined(NEED_warner) static void DPPP_(my_warner)(U32 err, const char *pat, ...); static #else extern void DPPP_(my_warner)(U32 err, const char *pat, ...); #endif #define Perl_warner DPPP_(my_warner) #if defined(NEED_warner) || defined(NEED_warner_GLOBAL) void DPPP_(my_warner)(U32 err, const char *pat, ...) { SV *sv; va_list args; PERL_UNUSED_ARG(err); va_start(args, pat); sv = vnewSVpvf(pat, &args); va_end(args); sv_2mortal(sv); warn("%s", SvPV_nolen(sv)); } #define warner Perl_warner #define Perl_warner_nocontext Perl_warner #endif #endif /* concatenating with "" ensures that only literal strings are accepted as argument * note that STR_WITH_LEN() can't be used as argument to macros or functions that * under some configurations might be macros */ #ifndef STR_WITH_LEN # define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) #endif #ifndef newSVpvs # define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) #endif #ifndef newSVpvs_flags # define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) #endif #ifndef newSVpvs_share # define newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0) #endif #ifndef sv_catpvs # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) #endif #ifndef sv_setpvs # define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) #endif #ifndef hv_fetchs # define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) #endif #ifndef hv_stores # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) #endif #ifndef gv_fetchpvs # define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) #endif #ifndef gv_stashpvs # define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags) #endif #ifndef get_cvs # define get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags) #endif #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif /* Some random bits for sv_unmagicext. These should probably be pulled in for real and organized at some point */ #ifndef HEf_SVKEY # define HEf_SVKEY -2 #endif #ifndef MUTABLE_PTR #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) # define MUTABLE_PTR(p) ({ void *_p = (p); _p; }) #else # define MUTABLE_PTR(p) ((void *) (p)) #endif #endif #ifndef MUTABLE_SV # define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p)) #endif /* end of random bits */ #ifndef PERL_MAGIC_sv # define PERL_MAGIC_sv '\0' #endif #ifndef PERL_MAGIC_overload # define PERL_MAGIC_overload 'A' #endif #ifndef PERL_MAGIC_overload_elem # define PERL_MAGIC_overload_elem 'a' #endif #ifndef PERL_MAGIC_overload_table # define PERL_MAGIC_overload_table 'c' #endif #ifndef PERL_MAGIC_bm # define PERL_MAGIC_bm 'B' #endif #ifndef PERL_MAGIC_regdata # define PERL_MAGIC_regdata 'D' #endif #ifndef PERL_MAGIC_regdatum # define PERL_MAGIC_regdatum 'd' #endif #ifndef PERL_MAGIC_env # define PERL_MAGIC_env 'E' #endif #ifndef PERL_MAGIC_envelem # define PERL_MAGIC_envelem 'e' #endif #ifndef PERL_MAGIC_fm # define PERL_MAGIC_fm 'f' #endif #ifndef PERL_MAGIC_regex_global # define PERL_MAGIC_regex_global 'g' #endif #ifndef PERL_MAGIC_isa # define PERL_MAGIC_isa 'I' #endif #ifndef PERL_MAGIC_isaelem # define PERL_MAGIC_isaelem 'i' #endif #ifndef PERL_MAGIC_nkeys # define PERL_MAGIC_nkeys 'k' #endif #ifndef PERL_MAGIC_dbfile # define PERL_MAGIC_dbfile 'L' #endif #ifndef PERL_MAGIC_dbline # define PERL_MAGIC_dbline 'l' #endif #ifndef PERL_MAGIC_mutex # define PERL_MAGIC_mutex 'm' #endif #ifndef PERL_MAGIC_shared # define PERL_MAGIC_shared 'N' #endif #ifndef PERL_MAGIC_shared_scalar # define PERL_MAGIC_shared_scalar 'n' #endif #ifndef PERL_MAGIC_collxfrm # define PERL_MAGIC_collxfrm 'o' #endif #ifndef PERL_MAGIC_tied # define PERL_MAGIC_tied 'P' #endif #ifndef PERL_MAGIC_tiedelem # define PERL_MAGIC_tiedelem 'p' #endif #ifndef PERL_MAGIC_tiedscalar # define PERL_MAGIC_tiedscalar 'q' #endif #ifndef PERL_MAGIC_qr # define PERL_MAGIC_qr 'r' #endif #ifndef PERL_MAGIC_sig # define PERL_MAGIC_sig 'S' #endif #ifndef PERL_MAGIC_sigelem # define PERL_MAGIC_sigelem 's' #endif #ifndef PERL_MAGIC_taint # define PERL_MAGIC_taint 't' #endif #ifndef PERL_MAGIC_uvar # define PERL_MAGIC_uvar 'U' #endif #ifndef PERL_MAGIC_uvar_elem # define PERL_MAGIC_uvar_elem 'u' #endif #ifndef PERL_MAGIC_vstring # define PERL_MAGIC_vstring 'V' #endif #ifndef PERL_MAGIC_vec # define PERL_MAGIC_vec 'v' #endif #ifndef PERL_MAGIC_utf8 # define PERL_MAGIC_utf8 'w' #endif #ifndef PERL_MAGIC_substr # define PERL_MAGIC_substr 'x' #endif #ifndef PERL_MAGIC_defelem # define PERL_MAGIC_defelem 'y' #endif #ifndef PERL_MAGIC_glob # define PERL_MAGIC_glob '*' #endif #ifndef PERL_MAGIC_arylen # define PERL_MAGIC_arylen '#' #endif #ifndef PERL_MAGIC_pos # define PERL_MAGIC_pos '.' #endif #ifndef PERL_MAGIC_backref # define PERL_MAGIC_backref '<' #endif #ifndef PERL_MAGIC_ext # define PERL_MAGIC_ext '~' #endif /* That's the best we can do... */ #ifndef sv_catpvn_nomg # define sv_catpvn_nomg sv_catpvn #endif #ifndef sv_catsv_nomg # define sv_catsv_nomg sv_catsv #endif #ifndef sv_setsv_nomg # define sv_setsv_nomg sv_setsv #endif #ifndef sv_pvn_nomg # define sv_pvn_nomg sv_pvn #endif #ifndef SvIV_nomg # define SvIV_nomg SvIV #endif #ifndef SvUV_nomg # define SvUV_nomg SvUV #endif #ifndef sv_catpv_mg # define sv_catpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catpvn_mg # define sv_catpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catsv_mg # define sv_catsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_catsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setiv_mg # define sv_setiv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setiv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setnv_mg # define sv_setnv_mg(sv, num) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setnv(TeMpSv,num); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpv_mg # define sv_setpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpvn_mg # define sv_setpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setsv_mg # define sv_setsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_setsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setuv_mg # define sv_setuv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setuv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_usepvn_mg # define sv_usepvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_usepvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef SvVSTRING_mg # define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) #endif /* Hint: sv_magic_portable * This is a compatibility function that is only available with * Devel::PPPort. It is NOT in the perl core. * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when * it is being passed a name pointer with namlen == 0. In that * case, perl 5.8.0 and later store the pointer, not a copy of it. * The compatibility can be provided back to perl 5.004. With * earlier versions, the code will not compile. */ #if (PERL_BCDVERSION < 0x5004000) /* code that uses sv_magic_portable will not compile */ #elif (PERL_BCDVERSION < 0x5008000) # define sv_magic_portable(sv, obj, how, name, namlen) \ STMT_START { \ SV *SvMp_sv = (sv); \ char *SvMp_name = (char *) (name); \ I32 SvMp_namlen = (namlen); \ if (SvMp_name && SvMp_namlen == 0) \ { \ MAGIC *mg; \ sv_magic(SvMp_sv, obj, how, 0, 0); \ mg = SvMAGIC(SvMp_sv); \ mg->mg_len = -42; /* XXX: this is the tricky part */ \ mg->mg_ptr = SvMp_name; \ } \ else \ { \ sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ } \ } STMT_END #else # define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) #endif #if !defined(mg_findext) #if defined(NEED_mg_findext) static MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); static #else extern MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); #endif #define mg_findext DPPP_(my_mg_findext) #define Perl_mg_findext DPPP_(my_mg_findext) #if defined(NEED_mg_findext) || defined(NEED_mg_findext_GLOBAL) MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl) { if (sv) { MAGIC *mg; #ifdef AvPAD_NAMELIST assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv))); #endif for (mg = SvMAGIC (sv); mg; mg = mg->mg_moremagic) { if (mg->mg_type == type && mg->mg_virtual == vtbl) return mg; } } return NULL; } #endif #endif #if !defined(sv_unmagicext) #if defined(NEED_sv_unmagicext) static int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); static #else extern int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); #endif #ifdef sv_unmagicext # undef sv_unmagicext #endif #define sv_unmagicext(a,b,c) DPPP_(my_sv_unmagicext)(aTHX_ a,b,c) #define Perl_sv_unmagicext DPPP_(my_sv_unmagicext) #if defined(NEED_sv_unmagicext) || defined(NEED_sv_unmagicext_GLOBAL) int DPPP_(my_sv_unmagicext)(pTHX_ SV *const sv, const int type, MGVTBL *vtbl) { MAGIC* mg; MAGIC** mgp; if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv)) return 0; mgp = &(SvMAGIC(sv)); for (mg = *mgp; mg; mg = *mgp) { const MGVTBL* const virt = mg->mg_virtual; if (mg->mg_type == type && virt == vtbl) { *mgp = mg->mg_moremagic; if (virt && virt->svt_free) virt->svt_free(aTHX_ sv, mg); if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) { if (mg->mg_len > 0) Safefree(mg->mg_ptr); else if (mg->mg_len == HEf_SVKEY) /* Questionable on older perls... */ SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr)); else if (mg->mg_type == PERL_MAGIC_utf8) Safefree(mg->mg_ptr); } if (mg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(mg->mg_obj); Safefree(mg); } else mgp = &mg->mg_moremagic; } if (SvMAGIC(sv)) { if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */ mg_magical(sv); /* else fix the flags now */ } else { SvMAGICAL_off(sv); SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; } return 0; } #endif #endif #ifdef USE_ITHREADS #ifndef CopFILE # define CopFILE(c) ((c)->cop_file) #endif #ifndef CopFILEGV # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) ((c)->cop_stashpv) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) #endif #ifndef CopSTASH # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ || (CopSTASHPV(c) && HvNAME(hv) \ && strEQ(CopSTASHPV(c), HvNAME(hv))))) #endif #else #ifndef CopFILEGV # define CopFILEGV(c) ((c)->cop_filegv) #endif #ifndef CopFILEGV_set # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) #endif #ifndef CopFILE # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) #endif #ifndef CopSTASH # define CopSTASH(c) ((c)->cop_stash) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) #endif #endif /* USE_ITHREADS */ #if (PERL_BCDVERSION >= 0x5006000) #ifndef caller_cx # if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) static I32 DPPP_dopoptosub_at(const PERL_CONTEXT *cxstk, I32 startingblock) { I32 i; for (i = startingblock; i >= 0; i--) { register const PERL_CONTEXT * const cx = &cxstk[i]; switch (CxTYPE(cx)) { default: continue; case CXt_EVAL: case CXt_SUB: case CXt_FORMAT: return i; } } return i; } # endif # if defined(NEED_caller_cx) static const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); static #else extern const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); #endif #ifdef caller_cx # undef caller_cx #endif #define caller_cx(a,b) DPPP_(my_caller_cx)(aTHX_ a,b) #define Perl_caller_cx DPPP_(my_caller_cx) #if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp) { register I32 cxix = DPPP_dopoptosub_at(cxstack, cxstack_ix); register const PERL_CONTEXT *cx; register const PERL_CONTEXT *ccstack = cxstack; const PERL_SI *top_si = PL_curstackinfo; for (;;) { /* we may be in a higher stacklevel, so dig down deeper */ while (cxix < 0 && top_si->si_type != PERLSI_MAIN) { top_si = top_si->si_prev; ccstack = top_si->si_cxstack; cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix); } if (cxix < 0) return NULL; /* caller() should not report the automatic calls to &DB::sub */ if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 && ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub)) count++; if (!count--) break; cxix = DPPP_dopoptosub_at(ccstack, cxix - 1); } cx = &ccstack[cxix]; if (dbcxp) *dbcxp = cx; if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) { const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1); /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the field below is defined for any cx. */ /* caller() should not report the automatic calls to &DB::sub */ if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub)) cx = &ccstack[dbcxix]; } return cx; } # endif #endif /* caller_cx */ #endif /* 5.6.0 */ #ifndef IN_PERL_COMPILETIME # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) #endif #ifndef IN_LOCALE_RUNTIME # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) #endif #ifndef IN_LOCALE_COMPILETIME # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) #endif #ifndef IN_LOCALE # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) #endif #ifndef IS_NUMBER_IN_UV # define IS_NUMBER_IN_UV 0x01 #endif #ifndef IS_NUMBER_GREATER_THAN_UV_MAX # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 #endif #ifndef IS_NUMBER_NOT_INT # define IS_NUMBER_NOT_INT 0x04 #endif #ifndef IS_NUMBER_NEG # define IS_NUMBER_NEG 0x08 #endif #ifndef IS_NUMBER_INFINITY # define IS_NUMBER_INFINITY 0x10 #endif #ifndef IS_NUMBER_NAN # define IS_NUMBER_NAN 0x20 #endif #ifndef GROK_NUMERIC_RADIX # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) #endif #ifndef PERL_SCAN_GREATER_THAN_UV_MAX # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 #endif #ifndef PERL_SCAN_SILENT_ILLDIGIT # define PERL_SCAN_SILENT_ILLDIGIT 0x04 #endif #ifndef PERL_SCAN_ALLOW_UNDERSCORES # define PERL_SCAN_ALLOW_UNDERSCORES 0x01 #endif #ifndef PERL_SCAN_DISALLOW_PREFIX # define PERL_SCAN_DISALLOW_PREFIX 0x02 #endif #ifndef grok_numeric_radix #if defined(NEED_grok_numeric_radix) static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); static #else extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); #endif #ifdef grok_numeric_radix # undef grok_numeric_radix #endif #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) bool DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) { #ifdef USE_LOCALE_NUMERIC #ifdef PL_numeric_radix_sv if (PL_numeric_radix_sv && IN_LOCALE) { STRLEN len; char* radix = SvPV(PL_numeric_radix_sv, len); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #else /* older perls don't have PL_numeric_radix_sv so the radix * must manually be requested from locale.h */ #include <locale.h> dTHR; /* needed for older threaded perls */ struct lconv *lc = localeconv(); char *radix = lc->decimal_point; if (radix && IN_LOCALE) { STRLEN len = strlen(radix); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #endif #endif /* USE_LOCALE_NUMERIC */ /* always try "." if numeric radix didn't match because * we may have data from different locales mixed */ if (*sp < send && **sp == '.') { ++*sp; return TRUE; } return FALSE; } #endif #endif #ifndef grok_number #if defined(NEED_grok_number) static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); static #else extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); #endif #ifdef grok_number # undef grok_number #endif #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) #define Perl_grok_number DPPP_(my_grok_number) #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) int DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) { const char *s = pv; const char *send = pv + len; const UV max_div_10 = UV_MAX / 10; const char max_mod_10 = UV_MAX % 10; int numtype = 0; int sawinf = 0; int sawnan = 0; while (s < send && isSPACE(*s)) s++; if (s == send) { return 0; } else if (*s == '-') { s++; numtype = IS_NUMBER_NEG; } else if (*s == '+') s++; if (s == send) return 0; /* next must be digit or the radix separator or beginning of infinity */ if (isDIGIT(*s)) { /* UVs are at least 32 bits, so the first 9 decimal digits cannot overflow. */ UV value = *s - '0'; /* This construction seems to be more optimiser friendly. (without it gcc does the isDIGIT test and the *s - '0' separately) With it gcc on arm is managing 6 instructions (6 cycles) per digit. In theory the optimiser could deduce how far to unroll the loop before checking for overflow. */ if (++s < send) { int digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { /* Now got 9 digits, so need to check each time for overflow. */ digit = *s - '0'; while (digit >= 0 && digit <= 9 && (value < max_div_10 || (value == max_div_10 && digit <= max_mod_10))) { value = value * 10 + digit; if (++s < send) digit = *s - '0'; else break; } if (digit >= 0 && digit <= 9 && (s < send)) { /* value overflowed. skip the remaining digits, don't worry about setting *valuep. */ do { s++; } while (s < send && isDIGIT(*s)); numtype |= IS_NUMBER_GREATER_THAN_UV_MAX; goto skip_value; } } } } } } } } } } } } } } } } } } numtype |= IS_NUMBER_IN_UV; if (valuep) *valuep = value; skip_value: if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT; while (s < send && isDIGIT(*s)) /* optional digits after the radix */ s++; } } else if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ /* no digits before the radix means we need digits after it */ if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); if (valuep) { /* integer approximation is valid - it's 0. */ *valuep = 0; } } else return 0; } else if (*s == 'I' || *s == 'i') { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; s++; if (s < send && (*s == 'I' || *s == 'i')) { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; s++; if (s == send || (*s != 'T' && *s != 't')) return 0; s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; s++; } sawinf = 1; } else if (*s == 'N' || *s == 'n') { /* XXX TODO: There are signaling NaNs and quiet NaNs. */ s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; sawnan = 1; } else return 0; if (sawinf) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; } else if (sawnan) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; } else if (s < send) { /* we can have an optional exponent part */ if (*s == 'e' || *s == 'E') { /* The only flag we keep is sign. Blow away any "it's UV" */ numtype &= IS_NUMBER_NEG; numtype |= IS_NUMBER_NOT_INT; s++; if (s < send && (*s == '-' || *s == '+')) s++; if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); } else return 0; } } while (s < send && isSPACE(*s)) s++; if (s >= send) return numtype; if (len == 10 && memEQ(pv, "0 but true", 10)) { if (valuep) *valuep = 0; return IS_NUMBER_IN_UV; } return 0; } #endif #endif /* * The grok_* routines have been modified to use warn() instead of * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, * which is why the stack variable has been renamed to 'xdigit'. */ #ifndef grok_bin #if defined(NEED_grok_bin) static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_bin # undef grok_bin #endif #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) #define Perl_grok_bin DPPP_(my_grok_bin) #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) UV DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_2 = UV_MAX / 2; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading b or 0b. for compatibility silently suffer "b" and "0b" as valid binary numbers. */ if (len >= 1) { if (s[0] == 'b') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'b') { s+=2; len-=2; } } } for (; len-- && *s; s++) { char bit = *s; if (bit == '0' || bit == '1') { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_bin. */ redo: if (!overflowed) { if (value <= max_div_2) { value = (value << 1) | (bit - '0'); continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in binary number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 2.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount. */ value_nv += (NV)(bit - '0'); continue; } if (bit == '_' && len && allow_underscores && (bit = s[1]) && (bit == '0' || bit == '1')) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal binary digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Binary number > 0b11111111111111111111111111111111 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_hex #if defined(NEED_grok_hex) static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_hex # undef grok_hex #endif #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) #define Perl_grok_hex DPPP_(my_grok_hex) #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) UV DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_16 = UV_MAX / 16; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; const char *xdigit; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading x or 0x. for compatibility silently suffer "x" and "0x" as valid hex numbers. */ if (len >= 1) { if (s[0] == 'x') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'x') { s+=2; len-=2; } } } for (; len-- && *s; s++) { xdigit = strchr((char *) PL_hexdigit, *s); if (xdigit) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_hex. */ redo: if (!overflowed) { if (value <= max_div_16) { value = (value << 4) | ((xdigit - PL_hexdigit) & 15); continue; } warn("Integer overflow in hexadecimal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 16.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 16-tuples. */ value_nv += (NV)((xdigit - PL_hexdigit) & 15); continue; } if (*s == '_' && len && allow_underscores && s[1] && (xdigit = strchr((char *) PL_hexdigit, s[1]))) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal hexadecimal digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Hexadecimal number > 0xffffffff non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_oct #if defined(NEED_grok_oct) static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_oct # undef grok_oct #endif #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) #define Perl_grok_oct DPPP_(my_grok_oct) #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) UV DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_8 = UV_MAX / 8; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; for (; len-- && *s; s++) { /* gcc 2.95 optimiser not smart enough to figure that this subtraction out front allows slicker code. */ int digit = *s - '0'; if (digit >= 0 && digit <= 7) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. */ redo: if (!overflowed) { if (value <= max_div_8) { value = (value << 3) | digit; continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in octal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 8.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 8-tuples. */ value_nv += (NV)digit; continue; } if (digit == ('_' - '0') && len && allow_underscores && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) { --len; ++s; goto redo; } /* Allow \octal to work the DWIM way (that is, stop scanning * as soon as non-octal characters are seen, complain only iff * someone seems to want to use the digits eight and nine). */ if (digit == 8 || digit == 9) { if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal octal digit '%c' ignored", *s); } break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Octal number > 037777777777 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #if !defined(my_snprintf) #if defined(NEED_my_snprintf) static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); static #else extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); #endif #define my_snprintf DPPP_(my_my_snprintf) #define Perl_my_snprintf DPPP_(my_my_snprintf) #if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) int DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) { dTHX; int retval; va_list ap; va_start(ap, format); #ifdef HAS_VSNPRINTF retval = vsnprintf(buffer, len, format, ap); #else retval = vsprintf(buffer, format, ap); #endif va_end(ap); if (retval < 0 || (len > 0 && (Size_t)retval >= len)) Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); return retval; } #endif #endif #if !defined(my_sprintf) #if defined(NEED_my_sprintf) static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); static #else extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); #endif #define my_sprintf DPPP_(my_my_sprintf) #define Perl_my_sprintf DPPP_(my_my_sprintf) #if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL) int DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...) { va_list args; va_start(args, pat); vsprintf(buffer, pat, args); va_end(args); return strlen(buffer); } #endif #endif #ifdef NO_XSLOCKS # ifdef dJMPENV # define dXCPT dJMPENV; int rEtV = 0 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) # define XCPT_TRY_END JMPENV_POP; # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW JMPENV_JUMP(rEtV) # else # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW Siglongjmp(top_env, rEtV) # endif #endif #if !defined(my_strlcat) #if defined(NEED_my_strlcat) static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); #endif #define my_strlcat DPPP_(my_my_strlcat) #define Perl_my_strlcat DPPP_(my_my_strlcat) #if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) Size_t DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) { Size_t used, length, copy; used = strlen(dst); length = strlen(src); if (size > 0 && used < size - 1) { copy = (length >= size - used) ? size - used - 1 : length; memcpy(dst + used, src, copy); dst[used + copy] = '\0'; } return used + length; } #endif #endif #if !defined(my_strlcpy) #if defined(NEED_my_strlcpy) static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); #endif #define my_strlcpy DPPP_(my_my_strlcpy) #define Perl_my_strlcpy DPPP_(my_my_strlcpy) #if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) Size_t DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) { Size_t length, copy; length = strlen(src); if (size > 0) { copy = (length >= size) ? size - 1 : length; memcpy(dst, src, copy); dst[copy] = '\0'; } return length; } #endif #endif #ifndef PERL_PV_ESCAPE_QUOTE # define PERL_PV_ESCAPE_QUOTE 0x0001 #endif #ifndef PERL_PV_PRETTY_QUOTE # define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE #endif #ifndef PERL_PV_PRETTY_ELLIPSES # define PERL_PV_PRETTY_ELLIPSES 0x0002 #endif #ifndef PERL_PV_PRETTY_LTGT # define PERL_PV_PRETTY_LTGT 0x0004 #endif #ifndef PERL_PV_ESCAPE_FIRSTCHAR # define PERL_PV_ESCAPE_FIRSTCHAR 0x0008 #endif #ifndef PERL_PV_ESCAPE_UNI # define PERL_PV_ESCAPE_UNI 0x0100 #endif #ifndef PERL_PV_ESCAPE_UNI_DETECT # define PERL_PV_ESCAPE_UNI_DETECT 0x0200 #endif #ifndef PERL_PV_ESCAPE_ALL # define PERL_PV_ESCAPE_ALL 0x1000 #endif #ifndef PERL_PV_ESCAPE_NOBACKSLASH # define PERL_PV_ESCAPE_NOBACKSLASH 0x2000 #endif #ifndef PERL_PV_ESCAPE_NOCLEAR # define PERL_PV_ESCAPE_NOCLEAR 0x4000 #endif #ifndef PERL_PV_ESCAPE_RE # define PERL_PV_ESCAPE_RE 0x8000 #endif #ifndef PERL_PV_PRETTY_NOCLEAR # define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR #endif #ifndef PERL_PV_PRETTY_DUMP # define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE #endif #ifndef PERL_PV_PRETTY_REGPROP # define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE #endif /* Hint: pv_escape * Note that unicode functionality is only backported to * those perl versions that support it. For older perl * versions, the implementation will fall back to bytes. */ #ifndef pv_escape #if defined(NEED_pv_escape) static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); static #else extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); #endif #ifdef pv_escape # undef pv_escape #endif #define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f) #define Perl_pv_escape DPPP_(my_pv_escape) #if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL) char * DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags) { const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\'; const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc; char octbuf[32] = "%123456789ABCDF"; STRLEN wrote = 0; STRLEN chsize = 0; STRLEN readsize = 1; #if defined(is_utf8_string) && defined(utf8_to_uvchr) bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0; #endif const char *pv = str; const char * const end = pv + count; octbuf[0] = esc; if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) sv_setpvs(dsv, ""); #if defined(is_utf8_string) && defined(utf8_to_uvchr) if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) isuni = 1; #endif for (; pv < end && (!max || wrote < max) ; pv += readsize) { const UV u = #if defined(is_utf8_string) && defined(utf8_to_uvchr) isuni ? utf8_to_uvchr((U8*)pv, &readsize) : #endif (U8)*pv; const U8 c = (U8)u & 0xFF; if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { if (flags & PERL_PV_ESCAPE_FIRSTCHAR) chsize = my_snprintf(octbuf, sizeof octbuf, "%" UVxf, u); else chsize = my_snprintf(octbuf, sizeof octbuf, "%cx{%" UVxf "}", esc, u); } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { chsize = 1; } else { if (c == dq || c == esc || !isPRINT(c)) { chsize = 2; switch (c) { case '\\' : /* fallthrough */ case '%' : if (c == esc) octbuf[1] = esc; else chsize = 1; break; case '\v' : octbuf[1] = 'v'; break; case '\t' : octbuf[1] = 't'; break; case '\r' : octbuf[1] = 'r'; break; case '\n' : octbuf[1] = 'n'; break; case '\f' : octbuf[1] = 'f'; break; case '"' : if (dq == '"') octbuf[1] = '"'; else chsize = 1; break; default: chsize = my_snprintf(octbuf, sizeof octbuf, pv < end && isDIGIT((U8)*(pv+readsize)) ? "%c%03o" : "%c%o", esc, c); } } else { chsize = 1; } } if (max && wrote + chsize > max) { break; } else if (chsize > 1) { sv_catpvn(dsv, octbuf, chsize); wrote += chsize; } else { char tmp[2]; my_snprintf(tmp, sizeof tmp, "%c", c); sv_catpvn(dsv, tmp, 1); wrote++; } if (flags & PERL_PV_ESCAPE_FIRSTCHAR) break; } if (escaped != NULL) *escaped= pv - str; return SvPVX(dsv); } #endif #endif #ifndef pv_pretty #if defined(NEED_pv_pretty) static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); static #else extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); #endif #ifdef pv_pretty # undef pv_pretty #endif #define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g) #define Perl_pv_pretty DPPP_(my_pv_pretty) #if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL) char * DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags) { const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%'; STRLEN escaped; if (!(flags & PERL_PV_PRETTY_NOCLEAR)) sv_setpvs(dsv, ""); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, "<"); if (start_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color)); pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR); if (end_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, ">"); if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) sv_catpvs(dsv, "..."); return SvPVX(dsv); } #endif #endif #ifndef pv_display #if defined(NEED_pv_display) static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); static #else extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); #endif #ifdef pv_display # undef pv_display #endif #define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e) #define Perl_pv_display DPPP_(my_pv_display) #if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL) char * DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim) { pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); if (len > cur && pv[cur] == '\0') sv_catpvs(dsv, "\\0"); return SvPVX(dsv); } #endif #endif #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */ Devel/Size.pm 0000644 00000024633 15037233332 0007064 0 ustar 00 package Devel::Size; use strict; use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS $warn $dangle); require 5.005; require Exporter; require XSLoader; @ISA = qw(Exporter); @EXPORT_OK = qw(size total_size); # This allows declaration use Devel::Size ':all'; %EXPORT_TAGS = ( 'all' => \@EXPORT_OK ); $VERSION = '0.81'; XSLoader::load( __PACKAGE__); $warn = 1; $dangle = 0; ## Set true to enable warnings about dangling pointers 1; __END__ =pod =head1 NAME Devel::Size - Perl extension for finding the memory usage of Perl variables =head1 SYNOPSIS use Devel::Size qw(size total_size); my $size = size("A string"); my @foo = (1, 2, 3, 4, 5); my $other_size = size(\@foo); my $foo = {a => [1, 2, 3], b => {a => [1, 3, 4]} }; my $total_size = total_size($foo); =head1 DESCRIPTION This module figures out the real size of Perl variables in bytes, as accurately as possible. Call functions with a reference to the variable you want the size of. If the variable is a plain scalar it returns the size of this scalar. If the variable is a hash or an array, use a reference when calling. =head1 FUNCTIONS =head2 size($ref) The C<size> function returns the amount of memory the variable returns. If the variable is a hash or an array, it only reports the amount used by the structure, I<not> the contents. =head2 total_size($ref) The C<total_size> function will traverse the variable and look at the sizes of contents. Any references contained in the variable will also be followed, so this function can be used to get the total size of a multidimensional data structure. At the moment there is no way to get the size of an array or a hash and its elements without using this function. =head1 EXPORT None but default, but optionally C<size> and C<total_size>. =head1 UNDERSTANDING MEMORY ALLOCATION Please note that the following discussion of memory allocation in perl is based on the perl 5.8.0 sources. While this is generally applicable to all versions of perl, some of the gory details are omitted. It also makes some presumptions on how your system memory allocator works so, while it will be generally correct, it may not exactly reflect your system. (Generally the only issue is the size of the constant values we'll talk about, not their existence) =head2 The C library It's important first to understand how your OS and libraries handle memory. When the perl interpreter needs some memory, it asks the C runtime library for it, using the C<malloc()> call. C<malloc> has one parameter, the size of the memory allocation you want, and returns a pointer to that memory. C<malloc> also makes sure that the pointer it returns to you is properly aligned. When you're done with the memory you hand it back to the library with the C<free()> call. C<free> has one parameter, the pointer that C<malloc> returned. There are a couple of interesting ramifications to this. Because malloc has to return an aligned pointer, it will round up the memory allocation to make sure that the memory it returns is aligned right. What that alignment is depends on your CPU, OS, and compiler settings, but things are generally aligned to either a 4 or 8 byte boundary. That means that if you ask for 1 byte, C<malloc> will silently round up to either 4 or 8 bytes, though it doesn't tell the program making the request, so the extra memory can't be used. Since C<free> isn't given the size of the memory chunk you're freeing, it has to track it another way. Most libraries do this by tacking on a length field just before the memory it hands to your program. (It's put before the beginning rather than after the end because it's less likely to get mangled by program bugs) This size field is the size of your platform integer, Generally either 4 or 8 bytes. So, if you asked for 1 byte, malloc would build something like this: +------------------+ | 4 byte length | +------------------+ <----- the pointer malloc returns | your 1 byte | +------------------+ | 3 bytes padding | +------------------+ As you can see, you asked for 1 byte but C<malloc> used 8. If your integers were 8 bytes rather than 4, C<malloc> would have used 16 bytes to satisfy your 1 byte request. The C memory allocation system also keeps a list of free memory chunks, so it can recycle freed memory. For performance reasons, some C memory allocation systems put a limit to the number of free segments that are on the free list, or only search through a small number of memory chunks waiting to be recycled before just allocating more memory from the system. The memory allocation system tries to keep as few chunks on the free list as possible. It does this by trying to notice if there are two adjacent chunks of memory on the free list and, if there are, coalescing them into a single larger chunk. This works pretty well, but there are ways to have a lot of memory on the free list yet still not have anything that can be allocated. If a program allocates one million eight-byte chunks, for example, then frees every other chunk, there will be four million bytes of memory on the free list, but none of that memory can be handed out to satisfy a request for 10 bytes. This is what's referred to as a fragmented free list, and can be one reason why your program could have a lot of free memory yet still not be able to allocate more, or have a huge process size and still have almost no memory actually allocated to the program running. =head2 Perl Perl's memory allocation scheme is a bit convoluted, and more complex than can really be addressed here, but there is one common spot where Perl's memory allocation is unintuitive, and that's for hash keys. When you have a hash, each entry has a structure that points to the key and the value for that entry. The value is just a pointer to the scalar in the entry, and doesn't take up any special amount of memory. The key structure holds the hash value for the key, the key length, and the key string. (The entry and key structures are separate so perl can potentially share keys across multiple hashes) The entry structure has three pointers in it, and takes up either 12 or 24 bytes, depending on whether you're on a 32 bit or 64 bit system. Since these structures are of fixed size, perl can keep a big pool of them internally (generally called an arena) so it doesn't have to allocate memory for each one. The key structure, though, is of variable length because the key string is of variable length, so perl has to ask the system for a memory allocation for each key. The base size of this structure is 8 or 16 bytes (once again, depending on whether you're on a 32 bit or 64 bit system) plus the string length plus two bytes. Since this memory has to be allocated from the system there's the malloc size-field overhead (4 or 8 bytes) plus the alignment bytes (0 to 7, depending on your system and the key length) that get added on to the chunk perl requests. If the key is only 1 character, and you're on a 32 bit system, the allocation will be 16 bytes. If the key is 7 characters then the allocation is 24 bytes on a 32 bit system. If you're on a 64 bit system the numbers get even larger. =head1 DANGERS Since version 0.72, Devel::Size uses a new pointer tracking mechanism that consumes far less memory than was previously the case. It does this by using a bit vector where 1 bit represents each 4- or 8-byte aligned pointer (32- or 64-bit platform dependent) that could exist. Further, it segments that bit vector and only allocates each chunk when an address is seen within that chunk. Since version 0.73, chunks are allocated in blocks of 2**16 bits (ie 8K), accessed via a 256-way tree. The tree is 2 levels deep on a 32 bit system, 6 levels deep on a 64 bit system. This avoids having make any assumptions about address layout on 64 bit systems or trade offs about sizes to allocate. It assumes that the addresses of allocated pointers are reasonably contiguous, so that relevant parts of the tree stay in the CPU cache. Besides saving a lot of memory, this change means that Devel::Size runs significantly faster than previous versions. =head1 Messages: texts originating from this module. =head2 Errors =over 4 =item "Devel::Size: Unknown variable type" The thing (or something contained within it) that you gave to total_size() was unrecognisable as a Perl entity. =back =head2 warnings These messages warn you that for some types, the sizes calculated may not include everything that could be associated with those types. The differences are usually insignificant for most uses of this module. These may be disabled by setting $Devel::Size::warn = 0 =over 4 =item "Devel::Size: Calculated sizes for CVs are incomplete" =item "Devel::Size: Calculated sizes for FMs are incomplete" =item "Devel::Size: Calculated sizes for compiled regexes are incompatible, and probably always will be" =back =head2 New warnings since 0.72 Devel::Size has always been vulnerable to trapping when traversing Perl's internal data structures, if it encounters uninitialised (dangling) pointers. MSVC provides exception handling able to deal with this possibility, and when built with MSVC Devel::Size will now attempt to ignore (or log) them and continue. These messages are mainly of interest to Devel::Size and core developers, and so are disabled by default. They may be enabled by setting $Devel::Size::dangle = 0 =over 4 =item "Devel::Size: Can't determine class of operator OPx_XXXX, assuming BASEOP\n" =item "Devel::Size: Encountered bad magic at: 0xXXXXXXXX" =item "Devel::Size: Encountered dangling pointer in opcode at: 0xXXXXXXXX" =item "Devel::Size: Encountered invalid pointer: 0xXXXXXXXX" =back =head1 BUGS Doesn't currently walk all the bits for code refs, formats, and IO. Those throw a warning, but a minimum size for them is returned. Devel::Size only counts the memory that perl actually allocates. It doesn't count 'dark' memory--memory that is lost due to fragmented free lists, allocation alignments, or C library overhead. =head1 AUTHOR Dan Sugalski dan@sidhe.org Small portion taken from the B module as shipped with perl 5.6.2. Previously maintained by Tels <http://bloodgate.com> New pointer tracking & exception handling for 0.72 by BrowserUK Currently maintained by Nicholas Clark =head1 COPYRIGHT Copyright (C) 2005 Dan Sugalski, Copyright (C) 2007-2008 Tels This module is free software; you can redistribute it and/or modify it under the same terms as Perl v5.8.8. =head1 SEE ALSO perl(1), L<Devel::Size::Report>. =cut version/vxs.pm 0000644 00000000744 15037233332 0007415 0 ustar 00 #!perl -w package version::vxs; use v5.10; use strict; our $VERSION = 0.9924; our $CLASS = 'version::vxs'; our @ISA; eval { require XSLoader; local $^W; # shut up the 'redefined' warning for UNIVERSAL::VERSION XSLoader::load('version::vxs', $VERSION); 1; } or do { require DynaLoader; push @ISA, 'DynaLoader'; local $^W; # shut up the 'redefined' warning for UNIVERSAL::VERSION bootstrap version::vxs $VERSION; }; # Preloaded methods go here. 1; version/vpp.pm 0000644 00000052547 15037233332 0007412 0 ustar 00 package charstar; # a little helper class to emulate C char* semantics in Perl # so that prescan_version can use the same code as in C use overload ( '""' => \&thischar, '0+' => \&thischar, '++' => \&increment, '--' => \&decrement, '+' => \&plus, '-' => \&minus, '*' => \&multiply, 'cmp' => \&cmp, '<=>' => \&spaceship, 'bool' => \&thischar, '=' => \&clone, ); sub new { my ($self, $string) = @_; my $class = ref($self) || $self; my $obj = { string => [split(//,$string)], current => 0, }; return bless $obj, $class; } sub thischar { my ($self) = @_; my $last = $#{$self->{string}}; my $curr = $self->{current}; if ($curr >= 0 && $curr <= $last) { return $self->{string}->[$curr]; } else { return ''; } } sub increment { my ($self) = @_; $self->{current}++; } sub decrement { my ($self) = @_; $self->{current}--; } sub plus { my ($self, $offset) = @_; my $rself = $self->clone; $rself->{current} += $offset; return $rself; } sub minus { my ($self, $offset) = @_; my $rself = $self->clone; $rself->{current} -= $offset; return $rself; } sub multiply { my ($left, $right, $swapped) = @_; my $char = $left->thischar(); return $char * $right; } sub spaceship { my ($left, $right, $swapped) = @_; unless (ref($right)) { # not an object already $right = $left->new($right); } return $left->{current} <=> $right->{current}; } sub cmp { my ($left, $right, $swapped) = @_; unless (ref($right)) { # not an object already if (length($right) == 1) { # comparing single character only return $left->thischar cmp $right; } $right = $left->new($right); } return $left->currstr cmp $right->currstr; } sub bool { my ($self) = @_; my $char = $self->thischar; return ($char ne ''); } sub clone { my ($left, $right, $swapped) = @_; $right = { string => [@{$left->{string}}], current => $left->{current}, }; return bless $right, ref($left); } sub currstr { my ($self, $s) = @_; my $curr = $self->{current}; my $last = $#{$self->{string}}; if (defined($s) && $s->{current} < $last) { $last = $s->{current}; } my $string = join('', @{$self->{string}}[$curr..$last]); return $string; } package version::vpp; use 5.006002; use strict; use warnings::register; use Config; our $VERSION = 0.9924; our $CLASS = 'version::vpp'; our ($LAX, $STRICT, $WARN_CATEGORY); if ($] > 5.015) { warnings::register_categories(qw/version/); $WARN_CATEGORY = 'version'; } else { $WARN_CATEGORY = 'numeric'; } require version::regex; *version::vpp::is_strict = \&version::regex::is_strict; *version::vpp::is_lax = \&version::regex::is_lax; *LAX = \$version::regex::LAX; *STRICT = \$version::regex::STRICT; use overload ( '""' => \&stringify, '0+' => \&numify, 'cmp' => \&vcmp, '<=>' => \&vcmp, 'bool' => \&vbool, '+' => \&vnoop, '-' => \&vnoop, '*' => \&vnoop, '/' => \&vnoop, '+=' => \&vnoop, '-=' => \&vnoop, '*=' => \&vnoop, '/=' => \&vnoop, 'abs' => \&vnoop, ); sub import { no strict 'refs'; my ($class) = shift; # Set up any derived class unless ($class eq $CLASS) { local $^W; *{$class.'::declare'} = \&{$CLASS.'::declare'}; *{$class.'::qv'} = \&{$CLASS.'::qv'}; } my %args; if (@_) { # any remaining terms are arguments map { $args{$_} = 1 } @_ } else { # no parameters at all on use line %args = ( qv => 1, 'UNIVERSAL::VERSION' => 1, ); } my $callpkg = caller(); if (exists($args{declare})) { *{$callpkg.'::declare'} = sub {return $class->declare(shift) } unless defined(&{$callpkg.'::declare'}); } if (exists($args{qv})) { *{$callpkg.'::qv'} = sub {return $class->qv(shift) } unless defined(&{$callpkg.'::qv'}); } if (exists($args{'UNIVERSAL::VERSION'})) { no warnings qw/redefine/; *UNIVERSAL::VERSION = \&{$CLASS.'::_VERSION'}; } if (exists($args{'VERSION'})) { *{$callpkg.'::VERSION'} = \&{$CLASS.'::_VERSION'}; } if (exists($args{'is_strict'})) { *{$callpkg.'::is_strict'} = \&{$CLASS.'::is_strict'} unless defined(&{$callpkg.'::is_strict'}); } if (exists($args{'is_lax'})) { *{$callpkg.'::is_lax'} = \&{$CLASS.'::is_lax'} unless defined(&{$callpkg.'::is_lax'}); } } my $VERSION_MAX = 0x7FFFFFFF; # implement prescan_version as closely to the C version as possible use constant TRUE => 1; use constant FALSE => 0; sub isDIGIT { my ($char) = shift->thischar(); return ($char =~ /\d/); } sub isALPHA { my ($char) = shift->thischar(); return ($char =~ /[a-zA-Z]/); } sub isSPACE { my ($char) = shift->thischar(); return ($char =~ /\s/); } sub BADVERSION { my ($s, $errstr, $error) = @_; if ($errstr) { $$errstr = $error; } return $s; } sub prescan_version { my ($s, $strict, $errstr, $sqv, $ssaw_decimal, $swidth, $salpha) = @_; my $qv = defined $sqv ? $$sqv : FALSE; my $saw_decimal = defined $ssaw_decimal ? $$ssaw_decimal : 0; my $width = defined $swidth ? $$swidth : 3; my $alpha = defined $salpha ? $$salpha : FALSE; my $d = $s; if ($qv && isDIGIT($d)) { goto dotted_decimal_version; } if ($d eq 'v') { # explicit v-string $d++; if (isDIGIT($d)) { $qv = TRUE; } else { # degenerate v-string # requires v1.2.3 return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions require at least three parts)"); } dotted_decimal_version: if ($strict && $d eq '0' && isDIGIT($d+1)) { # no leading zeros allowed return BADVERSION($s,$errstr,"Invalid version format (no leading zeros)"); } while (isDIGIT($d)) { # integer part $d++; } if ($d eq '.') { $saw_decimal++; $d++; # decimal point } else { if ($strict) { # require v1.2.3 return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions require at least three parts)"); } else { goto version_prescan_finish; } } { my $i = 0; my $j = 0; while (isDIGIT($d)) { # just keep reading $i++; while (isDIGIT($d)) { $d++; $j++; # maximum 3 digits between decimal if ($strict && $j > 3) { return BADVERSION($s,$errstr,"Invalid version format (maximum 3 digits between decimals)"); } } if ($d eq '_') { if ($strict) { return BADVERSION($s,$errstr,"Invalid version format (no underscores)"); } if ( $alpha ) { return BADVERSION($s,$errstr,"Invalid version format (multiple underscores)"); } $d++; $alpha = TRUE; } elsif ($d eq '.') { if ($alpha) { return BADVERSION($s,$errstr,"Invalid version format (underscores before decimal)"); } $saw_decimal++; $d++; } elsif (!isDIGIT($d)) { last; } $j = 0; } if ($strict && $i < 2) { # requires v1.2.3 return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions require at least three parts)"); } } } # end if dotted-decimal else { # decimal versions my $j = 0; # special $strict case for leading '.' or '0' if ($strict) { if ($d eq '.') { return BADVERSION($s,$errstr,"Invalid version format (0 before decimal required)"); } if ($d eq '0' && isDIGIT($d+1)) { return BADVERSION($s,$errstr,"Invalid version format (no leading zeros)"); } } # and we never support negative version numbers if ($d eq '-') { return BADVERSION($s,$errstr,"Invalid version format (negative version number)"); } # consume all of the integer part while (isDIGIT($d)) { $d++; } # look for a fractional part if ($d eq '.') { # we found it, so consume it $saw_decimal++; $d++; } elsif (!$d || $d eq ';' || isSPACE($d) || $d eq '}') { if ( $d == $s ) { # found nothing return BADVERSION($s,$errstr,"Invalid version format (version required)"); } # found just an integer goto version_prescan_finish; } elsif ( $d == $s ) { # didn't find either integer or period return BADVERSION($s,$errstr,"Invalid version format (non-numeric data)"); } elsif ($d eq '_') { # underscore can't come after integer part if ($strict) { return BADVERSION($s,$errstr,"Invalid version format (no underscores)"); } elsif (isDIGIT($d+1)) { return BADVERSION($s,$errstr,"Invalid version format (alpha without decimal)"); } else { return BADVERSION($s,$errstr,"Invalid version format (misplaced underscore)"); } } elsif ($d) { # anything else after integer part is just invalid data return BADVERSION($s,$errstr,"Invalid version format (non-numeric data)"); } # scan the fractional part after the decimal point if ($d && !isDIGIT($d) && ($strict || ! ($d eq ';' || isSPACE($d) || $d eq '}') )) { # $strict or lax-but-not-the-end return BADVERSION($s,$errstr,"Invalid version format (fractional part required)"); } while (isDIGIT($d)) { $d++; $j++; if ($d eq '.' && isDIGIT($d-1)) { if ($alpha) { return BADVERSION($s,$errstr,"Invalid version format (underscores before decimal)"); } if ($strict) { return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions must begin with 'v')"); } $d = $s; # start all over again $qv = TRUE; goto dotted_decimal_version; } if ($d eq '_') { if ($strict) { return BADVERSION($s,$errstr,"Invalid version format (no underscores)"); } if ( $alpha ) { return BADVERSION($s,$errstr,"Invalid version format (multiple underscores)"); } if ( ! isDIGIT($d+1) ) { return BADVERSION($s,$errstr,"Invalid version format (misplaced underscore)"); } $width = $j; $d++; $alpha = TRUE; } } } version_prescan_finish: while (isSPACE($d)) { $d++; } if ($d && !isDIGIT($d) && (! ($d eq ';' || $d eq '}') )) { # trailing non-numeric data return BADVERSION($s,$errstr,"Invalid version format (non-numeric data)"); } if ($saw_decimal > 1 && ($d-1) eq '.') { # no trailing period allowed return BADVERSION($s,$errstr,"Invalid version format (trailing decimal)"); } if (defined $sqv) { $$sqv = $qv; } if (defined $swidth) { $$swidth = $width; } if (defined $ssaw_decimal) { $$ssaw_decimal = $saw_decimal; } if (defined $salpha) { $$salpha = $alpha; } return $d; } sub scan_version { my ($s, $rv, $qv) = @_; my $start; my $pos; my $last; my $errstr; my $saw_decimal = 0; my $width = 3; my $alpha = FALSE; my $vinf = FALSE; my @av; $s = new charstar $s; while (isSPACE($s)) { # leading whitespace is OK $s++; } $last = prescan_version($s, FALSE, \$errstr, \$qv, \$saw_decimal, \$width, \$alpha); if ($errstr) { # 'undef' is a special case and not an error if ( $s ne 'undef') { require Carp; Carp::croak($errstr); } } $start = $s; if ($s eq 'v') { $s++; } $pos = $s; if ( $qv ) { $$rv->{qv} = $qv; } if ( $alpha ) { $$rv->{alpha} = $alpha; } if ( !$qv && $width < 3 ) { $$rv->{width} = $width; } while (isDIGIT($pos) || $pos eq '_') { $pos++; } if (!isALPHA($pos)) { my $rev; for (;;) { $rev = 0; { # this is atoi() that delimits on underscores my $end = $pos; my $mult = 1; my $orev; # the following if() will only be true after the decimal # point of a version originally created with a bare # floating point number, i.e. not quoted in any way # if ( !$qv && $s > $start && $saw_decimal == 1 ) { $mult *= 100; while ( $s < $end ) { next if $s eq '_'; $orev = $rev; $rev += $s * $mult; $mult /= 10; if ( (abs($orev) > abs($rev)) || (abs($rev) > $VERSION_MAX )) { warn("Integer overflow in version %d", $VERSION_MAX); $s = $end - 1; $rev = $VERSION_MAX; $vinf = 1; } $s++; if ( $s eq '_' ) { $s++; } } } else { while (--$end >= $s) { next if $end eq '_'; $orev = $rev; $rev += $end * $mult; $mult *= 10; if ( (abs($orev) > abs($rev)) || (abs($rev) > $VERSION_MAX )) { warn("Integer overflow in version"); $end = $s - 1; $rev = $VERSION_MAX; $vinf = 1; } } } } # Append revision push @av, $rev; if ( $vinf ) { $s = $last; last; } elsif ( $pos eq '.' ) { $s = ++$pos; } elsif ( $pos eq '_' && isDIGIT($pos+1) ) { $s = ++$pos; } elsif ( $pos eq ',' && isDIGIT($pos+1) ) { $s = ++$pos; } elsif ( isDIGIT($pos) ) { $s = $pos; } else { $s = $pos; last; } if ( $qv ) { while ( isDIGIT($pos) || $pos eq '_') { $pos++; } } else { my $digits = 0; while ( ( isDIGIT($pos) || $pos eq '_' ) && $digits < 3 ) { if ( $pos ne '_' ) { $digits++; } $pos++; } } } } if ( $qv ) { # quoted versions always get at least three terms my $len = $#av; # This for loop appears to trigger a compiler bug on OS X, as it # loops infinitely. Yes, len is negative. No, it makes no sense. # Compiler in question is: # gcc version 3.3 20030304 (Apple Computer, Inc. build 1640) # for ( len = 2 - len; len > 0; len-- ) # av_push(MUTABLE_AV(sv), newSViv(0)); # $len = 2 - $len; while ($len-- > 0) { push @av, 0; } } # need to save off the current version string for later if ( $vinf ) { $$rv->{original} = "v.Inf"; $$rv->{vinf} = 1; } elsif ( $s > $start ) { $$rv->{original} = $start->currstr($s); if ( $qv && $saw_decimal == 1 && $start ne 'v' ) { # need to insert a v to be consistent $$rv->{original} = 'v' . $$rv->{original}; } } else { $$rv->{original} = '0'; push(@av, 0); } # And finally, store the AV in the hash $$rv->{version} = \@av; # fix RT#19517 - special case 'undef' as string if ($s eq 'undef') { $s += 5; } return $s; } sub new { my $class = shift; unless (defined $class or $#_ > 1) { require Carp; Carp::croak('Usage: version::new(class, version)'); } my $self = bless ({}, ref ($class) || $class); my $qv = FALSE; if ( $#_ == 1 ) { # must be CVS-style $qv = TRUE; } my $value = pop; # always going to be the last element if ( ref($value) && eval('$value->isa("version")') ) { # Can copy the elements directly $self->{version} = [ @{$value->{version} } ]; $self->{qv} = 1 if $value->{qv}; $self->{alpha} = 1 if $value->{alpha}; $self->{original} = ''.$value->{original}; return $self; } if ( not defined $value or $value =~ /^undef$/ ) { # RT #19517 - special case for undef comparison # or someone forgot to pass a value push @{$self->{version}}, 0; $self->{original} = "0"; return ($self); } if (ref($value) =~ m/ARRAY|HASH/) { require Carp; Carp::croak("Invalid version format (non-numeric data)"); } $value = _un_vstring($value); if ($Config{d_setlocale}) { use POSIX qw/locale_h/; use if $Config{d_setlocale}, 'locale'; my $currlocale = setlocale(LC_ALL); # if the current locale uses commas for decimal points, we # just replace commas with decimal places, rather than changing # locales if ( localeconv()->{decimal_point} eq ',' ) { $value =~ tr/,/./; } } # exponential notation if ( $value =~ /\d+.?\d*e[-+]?\d+/ ) { $value = sprintf("%.9f",$value); $value =~ s/(0+)$//; # trim trailing zeros } my $s = scan_version($value, \$self, $qv); if ($s) { # must be something left over warn(sprintf "Version string '%s' contains invalid data; " ."ignoring: '%s'", $value, $s); } return ($self); } *parse = \&new; sub numify { my ($self) = @_; unless (_verify($self)) { require Carp; Carp::croak("Invalid version object"); } my $alpha = $self->{alpha} || ""; my $len = $#{$self->{version}}; my $digit = $self->{version}[0]; my $string = sprintf("%d.", $digit ); if ($alpha and warnings::enabled()) { warnings::warn($WARN_CATEGORY, 'alpha->numify() is lossy'); } for ( my $i = 1 ; $i <= $len ; $i++ ) { $digit = $self->{version}[$i]; $string .= sprintf("%03d", $digit); } if ( $len == 0 ) { $string .= sprintf("000"); } return $string; } sub normal { my ($self) = @_; unless (_verify($self)) { require Carp; Carp::croak("Invalid version object"); } my $len = $#{$self->{version}}; my $digit = $self->{version}[0]; my $string = sprintf("v%d", $digit ); for ( my $i = 1 ; $i <= $len ; $i++ ) { $digit = $self->{version}[$i]; $string .= sprintf(".%d", $digit); } if ( $len <= 2 ) { for ( $len = 2 - $len; $len != 0; $len-- ) { $string .= sprintf(".%0d", 0); } } return $string; } sub stringify { my ($self) = @_; unless (_verify($self)) { require Carp; Carp::croak("Invalid version object"); } return exists $self->{original} ? $self->{original} : exists $self->{qv} ? $self->normal : $self->numify; } sub vcmp { my ($left,$right,$swap) = @_; my $class = ref($left); unless ( UNIVERSAL::isa($right, $class) ) { $right = $class->new($right); } if ( $swap ) { ($left, $right) = ($right, $left); } unless (_verify($left)) { require Carp; Carp::croak("Invalid version object"); } unless (_verify($right)) { require Carp; Carp::croak("Invalid version format"); } my $l = $#{$left->{version}}; my $r = $#{$right->{version}}; my $m = $l < $r ? $l : $r; my $lalpha = $left->is_alpha; my $ralpha = $right->is_alpha; my $retval = 0; my $i = 0; while ( $i <= $m && $retval == 0 ) { $retval = $left->{version}[$i] <=> $right->{version}[$i]; $i++; } # possible match except for trailing 0's if ( $retval == 0 && $l != $r ) { if ( $l < $r ) { while ( $i <= $r && $retval == 0 ) { if ( $right->{version}[$i] != 0 ) { $retval = -1; # not a match after all } $i++; } } else { while ( $i <= $l && $retval == 0 ) { if ( $left->{version}[$i] != 0 ) { $retval = +1; # not a match after all } $i++; } } } return $retval; } sub vbool { my ($self) = @_; return vcmp($self,$self->new("0"),1); } sub vnoop { require Carp; Carp::croak("operation not supported with version object"); } sub is_alpha { my ($self) = @_; return (exists $self->{alpha}); } sub qv { my $value = shift; my $class = $CLASS; if (@_) { $class = ref($value) || $value; $value = shift; } $value = _un_vstring($value); $value = 'v'.$value unless $value =~ /(^v|\d+\.\d+\.\d)/; my $obj = $CLASS->new($value); return bless $obj, $class; } *declare = \&qv; sub is_qv { my ($self) = @_; return (exists $self->{qv}); } sub _verify { my ($self) = @_; if ( ref($self) && eval { exists $self->{version} } && ref($self->{version}) eq 'ARRAY' ) { return 1; } else { return 0; } } sub _is_non_alphanumeric { my $s = shift; $s = new charstar $s; while ($s) { return 0 if isSPACE($s); # early out return 1 unless (isALPHA($s) || isDIGIT($s) || $s =~ /[.-]/); $s++; } return 0; } sub _un_vstring { my $value = shift; # may be a v-string if ( length($value) >= 1 && $value !~ /[,._]/ && _is_non_alphanumeric($value)) { my $tvalue; if ( $] >= 5.008_001 ) { $tvalue = _find_magic_vstring($value); $value = $tvalue if length $tvalue; } elsif ( $] >= 5.006_000 ) { $tvalue = sprintf("v%vd",$value); if ( $tvalue =~ /^v\d+(\.\d+)*$/ ) { # must be a v-string $value = $tvalue; } } } return $value; } sub _find_magic_vstring { my $value = shift; my $tvalue = ''; require B; my $sv = B::svref_2object(\$value); my $magic = ref($sv) eq 'B::PVMG' ? $sv->MAGIC : undef; while ( $magic ) { if ( $magic->TYPE eq 'V' ) { $tvalue = $magic->PTR; $tvalue =~ s/^v?(.+)$/v$1/; last; } else { $magic = $magic->MOREMAGIC; } } $tvalue =~ tr/_//d; return $tvalue; } sub _VERSION { my ($obj, $req) = @_; my $class = ref($obj) || $obj; no strict 'refs'; if ( exists $INC{"$class.pm"} and not %{"$class\::"} and $] >= 5.008) { # file but no package require Carp; Carp::croak( "$class defines neither package nor VERSION" ."--version check failed"); } my $version = eval "\$$class\::VERSION"; if ( defined $version ) { local $^W if $] <= 5.008; $version = version::vpp->new($version); } if ( defined $req ) { unless ( defined $version ) { require Carp; my $msg = $] < 5.006 ? "$class version $req required--this is only version " : "$class does not define \$$class\::VERSION" ."--version check failed"; if ( $ENV{VERSION_DEBUG} ) { Carp::confess($msg); } else { Carp::croak($msg); } } $req = version::vpp->new($req); if ( $req > $version ) { require Carp; if ( $req->is_qv ) { Carp::croak( sprintf ("%s version %s required--". "this is only version %s", $class, $req->normal, $version->normal) ); } else { Carp::croak( sprintf ("%s version %s required--". "this is only version %s", $class, $req->stringify, $version->stringify) ); } } } return defined $version ? $version->stringify : undef; } 1; #this line is important and will help the module return a true value version/Internals.pod 0000644 00000060702 15037233332 0010702 0 ustar 00 =head1 NAME version::Internals - Perl extension for Version Objects =head1 DESCRIPTION Overloaded version objects for all modern versions of Perl. This documents the internal data representation and underlying code for version.pm. See F<version.pod> for daily usage. This document is only useful for users interested in the gory details. =head1 WHAT IS A VERSION? For the purposes of this module, a version "number" is a sequence of positive integer values separated by one or more decimal points and optionally a single underscore. This corresponds to what Perl itself uses for a version, as well as extending the "version as number" that is discussed in the various editions of the Camel book. There are actually two distinct kinds of version objects: =over 4 =item Decimal versions Any version which "looks like a number", see L<Decimal Versions>. This also includes versions with a single decimal point and a single embedded underscore, see L<Alpha Versions>, even though these must be quoted to preserve the underscore formatting. =item Dotted-Decimal versions Also referred to as "Dotted-Integer", these contains more than one decimal point and may have an optional embedded underscore, see L<Dotted-Decimal Versions>. This is what is commonly used in most open source software as the "external" version (the one used as part of the tag or tarfile name). A leading 'v' character is now required and will warn if it missing. =back Both of these methods will produce similar version objects, in that the default stringification will yield the version L<Normal Form> only if required: $v = version->new(1.002); # 1.002, but compares like 1.2.0 $v = version->new(1.002003); # 1.002003 $v2 = version->new("v1.2.3"); # v1.2.3 In specific, version numbers initialized as L<Decimal Versions> will stringify as they were originally created (i.e. the same string that was passed to C<new()>. Version numbers initialized as L<Dotted-Decimal Versions> will be stringified as L<Normal Form>. =head2 Decimal Versions These correspond to historical versions of Perl itself prior to 5.6.0, as well as all other modules which follow the Camel rules for the $VERSION scalar. A Decimal version is initialized with what looks like a floating point number. Leading zeros B<are> significant and trailing zeros are implied so that a minimum of three places is maintained between subversions. What this means is that any subversion (digits to the right of the decimal place) that contains less than three digits will have trailing zeros added to make up the difference, but only for purposes of comparison with other version objects. For example: # Prints Equivalent to $v = version->new( 1.2); # 1.2 v1.200.0 $v = version->new( 1.02); # 1.02 v1.20.0 $v = version->new( 1.002); # 1.002 v1.2.0 $v = version->new( 1.0023); # 1.0023 v1.2.300 $v = version->new( 1.00203); # 1.00203 v1.2.30 $v = version->new( 1.002003); # 1.002003 v1.2.3 All of the preceding examples are true whether or not the input value is quoted. The important feature is that the input value contains only a single decimal. See also L<Alpha Versions>. IMPORTANT NOTE: As shown above, if your Decimal version contains more than 3 significant digits after the decimal place, it will be split on each multiple of 3, so 1.0003 is equivalent to v1.0.300, due to the need to remain compatible with Perl's own 5.005_03 == 5.5.30 interpretation. Any trailing zeros are ignored for mathematical comparison purposes. =head2 Dotted-Decimal Versions These are the newest form of versions, and correspond to Perl's own version style beginning with 5.6.0. Starting with Perl 5.10.0, and most likely Perl 6, this is likely to be the preferred form. This method normally requires that the input parameter be quoted, although Perl's after 5.8.1 can use v-strings as a special form of quoting, but this is highly discouraged. Unlike L<Decimal Versions>, Dotted-Decimal Versions have more than a single decimal point, e.g.: # Prints $v = version->new( "v1.200"); # v1.200.0 $v = version->new("v1.20.0"); # v1.20.0 $v = qv("v1.2.3"); # v1.2.3 $v = qv("1.2.3"); # v1.2.3 $v = qv("1.20"); # v1.20.0 In general, Dotted-Decimal Versions permit the greatest amount of freedom to specify a version, whereas Decimal Versions enforce a certain uniformity. Just like L</Decimal Versions>, Dotted-Decimal Versions can be used as L</Alpha Versions>. =head2 Alpha Versions For module authors using CPAN, the convention has been to note unstable releases with an underscore in the version string. (See L<CPAN>.) version.pm follows this convention and alpha releases will test as being newer than the more recent stable release, and less than the next stable release. Only the last element may be separated by an underscore: # Declaring use version 0.77; our $VERSION = version->declare("v1.2_3"); # Parsing $v1 = version->parse("v1.2_3"); $v1 = version->parse("1.002_003"); Note that you B<must> quote the version when writing an alpha Decimal version. The stringified form of Decimal versions will always be the same string that was used to initialize the version object. =head2 Regular Expressions for Version Parsing A formalized definition of the legal forms for version strings is included in the C<version::regex> class. Primitives are included for common elements, although they are scoped to the file so they are useful for reference purposes only. There are two publicly accessible scalars that can be used in other code (not exported): =over 4 =item C<$version::LAX> This regexp covers all of the legal forms allowed under the current version string parser. This is not to say that all of these forms are recommended, and some of them can only be used when quoted. For dotted decimals: v1.2 1.2345.6 v1.23_4 The leading 'v' is optional if two or more decimals appear. If only a single decimal is included, then the leading 'v' is required to trigger the dotted-decimal parsing. A leading zero is permitted, though not recommended except when quoted, because of the risk that Perl will treat the number as octal. A trailing underscore plus one or more digits denotes an alpha or development release (and must be quoted to be parsed properly). For decimal versions: 1 1.2345 1.2345_01 an integer portion, an optional decimal point, and optionally one or more digits to the right of the decimal are all required. A trailing underscore is permitted and a leading zero is permitted. Just like the lax dotted-decimal version, quoting the values is required for alpha/development forms to be parsed correctly. =item C<$version::STRICT> This regexp covers a much more limited set of formats and constitutes the best practices for initializing version objects. Whether you choose to employ decimal or dotted-decimal for is a personal preference however. =over 4 =item v1.234.5 For dotted-decimal versions, a leading 'v' is required, with three or more sub-versions of no more than three digits. A leading 0 (zero) before the first sub-version (in the above example, '1') is also prohibited. =item 2.3456 For decimal versions, an integer portion (no leading 0), a decimal point, and one or more digits to the right of the decimal are all required. =back =back Both of the provided scalars are already compiled as regular expressions and do not contain either anchors or implicit groupings, so they can be included in your own regular expressions freely. For example, consider the following code: ($pkg, $ver) =~ / ^[ \t]* use [ \t]+($PKGNAME) (?:[ \t]+($version::STRICT))? [ \t]*; /x; This would match a line of the form: use Foo::Bar::Baz v1.2.3; # legal only in Perl 5.8.1+ where C<$PKGNAME> is another regular expression that defines the legal forms for package names. =head1 IMPLEMENTATION DETAILS =head2 Equivalence between Decimal and Dotted-Decimal Versions When Perl 5.6.0 was released, the decision was made to provide a transformation between the old-style decimal versions and new-style dotted-decimal versions: 5.6.0 == 5.006000 5.005_04 == 5.5.40 The floating point number is taken and split first on the single decimal place, then each group of three digits to the right of the decimal makes up the next digit, and so on until the number of significant digits is exhausted, B<plus> enough trailing zeros to reach the next multiple of three. This was the method that version.pm adopted as well. Some examples may be helpful: equivalent decimal zero-padded dotted-decimal ------- ----------- -------------- 1.2 1.200 v1.200.0 1.02 1.020 v1.20.0 1.002 1.002 v1.2.0 1.0023 1.002300 v1.2.300 1.00203 1.002030 v1.2.30 1.002003 1.002003 v1.2.3 =head2 Quoting Rules Because of the nature of the Perl parsing and tokenizing routines, certain initialization values B<must> be quoted in order to correctly parse as the intended version, especially when using the C<declare> or L</qv()> methods. While you do not have to quote decimal numbers when creating version objects, it is always safe to quote B<all> initial values when using version.pm methods, as this will ensure that what you type is what is used. Additionally, if you quote your initializer, then the quoted value that goes B<in> will be exactly what comes B<out> when your $VERSION is printed (stringified). If you do not quote your value, Perl's normal numeric handling comes into play and you may not get back what you were expecting. If you use a mathematic formula that resolves to a floating point number, you are dependent on Perl's conversion routines to yield the version you expect. You are pretty safe by dividing by a power of 10, for example, but other operations are not likely to be what you intend. For example: $VERSION = version->new((qw$Revision: 1.4)[1]/10); print $VERSION; # yields 0.14 $V2 = version->new(100/9); # Integer overflow in decimal number print $V2; # yields something like 11.111.111.100 Perl 5.8.1 and beyond are able to automatically quote v-strings but that is not possible in earlier versions of Perl. In other words: $version = version->new("v2.5.4"); # legal in all versions of Perl $newvers = version->new(v2.5.4); # legal only in Perl >= 5.8.1 =head2 What about v-strings? There are two ways to enter v-strings: a bare number with two or more decimal points, or a bare number with one or more decimal points and a leading 'v' character (also bare). For example: $vs1 = 1.2.3; # encoded as \1\2\3 $vs2 = v1.2; # encoded as \1\2 However, the use of bare v-strings to initialize version objects is B<strongly> discouraged in all circumstances. Also, bare v-strings are not completely supported in any version of Perl prior to 5.8.1. If you insist on using bare v-strings with Perl > 5.6.0, be aware of the following limitations: 1) For Perl releases 5.6.0 through 5.8.0, the v-string code merely guesses, based on some characteristics of v-strings. You B<must> use a three part version, e.g. 1.2.3 or v1.2.3 in order for this heuristic to be successful. 2) For Perl releases 5.8.1 and later, v-strings have changed in the Perl core to be magical, which means that the version.pm code can automatically determine whether the v-string encoding was used. 3) In all cases, a version created using v-strings will have a stringified form that has a leading 'v' character, for the simple reason that sometimes it is impossible to tell whether one was present initially. =head2 Version Object Internals version.pm provides an overloaded version object that is designed to both encapsulate the author's intended $VERSION assignment as well as make it completely natural to use those objects as if they were numbers (e.g. for comparisons). To do this, a version object contains both the original representation as typed by the author, as well as a parsed representation to ease comparisons. Version objects employ L<overload> methods to simplify code that needs to compare, print, etc the objects. The internal structure of version objects is a blessed hash with several components: bless( { 'original' => 'v1.2.3_4', 'alpha' => 1, 'qv' => 1, 'version' => [ 1, 2, 3, 4 ] }, 'version' ); =over 4 =item original A faithful representation of the value used to initialize this version object. The only time this will not be precisely the same characters that exist in the source file is if a short dotted-decimal version like v1.2 was used (in which case it will contain 'v1.2'). This form is B<STRONGLY> discouraged, in that it will confuse you and your users. =item qv A boolean that denotes whether this is a decimal or dotted-decimal version. See L<version/is_qv()>. =item alpha A boolean that denotes whether this is an alpha version. NOTE: that the underscore can only appear in the last position. See L<version/is_alpha()>. =item version An array of non-negative integers that is used for comparison purposes with other version objects. =back =head2 Replacement UNIVERSAL::VERSION In addition to the version objects, this modules also replaces the core UNIVERSAL::VERSION function with one that uses version objects for its comparisons. The return from this operator is always the stringified form as a simple scalar (i.e. not an object), but the warning message generated includes either the stringified form or the normal form, depending on how it was called. For example: package Foo; $VERSION = 1.2; package Bar; $VERSION = "v1.3.5"; # works with all Perl's (since it is quoted) package main; use version; print $Foo::VERSION; # prints 1.2 print $Bar::VERSION; # prints 1.003005 eval "use foo 10"; print $@; # prints "foo version 10 required..." eval "use foo 1.3.5; # work in Perl 5.6.1 or better print $@; # prints "foo version 1.3.5 required..." eval "use bar 1.3.6"; print $@; # prints "bar version 1.3.6 required..." eval "use bar 1.004"; # note Decimal version print $@; # prints "bar version 1.004 required..." IMPORTANT NOTE: This may mean that code which searches for a specific string (to determine whether a given module is available) may need to be changed. It is always better to use the built-in comparison implicit in C<use> or C<require>, rather than manually poking at C<< class->VERSION >> and then doing a comparison yourself. The replacement UNIVERSAL::VERSION, when used as a function, like this: print $module->VERSION; will also exclusively return the stringified form. See L</Stringification> for more details. =head1 USAGE DETAILS =head2 Using modules that use version.pm As much as possible, the version.pm module remains compatible with all current code. However, if your module is using a module that has defined C<$VERSION> using the version class, there are a couple of things to be aware of. For purposes of discussion, we will assume that we have the following module installed: package Example; use version; $VERSION = qv('1.2.2'); ...module code here... 1; =over 4 =item Decimal versions always work Code of the form: use Example 1.002003; will always work correctly. The C<use> will perform an automatic C<$VERSION> comparison using the floating point number given as the first term after the module name (e.g. above 1.002.003). In this case, the installed module is too old for the requested line, so you would see an error like: Example version 1.002003 (v1.2.3) required--this is only version 1.002002 (v1.2.2)... =item Dotted-Decimal version work sometimes With Perl >= 5.6.2, you can also use a line like this: use Example 1.2.3; and it will again work (i.e. give the error message as above), even with releases of Perl which do not normally support v-strings (see L<What about v-strings?> above). This has to do with that fact that C<use> only checks to see if the second term I<looks like a number> and passes that to the replacement L<UNIVERSAL::VERSION|UNIVERSAL/VERSION>. This is not true in Perl 5.005_04, however, so you are B<strongly encouraged> to always use a Decimal version in your code, even for those versions of Perl which support the Dotted-Decimal version. =back =head2 Object Methods =over 4 =item new() Like many OO interfaces, the new() method is used to initialize version objects. If two arguments are passed to C<new()>, the B<second> one will be used as if it were prefixed with "v". This is to support historical use of the C<qw> operator with the CVS variable $Revision, which is automatically incremented by CVS every time the file is committed to the repository. In order to facilitate this feature, the following code can be employed: $VERSION = version->new(qw$Revision: 2.7 $); and the version object will be created as if the following code were used: $VERSION = version->new("v2.7"); In other words, the version will be automatically parsed out of the string, and it will be quoted to preserve the meaning CVS normally carries for versions. The CVS $Revision$ increments differently from Decimal versions (i.e. 1.10 follows 1.9), so it must be handled as if it were a Dotted-Decimal Version. A new version object can be created as a copy of an existing version object, either as a class method: $v1 = version->new(12.3); $v2 = version->new($v1); or as an object method: $v1 = version->new(12.3); $v2 = $v1->new(12.3); and in each case, $v1 and $v2 will be identical. NOTE: if you create a new object using an existing object like this: $v2 = $v1->new(); the new object B<will not> be a clone of the existing object. In the example case, $v2 will be an empty object of the same type as $v1. =back =over 4 =item qv() An alternate way to create a new version object is through the exported qv() sub. This is not strictly like other q? operators (like qq, qw), in that the only delimiters supported are parentheses (or spaces). It is the best way to initialize a short version without triggering the floating point interpretation. For example: $v1 = qv(1.2); # v1.2.0 $v2 = qv("1.2"); # also v1.2.0 As you can see, either a bare number or a quoted string can usually be used interchangeably, except in the case of a trailing zero, which must be quoted to be converted properly. For this reason, it is strongly recommended that all initializers to qv() be quoted strings instead of bare numbers. To prevent the C<qv()> function from being exported to the caller's namespace, either use version with a null parameter: use version (); or just require version, like this: require version; Both methods will prevent the import() method from firing and exporting the C<qv()> sub. =back For the subsequent examples, the following three objects will be used: $ver = version->new("1.2.3.4"); # see "Quoting Rules" $alpha = version->new("1.2.3_4"); # see "Alpha Versions" $nver = version->new(1.002); # see "Decimal Versions" =over 4 =item Normal Form For any version object which is initialized with multiple decimal places (either quoted or if possible v-string), or initialized using the L<qv()|version/qv()> operator, the stringified representation is returned in a normalized or reduced form (no extraneous zeros), and with a leading 'v': print $ver->normal; # prints as v1.2.3.4 print $ver->stringify; # ditto print $ver; # ditto print $nver->normal; # prints as v1.2.0 print $nver->stringify; # prints as 1.002, # see "Stringification" In order to preserve the meaning of the processed version, the normalized representation will always contain at least three sub terms. In other words, the following is guaranteed to always be true: my $newver = version->new($ver->stringify); if ($newver eq $ver ) # always true {...} =back =over 4 =item Numification Although all mathematical operations on version objects are forbidden by default, it is possible to retrieve a number which corresponds to the version object through the use of the $obj->numify method. For formatting purposes, when displaying a number which corresponds a version object, all sub versions are assumed to have three decimal places. So for example: print $ver->numify; # prints 1.002003004 print $nver->numify; # prints 1.002 Unlike the stringification operator, there is never any need to append trailing zeros to preserve the correct version value. =back =over 4 =item Stringification The default stringification for version objects returns exactly the same string as was used to create it, whether you used C<new()> or C<qv()>, with one exception. The sole exception is if the object was created using C<qv()> and the initializer did not have two decimal places or a leading 'v' (both optional), then the stringified form will have a leading 'v' prepended, in order to support round-trip processing. For example: Initialized as Stringifies to ============== ============== version->new("1.2") 1.2 version->new("v1.2") v1.2 qv("1.2.3") 1.2.3 qv("v1.3.5") v1.3.5 qv("1.2") v1.2 ### exceptional case See also L<UNIVERSAL::VERSION|UNIVERSAL/VERSION>, as this also returns the stringified form when used as a class method. IMPORTANT NOTE: There is one exceptional cases shown in the above table where the "initializer" is not stringwise equivalent to the stringified representation. If you use the C<qv>() operator on a version without a leading 'v' B<and> with only a single decimal place, the stringified output will have a leading 'v', to preserve the sense. See the L</qv()> operator for more details. IMPORTANT NOTE 2: Attempting to bypass the normal stringification rules by manually applying L<numify()|version/numify()> and L<normal()|version/normal()> will sometimes yield surprising results: print version->new(version->new("v1.0")->numify)->normal; # v1.0.0 The reason for this is that the L<numify()|version/numify()> operator will turn "v1.0" into the equivalent string "1.000000". Forcing the outer version object to L<normal()|version/normal()> form will display the mathematically equivalent "v1.0.0". As the example in L</new()> shows, you can always create a copy of an existing version object with the same value by the very compact: $v2 = $v1->new($v1); and be assured that both C<$v1> and C<$v2> will be completely equivalent, down to the same internal representation as well as stringification. =back =over 4 =item Comparison operators Both C<cmp> and C<E<lt>=E<gt>> operators perform the same comparison between terms (upgrading to a version object automatically). Perl automatically generates all of the other comparison operators based on those two. In addition to the obvious equalities listed below, appending a single trailing 0 term does not change the value of a version for comparison purposes. In other words "v1.2" and "1.2.0" will compare as identical. For example, the following relations hold: As Number As String Truth Value ------------- ---------------- ----------- $ver > 1.0 $ver gt "1.0" true $ver < 2.5 $ver lt true $ver != 1.3 $ver ne "1.3" true $ver == 1.2 $ver eq "1.2" false $ver == 1.2.3.4 $ver eq "1.2.3.4" see discussion below It is probably best to chose either the Decimal notation or the string notation and stick with it, to reduce confusion. Perl6 version objects B<may> only support Decimal comparisons. See also L<Quoting Rules>. WARNING: Comparing version with unequal numbers of decimal points (whether explicitly or implicitly initialized), may yield unexpected results at first glance. For example, the following inequalities hold: version->new(0.96) > version->new(0.95); # 0.960.0 > 0.950.0 version->new("0.96.1") < version->new(0.95); # 0.096.1 < 0.950.0 For this reason, it is best to use either exclusively L<Decimal Versions> or L<Dotted-Decimal Versions> with multiple decimal points. =back =over 4 =item Logical Operators If you need to test whether a version object has been initialized, you can simply test it directly: $vobj = version->new($something); if ( $vobj ) # true only if $something was non-blank You can also test whether a version object is an alpha version, for example to prevent the use of some feature not present in the main release: $vobj = version->new("1.2_3"); # MUST QUOTE ...later... if ( $vobj->is_alpha ) # True =back =head1 AUTHOR John Peacock E<lt>jpeacock@cpan.orgE<gt> =head1 SEE ALSO L<perl>. =cut version/regex.pm 0000644 00000007750 15037233332 0007713 0 ustar 00 package version::regex; use strict; our $VERSION = 0.9924; #--------------------------------------------------------------------------# # Version regexp components #--------------------------------------------------------------------------# # Fraction part of a decimal version number. This is a common part of # both strict and lax decimal versions my $FRACTION_PART = qr/\.[0-9]+/; # First part of either decimal or dotted-decimal strict version number. # Unsigned integer with no leading zeroes (except for zero itself) to # avoid confusion with octal. my $STRICT_INTEGER_PART = qr/0|[1-9][0-9]*/; # First part of either decimal or dotted-decimal lax version number. # Unsigned integer, but allowing leading zeros. Always interpreted # as decimal. However, some forms of the resulting syntax give odd # results if used as ordinary Perl expressions, due to how perl treats # octals. E.g. # version->new("010" ) == 10 # version->new( 010 ) == 8 # version->new( 010.2) == 82 # "8" . "2" my $LAX_INTEGER_PART = qr/[0-9]+/; # Second and subsequent part of a strict dotted-decimal version number. # Leading zeroes are permitted, and the number is always decimal. # Limited to three digits to avoid overflow when converting to decimal # form and also avoid problematic style with excessive leading zeroes. my $STRICT_DOTTED_DECIMAL_PART = qr/\.[0-9]{1,3}/; # Second and subsequent part of a lax dotted-decimal version number. # Leading zeroes are permitted, and the number is always decimal. No # limit on the numerical value or number of digits, so there is the # possibility of overflow when converting to decimal form. my $LAX_DOTTED_DECIMAL_PART = qr/\.[0-9]+/; # Alpha suffix part of lax version number syntax. Acts like a # dotted-decimal part. my $LAX_ALPHA_PART = qr/_[0-9]+/; #--------------------------------------------------------------------------# # Strict version regexp definitions #--------------------------------------------------------------------------# # Strict decimal version number. our $STRICT_DECIMAL_VERSION = qr/ $STRICT_INTEGER_PART $FRACTION_PART? /x; # Strict dotted-decimal version number. Must have both leading "v" and # at least three parts, to avoid confusion with decimal syntax. our $STRICT_DOTTED_DECIMAL_VERSION = qr/ v $STRICT_INTEGER_PART $STRICT_DOTTED_DECIMAL_PART{2,} /x; # Complete strict version number syntax -- should generally be used # anchored: qr/ \A $STRICT \z /x our $STRICT = qr/ $STRICT_DECIMAL_VERSION | $STRICT_DOTTED_DECIMAL_VERSION /x; #--------------------------------------------------------------------------# # Lax version regexp definitions #--------------------------------------------------------------------------# # Lax decimal version number. Just like the strict one except for # allowing an alpha suffix or allowing a leading or trailing # decimal-point our $LAX_DECIMAL_VERSION = qr/ $LAX_INTEGER_PART (?: $FRACTION_PART | \. )? $LAX_ALPHA_PART? | $FRACTION_PART $LAX_ALPHA_PART? /x; # Lax dotted-decimal version number. Distinguished by having either # leading "v" or at least three non-alpha parts. Alpha part is only # permitted if there are at least two non-alpha parts. Strangely # enough, without the leading "v", Perl takes .1.2 to mean v0.1.2, # so when there is no "v", the leading part is optional our $LAX_DOTTED_DECIMAL_VERSION = qr/ v $LAX_INTEGER_PART (?: $LAX_DOTTED_DECIMAL_PART+ $LAX_ALPHA_PART? )? | $LAX_INTEGER_PART? $LAX_DOTTED_DECIMAL_PART{2,} $LAX_ALPHA_PART? /x; # Complete lax version number syntax -- should generally be used # anchored: qr/ \A $LAX \z /x # # The string 'undef' is a special case to make for easier handling # of return values from ExtUtils::MM->parse_version our $LAX = qr/ undef | $LAX_DOTTED_DECIMAL_VERSION | $LAX_DECIMAL_VERSION /x; #--------------------------------------------------------------------------# # Preloaded methods go here. sub is_strict { defined $_[0] && $_[0] =~ qr/ \A $STRICT \z /x } sub is_lax { defined $_[0] && $_[0] =~ qr/ \A $LAX \z /x } 1; Params/Util.pm 0000644 00000053547 15037233333 0007262 0 ustar 00 package Params::Util; =pod =head1 NAME Params::Util - Simple, compact and correct param-checking functions =head1 SYNOPSIS # Import some functions use Params::Util qw{_SCALAR _HASH _INSTANCE}; # If you are lazy, or need a lot of them... use Params::Util ':ALL'; sub foo { my $object = _INSTANCE(shift, 'Foo') or return undef; my $image = _SCALAR(shift) or return undef; my $options = _HASH(shift) or return undef; # etc... } =head1 DESCRIPTION C<Params::Util> provides a basic set of importable functions that makes checking parameters a hell of a lot easier While they can be (and are) used in other contexts, the main point behind this module is that the functions B<both> Do What You Mean, and Do The Right Thing, so they are most useful when you are getting params passed into your code from someone and/or somewhere else and you can't really trust the quality. Thus, C<Params::Util> is of most use at the edges of your API, where params and data are coming in from outside your code. The functions provided by C<Params::Util> check in the most strictly correct manner known, are documented as thoroughly as possible so their exact behaviour is clear, and heavily tested so make sure they are not fooled by weird data and Really Bad Things. To use, simply load the module providing the functions you want to use as arguments (as shown in the SYNOPSIS). To aid in maintainability, C<Params::Util> will B<never> export by default. You must explicitly name the functions you want to export, or use the C<:ALL> param to just have it export everything (although this is not recommended if you have any _FOO functions yourself with which future additions to C<Params::Util> may clash) =head1 FUNCTIONS =cut use 5.00503; use strict; require overload; require Exporter; require Scalar::Util; require DynaLoader; use vars qw{$VERSION @ISA @EXPORT_OK %EXPORT_TAGS}; $VERSION = '1.07'; @ISA = qw{ Exporter DynaLoader }; @EXPORT_OK = qw{ _STRING _IDENTIFIER _CLASS _CLASSISA _SUBCLASS _DRIVER _CLASSDOES _NUMBER _POSINT _NONNEGINT _SCALAR _SCALAR0 _ARRAY _ARRAY0 _ARRAYLIKE _HASH _HASH0 _HASHLIKE _CODE _CODELIKE _INVOCANT _REGEX _INSTANCE _INSTANCEDOES _SET _SET0 _HANDLE }; %EXPORT_TAGS = ( ALL => \@EXPORT_OK ); eval { local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY}; bootstrap Params::Util $VERSION; 1; } unless $ENV{PERL_PARAMS_UTIL_PP}; # Use a private pure-perl copy of looks_like_number if the version of # Scalar::Util is old (for whatever reason). my $SU = eval "$Scalar::Util::VERSION" || 0; if ( $SU >= 1.18 ) { Scalar::Util->import('looks_like_number'); } else { eval <<'END_PERL'; sub looks_like_number { local $_ = shift; # checks from perlfaq4 return 0 if !defined($_); if (ref($_)) { return overload::Overloaded($_) ? defined(0 + $_) : 0; } return 1 if (/^[+-]?[0-9]+$/); # is a +/- integer return 1 if (/^([+-]?)(?=[0-9]|\.[0-9])[0-9]*(\.[0-9]*)?([Ee]([+-]?[0-9]+))?$/); # a C float return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) or ($] >= 5.006001 and /^Inf$/i); 0; } END_PERL } ##################################################################### # Param Checking Functions =pod =head2 _STRING $string The C<_STRING> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a normal non-false string of non-zero length. Note that this will NOT do anything magic to deal with the special C<'0'> false negative case, but will return it. # '0' not considered valid data my $name = _STRING(shift) or die "Bad name"; # '0' is considered valid data my $string = _STRING($_[0]) ? shift : die "Bad string"; Please also note that this function expects a normal string. It does not support overloading or other magic techniques to get a string. Returns the string as a conveince if it is a valid string, or C<undef> if not. =cut eval <<'END_PERL' unless defined &_STRING; sub _STRING ($) { (defined $_[0] and ! ref $_[0] and length($_[0])) ? $_[0] : undef; } END_PERL =pod =head2 _IDENTIFIER $string The C<_IDENTIFIER> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a string that is a valid Perl identifier. Returns the string as a convenience if it is a valid identifier, or C<undef> if not. =cut eval <<'END_PERL' unless defined &_IDENTIFIER; sub _IDENTIFIER ($) { (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*\z/s) ? $_[0] : undef; } END_PERL =pod =head2 _CLASS $string The C<_CLASS> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a string that is a valid Perl class. This function only checks that the format is valid, not that the class is actually loaded. It also assumes "normalised" form, and does not accept class names such as C<::Foo> or C<D'Oh>. Returns the string as a convenience if it is a valid class name, or C<undef> if not. =cut eval <<'END_PERL' unless defined &_CLASS; sub _CLASS ($) { (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s) ? $_[0] : undef; } END_PERL =pod =head2 _CLASSISA $string, $class The C<_CLASSISA> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a string that is a particularly class, or a subclass of it. This function checks that the format is valid and calls the -E<gt>isa method on the class name. It does not check that the class is actually loaded. It also assumes "normalised" form, and does not accept class names such as C<::Foo> or C<D'Oh>. Returns the string as a convenience if it is a valid class name, or C<undef> if not. =cut eval <<'END_PERL' unless defined &_CLASSISA; sub _CLASSISA ($$) { (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0]->isa($_[1])) ? $_[0] : undef; } END_PERL =head2 _CLASSDOES $string, $role This routine behaves exactly like C<L</_CLASSISA>>, but checks with C<< ->DOES >> rather than C<< ->isa >>. This is probably only a good idea to use on Perl 5.10 or later, when L<UNIVERSAL::DOES|UNIVERSAL::DOES/DOES> has been implemented. =cut eval <<'END_PERL' unless defined &_CLASSDOES; sub _CLASSDOES ($$) { (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0]->DOES($_[1])) ? $_[0] : undef; } END_PERL =pod =head2 _SUBCLASS $string, $class The C<_SUBCLASS> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a string that is a subclass of a specified class. This function checks that the format is valid and calls the -E<gt>isa method on the class name. It does not check that the class is actually loaded. It also assumes "normalised" form, and does not accept class names such as C<::Foo> or C<D'Oh>. Returns the string as a convenience if it is a valid class name, or C<undef> if not. =cut eval <<'END_PERL' unless defined &_SUBCLASS; sub _SUBCLASS ($$) { (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0] ne $_[1] and $_[0]->isa($_[1])) ? $_[0] : undef; } END_PERL =pod =head2 _NUMBER $scalar The C<_NUMBER> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a number. That is, it is defined and perl thinks it's a number. This function is basically a Params::Util-style wrapper around the L<Scalar::Util> C<looks_like_number> function. Returns the value as a convience, or C<undef> if the value is not a number. =cut eval <<'END_PERL' unless defined &_NUMBER; sub _NUMBER ($) { ( defined $_[0] and ! ref $_[0] and looks_like_number($_[0]) ) ? $_[0] : undef; } END_PERL =pod =head2 _POSINT $integer The C<_POSINT> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a positive integer (of any length). Returns the value as a convience, or C<undef> if the value is not a positive integer. The name itself is derived from the XML schema constraint of the same name. =cut eval <<'END_PERL' unless defined &_POSINT; sub _POSINT ($) { (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[1-9]\d*$/) ? $_[0] : undef; } END_PERL =pod =head2 _NONNEGINT $integer The C<_NONNEGINT> function is intended to be imported into your package, and provides a convenient way to test to see if a value is a non-negative integer (of any length). That is, a positive integer, or zero. Returns the value as a convience, or C<undef> if the value is not a non-negative integer. As with other tests that may return false values, care should be taken to test via "defined" in boolean validy contexts. unless ( defined _NONNEGINT($value) ) { die "Invalid value"; } The name itself is derived from the XML schema constraint of the same name. =cut eval <<'END_PERL' unless defined &_NONNEGINT; sub _NONNEGINT ($) { (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^(?:0|[1-9]\d*)$/) ? $_[0] : undef; } END_PERL =pod =head2 _SCALAR \$scalar The C<_SCALAR> function is intended to be imported into your package, and provides a convenient way to test for a raw and unblessed C<SCALAR> reference, with content of non-zero length. For a version that allows zero length C<SCALAR> references, see the C<_SCALAR0> function. Returns the C<SCALAR> reference itself as a convenience, or C<undef> if the value provided is not a C<SCALAR> reference. =cut eval <<'END_PERL' unless defined &_SCALAR; sub _SCALAR ($) { (ref $_[0] eq 'SCALAR' and defined ${$_[0]} and ${$_[0]} ne '') ? $_[0] : undef; } END_PERL =pod =head2 _SCALAR0 \$scalar The C<_SCALAR0> function is intended to be imported into your package, and provides a convenient way to test for a raw and unblessed C<SCALAR0> reference, allowing content of zero-length. For a simpler "give me some content" version that requires non-zero length, C<_SCALAR> function. Returns the C<SCALAR> reference itself as a convenience, or C<undef> if the value provided is not a C<SCALAR> reference. =cut eval <<'END_PERL' unless defined &_SCALAR0; sub _SCALAR0 ($) { ref $_[0] eq 'SCALAR' ? $_[0] : undef; } END_PERL =pod =head2 _ARRAY $value The C<_ARRAY> function is intended to be imported into your package, and provides a convenient way to test for a raw and unblessed C<ARRAY> reference containing B<at least> one element of any kind. For a more basic form that allows zero length ARRAY references, see the C<_ARRAY0> function. Returns the C<ARRAY> reference itself as a convenience, or C<undef> if the value provided is not an C<ARRAY> reference. =cut eval <<'END_PERL' unless defined &_ARRAY; sub _ARRAY ($) { (ref $_[0] eq 'ARRAY' and @{$_[0]}) ? $_[0] : undef; } END_PERL =pod =head2 _ARRAY0 $value The C<_ARRAY0> function is intended to be imported into your package, and provides a convenient way to test for a raw and unblessed C<ARRAY> reference, allowing C<ARRAY> references that contain no elements. For a more basic "An array of something" form that also requires at least one element, see the C<_ARRAY> function. Returns the C<ARRAY> reference itself as a convenience, or C<undef> if the value provided is not an C<ARRAY> reference. =cut eval <<'END_PERL' unless defined &_ARRAY0; sub _ARRAY0 ($) { ref $_[0] eq 'ARRAY' ? $_[0] : undef; } END_PERL =pod =head2 _ARRAYLIKE $value The C<_ARRAYLIKE> function tests whether a given scalar value can respond to array dereferencing. If it can, the value is returned. If it cannot, C<_ARRAYLIKE> returns C<undef>. =cut eval <<'END_PERL' unless defined &_ARRAYLIKE; sub _ARRAYLIKE { (defined $_[0] and ref $_[0] and ( (Scalar::Util::reftype($_[0]) eq 'ARRAY') or overload::Method($_[0], '@{}') )) ? $_[0] : undef; } END_PERL =pod =head2 _HASH $value The C<_HASH> function is intended to be imported into your package, and provides a convenient way to test for a raw and unblessed C<HASH> reference with at least one entry. For a version of this function that allows the C<HASH> to be empty, see the C<_HASH0> function. Returns the C<HASH> reference itself as a convenience, or C<undef> if the value provided is not an C<HASH> reference. =cut eval <<'END_PERL' unless defined &_HASH; sub _HASH ($) { (ref $_[0] eq 'HASH' and scalar %{$_[0]}) ? $_[0] : undef; } END_PERL =pod =head2 _HASH0 $value The C<_HASH0> function is intended to be imported into your package, and provides a convenient way to test for a raw and unblessed C<HASH> reference, regardless of the C<HASH> content. For a simpler "A hash of something" version that requires at least one element, see the C<_HASH> function. Returns the C<HASH> reference itself as a convenience, or C<undef> if the value provided is not an C<HASH> reference. =cut eval <<'END_PERL' unless defined &_HASH0; sub _HASH0 ($) { ref $_[0] eq 'HASH' ? $_[0] : undef; } END_PERL =pod =head2 _HASHLIKE $value The C<_HASHLIKE> function tests whether a given scalar value can respond to hash dereferencing. If it can, the value is returned. If it cannot, C<_HASHLIKE> returns C<undef>. =cut eval <<'END_PERL' unless defined &_HASHLIKE; sub _HASHLIKE { (defined $_[0] and ref $_[0] and ( (Scalar::Util::reftype($_[0]) eq 'HASH') or overload::Method($_[0], '%{}') )) ? $_[0] : undef; } END_PERL =pod =head2 _CODE $value The C<_CODE> function is intended to be imported into your package, and provides a convenient way to test for a raw and unblessed C<CODE> reference. Returns the C<CODE> reference itself as a convenience, or C<undef> if the value provided is not an C<CODE> reference. =cut eval <<'END_PERL' unless defined &_CODE; sub _CODE ($) { ref $_[0] eq 'CODE' ? $_[0] : undef; } END_PERL =pod =head2 _CODELIKE $value The C<_CODELIKE> is the more generic version of C<_CODE>. Unlike C<_CODE>, which checks for an explicit C<CODE> reference, the C<_CODELIKE> function also includes things that act like them, such as blessed objects that overload C<'&{}'>. Please note that in the case of objects overloaded with '&{}', you will almost always end up also testing it in 'bool' context at some stage. For example: sub foo { my $code1 = _CODELIKE(shift) or die "No code param provided"; my $code2 = _CODELIKE(shift); if ( $code2 ) { print "Got optional second code param"; } } As such, you will most likely always want to make sure your class has at least the following to allow it to evaluate to true in boolean context. # Always evaluate to true in boolean context use overload 'bool' => sub () { 1 }; Returns the callable value as a convenience, or C<undef> if the value provided is not callable. Note - This function was formerly known as _CALLABLE but has been renamed for greater symmetry with the other _XXXXLIKE functions. The use of _CALLABLE has been deprecated. It will continue to work, but with a warning, until end-2006, then will be removed. I apologise for any inconvenience caused. =cut eval <<'END_PERL' unless defined &_CODELIKE; sub _CODELIKE($) { ( (Scalar::Util::reftype($_[0])||'') eq 'CODE' or Scalar::Util::blessed($_[0]) and overload::Method($_[0],'&{}') ) ? $_[0] : undef; } END_PERL =pod =head2 _INVOCANT $value This routine tests whether the given value is a valid method invocant. This can be either an instance of an object, or a class name. If so, the value itself is returned. Otherwise, C<_INVOCANT> returns C<undef>. =cut eval <<'END_PERL' unless defined &_INVOCANT; sub _INVOCANT($) { (defined $_[0] and (defined Scalar::Util::blessed($_[0]) or # We used to check for stash definedness, but any class-like name is a # valid invocant for UNIVERSAL methods, so we stopped. -- rjbs, 2006-07-02 Params::Util::_CLASS($_[0])) ) ? $_[0] : undef; } END_PERL =pod =head2 _INSTANCE $object, $class The C<_INSTANCE> function is intended to be imported into your package, and provides a convenient way to test for an object of a particular class in a strictly correct manner. Returns the object itself as a convenience, or C<undef> if the value provided is not an object of that type. =cut eval <<'END_PERL' unless defined &_INSTANCE; sub _INSTANCE ($$) { (Scalar::Util::blessed($_[0]) and $_[0]->isa($_[1])) ? $_[0] : undef; } END_PERL =head2 _INSTANCEDOES $object, $role This routine behaves exactly like C<L</_INSTANCE>>, but checks with C<< ->DOES >> rather than C<< ->isa >>. This is probably only a good idea to use on Perl 5.10 or later, when L<UNIVERSAL::DOES|UNIVERSAL::DOES/DOES> has been implemented. =cut eval <<'END_PERL' unless defined &_INSTANCEDOES; sub _INSTANCEDOES ($$) { (Scalar::Util::blessed($_[0]) and $_[0]->DOES($_[1])) ? $_[0] : undef; } END_PERL =pod =head2 _REGEX $value The C<_REGEX> function is intended to be imported into your package, and provides a convenient way to test for a regular expression. Returns the value itself as a convenience, or C<undef> if the value provided is not a regular expression. =cut eval <<'END_PERL' unless defined &_REGEX; sub _REGEX ($) { (defined $_[0] and 'Regexp' eq ref($_[0])) ? $_[0] : undef; } END_PERL =pod =head2 _SET \@array, $class The C<_SET> function is intended to be imported into your package, and provides a convenient way to test for set of at least one object of a particular class in a strictly correct manner. The set is provided as a reference to an C<ARRAY> of objects of the class provided. For an alternative function that allows zero-length sets, see the C<_SET0> function. Returns the C<ARRAY> reference itself as a convenience, or C<undef> if the value provided is not a set of that class. =cut eval <<'END_PERL' unless defined &_SET; sub _SET ($$) { my $set = shift; _ARRAY($set) or return undef; foreach my $item ( @$set ) { _INSTANCE($item,$_[0]) or return undef; } $set; } END_PERL =pod =head2 _SET0 \@array, $class The C<_SET0> function is intended to be imported into your package, and provides a convenient way to test for a set of objects of a particular class in a strictly correct manner, allowing for zero objects. The set is provided as a reference to an C<ARRAY> of objects of the class provided. For an alternative function that requires at least one object, see the C<_SET> function. Returns the C<ARRAY> reference itself as a convenience, or C<undef> if the value provided is not a set of that class. =cut eval <<'END_PERL' unless defined &_SET0; sub _SET0 ($$) { my $set = shift; _ARRAY0($set) or return undef; foreach my $item ( @$set ) { _INSTANCE($item,$_[0]) or return undef; } $set; } END_PERL =pod =head2 _HANDLE The C<_HANDLE> function is intended to be imported into your package, and provides a convenient way to test whether or not a single scalar value is a file handle. Unfortunately, in Perl the definition of a file handle can be a little bit fuzzy, so this function is likely to be somewhat imperfect (at first anyway). That said, it is implement as well or better than the other file handle detectors in existance (and we stole from the best of them). =cut # We're doing this longhand for now. Once everything is perfect, # we'll compress this into something that compiles more efficiently. # Further, testing file handles is not something that is generally # done millions of times, so doing it slowly is not a big speed hit. eval <<'END_PERL' unless defined &_HANDLE; sub _HANDLE { my $it = shift; # It has to be defined, of course unless ( defined $it ) { return undef; } # Normal globs are considered to be file handles if ( ref $it eq 'GLOB' ) { return $it; } # Check for a normal tied filehandle # Side Note: 5.5.4's tied() and can() doesn't like getting undef if ( tied($it) and tied($it)->can('TIEHANDLE') ) { return $it; } # There are no other non-object handles that we support unless ( Scalar::Util::blessed($it) ) { return undef; } # Check for a common base classes for conventional IO::Handle object if ( $it->isa('IO::Handle') ) { return $it; } # Check for tied file handles using Tie::Handle if ( $it->isa('Tie::Handle') ) { return $it; } # IO::Scalar is not a proper seekable, but it is valid is a # regular file handle if ( $it->isa('IO::Scalar') ) { return $it; } # Yet another special case for IO::String, which refuses (for now # anyway) to become a subclass of IO::Handle. if ( $it->isa('IO::String') ) { return $it; } # This is not any sort of object we know about return undef; } END_PERL =pod =head2 _DRIVER $string sub foo { my $class = _DRIVER(shift, 'My::Driver::Base') or die "Bad driver"; ... } The C<_DRIVER> function is intended to be imported into your package, and provides a convenient way to load and validate a driver class. The most common pattern when taking a driver class as a parameter is to check that the name is a class (i.e. check against _CLASS) and then to load the class (if it exists) and then ensure that the class returns true for the isa method on some base driver name. Return the value as a convenience, or C<undef> if the value is not a class name, the module does not exist, the module does not load, or the class fails the isa test. =cut eval <<'END_PERL' unless defined &_DRIVER; sub _DRIVER ($$) { (defined _CLASS($_[0]) and eval "require $_[0];" and ! $@ and $_[0]->isa($_[1]) and $_[0] ne $_[1]) ? $_[0] : undef; } END_PERL 1; =pod =head1 TO DO - Add _CAN to help resolve the UNIVERSAL::can debacle - Would be even nicer if someone would demonstrate how the hell to build a Module::Install dist of the ::Util dual Perl/XS type. :/ - Implement an assertion-like version of this module, that dies on error. - Implement a Test:: version of this module, for use in testing =head1 SUPPORT Bugs should be reported via the CPAN bug tracker at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Params-Util> For other issues, contact the author. =head1 AUTHOR Adam Kennedy E<lt>adamk@cpan.orgE<gt> =head1 SEE ALSO L<Params::Validate> =head1 COPYRIGHT Copyright 2005 - 2012 Adam Kennedy. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. =cut Filter/tee.pm 0000644 00000001431 15037233333 0007105 0 ustar 00 package Filter::tee ; require 5.006 ; require XSLoader; our $VERSION = "1.58" ; XSLoader::load('Filter::tee'); 1; __END__ =head1 NAME Filter::tee - tee source filter =head1 SYNOPSIS use Filter::tee 'filename' ; use Filter::tee '>filename' ; use Filter::tee '>>filename' ; =head1 DESCRIPTION This filter copies all text from the line after the C<use> in the current source file to the file specified by the parameter C<filename>. By default and when the filename is prefixed with a '>' the output file will be emptied first if it already exists. If the output filename is prefixed with '>>' it will be opened for appending. This filter is useful as a debugging aid when developing other source filters. =head1 AUTHOR Paul Marquess =head1 DATE 20th June 1995. =cut Filter/sh.pm 0000644 00000002561 15037233333 0006747 0 ustar 00 package Filter::sh; use Filter::Util::Exec ; use strict ; use warnings ; our $VERSION = "1.58" ; sub import { my($self, @args) = @_ ; unless (@args) { require Carp; Carp::croak("Usage: use Filter::sh 'command'"); } if ($^O eq 'MSWin32') { Filter::Util::Exec::filter_add ($self, 'cmd', '/c', "@args") ; } else { Filter::Util::Exec::filter_add ($self, 'sh', '-c', "@args") ; } } 1 ; __END__ =head1 NAME Filter::sh - sh source filter =head1 SYNOPSIS use Filter::sh 'command' ; =head1 DESCRIPTION This filter pipes the current source file through the program which corresponds to the C<command> parameter using the Bourne shell. As with all source filters its scope is limited to the current source file only. Every file you want to be processed by the filter must have a use Filter::sh 'command' ; near the top. Here is an example script which uses the filter: use Filter::sh 'tr XYZ PQR' ; $a = 1 ; print "XYZ a = $a\n" ; And here is what it will output: PQR = 1 =head1 WARNING You should be I<very> careful when using this filter. Because of the way the filter is implemented it is possible to end up with deadlock. Be especially careful when stacking multiple instances of the filter in a single source file. =head1 AUTHOR Paul Marquess =head1 DATE 11th December 1995. =cut Filter/decrypt.pm 0000644 00000005667 15037233333 0010021 0 ustar 00 package Filter::decrypt ; require 5.006 ; require XSLoader; our $VERSION = "1.58" ; XSLoader::load('Filter::decrypt'); 1; __END__ =head1 NAME Filter::decrypt - template for a decrypt source filter =head1 SYNOPSIS use Filter::decrypt ; =head1 DESCRIPTION This is a sample decrypting source filter. Although this is a fully functional source filter and it does implement a I<very> simple decrypt algorithm, it is I<not> intended to be used as it is supplied. Consider it to be a template which you can combine with a proper decryption algorithm to develop your own decryption filter. =head1 WARNING It is important to note that a decryption filter can I<never> provide complete security against attack. At some point the parser within Perl needs to be able to scan the original decrypted source. That means that at some stage fragments of the source will exist in a memory buffer. Also, with the introduction of the Perl Compiler backend modules, and the B::Deparse module in particular, using a Source Filter to hide source code is becoming an increasingly futile exercise. The best you can hope to achieve by decrypting your Perl source using a source filter is to make it unavailable to the casual user. Given that proviso, there are a number of things you can do to make life more difficult for the prospective cracker. =over 5 =item 1. Strip the Perl binary to remove all symbols. =item 2. Build the decrypt extension using static linking. If the extension is provided as a dynamic module, there is nothing to stop someone from linking it at run time with a modified Perl binary. =item 3. Do not build Perl with C<-DDEBUGGING>. If you do then your source can be retrieved with the C<-DP> command line option. The sample filter contains logic to detect the C<DEBUGGING> option. =item 4. Do not build Perl with C debugging support enabled. =item 5. Do not implement the decryption filter as a sub-process (like the cpp source filter). It is possible to peek into the pipe that connects to the sub-process. =item 6. Check that the Perl Compiler isn't being used. There is code in the BOOT: section of decrypt.xs that shows how to detect the presence of the Compiler. Make sure you include it in your module. Assuming you haven't taken any steps to spot when the compiler is in use and you have an encrypted Perl script called "myscript.pl", you can get access the source code inside it using the perl Compiler backend, like this perl -MO=Deparse myscript.pl Note that even if you have included the BOOT: test, it is still possible to use the Deparse module to get the source code for individual subroutines. =item 7. Do not use the decrypt filter as-is. The algorithm used in this filter has been purposefully left simple. =back If you feel that the source filtering mechanism is not secure enough you could try using the unexec/undump method. See the Perl FAQ for further details. =head1 AUTHOR Paul Marquess =head1 DATE 19th December 1995 =cut Filter/Util/Exec.pm 0000644 00000002274 15037233333 0010137 0 ustar 00 package Filter::Util::Exec ; require 5.006 ; require XSLoader; our $VERSION = "1.58" ; XSLoader::load('Filter::Util::Exec'); 1 ; __END__ =head1 NAME Filter::Util::Exec - exec source filter =head1 SYNOPSIS use Filter::Util::Exec; =head1 DESCRIPTION This module is provides the interface to allow the creation of I<Source Filters> which use a Unix coprocess. See L<Filter::exec>, L<Filter::cpp> and L<Filter::sh> for examples of the use of this module. Note that the size of the buffers is limited to 32-bit. =head2 B<filter_add()> The function, C<filter_add> installs a filter. It takes one parameter which should be a reference. The kind of reference used will dictate which of the two filter types will be used. If a CODE reference is used then a I<closure filter> will be assumed. If a CODE reference is not used, a I<method filter> will be assumed. In a I<method filter>, the reference can be used to store context information. The reference will be I<blessed> into the package by C<filter_add>. See L<Filter::Util::Call> for examples of using context information using both I<method filters> and I<closure filters>. =head1 AUTHOR Paul Marquess =head1 DATE 11th December 1995. =cut Filter/Util/Call.pm 0000644 00000033303 15037233333 0010123 0 ustar 00 # Call.pm # # Copyright (c) 1995-2011 Paul Marquess. All rights reserved. # Copyright (c) 2011-2014 Reini Urban. All rights reserved. # Copyright (c) 2014-2017 cPanel Inc. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. package Filter::Util::Call ; require 5.006 ; # our require Exporter; use XSLoader (); use strict; use warnings; our @ISA = qw(Exporter); our @EXPORT = qw( filter_add filter_del filter_read filter_read_exact) ; our $VERSION = "1.58" ; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; sub filter_read_exact($) { my ($size) = @_ ; my ($left) = $size ; my ($status) ; unless ( $size > 0 ) { require Carp; Carp::croak("filter_read_exact: size parameter must be > 0"); } # try to read a block which is exactly $size bytes long while ($left and ($status = filter_read($left)) > 0) { $left = $size - length $_ ; } # EOF with pending data is a special case return 1 if $status == 0 and length $_ ; return $status ; } sub filter_add($) { my($obj) = @_ ; # Did we get a code reference? my $coderef = (ref $obj eq 'CODE'); # If the parameter isn't already a reference, make it one. if (!$coderef and (!ref($obj) or ref($obj) =~ /^ARRAY|HASH$/)) { $obj = bless (\$obj, (caller)[0]); } # finish off the installation of the filter in C. Filter::Util::Call::real_import($obj, (caller)[0], $coderef) ; } XSLoader::load('Filter::Util::Call'); 1; __END__ =head1 NAME Filter::Util::Call - Perl Source Filter Utility Module =head1 SYNOPSIS use Filter::Util::Call ; =head1 DESCRIPTION This module provides you with the framework to write I<Source Filters> in Perl. An alternate interface to Filter::Util::Call is now available. See L<Filter::Simple> for more details. A I<Perl Source Filter> is implemented as a Perl module. The structure of the module can take one of two broadly similar formats. To distinguish between them, the first will be referred to as I<method filter> and the second as I<closure filter>. Here is a skeleton for the I<method filter>: package MyFilter ; use Filter::Util::Call ; sub import { my($type, @arguments) = @_ ; filter_add([]) ; } sub filter { my($self) = @_ ; my($status) ; $status = filter_read() ; $status ; } 1 ; and this is the equivalent skeleton for the I<closure filter>: package MyFilter ; use Filter::Util::Call ; sub import { my($type, @arguments) = @_ ; filter_add( sub { my($status) ; $status = filter_read() ; $status ; } ) } 1 ; To make use of either of the two filter modules above, place the line below in a Perl source file. use MyFilter; In fact, the skeleton modules shown above are fully functional I<Source Filters>, albeit fairly useless ones. All they does is filter the source stream without modifying it at all. As you can see both modules have a broadly similar structure. They both make use of the C<Filter::Util::Call> module and both have an C<import> method. The difference between them is that the I<method filter> requires a I<filter> method, whereas the I<closure filter> gets the equivalent of a I<filter> method with the anonymous sub passed to I<filter_add>. To make proper use of the I<closure filter> shown above you need to have a good understanding of the concept of a I<closure>. See L<perlref> for more details on the mechanics of I<closures>. =head2 B<use Filter::Util::Call> The following functions are exported by C<Filter::Util::Call>: filter_add() filter_read() filter_read_exact() filter_del() =head2 B<import()> The C<import> method is used to create an instance of the filter. It is called indirectly by Perl when it encounters the C<use MyFilter> line in a source file (See L<perlfunc/import> for more details on C<import>). It will always have at least one parameter automatically passed by Perl - this corresponds to the name of the package. In the example above it will be C<"MyFilter">. Apart from the first parameter, import can accept an optional list of parameters. These can be used to pass parameters to the filter. For example: use MyFilter qw(a b c) ; will result in the C<@_> array having the following values: @_ [0] => "MyFilter" @_ [1] => "a" @_ [2] => "b" @_ [3] => "c" Before terminating, the C<import> function must explicitly install the filter by calling C<filter_add>. =head2 B<filter_add()> The function, C<filter_add>, actually installs the filter. It takes one parameter which should be a reference. The kind of reference used will dictate which of the two filter types will be used. If a CODE reference is used then a I<closure filter> will be assumed. If a CODE reference is not used, a I<method filter> will be assumed. In a I<method filter>, the reference can be used to store context information. The reference will be I<blessed> into the package by C<filter_add>, unless the reference was already blessed. See the filters at the end of this documents for examples of using context information using both I<method filters> and I<closure filters>. =head2 B<filter() and anonymous sub> Both the C<filter> method used with a I<method filter> and the anonymous sub used with a I<closure filter> is where the main processing for the filter is done. The big difference between the two types of filter is that the I<method filter> uses the object passed to the method to store any context data, whereas the I<closure filter> uses the lexical variables that are maintained by the closure. Note that the single parameter passed to the I<method filter>, C<$self>, is the same reference that was passed to C<filter_add> blessed into the filter's package. See the example filters later on for details of using C<$self>. Here is a list of the common features of the anonymous sub and the C<filter()> method. =over 5 =item B<$_> Although C<$_> doesn't actually appear explicitly in the sample filters above, it is implicitly used in a number of places. Firstly, when either C<filter> or the anonymous sub are called, a local copy of C<$_> will automatically be created. It will always contain the empty string at this point. Next, both C<filter_read> and C<filter_read_exact> will append any source data that is read to the end of C<$_>. Finally, when C<filter> or the anonymous sub are finished processing, they are expected to return the filtered source using C<$_>. This implicit use of C<$_> greatly simplifies the filter. =item B<$status> The status value that is returned by the user's C<filter> method or anonymous sub and the C<filter_read> and C<read_exact> functions take the same set of values, namely: < 0 Error = 0 EOF > 0 OK =item B<filter_read> and B<filter_read_exact> These functions are used by the filter to obtain either a line or block from the next filter in the chain or the actual source file if there aren't any other filters. The function C<filter_read> takes two forms: $status = filter_read() ; $status = filter_read($size) ; The first form is used to request a I<line>, the second requests a I<block>. In line mode, C<filter_read> will append the next source line to the end of the C<$_> scalar. In block mode, C<filter_read> will append a block of data which is <= C<$size> to the end of the C<$_> scalar. It is important to emphasise the that C<filter_read> will not necessarily read a block which is I<precisely> C<$size> bytes. If you need to be able to read a block which has an exact size, you can use the function C<filter_read_exact>. It works identically to C<filter_read> in block mode, except it will try to read a block which is exactly C<$size> bytes in length. The only circumstances when it will not return a block which is C<$size> bytes long is on EOF or error. It is I<very> important to check the value of C<$status> after I<every> call to C<filter_read> or C<filter_read_exact>. =item B<filter_del> The function, C<filter_del>, is used to disable the current filter. It does not affect the running of the filter. All it does is tell Perl not to call filter any more. See L<Example 4: Using filter_del> for details. =item I<real_import> Internal function which adds the filter, based on the L<filter_add> argument type. =item I<unimport()> May be used to disable a filter, but is rarely needed. See L<filter_del>. =back =head1 LIMITATIONS See L<perlfilter/LIMITATIONS> for an overview of the general problems filtering code in a textual line-level only. =over =item __DATA__ is ignored The content from the __DATA__ block is not filtered. This is a serious limitation, e.g. for the L<Switch> module. See L<http://search.cpan.org/perldoc?Switch#LIMITATIONS> for more. =item Max. codesize limited to 32-bit Currently internal buffer lengths are limited to 32-bit only. =back =head1 EXAMPLES Here are a few examples which illustrate the key concepts - as such most of them are of little practical use. The C<examples> sub-directory has copies of all these filters implemented both as I<method filters> and as I<closure filters>. =head2 Example 1: A simple filter. Below is a I<method filter> which is hard-wired to replace all occurrences of the string C<"Joe"> to C<"Jim">. Not particularly Useful, but it is the first example and I wanted to keep it simple. package Joe2Jim ; use Filter::Util::Call ; sub import { my($type) = @_ ; filter_add(bless []) ; } sub filter { my($self) = @_ ; my($status) ; s/Joe/Jim/g if ($status = filter_read()) > 0 ; $status ; } 1 ; Here is an example of using the filter: use Joe2Jim ; print "Where is Joe?\n" ; And this is what the script above will print: Where is Jim? =head2 Example 2: Using the context The previous example was not particularly useful. To make it more general purpose we will make use of the context data and allow any arbitrary I<from> and I<to> strings to be used. This time we will use a I<closure filter>. To reflect its enhanced role, the filter is called C<Subst>. package Subst ; use Filter::Util::Call ; use Carp ; sub import { croak("usage: use Subst qw(from to)") unless @_ == 3 ; my ($self, $from, $to) = @_ ; filter_add( sub { my ($status) ; s/$from/$to/ if ($status = filter_read()) > 0 ; $status ; }) } 1 ; and is used like this: use Subst qw(Joe Jim) ; print "Where is Joe?\n" ; =head2 Example 3: Using the context within the filter Here is a filter which a variation of the C<Joe2Jim> filter. As well as substituting all occurrences of C<"Joe"> to C<"Jim"> it keeps a count of the number of substitutions made in the context object. Once EOF is detected (C<$status> is zero) the filter will insert an extra line into the source stream. When this extra line is executed it will print a count of the number of substitutions actually made. Note that C<$status> is set to C<1> in this case. package Count ; use Filter::Util::Call ; sub filter { my ($self) = @_ ; my ($status) ; if (($status = filter_read()) > 0 ) { s/Joe/Jim/g ; ++ $$self ; } elsif ($$self >= 0) { # EOF $_ = "print q[Made ${$self} substitutions\n]" ; $status = 1 ; $$self = -1 ; } $status ; } sub import { my ($self) = @_ ; my ($count) = 0 ; filter_add(\$count) ; } 1 ; Here is a script which uses it: use Count ; print "Hello Joe\n" ; print "Where is Joe\n" ; Outputs: Hello Jim Where is Jim Made 2 substitutions =head2 Example 4: Using filter_del Another variation on a theme. This time we will modify the C<Subst> filter to allow a starting and stopping pattern to be specified as well as the I<from> and I<to> patterns. If you know the I<vi> editor, it is the equivalent of this command: :/start/,/stop/s/from/to/ When used as a filter we want to invoke it like this: use NewSubst qw(start stop from to) ; Here is the module. package NewSubst ; use Filter::Util::Call ; use Carp ; sub import { my ($self, $start, $stop, $from, $to) = @_ ; my ($found) = 0 ; croak("usage: use Subst qw(start stop from to)") unless @_ == 5 ; filter_add( sub { my ($status) ; if (($status = filter_read()) > 0) { $found = 1 if $found == 0 and /$start/ ; if ($found) { s/$from/$to/ ; filter_del() if /$stop/ ; } } $status ; } ) } 1 ; =head1 Filter::Simple If you intend using the Filter::Call functionality, I would strongly recommend that you check out Damian Conway's excellent Filter::Simple module. Damian's module provides a much cleaner interface than Filter::Util::Call. Although it doesn't allow the fine control that Filter::Util::Call does, it should be adequate for the majority of applications. It's available at http://search.cpan.org/dist/Filter-Simple/ =head1 AUTHOR Paul Marquess =head1 DATE 26th January 1996 =head1 LICENSE Copyright (c) 1995-2011 Paul Marquess. All rights reserved. Copyright (c) 2011-2014 Reini Urban. All rights reserved. Copyright (c) 2014-2017 cPanel Inc. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut Filter/Util/perlfilter.pod 0000644 00000053405 15037233333 0011573 0 ustar 00 =head1 NAME perlfilter - Source Filters =head1 DESCRIPTION This article is about a little-known feature of Perl called I<source filters>. Source filters alter the program text of a module before Perl sees it, much as a C preprocessor alters the source text of a C program before the compiler sees it. This article tells you more about what source filters are, how they work, and how to write your own. The original purpose of source filters was to let you encrypt your program source to prevent casual piracy. This isn't all they can do, as you'll soon learn. But first, the basics. =head1 CONCEPTS Before the Perl interpreter can execute a Perl script, it must first read it from a file into memory for parsing and compilation. If that script itself includes other scripts with a C<use> or C<require> statement, then each of those scripts will have to be read from their respective files as well. Now think of each logical connection between the Perl parser and an individual file as a I<source stream>. A source stream is created when the Perl parser opens a file, it continues to exist as the source code is read into memory, and it is destroyed when Perl is finished parsing the file. If the parser encounters a C<require> or C<use> statement in a source stream, a new and distinct stream is created just for that file. The diagram below represents a single source stream, with the flow of source from a Perl script file on the left into the Perl parser on the right. This is how Perl normally operates. file -------> parser There are two important points to remember: =over 5 =item 1. Although there can be any number of source streams in existence at any given time, only one will be active. =item 2. Every source stream is associated with only one file. =back A source filter is a special kind of Perl module that intercepts and modifies a source stream before it reaches the parser. A source filter changes our diagram like this: file ----> filter ----> parser If that doesn't make much sense, consider the analogy of a command pipeline. Say you have a shell script stored in the compressed file I<trial.gz>. The simple pipeline command below runs the script without needing to create a temporary file to hold the uncompressed file. gunzip -c trial.gz | sh In this case, the data flow from the pipeline can be represented as follows: trial.gz ----> gunzip ----> sh With source filters, you can store the text of your script compressed and use a source filter to uncompress it for Perl's parser: compressed gunzip Perl program ---> source filter ---> parser =head1 USING FILTERS So how do you use a source filter in a Perl script? Above, I said that a source filter is just a special kind of module. Like all Perl modules, a source filter is invoked with a use statement. Say you want to pass your Perl source through the C preprocessor before execution. As it happens, the source filters distribution comes with a C preprocessor filter module called Filter::cpp. Below is an example program, C<cpp_test>, which makes use of this filter. Line numbers have been added to allow specific lines to be referenced easily. 1: use Filter::cpp; 2: #define TRUE 1 3: $a = TRUE; 4: print "a = $a\n"; When you execute this script, Perl creates a source stream for the file. Before the parser processes any of the lines from the file, the source stream looks like this: cpp_test ---------> parser Line 1, C<use Filter::cpp>, includes and installs the C<cpp> filter module. All source filters work this way. The use statement is compiled and executed at compile time, before any more of the file is read, and it attaches the cpp filter to the source stream behind the scenes. Now the data flow looks like this: cpp_test ----> cpp filter ----> parser As the parser reads the second and subsequent lines from the source stream, it feeds those lines through the C<cpp> source filter before processing them. The C<cpp> filter simply passes each line through the real C preprocessor. The output from the C preprocessor is then inserted back into the source stream by the filter. .-> cpp --. | | | | | <-' cpp_test ----> cpp filter ----> parser The parser then sees the following code: use Filter::cpp; $a = 1; print "a = $a\n"; Let's consider what happens when the filtered code includes another module with use: 1: use Filter::cpp; 2: #define TRUE 1 3: use Fred; 4: $a = TRUE; 5: print "a = $a\n"; The C<cpp> filter does not apply to the text of the Fred module, only to the text of the file that used it (C<cpp_test>). Although the use statement on line 3 will pass through the cpp filter, the module that gets included (C<Fred>) will not. The source streams look like this after line 3 has been parsed and before line 4 is parsed: cpp_test ---> cpp filter ---> parser (INACTIVE) Fred.pm ----> parser As you can see, a new stream has been created for reading the source from C<Fred.pm>. This stream will remain active until all of C<Fred.pm> has been parsed. The source stream for C<cpp_test> will still exist, but is inactive. Once the parser has finished reading Fred.pm, the source stream associated with it will be destroyed. The source stream for C<cpp_test> then becomes active again and the parser reads line 4 and subsequent lines from C<cpp_test>. You can use more than one source filter on a single file. Similarly, you can reuse the same filter in as many files as you like. For example, if you have a uuencoded and compressed source file, it is possible to stack a uudecode filter and an uncompression filter like this: use Filter::uudecode; use Filter::uncompress; M'XL(".H<US4''V9I;F%L')Q;>7/;1I;_>_I3=&E=%:F*I"T?22Q/ M6]9*<IQCO*XFT"0[PL%%'Y+IG?WN^ZYN-$'J.[.JE$,20/?K=_[> ... Once the first line has been processed, the flow will look like this: file ---> uudecode ---> uncompress ---> parser filter filter Data flows through filters in the same order they appear in the source file. The uudecode filter appeared before the uncompress filter, so the source file will be uudecoded before it's uncompressed. =head1 WRITING A SOURCE FILTER There are three ways to write your own source filter. You can write it in C, use an external program as a filter, or write the filter in Perl. I won't cover the first two in any great detail, so I'll get them out of the way first. Writing the filter in Perl is most convenient, so I'll devote the most space to it. =head1 WRITING A SOURCE FILTER IN C The first of the three available techniques is to write the filter completely in C. The external module you create interfaces directly with the source filter hooks provided by Perl. The advantage of this technique is that you have complete control over the implementation of your filter. The big disadvantage is the increased complexity required to write the filter - not only do you need to understand the source filter hooks, but you also need a reasonable knowledge of Perl guts. One of the few times it is worth going to this trouble is when writing a source scrambler. The C<decrypt> filter (which unscrambles the source before Perl parses it) included with the source filter distribution is an example of a C source filter (see Decryption Filters, below). =over 5 =item B<Decryption Filters> All decryption filters work on the principle of "security through obscurity." Regardless of how well you write a decryption filter and how strong your encryption algorithm is, anyone determined enough can retrieve the original source code. The reason is quite simple - once the decryption filter has decrypted the source back to its original form, fragments of it will be stored in the computer's memory as Perl parses it. The source might only be in memory for a short period of time, but anyone possessing a debugger, skill, and lots of patience can eventually reconstruct your program. That said, there are a number of steps that can be taken to make life difficult for the potential cracker. The most important: Write your decryption filter in C and statically link the decryption module into the Perl binary. For further tips to make life difficult for the potential cracker, see the file I<decrypt.pm> in the source filters distribution. =back =head1 CREATING A SOURCE FILTER AS A SEPARATE EXECUTABLE An alternative to writing the filter in C is to create a separate executable in the language of your choice. The separate executable reads from standard input, does whatever processing is necessary, and writes the filtered data to standard output. C<Filter::cpp> is an example of a source filter implemented as a separate executable - the executable is the C preprocessor bundled with your C compiler. The source filter distribution includes two modules that simplify this task: C<Filter::exec> and C<Filter::sh>. Both allow you to run any external executable. Both use a coprocess to control the flow of data into and out of the external executable. (For details on coprocesses, see Stephens, W.R., "Advanced Programming in the UNIX Environment." Addison-Wesley, ISBN 0-210-56317-7, pages 441-445.) The difference between them is that C<Filter::exec> spawns the external command directly, while C<Filter::sh> spawns a shell to execute the external command. (Unix uses the Bourne shell; NT uses the cmd shell.) Spawning a shell allows you to make use of the shell metacharacters and redirection facilities. Here is an example script that uses C<Filter::sh>: use Filter::sh 'tr XYZ PQR'; $a = 1; print "XYZ a = $a\n"; The output you'll get when the script is executed: PQR a = 1 Writing a source filter as a separate executable works fine, but a small performance penalty is incurred. For example, if you execute the small example above, a separate subprocess will be created to run the Unix C<tr> command. Each use of the filter requires its own subprocess. If creating subprocesses is expensive on your system, you might want to consider one of the other options for creating source filters. =head1 WRITING A SOURCE FILTER IN PERL The easiest and most portable option available for creating your own source filter is to write it completely in Perl. To distinguish this from the previous two techniques, I'll call it a Perl source filter. To help understand how to write a Perl source filter we need an example to study. Here is a complete source filter that performs rot13 decoding. (Rot13 is a very simple encryption scheme used in Usenet postings to hide the contents of offensive posts. It moves every letter forward thirteen places, so that A becomes N, B becomes O, and Z becomes M.) package Rot13; use Filter::Util::Call; sub import { my ($type) = @_; my ($ref) = []; filter_add(bless $ref); } sub filter { my ($self) = @_; my ($status); tr/n-za-mN-ZA-M/a-zA-Z/ if ($status = filter_read()) > 0; $status; } 1; All Perl source filters are implemented as Perl classes and have the same basic structure as the example above. First, we include the C<Filter::Util::Call> module, which exports a number of functions into your filter's namespace. The filter shown above uses two of these functions, C<filter_add()> and C<filter_read()>. Next, we create the filter object and associate it with the source stream by defining the C<import> function. If you know Perl well enough, you know that C<import> is called automatically every time a module is included with a use statement. This makes C<import> the ideal place to both create and install a filter object. In the example filter, the object (C<$ref>) is blessed just like any other Perl object. Our example uses an anonymous array, but this isn't a requirement. Because this example doesn't need to store any context information, we could have used a scalar or hash reference just as well. The next section demonstrates context data. The association between the filter object and the source stream is made with the C<filter_add()> function. This takes a filter object as a parameter (C<$ref> in this case) and installs it in the source stream. Finally, there is the code that actually does the filtering. For this type of Perl source filter, all the filtering is done in a method called C<filter()>. (It is also possible to write a Perl source filter using a closure. See the C<Filter::Util::Call> manual page for more details.) It's called every time the Perl parser needs another line of source to process. The C<filter()> method, in turn, reads lines from the source stream using the C<filter_read()> function. If a line was available from the source stream, C<filter_read()> returns a status value greater than zero and appends the line to C<$_>. A status value of zero indicates end-of-file, less than zero means an error. The filter function itself is expected to return its status in the same way, and put the filtered line it wants written to the source stream in C<$_>. The use of C<$_> accounts for the brevity of most Perl source filters. In order to make use of the rot13 filter we need some way of encoding the source file in rot13 format. The script below, C<mkrot13>, does just that. die "usage mkrot13 filename\n" unless @ARGV; my $in = $ARGV[0]; my $out = "$in.tmp"; open(IN, "<$in") or die "Cannot open file $in: $!\n"; open(OUT, ">$out") or die "Cannot open file $out: $!\n"; print OUT "use Rot13;\n"; while (<IN>) { tr/a-zA-Z/n-za-mN-ZA-M/; print OUT; } close IN; close OUT; unlink $in; rename $out, $in; If we encrypt this with C<mkrot13>: print " hello fred \n"; the result will be this: use Rot13; cevag "uryyb serq\a"; Running it produces this output: hello fred =head1 USING CONTEXT: THE DEBUG FILTER The rot13 example was a trivial example. Here's another demonstration that shows off a few more features. Say you wanted to include a lot of debugging code in your Perl script during development, but you didn't want it available in the released product. Source filters offer a solution. In order to keep the example simple, let's say you wanted the debugging output to be controlled by an environment variable, C<DEBUG>. Debugging code is enabled if the variable exists, otherwise it is disabled. Two special marker lines will bracket debugging code, like this: ## DEBUG_BEGIN if ($year > 1999) { warn "Debug: millennium bug in year $year\n"; } ## DEBUG_END The filter ensures that Perl parses the code between the <DEBUG_BEGIN> and C<DEBUG_END> markers only when the C<DEBUG> environment variable exists. That means that when C<DEBUG> does exist, the code above should be passed through the filter unchanged. The marker lines can also be passed through as-is, because the Perl parser will see them as comment lines. When C<DEBUG> isn't set, we need a way to disable the debug code. A simple way to achieve that is to convert the lines between the two markers into comments: ## DEBUG_BEGIN #if ($year > 1999) { # warn "Debug: millennium bug in year $year\n"; #} ## DEBUG_END Here is the complete Debug filter: package Debug; use strict; use warnings; use Filter::Util::Call; use constant TRUE => 1; use constant FALSE => 0; sub import { my ($type) = @_; my (%context) = ( Enabled => defined $ENV{DEBUG}, InTraceBlock => FALSE, Filename => (caller)[1], LineNo => 0, LastBegin => 0, ); filter_add(bless \%context); } sub Die { my ($self) = shift; my ($message) = shift; my ($line_no) = shift || $self->{LastBegin}; die "$message at $self->{Filename} line $line_no.\n" } sub filter { my ($self) = @_; my ($status); $status = filter_read(); ++ $self->{LineNo}; # deal with EOF/error first if ($status <= 0) { $self->Die("DEBUG_BEGIN has no DEBUG_END") if $self->{InTraceBlock}; return $status; } if ($self->{InTraceBlock}) { if (/^\s*##\s*DEBUG_BEGIN/ ) { $self->Die("Nested DEBUG_BEGIN", $self->{LineNo}) } elsif (/^\s*##\s*DEBUG_END/) { $self->{InTraceBlock} = FALSE; } # comment out the debug lines when the filter is disabled s/^/#/ if ! $self->{Enabled}; } elsif ( /^\s*##\s*DEBUG_BEGIN/ ) { $self->{InTraceBlock} = TRUE; $self->{LastBegin} = $self->{LineNo}; } elsif ( /^\s*##\s*DEBUG_END/ ) { $self->Die("DEBUG_END has no DEBUG_BEGIN", $self->{LineNo}); } return $status; } 1; The big difference between this filter and the previous example is the use of context data in the filter object. The filter object is based on a hash reference, and is used to keep various pieces of context information between calls to the filter function. All but two of the hash fields are used for error reporting. The first of those two, Enabled, is used by the filter to determine whether the debugging code should be given to the Perl parser. The second, InTraceBlock, is true when the filter has encountered a C<DEBUG_BEGIN> line, but has not yet encountered the following C<DEBUG_END> line. If you ignore all the error checking that most of the code does, the essence of the filter is as follows: sub filter { my ($self) = @_; my ($status); $status = filter_read(); # deal with EOF/error first return $status if $status <= 0; if ($self->{InTraceBlock}) { if (/^\s*##\s*DEBUG_END/) { $self->{InTraceBlock} = FALSE } # comment out debug lines when the filter is disabled s/^/#/ if ! $self->{Enabled}; } elsif ( /^\s*##\s*DEBUG_BEGIN/ ) { $self->{InTraceBlock} = TRUE; } return $status; } Be warned: just as the C-preprocessor doesn't know C, the Debug filter doesn't know Perl. It can be fooled quite easily: print <<EOM; ##DEBUG_BEGIN EOM Such things aside, you can see that a lot can be achieved with a modest amount of code. =head1 CONCLUSION You now have better understanding of what a source filter is, and you might even have a possible use for them. If you feel like playing with source filters but need a bit of inspiration, here are some extra features you could add to the Debug filter. First, an easy one. Rather than having debugging code that is all-or-nothing, it would be much more useful to be able to control which specific blocks of debugging code get included. Try extending the syntax for debug blocks to allow each to be identified. The contents of the C<DEBUG> environment variable can then be used to control which blocks get included. Once you can identify individual blocks, try allowing them to be nested. That isn't difficult either. Here is an interesting idea that doesn't involve the Debug filter. Currently Perl subroutines have fairly limited support for formal parameter lists. You can specify the number of parameters and their type, but you still have to manually take them out of the C<@_> array yourself. Write a source filter that allows you to have a named parameter list. Such a filter would turn this: sub MySub ($first, $second, @rest) { ... } into this: sub MySub($$@) { my ($first) = shift; my ($second) = shift; my (@rest) = @_; ... } Finally, if you feel like a real challenge, have a go at writing a full-blown Perl macro preprocessor as a source filter. Borrow the useful features from the C preprocessor and any other macro processors you know. The tricky bit will be choosing how much knowledge of Perl's syntax you want your filter to have. =head1 LIMITATIONS Source filters only work on the string level, thus are highly limited in its ability to change source code on the fly. It cannot detect comments, quoted strings, heredocs, it is no replacement for a real parser. The only stable usage for source filters are encryption, compression, or the byteloader, to translate binary code back to source code. See for example the limitations in L<Switch>, which uses source filters, and thus is does not work inside a string eval, the presence of regexes with embedded newlines that are specified with raw C</.../> delimiters and don't have a modifier C<//x> are indistinguishable from code chunks beginning with the division operator C</>. As a workaround you must use C<m/.../> or C<m?...?> for such patterns. Also, the presence of regexes specified with raw C<?...?> delimiters may cause mysterious errors. The workaround is to use C<m?...?> instead. See L<http://search.cpan.org/perldoc?Switch#LIMITATIONS> Currently the content of the C<__DATA__> block is not filtered. Currently internal buffer lengths are limited to 32-bit only. =head1 THINGS TO LOOK OUT FOR =over 5 =item Some Filters Clobber the C<DATA> Handle Some source filters use the C<DATA> handle to read the calling program. When using these source filters you cannot rely on this handle, nor expect any particular kind of behavior when operating on it. Filters based on Filter::Util::Call (and therefore Filter::Simple) do not alter the C<DATA> filehandle, but on the other hand totally ignore the text after C<__DATA__>. =back =head1 REQUIREMENTS The Source Filters distribution is available on CPAN, in CPAN/modules/by-module/Filter Starting from Perl 5.8 Filter::Util::Call (the core part of the Source Filters distribution) is part of the standard Perl distribution. Also included is a friendlier interface called Filter::Simple, by Damian Conway. =head1 AUTHOR Paul Marquess E<lt>Paul.Marquess@btinternet.comE<gt> Reini Urban E<lt>rurban@cpan.orgE<gt> =head1 Copyrights The first version of this article originally appeared in The Perl Journal #11, and is copyright 1998 The Perl Journal. It appears courtesy of Jon Orwant and The Perl Journal. This document may be distributed under the same terms as Perl itself. Filter/exec.pm 0000644 00000002350 15037233333 0007255 0 ustar 00 package Filter::exec ; use Filter::Util::Exec ; use strict ; use warnings ; our $VERSION = "1.58" ; sub import { my($self, @args) = @_ ; unless (@args) { require Carp; Carp::croak("Usage: use Filter::exec 'command'"); } Filter::Util::Exec::filter_add($self, @args) ; } 1 ; __END__ =head1 NAME Filter::exec - exec source filter =head1 SYNOPSIS use Filter::exec qw(command parameters) ; =head1 DESCRIPTION This filter pipes the current source file through the program which corresponds to the C<command> parameter. As with all source filters its scope is limited to the current source file only. Every file you want to be processed by the filter must have a use Filter::exec qw(command ) ; near the top. Here is an example script which uses the filter: use Filter::exec qw(tr XYZ PQR) ; $a = 1 ; print "XYZ a = $a\n" ; And here is what it will output: PQR = 1 =head1 WARNING You should be I<very> careful when using this filter. Because of the way the filter is implemented it is possible to end up with deadlock. Be especially careful when stacking multiple instances of the filter in a single source file. =head1 AUTHOR Paul Marquess =head1 DATE 11th December 1995. =cut Filter/cpp.pm 0000644 00000004212 15037233333 0007112 0 ustar 00 package Filter::cpp; use Filter::Util::Exec ; use Config ; use strict; use warnings; our $VERSION = '1.58' ; my $cpp; my $sep; if ($^O eq 'MSWin32') { $cpp = 'cpp.exe' ; $sep = ';'; } else { ($cpp) = $Config{cppstdin} =~ /^(\S+)/; $sep = ':'; } if (! $cpp) { require Carp; Carp::croak ("Cannot find cpp\n"); } # Check if cpp is installed if ( ! -x $cpp) { my $foundCPP = 0 ; foreach my $dir (split($sep, $ENV{PATH}), '') { if (-x "$dir/$cpp") { $foundCPP = 1; last ; } } if (! $foundCPP) { require Carp; Carp::croak("Cannot find cpp\n"); } } sub import { my($self, @args) = @_ ; if ($^O eq 'MSWin32') { Filter::Util::Exec::filter_add ($self, 'cmd', '/c', "cpp.exe 2>nul") ; } else { Filter::Util::Exec::filter_add ($self, 'sh', '-c', "$Config{'cppstdin'} $Config{'cppminus'} 2>/dev/null") ; } } 1 ; __END__ =head1 NAME Filter::cpp - cpp source filter =head1 SYNOPSIS use Filter::cpp ; =head1 DESCRIPTION This source filter pipes the current source file through the C pre-processor (cpp) if it is available. As with all source filters its scope is limited to the current source file only. Every file you want to be processed by the filter must have a use Filter::cpp ; near the top. Here is an example script which uses the filter: use Filter::cpp ; #define FRED 1 $a = 2 + FRED ; print "a = $a\n" ; #ifdef FRED print "Hello FRED\n" ; #else print "Where is FRED\n" ; #endif And here is what it will output: a = 3 Hello FRED This example below, provided by Michael G Schwern, shows a clever way to get Perl to use a C pre-processor macro when the Filter::cpp module is available, or to use a Perl sub when it is not. # use Filter::cpp if we can. BEGIN { eval 'use Filter::cpp' } sub PRINT { my($string) = shift; #define PRINT($string) \ (print $string."\n") } PRINT("Mu"); Look at Michael's Tie::VecArray module for a practical use. =head1 AUTHOR Paul Marquess =head1 DATE 11th December 1995. =cut Socket.pm 0000644 00000110306 15037233333 0006335 0 ustar 00 package Socket; use strict; { use 5.006001; } our $VERSION = '2.027'; =head1 NAME C<Socket> - networking constants and support functions =head1 SYNOPSIS C<Socket> a low-level module used by, among other things, the L<IO::Socket> family of modules. The following examples demonstrate some low-level uses but a practical program would likely use the higher-level API provided by C<IO::Socket> or similar instead. use Socket qw(PF_INET SOCK_STREAM pack_sockaddr_in inet_aton); socket(my $socket, PF_INET, SOCK_STREAM, 0) or die "socket: $!"; my $port = getservbyname "echo", "tcp"; connect($socket, pack_sockaddr_in($port, inet_aton("localhost"))) or die "connect: $!"; print $socket "Hello, world!\n"; print <$socket>; See also the L</EXAMPLES> section. =head1 DESCRIPTION This module provides a variety of constants, structure manipulators and other functions related to socket-based networking. The values and functions provided are useful when used in conjunction with Perl core functions such as socket(), setsockopt() and bind(). It also provides several other support functions, mostly for dealing with conversions of network addresses between human-readable and native binary forms, and for hostname resolver operations. Some constants and functions are exported by default by this module; but for backward-compatibility any recently-added symbols are not exported by default and must be requested explicitly. When an import list is provided to the C<use Socket> line, the default exports are not automatically imported. It is therefore best practice to always to explicitly list all the symbols required. Also, some common socket "newline" constants are provided: the constants C<CR>, C<LF>, and C<CRLF>, as well as C<$CR>, C<$LF>, and C<$CRLF>, which map to C<\015>, C<\012>, and C<\015\012>. If you do not want to use the literal characters in your programs, then use the constants provided here. They are not exported by default, but can be imported individually, and with the C<:crlf> export tag: use Socket qw(:DEFAULT :crlf); $sock->print("GET / HTTP/1.0$CRLF"); The entire getaddrinfo() subsystem can be exported using the tag C<:addrinfo>; this exports the getaddrinfo() and getnameinfo() functions, and all the C<AI_*>, C<NI_*>, C<NIx_*> and C<EAI_*> constants. =cut =head1 CONSTANTS In each of the following groups, there may be many more constants provided than just the ones given as examples in the section heading. If the heading ends C<...> then this means there are likely more; the exact constants provided will depend on the OS and headers found at compile-time. =cut =head2 PF_INET, PF_INET6, PF_UNIX, ... Protocol family constants to use as the first argument to socket() or the value of the C<SO_DOMAIN> or C<SO_FAMILY> socket option. =head2 AF_INET, AF_INET6, AF_UNIX, ... Address family constants used by the socket address structures, to pass to such functions as inet_pton() or getaddrinfo(), or are returned by such functions as sockaddr_family(). =head2 SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, ... Socket type constants to use as the second argument to socket(), or the value of the C<SO_TYPE> socket option. =head2 SOCK_NONBLOCK. SOCK_CLOEXEC Linux-specific shortcuts to specify the C<O_NONBLOCK> and C<FD_CLOEXEC> flags during a C<socket(2)> call. socket( my $sockh, PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0 ) =head2 SOL_SOCKET Socket option level constant for setsockopt() and getsockopt(). =head2 SO_ACCEPTCONN, SO_BROADCAST, SO_ERROR, ... Socket option name constants for setsockopt() and getsockopt() at the C<SOL_SOCKET> level. =head2 IP_OPTIONS, IP_TOS, IP_TTL, ... Socket option name constants for IPv4 socket options at the C<IPPROTO_IP> level. =head2 IP_PMTUDISC_WANT, IP_PMTUDISC_DONT, ... Socket option value contants for C<IP_MTU_DISCOVER> socket option. =head2 IPTOS_LOWDELAY, IPTOS_THROUGHPUT, IPTOS_RELIABILITY, ... Socket option value constants for C<IP_TOS> socket option. =head2 MSG_BCAST, MSG_OOB, MSG_TRUNC, ... Message flag constants for send() and recv(). =head2 SHUT_RD, SHUT_RDWR, SHUT_WR Direction constants for shutdown(). =head2 INADDR_ANY, INADDR_BROADCAST, INADDR_LOOPBACK, INADDR_NONE Constants giving the special C<AF_INET> addresses for wildcard, broadcast, local loopback, and invalid addresses. Normally equivalent to inet_aton('0.0.0.0'), inet_aton('255.255.255.255'), inet_aton('localhost') and inet_aton('255.255.255.255') respectively. =head2 IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP, ... IP protocol constants to use as the third argument to socket(), the level argument to getsockopt() or setsockopt(), or the value of the C<SO_PROTOCOL> socket option. =head2 TCP_CORK, TCP_KEEPALIVE, TCP_NODELAY, ... Socket option name constants for TCP socket options at the C<IPPROTO_TCP> level. =head2 IN6ADDR_ANY, IN6ADDR_LOOPBACK Constants giving the special C<AF_INET6> addresses for wildcard and local loopback. Normally equivalent to inet_pton(AF_INET6, "::") and inet_pton(AF_INET6, "::1") respectively. =head2 IPV6_ADD_MEMBERSHIP, IPV6_MTU, IPV6_V6ONLY, ... Socket option name constants for IPv6 socket options at the C<IPPROTO_IPV6> level. =cut # Still undocumented: SCM_*, SOMAXCONN, IOV_MAX, UIO_MAXIOV =head1 STRUCTURE MANIPULATORS The following functions convert between lists of Perl values and packed binary strings representing structures. =cut =head2 $family = sockaddr_family $sockaddr Takes a packed socket address (as returned by pack_sockaddr_in(), pack_sockaddr_un() or the perl builtin functions getsockname() and getpeername()). Returns the address family tag. This will be one of the C<AF_*> constants, such as C<AF_INET> for a C<sockaddr_in> addresses or C<AF_UNIX> for a C<sockaddr_un>. It can be used to figure out what unpack to use for a sockaddr of unknown type. =head2 $sockaddr = pack_sockaddr_in $port, $ip_address Takes two arguments, a port number and an opaque string (as returned by inet_aton(), or a v-string). Returns the C<sockaddr_in> structure with those arguments packed in and C<AF_INET> filled in. For Internet domain sockets, this structure is normally what you need for the arguments in bind(), connect(), and send(). An undefined $port argument is taken as zero; an undefined $ip_address is considered a fatal error. =head2 ($port, $ip_address) = unpack_sockaddr_in $sockaddr Takes a C<sockaddr_in> structure (as returned by pack_sockaddr_in(), getpeername() or recv()). Returns a list of two elements: the port and an opaque string representing the IP address (you can use inet_ntoa() to convert the address to the four-dotted numeric format). Will croak if the structure does not represent an C<AF_INET> address. In scalar context will return just the IP address. =head2 $sockaddr = sockaddr_in $port, $ip_address =head2 ($port, $ip_address) = sockaddr_in $sockaddr A wrapper of pack_sockaddr_in() or unpack_sockaddr_in(). In list context, unpacks its argument and returns a list consisting of the port and IP address. In scalar context, packs its port and IP address arguments as a C<sockaddr_in> and returns it. Provided largely for legacy compatibility; it is better to use pack_sockaddr_in() or unpack_sockaddr_in() explicitly. =head2 $sockaddr = pack_sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]] Takes two to four arguments, a port number, an opaque string (as returned by inet_pton()), optionally a scope ID number, and optionally a flow label number. Returns the C<sockaddr_in6> structure with those arguments packed in and C<AF_INET6> filled in. IPv6 equivalent of pack_sockaddr_in(). An undefined $port argument is taken as zero; an undefined $ip6_address is considered a fatal error. =head2 ($port, $ip6_address, $scope_id, $flowinfo) = unpack_sockaddr_in6 $sockaddr Takes a C<sockaddr_in6> structure. Returns a list of four elements: the port number, an opaque string representing the IPv6 address, the scope ID, and the flow label. (You can use inet_ntop() to convert the address to the usual string format). Will croak if the structure does not represent an C<AF_INET6> address. In scalar context will return just the IP address. =head2 $sockaddr = sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]] =head2 ($port, $ip6_address, $scope_id, $flowinfo) = sockaddr_in6 $sockaddr A wrapper of pack_sockaddr_in6() or unpack_sockaddr_in6(). In list context, unpacks its argument according to unpack_sockaddr_in6(). In scalar context, packs its arguments according to pack_sockaddr_in6(). Provided largely for legacy compatibility; it is better to use pack_sockaddr_in6() or unpack_sockaddr_in6() explicitly. =head2 $sockaddr = pack_sockaddr_un $path Takes one argument, a pathname. Returns the C<sockaddr_un> structure with that path packed in with C<AF_UNIX> filled in. For C<PF_UNIX> sockets, this structure is normally what you need for the arguments in bind(), connect(), and send(). =head2 ($path) = unpack_sockaddr_un $sockaddr Takes a C<sockaddr_un> structure (as returned by pack_sockaddr_un(), getpeername() or recv()). Returns a list of one element: the pathname. Will croak if the structure does not represent an C<AF_UNIX> address. =head2 $sockaddr = sockaddr_un $path =head2 ($path) = sockaddr_un $sockaddr A wrapper of pack_sockaddr_un() or unpack_sockaddr_un(). In a list context, unpacks its argument and returns a list consisting of the pathname. In a scalar context, packs its pathname as a C<sockaddr_un> and returns it. Provided largely for legacy compatibility; it is better to use pack_sockaddr_un() or unpack_sockaddr_un() explicitly. These are only supported if your system has E<lt>F<sys/un.h>E<gt>. =head2 $ip_mreq = pack_ip_mreq $multiaddr, $interface Takes an IPv4 multicast address and optionally an interface address (or C<INADDR_ANY>). Returns the C<ip_mreq> structure with those arguments packed in. Suitable for use with the C<IP_ADD_MEMBERSHIP> and C<IP_DROP_MEMBERSHIP> sockopts. =head2 ($multiaddr, $interface) = unpack_ip_mreq $ip_mreq Takes an C<ip_mreq> structure. Returns a list of two elements; the IPv4 multicast address and interface address. =head2 $ip_mreq_source = pack_ip_mreq_source $multiaddr, $source, $interface Takes an IPv4 multicast address, source address, and optionally an interface address (or C<INADDR_ANY>). Returns the C<ip_mreq_source> structure with those arguments packed in. Suitable for use with the C<IP_ADD_SOURCE_MEMBERSHIP> and C<IP_DROP_SOURCE_MEMBERSHIP> sockopts. =head2 ($multiaddr, $source, $interface) = unpack_ip_mreq_source $ip_mreq Takes an C<ip_mreq_source> structure. Returns a list of three elements; the IPv4 multicast address, source address and interface address. =head2 $ipv6_mreq = pack_ipv6_mreq $multiaddr6, $ifindex Takes an IPv6 multicast address and an interface number. Returns the C<ipv6_mreq> structure with those arguments packed in. Suitable for use with the C<IPV6_ADD_MEMBERSHIP> and C<IPV6_DROP_MEMBERSHIP> sockopts. =head2 ($multiaddr6, $ifindex) = unpack_ipv6_mreq $ipv6_mreq Takes an C<ipv6_mreq> structure. Returns a list of two elements; the IPv6 address and an interface number. =cut =head1 FUNCTIONS =cut =head2 $ip_address = inet_aton $string Takes a string giving the name of a host, or a textual representation of an IP address and translates that to an packed binary address structure suitable to pass to pack_sockaddr_in(). If passed a hostname that cannot be resolved, returns C<undef>. For multi-homed hosts (hosts with more than one address), the first address found is returned. For portability do not assume that the result of inet_aton() is 32 bits wide, in other words, that it would contain only the IPv4 address in network order. This IPv4-only function is provided largely for legacy reasons. Newly-written code should use getaddrinfo() or inet_pton() instead for IPv6 support. =head2 $string = inet_ntoa $ip_address Takes a packed binary address structure such as returned by unpack_sockaddr_in() (or a v-string representing the four octets of the IPv4 address in network order) and translates it into a string of the form C<d.d.d.d> where the C<d>s are numbers less than 256 (the normal human-readable four dotted number notation for Internet addresses). This IPv4-only function is provided largely for legacy reasons. Newly-written code should use getnameinfo() or inet_ntop() instead for IPv6 support. =head2 $address = inet_pton $family, $string Takes an address family (such as C<AF_INET> or C<AF_INET6>) and a string containing a textual representation of an address in that family and translates that to an packed binary address structure. See also getaddrinfo() for a more powerful and flexible function to look up socket addresses given hostnames or textual addresses. =head2 $string = inet_ntop $family, $address Takes an address family and a packed binary address structure and translates it into a human-readable textual representation of the address; typically in C<d.d.d.d> form for C<AF_INET> or C<hhhh:hhhh::hhhh> form for C<AF_INET6>. See also getnameinfo() for a more powerful and flexible function to turn socket addresses into human-readable textual representations. =head2 ($err, @result) = getaddrinfo $host, $service, [$hints] Given both a hostname and service name, this function attempts to resolve the host name into a list of network addresses, and the service name into a protocol and port number, and then returns a list of address structures suitable to connect() to it. Given just a host name, this function attempts to resolve it to a list of network addresses, and then returns a list of address structures giving these addresses. Given just a service name, this function attempts to resolve it to a protocol and port number, and then returns a list of address structures that represent it suitable to bind() to. This use should be combined with the C<AI_PASSIVE> flag; see below. Given neither name, it generates an error. If present, $hints should be a reference to a hash, where the following keys are recognised: =over 4 =item flags => INT A bitfield containing C<AI_*> constants; see below. =item family => INT Restrict to only generating addresses in this address family =item socktype => INT Restrict to only generating addresses of this socket type =item protocol => INT Restrict to only generating addresses for this protocol =back The return value will be a list; the first value being an error indication, followed by a list of address structures (if no error occurred). The error value will be a dualvar; comparable to the C<EAI_*> error constants, or printable as a human-readable error message string. If no error occurred it will be zero numerically and an empty string. Each value in the results list will be a hash reference containing the following fields: =over 4 =item family => INT The address family (e.g. C<AF_INET>) =item socktype => INT The socket type (e.g. C<SOCK_STREAM>) =item protocol => INT The protocol (e.g. C<IPPROTO_TCP>) =item addr => STRING The address in a packed string (such as would be returned by pack_sockaddr_in()) =item canonname => STRING The canonical name for the host if the C<AI_CANONNAME> flag was provided, or C<undef> otherwise. This field will only be present on the first returned address. =back The following flag constants are recognised in the $hints hash. Other flag constants may exist as provided by the OS. =over 4 =item AI_PASSIVE Indicates that this resolution is for a local bind() for a passive (i.e. listening) socket, rather than an active (i.e. connecting) socket. =item AI_CANONNAME Indicates that the caller wishes the canonical hostname (C<canonname>) field of the result to be filled in. =item AI_NUMERICHOST Indicates that the caller will pass a numeric address, rather than a hostname, and that getaddrinfo() must not perform a resolve operation on this name. This flag will prevent a possibly-slow network lookup operation, and instead return an error if a hostname is passed. =back =head2 ($err, $hostname, $servicename) = getnameinfo $sockaddr, [$flags, [$xflags]] Given a packed socket address (such as from getsockname(), getpeername(), or returned by getaddrinfo() in a C<addr> field), returns the hostname and symbolic service name it represents. $flags may be a bitmask of C<NI_*> constants, or defaults to 0 if unspecified. The return value will be a list; the first value being an error condition, followed by the hostname and service name. The error value will be a dualvar; comparable to the C<EAI_*> error constants, or printable as a human-readable error message string. The host and service names will be plain strings. The following flag constants are recognised as $flags. Other flag constants may exist as provided by the OS. =over 4 =item NI_NUMERICHOST Requests that a human-readable string representation of the numeric address be returned directly, rather than performing a name resolve operation that may convert it into a hostname. This will also avoid potentially-blocking network IO. =item NI_NUMERICSERV Requests that the port number be returned directly as a number representation rather than performing a name resolve operation that may convert it into a service name. =item NI_NAMEREQD If a name resolve operation fails to provide a name, then this flag will cause getnameinfo() to indicate an error, rather than returning the numeric representation as a human-readable string. =item NI_DGRAM Indicates that the socket address relates to a C<SOCK_DGRAM> socket, for the services whose name differs between TCP and UDP protocols. =back The following constants may be supplied as $xflags. =over 4 =item NIx_NOHOST Indicates that the caller is not interested in the hostname of the result, so it does not have to be converted. C<undef> will be returned as the hostname. =item NIx_NOSERV Indicates that the caller is not interested in the service name of the result, so it does not have to be converted. C<undef> will be returned as the service name. =back =head1 getaddrinfo() / getnameinfo() ERROR CONSTANTS The following constants may be returned by getaddrinfo() or getnameinfo(). Others may be provided by the OS. =over 4 =item EAI_AGAIN A temporary failure occurred during name resolution. The operation may be successful if it is retried later. =item EAI_BADFLAGS The value of the C<flags> hint to getaddrinfo(), or the $flags parameter to getnameinfo() contains unrecognised flags. =item EAI_FAMILY The C<family> hint to getaddrinfo(), or the family of the socket address passed to getnameinfo() is not supported. =item EAI_NODATA The host name supplied to getaddrinfo() did not provide any usable address data. =item EAI_NONAME The host name supplied to getaddrinfo() does not exist, or the address supplied to getnameinfo() is not associated with a host name and the C<NI_NAMEREQD> flag was supplied. =item EAI_SERVICE The service name supplied to getaddrinfo() is not available for the socket type given in the $hints. =back =cut =head1 EXAMPLES =head2 Lookup for connect() The getaddrinfo() function converts a hostname and a service name into a list of structures, each containing a potential way to connect() to the named service on the named host. use IO::Socket; use Socket qw(SOCK_STREAM getaddrinfo); my %hints = (socktype => SOCK_STREAM); my ($err, @res) = getaddrinfo("localhost", "echo", \%hints); die "Cannot getaddrinfo - $err" if $err; my $sock; foreach my $ai (@res) { my $candidate = IO::Socket->new(); $candidate->socket($ai->{family}, $ai->{socktype}, $ai->{protocol}) or next; $candidate->connect($ai->{addr}) or next; $sock = $candidate; last; } die "Cannot connect to localhost:echo" unless $sock; $sock->print("Hello, world!\n"); print <$sock>; Because a list of potential candidates is returned, the C<while> loop tries each in turn until it finds one that succeeds both the socket() and connect() calls. This function performs the work of the legacy functions gethostbyname(), getservbyname(), inet_aton() and pack_sockaddr_in(). In practice this logic is better performed by L<IO::Socket::IP>. =head2 Making a human-readable string out of an address The getnameinfo() function converts a socket address, such as returned by getsockname() or getpeername(), into a pair of human-readable strings representing the address and service name. use IO::Socket::IP; use Socket qw(getnameinfo); my $server = IO::Socket::IP->new(LocalPort => 12345, Listen => 1) or die "Cannot listen - $@"; my $socket = $server->accept or die "accept: $!"; my ($err, $hostname, $servicename) = getnameinfo($socket->peername); die "Cannot getnameinfo - $err" if $err; print "The peer is connected from $hostname\n"; Since in this example only the hostname was used, the redundant conversion of the port number into a service name may be omitted by passing the C<NIx_NOSERV> flag. use Socket qw(getnameinfo NIx_NOSERV); my ($err, $hostname) = getnameinfo($socket->peername, 0, NIx_NOSERV); This function performs the work of the legacy functions unpack_sockaddr_in(), inet_ntoa(), gethostbyaddr() and getservbyport(). In practice this logic is better performed by L<IO::Socket::IP>. =head2 Resolving hostnames into IP addresses To turn a hostname into a human-readable plain IP address use getaddrinfo() to turn the hostname into a list of socket structures, then getnameinfo() on each one to make it a readable IP address again. use Socket qw(:addrinfo SOCK_RAW); my ($err, @res) = getaddrinfo($hostname, "", {socktype => SOCK_RAW}); die "Cannot getaddrinfo - $err" if $err; while( my $ai = shift @res ) { my ($err, $ipaddr) = getnameinfo($ai->{addr}, NI_NUMERICHOST, NIx_NOSERV); die "Cannot getnameinfo - $err" if $err; print "$ipaddr\n"; } The C<socktype> hint to getaddrinfo() filters the results to only include one socket type and protocol. Without this most OSes return three combinations, for C<SOCK_STREAM>, C<SOCK_DGRAM> and C<SOCK_RAW>, resulting in triplicate output of addresses. The C<NI_NUMERICHOST> flag to getnameinfo() causes it to return a string-formatted plain IP address, rather than reverse resolving it back into a hostname. This combination performs the work of the legacy functions gethostbyname() and inet_ntoa(). =head2 Accessing socket options The many C<SO_*> and other constants provide the socket option names for getsockopt() and setsockopt(). use IO::Socket::INET; use Socket qw(SOL_SOCKET SO_RCVBUF IPPROTO_IP IP_TTL); my $socket = IO::Socket::INET->new(LocalPort => 0, Proto => 'udp') or die "Cannot create socket: $@"; $socket->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or die "setsockopt: $!"; print "Receive buffer is ", $socket->getsockopt(SOL_SOCKET, SO_RCVBUF), " bytes\n"; print "IP TTL is ", $socket->getsockopt(IPPROTO_IP, IP_TTL), "\n"; As a convenience, L<IO::Socket>'s setsockopt() method will convert a number into a packed byte buffer, and getsockopt() will unpack a byte buffer of the correct size back into a number. =cut =head1 AUTHOR This module was originally maintained in Perl core by the Perl 5 Porters. It was extracted to dual-life on CPAN at version 1.95 by Paul Evans <leonerd@leonerd.org.uk> =cut use Carp; use warnings::register; require Exporter; require XSLoader; our @ISA = qw(Exporter); # <@Nicholas> you can't change @EXPORT without breaking the implicit API # Please put any new constants in @EXPORT_OK! # List re-ordered to match documentation above. Try to keep the ordering # consistent so it's easier to see which ones are or aren't documented. our @EXPORT = qw( PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6 PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN PF_X25 AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6 AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN AF_X25 SOCK_DGRAM SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM SOL_SOCKET SO_ACCEPTCONN SO_ATTACH_FILTER SO_BACKLOG SO_BROADCAST SO_CHAMELEON SO_DEBUG SO_DETACH_FILTER SO_DGRAM_ERRIND SO_DOMAIN SO_DONTLINGER SO_DONTROUTE SO_ERROR SO_FAMILY SO_KEEPALIVE SO_LINGER SO_OOBINLINE SO_PASSCRED SO_PASSIFNAME SO_PEERCRED SO_PROTOCOL SO_PROTOTYPE SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT SO_SECURITY_AUTHENTICATION SO_SECURITY_ENCRYPTION_NETWORK SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO SO_STATE SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE IP_HDRINCL IP_OPTIONS IP_RECVOPTS IP_RECVRETOPTS IP_RETOPTS IP_TOS IP_TTL MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_CTRUNC MSG_DONTROUTE MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FASTOPEN MSG_FIN MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_PROXY MSG_RST MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE SHUT_RD SHUT_RDWR SHUT_WR INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_RIGHTS SCM_TIMESTAMP SOMAXCONN IOV_MAX UIO_MAXIOV sockaddr_family pack_sockaddr_in unpack_sockaddr_in sockaddr_in pack_sockaddr_in6 unpack_sockaddr_in6 sockaddr_in6 pack_sockaddr_un unpack_sockaddr_un sockaddr_un inet_aton inet_ntoa ); # List re-ordered to match documentation above. Try to keep the ordering # consistent so it's easier to see which ones are or aren't documented. our @EXPORT_OK = qw( CR LF CRLF $CR $LF $CRLF SOCK_NONBLOCK SOCK_CLOEXEC IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP IP_BIND_ADDRESS_NO_PORT IP_DROP_MEMBERSHIP IP_DROP_SOURCE_MEMBERSHIP IP_FREEBIND IP_MULTICAST_ALL IP_MULTICAST_IF IP_MULTICAST_LOOP IP_MULTICAST_TTL IP_MTU IP_MTU_DISCOVER IP_NODEFRAG IP_RECVERR IP_TRANSPARENT IPPROTO_IP IPPROTO_IPV6 IPPROTO_RAW IPPROTO_ICMP IPPROTO_IGMP IPPROTO_TCP IPPROTO_UDP IPPROTO_GRE IPPROTO_ESP IPPROTO_AH IPPROTO_ICMPV6 IPPROTO_SCTP IP_PMTUDISC_DO IP_PMTUDISC_DONT IP_PMTUDISC_PROBE IP_PMTUDISC_WANT IPTOS_LOWDELAY IPTOS_THROUGHPUT IPTOS_RELIABILITY IPTOS_MINCOST TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT TCP_FASTOPEN TCP_INFO TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT TCP_KEEPIDLE TCP_KEEPINTVL TCP_LINGER2 TCP_MAXRT TCP_MAXSEG TCP_MD5SIG TCP_NODELAY TCP_NOOPT TCP_NOPUSH TCP_QUICKACK TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_USER_TIMEOUT TCP_WINDOW_CLAMP IN6ADDR_ANY IN6ADDR_LOOPBACK IPV6_ADDRFROM IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP IPV6_JOIN_GROUP IPV6_LEAVE_GROUP IPV6_MTU IPV6_MTU_DISCOVER IPV6_MULTICAST_HOPS IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_RECVERR IPV6_ROUTER_ALERT IPV6_UNICAST_HOPS IPV6_V6ONLY SO_LOCK_FILTER SO_RCVBUFFORCE SO_SNDBUFFORCE pack_ip_mreq unpack_ip_mreq pack_ip_mreq_source unpack_ip_mreq_source pack_ipv6_mreq unpack_ipv6_mreq inet_pton inet_ntop getaddrinfo getnameinfo AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV NIx_NOHOST NIx_NOSERV EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM ); our %EXPORT_TAGS = ( crlf => [qw(CR LF CRLF $CR $LF $CRLF)], addrinfo => [qw(getaddrinfo getnameinfo), grep m/^(?:AI|NI|NIx|EAI)_/, @EXPORT_OK], all => [@EXPORT, @EXPORT_OK], ); BEGIN { sub CR () {"\015"} sub LF () {"\012"} sub CRLF () {"\015\012"} # These are not gni() constants; they're extensions for the perl API # The definitions in Socket.pm and Socket.xs must match sub NIx_NOHOST() {1 << 0} sub NIx_NOSERV() {1 << 1} } *CR = \CR(); *LF = \LF(); *CRLF = \CRLF(); sub sockaddr_in { if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die my($af, $port, @quad) = @_; warnings::warn "6-ARG sockaddr_in call is deprecated" if warnings::enabled(); pack_sockaddr_in($port, inet_aton(join('.', @quad))); } elsif (wantarray) { croak "usage: (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1; unpack_sockaddr_in(@_); } else { croak "usage: sin_sv = sockaddr_in(port,iaddr))" unless @_ == 2; pack_sockaddr_in(@_); } } sub sockaddr_in6 { if (wantarray) { croak "usage: (port,in6addr,scope_id,flowinfo) = sockaddr_in6(sin6_sv)" unless @_ == 1; unpack_sockaddr_in6(@_); } else { croak "usage: sin6_sv = sockaddr_in6(port,in6addr,[scope_id,[flowinfo]])" unless @_ >= 2 and @_ <= 4; pack_sockaddr_in6(@_); } } sub sockaddr_un { if (wantarray) { croak "usage: (filename) = sockaddr_un(sun_sv)" unless @_ == 1; unpack_sockaddr_un(@_); } else { croak "usage: sun_sv = sockaddr_un(filename)" unless @_ == 1; pack_sockaddr_un(@_); } } XSLoader::load(__PACKAGE__, $VERSION); my %errstr; if( defined &getaddrinfo ) { # These are not part of the API, nothing uses them, and deleting them # reduces the size of %Socket:: by about 12K delete $Socket::{fake_getaddrinfo}; delete $Socket::{fake_getnameinfo}; } else { require Scalar::Util; *getaddrinfo = \&fake_getaddrinfo; *getnameinfo = \&fake_getnameinfo; # These numbers borrowed from GNU libc's implementation, but since # they're only used by our emulation, it doesn't matter if the real # platform's values differ my %constants = ( AI_PASSIVE => 1, AI_CANONNAME => 2, AI_NUMERICHOST => 4, AI_V4MAPPED => 8, AI_ALL => 16, AI_ADDRCONFIG => 32, # RFC 2553 doesn't define this but Linux does - lets be nice and # provide it since we can AI_NUMERICSERV => 1024, EAI_BADFLAGS => -1, EAI_NONAME => -2, EAI_NODATA => -5, EAI_FAMILY => -6, EAI_SERVICE => -8, NI_NUMERICHOST => 1, NI_NUMERICSERV => 2, NI_NOFQDN => 4, NI_NAMEREQD => 8, NI_DGRAM => 16, # Constants we don't support. Export them, but croak if anyone tries to # use them AI_IDN => 64, AI_CANONIDN => 128, AI_IDN_ALLOW_UNASSIGNED => 256, AI_IDN_USE_STD3_ASCII_RULES => 512, NI_IDN => 32, NI_IDN_ALLOW_UNASSIGNED => 64, NI_IDN_USE_STD3_ASCII_RULES => 128, # Error constants we'll never return, so it doesn't matter what value # these have, nor that we don't provide strings for them EAI_SYSTEM => -11, EAI_BADHINTS => -1000, EAI_PROTOCOL => -1001 ); foreach my $name ( keys %constants ) { my $value = $constants{$name}; no strict 'refs'; defined &$name or *$name = sub () { $value }; } %errstr = ( # These strings from RFC 2553 EAI_BADFLAGS() => "invalid value for ai_flags", EAI_NONAME() => "nodename nor servname provided, or not known", EAI_NODATA() => "no address associated with nodename", EAI_FAMILY() => "ai_family not supported", EAI_SERVICE() => "servname not supported for ai_socktype", ); } # The following functions are used if the system does not have a # getaddrinfo(3) function in libc; and are used to emulate it for the AF_INET # family # Borrowed from Regexp::Common::net my $REGEXP_IPv4_DECIMAL = qr/25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}/; my $REGEXP_IPv4_DOTTEDQUAD = qr/$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL/; sub fake_makeerr { my ( $errno ) = @_; my $errstr = $errno == 0 ? "" : ( $errstr{$errno} || $errno ); return Scalar::Util::dualvar( $errno, $errstr ); } sub fake_getaddrinfo { my ( $node, $service, $hints ) = @_; $node = "" unless defined $node; $service = "" unless defined $service; my ( $family, $socktype, $protocol, $flags ) = @$hints{qw( family socktype protocol flags )}; $family ||= Socket::AF_INET(); # 0 == AF_UNSPEC, which we want too $family == Socket::AF_INET() or return fake_makeerr( EAI_FAMILY() ); $socktype ||= 0; $protocol ||= 0; $flags ||= 0; my $flag_passive = $flags & AI_PASSIVE(); $flags &= ~AI_PASSIVE(); my $flag_canonname = $flags & AI_CANONNAME(); $flags &= ~AI_CANONNAME(); my $flag_numerichost = $flags & AI_NUMERICHOST(); $flags &= ~AI_NUMERICHOST(); my $flag_numericserv = $flags & AI_NUMERICSERV(); $flags &= ~AI_NUMERICSERV(); # These constants don't apply to AF_INET-only lookups, so we might as well # just ignore them. For AI_ADDRCONFIG we just presume the host has ability # to talk AF_INET. If not we'd have to return no addresses at all. :) $flags &= ~(AI_V4MAPPED()|AI_ALL()|AI_ADDRCONFIG()); $flags & (AI_IDN()|AI_CANONIDN()|AI_IDN_ALLOW_UNASSIGNED()|AI_IDN_USE_STD3_ASCII_RULES()) and croak "Socket::getaddrinfo() does not support IDN"; $flags == 0 or return fake_makeerr( EAI_BADFLAGS() ); $node eq "" and $service eq "" and return fake_makeerr( EAI_NONAME() ); my $canonname; my @addrs; if( $node ne "" ) { return fake_makeerr( EAI_NONAME() ) if( $flag_numerichost and $node !~ m/^$REGEXP_IPv4_DOTTEDQUAD$/ ); ( $canonname, undef, undef, undef, @addrs ) = gethostbyname( $node ); defined $canonname or return fake_makeerr( EAI_NONAME() ); undef $canonname unless $flag_canonname; } else { $addrs[0] = $flag_passive ? Socket::inet_aton( "0.0.0.0" ) : Socket::inet_aton( "127.0.0.1" ); } my @ports; # Actually ARRAYrefs of [ socktype, protocol, port ] my $protname = ""; if( $protocol ) { $protname = eval { getprotobynumber( $protocol ) }; } if( $service ne "" and $service !~ m/^\d+$/ ) { return fake_makeerr( EAI_NONAME() ) if( $flag_numericserv ); getservbyname( $service, $protname ) or return fake_makeerr( EAI_SERVICE() ); } foreach my $this_socktype ( Socket::SOCK_STREAM(), Socket::SOCK_DGRAM(), Socket::SOCK_RAW() ) { next if $socktype and $this_socktype != $socktype; my $this_protname = "raw"; $this_socktype == Socket::SOCK_STREAM() and $this_protname = "tcp"; $this_socktype == Socket::SOCK_DGRAM() and $this_protname = "udp"; next if $protname and $this_protname ne $protname; my $port; if( $service ne "" ) { if( $service =~ m/^\d+$/ ) { $port = "$service"; } else { ( undef, undef, $port, $this_protname ) = getservbyname( $service, $this_protname ); next unless defined $port; } } else { $port = 0; } push @ports, [ $this_socktype, eval { scalar getprotobyname( $this_protname ) } || 0, $port ]; } my @ret; foreach my $addr ( @addrs ) { foreach my $portspec ( @ports ) { my ( $socktype, $protocol, $port ) = @$portspec; push @ret, { family => $family, socktype => $socktype, protocol => $protocol, addr => Socket::pack_sockaddr_in( $port, $addr ), canonname => undef, }; } } # Only supply canonname for the first result if( defined $canonname ) { $ret[0]->{canonname} = $canonname; } return ( fake_makeerr( 0 ), @ret ); } sub fake_getnameinfo { my ( $addr, $flags, $xflags ) = @_; my ( $port, $inetaddr ); eval { ( $port, $inetaddr ) = Socket::unpack_sockaddr_in( $addr ) } or return fake_makeerr( EAI_FAMILY() ); my $family = Socket::AF_INET(); $flags ||= 0; my $flag_numerichost = $flags & NI_NUMERICHOST(); $flags &= ~NI_NUMERICHOST(); my $flag_numericserv = $flags & NI_NUMERICSERV(); $flags &= ~NI_NUMERICSERV(); my $flag_nofqdn = $flags & NI_NOFQDN(); $flags &= ~NI_NOFQDN(); my $flag_namereqd = $flags & NI_NAMEREQD(); $flags &= ~NI_NAMEREQD(); my $flag_dgram = $flags & NI_DGRAM() ; $flags &= ~NI_DGRAM(); $flags & (NI_IDN()|NI_IDN_ALLOW_UNASSIGNED()|NI_IDN_USE_STD3_ASCII_RULES()) and croak "Socket::getnameinfo() does not support IDN"; $flags == 0 or return fake_makeerr( EAI_BADFLAGS() ); $xflags ||= 0; my $node; if( $xflags & NIx_NOHOST ) { $node = undef; } elsif( $flag_numerichost ) { $node = Socket::inet_ntoa( $inetaddr ); } else { $node = gethostbyaddr( $inetaddr, $family ); if( !defined $node ) { return fake_makeerr( EAI_NONAME() ) if $flag_namereqd; $node = Socket::inet_ntoa( $inetaddr ); } elsif( $flag_nofqdn ) { my ( $shortname ) = split m/\./, $node; my ( $fqdn ) = gethostbyname $shortname; $node = $shortname if defined $fqdn and $fqdn eq $node; } } my $service; if( $xflags & NIx_NOSERV ) { $service = undef; } elsif( $flag_numericserv ) { $service = "$port"; } else { my $protname = $flag_dgram ? "udp" : ""; $service = getservbyport( $port, $protname ); if( !defined $service ) { $service = "$port"; } } return ( fake_makeerr( 0 ), $node, $service ); } 1; Net/SSLeay.pm 0000644 00000163424 15037233333 0007004 0 ustar 00 # Net::SSLeay.pm - Perl module for using Eric Young's implementation of SSL # # Copyright (c) 1996-2003 Sampo Kellomäki <sampo@iki.fi> # Copyright (c) 2005-2010 Florian Ragwitz <rafl@debian.org> # Copyright (c) 2005-2018 Mike McCauley <mikem@airspayce.com> # Copyright (c) 2018- Chris Novakovic <chris@chrisn.me.uk> # Copyright (c) 2018- Tuure Vartiainen <vartiait@radiatorsoftware.com> # Copyright (c) 2018- Heikki Vatiainen <hvn@radiatorsoftware.com> # # All rights reserved. # # This module is released under the terms of the Artistic License 2.0. For # details, see the LICENSE file distributed with Net-SSLeay's source code. package Net::SSLeay; use 5.8.1; use strict; use Carp; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD $CRLF); use Socket; use Errno; require Exporter; use AutoLoader; # 0=no warns, 1=only errors, 2=ciphers, 3=progress, 4=dump data $Net::SSLeay::trace = 0; # Do not change here, use # $Net::SSLeay::trace = [1-4] in caller # 2 = insist on v2 SSL protocol # 3 = insist on v3 SSL # 10 = insist on TLSv1 # 11 = insist on TLSv1.1 # 12 = insist on TLSv1.2 # 13 = insist on TLSv1.3 # 0 or undef = guess (v23) # $Net::SSLeay::ssl_version = 0; # don't change here, use # Net::SSLeay::version=[2,3,0] in caller #define to enable the "cat /proc/$$/stat" stuff $Net::SSLeay::linux_debug = 0; # Number of seconds to sleep after sending message and before half # closing connection. Useful with antiquated broken servers. $Net::SSLeay::slowly = 0; # RANDOM NUMBER INITIALIZATION # # Edit to your taste. Using /dev/random would be more secure, but may # block if randomness is not available, thus the default is # /dev/urandom. $how_random determines how many bits of randomness to take # from the device. You should take enough (read SSLeay/doc/rand), but # beware that randomness is limited resource so you should not waste # it either or you may end up with randomness depletion (situation where # /dev/random would block and /dev/urandom starts to return predictable # numbers). # # N.B. /dev/urandom does not exist on all systems, such as Solaris 2.6. In that # case you should get a third party package that emulates /dev/urandom # (e.g. via named pipe) or supply a random number file. Some such # packages are documented in Caveat section of the POD documentation. $Net::SSLeay::random_device = '/dev/urandom'; $Net::SSLeay::how_random = 512; $VERSION = '1.88'; # Also update $Net::SSLeay::Handle::VERSION @ISA = qw(Exporter); #BEWARE: # 3-columns part of @EXPORT_OK related to constants is the output of command: # perl helper_script/regen_openssl_constants.pl -gen-pod # if you add/remove any constant you need to update it manually @EXPORT_OK = qw( ASN1_STRFLGS_ESC_CTRL NID_netscape R_UNKNOWN_REMOTE_ERROR_TYPE ASN1_STRFLGS_ESC_MSB NID_netscape_base_url R_UNKNOWN_STATE ASN1_STRFLGS_ESC_QUOTE NID_netscape_ca_policy_url R_X509_LIB ASN1_STRFLGS_RFC2253 NID_netscape_ca_revocation_url SENT_SHUTDOWN CB_ACCEPT_EXIT NID_netscape_cert_extension SESSION_ASN1_VERSION CB_ACCEPT_LOOP NID_netscape_cert_sequence SESS_CACHE_BOTH CB_ALERT NID_netscape_cert_type SESS_CACHE_CLIENT CB_CONNECT_EXIT NID_netscape_comment SESS_CACHE_NO_AUTO_CLEAR CB_CONNECT_LOOP NID_netscape_data_type SESS_CACHE_NO_INTERNAL CB_EXIT NID_netscape_renewal_url SESS_CACHE_NO_INTERNAL_LOOKUP CB_HANDSHAKE_DONE NID_netscape_revocation_url SESS_CACHE_NO_INTERNAL_STORE CB_HANDSHAKE_START NID_netscape_ssl_server_name SESS_CACHE_OFF CB_LOOP NID_ns_sgc SESS_CACHE_SERVER CB_READ NID_organizationName SSL3_VERSION CB_READ_ALERT NID_organizationalUnitName SSLEAY_BUILT_ON CB_WRITE NID_pbeWithMD2AndDES_CBC SSLEAY_CFLAGS CB_WRITE_ALERT NID_pbeWithMD2AndRC2_CBC SSLEAY_DIR ERROR_NONE NID_pbeWithMD5AndCast5_CBC SSLEAY_PLATFORM ERROR_SSL NID_pbeWithMD5AndDES_CBC SSLEAY_VERSION ERROR_SYSCALL NID_pbeWithMD5AndRC2_CBC ST_ACCEPT ERROR_WANT_ACCEPT NID_pbeWithSHA1AndDES_CBC ST_BEFORE ERROR_WANT_CONNECT NID_pbeWithSHA1AndRC2_CBC ST_CONNECT ERROR_WANT_READ NID_pbe_WithSHA1And128BitRC2_CBC ST_INIT ERROR_WANT_WRITE NID_pbe_WithSHA1And128BitRC4 ST_OK ERROR_WANT_X509_LOOKUP NID_pbe_WithSHA1And2_Key_TripleDES_CBC ST_READ_BODY ERROR_ZERO_RETURN NID_pbe_WithSHA1And3_Key_TripleDES_CBC ST_READ_HEADER EVP_PKS_DSA NID_pbe_WithSHA1And40BitRC2_CBC TLS1_1_VERSION EVP_PKS_EC NID_pbe_WithSHA1And40BitRC4 TLS1_2_VERSION EVP_PKS_RSA NID_pbes2 TLS1_3_VERSION EVP_PKT_ENC NID_pbmac1 TLS1_VERSION EVP_PKT_EXCH NID_pkcs TLSEXT_STATUSTYPE_ocsp EVP_PKT_EXP NID_pkcs3 VERIFY_CLIENT_ONCE EVP_PKT_SIGN NID_pkcs7 VERIFY_FAIL_IF_NO_PEER_CERT EVP_PK_DH NID_pkcs7_data VERIFY_NONE EVP_PK_DSA NID_pkcs7_digest VERIFY_PEER EVP_PK_EC NID_pkcs7_encrypted VERIFY_POST_HANDSHAKE EVP_PK_RSA NID_pkcs7_enveloped V_OCSP_CERTSTATUS_GOOD FILETYPE_ASN1 NID_pkcs7_signed V_OCSP_CERTSTATUS_REVOKED FILETYPE_PEM NID_pkcs7_signedAndEnveloped V_OCSP_CERTSTATUS_UNKNOWN F_CLIENT_CERTIFICATE NID_pkcs8ShroudedKeyBag WRITING F_CLIENT_HELLO NID_pkcs9 X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT F_CLIENT_MASTER_KEY NID_pkcs9_challengePassword X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS F_D2I_SSL_SESSION NID_pkcs9_contentType X509_CHECK_FLAG_NEVER_CHECK_SUBJECT F_GET_CLIENT_FINISHED NID_pkcs9_countersignature X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS F_GET_CLIENT_HELLO NID_pkcs9_emailAddress X509_CHECK_FLAG_NO_WILDCARDS F_GET_CLIENT_MASTER_KEY NID_pkcs9_extCertAttributes X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS F_GET_SERVER_FINISHED NID_pkcs9_messageDigest X509_FILETYPE_ASN1 F_GET_SERVER_HELLO NID_pkcs9_signingTime X509_FILETYPE_DEFAULT F_GET_SERVER_VERIFY NID_pkcs9_unstructuredAddress X509_FILETYPE_PEM F_I2D_SSL_SESSION NID_pkcs9_unstructuredName X509_LOOKUP F_READ_N NID_private_key_usage_period X509_PURPOSE_ANY F_REQUEST_CERTIFICATE NID_rc2_40_cbc X509_PURPOSE_CRL_SIGN F_SERVER_HELLO NID_rc2_64_cbc X509_PURPOSE_NS_SSL_SERVER F_SSL_CERT_NEW NID_rc2_cbc X509_PURPOSE_OCSP_HELPER F_SSL_GET_NEW_SESSION NID_rc2_cfb64 X509_PURPOSE_SMIME_ENCRYPT F_SSL_NEW NID_rc2_ecb X509_PURPOSE_SMIME_SIGN F_SSL_READ NID_rc2_ofb64 X509_PURPOSE_SSL_CLIENT F_SSL_RSA_PRIVATE_DECRYPT NID_rc4 X509_PURPOSE_SSL_SERVER F_SSL_RSA_PUBLIC_ENCRYPT NID_rc4_40 X509_PURPOSE_TIMESTAMP_SIGN F_SSL_SESSION_NEW NID_rc5_cbc X509_TRUST_COMPAT F_SSL_SESSION_PRINT_FP NID_rc5_cfb64 X509_TRUST_EMAIL F_SSL_SET_FD NID_rc5_ecb X509_TRUST_OBJECT_SIGN F_SSL_SET_RFD NID_rc5_ofb64 X509_TRUST_OCSP_REQUEST F_SSL_SET_WFD NID_ripemd160 X509_TRUST_OCSP_SIGN F_SSL_USE_CERTIFICATE NID_ripemd160WithRSA X509_TRUST_SSL_CLIENT F_SSL_USE_CERTIFICATE_ASN1 NID_rle_compression X509_TRUST_SSL_SERVER F_SSL_USE_CERTIFICATE_FILE NID_rsa X509_TRUST_TSA F_SSL_USE_PRIVATEKEY NID_rsaEncryption X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH F_SSL_USE_PRIVATEKEY_ASN1 NID_rsadsi X509_V_ERR_AKID_SKID_MISMATCH F_SSL_USE_PRIVATEKEY_FILE NID_safeContentsBag X509_V_ERR_APPLICATION_VERIFICATION F_SSL_USE_RSAPRIVATEKEY NID_sdsiCertificate X509_V_ERR_CA_KEY_TOO_SMALL F_SSL_USE_RSAPRIVATEKEY_ASN1 NID_secretBag X509_V_ERR_CA_MD_TOO_WEAK F_SSL_USE_RSAPRIVATEKEY_FILE NID_serialNumber X509_V_ERR_CERT_CHAIN_TOO_LONG F_WRITE_PENDING NID_server_auth X509_V_ERR_CERT_HAS_EXPIRED GEN_DIRNAME NID_sha X509_V_ERR_CERT_NOT_YET_VALID GEN_DNS NID_sha1 X509_V_ERR_CERT_REJECTED GEN_EDIPARTY NID_sha1WithRSA X509_V_ERR_CERT_REVOKED GEN_EMAIL NID_sha1WithRSAEncryption X509_V_ERR_CERT_SIGNATURE_FAILURE GEN_IPADD NID_shaWithRSAEncryption X509_V_ERR_CERT_UNTRUSTED GEN_OTHERNAME NID_stateOrProvinceName X509_V_ERR_CRL_HAS_EXPIRED GEN_RID NID_subject_alt_name X509_V_ERR_CRL_NOT_YET_VALID GEN_URI NID_subject_key_identifier X509_V_ERR_CRL_PATH_VALIDATION_ERROR GEN_X400 NID_surname X509_V_ERR_CRL_SIGNATURE_FAILURE LIBRESSL_VERSION_NUMBER NID_sxnet X509_V_ERR_DANE_NO_MATCH MBSTRING_ASC NID_time_stamp X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT MBSTRING_BMP NID_title X509_V_ERR_DIFFERENT_CRL_SCOPE MBSTRING_FLAG NID_undef X509_V_ERR_EE_KEY_TOO_SMALL MBSTRING_UNIV NID_uniqueIdentifier X509_V_ERR_EMAIL_MISMATCH MBSTRING_UTF8 NID_x509Certificate X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD MIN_RSA_MODULUS_LENGTH_IN_BYTES NID_x509Crl X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD MODE_ACCEPT_MOVING_WRITE_BUFFER NID_zlib_compression X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD MODE_AUTO_RETRY NOTHING X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD MODE_ENABLE_PARTIAL_WRITE OCSP_RESPONSE_STATUS_INTERNALERROR X509_V_ERR_EXCLUDED_VIOLATION MODE_RELEASE_BUFFERS OCSP_RESPONSE_STATUS_MALFORMEDREQUEST X509_V_ERR_HOSTNAME_MISMATCH NID_OCSP_sign OCSP_RESPONSE_STATUS_SIGREQUIRED X509_V_ERR_INVALID_CA NID_SMIMECapabilities OCSP_RESPONSE_STATUS_SUCCESSFUL X509_V_ERR_INVALID_CALL NID_X500 OCSP_RESPONSE_STATUS_TRYLATER X509_V_ERR_INVALID_EXTENSION NID_X509 OCSP_RESPONSE_STATUS_UNAUTHORIZED X509_V_ERR_INVALID_NON_CA NID_ad_OCSP OPENSSL_BUILT_ON X509_V_ERR_INVALID_POLICY_EXTENSION NID_ad_ca_issuers OPENSSL_CFLAGS X509_V_ERR_INVALID_PURPOSE NID_algorithm OPENSSL_DIR X509_V_ERR_IP_ADDRESS_MISMATCH NID_authority_key_identifier OPENSSL_ENGINES_DIR X509_V_ERR_KEYUSAGE_NO_CERTSIGN NID_basic_constraints OPENSSL_PLATFORM X509_V_ERR_KEYUSAGE_NO_CRL_SIGN NID_bf_cbc OPENSSL_VERSION X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE NID_bf_cfb64 OPENSSL_VERSION_NUMBER X509_V_ERR_NO_EXPLICIT_POLICY NID_bf_ecb OP_ALL X509_V_ERR_NO_VALID_SCTS NID_bf_ofb64 OP_ALLOW_NO_DHE_KEX X509_V_ERR_OCSP_CERT_UNKNOWN NID_cast5_cbc OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION X509_V_ERR_OCSP_VERIFY_FAILED NID_cast5_cfb64 OP_CIPHER_SERVER_PREFERENCE X509_V_ERR_OCSP_VERIFY_NEEDED NID_cast5_ecb OP_CISCO_ANYCONNECT X509_V_ERR_OUT_OF_MEM NID_cast5_ofb64 OP_COOKIE_EXCHANGE X509_V_ERR_PATH_LENGTH_EXCEEDED NID_certBag OP_CRYPTOPRO_TLSEXT_BUG X509_V_ERR_PATH_LOOP NID_certificate_policies OP_DONT_INSERT_EMPTY_FRAGMENTS X509_V_ERR_PERMITTED_VIOLATION NID_client_auth OP_ENABLE_MIDDLEBOX_COMPAT X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED NID_code_sign OP_EPHEMERAL_RSA X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED NID_commonName OP_LEGACY_SERVER_CONNECT X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION NID_countryName OP_MICROSOFT_BIG_SSLV3_BUFFER X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN NID_crlBag OP_MICROSOFT_SESS_ID_BUG X509_V_ERR_STORE_LOOKUP NID_crl_distribution_points OP_MSIE_SSLV2_RSA_PADDING X509_V_ERR_SUBJECT_ISSUER_MISMATCH NID_crl_number OP_NETSCAPE_CA_DN_BUG X509_V_ERR_SUBTREE_MINMAX NID_crl_reason OP_NETSCAPE_CHALLENGE_BUG X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 NID_delta_crl OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_ALGORITHM NID_des_cbc OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_CURVE NID_des_cfb64 OP_NON_EXPORT_FIRST X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM NID_des_ecb OP_NO_ANTI_REPLAY X509_V_ERR_SUITE_B_INVALID_VERSION NID_des_ede OP_NO_CLIENT_RENEGOTIATION X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED NID_des_ede3 OP_NO_COMPRESSION X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY NID_des_ede3_cbc OP_NO_ENCRYPT_THEN_MAC X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE NID_des_ede3_cfb64 OP_NO_QUERY_MTU X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE NID_des_ede3_ofb64 OP_NO_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL NID_des_ede_cbc OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER NID_des_ede_cfb64 OP_NO_SSL_MASK X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT NID_des_ede_ofb64 OP_NO_SSLv2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY NID_des_ofb64 OP_NO_SSLv3 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE NID_description OP_NO_TICKET X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION NID_desx_cbc OP_NO_TLSv1 X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION NID_dhKeyAgreement OP_NO_TLSv1_1 X509_V_ERR_UNNESTED_RESOURCE NID_dnQualifier OP_NO_TLSv1_2 X509_V_ERR_UNSPECIFIED NID_dsa OP_NO_TLSv1_3 X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX NID_dsaWithSHA OP_PKCS1_CHECK_1 X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE NID_dsaWithSHA1 OP_PKCS1_CHECK_2 X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE NID_dsaWithSHA1_2 OP_PRIORITIZE_CHACHA X509_V_ERR_UNSUPPORTED_NAME_SYNTAX NID_dsa_2 OP_SAFARI_ECDHE_ECDSA_BUG X509_V_FLAG_ALLOW_PROXY_CERTS NID_email_protect OP_SINGLE_DH_USE X509_V_FLAG_CB_ISSUER_CHECK NID_ext_key_usage OP_SINGLE_ECDH_USE X509_V_FLAG_CHECK_SS_SIGNATURE NID_ext_req OP_SSLEAY_080_CLIENT_DH_BUG X509_V_FLAG_CRL_CHECK NID_friendlyName OP_SSLREF2_REUSE_CERT_TYPE_BUG X509_V_FLAG_CRL_CHECK_ALL NID_givenName OP_TLSEXT_PADDING X509_V_FLAG_EXPLICIT_POLICY NID_hmacWithSHA1 OP_TLS_BLOCK_PADDING_BUG X509_V_FLAG_EXTENDED_CRL_SUPPORT NID_id_ad OP_TLS_D5_BUG X509_V_FLAG_IGNORE_CRITICAL NID_id_ce OP_TLS_ROLLBACK_BUG X509_V_FLAG_INHIBIT_ANY NID_id_kp READING X509_V_FLAG_INHIBIT_MAP NID_id_pbkdf2 RECEIVED_SHUTDOWN X509_V_FLAG_NOTIFY_POLICY NID_id_pe RSA_3 X509_V_FLAG_NO_ALT_CHAINS NID_id_pkix RSA_F4 X509_V_FLAG_NO_CHECK_TIME NID_id_qt_cps R_BAD_AUTHENTICATION_TYPE X509_V_FLAG_PARTIAL_CHAIN NID_id_qt_unotice R_BAD_CHECKSUM X509_V_FLAG_POLICY_CHECK NID_idea_cbc R_BAD_MAC_DECODE X509_V_FLAG_POLICY_MASK NID_idea_cfb64 R_BAD_RESPONSE_ARGUMENT X509_V_FLAG_SUITEB_128_LOS NID_idea_ecb R_BAD_SSL_FILETYPE X509_V_FLAG_SUITEB_128_LOS_ONLY NID_idea_ofb64 R_BAD_SSL_SESSION_ID_LENGTH X509_V_FLAG_SUITEB_192_LOS NID_info_access R_BAD_STATE X509_V_FLAG_TRUSTED_FIRST NID_initials R_BAD_WRITE_RETRY X509_V_FLAG_USE_CHECK_TIME NID_invalidity_date R_CHALLENGE_IS_DIFFERENT X509_V_FLAG_USE_DELTAS NID_issuer_alt_name R_CIPHER_TABLE_SRC_ERROR X509_V_FLAG_X509_STRICT NID_keyBag R_INVALID_CHALLENGE_LENGTH X509_V_OK NID_key_usage R_NO_CERTIFICATE_SET XN_FLAG_COMPAT NID_localKeyID R_NO_CERTIFICATE_SPECIFIED XN_FLAG_DN_REV NID_localityName R_NO_CIPHER_LIST XN_FLAG_DUMP_UNKNOWN_FIELDS NID_md2 R_NO_CIPHER_MATCH XN_FLAG_FN_ALIGN NID_md2WithRSAEncryption R_NO_PRIVATEKEY XN_FLAG_FN_LN NID_md5 R_NO_PUBLICKEY XN_FLAG_FN_MASK NID_md5WithRSA R_NULL_SSL_CTX XN_FLAG_FN_NONE NID_md5WithRSAEncryption R_PEER_DID_NOT_RETURN_A_CERTIFICATE XN_FLAG_FN_OID NID_md5_sha1 R_PEER_ERROR XN_FLAG_FN_SN NID_mdc2 R_PEER_ERROR_CERTIFICATE XN_FLAG_MULTILINE NID_mdc2WithRSA R_PEER_ERROR_NO_CIPHER XN_FLAG_ONELINE NID_ms_code_com R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE XN_FLAG_RFC2253 NID_ms_code_ind R_PUBLIC_KEY_ENCRYPT_ERROR XN_FLAG_SEP_COMMA_PLUS NID_ms_ctl_sign R_PUBLIC_KEY_IS_NOT_RSA XN_FLAG_SEP_CPLUS_SPC NID_ms_efs R_READ_WRONG_PACKET_TYPE XN_FLAG_SEP_MASK NID_ms_ext_req R_SHORT_READ XN_FLAG_SEP_MULTILINE NID_ms_sgc R_SSL_SESSION_ID_IS_DIFFERENT XN_FLAG_SEP_SPLUS_SPC NID_name R_UNABLE_TO_EXTRACT_PUBLIC_KEY XN_FLAG_SPC_EQ BIO_eof BIO_f_ssl BIO_free BIO_new BIO_new_file BIO_pending BIO_read BIO_s_mem BIO_wpending BIO_write CTX_free CTX_get_cert_store CTX_new CTX_use_RSAPrivateKey_file CTX_use_certificate_file CTX_v23_new CTX_v2_new CTX_v3_new ERR_error_string ERR_get_error ERR_load_RAND_strings ERR_load_SSL_strings PEM_read_bio_X509_CRL RSA_free RSA_generate_key SESSION SESSION_free SESSION_get_master_key SESSION_new SESSION_print X509_NAME_get_text_by_NID X509_NAME_oneline X509_STORE_CTX_set_flags X509_STORE_add_cert X509_STORE_add_crl X509_check_email X509_check_host X509_check_ip X509_check_ip_asc X509_free X509_get_issuer_name X509_get_subject_name X509_load_cert_crl_file X509_load_cert_file X509_load_crl_file accept add_session clear clear_error connect copy_session_id d2i_SSL_SESSION die_if_ssl_error die_now do_https dump_peer_certificate err flush_sessions free get_cipher get_cipher_list get_client_random get_fd get_http get_http4 get_https get_https3 get_https4 get_httpx get_httpx4 get_peer_certificate get_peer_cert_chain get_rbio get_read_ahead get_server_random get_shared_ciphers get_time get_timeout get_wbio i2d_SSL_SESSION load_error_strings make_form make_headers new peek pending post_http post_http4 post_https post_https3 post_https4 post_httpx post_httpx4 print_errs read remove_session rstate_string rstate_string_long set_bio set_cert_and_key set_cipher_list set_fd set_read_ahead set_rfd set_server_cert_and_key set_session set_time set_timeout set_verify set_wfd ssl_read_CRLF ssl_read_all ssl_read_until ssl_write_CRLF ssl_write_all sslcat state_string state_string_long tcp_read_CRLF tcp_read_all tcp_read_until tcp_write_CRLF tcp_write_all tcpcat tcpxcat use_PrivateKey use_PrivateKey_ASN1 use_PrivateKey_file use_RSAPrivateKey use_RSAPrivateKey_ASN1 use_RSAPrivateKey_file use_certificate use_certificate_ASN1 use_certificate_file write d2i_OCSP_RESPONSE i2d_OCSP_RESPONSE OCSP_RESPONSE_free d2i_OCSP_REQUEST i2d_OCSP_REQUEST OCSP_REQUEST_free OCSP_cert2ids OCSP_ids2req OCSP_response_status OCSP_response_status_str OCSP_response_verify OCSP_response_results OCSP_RESPONSE_STATUS_INTERNALERROR OCSP_RESPONSE_STATUS_MALFORMEDREQUEST OCSP_RESPONSE_STATUS_SIGREQUIRED OCSP_RESPONSE_STATUS_SUCCESSFUL OCSP_RESPONSE_STATUS_TRYLATER OCSP_RESPONSE_STATUS_UNAUTHORIZED TLSEXT_STATUSTYPE_ocsp V_OCSP_CERTSTATUS_GOOD V_OCSP_CERTSTATUS_REVOKED V_OCSP_CERTSTATUS_UNKNOWN ); sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; my $val = constant($constname); if ($! != 0) { if ($! =~ /((Invalid)|(not valid))/i || $!{EINVAL}) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { croak "Your vendor has not defined SSLeay macro $constname"; } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } eval { require XSLoader; XSLoader::load('Net::SSLeay', $VERSION); 1; } or do { require DynaLoader; push @ISA, 'DynaLoader'; bootstrap Net::SSLeay $VERSION; }; # Preloaded methods go here. $CRLF = "\x0d\x0a"; # because \r\n is not fully portable ### Print SSLeay error stack sub print_errs { my ($msg) = @_; my ($count, $err, $errs, $e) = (0,0,''); while ($err = ERR_get_error()) { $count ++; $e = "$msg $$: $count - " . ERR_error_string($err) . "\n"; $errs .= $e; warn $e if $Net::SSLeay::trace; } return $errs; } # Death is conditional to SSLeay errors existing, i.e. this function checks # for errors and only dies in affirmative. # usage: Net::SSLeay::write($ssl, "foo") or die_if_ssl_error("SSL write ($!)"); sub die_if_ssl_error { my ($msg) = @_; die "$$: $msg\n" if print_errs($msg); } # Unconditional death. Used to print SSLeay errors before dying. # usage: Net::SSLeay::connect($ssl) or die_now("Failed SSL connect ($!)"); sub die_now { my ($msg) = @_; print_errs($msg); die "$$: $msg\n"; } # Perl 5.6.* unicode support causes that length() no longer reliably # reflects the byte length of a string. This eval is to fix that. # Thanks to Sean Burke for the snippet. BEGIN{ eval 'use bytes; sub blength ($) { defined $_[0] ? length $_[0] : 0 }'; $@ and eval ' sub blength ($) { defined $_[0] ? length $_[0] : 0 }' ; } # Autoload methods go after __END__, and are processed by the autosplit program. 1; __END__ ### Some methods that are macros in C sub want_nothing { want(shift) == 1 } sub want_read { want(shift) == 2 } sub want_write { want(shift) == 3 } sub want_X509_lookup { want(shift) == 4 } ### ### Open TCP stream to given host and port, looking up the details ### from system databases or DNS. ### sub open_tcp_connection { my ($dest_serv, $port) = @_; my ($errs); $port = getservbyname($port, 'tcp') unless $port =~ /^\d+$/; my $dest_serv_ip = gethostbyname($dest_serv); unless (defined($dest_serv_ip)) { $errs = "$0 $$: open_tcp_connection: destination host not found:" . " `$dest_serv' (port $port) ($!)\n"; warn $errs if $trace; return wantarray ? (0, $errs) : 0; } my $sin = sockaddr_in($port, $dest_serv_ip); warn "Opening connection to $dest_serv:$port (" . inet_ntoa($dest_serv_ip) . ")" if $trace>2; my $proto = &Socket::IPPROTO_TCP; # getprotobyname('tcp') not available on android if (socket (SSLCAT_S, &PF_INET(), &SOCK_STREAM(), $proto)) { warn "next connect" if $trace>3; if (CORE::connect (SSLCAT_S, $sin)) { my $old_out = select (SSLCAT_S); $| = 1; select ($old_out); warn "connected to $dest_serv, $port" if $trace>3; return wantarray ? (1, undef) : 1; # Success } } $errs = "$0 $$: open_tcp_connection: failed `$dest_serv', $port ($!)\n"; warn $errs if $trace; close SSLCAT_S; return wantarray ? (0, $errs) : 0; # Fail } ### Open connection via standard web proxy, if one was defined ### using set_proxy(). sub open_proxy_tcp_connection { my ($dest_serv, $port) = @_; return open_tcp_connection($dest_serv, $port) if !$proxyhost; warn "Connect via proxy: $proxyhost:$proxyport" if $trace>2; my ($ret, $errs) = open_tcp_connection($proxyhost, $proxyport); return wantarray ? (0, $errs) : 0 if !$ret; # Connection fail warn "Asking proxy to connect to $dest_serv:$port" if $trace>2; #print SSLCAT_S "CONNECT $dest_serv:$port HTTP/1.0$proxyauth$CRLF$CRLF"; #my $line = <SSLCAT_S>; # *** bug? Mixing stdio with syscall read? ($ret, $errs) = tcp_write_all("CONNECT $dest_serv:$port HTTP/1.0$proxyauth$CRLF$CRLF"); return wantarray ? (0,$errs) : 0 if $errs; ($line, $errs) = tcp_read_until($CRLF . $CRLF, 1024); warn "Proxy response: $line" if $trace>2; return wantarray ? (0,$errs) : 0 if $errs; return wantarray ? (1,'') : 1; # Success } ### ### read and write helpers that block ### sub debug_read { my ($replyr, $gotr) = @_; my $vm = $trace>2 && $linux_debug ? (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown'; warn " got " . blength($$gotr) . ':' . blength($$replyr) . " bytes (VM=$vm).\n" if $trace == 3; warn " got `$$gotr' (" . blength($$gotr) . ':' . blength($$replyr) . " bytes, VM=$vm)\n" if $trace>3; } sub ssl_read_all { my ($ssl,$how_much) = @_; $how_much = 2000000000 unless $how_much; my ($got, $rv, $errs); my $reply = ''; while ($how_much > 0) { ($got, $rv) = Net::SSLeay::read($ssl, ($how_much > 32768) ? 32768 : $how_much ); if (! defined $got) { my $err = Net::SSLeay::get_error($ssl, $rv); if ($err != Net::SSLeay::ERROR_WANT_READ() and $err != Net::SSLeay::ERROR_WANT_WRITE()) { $errs = print_errs('SSL_read'); last; } next; } $how_much -= blength($got); debug_read(\$reply, \$got) if $trace>1; last if $got eq ''; # EOF $reply .= $got; } return wantarray ? ($reply, $errs) : $reply; } sub tcp_read_all { my ($how_much) = @_; $how_much = 2000000000 unless $how_much; my ($n, $got, $errs); my $reply = ''; my $bsize = 0x10000; while ($how_much > 0) { $n = sysread(SSLCAT_S,$got, (($bsize < $how_much) ? $bsize : $how_much)); warn "Read error: $! ($n,$how_much)" unless defined $n; last if !$n; # EOF $how_much -= $n; debug_read(\$reply, \$got) if $trace>1; $reply .= $got; } return wantarray ? ($reply, $errs) : $reply; } sub ssl_write_all { my $ssl = $_[0]; my ($data_ref, $errs); if (ref $_[1]) { $data_ref = $_[1]; } else { $data_ref = \$_[1]; } my ($wrote, $written, $to_write) = (0,0, blength($$data_ref)); my $vm = $trace>2 && $linux_debug ? (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown'; warn " write_all VM at entry=$vm\n" if $trace>2; while ($to_write) { #sleep 1; # *** DEBUG warn "partial `$$data_ref'\n" if $trace>3; $wrote = write_partial($ssl, $written, $to_write, $$data_ref); if (defined $wrote && ($wrote > 0)) { # write_partial can return -1 $written += $wrote; $to_write -= $wrote; } else { if (defined $wrote) { # check error conditions via SSL_get_error per man page if ( my $sslerr = get_error($ssl, $wrote) ) { my $errstr = ERR_error_string($sslerr); my $errname = ''; SWITCH: { $sslerr == constant("ERROR_NONE") && do { # according to map page SSL_get_error(3ssl): # The TLS/SSL I/O operation completed. # This result code is returned if and only if ret > 0 # so if we received it here complain... warn "ERROR_NONE unexpected with invalid return value!" if $trace; $errname = "SSL_ERROR_NONE"; }; $sslerr == constant("ERROR_WANT_READ") && do { # operation did not complete, call again later, so do not # set errname and empty err_que since this is a known # error that is expected but, we should continue to try # writing the rest of our data with same io call and params. warn "ERROR_WANT_READ (TLS/SSL Handshake, will continue)\n" if $trace; print_errs('SSL_write(want read)'); last SWITCH; }; $sslerr == constant("ERROR_WANT_WRITE") && do { # operation did not complete, call again later, so do not # set errname and empty err_que since this is a known # error that is expected but, we should continue to try # writing the rest of our data with same io call and params. warn "ERROR_WANT_WRITE (TLS/SSL Handshake, will continue)\n" if $trace; print_errs('SSL_write(want write)'); last SWITCH; }; $sslerr == constant("ERROR_ZERO_RETURN") && do { # valid protocol closure from other side, no longer able to # write, since there is no longer a session... warn "ERROR_ZERO_RETURN($wrote): TLS/SSLv3 Closure alert\n" if $trace; $errname = "SSL_ERROR_ZERO_RETURN"; last SWITCH; }; $sslerr == constant("ERROR_SSL") && do { # library/protocol error warn "ERROR_SSL($wrote): Library/Protocol error occured\n" if $trace; $errname = "SSL_ERROR_SSL"; last SWITCH; }; $sslerr == constant("ERROR_WANT_CONNECT") && do { # according to man page, should never happen on call to # SSL_write, so complain, but handle as known error type warn "ERROR_WANT_CONNECT: Unexpected error for SSL_write\n" if $trace; $errname = "SSL_ERROR_WANT_CONNECT"; last SWITCH; }; $sslerr == constant("ERROR_WANT_ACCEPT") && do { # according to man page, should never happen on call to # SSL_write, so complain, but handle as known error type warn "ERROR_WANT_ACCEPT: Unexpected error for SSL_write\n" if $trace; $errname = "SSL_ERROR_WANT_ACCEPT"; last SWITCH; }; $sslerr == constant("ERROR_WANT_X509_LOOKUP") && do { # operation did not complete: waiting on call back, # call again later, so do not set errname and empty err_que # since this is a known error that is expected but, we should # continue to try writing the rest of our data with same io # call parameter. warn "ERROR_WANT_X509_LOOKUP: (Cert Callback asked for in ". "SSL_write will contine)\n" if $trace; print_errs('SSL_write(want x509'); last SWITCH; }; $sslerr == constant("ERROR_SYSCALL") && do { # some IO error occured. According to man page: # Check retval, ERR, fallback to errno if ($wrote==0) { # EOF warn "ERROR_SYSCALL($wrote): EOF violates protocol.\n" if $trace; $errname = "SSL_ERROR_SYSCALL(EOF)"; } else { # -1 underlying BIO error reported. # check error que for details, don't set errname since we # are directly appending to errs my $chkerrs = print_errs('SSL_write (syscall)'); if ($chkerrs) { warn "ERROR_SYSCALL($wrote): Have errors\n" if $trace; $errs .= "ssl_write_all $$: 1 - ERROR_SYSCALL($wrote,". "$sslerr,$errstr,$!)\n$chkerrs"; } else { # que was empty, use errno warn "ERROR_SYSCALL($wrote): errno($!)\n" if $trace; $errs .= "ssl_write_all $$: 1 - ERROR_SYSCALL($wrote,". "$sslerr) : $!\n"; } } last SWITCH; }; warn "Unhandled val $sslerr from SSL_get_error(SSL,$wrote)\n" if $trace; $errname = "SSL_ERROR_?($sslerr)"; } # end of SWITCH block if ($errname) { # if we had an errname set add the error $errs .= "ssl_write_all $$: 1 - $errname($wrote,$sslerr,". "$errstr,$!)\n"; } } # endif on have SSL_get_error val } # endif on $wrote defined } # endelse on $wrote > 0 $vm = $trace>2 && $linux_debug ? (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown'; warn " written so far $wrote:$written bytes (VM=$vm)\n" if $trace>2; # append remaining errors in que and report if errs exist $errs .= print_errs('SSL_write'); return (wantarray ? (undef, $errs) : undef) if $errs; } return wantarray ? ($written, $errs) : $written; } sub tcp_write_all { my ($data_ref, $errs); if (ref $_[0]) { $data_ref = $_[0]; } else { $data_ref = \$_[0]; } my ($wrote, $written, $to_write) = (0,0, blength($$data_ref)); my $vm = $trace>2 && $linux_debug ? (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown'; warn " write_all VM at entry=$vm to_write=$to_write\n" if $trace>2; while ($to_write) { warn "partial `$$data_ref'\n" if $trace>3; $wrote = syswrite(SSLCAT_S, $$data_ref, $to_write, $written); if (defined $wrote && ($wrote > 0)) { # write_partial can return -1 $written += $wrote; $to_write -= $wrote; } elsif (!defined($wrote)) { warn "tcp_write_all: $!"; return (wantarray ? (undef, "$!") : undef); } $vm = $trace>2 && $linux_debug ? (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown'; warn " written so far $wrote:$written bytes (VM=$vm)\n" if $trace>2; } return wantarray ? ($written, '') : $written; } ### from patch by Clinton Wong <clintdw@netcom.com> # ssl_read_until($ssl [, $delimit [, $max_length]]) # if $delimit missing, use $/ if it exists, otherwise use \n # read until delimiter reached, up to $max_length chars if defined sub ssl_read_until ($;$$) { my ($ssl,$delim, $max_length) = @_; # guess the delim string if missing if ( ! defined $delim ) { if ( defined $/ && length $/ ) { $delim = $/ } else { $delim = "\n" } # Note: \n,$/ value depends on the platform } my $len_delim = length $delim; my ($got); my $reply = ''; # If we have OpenSSL 0.9.6a or later, we can use SSL_peek to # speed things up. # N.B. 0.9.6a has security problems, so the support for # anything earlier than 0.9.6e will be dropped soon. if (&Net::SSLeay::OPENSSL_VERSION_NUMBER >= 0x0090601f) { $max_length = 2000000000 unless (defined $max_length); my ($pending, $peek_length, $found, $done); while (blength($reply) < $max_length and !$done) { #Block if necessary until we get some data $got = Net::SSLeay::peek($ssl,1); last if print_errs('SSL_peek'); $pending = Net::SSLeay::pending($ssl) + blength($reply); $peek_length = ($pending > $max_length) ? $max_length : $pending; $peek_length -= blength($reply); $got = Net::SSLeay::peek($ssl, $peek_length); last if print_errs('SSL_peek'); $peek_length = blength($got); #$found = index($got, $delim); # Old and broken # the delimiter may be split across two gets, so we prepend # a little from the last get onto this one before we check # for a match my $match; if(blength($reply) >= blength($delim) - 1) { #if what we've read so far is greater or equal #in length of what we need to prepatch $match = substr $reply, blength($reply) - blength($delim) + 1; } else { $match = $reply; } $match .= $got; $found = index($match, $delim); if ($found > -1) { #$got = Net::SSLeay::ssl_read_all($ssl, $found+$len_delim); #read up to the end of the delimiter $got = Net::SSLeay::ssl_read_all($ssl, $found + $len_delim - ((blength($match)) - (blength($got)))); $done = 1; } else { $got = Net::SSLeay::ssl_read_all($ssl, $peek_length); $done = 1 if ($peek_length == $max_length - blength($reply)); } last if print_errs('SSL_read'); debug_read(\$reply, \$got) if $trace>1; last if $got eq ''; $reply .= $got; } } else { while (!defined $max_length || length $reply < $max_length) { $got = Net::SSLeay::ssl_read_all($ssl,1); # one by one last if print_errs('SSL_read'); debug_read(\$reply, \$got) if $trace>1; last if $got eq ''; $reply .= $got; last if $len_delim && substr($reply, blength($reply)-$len_delim) eq $delim; } } return $reply; } sub tcp_read_until { my ($delim, $max_length) = @_; # guess the delim string if missing if ( ! defined $delim ) { if ( defined $/ && length $/ ) { $delim = $/ } else { $delim = "\n" } # Note: \n,$/ value depends on the platform } my $len_delim = length $delim; my ($n,$got); my $reply = ''; while (!defined $max_length || length $reply < $max_length) { $n = sysread(SSLCAT_S, $got, 1); # one by one warn "tcp_read_until: $!" if !defined $n; debug_read(\$reply, \$got) if $trace>1; last if !$n; # EOF $reply .= $got; last if $len_delim && substr($reply, blength($reply)-$len_delim) eq $delim; } return $reply; } # ssl_read_CRLF($ssl [, $max_length]) sub ssl_read_CRLF ($;$) { ssl_read_until($_[0], $CRLF, $_[1]) } sub tcp_read_CRLF { tcp_read_until($CRLF, $_[0]) } # ssl_write_CRLF($ssl, $message) writes $message and appends CRLF sub ssl_write_CRLF ($$) { # the next line uses less memory but might use more network packets return ssl_write_all($_[0], $_[1]) + ssl_write_all($_[0], $CRLF); # the next few lines do the same thing at the expense of memory, with # the chance that it will use less packets, since CRLF is in the original # message and won't be sent separately. #my $data_ref; #if (ref $_[1]) { $data_ref = $_[1] } # else { $data_ref = \$_[1] } #my $message = $$data_ref . $CRLF; #return ssl_write_all($_[0], \$message); } sub tcp_write_CRLF { # the next line uses less memory but might use more network packets return tcp_write_all($_[0]) + tcp_write_all($CRLF); # the next few lines do the same thing at the expense of memory, with # the chance that it will use less packets, since CRLF is in the original # message and won't be sent separately. #my $data_ref; #if (ref $_[1]) { $data_ref = $_[1] } # else { $data_ref = \$_[1] } #my $message = $$data_ref . $CRLF; #return tcp_write_all($_[0], \$message); } ### Quickly print out with whom we're talking sub dump_peer_certificate ($) { my ($ssl) = @_; my $cert = get_peer_certificate($ssl); return if print_errs('get_peer_certificate'); print "no cert defined\n" if !defined($cert); # Cipher=NONE with empty cert fix if (!defined($cert) || ($cert == 0)) { warn "cert = `$cert'\n" if $trace; return "Subject Name: undefined\nIssuer Name: undefined\n"; } else { my $x = 'Subject Name: ' . X509_NAME_oneline(X509_get_subject_name($cert)) . "\n" . 'Issuer Name: ' . X509_NAME_oneline(X509_get_issuer_name($cert)) . "\n"; Net::SSLeay::X509_free($cert); return $x; } } ### Arrange some randomness for eay PRNG sub randomize (;$$$) { my ($rn_seed_file, $seed, $egd_path) = @_; my $rnsf = defined($rn_seed_file) && -r $rn_seed_file; $egd_path = ''; $egd_path = $ENV{'EGD_PATH'} if $ENV{'EGD_PATH'}; RAND_seed(rand() + $$); # Stir it with time and pid unless ($rnsf || -r $Net::SSLeay::random_device || $seed || -S $egd_path) { my $poll_retval = Net::SSLeay::RAND_poll(); warn "Random number generator not seeded!!!" if $trace && !$poll_retval; } RAND_load_file($rn_seed_file, -s _) if $rnsf; RAND_seed($seed) if $seed; RAND_seed($ENV{RND_SEED}) if $ENV{RND_SEED}; RAND_load_file($Net::SSLeay::random_device, $Net::SSLeay::how_random/8) if -r $Net::SSLeay::random_device; } sub new_x_ctx { if ($ssl_version == 2) { unless (exists &Net::SSLeay::CTX_v2_new) { warn "ssl_version has been set to 2, but this version of OpenSSL has been compiled without SSLv2 support"; return undef; } $ctx = CTX_v2_new(); } elsif ($ssl_version == 3) { $ctx = CTX_v3_new(); } elsif ($ssl_version == 10) { $ctx = CTX_tlsv1_new(); } elsif ($ssl_version == 11) { unless (exists &Net::SSLeay::CTX_tlsv1_1_new) { warn "ssl_version has been set to 11, but this version of OpenSSL has been compiled without TLSv1.1 support"; return undef; } $ctx = CTX_tlsv1_1_new; } elsif ($ssl_version == 12) { unless (exists &Net::SSLeay::CTX_tlsv1_2_new) { warn "ssl_version has been set to 12, but this version of OpenSSL has been compiled without TLSv1.2 support"; return undef; } $ctx = CTX_tlsv1_2_new; } elsif ($ssl_version == 13) { unless (eval { Net::SSLeay::TLS1_3_VERSION(); } ) { warn "ssl_version has been set to 13, but this version of OpenSSL has been compiled without TLSv1.3 support"; return undef; } $ctx = CTX_new(); unless(Net::SSLeay::CTX_set_min_proto_version($ctx, Net::SSLeay::TLS1_3_VERSION())) { warn "CTX_set_min_proto failed for TLSv1.3"; return undef; } unless(Net::SSLeay::CTX_set_max_proto_version($ctx, Net::SSLeay::TLS1_3_VERSION())) { warn "CTX_set_max_proto failed for TLSv1.3"; return undef; } } else { $ctx = CTX_new(); } return $ctx; } ### ### Standard initialisation. Initialise the ssl library in the usual way ### at most once. Override this if you need differnet initialisation ### SSLeay_add_ssl_algorithms is also protected against multiple runs in SSLeay.xs ### and is also mutex protected in threading perls ### my $library_initialised; sub initialize { if (!$library_initialised) { load_error_strings(); # Some bloat, but I'm after ease of use SSLeay_add_ssl_algorithms(); # and debuggability. randomize(); $library_initialised++; } } ### ### Basic request - response primitive (don't use for https) ### sub sslcat { # address, port, message, $crt, $key --> reply / (reply,errs,cert) my ($dest_serv, $port, $out_message, $crt_path, $key_path) = @_; my ($ctx, $ssl, $got, $errs, $written); ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port); return (wantarray ? (undef, $errs) : undef) unless $got; ### Do SSL negotiation stuff warn "Creating SSL $ssl_version context...\n" if $trace>2; initialize(); # Will init at most once $ctx = new_x_ctx(); goto cleanup2 if $errs = print_errs('CTX_new') or !$ctx; CTX_set_options($ctx, &OP_ALL); goto cleanup2 if $errs = print_errs('CTX_set_options'); warn "Cert `$crt_path' given without key" if $crt_path && !$key_path; set_cert_and_key($ctx, $crt_path, $key_path) if $crt_path; warn "Creating SSL connection (context was '$ctx')...\n" if $trace>2; $ssl = new($ctx); goto cleanup if $errs = print_errs('SSL_new') or !$ssl; warn "Setting fd (ctx $ctx, con $ssl)...\n" if $trace>2; set_fd($ssl, fileno(SSLCAT_S)); goto cleanup if $errs = print_errs('set_fd'); warn "Entering SSL negotiation phase...\n" if $trace>2; if ($trace>2) { my $i = 0; my $p = ''; my $cipher_list = 'Cipher list: '; $p=Net::SSLeay::get_cipher_list($ssl,$i); $cipher_list .= $p if $p; do { $i++; $cipher_list .= ', ' . $p if $p; $p=Net::SSLeay::get_cipher_list($ssl,$i); } while $p; $cipher_list .= '\n'; warn $cipher_list; } $got = Net::SSLeay::connect($ssl); warn "SSLeay connect returned $got\n" if $trace>2; goto cleanup if $errs = print_errs('SSL_connect'); my $server_cert = get_peer_certificate($ssl); print_errs('get_peer_certificate'); if ($trace>1) { warn "Cipher `" . get_cipher($ssl) . "'\n"; print_errs('get_ciper'); warn dump_peer_certificate($ssl); } ### Connected. Exchange some data (doing repeated tries if necessary). warn "sslcat $$: sending " . blength($out_message) . " bytes...\n" if $trace==3; warn "sslcat $$: sending `$out_message' (" . blength($out_message) . " bytes)...\n" if $trace>3; ($written, $errs) = ssl_write_all($ssl, $out_message); goto cleanup unless $written; sleep $slowly if $slowly; # Closing too soon can abort broken servers CORE::shutdown SSLCAT_S, 1; # Half close --> No more output, send EOF to server warn "waiting for reply...\n" if $trace>2; ($got, $errs) = ssl_read_all($ssl); warn "Got " . blength($got) . " bytes.\n" if $trace==3; warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3; cleanup: free ($ssl); $errs .= print_errs('SSL_free'); cleanup2: CTX_free ($ctx); $errs .= print_errs('CTX_free'); close SSLCAT_S; return wantarray ? ($got, $errs, $server_cert) : $got; } sub tcpcat { # address, port, message, $crt, $key --> reply / (reply,errs,cert) my ($dest_serv, $port, $out_message) = @_; my ($got, $errs, $written); ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port); return (wantarray ? (undef, $errs) : undef) unless $got; ### Connected. Exchange some data (doing repeated tries if necessary). warn "tcpcat $$: sending " . blength($out_message) . " bytes...\n" if $trace==3; warn "tcpcat $$: sending `$out_message' (" . blength($out_message) . " bytes)...\n" if $trace>3; ($written, $errs) = tcp_write_all($out_message); goto cleanup unless $written; sleep $slowly if $slowly; # Closing too soon can abort broken servers CORE::shutdown SSLCAT_S, 1; # Half close --> No more output, send EOF to server warn "waiting for reply...\n" if $trace>2; ($got, $errs) = tcp_read_all(); warn "Got " . blength($got) . " bytes.\n" if $trace==3; warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3; cleanup: close SSLCAT_S; return wantarray ? ($got, $errs) : $got; } sub tcpxcat { my ($usessl, $site, $port, $req, $crt_path, $key_path) = @_; if ($usessl) { return sslcat($site, $port, $req, $crt_path, $key_path); } else { return tcpcat($site, $port, $req); } } ### ### Basic request - response primitive, this is different from sslcat ### because this does not shutdown the connection. ### sub https_cat { # address, port, message --> returns reply / (reply,errs,cert) my ($dest_serv, $port, $out_message, $crt_path, $key_path) = @_; my ($ctx, $ssl, $got, $errs, $written); ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port); return (wantarray ? (undef, $errs) : undef) unless $got; ### Do SSL negotiation stuff warn "Creating SSL $ssl_version context...\n" if $trace>2; initialize(); $ctx = new_x_ctx(); goto cleanup2 if $errs = print_errs('CTX_new') or !$ctx; CTX_set_options($ctx, &OP_ALL); goto cleanup2 if $errs = print_errs('CTX_set_options'); warn "Cert `$crt_path' given without key" if $crt_path && !$key_path; set_cert_and_key($ctx, $crt_path, $key_path) if $crt_path; warn "Creating SSL connection (context was '$ctx')...\n" if $trace>2; $ssl = new($ctx); goto cleanup if $errs = print_errs('SSL_new') or !$ssl; warn "Setting fd (ctx $ctx, con $ssl)...\n" if $trace>2; set_fd($ssl, fileno(SSLCAT_S)); goto cleanup if $errs = print_errs('set_fd'); warn "Entering SSL negotiation phase...\n" if $trace>2; if ($trace>2) { my $i = 0; my $p = ''; my $cipher_list = 'Cipher list: '; $p=Net::SSLeay::get_cipher_list($ssl,$i); $cipher_list .= $p if $p; do { $i++; $cipher_list .= ', ' . $p if $p; $p=Net::SSLeay::get_cipher_list($ssl,$i); } while $p; $cipher_list .= '\n'; warn $cipher_list; } $got = Net::SSLeay::connect($ssl); warn "SSLeay connect failed" if $trace>2 && $got==0; goto cleanup if $errs = print_errs('SSL_connect'); my $server_cert = get_peer_certificate($ssl); print_errs('get_peer_certificate'); if ($trace>1) { warn "Cipher `" . get_cipher($ssl) . "'\n"; print_errs('get_ciper'); warn dump_peer_certificate($ssl); } ### Connected. Exchange some data (doing repeated tries if necessary). warn "https_cat $$: sending " . blength($out_message) . " bytes...\n" if $trace==3; warn "https_cat $$: sending `$out_message' (" . blength($out_message) . " bytes)...\n" if $trace>3; ($written, $errs) = ssl_write_all($ssl, $out_message); goto cleanup unless $written; warn "waiting for reply...\n" if $trace>2; ($got, $errs) = ssl_read_all($ssl); warn "Got " . blength($got) . " bytes.\n" if $trace==3; warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3; cleanup: free ($ssl); $errs .= print_errs('SSL_free'); cleanup2: CTX_free ($ctx); $errs .= print_errs('CTX_free'); close SSLCAT_S; return wantarray ? ($got, $errs, $server_cert) : $got; } sub http_cat { # address, port, message --> returns reply / (reply,errs,cert) my ($dest_serv, $port, $out_message) = @_; my ($got, $errs, $written); ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port); return (wantarray ? (undef, $errs) : undef) unless $got; ### Connected. Exchange some data (doing repeated tries if necessary). warn "http_cat $$: sending " . blength($out_message) . " bytes...\n" if $trace==3; warn "http_cat $$: sending `$out_message' (" . blength($out_message) . " bytes)...\n" if $trace>3; ($written, $errs) = tcp_write_all($out_message); goto cleanup unless $written; warn "waiting for reply...\n" if $trace>2; ($got, $errs) = tcp_read_all(); warn "Got " . blength($got) . " bytes.\n" if $trace==3; warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3; cleanup: close SSLCAT_S; return wantarray ? ($got, $errs) : $got; } sub httpx_cat { my ($usessl, $site, $port, $req, $crt_path, $key_path) = @_; warn "httpx_cat: usessl=$usessl ($site:$port)" if $trace; if ($usessl) { return https_cat($site, $port, $req, $crt_path, $key_path); } else { return http_cat($site, $port, $req); } } ### ### Easy set up of private key and certificate ### sub set_cert_and_key ($$$) { my ($ctx, $cert_path, $key_path) = @_; my $errs = ''; # Following will ask password unless private key is not encrypted CTX_use_PrivateKey_file( $ctx, $key_path, &FILETYPE_PEM ) == 1 or $errs .= print_errs("private key `$key_path' ($!)"); CTX_use_certificate_file ($ctx, $cert_path, &FILETYPE_PEM) == 1 or $errs .= print_errs("certificate `$cert_path' ($!)"); return wantarray ? (undef, $errs) : ($errs eq ''); } ### Old deprecated API sub set_server_cert_and_key ($$$) { &set_cert_and_key } ### Set up to use web proxy sub set_proxy ($$;**) { ($proxyhost, $proxyport, $proxyuser, $proxypass) = @_; require MIME::Base64 if $proxyuser; $proxyauth = $proxyuser ? $CRLF . 'Proxy-authorization: Basic ' . MIME::Base64::encode("$proxyuser:$proxypass", '') : ''; } ### ### Easy https manipulation routines ### sub make_form { my (@fields) = @_; my $form; while (@fields) { my ($name, $data) = (shift(@fields), shift(@fields)); $data =~ s/([^\w\-.\@\$ ])/sprintf("%%%2.2x",ord($1))/gse; $data =~ tr[ ][+]; $form .= "$name=$data&"; } chop $form; return $form; } sub make_headers { my (@headers) = @_; my $headers; while (@headers) { my $header = shift(@headers); my $value = shift(@headers); $header =~ s/:$//; $value =~ s/\x0d?\x0a$//; # because we add it soon, see below $headers .= "$header: $value$CRLF"; } return $headers; } sub do_httpx3 { my ($method, $usessl, $site, $port, $path, $headers, $content, $mime_type, $crt_path, $key_path) = @_; my ($response, $page, $h,$v); my $len = blength($content); if ($len) { $mime_type = "application/x-www-form-urlencoded" unless $mime_type; $content = "Content-Type: $mime_type$CRLF" . "Content-Length: $len$CRLF$CRLF$content"; } else { $content = "$CRLF$CRLF"; } my $req = "$method $path HTTP/1.0$CRLF"; unless (defined $headers && $headers =~ /^Host:/m) { $req .= "Host: $site"; unless (($port == 80 && !$usessl) || ($port == 443 && $usessl)) { $req .= ":$port"; } $req .= $CRLF; } $req .= (defined $headers ? $headers : '') . "Accept: */*$CRLF$content"; warn "do_httpx3($method,$usessl,$site:$port)" if $trace; my ($http, $errs, $server_cert) = httpx_cat($usessl, $site, $port, $req, $crt_path, $key_path); return (undef, "HTTP/1.0 900 NET OR SSL ERROR$CRLF$CRLF$errs") if $errs; $http = '' if !defined $http; ($headers, $page) = split /\s?\n\s?\n/, $http, 2; warn "headers >$headers< page >>$page<< http >>>$http<<<" if $trace>1; ($response, $headers) = split /\s?\n/, $headers, 2; return ($page, $response, $headers, $server_cert); } sub do_https3 { splice(@_,1,0) = 1; do_httpx3; } # Legacy undocumented ### do_https2() is a legacy version in the sense that it is unable ### to return all instances of duplicate headers. sub do_httpx2 { my ($page, $response, $headers, $server_cert) = &do_httpx3; X509_free($server_cert) if defined $server_cert; return ($page, $response, defined $headers ? map( { ($h,$v)=/^(\S+)\:\s*(.*)$/; (uc($h),$v); } split(/\s?\n/, $headers) ) : () ); } sub do_https2 { splice(@_,1,0) = 1; do_httpx2; } # Legacy undocumented ### Returns headers as a hash where multiple instances of same header ### are handled correctly. sub do_httpx4 { my ($page, $response, $headers, $server_cert) = &do_httpx3; my %hr = (); for my $hh (split /\s?\n/, $headers) { my ($h,$v) = ($hh =~ /^(\S+)\:\s*(.*)$/); push @{$hr{uc($h)}}, $v; } return ($page, $response, \%hr, $server_cert); } sub do_https4 { splice(@_,1,0) = 1; do_httpx4; } # Legacy undocumented # https sub get_https { do_httpx2(GET => 1, @_) } sub post_https { do_httpx2(POST => 1, @_) } sub put_https { do_httpx2(PUT => 1, @_) } sub head_https { do_httpx2(HEAD => 1, @_) } sub get_https3 { do_httpx3(GET => 1, @_) } sub post_https3 { do_httpx3(POST => 1, @_) } sub put_https3 { do_httpx3(PUT => 1, @_) } sub head_https3 { do_httpx3(HEAD => 1, @_) } sub get_https4 { do_httpx4(GET => 1, @_) } sub post_https4 { do_httpx4(POST => 1, @_) } sub put_https4 { do_httpx4(PUT => 1, @_) } sub head_https4 { do_httpx4(HEAD => 1, @_) } # http sub get_http { do_httpx2(GET => 0, @_) } sub post_http { do_httpx2(POST => 0, @_) } sub put_http { do_httpx2(PUT => 0, @_) } sub head_http { do_httpx2(HEAD => 0, @_) } sub get_http3 { do_httpx3(GET => 0, @_) } sub post_http3 { do_httpx3(POST => 0, @_) } sub put_http3 { do_httpx3(PUT => 0, @_) } sub head_http3 { do_httpx3(HEAD => 0, @_) } sub get_http4 { do_httpx4(GET => 0, @_) } sub post_http4 { do_httpx4(POST => 0, @_) } sub put_http4 { do_httpx4(PUT => 0, @_) } sub head_http4 { do_httpx4(HEAD => 0, @_) } # Either https or http sub get_httpx { do_httpx2(GET => @_) } sub post_httpx { do_httpx2(POST => @_) } sub put_httpx { do_httpx2(PUT => @_) } sub head_httpx { do_httpx2(HEAD => @_) } sub get_httpx3 { do_httpx3(GET => @_) } sub post_httpx3 { do_httpx3(POST => @_) } sub put_httpx3 { do_httpx3(PUT => @_) } sub head_httpx3 { do_httpx3(HEAD => @_) } sub get_httpx4 { do_httpx4(GET => @_) } sub post_httpx4 { do_httpx4(POST => @_) } sub put_httpx4 { do_httpx4(PUT => @_) } sub head_httpx4 { do_httpx4(HEAD => @_) } ### Legacy, don't use # ($page, $respone_or_err, %headers) = do_https(...); sub do_https { my ($site, $port, $path, $method, $headers, $content, $mime_type, $crt_path, $key_path) = @_; do_https2($method, $site, $port, $path, $headers, $content, $mime_type, $crt_path, $key_path); } 1; __END__ Net/SSL.pm 0000644 00000040771 15037233333 0006304 0 ustar 00 package Net::SSL; use strict; use MIME::Base64; use Socket; use Carp; use vars qw(@ISA $VERSION $NEW_ARGS); $VERSION = '2.86'; $VERSION = eval $VERSION; require IO::Socket; @ISA=qw(IO::Socket::INET); my %REAL; # private to this package only my $DEFAULT_VERSION = '23'; my $CRLF = "\015\012"; my $SEND_USERAGENT_TO_PROXY = 0; require Crypt::SSLeay; sub _default_context { require Crypt::SSLeay::MainContext; Crypt::SSLeay::MainContext::main_ctx(@_); } sub _alarm_set { return if $^O eq 'MSWin32' or $^O eq 'NetWare'; alarm(shift); } sub new { my($class, %arg) = @_; local $NEW_ARGS = \%arg; $class->SUPER::new(%arg); } sub DESTROY { my $self = shift; delete $REAL{$self}; local $@; eval { $self->SUPER::DESTROY; }; } sub configure { my($self, $arg) = @_; my $ssl_version = delete $arg->{SSL_Version} || $ENV{HTTPS_VERSION} || $DEFAULT_VERSION; my $ssl_debug = delete $arg->{SSL_Debug} || $ENV{HTTPS_DEBUG} || 0; my $ctx = delete $arg->{SSL_Context} || _default_context($ssl_version); *$self->{ssl_ctx} = $ctx; *$self->{ssl_version} = $ssl_version; *$self->{ssl_debug} = $ssl_debug; *$self->{ssl_arg} = $arg; *$self->{ssl_peer_addr} = $arg->{PeerAddr}; *$self->{ssl_peer_port} = $arg->{PeerPort}; *$self->{ssl_new_arg} = $NEW_ARGS; *$self->{ssl_peer_verify} = 0; ## Crypt::SSLeay must also aware the SSL Proxy before calling ## $socket->configure($args). Because the $sock->configure() will ## die when failed to resolve the destination server IP address, ## whether the SSL proxy is used or not! ## - dqbai, 2003-05-10 if (my $proxy = $self->proxy) { ($arg->{PeerAddr}, $arg->{PeerPort}) = split(':',$proxy); $arg->{PeerPort} || croak("no port given for proxy server $proxy"); } $self->SUPER::configure($arg); } # override to make sure there is really a timeout sub timeout { shift->SUPER::timeout || 60; } sub blocking { my $self = shift; $self->SUPER::blocking(@_); } sub connect { my $self = shift; # configure certs on connect() time, so we can throw an undef # and have LWP understand the error eval { $self->configure_certs() }; if($@) { $@ = "configure certs failed: $@; $!"; $self->die_with_error($@); } # finished, update set_verify status if(my $rv = *$self->{ssl_ctx}->set_verify()) { *$self->{ssl_peer_verify} = $rv; } if ($self->proxy) { # don't die() in connect, just return undef and set $@ my $proxy_connect = eval { $self->proxy_connect_helper(@_) }; if(! $proxy_connect || $@) { $@ = "proxy connect failed: $@; $!"; croak($@); } } else { *$self->{io_socket_peername}=@_ == 1 ? $_[0] : IO::Socket::sockaddr_in(@_); if(!$self->SUPER::connect(@_)) { # better to die than return here $@ = "Connect failed: $@; $!"; croak($@); } } my $debug = *$self->{ssl_debug} || 0; my $ssl = Crypt::SSLeay::Conn->new(*$self->{ssl_ctx}, $debug, $self); my $arg = *$self->{ssl_arg}; my $new_arg = *$self->{ssl_new_arg}; $arg->{SSL_Debug} = $debug; # setup SNI if available $ssl->can("set_tlsext_host_name") and $ssl->set_tlsext_host_name(*$self->{ssl_peer_addr}); eval { local $SIG{ALRM} = sub { $self->die_with_error("SSL connect timeout") }; # timeout / 2 because we have 3 possible connects here _alarm_set($self->timeout / 2); my $rv; { local $SIG{PIPE} = \¨ $rv = eval { $ssl->connect; }; } if (not defined $rv or $rv <= 0) { _alarm_set(0); $ssl = undef; # See RT #59312 my %args = (%$arg, %$new_arg); if(*$self->{ssl_version} == 23) { $args{SSL_Version} = 3; # the new connect might itself be overridden with a REAL SSL my $new_ssl = Net::SSL->new(%args); $REAL{$self} = $REAL{$new_ssl} || $new_ssl; return $REAL{$self}; } elsif(*$self->{ssl_version} == 3) { # $self->die_with_error("SSL negotiation failed"); $args{SSL_Version} = 2; my $new_ssl = Net::SSL->new(%args); $REAL{$self} = $new_ssl; return $new_ssl; } else { # don't die, but do set $@, and return undef eval { $self->die_with_error("SSL negotiation failed") }; croak($@); } } _alarm_set(0); }; # odd error in eval {} block, maybe alarm outside the evals if($@) { $@ = "$@; $!"; croak($@); } # successful SSL connection gets stored *$self->{ssl_ssl} = $ssl; $self; } # Delegate these calls to the Crypt::SSLeay::Conn object sub get_peer_certificate { my $self = shift; $self = $REAL{$self} || $self; *$self->{ssl_ssl}->get_peer_certificate(@_); } sub get_peer_verify { my $self = shift; $self = $REAL{$self} || $self; *$self->{ssl_peer_verify}; } sub get_shared_ciphers { my $self = shift; $self = $REAL{$self} || $self; *$self->{ssl_ssl}->get_shared_ciphers(@_); } sub get_cipher { my $self = shift; $self = $REAL{$self} || $self; *$self->{ssl_ssl}->get_cipher(@_); } sub pending { my $self = shift; $self = $REAL{$self} || $self; *$self->{ssl_ssl}->pending(@_); } sub ssl_context { my $self = shift; $self = $REAL{$self} || $self; *$self->{ssl_ctx}; } sub die_with_error { my $self=shift; my $reason=shift; my @err; while(my $err=Crypt::SSLeay::Err::get_error_string()) { push @err, $err; } croak("$reason: " . join( ' | ', @err )); } sub read { my $self = shift; $self = $REAL{$self} || $self; local $SIG{__DIE__} = \&Carp::confess; local $SIG{ALRM} = sub { $self->die_with_error("SSL read timeout") }; _alarm_set($self->timeout); my $n = *$self->{ssl_ssl}->read(@_); _alarm_set(0); $self->die_with_error("read failed") if !defined $n; $n; } sub write { my $self = shift; $self = $REAL{$self} || $self; my $n = *$self->{ssl_ssl}->write(@_); $self->die_with_error("write failed") if !defined $n; $n; } *sysread = \&read; *syswrite = \&write; sub print { my $self = shift; $self = $REAL{$self} || $self; # should we care about $, and $\?? # I think it is too expensive... $self->write(join("", @_)); } sub printf { my $self = shift; $self = $REAL{$self} || $self; my $fmt = shift; $self->write(sprintf($fmt, @_)); } sub getchunk { my $self = shift; $self = $REAL{$self} || $self; my $buf = ''; # warnings my $n = $self->read($buf, 32768); return unless defined $n; $buf; } # This is really inefficient, but we only use it for reading the proxy response # so that does not really matter. sub getline { my $self = shift; $self = $REAL{$self} || $self; my $val=""; my $buf; do { $self->SUPER::recv($buf, 1); $val .= $buf; } until ($buf eq "\n"); $val; } # XXX: no way to disable <$sock>?? (tied handle perhaps?) sub get_lwp_object { my $self = shift; my $lwp_object; my $i = 0; while(1) { package DB; my @stack = caller($i++); last unless @stack; my @stack_args = @DB::args; my $stack_object = $stack_args[0] || next; return $stack_object if ref($stack_object) and $stack_object->isa('LWP::UserAgent'); } return undef; } sub send_useragent_to_proxy { if (my $val = shift) { $SEND_USERAGENT_TO_PROXY = $val; } return $SEND_USERAGENT_TO_PROXY; } sub proxy_connect_helper { my $self = shift; my $proxy = $self->proxy; my ($proxy_host, $proxy_port) = split(':',$proxy); $proxy_port || croak("no port given for proxy server $proxy"); my $proxy_addr = gethostbyname($proxy_host); $proxy_addr || croak("can't resolve proxy server name: $proxy_host, $!"); my($peer_port, $peer_addr) = (*$self->{ssl_peer_port}, *$self->{ssl_peer_addr}); $peer_addr || croak("no peer addr given"); $peer_port || croak("no peer port given"); # see if the proxy should be bypassed my @no_proxy = split( /\s*,\s*/, $ENV{NO_PROXY} || $ENV{no_proxy} || ''); my $is_proxied = 1; my $domain; for $domain (@no_proxy) { if ($peer_addr =~ /\Q$domain\E$/) { $is_proxied = 0; last; } } if ($is_proxied) { $self->SUPER::connect($proxy_port, $proxy_addr) || croak("proxy connect to $proxy_host:$proxy_port failed: $!"); } else { # see RT #57836 my $peer_addr_packed = gethostbyname($peer_addr); $self->SUPER::connect($peer_port, $peer_addr_packed) || croak("proxy bypass to $peer_addr:$peer_addr failed: $!"); } my $connect_string; if ($ENV{"HTTPS_PROXY_USERNAME"} || $ENV{"HTTPS_PROXY_PASSWORD"}) { my $user = $ENV{"HTTPS_PROXY_USERNAME"}; my $pass = $ENV{"HTTPS_PROXY_PASSWORD"}; my $credentials = encode_base64("$user:$pass", ""); $connect_string = join($CRLF, "CONNECT $peer_addr:$peer_port HTTP/1.0", "Proxy-authorization: Basic $credentials" ); } else { $connect_string = "CONNECT $peer_addr:$peer_port HTTP/1.0"; } $connect_string .= $CRLF; if (send_useragent_to_proxy()) { my $lwp_object = $self->get_lwp_object; if($lwp_object && $lwp_object->agent) { $connect_string .= "User-Agent: ".$lwp_object->agent.$CRLF; } } $connect_string .= $CRLF; $self->SUPER::send($connect_string); my $timeout; my $header = ''; # See RT #33954 # See also RT #64054 # Handling incomplete reads and writes better (for some values of # better) may actually make this problem go away, but either way, # there is no good reason to use \d when checking for 0-9 while ($header !~ m{HTTP/[0-9][.][0-9]\s+200\s+.*$CRLF$CRLF}s) { $timeout = $self->timeout(5) unless length $header; my $n = $self->SUPER::sysread($header, 8192, length $header); last if $n <= 0; } $self->timeout($timeout) if defined $timeout; my $conn_ok = ($header =~ m{HTTP/[0-9]+[.][0-9]+\s+200\s+}is) ? 1 : 0; if (not $conn_ok) { croak("PROXY ERROR HEADER, could be non-SSL URL:\n$header"); } $conn_ok; } # code adapted from LWP::UserAgent, with $ua->env_proxy API # see also RT #57836 sub proxy { my $self = shift; my $proxy_server = $ENV{HTTPS_PROXY} || $ENV{https_proxy}; return unless $proxy_server; my($peer_port, $peer_addr) = ( *$self->{ssl_peer_port}, *$self->{ssl_peer_addr} ); $peer_addr || croak("no peer addr given"); $peer_port || croak("no peer port given"); # see if the proxy should be bypassed my @no_proxy = split( /\s*,\s*/, $ENV{NO_PROXY} || $ENV{no_proxy} || '' ); my $is_proxied = 1; for my $domain (@no_proxy) { if ($peer_addr =~ /\Q$domain\E\z/) { return; } } $proxy_server =~ s|\Ahttps?://||i; # sanitize the end of the string too # see also http://www.nntp.perl.org/group/perl.libwww/2012/10/msg7629.html # and https://github.com/nanis/Crypt-SSLeay/pull/1 # Thank you Mark Allen and YigangX Wen $proxy_server =~ s|(:[1-9][0-9]{0,4})/\z|$1|; $proxy_server; } sub configure_certs { my $self = shift; my $ctx = *$self->{ssl_ctx}; my $count = 0; for (qw(HTTPS_PKCS12_FILE HTTPS_CERT_FILE HTTPS_KEY_FILE)) { my $file = $ENV{$_}; if ($file) { (-e $file) or croak("$file file does not exist: $!"); (-r $file) or croak("$file file is not readable"); $count++; if (/PKCS12/) { $count++; $ctx->use_pkcs12_file($file ,$ENV{'HTTPS_PKCS12_PASSWORD'}) || croak("failed to load $file: $!"); last; } elsif (/CERT/) { $ctx->use_certificate_file($file ,1) || croak("failed to load $file: $!"); } elsif (/KEY/) { $ctx->use_PrivateKey_file($file, 1) || croak("failed to load $file: $!"); } else { croak("setting $_ not supported"); } } } # if both configs are set, then verify them if ($count == 2) { if (! $ctx->check_private_key) { croak("Private key and certificate do not match"); } } $count; # number of successful cert loads/checks } sub accept { shift->_unimpl("accept") } sub getc { shift->_unimpl("getc") } sub ungetc { shift->_unimpl("ungetc") } sub getlines { shift->_unimpl("getlines"); } sub _unimpl { my($self, $meth) = @_; croak("$meth not implemented for Net::SSL sockets"); } 1; __END__ =head1 NAME Net::SSL - support for Secure Sockets Layer =head1 METHODS =over 4 =item new Creates a new C<Net::SSL> object. =item configure Configures a C<Net::SSL> socket for operation. =item configure_certs Sets up a certificate file to use for communicating with on the socket. =item connect =item die_with_error =item get_cipher =item get_lwp_object Walks up the caller stack and looks for something blessed into the C<LWP::UserAgent> namespace and returns it. Vaguely deprecated. =item get_peer_certificate Gets the peer certificate from the underlying C<Crypt::SSLeay::Conn> object. =item get_peer_verify =item get_shared_ciphers =item getchunk Attempts to read up to 32KiB of data from the socket. Returns C<undef> if nothing was read, otherwise returns the data as a scalar. =item pending Provides access to OpenSSL's C<pending> attribute on the SSL connection object. =item getline Reads one character at a time until a newline is encountered, and returns the line, including the newline. Grossly inefficient. =item print Concatenates the input parameters and writes them to the socket. Does not honour C<$,> nor C<$/>. Returns the number of bytes written. =item printf Performs a C<sprintf> of the input parameters (thus, the first parameter must be the format), and writes the result to the socket. Returns the number of bytes written. =item proxy Returns the hostname of an https proxy server, as specified by the C<HTTPS_PROXY> environment variable. =item proxy_connect_helper Helps set up a connection through a proxy. =item read Performs a read on the socket and returns the result. =item ssl_context =item sysread Is an alias of C<read>. =item timeout Returns the timeout value of the socket as defined by the implementing class or 60 seconds by default. =item blocking Returns a boolean indicating whether the underlying socket is in blocking mode. By default, Net::SSL sockets are in blocking mode. $sock->blocking(0); # set to non-blocking mode This method simply calls the underlying C<blocking> method of the IO::Socket object. =item write Writes the parameters passed in (thus, a list) to the socket. Returns the number of bytes written. =item syswrite Is an alias of C<write>. =item accept Not yet implemented. Will die if called. =item getc Not yet implemented. Will die if called. =item getlines Not yet implemented. Will die if called. =item ungetc Not yet implemented. Will die if called. =item send_useragent_to_proxy By default (as of version 2.80 of C<Net::SSL> in the 0.54 distribution of Crypt::SSLeay), the user agent string is no longer sent to the proxy (but will continue to be sent to the remote host). The previous behaviour was of marginal benefit, and could cause fatal errors in certain scenarios (see CPAN bug #4759) and so no longer happens by default. To reinstate the old behaviour, call C<Net::SSL::send_useragent_to_proxy> with a true value (usually 1). =back =head1 DIAGNOSTICS "no port given for proxy server <proxy>" A proxy was specified for configuring a socket, but no port number was given. Ensure that the proxy is specified as a host:port pair, such as C<proxy.example.com:8086>. "configure certs failed: <contents of $@>; <contents of $!>" "proxy connect failed: <contents of $@>; <contents of $!>" "Connect failed: <contents of $@>; <contents of $!>" During connect(). =head2 SEE ALSO =over 4 =item IO::Socket::INET C<Net::SSL> is implemented by subclassing C<IO::Socket::INET>, hence methods not specifically overridden are defined by that package. =item Net::SSLeay A package that provides a Perl-level interface to the C<openssl> secure sockets layer library. =back =cut Net/SSLeay/Handle.pm 0000644 00000025377 15037233333 0010203 0 ustar 00 package Net::SSLeay::Handle; use 5.8.1; use strict; use Socket; use Net::SSLeay; require Exporter; =encoding utf-8 =head1 NAME Net::SSLeay::Handle - Perl module that lets SSL (HTTPS) sockets be handled as standard file handles. =head1 SYNOPSIS use Net::SSLeay::Handle qw/shutdown/; my ($host, $port) = ("localhost", 443); tie(*SSL, "Net::SSLeay::Handle", $host, $port); print SSL "GET / HTTP/1.0\r\n"; shutdown(\*SSL, 1); print while (<SSL>); close SSL; =head1 DESCRIPTION Net::SSLeay::Handle allows you to request and receive HTTPS web pages using "old-fashion" file handles as in: print SSL "GET / HTTP/1.0\r\n"; and print while (<SSL>); If you export the shutdown routine, then the only extra code that you need to add to your program is the tie function as in: my $socket; if ($scheme eq "https") { tie(*S2, "Net::SSLeay::Handle", $host, $port); $socket = \*S2; else { $socket = Net::SSLeay::Handle->make_socket($host, $port); } print $socket $request_headers; ... =cut use vars qw(@ISA @EXPORT_OK $VERSION); @ISA = qw(Exporter); @EXPORT_OK = qw(shutdown); $VERSION = '1.88'; my $Initialized; #-- only _initialize() once my $Debug = 0; #-- pretty hokey #== Tie Handle Methods ======================================================== # # see perldoc perltie for details. # #============================================================================== sub TIEHANDLE { my ($class, $socket, $port) = @_; $Debug > 10 and print "TIEHANDLE(@{[join ', ', @_]})\n"; ref $socket eq "GLOB" or $socket = $class->make_socket($socket, $port); $class->_initialize(); my $ctx = Net::SSLeay::CTX_new() or die_now("Failed to create SSL_CTX $!"); my $ssl = Net::SSLeay::new($ctx) or die_now("Failed to create SSL $!"); my $fileno = fileno($socket); Net::SSLeay::set_fd($ssl, $fileno); # Must use fileno my $resp = Net::SSLeay::connect($ssl); $Debug and print "Cipher '" . Net::SSLeay::get_cipher($ssl) . "'\n"; my $self = bless { ssl => $ssl, ctx => $ctx, socket => $socket, fileno => $fileno, }, $class; return $self; } sub PRINT { my $self = shift; my $ssl = _get_ssl($self); my $resp = 0; for my $msg (@_) { defined $msg or last; $resp = Net::SSLeay::write($ssl, $msg) or last; } return $resp; } sub READLINE { my $self = shift; my $ssl = _get_ssl($self); if (wantarray) { my @lines; while (my $line = Net::SSLeay::ssl_read_until($ssl)) { push @lines, $line; } return @lines; } else { my $line = Net::SSLeay::ssl_read_until($ssl); return $line ? $line : undef; } } sub READ { my ($self, $buf, $len, $offset) = \ (@_); my $ssl = _get_ssl($$self); defined($$offset) or return length($$buf = Net::SSLeay::ssl_read_all($ssl, $$len)); defined(my $read = Net::SSLeay::ssl_read_all($ssl, $$len)) or return undef; my $buf_len = length($$buf); $$offset > $buf_len and $$buf .= chr(0) x ($$offset - $buf_len); substr($$buf, $$offset) = $read; return length($read); } sub WRITE { my $self = shift; my ($buf, $len, $offset) = @_; $offset = 0 unless defined $offset; # Return number of characters written. my $ssl = $self->_get_ssl(); return $len if Net::SSLeay::write($ssl, substr($buf, $offset, $len)); return undef; } sub CLOSE { my $self = shift; my $fileno = $self->{fileno}; $Debug > 10 and print "close($fileno)\n"; Net::SSLeay::free ($self->{ssl}); Net::SSLeay::CTX_free ($self->{ctx}); close $self->{socket}; } sub FILENO { $_[0]->{fileno} } =head1 FUNCTIONS =over =item shutdown shutdown(\*SOCKET, $mode) Calls to the main shutdown() don't work with tied sockets created with this module. This shutdown should be able to distinquish between tied and untied sockets and do the right thing. =cut sub shutdown { my ($obj, @params) = @_; my $socket = UNIVERSAL::isa($obj, 'Net::SSLeay::Handle') ? $obj->{socket} : $obj; return shutdown($socket, @params); } =item debug my $debug = Net::SSLeay::Handle->debug() Net::SSLeay::Handle->debug(1) Get/set debugging mode. Always returns the debug value before the function call. if an additional argument is given the debug option will be set to this value. =cut sub debug { my ($class, $debug) = @_; my $old_debug = $Debug; @_ >1 and $Debug = $debug || 0; return $old_debug; } #=== Internal Methods ========================================================= =item make_socket my $sock = Net::SSLeay::Handle->make_socket($host, $port); Creates a socket that is connected to $post using $port. It uses $Net::SSLeay::proxyhost and proxyport if set and authentificates itself against this proxy depending on $Net::SSLeay::proxyauth. It also turns autoflush on for the created socket. =cut sub make_socket { my ($class, $host, $port) = @_; $Debug > 10 and print "_make_socket(@{[join ', ', @_]})\n"; $host ||= 'localhost'; $port ||= 443; my $phost = $Net::SSLeay::proxyhost; my $pport = $Net::SSLeay::proxyhost ? $Net::SSLeay::proxyport : $port; my $dest_ip = gethostbyname($phost || $host); my $host_params = sockaddr_in($pport, $dest_ip); socket(my $socket, &PF_INET(), &SOCK_STREAM(), 0) or die "socket: $!"; connect($socket, $host_params) or die "connect: $!"; my $old_select = select($socket); $| = 1; select($old_select); $phost and do { my $auth = $Net::SSLeay::proxyauth; my $CRLF = $Net::SSLeay::CRLF; print $socket "CONNECT $host:$port HTTP/1.0$auth$CRLF$CRLF"; my $line = <$socket>; }; return $socket; } =back =cut sub _initialize { $Initialized++ and return; Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); } sub __dummy { my $host = $Net::SSLeay::proxyhost; my $port = $Net::SSLeay::proxyport; my $auth = $Net::SSLeay::proxyauth; } #--- _get_self($socket) ------------------------------------------------------- # Returns a hash containing attributes for $socket (= \*SOMETHING) based # on fileno($socket). Will return undef if $socket was not created here. #------------------------------------------------------------------------------ sub _get_self { return $_[0]; } #--- _get_ssl($socket) -------------------------------------------------------- # Returns a the "ssl" attribute for $socket (= \*SOMETHING) based # on fileno($socket). Will cause a warning and return undef if $socket was not # created here. #------------------------------------------------------------------------------ sub _get_ssl { return $_[0]->{ssl}; } 1; __END__ =head2 USING EXISTING SOCKETS One of the motivations for writing this module was to avoid duplicating socket creation code (which is mostly error handling). The calls to tie() above where it is passed a $host and $port is provided for convenience testing. If you already have a socket connected to the right host and port, S1, then you can do something like: my $socket \*S1; if ($scheme eq "https") { tie(*S2, "Net::SSLeay::Handle", $socket); $socket = \*S2; } my $last_sel = select($socket); $| = 1; select($last_sel); print $socket $request_headers; ... Note: As far as I know you must be careful with the globs in the tie() function. The first parameter must be a glob (*SOMETHING) and the last parameter must be a reference to a glob (\*SOMETHING_ELSE) or a scaler that was assigned to a reference to a glob (as in the example above) Also, the two globs must be different. When I tried to use the same glob, I got a core dump. =head2 EXPORT None by default. You can export the shutdown() function. It is suggested that you do export shutdown() or use the fully qualified Net::SSLeay::Handle::shutdown() function to shutdown SSL sockets. It should be smart enough to distinguish between SSL and non-SSL sockets and do the right thing. =head1 EXAMPLES use Net::SSLeay::Handle qw/shutdown/; my ($host, $port) = ("localhost", 443); tie(*SSL, "Net::SSLeay::Handle", $host, $port); print SSL "GET / HTTP/1.0\r\n"; shutdown(\*SSL, 1); print while (<SSL>); close SSL; =head1 TODO Better error handling. Callback routine? =head1 CAVEATS Tying to a file handle is a little tricky (for me at least). The first parameter to tie() must be a glob (*SOMETHING) and the last parameter must be a reference to a glob (\*SOMETHING_ELSE) or a scaler that was assigned to a reference to a glob ($s = \*SOMETHING_ELSE). Also, the two globs must be different. When I tried to use the same glob, I got a core dump. I was able to associate attributes to globs created by this module (like *SSL above) by making a hash of hashes keyed by the file head1. =head1 CHANGES Please see Net-SSLeay-Handle-0.50/Changes file. =head1 BUGS If you encounter a problem with this module that you believe is a bug, please report it in one of the following ways: =over =item * L<create a new issue|https://github.com/radiator-software/p5-net-ssleay/issues/new> under the Net-SSLeay GitHub project at L<https://github.com/radiator-software/p5-net-ssleay>; =item * L<open a ticket|https://rt.cpan.org/Ticket/Create.html?Queue=Net-SSLeay> using the CPAN RT bug tracker's web interface at L<https://rt.cpan.org/Dist/Display.html?Queue=Net-SSLeay>; =item * send an email to the CPAN RT bug tracker at L<bug-Net-SSLeay@rt.cpan.org|mailto:bug-Net-SSLeay@rt.cpan.org>. =back Please make sure your bug report includes the following information: =over =item * the code you are trying to run; =item * your operating system name and version; =item * the output of C<perl -V>; =item * the version of OpenSSL or LibreSSL you are using. =back =head1 AUTHOR Originally written by Jim Bowlin. Maintained by Sampo Kellomäki between July 2001 and August 2003. Maintained by Florian Ragwitz between November 2005 and January 2010. Maintained by Mike McCauley between November 2005 and June 2018. Maintained by Chris Novakovic, Tuure Vartiainen and Heikki Vatiainen since June 2018. =head1 COPYRIGHT Copyright (c) 2001 Jim Bowlin <jbowlin@linklint.org> Copyright (c) 2001-2003 Sampo Kellomäki <sampo@iki.fi> Copyright (c) 2005-2010 Florian Ragwitz <rafl@debian.org> Copyright (c) 2005-2018 Mike McCauley <mikem@airspayce.com> Copyright (c) 2018- Chris Novakovic <chris@chrisn.me.uk> Copyright (c) 2018- Tuure Vartiainen <vartiait@radiatorsoftware.com> Copyright (c) 2018- Heikki Vatiainen <hvn@radiatorsoftware.com> All rights reserved. =head1 LICENSE This module is released under the terms of the Artistic License 2.0. For details, see the C<LICENSE> file distributed with Net-SSLeay's source code. =head1 SEE ALSO Net::SSLeay, perl(1), http://openssl.org/ =cut Net/SSLeay.pod 0000644 00001275724 15037233333 0007162 0 ustar 00 =encoding utf-8 =head1 NAME Net::SSLeay - Perl extension for using OpenSSL =head1 SYNOPSIS use Net::SSLeay qw(get_https post_https sslcat make_headers make_form); ($page) = get_https('www.bacus.pt', 443, '/'); # Case 1 ($page, $response, %reply_headers) = get_https('www.bacus.pt', 443, '/', # Case 2 make_headers(User-Agent => 'Cryptozilla/5.0b1', Referer => 'https://www.bacus.pt' )); ($page, $result, %headers) = # Case 2b = get_https('www.bacus.pt', 443, '/protected.html', make_headers(Authorization => 'Basic ' . MIME::Base64::encode("$user:$pass",'')) ); ($page, $response, %reply_headers) = post_https('www.bacus.pt', 443, '/foo.cgi', '', # Case 3 make_form(OK => '1', name => 'Sampo' )); $reply = sslcat($host, $port, $request); # Case 4 ($reply, $err, $server_cert) = sslcat($host, $port, $request); # Case 5 $Net::SSLeay::trace = 2; # 0=no debugging, 1=ciphers, 2=trace, 3=dump data Net::SSLeay::initialize(); # Initialize ssl library once =head1 DESCRIPTION L<Net::SSLeay> module contains perl bindings to openssl (L<http://www.openssl.org|http://www.openssl.org>) library. B<COMPATIBILITY NOTE:> L<Net::SSLeay> cannot be built with pre-0.9.3 openssl. It is strongly recommended to use at least 0.9.7 (as older versions are not tested during development). Some low level API functions may be available with certain openssl versions. It is compatible with OpenSSL 1.0 and 1.1. Some functions are not available under OpenSSL 1.1. L<Net::SSLeay> module basically comprise of: =over =item * High level functions for accessing web servers (by using HTTP/HTTPS) =item * Low level API (mostly mapped 1:1 to openssl's C functions) =item * Convenience functions (related to low level API but with more perl friendly interface) =back There is also a related module called L<Net::SSLeay::Handle> included in this distribution that you might want to use instead. It has its own pod documentation. =head2 High level functions for accessing web servers This module offers some high level convenience functions for accessing web pages on SSL servers (for symmetry, the same API is offered for accessing http servers, too), an C<sslcat()> function for writing your own clients, and finally access to the SSL api of the SSLeay/OpenSSL package so you can write servers or clients for more complicated applications. For high level functions it is most convenient to import them into your main namespace as indicated in the synopsis. =head3 Basic set of functions =over =item * get_https =item * post_https =item * put_https =item * head_https =item * do_https =item * sslcat =item * https_cat =item * make_form =item * make_headers =back B<Case 1 (in SYNOPSIS)> demonstrates the typical invocation of get_https() to fetch an HTML page from secure server. The first argument provides the hostname or IP in dotted decimal notation of the remote server to contact. The second argument is the TCP port at the remote end (your own port is picked arbitrarily from high numbered ports as usual for TCP). The third argument is the URL of the page without the host name part. If in doubt consult the HTTP specifications at L<http://www.w3c.org>. B<Case 2 (in SYNOPSIS)> demonstrates full fledged use of C<get_https()>. As can be seen, C<get_https()> parses the response and response headers and returns them as a list, which can be captured in a hash for later reference. Also a fourth argument to C<get_https()> is used to insert some additional headers in the request. C<make_headers()> is a function that will convert a list or hash to such headers. By default C<get_https()> supplies C<Host> (to make virtual hosting easy) and C<Accept> (reportedly needed by IIS) headers. B<Case 2b (in SYNOPSIS)> demonstrates how to get a password protected page. Refer to the HTTP protocol specifications for further details (e.g. RFC-2617). B<Case 3 (in SYNOPSIS)> invokes C<post_https()> to submit a HTML/CGI form to a secure server. The first four arguments are equal to C<get_https()> (note that the empty string (C<''>) is passed as header argument). The fifth argument is the contents of the form formatted according to CGI specification. Do not post UTF-8 data as content: use utf8::downgrade first. In this case the helper function C<make_https()> is used to do the formatting, but you could pass any string. C<post_https()> automatically adds C<Content-Type> and C<Content-Length> headers to the request. B<Case 4 (in SYNOPSIS)> shows the fundamental C<sslcat()> function (inspired in spirit by the C<netcat> utility :-). It's your swiss army knife that allows you to easily contact servers, send some data, and then get the response. You are responsible for formatting the data and parsing the response - C<sslcat()> is just a transport. B<Case 5 (in SYNOPSIS)> is a full invocation of C<sslcat()> which allows the return of errors as well as the server (peer) certificate. The C<$trace> global variable can be used to control the verbosity of the high level functions. Level 0 guarantees silence, level 1 (the default) only emits error messages. =head3 Alternate versions of high-level API =over =item * get_https3 =item * post_https3 =item * put_https3 =item * get_https4 =item * post_https4 =item * put_https4 =back The above mentioned functions actually return the response headers as a list, which only gets converted to hash upon assignment (this assignment looses information if the same header occurs twice, as may be the case with cookies). There are also other variants of the functions that return unprocessed headers and that return a reference to a hash. ($page, $response, @headers) = get_https('www.bacus.pt', 443, '/'); for ($i = 0; $i < $#headers; $i+=2) { print "$headers[$i] = " . $headers[$i+1] . "\n"; } ($page, $response, $headers, $server_cert) = get_https3('www.bacus.pt', 443, '/'); print "$headers\n"; ($page, $response, $headers_ref) = get_https4('www.bacus.pt', 443, '/'); for $k (sort keys %{$headers_ref}) { for $v (@{$$headers_ref{$k}}) { print "$k = $v\n"; } } All of the above code fragments accomplish the same thing: display all values of all headers. The API functions ending in "3" return the headers simply as a scalar string and it is up to the application to split them up. The functions ending in "4" return a reference to a hash of arrays (see L<perlref> and L<perllol> if you are not familiar with complex perl data structures). To access a single value of such a header hash you would do something like print $$headers_ref{COOKIE}[0]; Variants 3 and 4 also allow you to discover the server certificate in case you would like to store or display it, e.g. ($p, $resp, $hdrs, $server_cert) = get_https3('www.bacus.pt', 443, '/'); if (!defined($server_cert) || ($server_cert == 0)) { warn "Subject Name: undefined, Issuer Name: undefined"; } else { warn 'Subject Name: ' . Net::SSLeay::X509_NAME_oneline( Net::SSLeay::X509_get_subject_name($server_cert)) . 'Issuer Name: ' . Net::SSLeay::X509_NAME_oneline( Net::SSLeay::X509_get_issuer_name($server_cert)); } Beware that this method only allows after the fact verification of the certificate: by the time C<get_https3()> has returned the https request has already been sent to the server, whether you decide to trust it or not. To do the verification correctly you must either employ the OpenSSL certificate verification framework or use the lower level API to first connect and verify the certificate and only then send the http data. See the implementation of C<ds_https3()> for guidance on how to do this. =head3 Using client certificates Secure web communications are encrypted using symmetric crypto keys exchanged using encryption based on the certificate of the server. Therefore in all SSL connections the server must have a certificate. This serves both to authenticate the server to the clients and to perform the key exchange. Sometimes it is necessary to authenticate the client as well. Two options are available: HTTP basic authentication and a client side certificate. The basic authentication over HTTPS is actually quite safe because HTTPS guarantees that the password will not travel in the clear. Never-the-less, problems like easily guessable passwords remain. The client certificate method involves authentication of the client at the SSL level using a certificate. For this to work, both the client and the server have certificates (which typically are different) and private keys. The API functions outlined above accept additional arguments that allow one to supply the client side certificate and key files. The format of these files is the same as used for server certificates and the caveat about encrypting private keys applies. ($page, $result, %headers) = # 2c = get_https('www.bacus.pt', 443, '/protected.html', make_headers(Authorization => 'Basic ' . MIME::Base64::encode("$user:$pass",'')), '', $mime_type6, $path_to_crt7, $path_to_key8); ($page, $response, %reply_headers) = post_https('www.bacus.pt', 443, '/foo.cgi', # 3b make_headers('Authorization' => 'Basic ' . MIME::Base64::encode("$user:$pass",'')), make_form(OK => '1', name => 'Sampo'), $mime_type6, $path_to_crt7, $path_to_key8); B<Case 2c (in SYNOPSIS)> demonstrates getting a password protected page that also requires a client certificate, i.e. it is possible to use both authentication methods simultaneously. B<Case 3b (in SYNOPSIS)> is a full blown POST to a secure server that requires both password authentication and a client certificate, just like in case 2c. Note: The client will not send a certificate unless the server requests one. This is typically achieved by setting the verify mode to C<VERIFY_PEER> on the server: Net::SSLeay::set_verify(ssl, Net::SSLeay::VERIFY_PEER, 0); See C<perldoc ~openssl/doc/ssl/SSL_CTX_set_verify.pod> for a full description. =head3 Working through a web proxy =over =item * set_proxy =back C<Net::SSLeay> can use a web proxy to make its connections. You need to first set the proxy host and port using C<set_proxy()> and then just use the normal API functions, e.g: Net::SSLeay::set_proxy('gateway.myorg.com', 8080); ($page) = get_https('www.bacus.pt', 443, '/'); If your proxy requires authentication, you can supply a username and password as well Net::SSLeay::set_proxy('gateway.myorg.com', 8080, 'joe', 'salainen'); ($page, $result, %headers) = = get_https('www.bacus.pt', 443, '/protected.html', make_headers(Authorization => 'Basic ' . MIME::Base64::encode("susie:pass",'')) ); This example demonstrates the case where we authenticate to the proxy as C<"joe"> and to the final web server as C<"susie">. Proxy authentication requires the C<MIME::Base64> module to work. =head3 HTTP (without S) API =over =item * get_http =item * post_http =item * tcpcat =item * get_httpx =item * post_httpx =item * tcpxcat =back Over the years it has become clear that it would be convenient to use the light-weight flavour API of C<Net::SSLeay> for normal HTTP as well (see C<LWP> for the heavy-weight object-oriented approach). In fact it would be nice to be able to flip https on and off on the fly. Thus regular HTTP support was evolved. use Net::SSLeay qw(get_http post_http tcpcat get_httpx post_httpx tcpxcat make_headers make_form); ($page, $result, %headers) = get_http('www.bacus.pt', 443, '/protected.html', make_headers(Authorization => 'Basic ' . MIME::Base64::encode("$user:$pass",'')) ); ($page, $response, %reply_headers) = post_http('www.bacus.pt', 443, '/foo.cgi', '', make_form(OK => '1', name => 'Sampo' )); ($reply, $err) = tcpcat($host, $port, $request); ($page, $result, %headers) = get_httpx($usessl, 'www.bacus.pt', 443, '/protected.html', make_headers(Authorization => 'Basic ' . MIME::Base64::encode("$user:$pass",'')) ); ($page, $response, %reply_headers) = post_httpx($usessl, 'www.bacus.pt', 443, '/foo.cgi', '', make_form(OK => '1', name => 'Sampo' )); ($reply, $err, $server_cert) = tcpxcat($usessl, $host, $port, $request); As can be seen, the C<"x"> family of APIs takes as the first argument a flag which indicates whether SSL is used or not. =head2 Certificate verification and Certificate Revocation Lists (CRLs) OpenSSL supports the ability to verify peer certificates. It can also optionally check the peer certificate against a Certificate Revocation List (CRL) from the certificates issuer. A CRL is a file, created by the certificate issuer that lists all the certificates that it previously signed, but which it now revokes. CRLs are in PEM format. You can enable C<Net::SSLeay CRL> checking like this: &Net::SSLeay::X509_STORE_set_flags (&Net::SSLeay::CTX_get_cert_store($ssl), &Net::SSLeay::X509_V_FLAG_CRL_CHECK); After setting this flag, if OpenSSL checks a peer's certificate, then it will attempt to find a CRL for the issuer. It does this by looking for a specially named file in the search directory specified by CTX_load_verify_locations. CRL files are named with the hash of the issuer's subject name, followed by C<.r0>, C<.r1> etc. For example C<ab1331b2.r0>, C<ab1331b2.r1>. It will read all the .r files for the issuer, and then check for a revocation of the peer certificate in all of them. (You can also force it to look in a specific named CRL file., see below). You can find out the hash of the issuer subject name in a CRL with openssl crl -in crl.pem -hash -noout If the peer certificate does not pass the revocation list, or if no CRL is found, then the handshaking fails with an error. You can also force OpenSSL to look for CRLs in one or more arbitrarily named files. my $bio = Net::SSLeay::BIO_new_file($crlfilename, 'r'); my $crl = Net::SSLeay::PEM_read_bio_X509_CRL($bio); if ($crl) { Net::SSLeay::X509_STORE_add_crl( Net::SSLeay::CTX_get_cert_store($ssl, $crl) ); } else { error reading CRL.... } Usually the URLs where you can download the CRLs is contained in the certificate itself and you can extract them with my @url = Net::SSLeay::P_X509_get_crl_distribution_points($cert) But there is no automatic downloading of the CRLs and often these CRLs are too huge to just download them to verify a single certificate. Also, these CRLs are often in DER format which you need to convert to PEM before you can use it: openssl crl -in crl.der -inform der -out crl.pem So as an alternative for faster and timely revocation checks you better use the Online Status Revocation Protocol (OCSP). =head2 Certificate verification and Online Status Revocation Protocol (OCSP) While checking for revoked certificates is possible and fast with Certificate Revocation Lists, you need to download the complete and often huge list before you can verify a single certificate. A faster way is to ask the CA to check the revocation of just a single or a few certificates using OCSP. Basically you generate for each certificate an OCSP_CERTID based on the certificate itself and its issuer, put the ids togetether into an OCSP_REQUEST and send the request to the URL given in the certificate. As a result you get back an OCSP_RESPONSE and need to check the status of the response, check that it is valid (e.g. signed by the CA) and finally extract the information about each OCSP_CERTID to find out if the certificate is still valid or got revoked. With Net::SSLeay this can be done like this: # get id(s) for given certs, like from get_peer_certificate # or get_peer_cert_chain. This will croak if # - one tries to make an OCSP_CERTID for a self-signed certificate # - the issuer of the certificate cannot be found in the SSL objects # store, nor in the current certificate chain my $cert = Net::SSLeay::get_peer_certificate($ssl); my $id = eval { Net::SSLeay::OCSP_cert2ids($ssl,$cert) }; die "failed to make OCSP_CERTID: $@" if $@; # create OCSP_REQUEST from id(s) # Multiple can be put into the same request, if the same OCSP responder # is responsible for them. my $req = Net::SSLeay::OCSP_ids2req($id); # determine URI of OCSP responder my $uri = Net::SSLeay::P_X509_get_ocsp_uri($cert); # Send stringified OCSP_REQUEST with POST to $uri. # We can ignore certificate verification for https, because the OCSP # response itself is signed. my $ua = HTTP::Tiny->new(verify_SSL => 0); my $res = $ua->request( 'POST',$uri, { headers => { 'Content-type' => 'application/ocsp-request' }, content => Net::SSLeay::i2d_OCSP_REQUEST($req) }); my $content = $res && $res->{success} && $res->{content} or die "query failed"; # Extract OCSP_RESPONSE. # this will croak if the string is not an OCSP_RESPONSE my $resp = eval { Net::SSLeay::d2i_OCSP_RESPONSE($content) }; # Check status of response. my $status = Net::SSLeay::OCSP_response_status($resp); if ($status != Net::SSLeay::OCSP_RESPONSE_STATUS_SUCCESSFUL()) die "OCSP response failed: ". Net::SSLeay::OCSP_response_status_str($status); } # Verify signature of response and if nonce matches request. # This will croak if there is a nonce in the response, but it does not match # the request. It will return false if the signature could not be verified, # in which case details can be retrieved with Net::SSLeay::ERR_get_error. # It will not complain if the response does not contain a nonce, which is # usually the case with pre-signed responses. if ( ! eval { Net::SSLeay::OCSP_response_verify($ssl,$resp,$req) }) { die "OCSP response verification failed"; } # Extract information from OCSP_RESPONSE for each of the ids. # If called in scalar context it will return the time (as time_t), when the # next update is due (minimum of all successful responses inside $resp). It # will croak on the following problems: # - response is expired or not yet valid # - no response for given OCSP_CERTID # - certificate status is not good (e.g. revoked or unknown) if ( my $nextupd = eval { Net::SSLeay::OCSP_response_results($resp,$id) }) { warn "certificate is valid, next update in ". ($nextupd-time())." seconds\n"; } else { die "certificate is not valid: $@"; } # But in array context it will return detailed information about each given # OCSP_CERTID instead croaking on errors: # if no @ids are given it will return information about all single responses # in the OCSP_RESPONSE my @results = Net::SSLeay::OCSP_response_results($resp,@ids); for my $r (@results) { print Dumper($r); # @results are in the same order as the @ids and contain: # $r->[0] - OCSP_CERTID # $r->[1] - undef if no error (certificate good) OR error message as string # $r->[2] - hash with details: # thisUpdate - time_t of this single response # nextUpdate - time_t when update is expected # statusType - integer: # V_OCSP_CERTSTATUS_GOOD(0) # V_OCSP_CERTSTATUS_REVOKED(1) # V_OCSP_CERTSTATUS_UNKNOWN(2) # revocationTime - time_t (only if revoked) # revocationReason - integer (only if revoked) # revocationReason_str - reason as string (only if revoked) } To further speed up certificate revocation checking one can use a TLS extension to instruct the server to staple the OCSP response: # set TLS extension before doing SSL_connect Net::SSLeay::set_tlsext_status_type($ssl, Net::SSLeay::TLSEXT_STATUSTYPE_ocsp()); # setup callback to verify OCSP response my $cert_valid = undef; Net::SSLeay::CTX_set_tlsext_status_cb($context,sub { my ($ssl,$resp) = @_; if (!$resp) { # Lots of servers don't return an OCSP response. # In this case we must check the OCSP status outside the SSL # handshake. warn "server did not return stapled OCSP response\n"; return 1; } # verify status my $status = Net::SSLeay::OCSP_response_status($resp); if ($status != Net::SSLeay::OCSP_RESPONSE_STATUS_SUCCESSFUL()) { warn "OCSP response failure: $status\n"; return 1; } # verify signature - we have no OCSP_REQUEST here to check nonce if (!eval { Net::SSLeay::OCSP_response_verify($ssl,$resp) }) { warn "OCSP response verify failed\n"; return 1; } # check if the certificate is valid # we should check here against the peer_certificate my $cert = Net::SSLeay::get_peer_certificate(); my $certid = eval { Net::SSLeay::OCSP_cert2ids($ssl,$cert) } or do { warn "cannot get certid from cert: $@"; $cert_valid = -1; return 1; }; if ( $nextupd = eval { Net::SSLeay::OCSP_response_results($resp,$certid) }) { warn "certificate not revoked\n"; $cert_valid = 1; } else { warn "certificate not valid: $@"; $cert_valid = 0; } }); # do SSL handshake here .... # check if certificate revocation was checked already if ( ! defined $cert_valid) { # check revocation outside of SSL handshake by asking OCSP responder ... } elsif ( ! $cert_valid ) { die "certificate not valid - closing SSL connection"; } elsif ( $cert_valid<0 ) { die "cannot verify certificate revocation - self-signed ?"; } else { # everything fine ... } =head2 Using Net::SSLeay in multi-threaded applications B<IMPORTANT: versions 1.42 or earlier are not thread-safe!> Net::SSLeay module implements all necessary stuff to be ready for multi-threaded environment - it requires openssl-0.9.7 or newer. The implementation fully follows thread safety related requirements of openssl library(see L<http://www.openssl.org/docs/crypto/threads.html|http://www.openssl.org/docs/crypto/threads.html>). If you are about to use Net::SSLeay (or any other module based on Net::SSLeay) in multi-threaded perl application it is recommended to follow this best-practice: =head3 Initialization Load and initialize Net::SSLeay module in the main thread: use threads; use Net::SSLeay; Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); sub do_master_job { #... call whatever from Net::SSLeay } sub do_worker_job { #... call whatever from Net::SSLeay } #start threads my $master = threads->new(\&do_master_job, 'param1', 'param2'); my @workers = threads->new(\&do_worker_job, 'arg1', 'arg2') for (1..10); #waiting for all threads to finish $_->join() for (threads->list); NOTE: Openssl's C<int SSL_library_init(void)> function (which is also aliased as C<SSLeay_add_ssl_algorithms>, C<OpenSSL_add_ssl_algorithms> and C<add_ssl_algorithms>) is not re-entrant and multiple calls can cause a crash in threaded application. Net::SSLeay implements flags preventing repeated calls to this function, therefore even multiple initialization via Net::SSLeay::SSLeay_add_ssl_algorithms() should work without trouble. =head3 Using callbacks Do not use callbacks across threads (the module blocks cross-thread callback operations and throws a warning). Always do the callback setup, callback use and callback destruction within the same thread. =head3 Using openssl elements All openssl elements (X509, SSL_CTX, ...) can be directly passed between threads. use threads; use Net::SSLeay; Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); sub do_job { my $context = shift; Net::SSLeay::CTX_set_default_passwd_cb($context, sub { "secret" }); #... } my $c = Net::SSLeay::CTX_new(); threads->create(\&do_job, $c); Or: use threads; use Net::SSLeay; my $context; #does not need to be 'shared' Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); sub do_job { Net::SSLeay::CTX_set_default_passwd_cb($context, sub { "secret" }); #... } $context = Net::SSLeay::CTX_new(); threads->create(\&do_job); =head3 Using other perl modules based on Net::SSLeay It should be fine to use any other module based on L<Net::SSLeay> (like L<IO::Socket::SSL>) in multi-threaded applications. It is generally recommended to do any global initialization of such a module in the main thread before calling C<< threads->new(..) >> or C<< threads->create(..) >> but it might differ module by module. To be safe you can load and init Net::SSLeay explicitly in the main thread: use Net::SSLeay; use Other::SSLeay::Based::Module; Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); Or even safer: use Net::SSLeay; use Other::SSLeay::Based::Module; BEGIN { Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); } =head3 Combining Net::SSLeay with other modules linked with openssl B<BEWARE: This might be a big trouble! This is not guaranteed be thread-safe!> There are many other (XS) modules linked directly to openssl library (like L<Crypt::SSLeay>). As it is expected that also "another" module will call C<SSLeay_add_ssl_algorithms> at some point we have again a trouble with multiple openssl initialization by Net::SSLeay and "another" module. As you can expect Net::SSLeay is not able to avoid multiple initialization of openssl library called by "another" module, thus you have to handle this on your own (in some cases it might not be possible at all to avoid this). =head3 Threading with get_https and friends The convenience functions get_https, post_https etc all initialize the SSL library by calling Net::SSLeay::initialize which does the conventional library initialization: Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); Net::SSLeay::initialize initializes the SSL library at most once. You can override the Net::SSLeay::initialize function if you desire some other type of initialization behaviour by get_https and friends. You can call Net::SSLeay::initialize from your own code if you desire this conventional library initialization. =head2 Convenience routines To be used with Low level API Net::SSLeay::randomize($rn_seed_file,$additional_seed); Net::SSLeay::set_cert_and_key($ctx, $cert_path, $key_path); $cert = Net::SSLeay::dump_peer_certificate($ssl); Net::SSLeay::ssl_write_all($ssl, $message) or die "ssl write failure"; $got = Net::SSLeay::ssl_read_all($ssl) or die "ssl read failure"; $got = Net::SSLeay::ssl_read_CRLF($ssl [, $max_length]); $got = Net::SSLeay::ssl_read_until($ssl [, $delimit [, $max_length]]); Net::SSLeay::ssl_write_CRLF($ssl, $message); =over =item * randomize seeds the openssl PRNG with C</dev/urandom> (see the top of C<SSLeay.pm> for how to change or configure this) and optionally with user provided data. It is very important to properly seed your random numbers, so do not forget to call this. The high level API functions automatically call C<randomize()> so it is not needed with them. See also caveats. =item * set_cert_and_key takes two file names as arguments and sets the certificate and private key to those. This can be used to set either server certificates or client certificates. =item * dump_peer_certificate allows you to get a plaintext description of the certificate the peer (usually the server) presented to us. =item * ssl_read_all see ssl_write_all (below) =item * ssl_write_all C<ssl_read_all()> and C<ssl_write_all()> provide true blocking semantics for these operations (see limitation, below, for explanation). These are much preferred to the low level API equivalents (which implement BSD blocking semantics). The message argument to C<ssl_write_all()> can be a reference. This is helpful to avoid unnecessary copying when writing something big, e.g: $data = 'A' x 1000000000; Net::SSLeay::ssl_write_all($ssl, \$data) or die "ssl write failed"; =item * ssl_read_CRLF uses C<ssl_read_all()> to read in a line terminated with a carriage return followed by a linefeed (CRLF). The CRLF is included in the returned scalar. =item * ssl_read_until uses C<ssl_read_all()> to read from the SSL input stream until it encounters a programmer specified delimiter. If the delimiter is undefined, C<$/> is used. If C<$/> is undefined, C<\n> is used. One can optionally set a maximum length of bytes to read from the SSL input stream. =item * ssl_write_CRLF writes C<$message> and appends CRLF to the SSL output stream. =back =head2 Initialization In order to use the low level API you should start your programs with the following incantation: use Net::SSLeay qw(die_now die_if_ssl_error); Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); # Important! Net::SSLeay::ENGINE_load_builtin_engines(); # If you want built-in engines Net::SSLeay::ENGINE_register_all_complete(); # If you want built-in engines Net::SSLeay::randomize(); =head2 Error handling functions I can not emphasize the need to check for error enough. Use these functions even in the most simple programs, they will reduce debugging time greatly. Do not ask questions on the mailing list without having first sprinkled these in your code. =over =item * die_now =item * die_if_ssl_error C<die_now()> and C<die_if_ssl_error()> are used to conveniently print the SSLeay error stack when something goes wrong: Net::SSLeay::connect($ssl) or die_now("Failed SSL connect ($!)"); Net::SSLeay::write($ssl, "foo") or die_if_ssl_error("SSL write ($!)"); =item * print_errs You can also use C<Net::SSLeay::print_errs()> to dump the error stack without exiting the program. As can be seen, your code becomes much more readable if you import the error reporting functions into your main name space. =back =head2 Sockets Perl uses file handles for all I/O. While SSLeay has a quite flexible BIO mechanism and perl has an evolved PerlIO mechanism, this module still sticks to using file descriptors. Thus to attach SSLeay to a socket you should use C<fileno()> to extract the underlying file descriptor: Net::SSLeay::set_fd($ssl, fileno(S)); # Must use fileno You should also set C<$|> to 1 to eliminate STDIO buffering so you do not get confused if you use perl I/O functions to manipulate your socket handle. If you need to C<select(2)> on the socket, go right ahead, but be warned that OpenSSL does some internal buffering so SSL_read does not always return data even if the socket selected for reading (just keep on selecting and trying to read). C<Net::SSLeay> is no different from the C language OpenSSL in this respect. =head2 Callbacks You can establish a per-context verify callback function something like this: sub verify { my ($ok, $x509_store_ctx) = @_; print "Verifying certificate...\n"; ... return $ok; } It is used like this: Net::SSLeay::set_verify ($ssl, Net::SSLeay::VERIFY_PEER, \&verify); Per-context callbacks for decrypting private keys are implemented. Net::SSLeay::CTX_set_default_passwd_cb($ctx, sub { "top-secret" }); Net::SSLeay::CTX_use_PrivateKey_file($ctx, "key.pem", Net::SSLeay::FILETYPE_PEM) or die "Error reading private key"; Net::SSLeay::CTX_set_default_passwd_cb($ctx, undef); If Hello Extensions are supported by your OpenSSL, a session secret callback can be set up to be called when a session secret is set by openssl. Establish it like this: Net::SSLeay::set_session_secret_cb($ssl, \&session_secret_cb, $somedata); It will be called like this: sub session_secret_cb { my ($secret, \@cipherlist, \$preferredcipher, $somedata) = @_; } No other callbacks are implemented. You do not need to use any callback for simple (i.e. normal) cases where the SSLeay built-in verify mechanism satisfies your needs. It is required to reset these callbacks to undef immediately after use to prevent memory leaks, thread safety problems and crashes on exit that can occur if different threads set different callbacks. If you want to use callback stuff, see examples/callback.pl! It's the only one I am able to make work reliably. =head2 Low level API In addition to the high level functions outlined above, this module contains straight-forward access to CRYPTO and SSL parts of OpenSSL C API. See the C<*.h> headers from OpenSSL C distribution for a list of low level SSLeay functions to call (check SSLeay.xs to see if some function has been implemented). The module strips the initial C<"SSL_"> off of the SSLeay names. Generally you should use C<Net::SSLeay::> in its place. Note that some functions are prefixed with C<"P_"> - these are very close to the original API however contain some kind of a wrapper making its interface more perl friendly. For example: In C: #include <ssl.h> err = SSL_set_verify (ssl, SSL_VERIFY_CLIENT_ONCE, &your_call_back_here); In Perl: use Net::SSLeay; $err = Net::SSLeay::set_verify ($ssl, Net::SSLeay::VERIFY_CLIENT_ONCE, \&your_call_back_here); If the function does not start with C<SSL_> you should use the full function name, e.g.: $err = Net::SSLeay::ERR_get_error; The following new functions behave in perlish way: $got = Net::SSLeay::read($ssl); # Performs SSL_read, but returns $got # resized according to data received. # Returns undef on failure. Net::SSLeay::write($ssl, $foo) || die; # Performs SSL_write, but automatically # figures out the size of $foo =head3 Low level API: Version related functions =over =item * SSLeay B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before Gives version number (numeric) of underlaying openssl library. my $ver_number = Net::SSLeay::SSLeay(); # returns: the number identifying the openssl release # # 0x00903100 => openssl-0.9.3 # 0x00904100 => openssl-0.9.4 # 0x00905100 => openssl-0.9.5 # 0x0090600f => openssl-0.9.6 # 0x0090601f => openssl-0.9.6a # 0x0090602f => openssl-0.9.6b # ... # 0x009060df => openssl-0.9.6m # 0x0090700f => openssl-0.9.7 # 0x0090701f => openssl-0.9.7a # 0x0090702f => openssl-0.9.7b # ... # 0x009070df => openssl-0.9.7m # 0x0090800f => openssl-0.9.8 # 0x0090801f => openssl-0.9.8a # 0x0090802f => openssl-0.9.8b # ... # 0x0090814f => openssl-0.9.8t # 0x1000000f => openssl-1.0.0 # 0x1000004f => openssl-1.0.0d # 0x1000007f => openssl-1.0.0g You can use it like this: if (Net::SSLeay::SSLeay() < 0x0090800f) { die "you need openssl-0.9.8 or higher"; } =item * SSLeay_version B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before Gives version number (string) of underlaying openssl library. my $ver_string = Net::SSLeay::SSLeay_version($type); # $type # SSLEAY_VERSION - e.g. 'OpenSSL 1.0.0d 8 Feb 2011' # SSLEAY_CFLAGS - e.g. 'compiler: gcc -D_WINDLL -DOPENSSL_USE_APPLINK .....' # SSLEAY_BUILT_ON - e.g. 'built on: Fri May 6 00:00:46 GMT 2011' # SSLEAY_PLATFORM - e.g. 'platform: mingw' # SSLEAY_DIR - e.g. 'OPENSSLDIR: "z:/...."' # # returns: string Net::SSLeay::SSLeay_version(); #is equivalent to Net::SSLeay::SSLeay_version(SSLEAY_VERSION); Check openssl doc L<https://www.openssl.org/docs/man1.0.2/crypto/SSLeay_version.html|https://www.openssl.org/docs/man1.0.2/crypto/SSLeay_version.html> =item * OpenSSL_version_num B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0 Gives version number (numeric) of underlaying openssl library. See L</SSLeay> for interpreting the result. my $ver_number = Net::SSLeay::OpenSSL_version_num(); # returns: the number identifying the openssl release =item * OpenSSL_version B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0 Gives version number (string) of underlaying openssl library. my $ver_string = Net::SSLeay::OpenSSL_version($t); # $t # OPENSSL_VERSION - e.g. 'OpenSSL 1.1.0g 2 Nov 2017' # OPENSSL_CFLAGS - e.g. 'compiler: cc -DDSO_DLFCN -DHAVE_DLFCN_H .....' # OPENSSL_BUILT_ON - e.g. 'built on: reproducible build, date unspecified' # OPENSSL_PLATFORM - e.g. 'platform: darwin64-x86_64-cc' # OPENSSL_DIR - e.g. 'OPENSSLDIR: "/opt/openssl-1.1.0g"' # OPENSSL_ENGINES_DIR - e.g. 'ENGINESDIR: "/opt/openssl-1.1.0g/lib/engines-1.1"' # # returns: string Net::SSLeay::OpenSSL_version(); #is equivalent to Net::SSLeay::OpenSSL_version(OPENSSL_VERSION); Check openssl doc L<https://www.openssl.org/docs/crypto/OpenSSL_version.html|https://www.openssl.org/docs/crypto/OpenSSL_version.html> =back =head3 Low level API: Initialization related functions =over =item * library_init Initialize SSL library by registering algorithms. my $rv = Net::SSLeay::library_init(); Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_library_init.html|http://www.openssl.org/docs/ssl/SSL_library_init.html> While the original function from OpenSSL always returns 1, Net::SSLeay adds a wrapper around it to make sure that the OpenSSL function is only called once. Thus the function will return 1 if initialization was done and 0 if not, i.e. if initialization was done already before. =item * add_ssl_algorithms The alias for L</library_init> Net::SSLeay::add_ssl_algorithms(); =item * OpenSSL_add_ssl_algorithms The alias for L</library_init> Net::SSLeay::OpenSSL_add_ssl_algorithms(); =item * SSLeay_add_ssl_algorithms The alias for L</library_init> Net::SSLeay::SSLeay_add_ssl_algorithms(); =item * load_error_strings Registers the error strings for all libcrypto + libssl related functions. Net::SSLeay::load_error_strings(); # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html|http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html> =item * ERR_load_crypto_strings Registers the error strings for all libcrypto functions. No need to call this function if you have already called L</load_error_strings>. Net::SSLeay::ERR_load_crypto_strings(); # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html|http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html> =item * ERR_load_RAND_strings Registers the error strings for RAND related functions. No need to call this function if you have already called L</load_error_strings>. Net::SSLeay::ERR_load_RAND_strings(); # # returns: no return value =item * ERR_load_SSL_strings Registers the error strings for SSL related functions. No need to call this function if you have already called L</load_error_strings>. Net::SSLeay::ERR_load_SSL_strings(); # # returns: no return value =item * OpenSSL_add_all_algorithms B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Add algorithms to internal table. Net::SSLeay::OpenSSL_add_all_algorithms(); # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html|http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html> =item * OPENSSL_add_all_algorithms_conf B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Similar to L</OpenSSL_add_all_algorithms> - will ALWAYS load the config file Net::SSLeay::OPENSSL_add_all_algorithms_conf(); # # returns: no return value =item * OPENSSL_add_all_algorithms_noconf B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Similar to L</OpenSSL_add_all_algorithms> - will NEVER load the config file Net::SSLeay::OPENSSL_add_all_algorithms_noconf(); # # returns: no return value =back =head3 Low level API: ERR_* and SSL_alert_* related functions B<NOTE:> Please note that SSL_alert_* function have "SSL_" part stripped from their names. =over =item * ERR_clear_error Clear the error queue. Net::SSLeay::ERR_clear_error(); # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_clear_error.html|http://www.openssl.org/docs/crypto/ERR_clear_error.html> =item * ERR_error_string Generates a human-readable string representing the error code $error. my $rv = Net::SSLeay::ERR_error_string($error); # $error - (unsigned integer) error code # # returns: string Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_error_string.html|http://www.openssl.org/docs/crypto/ERR_error_string.html> =item * ERR_get_error Returns the earliest error code from the thread's error queue and removes the entry. This function can be called repeatedly until there are no more error codes to return. my $rv = Net::SSLeay::ERR_get_error(); # # returns: (unsigned integer) error code Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_get_error.html|http://www.openssl.org/docs/crypto/ERR_get_error.html> =item * ERR_peek_error Returns the earliest error code from the thread's error queue without modifying it. my $rv = Net::SSLeay::ERR_peek_error(); # # returns: (unsigned integer) error code Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_get_error.html|http://www.openssl.org/docs/crypto/ERR_get_error.html> =item * ERR_put_error Adds an error code to the thread's error queue. It signals that the error of $reason code reason occurred in function $func of library $lib, in line number $line of $file. Net::SSLeay::ERR_put_error($lib, $func, $reason, $file, $line); # $lib - (integer) library id (check openssl/err.h for constants e.g. ERR_LIB_SSL) # $func - (integer) function id (check openssl/ssl.h for constants e.g. SSL_F_SSL23_READ) # $reason - (integer) reason id (check openssl/ssl.h for constants e.g. SSL_R_SSL_HANDSHAKE_FAILURE) # $file - (string) file name # $line - (integer) line number in $file # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/ERR_put_error.html|http://www.openssl.org/docs/crypto/ERR_put_error.html> and L<http://www.openssl.org/docs/crypto/err.html|http://www.openssl.org/docs/crypto/err.html> =item * alert_desc_string Returns a two letter string as a short form describing the reason of the alert specified by value. my $rv = Net::SSLeay::alert_desc_string($value); # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants) # # returns: description string (2 letters) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html> =item * alert_desc_string_long Returns a string describing the reason of the alert specified by value. my $rv = Net::SSLeay::alert_desc_string_long($value); # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants) # # returns: description string Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html> =item * alert_type_string Returns a one letter string indicating the type of the alert specified by value. my $rv = Net::SSLeay::alert_type_string($value); # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants) # # returns: string (1 letter) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html> =item * alert_type_string_long Returns a string indicating the type of the alert specified by value. my $rv = Net::SSLeay::alert_type_string_long($value); # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants) # # returns: string Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_alert_type_string.html|http://www.openssl.org/docs/ssl/SSL_alert_type_string.html> =back =head3 Low level API: SSL_METHOD_* related functions =over =item * SSLv23_method, SSLv23_server_method and SSLv23_client_method B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before. Returns SSL_METHOD structure corresponding to general-purpose version-flexible TLS method, the return value can be later used as a param of L</CTX_new_with_method>. B<NOTE:> Consider using TLS_method, TLS_server_method or TLS_client_method with new code. my $rv = Net::SSLeay::SSLv2_method(); # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) =item * SSLv2_method Returns SSL_METHOD structure corresponding to SSLv2 method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl. my $rv = Net::SSLeay::SSLv2_method(); # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) =item * SSLv3_method Returns SSL_METHOD structure corresponding to SSLv3 method, the return value can be later used as a param of L</CTX_new_with_method>. my $rv = Net::SSLeay::SSLv3_method(); # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html> =item * TLSv1_method, TLSv1_server_method and TLSv1_client_method B<COMPATIBILITY:> Server and client methods not available in Net-SSLeay-1.82 and before. Returns SSL_METHOD structure corresponding to TLSv1 method, the return value can be later used as a param of L</CTX_new_with_method>. my $rv = Net::SSLeay::TLSv1_method(); # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html> =item * TLSv1_1_method, TLSv1_1_server_method and TLSv1_1_client_method B<COMPATIBILITY:> Server and client methods not available in Net-SSLeay-1.82 and before. Returns SSL_METHOD structure corresponding to TLSv1_1 method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl. my $rv = Net::SSLeay::TLSv1_1_method(); # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html> =item * TLSv1_2_method, TLSv1_2_server_method and TLSv1_2_client_method B<COMPATIBILITY:> Server and client methods not available in Net-SSLeay-1.82 and before. Returns SSL_METHOD structure corresponding to TLSv1_2 method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl. my $rv = Net::SSLeay::TLSv1_2_method(); # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html> =item * TLS_method, TLS_server_method and TLS_client_method B<COMPATIBILITY:> Not available in Net-SSLeay-1.82 and before. Returns SSL_METHOD structure corresponding to general-purpose version-flexible TLS method, the return value can be later used as a param of L</CTX_new_with_method>. Only available where supported by the underlying openssl. my $rv = Net::SSLeay::TLS_method(); # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html> =back =head3 Low level API: ENGINE_* related functions =over =item * ENGINE_load_builtin_engines B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support. Load all bundled ENGINEs into memory and make them visible. Net::SSLeay::ENGINE_load_builtin_engines(); # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html> =item * ENGINE_register_all_complete B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support. Register all loaded ENGINEs for every algorithm they collectively implement. Net::SSLeay::ENGINE_register_all_complete(); # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html> =item * ENGINE_set_default B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support. Set default engine to $e + set its flags to $flags. my $rv = Net::SSLeay::ENGINE_set_default($e, $flags); # $e - value corresponding to openssl's ENGINE structure # $flags - (integer) engine flags # flags value can be made by bitwise "OR"ing: # 0x0001 - ENGINE_METHOD_RSA # 0x0002 - ENGINE_METHOD_DSA # 0x0004 - ENGINE_METHOD_DH # 0x0008 - ENGINE_METHOD_RAND # 0x0010 - ENGINE_METHOD_ECDH # 0x0020 - ENGINE_METHOD_ECDSA # 0x0040 - ENGINE_METHOD_CIPHERS # 0x0080 - ENGINE_METHOD_DIGESTS # 0x0100 - ENGINE_METHOD_STORE # 0x0200 - ENGINE_METHOD_PKEY_METHS # 0x0400 - ENGINE_METHOD_PKEY_ASN1_METHS # Obvious all-or-nothing cases: # 0xFFFF - ENGINE_METHOD_ALL # 0x0000 - ENGINE_METHOD_NONE # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html> =item * ENGINE_by_id Get ENGINE by its identification $id. B<COMPATIBILITY:> Requires an OpenSSL build with dynamic engine loading support. my $rv = Net::SSLeay::ENGINE_by_id($id); # $id - (string) engine identification e.g. "dynamic" # # returns: value corresponding to openssl's ENGINE structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/engine.html|http://www.openssl.org/docs/crypto/engine.html> =back =head3 Low level API: EVP_PKEY_* related functions =over =item * EVP_PKEY_copy_parameters Copies the parameters from key $from to key $to. my $rv = Net::SSLeay::EVP_PKEY_copy_parameters($to, $from); # $to - value corresponding to openssl's EVP_PKEY structure # $from - value corresponding to openssl's EVP_PKEY structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_cmp.html|http://www.openssl.org/docs/crypto/EVP_PKEY_cmp.html> =item * EVP_PKEY_new B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Creates a new EVP_PKEY structure. my $rv = Net::SSLeay::EVP_PKEY_new(); # # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_new.html|http://www.openssl.org/docs/crypto/EVP_PKEY_new.html> =item * EVP_PKEY_free B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Free an allocated EVP_PKEY structure. Net::SSLeay::EVP_PKEY_free($pkey); # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_new.html|http://www.openssl.org/docs/crypto/EVP_PKEY_new.html> =item * EVP_PKEY_assign_RSA B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Set the key referenced by $pkey to $key B<NOTE:> No reference counter will be increased, i.e. $key will be freed if $pkey is freed. my $rv = Net::SSLeay::EVP_PKEY_assign_RSA($pkey, $key); # $pkey - value corresponding to openssl's EVP_PKEY structure # $key - value corresponding to openssl's RSA structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_assign_RSA.html|http://www.openssl.org/docs/crypto/EVP_PKEY_assign_RSA.html> =item * EVP_PKEY_assign_EC_KEY B<COMPATIBILITY:> not available in Net-SSLeay-1.74 and before Set the key referenced by $pkey to $key B<NOTE:> No reference counter will be increased, i.e. $key will be freed if $pkey is freed. my $rv = Net::SSLeay::EVP_PKEY_assign_EC_KEY($pkey, $key); # $pkey - value corresponding to openssl's EVP_PKEY structure # $key - value corresponding to openssl's EC_KEY structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_PKEY_assign_EC_KEY.html|http://www.openssl.org/docs/crypto/EVP_PKEY_assign_EC_KEY.html> =item * EVP_PKEY_bits B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns the size of the key $pkey in bits. my $rv = Net::SSLeay::EVP_PKEY_bits($pkey); # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: size in bits =item * EVP_PKEY_size B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns the maximum size of a signature in bytes. The actual signature may be smaller. my $rv = Net::SSLeay::EVP_PKEY_size($pkey); # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: the maximum size in bytes Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_SignInit.html|http://www.openssl.org/docs/crypto/EVP_SignInit.html> =item * EVP_PKEY_id B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.0 Returns $pkey type (integer value of corresponding NID). my $rv = Net::SSLeay::EVP_PKEY_id($pkey); # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: (integer) key type Example: my $pubkey = Net::SSLeay::X509_get_pubkey($x509); my $type = Net::SSLeay::EVP_PKEY_id($pubkey); print Net::SSLeay::OBJ_nid2sn($type); #prints e.g. 'rsaEncryption' =back =head3 Low level API: PEM_* related functions Check openssl doc L<http://www.openssl.org/docs/crypto/pem.html|http://www.openssl.org/docs/crypto/pem.html> =over =item * PEM_read_bio_X509 B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Loads PEM formatted X509 certificate via given BIO structure. my $rv = Net::SSLeay::PEM_read_bio_X509($bio); # $bio - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's X509 structure (0 on failure) Example: my $bio = Net::SSLeay::BIO_new_file($filename, 'r'); my $x509 = Net::SSLeay::PEM_read_bio_X509($bio); Net::SSLeay::BIO_free($bio); =item * PEM_read_bio_X509_REQ B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Loads PEM formatted X509_REQ object via given BIO structure. my $rv = Net::SSLeay::PEM_read_bio_X509_REQ($bio, $x=NULL, $cb=NULL, $u=NULL); # $bio - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's X509_REQ structure (0 on failure) Example: my $bio = Net::SSLeay::BIO_new_file($filename, 'r'); my $x509_req = Net::SSLeay::PEM_read_bio_X509_REQ($bio); Net::SSLeay::BIO_free($bio); =item * PEM_read_bio_DHparams Reads DH structure from BIO. my $rv = Net::SSLeay::PEM_read_bio_DHparams($bio); # $bio - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's DH structure (0 on failure) =item * PEM_read_bio_X509_CRL Reads X509_CRL structure from BIO. my $rv = Net::SSLeay::PEM_read_bio_X509_CRL($bio); # $bio - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's X509_CRL structure (0 on failure) =item * PEM_read_bio_PrivateKey B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Loads PEM formatted private key via given BIO structure. my $rv = Net::SSLeay::PEM_read_bio_PrivateKey($bio, $cb, $data); # $bio - value corresponding to openssl's BIO structure # $cb - reference to perl callback function # $data - data that will be passed to callback function (see examples below) # # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure) Example: my $bio = Net::SSLeay::BIO_new_file($filename, 'r'); my $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio); #ask for password if needed Net::SSLeay::BIO_free($bio); To use password you have the following options: $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, \&callback_func); # use callback func for getting password $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, \&callback_func, $data); # use callback_func + pass $data to callback_func $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, undef, "secret"); # use password "secret" $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, undef, ""); # use empty password Callback function signature: sub callback_func { my ($max_passwd_size, $rwflag, $data) = @_; # $max_passwd_size - maximum size of returned password (longer values will be discarded) # $rwflag - indicates whether we are loading (0) or storing (1) - for PEM_read_bio_PrivateKey always 0 # $data - the data passed to PEM_read_bio_PrivateKey as 3rd parameter return "secret"; } =item * PEM_X509_INFO_read_bio Reads a BIO containing a PEM formatted file into a STACK_OF(X509_INFO) structure. my $rv = Net::SSLeay::PEM_X509_INFO_read_bio($bio); # $bio - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's STACK_OF(X509_INFO) structure. Example: my $bio = Net::SSLeay::BIO_new_file($filename, 'r'); my $sk_x509_info = Net::SSLeay::PEM_X509_INFO_read_bio($bio); Net::SSLeay::BIO_free($bio); =item * PEM_get_string_X509 B<NOTE:> Does not exactly correspond to any low level API function Converts/exports X509 certificate to string (PEM format). Net::SSLeay::PEM_get_string_X509($x509); # $x509 - value corresponding to openssl's X509 structure # # returns: string with $x509 in PEM format =item * PEM_get_string_PrivateKey B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Converts public key $pk into PEM formatted string (optionally protected with password). my $rv = Net::SSLeay::PEM_get_string_PrivateKey($pk, $passwd, $enc_alg); # $pk - value corresponding to openssl's EVP_PKEY structure # $passwd - [optional] (string) password to use for key encryption # $enc_alg - [optional] algorithm to use for key encryption (default: DES_CBC) - value corresponding to openssl's EVP_CIPHER structure # # returns: PEM formatted string Examples: $pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk); $pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk, "secret"); $pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk, "secret", Net::SSLeay::EVP_get_cipherbyname("DES-EDE3-CBC")); =item * PEM_get_string_X509_CRL B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Converts X509_CRL object $x509_crl into PEM formatted string. Net::SSLeay::PEM_get_string_X509_CRL($x509_crl); # $x509_crl - value corresponding to openssl's X509_CRL structure # # returns: no return value =item * PEM_get_string_X509_REQ B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Converts X509_REQ object $x509_crl into PEM formatted string. Net::SSLeay::PEM_get_string_X509_REQ($x509_req); # $x509_req - value corresponding to openssl's X509_REQ structure # # returns: no return value =back =head3 Low level API: d2i_* (DER format) related functions =over =item * d2i_X509_bio B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Loads DER formatted X509 certificate via given BIO structure. my $rv = Net::SSLeay::d2i_X509_bio($bp); # $bp - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's X509 structure (0 on failure) Example: my $bio = Net::SSLeay::BIO_new_file($filename, 'rb'); my $x509 = Net::SSLeay::d2i_X509_bio($bio); Net::SSLeay::BIO_free($bio); Check openssl doc L<http://www.openssl.org/docs/crypto/d2i_X509.html|http://www.openssl.org/docs/crypto/d2i_X509.html> =item * d2i_X509_CRL_bio B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Loads DER formatted X509_CRL object via given BIO structure. my $rv = Net::SSLeay::d2i_X509_CRL_bio($bp); # $bp - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's X509_CRL structure (0 on failure) Example: my $bio = Net::SSLeay::BIO_new_file($filename, 'rb'); my $x509_crl = Net::SSLeay::d2i_X509_CRL_bio($bio); Net::SSLeay::BIO_free($bio); =item * d2i_X509_REQ_bio B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Loads DER formatted X509_REQ object via given BIO structure. my $rv = Net::SSLeay::d2i_X509_REQ_bio($bp); # $bp - value corresponding to openssl's BIO structure # # returns: value corresponding to openssl's X509_REQ structure (0 on failure) Example: my $bio = Net::SSLeay::BIO_new_file($filename, 'rb'); my $x509_req = Net::SSLeay::d2i_X509_REQ_bio($bio); Net::SSLeay::BIO_free($bio); =back =head3 Low level API: PKCS12 related functions =over =item * P_PKCS12_load_file B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Loads X509 certificate + private key + certificates of CA chain (if present in PKCS12 file). my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, $load_chain, $password); # $filename - name of PKCS12 file # $load_chain - [optional] whether load (1) or not(0) CA chain (default: 0) # $password - [optional] password for private key # # returns: triplet ($privkey, $cert, @cachain) # $privkey - value corresponding to openssl's EVP_PKEY structure # $cert - value corresponding to openssl's X509 structure # @cachain - array of values corresponding to openssl's X509 structure (empty if no CA chain in PKCS12) B<IMPORTANT NOTE:> after you do the job you need to call X509_free() on $privkey + all members of @cachain and EVP_PKEY_free() on $privkey. Examples: my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename); #or my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename, 0, $password); #or my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, 1); #or my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, 1, $password); #BEWARE: THIS IS WRONG - MEMORY LEAKS! (you cannot free @cachain items) my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename, 1, $password); B<NOTE> With some combinations of Windows, perl, compiler and compiler options, you may see a runtime error "no OPENSSL_Applink", when calling Net::SSLeay::P_PKCS12_load_file. See README.Win32 for more details. =back =head3 Low level API: SESSION_* related functions =over =item * d2i_SSL_SESSION B<COMPATIBILITY:> does not work in Net-SSLeay-1.85 and before Transforms the binary ASN1 representation string of an SSL/TLS session into an SSL_SESSION object. my $ses = Net::SSLeay::d2i_SSL_SESSION($data); # $data - the session as ASN1 representation string # # returns: $ses - the new SSL_SESSION Check openssl doc L<https://www.openssl.org/docs/ssl/i2d_SSL_SESSION.html|https://www.openssl.org/docs/ssl/i2d_SSL_SESSION.html> =item * i2d_SSL_SESSION B<COMPATIBILITY:> does not work in Net-SSLeay-1.85 and before Transforms the SSL_SESSION object in into the ASN1 representation and returns it as string. my $data = Net::SSLeay::i2d_SSL_SESSION($ses); # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: $data - session as string Check openssl doc L<https://www.openssl.org/docs/ssl/d2i_SSL_SESSION.html|https://www.openssl.org/docs/ssl/d2i_SSL_SESSION.html> =item * SESSION_new Creates a new SSL_SESSION structure. my $rv = Net::SSLeay::SESSION_new(); # # returns: value corresponding to openssl's SSL_SESSION structure (0 on failure) =item * SESSION_free Free an allocated SSL_SESSION structure. Net::SSLeay::SESSION_free($ses); # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_free.html|http://www.openssl.org/docs/ssl/SSL_SESSION_free.html> =item * SESSION_up_ref B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0 or LibreSSL 2.7.0 Increases the reference counter on a SSL_SESSION structure. Net::SSLeay::SESSION_up_ref($ses); # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: 1 on success else 0 Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_SESSION_up_ref.html|https://www.openssl.org/docs/ssl/SSL_SESSION_up_ref.html> =item * SESSION_dup B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Duplicates a SSL_SESSION structure. Net::SSLeay::SESSION_dup($ses); # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: the duplicated session Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_SESSION_dup.html|https://www.openssl.org/docs/ssl/SSL_SESSION_dup.html> =item * SESSION_is_resumable B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Determine whether an SSL_SESSION object can be used for resumption. Net::SSLeay::SESSION_is_resumable($ses); # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: (integer) 1 if it can or 0 if not Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_SESSION_is_resumable.html|https://www.openssl.org/docs/manmaster/man3/SSL_SESSION_is_resumable.html> =item * SESSION_cmp Compare two SSL_SESSION structures. my $rv = Net::SSLeay::SESSION_cmp($sesa, $sesb); # $sesa - value corresponding to openssl's SSL_SESSION structure # $sesb - value corresponding to openssl's SSL_SESSION structure # # returns: 0 if the two structures are the same B<NOTE:> Not available in openssl 1.0 or later =item * SESSION_get_app_data Can be used to get application defined value/data. my $rv = Net::SSLeay::SESSION_get_app_data($ses); # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: string/buffer/pointer ??? =item * SESSION_set_app_data Can be used to set some application defined value/data. my $rv = Net::SSLeay::SESSION_set_app_data($s, $a); # $s - value corresponding to openssl's SSL_SESSION structure # $a - (string/buffer/pointer ???) data # # returns: ??? =item * SESSION_get_ex_data Is used to retrieve the information for $idx from session $ses. my $rv = Net::SSLeay::SESSION_get_ex_data($ses, $idx); # $ses - value corresponding to openssl's SSL_SESSION structure # $idx - (integer) index for application specific data # # returns: pointer to ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html> =item * SESSION_set_ex_data Is used to store application data at arg for idx into the session object. my $rv = Net::SSLeay::SESSION_set_ex_data($ss, $idx, $data); # $ss - value corresponding to openssl's SSL_SESSION structure # $idx - (integer) ??? # $data - (pointer) ??? # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html> =item * SESSION_get_ex_new_index Is used to register a new index for application specific data. my $rv = Net::SSLeay::SESSION_get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func); # $argl - (long) ??? # $argp - (pointer) ??? # $new_func - function pointer ??? (CRYPTO_EX_new *) # $dup_func - function pointer ??? (CRYPTO_EX_dup *) # $free_func - function pointer ??? (CRYPTO_EX_free *) # # returns: (integer) ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html> =item * SESSION_get_master_key B<NOTE:> Does not exactly correspond to any low level API function Returns 'master_key' value from SSL_SESSION structure $s Net::SSLeay::SESSION_get_master_key($s); # $s - value corresponding to openssl's SSL_SESSION structure # # returns: master key (binary data) =item * SESSION_set_master_key Sets 'master_key' value for SSL_SESSION structure $s Net::SSLeay::SESSION_set_master_key($s, $key); # $s - value corresponding to openssl's SSL_SESSION structure # $key - master key (binary data) # # returns: no return value Not available with OpenSSL 1.1 and later. Code that previously used SESSION_set_master_key must now set $secret in the session_secret callback set with SSL_set_session_secret_cb. =item * SESSION_get_time Returns the time at which the session s was established. The time is given in seconds since 1.1.1970. my $rv = Net::SSLeay::SESSION_get_time($s); # $s - value corresponding to openssl's SSL_SESSION structure # # returns: timestamp (seconds since 1.1.1970) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html> =item * get_time Technically the same functionality as L</SESSION_get_time>. my $rv = Net::SSLeay::get_time($s); =item * SESSION_get_timeout Returns the timeout value set for session $s in seconds. my $rv = Net::SSLeay::SESSION_get_timeout($s); # $s - value corresponding to openssl's SSL_SESSION structure # # returns: timeout (in seconds) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html> =item * get_timeout Technically the same functionality as L</SESSION_get_timeout>. my $rv = Net::SSLeay::get_timeout($s); =item * SESSION_print B<NOTE:> Does not exactly correspond to any low level API function Prints session details (e.g. protocol version, cipher, session-id ...) to BIO. my $rv = Net::SSLeay::SESSION_print($fp, $ses); # $fp - value corresponding to openssl's BIO structure # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: 1 on success, 0 on failure You have to use necessary BIO functions like this: # let us have $ssl corresponding to openssl's SSL structure my $ses = Net::SSLeay::get_session($ssl); my $bio = Net::SSLeay::BIO_new(&Net::SSLeay::BIO_s_mem); Net::SSLeay::SESSION_print($bio, $ses); print Net::SSLeay::BIO_read($bio); =item * SESSION_print_fp Prints session details (e.g. protocol version, cipher, session-id ...) to file handle. my $rv = Net::SSLeay::SESSION_print_fp($fp, $ses); # $fp - perl file handle # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: 1 on success, 0 on failure Example: # let us have $ssl corresponding to openssl's SSL structure my $ses = Net::SSLeay::get_session($ssl); open my $fh, ">", "output.txt"; Net::SSLeay::SESSION_print_fp($fh,$ses); =item * SESSION_set_time Replaces the creation time of the session s with the chosen value $t (seconds since 1.1.1970). my $rv = Net::SSLeay::SESSION_set_time($ses, $t); # $ses - value corresponding to openssl's SSL_SESSION structure # $t - time value # # returns: 1 on success Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html> =item * set_time Technically the same functionality as L</SESSION_set_time>. my $rv = Net::SSLeay::set_time($ses, $t); =item * SESSION_set_timeout Sets the timeout value for session s in seconds to $t. my $rv = Net::SSLeay::SESSION_set_timeout($s, $t); # $s - value corresponding to openssl's SSL_SESSION structure # $t - timeout (in seconds) # # returns: 1 on success Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html|http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html> =item * set_timeout Technically the same functionality as L</SESSION_set_timeout>. my $rv = Net::SSLeay::set_timeout($ses, $t); =back =head3 Low level API: SSL_CTX_* related functions B<NOTE:> Please note that the function described in this chapter have "SSL_" part stripped from their original openssl names. =over =item * CTX_add_client_CA Adds the CA name extracted from $cacert to the list of CAs sent to the client when requesting a client certificate for $ctx. my $rv = Net::SSLeay::CTX_add_client_CA($ctx, $cacert); # $ctx - value corresponding to openssl's SSL_CTX structure # $cacert - value corresponding to openssl's X509 structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html> =item * CTX_add_extra_chain_cert Adds the certificate $x509 to the certificate chain presented together with the certificate. Several certificates can be added one after the other. my $rv = Net::SSLeay::CTX_add_extra_chain_cert($ctx, $x509); # $ctx - value corresponding to openssl's SSL_CTX structure # $x509 - value corresponding to openssl's X509 structure # # returns: 1 on success, check out the error stack to find out the reason for failure otherwise Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_add_extra_chain_cert.html|http://www.openssl.org/docs/ssl/SSL_CTX_add_extra_chain_cert.html> =item * CTX_add_session Adds the session $ses to the context $ctx. my $rv = Net::SSLeay::CTX_add_session($ctx, $ses); # $ctx - value corresponding to openssl's SSL_CTX structure # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html|http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html> =item * CTX_callback_ctrl ??? (more info needed) my $rv = Net::SSLeay::CTX_callback_ctrl($ctx, $cmd, $fp); # $ctx - value corresponding to openssl's SSL_CTX structure # $cmd - (integer) command id # $fp - (function pointer) ??? # # returns: ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html> =item * CTX_check_private_key Checks the consistency of a private key with the corresponding certificate loaded into $ctx. my $rv = Net::SSLeay::CTX_check_private_key($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * CTX_ctrl Internal handling function for SSL_CTX objects. B<BEWARE:> openssl doc says: This function should never be called directly! my $rv = Net::SSLeay::CTX_ctrl($ctx, $cmd, $larg, $parg); # $ctx - value corresponding to openssl's SSL_CTX structure # $cmd - (integer) command id # $larg - (integer) long ??? # $parg - (string/pointer) ??? # # returns: (long) result of given command ??? #valid $cmd values 1 - SSL_CTRL_NEED_TMP_RSA 2 - SSL_CTRL_SET_TMP_RSA 3 - SSL_CTRL_SET_TMP_DH 4 - SSL_CTRL_SET_TMP_ECDH 5 - SSL_CTRL_SET_TMP_RSA_CB 6 - SSL_CTRL_SET_TMP_DH_CB 7 - SSL_CTRL_SET_TMP_ECDH_CB 8 - SSL_CTRL_GET_SESSION_REUSED 9 - SSL_CTRL_GET_CLIENT_CERT_REQUEST 10 - SSL_CTRL_GET_NUM_RENEGOTIATIONS 11 - SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 12 - SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 13 - SSL_CTRL_GET_FLAGS 14 - SSL_CTRL_EXTRA_CHAIN_CERT 15 - SSL_CTRL_SET_MSG_CALLBACK 16 - SSL_CTRL_SET_MSG_CALLBACK_ARG 17 - SSL_CTRL_SET_MTU 20 - SSL_CTRL_SESS_NUMBER 21 - SSL_CTRL_SESS_CONNECT 22 - SSL_CTRL_SESS_CONNECT_GOOD 23 - SSL_CTRL_SESS_CONNECT_RENEGOTIATE 24 - SSL_CTRL_SESS_ACCEPT 25 - SSL_CTRL_SESS_ACCEPT_GOOD 26 - SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 27 - SSL_CTRL_SESS_HIT 28 - SSL_CTRL_SESS_CB_HIT 29 - SSL_CTRL_SESS_MISSES 30 - SSL_CTRL_SESS_TIMEOUTS 31 - SSL_CTRL_SESS_CACHE_FULL 32 - SSL_CTRL_OPTIONS 33 - SSL_CTRL_MODE 40 - SSL_CTRL_GET_READ_AHEAD 41 - SSL_CTRL_SET_READ_AHEAD 42 - SSL_CTRL_SET_SESS_CACHE_SIZE 43 - SSL_CTRL_GET_SESS_CACHE_SIZE 44 - SSL_CTRL_SET_SESS_CACHE_MODE 45 - SSL_CTRL_GET_SESS_CACHE_MODE 50 - SSL_CTRL_GET_MAX_CERT_LIST 51 - SSL_CTRL_SET_MAX_CERT_LIST 52 - SSL_CTRL_SET_MAX_SEND_FRAGMENT 53 - SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 54 - SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 55 - SSL_CTRL_SET_TLSEXT_HOSTNAME 56 - SSL_CTRL_SET_TLSEXT_DEBUG_CB 57 - SSL_CTRL_SET_TLSEXT_DEBUG_ARG 58 - SSL_CTRL_GET_TLSEXT_TICKET_KEYS 59 - SSL_CTRL_SET_TLSEXT_TICKET_KEYS 60 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 61 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 62 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 63 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 64 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 65 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 66 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 67 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 68 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 69 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 70 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 71 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 72 - SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 73 - DTLS_CTRL_GET_TIMEOUT 74 - DTLS_CTRL_HANDLE_TIMEOUT 75 - DTLS_CTRL_LISTEN 76 - SSL_CTRL_GET_RI_SUPPORT 77 - SSL_CTRL_CLEAR_OPTIONS 78 - SSL_CTRL_CLEAR_MODE 82 - SSL_CTRL_GET_EXTRA_CHAIN_CERTS 83 - SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 88 - SSL_CTRL_CHAIN 89 - SSL_CTRL_CHAIN_CERT 90 - SSL_CTRL_GET_CURVES 91 - SSL_CTRL_SET_CURVES 92 - SSL_CTRL_SET_CURVES_LIST 93 - SSL_CTRL_GET_SHARED_CURVE 94 - SSL_CTRL_SET_ECDH_AUTO 97 - SSL_CTRL_SET_SIGALGS 98 - SSL_CTRL_SET_SIGALGS_LIST 99 - SSL_CTRL_CERT_FLAGS 100 - SSL_CTRL_CLEAR_CERT_FLAGS 101 - SSL_CTRL_SET_CLIENT_SIGALGS 102 - SSL_CTRL_SET_CLIENT_SIGALGS_LIST 103 - SSL_CTRL_GET_CLIENT_CERT_TYPES 104 - SSL_CTRL_SET_CLIENT_CERT_TYPES 105 - SSL_CTRL_BUILD_CERT_CHAIN 106 - SSL_CTRL_SET_VERIFY_CERT_STORE 107 - SSL_CTRL_SET_CHAIN_CERT_STORE 108 - SSL_CTRL_GET_PEER_SIGNATURE_NID 109 - SSL_CTRL_GET_SERVER_TMP_KEY 110 - SSL_CTRL_GET_RAW_CIPHERLIST 111 - SSL_CTRL_GET_EC_POINT_FORMATS 112 - SSL_CTRL_GET_TLSA_RECORD 113 - SSL_CTRL_SET_TLSA_RECORD 114 - SSL_CTRL_PULL_TLSA_RECORD Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html> =item * CTX_flush_sessions Causes a run through the session cache of $ctx to remove sessions expired at time $tm. Net::SSLeay::CTX_flush_sessions($ctx, $tm); # $ctx - value corresponding to openssl's SSL_CTX structure # $tm - specifies the time which should be used for the expiration test (seconds since 1.1.1970) # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_flush_sessions.html|http://www.openssl.org/docs/ssl/SSL_CTX_flush_sessions.html> =item * CTX_free Free an allocated SSL_CTX object. Net::SSLeay::CTX_free($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_free.html|http://www.openssl.org/docs/ssl/SSL_CTX_free.html> =item * CTX_get_app_data Can be used to get application defined value/data. my $rv = Net::SSLeay::CTX_get_app_data($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: string/buffer/pointer ??? =item * CTX_set_app_data Can be used to set some application defined value/data. my $rv = Net::SSLeay::CTX_set_app_data($ctx, $arg); # $ctx - value corresponding to openssl's SSL_CTX structure # $arg - (string/buffer/pointer ???) data # # returns: ??? =item * CTX_get0_param B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Returns the current verification parameters. my $vpm = Net::SSLeay::CTX_get0_param($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: value corresponding to openssl's X509_VERIFY_PARAM structure Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html|https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html> =item * CTX_get_cert_store Returns the current certificate verification storage. my $rv = Net::SSLeay::CTX_get_cert_store($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: value corresponding to openssl's X509_STORE structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html> =item * CTX_get_client_CA_list Returns the list of client CAs explicitly set for $ctx using L</CTX_set_client_CA_list>. my $rv = Net::SSLeay::CTX_get_client_CA_list($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: value corresponding to openssl's X509_NAME_STACK structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html> =item * CTX_get_ex_data Is used to retrieve the information for index $idx from $ctx. my $rv = Net::SSLeay::CTX_get_ex_data($ssl, $idx); # $ssl - value corresponding to openssl's SSL_CTX structure # $idx - (integer) index for application specific data # # returns: pointer to ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html> =item * CTX_get_ex_new_index Is used to register a new index for application specific data. my $rv = Net::SSLeay::CTX_get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func); # $argl - (long) ??? # $argp - (pointer) ??? # $new_func - function pointer ??? (CRYPTO_EX_new *) # $dup_func - function pointer ??? (CRYPTO_EX_dup *) # $free_func - function pointer ??? (CRYPTO_EX_free *) # # returns: (integer) ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html> =item * CTX_get_mode Returns the mode set for ctx. my $rv = Net::SSLeay::CTX_get_mode($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: mode (bitmask) #to decode the return value (bitmask) use: 0x00000001 corresponds to SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000002 corresponds to SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000004 corresponds to SSL_MODE_AUTO_RETRY 0x00000008 corresponds to SSL_MODE_NO_AUTO_CHAIN 0x00000010 corresponds to SSL_MODE_RELEASE_BUFFERS (note: some of the bits might not be supported by older openssl versions) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html> =item * CTX_set_mode Adds the mode set via bitmask in $mode to $ctx. Options already set before are not cleared. my $rv = Net::SSLeay::CTX_set_mode($ctx, $mode); # $ctx - value corresponding to openssl's SSL_CTX structure # $mode - mode bitmask # # returns: the new mode bitmask after adding $mode For bitmask details see L</CTX_get_mode> (above). Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html> =item * CTX_get_options Returns the options (bitmask) set for $ctx. my $rv = Net::SSLeay::CTX_get_options($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: options (bitmask) B<BEWARE:> The available constants and their values in bitmask depend on the TLS library. For example, SSL_OP_NO_TLSv1_3 became available much later than SSL_OP_NO_COMPRESS which is already deprecated by some libraries. Also, some previously used option values have been recycled and are now used for newer options. See the list of constants in this document for options Net::SSLeay currently supports. You are strongly encouraged to B<check your TLS library> if you need to use numeric values directly. The following is a sample of historic values. It may not be correct anymore. #to decode the return value (bitmask) use: 0x00000004 corresponds to SSL_OP_LEGACY_SERVER_CONNECT 0x00000800 corresponds to SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00004000 corresponds to SSL_OP_NO_TICKET 0x00010000 corresponds to SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00400000 corresponds to SSL_OP_CIPHER_SERVER_PREFERENCE 0x04000000 corresponds to SSL_OP_NO_TLSv1 Check openssl doc L<https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html|https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html> =item * CTX_set_options Adds the options set via bitmask in $options to ctx. Options already set before are not cleared. Net::SSLeay::CTX_set_options($ctx, $options); # $ctx - value corresponding to openssl's SSL_CTX structure # $options - options bitmask # # returns: the new options bitmask after adding $options For bitmask details see L</CTX_get_options> (above). Check openssl doc L<https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html|https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html> =item * CTX_get_quiet_shutdown Returns the 'quiet shutdown' setting of $ctx. my $rv = Net::SSLeay::CTX_get_quiet_shutdown($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: (integer) the current setting Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html> =item * CTX_get_read_ahead my $rv = Net::SSLeay::CTX_get_read_ahead($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: (integer) read_ahead value =item * CTX_get_session_cache_mode Returns the currently used cache mode (bitmask). my $rv = Net::SSLeay::CTX_get_session_cache_mode($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: mode (bitmask) B<BEWARE:> SESS_CACHE_OFF and other constants are not available in Net-SSLeay-1.82 and before. If the constants are not available, the following values have historically been correct. You are strongly encouraged to B<check your TLS library> for the current values. #to decode the return value (bitmask) use: 0x0000 corresponds to SSL_SESS_CACHE_OFF 0x0001 corresponds to SSL_SESS_CACHE_CLIENT 0x0002 corresponds to SSL_SESS_CACHE_SERVER 0x0080 corresponds to SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0100 corresponds to SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0200 corresponds to SSL_SESS_CACHE_NO_INTERNAL_STORE (note: some of the bits might not be supported by older openssl versions) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html> =item * CTX_set_session_cache_mode Enables/disables session caching by setting the operational mode for $ctx to $mode. my $rv = Net::SSLeay::CTX_set_session_cache_mode($ctx, $mode); # $ctx - value corresponding to openssl's SSL_CTX structure # $mode - mode (bitmask) # # returns: previously set cache mode For bitmask details see L</CTX_get_session_cache_mode> (above). Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html> =item * CTX_get_timeout Returns the currently set timeout value for $ctx. my $rv = Net::SSLeay::CTX_get_timeout($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: timeout in seconds Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html> =item * CTX_get_verify_depth Returns the verification depth limit currently set in $ctx. If no limit has been explicitly set, -1 is returned and the default value will be used.", my $rv = Net::SSLeay::CTX_get_verify_depth($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: depth limit currently set in $ctx, -1 if no limit has been explicitly set Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html> =item * CTX_get_verify_mode Returns the verification mode (bitmask) currently set in $ctx. my $rv = Net::SSLeay::CTX_get_verify_mode($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: mode (bitmask) For bitmask details see L</"CTX_set_verify">. Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_verify_mode.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_verify_mode.html> =item * CTX_set_verify Sets the verification flags for $ctx to be $mode and specifies the verify_callback function to be used. Net::SSLeay::CTX_set_verify($ctx, $mode, $callback); # $ctx - value corresponding to openssl's SSL_CTX structure # $mode - mode (bitmask), see OpenSSL manual # $callback - [optional] reference to perl callback function # # returns: no return value Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_verify.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_verify.html> =item * CTX_set_post_handshake_auth B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Enable the Post-Handshake Authentication extension to be added to the ClientHello such that post-handshake authentication can be requested by the server. Net::SSLeay::CTX_set_posthandshake_auth($ctx, $val); # $ctx - value corresponding to openssl's SSL_CTX structure # $val - 0 then the extension is not sent, otherwise it is # # returns: no return value Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_post_handshake_auth|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_post_handshake_auth.html> =item * CTX_load_verify_locations Specifies the locations for $ctx, at which CA certificates for verification purposes are located. The certificates available via $CAfile and $CApath are trusted. my $rv = Net::SSLeay::CTX_load_verify_locations($ctx, $CAfile, $CApath); # $ctx - value corresponding to openssl's SSL_CTX structure # $CAfile - (string) file of CA certificates in PEM format, the file can contain several CA certificates (or '') # $CApath - (string) directory containing CA certificates in PEM format (or '') # # returns: 1 on success, 0 on failure (check the error stack to find out the reason) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html|http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html> =item * CTX_need_tmp_RSA Return the result of C<SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)> my $rv = Net::SSLeay::CTX_need_tmp_RSA($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: result of SSL_CTRL_NEED_TMP_RSA command Not available with OpenSSL 1.1 and later. =item * CTX_new The same as L</CTX_v23_new> my $rv = Net::SSLeay::CTX_new(); # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html> Not available with OpenSSL 1.1 and later. =item * CTX_v2_new Creates a new SSL_CTX object - based on SSLv2_method() - as framework to establish TLS/SSL enabled connections. my $rv = Net::SSLeay::CTX_v2_new(); # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) =item * CTX_v23_new Creates a new SSL_CTX object - based on SSLv23_method() - as framework to establish TLS/SSL enabled connections. my $rv = Net::SSLeay::CTX_v23_new(); # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) =item * CTX_v3_new Creates a new SSL_CTX object - based on SSLv3_method() - as framework to establish TLS/SSL enabled connections. my $rv = Net::SSLeay::CTX_v3_new(); # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) =item * CTX_tlsv1_new Creates a new SSL_CTX object - based on TLSv1_method() - as framework to establish TLS/SSL enabled connections. my $rv = Net::SSLeay::CTX_tlsv1_new(); # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) =item * CTX_tlsv1_1_new Creates a new SSL_CTX object - based on TLSv1_1_method() - as framework to establish TLS/SSL enabled connections. Only available where supported by the underlying openssl. my $rv = Net::SSLeay::CTX_tlsv1_1_new(); # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) =item * CTX_tlsv1_2_new Creates a new SSL_CTX object - based on TLSv1_2_method() - as framework to establish TLS/SSL enabled connections. Only available where supported by the underlying openssl. my $rv = Net::SSLeay::CTX_tlsv1_2_new(); # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) =item * CTX_new_with_method Creates a new SSL_CTX object based on $meth method my $rv = Net::SSLeay::CTX_new_with_method($meth); # $meth - value corresponding to openssl's SSL_METHOD structure # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) #example my $ctx = Net::SSLeay::CTX_new_with_method(&Net::SSLeay::TLSv1_method); Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_new.html|http://www.openssl.org/docs/ssl/SSL_CTX_new.html> =item * CTX_set_min_proto_version, CTX_set_max_proto_version, set_min_proto_version and set_max_proto_version, B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0 or LibreSSL 2.6.0 Set the minimum and maximum supported protocol for $ctx or $ssl. my $rv = Net::SSLeay::CTX_set_min_proto_version($ctx, $version) # $ctx - value corresponding to openssl's SSL_CTX structure # $version - (integer) constat version value or 0 for automatic lowest or highest value # # returns: 1 on success, 0 on failure #example: allow only TLS 1.2 for a SSL_CTX my $rv_min = Net::SSLeay::CTX_set_min_proto_version($ctx, Net::SSLeay::TLS1_2_VERSION()); my $rv_max = Net::SSLeay::CTX_set_max_proto_version($ctx, Net::SSLeay::TLS1_2_VERSION()); #example: allow only TLS 1.1 for a SSL my $rv_min = Net::SSLeay::set_min_proto_version($ssl, Net::SSLeay::TLS1_1_VERSION()); my $rv_max = Net::SSLeay::set_max_proto_version($ssl, Net::SSLeay::TLS1_1_VERSION()); Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html> =item * CTX_get_min_proto_version, CTX_get_max_proto_version, get_min_proto_version and get_max_proto_version, B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0g Get the minimum and maximum supported protocol for $ctx or $ssl. my $version = Net::SSLeay::CTX_get_min_proto_version($ctx) # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: 0 automatic lowest or highest value, configured value otherwise Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html> =item * CTX_remove_session Removes the session $ses from the context $ctx. my $rv = Net::SSLeay::CTX_remove_session($ctx, $ses); # $ctx - value corresponding to openssl's SSL_CTX structure # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html|http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html> =item * CTX_sess_accept my $rv = Net::SSLeay::CTX_sess_accept($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of started SSL/TLS handshakes in server mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_accept_good my $rv = Net::SSLeay::CTX_sess_accept_good($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of successfully established SSL/TLS sessions in server mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_accept_renegotiate my $rv = Net::SSLeay::CTX_sess_accept_renegotiate($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of start renegotiations in server mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_cache_full my $rv = Net::SSLeay::CTX_sess_cache_full($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of sessions that were removed because the maximum session cache size was exceeded Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_cb_hits my $rv = Net::SSLeay::CTX_sess_cb_hits($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of successfully retrieved sessions from the external session cache in server mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_connect my $rv = Net::SSLeay::CTX_sess_connect($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of started SSL/TLS handshakes in client mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_connect_good my $rv = Net::SSLeay::CTX_sess_connect_good($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of successfully established SSL/TLS sessions in client mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_connect_renegotiate my $rv = Net::SSLeay::CTX_sess_connect_renegotiate($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of start renegotiations in client mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_get_cache_size Returns the currently valid session cache size. my $rv = Net::SSLeay::CTX_sess_get_cache_size($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: current size Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html> =item * CTX_sess_hits my $rv = Net::SSLeay::CTX_sess_hits($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of successfully reused sessions Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_misses my $rv = Net::SSLeay::CTX_sess_misses($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of sessions proposed by clients that were not found in the internal session cache in server mode Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_number my $rv = Net::SSLeay::CTX_sess_number($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: current number of sessions in the internal session cache Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_set_cache_size Sets the size of the internal session cache of context $ctx to $size. Net::SSLeay::CTX_sess_set_cache_size($ctx, $size); # $ctx - value corresponding to openssl's SSL_CTX structure # $size - cache size (0 = unlimited) # # returns: previously valid size Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html> =item * CTX_sess_timeouts Returns the number of sessions proposed by clients and either found in the internal or external session cache in server mode, but that were invalid due to timeout. These sessions are not included in the SSL_CTX_sess_hits count. my $rv = Net::SSLeay::CTX_sess_timeouts($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: number of sessions Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html|http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html> =item * CTX_sess_set_new_cb B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before Sets the callback function, which is automatically called whenever a new session was negotiated. Net::SSLeay::CTX_sess_set_new_cb($ctx, $func); # $ctx - value corresponding to openssl's SSL_CTX structure # $func - perl reference to callback function # # returns: no return value Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_new_cb.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_new_cb.html> =item * CTX_sess_set_remove_cb B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before Sets the callback function, which is automatically called whenever a session is removed by the SSL engine. Net::SSLeay::CTX_sess_set_remove_cb($ctx, $func); # $ctx - value corresponding to openssl's SSL_CTX structure # $func - perl reference to callback function # # returns: no return value Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_remove_cb.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_sess_set_remove_cb.html> =item * CTX_sessions Returns a pointer to the lhash databases containing the internal session cache for ctx. my $rv = Net::SSLeay::CTX_sessions($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: value corresponding to openssl's LHASH structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_sessions.html|http://www.openssl.org/docs/ssl/SSL_CTX_sessions.html> =item * CTX_set1_param Applies X509 verification parameters $vpm on $ctx my $rv = Net::SSLeay::CTX_set1_param($ctx, $vpm); # $ctx - value corresponding to openssl's SSL_CTX structure # $vpm - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: 1 on success, 0 on failure Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html|https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html> =item * CTX_set_cert_store Sets/replaces the certificate verification storage of $ctx to/with $store. Net::SSLeay::CTX_set_cert_store($ctx, $store); # $ctx - value corresponding to openssl's SSL_CTX structure # $store - value corresponding to openssl's X509_STORE structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html> =item * CTX_set_cert_verify_callback Sets the verification callback function for $ctx. SSL objects that are created from $ctx inherit the setting valid at the time when C<Net::SSLeay::new($ctx)> is called. Net::SSLeay::CTX_set_cert_verify_callback($ctx, $func, $data); # $ctx - value corresponding to openssl's SSL_CTX structure # $func - perl reference to callback function # $data - [optional] data that will be passed to callback function when invoked # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_verify_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_verify_callback.html> =item * CTX_set_cipher_list Sets the list of available ciphers for $ctx using the control string $str. The list of ciphers is inherited by all ssl objects created from $ctx. my $rv = Net::SSLeay::CTX_set_cipher_list($s, $str); # $s - value corresponding to openssl's SSL_CTX structure # $str - (string) cipher list e.g. '3DES:+RSA' # # returns: 1 if any cipher could be selected and 0 on complete failure The format of $str is described in L<http://www.openssl.org/docs/apps/ciphers.html|http://www.openssl.org/docs/apps/ciphers.html> Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html> =item * CTX_set_ciphersuites B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Configure the available TLSv1.3 ciphersuites. my $rv = Net::SSLeay::CTX_set_ciphersuites($ctx, $str); # $ctx - value corresponding to openssl's SSL_CTX structure # $str - colon (":") separated list of TLSv1.3 ciphersuite names in order of preference # # returns: (integer) 1 if the requested ciphersuite list was configured, and 0 otherwise Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_ciphersuites.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_ciphersuites.html> =item * CTX_set_client_CA_list Sets the list of CAs sent to the client when requesting a client certificate for $ctx. Net::SSLeay::CTX_set_client_CA_list($ctx, $list); # $ctx - value corresponding to openssl's SSL_CTX structure # $list - value corresponding to openssl's X509_NAME_STACK structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html> =item * CTX_set_default_passwd_cb Sets the default password callback called when loading/storing a PEM certificate with encryption. Net::SSLeay::CTX_set_default_passwd_cb($ctx, $func); # $ctx - value corresponding to openssl's SSL_CTX structure # $func - perl reference to callback function # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html> =item * CTX_set_default_passwd_cb_userdata Sets a pointer to userdata which will be provided to the password callback on invocation. Net::SSLeay::CTX_set_default_passwd_cb_userdata($ctx, $userdata); # $ctx - value corresponding to openssl's SSL_CTX structure # $userdata - data that will be passed to callback function when invoked # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html> =item * CTX_set_default_verify_paths ??? (more info needed) my $rv = Net::SSLeay::CTX_set_default_verify_paths($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: 1 on success, 0 on failure =item * CTX_set_ex_data Is used to store application data at $data for $idx into the $ctx object. my $rv = Net::SSLeay::CTX_set_ex_data($ssl, $idx, $data); # $ssl - value corresponding to openssl's SSL_CTX structure # $idx - (integer) ??? # $data - (pointer) ??? # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html> =item * CTX_set_purpose my $rv = Net::SSLeay::CTX_set_purpose($s, $purpose); # $s - value corresponding to openssl's SSL_CTX structure # $purpose - (integer) purpose identifier # # returns: 1 on success, 0 on failure #avainable purpose identifier 1 - X509_PURPOSE_SSL_CLIENT 2 - X509_PURPOSE_SSL_SERVER 3 - X509_PURPOSE_NS_SSL_SERVER 4 - X509_PURPOSE_SMIME_SIGN 5 - X509_PURPOSE_SMIME_ENCRYPT 6 - X509_PURPOSE_CRL_SIGN 7 - X509_PURPOSE_ANY 8 - X509_PURPOSE_OCSP_HELPER 9 - X509_PURPOSE_TIMESTAMP_SIGN #or use corresponding constants $purpose = &Net::SSLeay::X509_PURPOSE_SSL_CLIENT; ... $purpose = &Net::SSLeay::X509_PURPOSE_TIMESTAMP_SIGN; =item * CTX_set_quiet_shutdown Sets the 'quiet shutdown' flag for $ctx to be mode. SSL objects created from $ctx inherit the mode valid at the time C<Net::SSLeay::new($ctx)> is called. Net::SSLeay::CTX_set_quiet_shutdown($ctx, $mode); # $ctx - value corresponding to openssl's SSL_CTX structure # $mode - 0 or 1 # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html> =item * CTX_set_read_ahead my $rv = Net::SSLeay::CTX_set_read_ahead($ctx, $val); # $ctx - value corresponding to openssl's SSL_CTX structure # $val - read_ahead value to be set # # returns: the original read_ahead value =item * CTX_set_session_id_context Sets the context $sid_ctx of length $sid_ctx_len within which a session can be reused for the $ctx object. my $rv = Net::SSLeay::CTX_set_session_id_context($ctx, $sid_ctx, $sid_ctx_len); # $ctx - value corresponding to openssl's SSL_CTX structure # $sid_ctx - data buffer # $sid_ctx_len - length of data in $sid_ctx # # returns: 1 on success, 0 on failure (the error is logged to the error stack) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html> =item * CTX_set_ssl_version Sets a new default TLS/SSL method for SSL objects newly created from this $ctx. SSL objects already created with C<Net::SSLeay::new($ctx)> are not affected, except when C<Net::SSLeay:clear($ssl)> is being called. my $rv = Net::SSLeay::CTX_set_ssl_version($ctx, $meth); # $ctx - value corresponding to openssl's SSL_CTX structure # $meth - value corresponding to openssl's SSL_METHOD structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html> =item * CTX_set_timeout Sets the timeout for newly created sessions for $ctx to $t. The timeout value $t must be given in seconds. my $rv = Net::SSLeay::CTX_set_timeout($ctx, $t); # $ctx - value corresponding to openssl's SSL_CTX structure # $t - timeout in seconds # # returns: previously set timeout value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html> =item * CTX_set_tmp_dh Sets DH parameters to be used to be $dh. The key is inherited by all ssl objects created from $ctx. my $rv = Net::SSLeay::CTX_set_tmp_dh($ctx, $dh); # $ctx - value corresponding to openssl's SSL_CTX structure # $dh - value corresponding to openssl's DH structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html> =item * CTX_set_tmp_dh_callback Sets the callback function for $ctx to be used when a DH parameters are required to $tmp_dh_callback. Net::SSLeay::CTX_set_tmp_dh_callback($ctx, $tmp_dh_callback); # $ctx - value corresponding to openssl's SSL_CTX structure # tmp_dh_callback - (function pointer) ??? # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html> =item * CTX_set_tmp_rsa Sets the temporary/ephemeral RSA key to be used to be $rsa. my $rv = Net::SSLeay::CTX_set_tmp_rsa($ctx, $rsa); # $ctx - value corresponding to openssl's SSL_CTX structure # $rsa - value corresponding to openssl's RSA structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html> Not available with OpenSSL 1.1 and later. =item * CTX_set_tmp_rsa_callback Sets the callback function for ctx to be used when a temporary/ephemeral RSA key is required to $tmp_rsa_callback. ??? (does this function really work?) Net::SSLeay::CTX_set_tmp_rsa_callback($ctx, $tmp_rsa_callback); # $ctx - value corresponding to openssl's SSL_CTX structure # $tmp_rsa_callback - (function pointer) ??? # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html> Not available with OpenSSL 1.1 and later. =item * CTX_set_trust my $rv = Net::SSLeay::CTX_set_trust($s, $trust); # $s - value corresponding to openssl's SSL_CTX structure # $trust - (integer) trust identifier # # returns: the original value #available trust identifiers 1 - X509_TRUST_COMPAT 2 - X509_TRUST_SSL_CLIENT 3 - X509_TRUST_SSL_SERVER 4 - X509_TRUST_EMAIL 5 - X509_TRUST_OBJECT_SIGN 6 - X509_TRUST_OCSP_SIGN 7 - X509_TRUST_OCSP_REQUEST 8 - X509_TRUST_TSA #or use corresponding constants $trust = &Net::SSLeay::X509_TRUST_COMPAT; ... $trust = &Net::SSLeay::X509_TRUST_TSA; =item * CTX_set_verify_depth Sets the maximum depth for the certificate chain verification that shall be allowed for ctx. Net::SSLeay::CTX_set_verify_depth($ctx, $depth); # $ctx - value corresponding to openssl's SSL_CTX structure # $depth - max. depth # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html> =item * CTX_use_PKCS12_file Adds the certificate and private key from PKCS12 file $p12filename to $ctx. my $rv = Net::SSLeay::CTX_use_PKCS12_file($ctx, $p12filename, $password); # $ctx - value corresponding to openssl's SSL_CTX structure # $p12filename - (string) filename # $password - (string) password to decrypt private key # # returns: 1 on success, 0 on failure =item * CTX_use_PrivateKey Adds the private key $pkey to $ctx. my $rv = Net::SSLeay::CTX_use_PrivateKey($ctx, $pkey); # $ctx - value corresponding to openssl's SSL_CTX structure # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * CTX_use_PrivateKey_file Adds the first private key found in $file to $ctx. my $rv = Net::SSLeay::CTX_use_PrivateKey_file($ctx, $file, $type); # $ctx - value corresponding to openssl's SSL_CTX structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * CTX_use_RSAPrivateKey Adds the RSA private key $rsa to $ctx. my $rv = Net::SSLeay::CTX_use_RSAPrivateKey($ctx, $rsa); # $ctx - value corresponding to openssl's SSL_CTX structure # $rsa - value corresponding to openssl's RSA structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * CTX_use_RSAPrivateKey_file Adds the first RSA private key found in $file to $ctx. my $rv = Net::SSLeay::CTX_use_RSAPrivateKey_file($ctx, $file, $type); # $ctx - value corresponding to openssl's SSL_CTX structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, otherwise check out the error stack to find out the reason =item * CTX_use_certificate Loads the certificate $x into $ctx my $rv = Net::SSLeay::CTX_use_certificate($ctx, $x); # $ctx - value corresponding to openssl's SSL_CTX structure # $x - value corresponding to openssl's X509 structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * CTX_use_certificate_chain_file Loads a certificate chain from $file into $ctx. The certificates must be in PEM format and must be sorted starting with the subject's certificate (actual client or server certificate), followed by intermediate CA certificates if applicable, and ending at the highest level (root) CA. my $rv = Net::SSLeay::CTX_use_certificate_chain_file($ctx, $file); # $ctx - value corresponding to openssl's SSL_CTX structure # $file - (string) file name # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * CTX_use_certificate_file Loads the first certificate stored in $file into $ctx. my $rv = Net::SSLeay::CTX_use_certificate_file($ctx, $file, $type); # $ctx - value corresponding to openssl's SSL_CTX structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * CTX_get_security_level B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL Returns the security level associated with $ctx. my $level = Net::SSLeay::CTX_get_security_level($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: (integer) current security level Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_security_level.html> =item * CTX_set_security_level B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL Sets the security level associated with $ctx to $level. Net::SSLeay::CTX_set_security_level($ctx, $level); # $ssl - value corresponding to openssl's SSL_CTX structure # $level - new security level # # returns: no return value Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_security_level.html> =item * CTX_set_num_tickets B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Set number of TLSv1.3 session tickets that will be sent to a client. my $rv = Net::SSLeay::CTX_set_num_tickets($ctx, $number_of_tickets); # $ctx - value corresponding to openssl's SSL_CTX structure # $number_of_tickets - number of tickets to send # # returns: 1 on success, 0 on failure Set to zero if you do not no want to support a session resumption. Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_num_tickets.html> =item * CTX_get_num_tickets B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Get number of TLSv1.3 session tickets that will be sent to a client. my $number_of_tickets = Net::SSLeay::CTX_get_num_tickets($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: (integer) number of tickets to send Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_num_tickets.html> =back =head3 Low level API: SSL_* related functions B<NOTE:> Please note that the function described in this chapter have "SSL_" part stripped from their original openssl names. =over =item * new Creates a new SSL structure which is needed to hold the data for a TLS/SSL connection. The new structure inherits the settings of the underlying context $ctx: connection method (SSLv2/v3/TLSv1), options, verification settings, timeout settings. my $rv = Net::SSLeay::new($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: value corresponding to openssl's SSL structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_new.html|http://www.openssl.org/docs/ssl/SSL_new.html> =item * accept Waits for a TLS/SSL client to initiate the TLS/SSL handshake. The communication channel must already have been set and assigned to the ssl by setting an underlying BIO. my $rv = Net::SSLeay::accept($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_accept.html|http://www.openssl.org/docs/ssl/SSL_accept.html> =item * add_client_CA Adds the CA name extracted from cacert to the list of CAs sent to the client when requesting a client certificate for the chosen ssl, overriding the setting valid for ssl's SSL_CTX object. my $rv = Net::SSLeay::add_client_CA($ssl, $x); # $ssl - value corresponding to openssl's SSL structure # $x - value corresponding to openssl's X509 structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html> =item * callback_ctrl ??? (more info needed) my $rv = Net::SSLeay::callback_ctrl($ssl, $cmd, $fp); # $ssl - value corresponding to openssl's SSL structure # $cmd - (integer) command id # $fp - (function pointer) ??? # # returns: ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html> =item * check_private_key Checks the consistency of a private key with the corresponding certificate loaded into $ssl my $rv = Net::SSLeay::check_private_key($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * clear Reset SSL object to allow another connection. Net::SSLeay::clear($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_clear.html|http://www.openssl.org/docs/ssl/SSL_clear.html> =item * connect Initiate the TLS/SSL handshake with an TLS/SSL server. my $rv = Net::SSLeay::connect($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_connect.html|http://www.openssl.org/docs/ssl/SSL_connect.html> =item * copy_session_id Copies the session structure fro $from to $to (+ also the private key and certificate associated with $from). Net::SSLeay::copy_session_id($to, $from); # $to - value corresponding to openssl's SSL structure # $from - value corresponding to openssl's SSL structure # # returns: no return value =item * ctrl Internal handling function for SSL objects. B<BEWARE:> openssl doc says: This function should never be called directly! my $rv = Net::SSLeay::ctrl($ssl, $cmd, $larg, $parg); # $ssl - value corresponding to openssl's SSL structure # $cmd - (integer) command id # $larg - (integer) long ??? # $parg - (string/pointer) ??? # # returns: (long) result of given command ??? For more details about valid $cmd values check L</CTX_ctrl>. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html|http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html> =item * do_handshake Will wait for a SSL/TLS handshake to take place. If the connection is in client mode, the handshake will be started. The handshake routines may have to be explicitly set in advance using either SSL_set_connect_state or SSL_set_accept_state(3). my $rv = Net::SSLeay::do_handshake($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_do_handshake.html|http://www.openssl.org/docs/ssl/SSL_do_handshake.html> =item * dup Returns a duplicate of $ssl. my $rv = Net::SSLeay::dup($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's SSL structure (0 on failure) =item * free Free an allocated SSL structure. Net::SSLeay::free($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_free.html|http://www.openssl.org/docs/ssl/SSL_free.html> =item * get0_param B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Returns the current verification parameters. my $vpm = Net::SSLeay::get0_param($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's X509_VERIFY_PARAM structure Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html|https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html> =item * get_SSL_CTX Returns a pointer to the SSL_CTX object, from which $ssl was created with Net::SSLeay::new. my $rv = Net::SSLeay::get_SSL_CTX($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's SSL_CTX structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_SSL_CTX.html|http://www.openssl.org/docs/ssl/SSL_get_SSL_CTX.html> =item * set_SSL_CTX Sets the SSL_CTX the corresponds to an SSL session. my $the_ssl_ctx = Net::SSLeay::set_SSL_CTX($ssl, $ssl_ctx); # $ssl - value corresponding to openssl's SSL structure # $ssl_ctx - Change the ssl object to the given ssl_ctx # # returns - the ssl_ctx =item * get_app_data Can be used to get application defined value/data. my $rv = Net::SSLeay::get_app_data($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: string/buffer/pointer ??? =item * set_app_data Can be used to set some application defined value/data. my $rv = Net::SSLeay::set_app_data($ssl, $arg); # $ssl - value corresponding to openssl's SSL structure # $arg - (string/buffer/pointer ???) data # # returns: ??? =item * get_certificate Gets X509 certificate from an established SSL connection. my $rv = Net::SSLeay::get_certificate($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's X509 structure (0 on failure) =item * get_cipher Obtains the name of the currently used cipher. my $rv = Net::SSLeay::get_cipher($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (string) cipher name e.g. 'DHE-RSA-AES256-SHA' or '', when no session has been established. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html|http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html> =item * get_cipher_bits Obtain the number of secret/algorithm bits used. my $rv = Net::SSLeay::get_cipher_bits($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: number of secret bits used by current cipher Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html|http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html> and L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html> =item * get_cipher_list Returns the name (string) of the SSL_CIPHER listed for $ssl with priority $n. my $rv = Net::SSLeay::get_cipher_list($ssl, $n); # $ssl - value corresponding to openssl's SSL structure # $n - (integer) priority # # returns: (string) cipher name e.g. 'EDH-DSS-DES-CBC3-SHA' or '' in case of error Call Net::SSLeay::get_cipher_list with priority starting from 0 to obtain the sorted list of available ciphers, until '' is returned: my $priority = 0; while (my $c = Net::SSLeay::get_cipher_list($ssl, $priority)) { print "cipher[$priority] = $c\n"; $priority++; } Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ciphers.html|http://www.openssl.org/docs/ssl/SSL_get_ciphers.html> =item * get_client_CA_list Returns the list of client CAs explicitly set for $ssl using C<Net::SSleay::set_client_CA_list> or $ssl's SSL_CTX object with C<Net::SSLeay::CTX_set_client_CA_list>, when in server mode. In client mode, returns the list of client CAs sent from the server, if any. my $rv = Net::SSLeay::get_client_CA_list($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's STACK_OF(X509_NAME) structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html> =item * get_current_cipher Returns the cipher actually used. my $rv = Net::SSLeay::get_current_cipher($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's SSL_CIPHER structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html|http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html> =item * get_default_timeout Returns the default timeout value assigned to SSL_SESSION objects negotiated for the protocol valid for $ssl. my $rv = Net::SSLeay::get_default_timeout($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (long) timeout in seconds Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_default_timeout.html|http://www.openssl.org/docs/ssl/SSL_get_default_timeout.html> =item * get_error Returns a result code for a preceding call to C<connect>, C<accept>, C<do_handshake>, C<read>, C<peek> or C<write> on $ssl. my $rv = Net::SSLeay::get_error($ssl, $ret); # $ssl - value corresponding to openssl's SSL structure # $ret - return value of preceding TLS/SSL I/O operation # # returns: result code, which is one of the following values: # 0 - SSL_ERROR_NONE # 1 - SSL_ERROR_SSL # 2 - SSL_ERROR_WANT_READ # 3 - SSL_ERROR_WANT_WRITE # 4 - SSL_ERROR_WANT_X509_LOOKUP # 5 - SSL_ERROR_SYSCALL # 6 - SSL_ERROR_ZERO_RETURN # 7 - SSL_ERROR_WANT_CONNECT # 8 - SSL_ERROR_WANT_ACCEPT Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_error.html|http://www.openssl.org/docs/ssl/SSL_get_error.html> =item * get_ex_data Is used to retrieve the information for $idx from $ssl. my $rv = Net::SSLeay::get_ex_data($ssl, $idx); # $ssl - value corresponding to openssl's SSL structure # $idx - (integer) index for application specific data # # returns: pointer to ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html> =item * set_ex_data Is used to store application data at $data for $idx into the $ssl object. my $rv = Net::SSLeay::set_ex_data($ssl, $idx, $data); # $ssl - value corresponding to openssl's SSL structure # $idx - (integer) ??? # $data - (pointer) ??? # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html> =item * get_ex_new_index Is used to register a new index for application specific data. my $rv = Net::SSLeay::get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func); # $argl - (long) ??? # $argp - (pointer) ??? # $new_func - function pointer ??? (CRYPTO_EX_new *) # $dup_func - function pointer ??? (CRYPTO_EX_dup *) # $free_func - function pointer ??? (CRYPTO_EX_free *) # # returns: (integer) ??? Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html|http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html> =item * get_fd Returns the file descriptor which is linked to $ssl. my $rv = Net::SSLeay::get_fd($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: file descriptor (>=0) or -1 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_fd.html|http://www.openssl.org/docs/ssl/SSL_get_fd.html> =item * get_finished Obtains the latest 'Finished' message sent to the peer. Return value is zero if there's been no Finished message yet. Default count is 2*EVP_MAX_MD_SIZE that is long enough for all possible Finish messages. If you supply a non-default count, the resulting return value may be longer than returned buf's length. my $rv = Net::SSLeay::get_finished($ssl, $buf, $count); # $ssl - value corresponding to openssl's SSL structure # $buf - buffer where the returned data will be stored # $count - [optional] max size of return data - default is 2*EVP_MAX_MD_SIZE # # returns: length of latest Finished message =item * get_peer_finished Obtains the latest 'Finished' message expected from the peer. Parameters and return value are similar to get_finished(). my $rv = Net::SSLeay::get_peer_finished($ssl, $buf, $count); # $ssl - value corresponding to openssl's SSL structure # $buf - buffer where the returned data will be stored # $count - [optional] max size of return data - default is 2*EVP_MAX_MD_SIZE # # returns: length of latest Finished message =item * get_keyblock_size Gets the length of the TLS keyblock. B<NOTE:> Does not exactly correspond to any low level API function. my $rv = Net::SSLeay::get_keyblock_size($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: keyblock size, -1 on error =item * get_mode Returns the mode (bitmask) set for $ssl. my $rv = Net::SSLeay::get_mode($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: mode (bitmask) To decode the return value (bitmask) see documentation for L</CTX_get_mode>. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html> =item * set_mode Adds the mode set via bitmask in $mode to $ssl. Options already set before are not cleared. my $rv = Net::SSLeay::set_mode($ssl, $mode); # $ssl - value corresponding to openssl's SSL structure # $mode - mode (bitmask) # # returns: the new mode bitmask after adding $mode For $mode bitmask details see L</CTX_get_mode>. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html> =item * get_options Returns the options (bitmask) set for $ssl. my $rv = Net::SSLeay::get_options($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: options (bitmask) To decode the return value (bitmask) see documentation for L</CTX_get_options>. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html> =item * set_options Adds the options set via bitmask in $options to $ssl. Options already set before are not cleared! Net::SSLeay::set_options($ssl, $options); # $ssl - value corresponding to openssl's SSL structure # $options - options (bitmask) # # returns: the new options bitmask after adding $options For $options bitmask details see L</CTX_get_options>. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html> =item * get_peer_certificate Get the X509 certificate of the peer. my $rv = Net::SSLeay::get_peer_certificate($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's X509 structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html|http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html> =item * get_peer_cert_chain Get the certificate chain of the peer as an array of X509 structures. my @rv = Net::SSLeay::get_peer_cert_chain($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: list of X509 structures Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html|http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html> =item * get_quiet_shutdown Returns the 'quiet shutdown' setting of ssl. my $rv = Net::SSLeay::get_quiet_shutdown($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) current 'quiet shutdown' value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html> =item * get_rbio Get 'read' BIO linked to an SSL object $ssl. my $rv = Net::SSLeay::get_rbio($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's BIO structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_rbio.html|http://www.openssl.org/docs/ssl/SSL_get_rbio.html> =item * get_read_ahead my $rv = Net::SSLeay::get_read_ahead($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) read_ahead value =item * set_read_ahead Net::SSLeay::set_read_ahead($ssl, $val); # $ssl - value corresponding to openssl's SSL structure # $val - read_ahead value to be set # # returns: the original read_ahead value =item * get_security_level B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL Returns the security level associated with $ssl. my $level = Net::SSLeay::get_security_level($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) current security level Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_get_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_get_security_level.html> =item * set_security_level B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL Sets the security level associated with $ssl to $level. Net::SSLeay::set_security_level($ssl, $level); # $ssl - value corresponding to openssl's SSL structure # $level - new security level # # returns: no return value Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_security_level.html|https://www.openssl.org/docs/manmaster/man3/SSL_set_security_level.html> =item * set_num_tickets B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Set number of TLSv1.3 session tickets that will be sent to a client. my $rv = Net::SSLeay::set_num_tickets($ssl, $number_of_tickets); # $ssl - value corresponding to openssl's SSL structure # $number_of_tickets - number of tickets to send # # returns: 1 on success, 0 on failure Set to zero if you do not no want to support a session resumption. Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_set_num_tickets.html> =item * get_num_tickets B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Get number of TLSv1.3 session tickets that will be sent to a client. my $number_of_tickets = Net::SSLeay::get_num_tickets($ctx); # $ctx - value corresponding to openssl's SSL structure # # returns: number of tickets to send Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_get_num_tickets.html|https://www.openssl.org/docs/manmaster/man3/SSL_get_num_tickets.html> =item * get_server_random Returns internal SSLv3 server_random value. Net::SSLeay::get_server_random($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: server_random value (binary data) =item * get_client_random B<NOTE:> Does not exactly correspond to any low level API function Returns internal SSLv3 client_random value. Net::SSLeay::get_client_random($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: client_random value (binary data) =item * export_keying_material Returns keying material based on the string $label and optional $context. Note that with TLSv1.2 and lower, empty context (empty string) and undefined context (no value or 'undef') will return different values. my $out = Net::SSLeay::export_keying_material($ssl, $olen, $label, $context); # $ssl - value corresponding to openssl's SSL structure # $olen - number of bytes to return # $label - application specific label # $context - [optional] context - default is undef for no context # # returns: keying material (binary data) or undef on error Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_export_keying_material.html|https://www.openssl.org/docs/manmaster/man3/SSL_export_keying_material.html> =item * get_session Retrieve TLS/SSL session data used in $ssl. The reference count of the SSL_SESSION is NOT incremented. my $rv = Net::SSLeay::get_session($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's SSL_SESSION structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_session.html|http://www.openssl.org/docs/ssl/SSL_get_session.html> =item * SSL_get0_session The alias for L</get_session> (note that the name is C<SSL_get0_session> NOT C<get0_session>). my $rv = Net::SSLeay::SSL_get0_session(); =item * get1_session Returns a pointer to the SSL_SESSION actually used in $ssl. The reference count of the SSL_SESSION is incremented by 1. my $rv = Net::SSLeay::get1_session($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's SSL_SESSION structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_session.html|http://www.openssl.org/docs/ssl/SSL_get_session.html> =item * get_shared_ciphers Returns string with a list (colon ':' separated) of ciphers shared between client and server within SSL session $ssl. my $rv = Net::SSLeay::get_shared_ciphers() # # returns: string like 'ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:...' =item * get_shutdown Returns the shutdown mode of $ssl. my $rv = Net::SSLeay::get_shutdown($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: shutdown mode (bitmask) of ssl #to decode the return value (bitmask) use: 0 - No shutdown setting, yet 1 - SSL_SENT_SHUTDOWN 2 - SSL_RECEIVED_SHUTDOWN Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_shutdown.html|http://www.openssl.org/docs/ssl/SSL_set_shutdown.html> =item * get_ssl_method Returns a function pointer to the TLS/SSL method set in $ssl. my $rv = Net::SSLeay::get_ssl_method($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html> =item * in_init, in_before, is_init_finished, in_connect_init, in_accept_init B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before. Retrieve information about the handshake state machine. All functions take $ssl as the only argument and return 0 or 1. These functions are recommended over get_state() and state(). my $rv = Net::SSLeay::is_init_finished($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: All functions return 1 or 0 Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_in_init.html|http://www.openssl.org/docs/ssl/SSL_in_init.html> =item * get_state B<COMPATIBILITY:> OpenSSL 1.1.0 and later use different constants which are not made available. Use is_init_finished() and related functions instead. Returns the SSL connection state. my $rv = Net::SSLeay::get_state($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) state value # to decode the returned state check: # SSL_ST_* constants in openssl/ssl.h # SSL2_ST_* constants in openssl/ssl2.h # SSL23_ST_* constants in openssl/ssl23.h # SSL3_ST_* + DTLS1_ST_* constants in openssl/ssl3.h =item * state Exactly the same as L</get_state>. my $rv = Net::SSLeay::state($ssl); =item * set_state Sets the SSL connection state. Net::SSLeay::set_state($ssl,Net::SSLeay::SSL_ST_ACCEPT()); Not available with OpenSSL 1.1 and later. =item * get_verify_depth Returns the verification depth limit currently set in $ssl. my $rv = Net::SSLeay::get_verify_depth($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: current depth or -1 if no limit has been explicitly set Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html> =item * set_verify_depth Sets the maximum depth for the certificate chain verification that shall be allowed for $ssl. Net::SSLeay::set_verify_depth($ssl, $depth); # $ssl - value corresponding to openssl's SSL structure # $depth - (integer) depth # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html> =item * get_verify_mode Returns the verification mode (bitmask) currently set in $ssl. my $rv = Net::SSLeay::get_verify_mode($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: mode (bitmask) To decode the return value (bitmask) see documentation for L</CTX_get_verify_mode>. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html|http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html> =item * set_verify Sets the verification flags for $ssl to be $mode and specifies the $verify_callback function to be used. Net::SSLeay::set_verify($ssl, $mode, $callback); # $ssl - value corresponding to openssl's SSL structure # $mode - mode (bitmask) # $callback - [optional] reference to perl callback function # # returns: no return value For $mode bitmask details see L</CTX_get_verify_mode>. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html> =item * set_post_handshake_auth B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Enable the Post-Handshake Authentication extension to be added to the ClientHello such that post-handshake authentication can be requested by the server. Net::SSLeay::set_posthandshake_auth($ssl, $val); # $ssl - value corresponding to openssl's SSL structure # $val - 0 then the extension is not sent, otherwise it is # # returns: no return value Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_post_handshake_auth|https://www.openssl.org/docs/manmaster/man3/SSL_set_post_handshake_auth.html> =item * verify_client_post_handshake B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL verify_client_post_handshake causes a CertificateRequest message to be sent by a server on the given ssl connection. my $rv = Net::SSLeay::verify_client_post_handshake($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 1 if the request succeeded, and 0 if the request failed. The error stack can be examined to determine the failure reason. Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_verify_client_post_handshake.html|https://www.openssl.org/docs/manmaster/man3/SSL_verify_client_post_handshake.html> =item * get_verify_result Returns the result of the verification of the X509 certificate presented by the peer, if any. my $rv = Net::SSLeay::get_verify_result($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) # 0 - X509_V_OK: ok # 2 - X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate # 3 - X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL # 4 - X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature # 5 - X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature # 6 - X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key # 7 - X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure # 8 - X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure # 9 - X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid # 10 - X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired # 11 - X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid # 12 - X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired # 13 - X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field # 14 - X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field # 15 - X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field # 16 - X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field # 17 - X509_V_ERR_OUT_OF_MEM: out of memory # 18 - X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate # 19 - X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain # 20 - X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate # 21 - X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate # 22 - X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long # 23 - X509_V_ERR_CERT_REVOKED: certificate revoked # 24 - X509_V_ERR_INVALID_CA: invalid CA certificate # 25 - X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded # 26 - X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose # 27 - X509_V_ERR_CERT_UNTRUSTED: certificate not trusted # 28 - X509_V_ERR_CERT_REJECTED: certificate rejected # 29 - X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch # 30 - X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch # 31 - X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch # 32 - X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing # 50 - X509_V_ERR_APPLICATION_VERIFICATION: application verification failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_verify_result.html|http://www.openssl.org/docs/ssl/SSL_get_verify_result.html> =item * set_verify_result Override result of peer certificate verification. Net::SSLeay::set_verify_result($ssl, $v); # $ssl - value corresponding to openssl's SSL structure # $v - (integer) result value # # returns: no return value For more info about valid return values see L</get_verify_result> Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_verify_result.html|http://www.openssl.org/docs/ssl/SSL_set_verify_result.html> =item * get_wbio Get 'write' BIO linked to an SSL object $ssl. my $rv = Net::SSLeay::get_wbio($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: value corresponding to openssl's BIO structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_get_rbio.html|http://www.openssl.org/docs/ssl/SSL_get_rbio.html> =item * load_client_CA_file Load X509 certificates from file (PEM formatted). my $rv = Net::SSLeay::load_client_CA_file($file); # $file - (string) file name # # returns: value corresponding to openssl's STACK_OF(X509_NAME) structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_load_client_CA_file.html|http://www.openssl.org/docs/ssl/SSL_load_client_CA_file.html> =item * clear_num_renegotiations Executes SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS command on $ssl. my $rv = Net::SSLeay::clear_num_renegotiations($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: command result =item * need_tmp_RSA Executes SSL_CTRL_NEED_TMP_RSA command on $ssl. my $rv = Net::SSLeay::need_tmp_RSA($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: command result Not available with OpenSSL 1.1 and later. =item * num_renegotiations Executes SSL_CTRL_GET_NUM_RENEGOTIATIONS command on $ssl. my $rv = Net::SSLeay::num_renegotiations($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: command result =item * total_renegotiations Executes SSL_CTRL_GET_TOTAL_RENEGOTIATIONS command on $ssl. my $rv = Net::SSLeay::total_renegotiations($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: command result =item * peek Copies $max bytes from the specified $ssl into the returned value. In contrast to the C<Net::SSLeay::read()> function, the data in the SSL buffer is unmodified after the SSL_peek() operation. Net::SSLeay::peek($ssl, $max); # $ssl - value corresponding to openssl's SSL structure # $max - [optional] max bytes to peek (integer) - default is 32768 # # in scalar context: data read from the TLS/SSL connection, undef on error # in list context: two-item array consisting of data read (undef on error), # and return code from SSL_peek(). =item * peek_ex B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Copies $max bytes from the specified $ssl into the returned value. In contrast to the C<Net::SSLeay::read_ex()> function, the data in the SSL buffer is unmodified after the SSL_peek_ex() operation. my($got, $rv) = Net::SSLeay::peek_ex($ssl, $max); # $ssl - value corresponding to openssl's SSL structure # $max - [optional] max bytes to peek (integer) - default is 32768 # # returns a list: two-item list consisting of data read (undef on error), # and return code from SSL_peek_ex(). Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_peek_ex.html|https://www.openssl.org/docs/manmaster/man3/SSL_peek_ex.html> =item * pending Obtain number of readable bytes buffered in $ssl object. my $rv = Net::SSLeay::pending($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: the number of bytes pending Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_pending.html|http://www.openssl.org/docs/ssl/SSL_pending.html> =item * has_pending B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL Returns 1 if $ssl has buffered data (whether processed or unprocessed) and 0 otherwise. my $rv = Net::SSLeay::has_pending($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) 1 or 0 Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_has_pending.html|https://www.openssl.org/docs/manmaster/man3/SSL_has_pending.html> =item * read Tries to read $max bytes from the specified $ssl. my $got = Net::SSLeay::read($ssl, $max); my($got, $rv) = Net::SSLeay::read($ssl, $max); # $ssl - value corresponding to openssl's SSL structure # $max - [optional] max bytes to read (integer) - default is 32768 # # returns: # in scalar context: data read from the TLS/SSL connection, undef on error # in list context: two-item array consisting of data read (undef on error), # and return code from SSL_read(). Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_read.html|http://www.openssl.org/docs/ssl/SSL_read.html> =item * read_ex B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Tries to read $max bytes from the specified $ssl. my($got, $rv) = Net::SSLeay::read_ex($ssl, $max); # $ssl - value corresponding to openssl's SSL structure # $max - [optional] max bytes to read (integer) - default is 32768 # # returns a list: two-item list consisting of data read (undef on error), # and return code from SSL_read_ex(). Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_read_ex.html|https://www.openssl.org/docs/manmaster/man3/SSL_read_ex.html> =item * renegotiate Turn on flags for renegotiation so that renegotiation will happen my $rv = Net::SSLeay::renegotiate($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 1 on success, 0 on failure =item * rstate_string Returns a 2 letter string indicating the current read state of the SSL object $ssl. my $rv = Net::SSLeay::rstate_string($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 2-letter string Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_rstate_string.html|http://www.openssl.org/docs/ssl/SSL_rstate_string.html> =item * rstate_string_long Returns a string indicating the current read state of the SSL object ssl. my $rv = Net::SSLeay::rstate_string_long($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: string with current state Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_rstate_string.html|http://www.openssl.org/docs/ssl/SSL_rstate_string.html> =item * session_reused Query whether a reused session was negotiated during handshake. my $rv = Net::SSLeay::session_reused($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 0 - new session was negotiated; 1 - session was reused. Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_session_reused.html|http://www.openssl.org/docs/ssl/SSL_session_reused.html> =item * set1_param Applies X509 verification parameters $vpm on $ssl my $rv = Net::SSLeay::set1_param($ssl, $vpm); # $ssl - value corresponding to openssl's SSL structure # $vpm - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: 1 on success, 0 on failure =item * set_accept_state Sets $ssl to work in server mode. Net::SSLeay::set_accept_state($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_connect_state.html|http://www.openssl.org/docs/ssl/SSL_set_connect_state.html> =item * set_bio Connects the BIOs $rbio and $wbio for the read and write operations of the TLS/SSL (encrypted) side of $ssl. Net::SSLeay::set_bio($ssl, $rbio, $wbio); # $ssl - value corresponding to openssl's SSL structure # $rbio - value corresponding to openssl's BIO structure # $wbio - value corresponding to openssl's BIO structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_bio.html|http://www.openssl.org/docs/ssl/SSL_set_bio.html> =item * set_cipher_list Sets the list of ciphers only for ssl. my $rv = Net::SSLeay::set_cipher_list($ssl, $str); # $ssl - value corresponding to openssl's SSL structure # $str - (string) cipher list e.g. '3DES:+RSA' # # returns: 1 if any cipher could be selected and 0 on complete failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html> =item * set_ciphersuites B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Configure the available TLSv1.3 ciphersuites. my $rv = Net::SSLeay::set_ciphersuites($ssl, $str); # $ssl - value corresponding to openssl's SSL structure # $str - colon (":") separated list of TLSv1.3 ciphersuite names in order of preference # # returns: (integer) 1 if the requested ciphersuite list was configured, and 0 otherwise Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_ciphersuites.html|https://www.openssl.org/docs/manmaster/man3/SSL_set_ciphersuites.html> =item * set_client_CA_list Sets the list of CAs sent to the client when requesting a client certificate for the chosen $ssl, overriding the setting valid for $ssl's SSL_CTX object. my $rv = Net::SSLeay::set_client_CA_list($ssl, $list); # $ssl - value corresponding to openssl's SSL structure # $list - value corresponding to openssl's STACK_OF(X509_NAME) structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html> =item * set_connect_state Sets $ssl to work in client mode. Net::SSLeay::set_connect_state($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_connect_state.html|http://www.openssl.org/docs/ssl/SSL_set_connect_state.html> =item * set_fd Sets the file descriptor $fd as the input/output facility for the TLS/SSL (encrypted) side of $ssl, $fd will typically be the socket file descriptor of a network connection. my $rv = Net::SSLeay::set_fd($ssl, $fd); # $ssl - value corresponding to openssl's SSL structure # $fd - (integer) file handle (got via perl's fileno) # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_fd.html|http://www.openssl.org/docs/ssl/SSL_set_fd.html> =item * set_psk_client_callback Sets the psk client callback. Net::SSLeay::set_psk_client_callback($ssl, sub { my $hint = shift; return ($identity, $key) } ); # $ssl - value corresponding to openssl's SSL structure # $hint - PSK identity hint send by the server # $identity - PSK identity # $key - PSK key, hex string without the leading '0x', e.g. 'deadbeef' # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_psk_client_callback.html|http://www.openssl.org/docs/ssl/SSL_set_psk_client_callback.html> =item * set_rfd Sets the file descriptor $fd as the input (read) facility for the TLS/SSL (encrypted) side of $ssl. my $rv = Net::SSLeay::set_rfd($ssl, $fd); # $ssl - value corresponding to openssl's SSL structure # $fd - (integer) file handle (got via perl's fileno) # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_fd.html|http://www.openssl.org/docs/ssl/SSL_set_fd.html> =item * set_wfd my $rv = Net::SSLeay::set_wfd($ssl, $fd); # $ssl - value corresponding to openssl's SSL structure # $fd - (integer) file handle (got via perl's fileno) # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_fd.html|http://www.openssl.org/docs/ssl/SSL_set_fd.html> =item * set_info_callback Sets the callback function, that can be used to obtain state information for $ssl during connection setup and use. When callback is undef, the callback setting currently valid for ctx is used. Net::SSLeay::set_info_callback($ssl, $cb, [$data]); # $ssl - value corresponding to openssl's SSL structure # $cb - sub { my ($ssl,$where,$ret,$data) = @_; ... } # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html> =item * CTX_set_info_callback Sets the callback function on ctx, that can be used to obtain state information during ssl connection setup and use. When callback is undef, an existing callback will be disabled. Net::SSLeay::CTX_set_info_callback($ssl, $cb, [$data]); # $ssl - value corresponding to openssl's SSL structure # $cb - sub { my ($ssl,$where,$ret,$data) = @_; ... } # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html> =item * set_pref_cipher Sets the list of available ciphers for $ssl using the control string $str. my $rv = Net::SSLeay::set_pref_cipher($ssl, $str); # $ssl - value corresponding to openssl's SSL structure # $str - (string) cipher list e.g. '3DES:+RSA' # # returns: 1 if any cipher could be selected and 0 on complete failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html> =item * CTX_set_psk_client_callback Sets the psk client callback. Net::SSLeay::CTX_set_psk_client_callback($ssl, sub { my $hint = shift; return ($identity, $key) } ); # $ssl - value corresponding to openssl's SSL structure # $hint - PSK identity hint send by the server # $identity - PSK identity # $key - PSK key, hex string without the leading '0x', e.g. 'deadbeef' # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_psk_client_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_psk_client_callback.html> =item * set_purpose my $rv = Net::SSLeay::set_purpose($ssl, $purpose); # $ssl - value corresponding to openssl's SSL structure # $purpose - (integer) purpose identifier # # returns: 1 on success, 0 on failure For more info about available $purpose identifiers see L</CTX_set_purpose>. =item * set_quiet_shutdown Sets the 'quiet shutdown' flag for $ssl to be $mode. Net::SSLeay::set_quiet_shutdown($ssl, $mode); # $ssl - value corresponding to openssl's SSL structure # $mode - 0 or 1 # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html> =item * set_session Set a TLS/SSL session to be used during TLS/SSL connect. my $rv = Net::SSLeay::set_session($to, $ses); # $to - value corresponding to openssl's SSL structure # $ses - value corresponding to openssl's SSL_SESSION structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_session.html|http://www.openssl.org/docs/ssl/SSL_set_session.html> =item * set_session_id_context Sets the context $sid_ctx of length $sid_ctx_len within which a session can be reused for the $ssl object. my $rv = Net::SSLeay::set_session_id_context($ssl, $sid_ctx, $sid_ctx_len); # $ssl - value corresponding to openssl's SSL structure # $sid_ctx - data buffer # $sid_ctx_len - length of data in $sid_ctx # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html> =item * set_session_secret_cb Setup pre-shared secret session resumption function. Net::SSLeay::set_session_secret_cb($ssl, $func, $data); # $ssl - value corresponding to openssl's SSL structure # $func - perl reference to callback function # $data - [optional] data that will be passed to callback function when invoked # # returns: no return value The callback function will be called like: callback_function($secret, $ciphers, $pref_cipher, $data); # $secret is the current master session key, usually all 0s at the beginning of a session # $ciphers is ref to an array of peer cipher names # $pref_cipher is a ref to an index into the list of cipher names of # the preferred cipher. Set it if you want to specify a preferred cipher # $data is the data passed to set_session_secret_cb The callback function should return 1 if it likes the suggested cipher (or has selected an alternative by setting pref_cipher), else it should return 0 (in which case OpenSSL will select its own preferred cipher). With OpenSSL 1.1 and later, callback_function can change the master key for the session by altering $secret and returning 1. =item * CTX_set_tlsext_ticket_getkey_cb Setup encryption for TLS session tickets (stateless session reuse). Net::SSLeay::CTX_set_tlsext_ticket_getkey_cb($ctx, $func, $data); # $ctx - value corresponding to openssl's SSL_CTX structure # $func - perl reference to callback function # $data - [optional] data that will be passed to callback function when invoked # # returns: no return value The callback function will be called like: getkey($data,[$key_name]) -> ($key,$current_key_name) # $data is the data passed to set_session_secret_cb # $key_name is the name of the key OpenSSL has extracted from the session ticket # $key is the requested key for ticket encryption + HMAC # $current_key_name is the name for the currently valid key OpenSSL will call the function without a key name if it generates a new ticket. It then needs the callback to return the encryption+HMAC key and an identifier (key name) for this key. When OpenSSL gets a session ticket from the client it extracts the key name and calls the callback with this name as argument. It then expects the callback to return the encryption+HMAC key matching the requested key name and and also the key name which should be used at the moment. If the requested key name and the returned key name differ it means that this session ticket was created with an expired key and need to be renewed. In this case OpenSSL will call the callback again with no key name to create a new session ticket based on the old one. The key must be at least 32 byte of random data which can be created with RAND_bytes. Internally the first 16 byte are used as key in AES-128 encryption while the next 16 byte are used for the SHA-256 HMAC. The key name are binary data and must be exactly 16 byte long. Example: Net::SSLeay::RAND_bytes(my $oldkey,32); Net::SSLeay::RAND_bytes(my $newkey,32); my $oldkey_name = pack("a16",'oldsecret'); my $newkey_name = pack("a16",'newsecret'); my @keys = ( [ $newkey_name, $newkey ], # current active key [ $oldkey_name, $oldkey ], # already expired ); Net::SSLeay::CTX_set_tlsext_ticket_getkey_cb($server2->_ctx, sub { my ($mykeys,$name) = @_; # return (current_key, current_key_name) if no name given return ($mykeys->[0][1],$mykeys->[0][0]) if ! $name; # return (matching_key, current_key_name) if we find a key matching # the given name for(my $i = 0; $i<@$mykeys; $i++) { next if $name ne $mykeys->[$i][0]; return ($mykeys->[$i][1],$mykeys->[0][0]); } # no matching key found return; },\@keys); This function is based on the OpenSSL function SSL_CTX_set_tlsext_ticket_key_cb but provides a simpler to use interface. For more information see L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tlsext_ticket_key_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tlsext_ticket_key_cb.html> =item * set_session_ticket_ext_cb Setup callback for TLS session tickets (stateless session reuse). Net::SSLeay::set_session_ticket_ext_cb($ssl, $func, $data); # $ssl - value corresponding to openssl's SSL structure # $func - perl reference to callback function # $data - [optional] data that will be passed to callback function when invoked # # returns: no return value The callback function will be called like: getticket($ssl,$ticket,$data) -> $return_value # $ssl is a value corresponding to openssl's SSL structure # $ticket is a value of received TLS session ticket (can also be empty) # $data is the data passed to set_session_ticket_ext_cb # $return_value is either 0 (failure) or 1 (success) This function is based on the OpenSSL function SSL_set_session_ticket_ext_cb. =item * set_session_ticket_ext Set TLS session ticket (stateless session reuse). Net::SSLeay::set_session_ticket_ext($ssl, $ticket); # $ssl - value corresponding to openssl's SSL structure # $ticket - is a value of TLS session ticket which client will send (can also be empty string) # # returns: no return value The callback function will be called like: getticket($ssl,$ticket,$data) -> $return_value # $ssl is a value corresponding to openssl's SSL structure # $ticket is a value of received TLS session ticket (can also be empty) # $data is the data passed to set_session_ticket_ext_cb # $return_value is either 0 (failure) or 1 (success) This function is based on the OpenSSL function SSL_set_session_ticket_ext_cb. =item * set_shutdown Sets the shutdown state of $ssl to $mode. Net::SSLeay::set_shutdown($ssl, $mode); # $ssl - value corresponding to openssl's SSL structure # $mode - (integer) shutdown mode: # 0 - No shutdown # 1 - SSL_SENT_SHUTDOWN # 2 - SSL_RECEIVED_SHUTDOWN # 3 - SSL_RECEIVED_SHUTDOWN+SSL_SENT_SHUTDOWN # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_set_shutdown.html|http://www.openssl.org/docs/ssl/SSL_set_shutdown.html> =item * set_ssl_method Sets a new TLS/SSL method for a particular $ssl object. my $rv = Net::SSLeay::set_ssl_method($ssl, $method); # $ssl - value corresponding to openssl's SSL structure # $method - value corresponding to openssl's SSL_METHOD structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html> =item * set_tmp_dh Sets DH parameters to be used to be $dh. my $rv = Net::SSLeay::set_tmp_dh($ssl, $dh); # $ssl - value corresponding to openssl's SSL structure # $dh - value corresponding to openssl's DH structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html> =item * set_tmp_dh_callback Sets the callback function for $ssl to be used when a DH parameters are required to $dh_cb. ??? (does this function really work?) Net::SSLeay::set_tmp_dh_callback($ssl, $dh); # $ssl - value corresponding to openssl's SSL structure # $dh_cb - pointer to function ??? # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html> =item * set_tmp_rsa Sets the temporary/ephemeral RSA key to be used in $ssl to be $rsa. my $rv = Net::SSLeay::set_tmp_rsa($ssl, $rsa); # $ssl - value corresponding to openssl's SSL structure # $rsa - value corresponding to openssl's RSA structure # # returns: 1 on success, 0 on failure Example: $rsakey = Net::SSLeay::RSA_generate_key(); Net::SSLeay::set_tmp_rsa($ssl, $rsakey); Net::SSLeay::RSA_free($rsakey); Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html> =item * set_tmp_rsa_callback Sets the callback function for $ssl to be used when a temporary/ephemeral RSA key is required to $tmp_rsa_callback. ??? (does this function really work?) Net::SSLeay::set_tmp_rsa_callback($ssl, $tmp_rsa_callback); # $ssl - value corresponding to openssl's SSL structure # $tmp_rsa_callback - (function pointer) ??? # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html> =item * set_trust my $rv = Net::SSLeay::set_trust($ssl, $trust); # $ssl - value corresponding to openssl's SSL structure # $trust - (integer) trust identifier # # returns: the original value For more details about $trust values see L</CTX_set_trust>. =item * shutdown Shuts down an active TLS/SSL connection. It sends the 'close notify' shutdown alert to the peer. my $rv = Net::SSLeay::shutdown($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 1 - shutdown was successfully completed # 0 - shutdown is not yet finished, # -1 - shutdown was not successful Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_shutdown.html|http://www.openssl.org/docs/ssl/SSL_shutdown.html> =item * state_string Returns a 6 letter string indicating the current state of the SSL object $ssl. my $rv = Net::SSLeay::state_string($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: 6-letter string Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_state_string.html|http://www.openssl.org/docs/ssl/SSL_state_string.html> =item * state_string_long Returns a string indicating the current state of the SSL object $ssl. my $rv = Net::SSLeay::state_string_long($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: state strings Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_state_string.html|http://www.openssl.org/docs/ssl/SSL_state_string.html> =item * set_default_passwd_cb B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0f. Not needed with LibreSSL. Sets the default password callback called when loading/storing a PEM certificate with encryption for $ssl. Net::SSLeay::set_default_passwd_cb($ssl, $func); # $ssl - value corresponding to openssl's SSL structure # $func - perl reference to callback function # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html> =item * set_default_passwd_cb_userdata B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0f. Not needed with LibreSSL. Sets a pointer to userdata which will be provided to the password callback of $ssl on invocation. Net::SSLeay::set_default_passwd_cb_userdata($ssl, $userdata); # $ssl - value corresponding to openssl's SSL structure # $userdata - data that will be passed to callback function when invoked # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html|http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html> =item * use_PrivateKey Adds $pkey as private key to $ssl. my $rv = Net::SSLeay::use_PrivateKey($ssl, $pkey); # $ssl - value corresponding to openssl's SSL structure # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_PrivateKey_ASN1 Adds the private key of type $pk stored in $data to $ssl. my $rv = Net::SSLeay::use_PrivateKey_ASN1($pk, $ssl, $d, $len); # $pk - (integer) key type, NID of corresponding algorithm # $ssl - value corresponding to openssl's SSL structure # $data - key data (binary) # $len - length of $data # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_PrivateKey_file Adds the first private key found in $file to $ssl. my $rv = Net::SSLeay::use_PrivateKey_file($ssl, $file, $type); # $ssl - value corresponding to openssl's SSL structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_RSAPrivateKey Adds $rsa as RSA private key to $ssl. my $rv = Net::SSLeay::use_RSAPrivateKey($ssl, $rsa); # $ssl - value corresponding to openssl's SSL structure # $rsa - value corresponding to openssl's RSA structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_RSAPrivateKey_ASN1 Adds RSA private key stored in $data to $ssl. my $rv = Net::SSLeay::use_RSAPrivateKey_ASN1($ssl, $data, $len); # $ssl - value corresponding to openssl's SSL structure # $data - key data (binary) # $len - length of $data # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_RSAPrivateKey_file Adds the first RSA private key found in $file to $ssl. my $rv = Net::SSLeay::use_RSAPrivateKey_file($ssl, $file, $type); # $ssl - value corresponding to openssl's SSL structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_certificate Loads the certificate $x into $ssl. my $rv = Net::SSLeay::use_certificate($ssl, $x); # $ssl - value corresponding to openssl's SSL structure # $x - value corresponding to openssl's X509 structure # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_certificate_ASN1 Loads the ASN1 encoded certificate from $data to $ssl. my $rv = Net::SSLeay::use_certificate_ASN1($ssl, $data, $len); # $ssl - value corresponding to openssl's SSL structure # $data - certificate data (binary) # $len - length of $data # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_certificate_chain_file B<COMPATIBILITY>: not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.1.0 Loads a certificate chain from $file into $ssl. The certificates must be in PEM format and must be sorted starting with the subject's certificate (actual client or server certificate), followed by intermediate CA certificates if applicable, and ending at the highest level (root) CA. my $rv = Net::SSLeay::use_certificate_chain_file($ssl, $file); # $ssl - value corresponding to openssl's SSL structure # $file - (string) file name # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * use_certificate_file Loads the first certificate stored in $file into $ssl. my $rv = Net::SSLeay::use_certificate_file($ssl, $file, $type); # $ssl - value corresponding to openssl's SSL structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, otherwise check out the error stack to find out the reason Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html|http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html> =item * get_version Returns SSL/TLS protocol name my $rv = Net::SSLeay::get_version($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (string) protocol name, see OpenSSL manual for the full list # TLSv1 # TLSv1.3 Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_get_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_get_version.html> =item * version Returns SSL/TLS protocol version my $rv = Net::SSLeay::version($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) protocol version, see OpenSSL manual for the full list # 0x0301 - TLS1_VERSION (TLSv1) # 0xFEFF - DTLS1_VERSION (DTLSv1) Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_version.html> =item * client_version B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL Returns TLS protocol version used by the client when initiating the connection my $rv = Net::SSLeay::client_version($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) protocol version, see OpenSSL manual for the full list # 0x0301 - TLS1_VERSION (TLSv1) # 0xFEFF - DTLS1_VERSION (DTLSv1) Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_client_version.html|https://www.openssl.org/docs/manmaster/man3/SSL_client_version.html> =item * is_dtls B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.0, not in LibreSSL my $rv = Net::SSLeay::is_dtls($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) zero or one # 0 - connection is not using DTLS # 1 - connection is using DTLS Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_is_dtls.html|https://www.openssl.org/docs/manmaster/man3/SSL_is_dtls.html> =item * want Returns state information for the SSL object $ssl. my $rv = Net::SSLeay::want($ssl); # $ssl - value corresponding to openssl's SSL structure # # returns: state # 1 - SSL_NOTHING # 2 - SSL_WRITING # 3 - SSL_READING # 4 - SSL_X509_LOOKUP Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_want.html|http://www.openssl.org/docs/ssl/SSL_want.html> =item * write Writes data from the buffer $data into the specified $ssl connection. my $rv = Net::SSLeay::write($ssl, $data); # $ssl - value corresponding to openssl's SSL structure # $data - data to be written # # returns: >0 - (success) number of bytes actually written to the TLS/SSL connection # 0 - write not successful, probably the underlying connection was closed # <0 - error Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_write.html|http://www.openssl.org/docs/ssl/SSL_write.html> =item * write_ex B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Writes data from the buffer $data into the specified $ssl connection. my ($len, $rv) = Net::SSLeay::write_ex($ssl, $data); # $ssl - value corresponding to openssl's SSL structure # $data - data to be written # # returns a list: two-item list consisting of number of bytes written, # and return code from SSL_write_ex() Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_write_ex.html|https://www.openssl.org/docs/manmaster/man3/SSL_write_ex.html> =item * write_partial B<NOTE:> Does not exactly correspond to any low level API function Writes a fragment of data in $data from the buffer $data into the specified $ssl connection. This is a non-blocking function like L<Net::SSLeay::write()>. my $rv = Net::SSLeay::write_partial($ssl, $from, $count, $data); # $ssl - value corresponding to openssl's SSL structure # $from - (integer) offset from the beginning of $data # $count - (integer) length of data to be written # $data - data buffer # # returns: >0 - (success) number of bytes actually written to the TLS/SSL connection # 0 - write not successful, probably the underlying connection was closed # <0 - error =item * set_tlsext_host_name B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.8f Sets TLS servername extension on SLL object $ssl to value $name. my $rv = set_tlsext_host_name($ssl, $name); # $ssl - value corresponding to openssl's SSL structure # $name - (string) name to be set # # returns: 1 on success, 0 on failure =back =head3 Low level API: RAND_* related functions Check openssl doc related to RAND stuff L<http://www.openssl.org/docs/crypto/rand.html|http://www.openssl.org/docs/crypto/rand.html> =over =item * RAND_add Mixes the $num bytes at $buf into the PRNG state. Net::SSLeay::RAND_add($buf, $num, $entropy); # $buf - buffer with data to be mixed into the PRNG state # $num - number of bytes in $buf # $entropy - estimate of how much randomness is contained in $buf (in bytes) # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_add.html|http://www.openssl.org/docs/crypto/RAND_add.html> =item * RAND_seed Equivalent to L</RAND_add> when $num == $entropy. Net::SSLeay::RAND_seed($buf); # Perlishly figures out buf size # $buf - buffer with data to be mixed into the PRNG state # $num - number of bytes in $buf # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_add.html|http://www.openssl.org/docs/crypto/RAND_add.html> =item * RAND_status Gives PRNG status (seeded enough or not). my $rv = Net::SSLeay::RAND_status(); #returns: 1 if the PRNG has been seeded with enough data, 0 otherwise Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_add.html|http://www.openssl.org/docs/crypto/RAND_add.html> =item * RAND_bytes Puts $num cryptographically strong pseudo-random bytes into $buf. my $rv = Net::SSLeay::RAND_bytes($buf, $num); # $buf - buffer where the random data will be stored # $num - the size (in bytes) of requested random data # # returns: 1 on success, -1 if not supported by the current RAND method, or 0 on other failure Check openssl doc L<http://www.openssl.org/docs/manmaster/man3/RAND_bytes.html|http://www.openssl.org/docs/manmaster/man3/RAND_bytes.html> =item * RAND_priv_bytes B<COMPATIBILITY:> not available in Net-SSLeay-1.85 and before; requires at least OpenSSL 1.1.1, not in LibreSSL Puts $num cryptographically strong pseudo-random bytes into $buf. my $rv = Net::SSLeay::RAND_priv_bytes($buf, $num); # $buf - buffer where the random data will be stored # $num - the size (in bytes) of requested random data # # returns: 1 on success, -1 if not supported by the current RAND method, or 0 on other failure RAND_priv_bytes has the same semantics as RAND_bytes, but see see the documentation for more information. Check openssl doc L<http://www.openssl.org/docs/manmaster/man3/RAND_priv_bytes.html|http://www.openssl.org/docs/manmaster/man3/RAND_priv_bytes.html> =item * RAND_pseudo_bytes Puts $num pseudo-random (not necessarily unpredictable) bytes into $buf. my $rv = Net::SSLeay::RAND_pseudo_bytes($buf, $num); # $buf - buffer where the random data will be stored # $num - the size (in bytes) of requested random data # # returns: 1 if the bytes generated are cryptographically strong, 0 otherwise Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_bytes.html|http://www.openssl.org/docs/crypto/RAND_bytes.html> =item * RAND_cleanup Erase the PRNG state. Net::SSLeay::RAND_cleanup(); # no args, no return value Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_cleanup.html|http://www.openssl.org/docs/crypto/RAND_cleanup.html> =item * RAND_egd_bytes Queries the entropy gathering daemon EGD on socket $path for $bytes bytes. my $rv = Net::SSLeay::RAND_egd_bytes($path, $bytes); # $path - path to a socket of entropy gathering daemon EGD # $bytes - number of bytes we want from EGD # # returns: the number of bytes read from the daemon on success, and -1 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_egd.html|http://www.openssl.org/docs/crypto/RAND_egd.html> =item * RAND_file_name Generates a default path for the random seed file. my $file = Net::SSLeay::RAND_file_name($num); # $num - maximum size of returned file name # # returns: string with file name on success, '' (empty string) on failure Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_load_file.html|http://www.openssl.org/docs/crypto/RAND_load_file.html> =item * RAND_load_file B<COMPATIBILITY:> Is no longer functional on LibreSSL Reads $max_bytes of bytes from $file_name and adds them to the PRNG. my $rv = Net::SSLeay::RAND_load_file($file_name, $max_bytes); # $file_name - the name of file # $max_bytes - bytes to read from $file_name; -1 => the complete file is read # # returns: the number of bytes read Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_load_file.html|http://www.openssl.org/docs/crypto/RAND_load_file.html> =item * RAND_write_file Writes 1024 random bytes to $file_name which can be used to initialize the PRNG by calling L</RAND_load_file> in a later session. my $rv = Net::SSLeay::RAND_write_file($file_name); # $file_name - the name of file # # returns: the number of bytes written, and -1 if the bytes written were generated without appropriate seed Check openssl doc L<http://www.openssl.org/docs/crypto/RAND_load_file.html|http://www.openssl.org/docs/crypto/RAND_load_file.html> =item * RAND_poll Collects some entropy from operating system and adds it to the PRNG. my $rv = Net::SSLeay::RAND_poll(); # returns: 1 on success, 0 on failure (unable to gather reasonable entropy) =back =head3 Low level API: OBJ_* related functions =over =item * OBJ_cmp Compares ASN1_OBJECT $a to ASN1_OBJECT $b. my $rv = Net::SSLeay::OBJ_cmp($a, $b); # $a - value corresponding to openssl's ASN1_OBJECT structure # $b - value corresponding to openssl's ASN1_OBJECT structure # # returns: if the two are identical 0 is returned Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =item * OBJ_dup Returns a copy/duplicate of $o. my $rv = Net::SSLeay::OBJ_dup($o); # $o - value corresponding to openssl's ASN1_OBJECT structure # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =item * OBJ_nid2ln Returns long name for given NID $n. my $rv = Net::SSLeay::OBJ_nid2ln($n); # $n - (integer) NID # # returns: (string) long name e.g. 'commonName' Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =item * OBJ_ln2nid Returns NID corresponding to given long name $n. my $rv = Net::SSLeay::OBJ_ln2nid($s); # $s - (string) long name e.g. 'commonName' # # returns: (integer) NID =item * OBJ_nid2sn Returns short name for given NID $n. my $rv = Net::SSLeay::OBJ_nid2sn($n); # $n - (integer) NID # # returns: (string) short name e.g. 'CN' Example: print Net::SSLeay::OBJ_nid2sn(&Net::SSLeay::NID_commonName); =item * OBJ_sn2nid Returns NID corresponding to given short name $s. my $rv = Net::SSLeay::OBJ_sn2nid($s); # $s - (string) short name e.g. 'CN' # # returns: (integer) NID Example: print "NID_commonName constant=", &Net::SSLeay::NID_commonName; print "OBJ_sn2nid('CN')=", Net::SSLeay::OBJ_sn2nid('CN'); =item * OBJ_nid2obj Returns ASN1_OBJECT for given NID $n. my $rv = Net::SSLeay::OBJ_nid2obj($n); # $n - (integer) NID # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =item * OBJ_obj2nid Returns NID corresponding to given ASN1_OBJECT $o. my $rv = Net::SSLeay::OBJ_obj2nid($o); # $o - value corresponding to openssl's ASN1_OBJECT structure # # returns: (integer) NID Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =item * OBJ_txt2obj Converts the text string s into an ASN1_OBJECT structure. If $no_name is 0 then long names (e.g. 'commonName') and short names (e.g. 'CN') will be interpreted as well as numerical forms (e.g. '2.5.4.3'). If $no_name is 1 only the numerical form is acceptable. my $rv = Net::SSLeay::OBJ_txt2obj($s, $no_name); # $s - text string to be converted # $no_name - (integer) 0 or 1 # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =item * OBJ_obj2txt Converts the ASN1_OBJECT a into a textual representation. Net::SSLeay::OBJ_obj2txt($a, $no_name); # $a - value corresponding to openssl's ASN1_OBJECT structure # $no_name - (integer) 0 or 1 # # returns: textual representation e.g. 'commonName' ($no_name=0), '2.5.4.3' ($no_name=1) Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =item * OBJ_txt2nid Returns NID corresponding to text string $s which can be a long name, a short name or the numerical representation of an object. my $rv = Net::SSLeay::OBJ_txt2nid($s); # $s - (string) e.g. 'commonName' or 'CN' or '2.5.4.3' # # returns: (integer) NID Example: my $nid = Net::SSLeay::OBJ_txt2nid('2.5.4.3'); Net::SSLeay::OBJ_nid2sn($n); Check openssl doc L<http://www.openssl.org/docs/crypto/OBJ_nid2obj.html|http://www.openssl.org/docs/crypto/OBJ_nid2obj.html> =back =head3 Low level API: ASN1_INTEGER_* related functions =over =item * ASN1_INTEGER_new B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Creates a new ASN1_INTEGER structure. my $rv = Net::SSLeay::ASN1_INTEGER_new(); # # returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure) =item * ASN1_INTEGER_free B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Free an allocated ASN1_INTEGER structure. Net::SSLeay::ASN1_INTEGER_free($i); # $i - value corresponding to openssl's ASN1_INTEGER structure # # returns: no return value =item * ASN1_INTEGER_get B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns integer value of given ASN1_INTEGER object. B<BEWARE:> If the value stored in ASN1_INTEGER is greater than max. integer that can be stored in 'long' type (usually 32bit but may vary according to platform) then this function will return -1. For getting large ASN1_INTEGER values consider using L</P_ASN1_INTEGER_get_dec> or L</P_ASN1_INTEGER_get_hex>. my $rv = Net::SSLeay::ASN1_INTEGER_get($a); # $a - value corresponding to openssl's ASN1_INTEGER structure # # returns: integer value of ASN1_INTEGER object in $a =item * ASN1_INTEGER_set B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets value of given ASN1_INTEGER object to value $val B<BEWARE:> $val has max. limit (= max. integer that can be stored in 'long' type). For setting large ASN1_INTEGER values consider using L</P_ASN1_INTEGER_set_dec> or L</P_ASN1_INTEGER_set_hex>. my $rv = Net::SSLeay::ASN1_INTEGER_set($i, $val); # $i - value corresponding to openssl's ASN1_INTEGER structure # $val - integer value # # returns: 1 on success, 0 on failure =item * P_ASN1_INTEGER_get_dec B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns string with decimal representation of integer value of given ASN1_INTEGER object. Net::SSLeay::P_ASN1_INTEGER_get_dec($i); # $i - value corresponding to openssl's ASN1_INTEGER structure # # returns: string with decimal representation =item * P_ASN1_INTEGER_get_hex B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns string with hexadecimal representation of integer value of given ASN1_INTEGER object. Net::SSLeay::P_ASN1_INTEGER_get_hex($i); # $i - value corresponding to openssl's ASN1_INTEGER structure # # returns: string with hexadecimal representation =item * P_ASN1_INTEGER_set_dec B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets value of given ASN1_INTEGER object to value $val (decimal string, suitable for large integers) Net::SSLeay::P_ASN1_INTEGER_set_dec($i, $str); # $i - value corresponding to openssl's ASN1_INTEGER structure # $str - string with decimal representation # # returns: 1 on success, 0 on failure =item * P_ASN1_INTEGER_set_hex B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets value of given ASN1_INTEGER object to value $val (hexadecimal string, suitable for large integers) Net::SSLeay::P_ASN1_INTEGER_set_hex($i, $str); # $i - value corresponding to openssl's ASN1_INTEGER structure # $str - string with hexadecimal representation # # returns: 1 on success, 0 on failure =back =head3 Low level API: ASN1_STRING_* related functions =over =item * P_ASN1_STRING_get B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns string value of given ASN1_STRING object. Net::SSLeay::P_ASN1_STRING_get($s, $utf8_decode); # $s - value corresponding to openssl's ASN1_STRING structure # $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0) # # returns: string $string = Net::SSLeay::P_ASN1_STRING_get($s); #is the same as: $string = Net::SSLeay::P_ASN1_STRING_get($s, 0); =back =head3 Low level API: ASN1_TIME_* related functions =over =item * ASN1_TIME_new B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before my $time = ASN1_TIME_new(); # returns: value corresponding to openssl's ASN1_TIME structure =item * ASN1_TIME_free B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before ASN1_TIME_free($time); # $time - value corresponding to openssl's ASN1_TIME structure =item * ASN1_TIME_set B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before ASN1_TIME_set($time, $t); # $time - value corresponding to openssl's ASN1_TIME structure # $t - time value in seconds since 1.1.1970 B<BEWARE:> It is platform dependent how this function will handle dates after 2038. Although perl's integer is large enough the internal implementation of this function is dependent on the size of time_t structure (32bit time_t has problem with 2038). If you want to safely set date and time after 2038 use function L</P_ASN1_TIME_set_isotime>. =item * P_ASN1_TIME_get_isotime B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7e B<NOTE:> Does not exactly correspond to any low level API function Gives ISO-8601 string representation of ASN1_TIME structure. my $datetime_string = P_ASN1_TIME_get_isotime($time); # $time - value corresponding to openssl's ASN1_TIME structure # # returns: datetime string like '2033-05-16T20:39:37Z' or '' on failure The output format is compatible with module L<DateTime::Format::RFC3339> =item * P_ASN1_TIME_set_isotime B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7e B<NOTE:> Does not exactly correspond to any low level API function Sets time and date value of ANS1_time structure. my $rv = P_ASN1_TIME_set_isotime($time, $string); # $time - value corresponding to openssl's ASN1_TIME structure # $string - ISO-8601 timedate string like '2033-05-16T20:39:37Z' # # returns: 1 on success, 0 on failure The C<$string> parameter has to be in full form like C<"2012-03-22T23:55:33"> or C<"2012-03-22T23:55:33Z"> or C<"2012-03-22T23:55:33CET">. Short forms like C<"2012-03-22T23:55"> or C<"2012-03-22"> are not supported. =item * P_ASN1_TIME_put2string B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before, has bugs with openssl-0.9.8i B<NOTE:> Does not exactly correspond to any low level API function Gives string representation of ASN1_TIME structure. my $str = P_ASN1_TIME_put2string($time); # $time - value corresponding to openssl's ASN1_TIME structure # # returns: datetime string like 'May 16 20:39:37 2033 GMT' =item * P_ASN1_UTCTIME_put2string B<NOTE:> deprecated function, only for backward compatibility, just an alias for L</P_ASN1_TIME_put2string> =back =head3 Low level API: X509_* related functions =over =item * X509_new B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Allocates and initializes a X509 structure. my $rv = Net::SSLeay::X509_new(); # # returns: value corresponding to openssl's X509 structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/X509_new.html|http://www.openssl.org/docs/crypto/X509_new.html> =item * X509_free Frees up the X509 structure. Net::SSLeay::X509_free($a); # $a - value corresponding to openssl's X509 structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/X509_new.html|http://www.openssl.org/docs/crypto/X509_new.html> =item * X509_check_host B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at least OpenSSL 1.0.2. X509_CHECK_FLAG_NEVER_CHECK_SUBJECT requires OpenSSL 1.1.0. Checks f the certificate Subject Alternative Name (SAN) or Subject CommonName (CN) matches the specified host name. my $rv = Net::SSLeay::X509_check_host($cert, $name, $flags, $peername); # $cert - value corresponding to openssl's X509 structure # $name - host name to check # $flags (optional, default: 0) - can be the bitwise OR of: # &Net::SSLeay::X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT # &Net::SSLeay::X509_CHECK_FLAG_NO_WILDCARDS # &Net::SSLeay::X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS # &Net::SSLeay::X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS # &Net::SSLeay::X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS # &Net::SSLeay::X509_CHECK_FLAG_NEVER_CHECK_SUBJECT # $peername (optional) - If not omitted and $host matches $cert, # a copy of the matching SAN or CN from # the peer certificate is stored in $peername. # # returns: # 1 for a successful match # 0 for a failed match # -1 for an internal error # -2 if the input is malformed Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_host.html>. =item * X509_check_email B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at least OpenSSL 1.0.2. Checks if the certificate matches the specified email address. my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags); # $cert - value corresponding to openssl's X509 structure # $address - email address to check # $flags (optional, default: 0) - see X509_check_host() # # returns: see X509_check_host() Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_email.html>. =item * X509_check_ip B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at least OpenSSL 1.0.2. Checks if the certificate matches the specified IPv4 or IPv6 address. my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags); # $cert - value corresponding to openssl's X509 structure # $address - IP address to check in binary format, in network byte order # $flags (optional, default: 0) - see X509_check_host() # # returns: see X509_check_host() Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_ip.html>. =item * X509_check_ip_asc B<COMPATIBILITY:> not available in Net-SSLeay-1.68 and before; requires at least OpenSSL 1.0.2. Checks if the certificate matches the specified IPv4 or IPv6 address. my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags); # $cert - value corresponding to openssl's X509 structure # $address - IP address to check in text representation # $flags (optional, default: 0) - see X509_check_host() # # returns: see X509_check_host() Check openssl doc L<https://www.openssl.org/docs/crypto/X509_check_ip_asc.html>. =item * X509_certificate_type B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns bitmask with type of certificate $x. my $rv = Net::SSLeay::X509_certificate_type($x); # $x - value corresponding to openssl's X509 structure # # returns: (integer) bitmask with certificate type #to decode bitmask returned by this function use these constants: &Net::SSLeay::EVP_PKS_DSA &Net::SSLeay::EVP_PKS_EC &Net::SSLeay::EVP_PKS_RSA &Net::SSLeay::EVP_PKT_ENC &Net::SSLeay::EVP_PKT_EXCH &Net::SSLeay::EVP_PKT_EXP &Net::SSLeay::EVP_PKT_SIGN &Net::SSLeay::EVP_PK_DH &Net::SSLeay::EVP_PK_DSA &Net::SSLeay::EVP_PK_EC &Net::SSLeay::EVP_PK_RSA =item * X509_digest B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Computes digest/fingerprint of X509 $data using $type hash function. my $digest_value = Net::SSLeay::X509_digest($data, $type); # $data - value corresponding to openssl's X509 structure # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname() # # returns: hash value (binary) #to get printable (hex) value of digest use: print unpack('H*', $digest_value); =item * X509_issuer_and_serial_hash B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sort of a checksum of issuer name and serial number of X509 certificate $x. The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits). The resulting value might differ across different openssl versions for the same X509 certificate. my $rv = Net::SSLeay::X509_issuer_and_serial_hash($x); # $x - value corresponding to openssl's X509 structure # # returns: number representing checksum =item * X509_issuer_name_hash B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sort of a checksum of issuer name of X509 certificate $x. The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits). The resulting value might differ across different openssl versions for the same X509 certificate. my $rv = Net::SSLeay::X509_issuer_name_hash($x); # $x - value corresponding to openssl's X509 structure # # returns: number representing checksum =item * X509_subject_name_hash B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sort of a checksum of subject name of X509 certificate $x. The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits). The resulting value might differ across different openssl versions for the same X509 certificate. my $rv = Net::SSLeay::X509_subject_name_hash($x); # $x - value corresponding to openssl's X509 structure # # returns: number representing checksum =item * X509_pubkey_digest B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Computes digest/fingerprint of public key from X509 certificate $data using $type hash function. my $digest_value = Net::SSLeay::X509_pubkey_digest($data, $type); # $data - value corresponding to openssl's X509 structure # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname() # # returns: hash value (binary) #to get printable (hex) value of digest use: print unpack('H*', $digest_value); =item * X509_set_issuer_name B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets issuer of X509 certificate $x to $name. my $rv = Net::SSLeay::X509_set_issuer_name($x, $name); # $x - value corresponding to openssl's X509 structure # $name - value corresponding to openssl's X509_NAME structure # # returns: 1 on success, 0 on failure =item * X509_set_pubkey B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets public key of X509 certificate $x to $pkey. my $rv = Net::SSLeay::X509_set_pubkey($x, $pkey); # $x - value corresponding to openssl's X509 structure # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: 1 on success, 0 on failure =item * X509_set_serialNumber B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets serial number of X509 certificate $x to $serial. my $rv = Net::SSLeay::X509_set_serialNumber($x, $serial); # $x - value corresponding to openssl's X509 structure # $serial - value corresponding to openssl's ASN1_INTEGER structure # # returns: 1 on success, 0 on failure #to create $serial value use one of these: $serial = Net::SSLeay::P_ASN1_INTEGER_set_hex('45ad6f'); $serial = Net::SSLeay::P_ASN1_INTEGER_set_dec('7896541238529631478'); $serial = Net::SSLeay::ASN1_INTEGER_set(45896); =item * X509_set_subject_name B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets subject of X509 certificate $x to $name. my $rv = Net::SSLeay::X509_set_subject_name($x, $name); # $x - value corresponding to openssl's X509 structure # $name - value corresponding to openssl's X509_NAME structure # # returns: 1 on success, 0 on failure =item * X509_set_version B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Set 'version' value for X509 certificate $ to $version. my $rv = Net::SSLeay::X509_set_version($x, $version); # $x - value corresponding to openssl's X509 structure # $version - (integer) version number # # returns: 1 on success, 0 on failure =item * X509_sign B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sign X509 certificate $x with private key $pkey (using digest algorithm $md). my $rv = Net::SSLeay::X509_sign($x, $pkey, $md); # $x - value corresponding to openssl's X509 structure # $pkey - value corresponding to openssl's EVP_PKEY structure # $md - value corresponding to openssl's EVP_MD structure # # returns: 1 on success, 0 on failure =item * X509_verify B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Verifies X509 object $a using public key $r (pubkey of issuing CA). my $rv = Net::SSLeay::X509_verify($x, $r); # $x - value corresponding to openssl's X509 structure # $r - value corresponding to openssl's EVP_PKEY structure # # returns: 0 - verify failure, 1 - verify OK, <0 - error =item * X509_get_ext_count B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns the total number of extensions in X509 object $x. my $rv = Net::SSLeay::X509_get_ext_count($x); # $x - value corresponding to openssl's X509 structure # # returns: count of extensions =item * X509_get_pubkey B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns public key corresponding to given X509 object $x. my $rv = Net::SSLeay::X509_get_pubkey($x); # $x - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure) B<NOTE:> This method returns only the public key's key bits, without the algorithm or parameters. Use C<X509_get_X509_PUBKEY()> to return the full public key (SPKI) instead. =item * X509_get_X509_PUBKEY B<COMPATIBILITY:> not available in Net-SSLeay-1.72 and before Returns the full public key (SPKI) of given X509 certificate $x. Net::SSLeay::X509_get_X509_PUBKEY($x); # $x - value corresponding to openssl's X509 structure # # returns: public key data in DER format (binary) =item * X509_get_serialNumber B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns serial number of X509 certificate $x. my $rv = Net::SSLeay::X509_get_serialNumber($x); # $x - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure) See L</P_ASN1_INTEGER_get_dec>, L</P_ASN1_INTEGER_get_hex> or L</ASN1_INTEGER_get> to decode ASN1_INTEGER object. =item * X509_get0_serialNumber B<COMPATIBILITY:> available in Net-SSLeay-1.86 onwards X509_get0_serialNumber() is the same as X509_get_serialNumber() except it accepts a const parameter and returns a const result. =item * X509_get_version B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns 'version' value of given X509 certificate $x. my $rv = Net::SSLeay::X509_get_version($x); # $x - value corresponding to openssl's X509 structure # # returns: (integer) version =item * X509_get_ext Returns X509_EXTENSION from $x509 based on given position/index. my $rv = Net::SSLeay::X509_get_ext($x509, $index); # $x509 - value corresponding to openssl's X509 structure # $index - (integer) position/index of extension within $x509 # # returns: value corresponding to openssl's X509_EXTENSION structure (0 on failure) =item * X509_get_ext_by_NID Returns X509_EXTENSION from $x509 based on given NID. my $rv = Net::SSLeay::X509_get_ext_by_NID($x509, $nid, $loc); # $x509 - value corresponding to openssl's X509 structure # $nid - (integer) NID value # $loc - (integer) position to start lookup at # # returns: position/index of extension, negative value on error # call Net::SSLeay::X509_get_ext($x509, $rv) to get the actual extension =item * X509_get_fingerprint Returns fingerprint of certificate $cert. B<NOTE:> Does not exactly correspond to any low level API function. The implementation is basen on openssl's C<X509_digest()>. Net::SSLeay::X509_get_fingerprint($x509, $type); # $x509 - value corresponding to openssl's X509 structure # $type - (string) digest type, currently supported values: # "md5" # "sha1" # "sha256" # "ripemd160" # # returns: certificate digest - hexadecimal string (NOT binary data!) =item * X509_get_issuer_name Return an X509_NAME object representing the issuer of the certificate $cert. my $rv = Net::SSLeay::X509_get_issuer_name($cert); # $cert - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's X509_NAME structure (0 on failure) =item * X509_get_notAfter Return an object giving the time after which the certificate $cert is not valid. my $rv = Net::SSLeay::X509_get_notAfter($cert); # $cert - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure) To get human readable/printable form the return value you can use: my $time = Net::SSLeay::X509_get_notAfter($cert); print "notAfter=", Net::SSLeay::P_ASN1_TIME_get_isotime($time), "\n"; =item * X509_get_notBefore Return an object giving the time before which the certificate $cert is not valid my $rv = Net::SSLeay::X509_get_notBefore($cert); # $cert - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure) To get human readable/printable form the return value you can use: my $time = Net::SSLeay::X509_get_notBefore($cert); print "notBefore=", Net::SSLeay::P_ASN1_TIME_get_isotime($time), "\n"; =item * X509_get_subjectAltNames B<NOTE:> Does not exactly correspond to any low level API function. Returns the list of alternative subject names from X509 certificate $cert. my @rv = Net::SSLeay::X509_get_subjectAltNames($cert); # $cert - value corresponding to openssl's X509 structure # # returns: list containing pairs - name_type (integer), name_value (string) # where name_type can be: # 0 - GEN_OTHERNAME # 1 - GEN_EMAIL # 2 - GEN_DNS # 3 - GEN_X400 # 4 - GEN_DIRNAME # 5 - GEN_EDIPARTY # 6 - GEN_URI # 7 - GEN_IPADD # 8 - GEN_RID Note: type 7 - GEN_IPADD contains the IP address as a packed binary address. =item * X509_get_subject_name Returns the subject of the certificate $cert. my $rv = Net::SSLeay::X509_get_subject_name($cert); # $cert - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's X509_NAME structure (0 on failure) =item * X509_gmtime_adj Adjust th ASN1_TIME object to the timestamp (in GMT). my $rv = Net::SSLeay::X509_gmtime_adj($s, $adj); # $s - value corresponding to openssl's ASN1_TIME structure # $adj - timestamp (seconds since 1.1.1970) # # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure) B<BEWARE:> this function may fail for dates after 2038 as it is dependent on time_t size on your system (32bit time_t does not work after 2038). Consider using L</P_ASN1_TIME_set_isotime> instead). =item * X509_load_cert_crl_file Takes PEM file and loads all X509 certificates and X509 CRLs from that file into X509_LOOKUP structure. my $rv = Net::SSLeay::X509_load_cert_crl_file($ctx, $file, $type); # $ctx - value corresponding to openssl's X509_LOOKUP structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # if not FILETYPE_PEM then behaves as Net::SSLeay::X509_load_cert_file() # # returns: 1 on success, 0 on failure =item * X509_load_cert_file Loads/adds X509 certificate from $file to X509_LOOKUP structure my $rv = Net::SSLeay::X509_load_cert_file($ctx, $file, $type); # $ctx - value corresponding to openssl's X509_LOOKUP structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, 0 on failure =item * X509_load_crl_file Loads/adds X509 CRL from $file to X509_LOOKUP structure my $rv = Net::SSLeay::X509_load_crl_file($ctx, $file, $type); # $ctx - value corresponding to openssl's X509_LOOKUP structure # $file - (string) file name # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1 # # returns: 1 on success, 0 on failure =item * X509_policy_level_get0_node ??? (more info needed) my $rv = Net::SSLeay::X509_policy_level_get0_node($level, $i); # $level - value corresponding to openssl's X509_POLICY_LEVEL structure # $i - (integer) index/position # # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure) =item * X509_policy_level_node_count ??? (more info needed) my $rv = Net::SSLeay::X509_policy_level_node_count($level); # $level - value corresponding to openssl's X509_POLICY_LEVEL structure # # returns: (integer) node count =item * X509_policy_node_get0_parent ??? (more info needed) my $rv = Net::SSLeay::X509_policy_node_get0_parent($node); # $node - value corresponding to openssl's X509_POLICY_NODE structure # # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure) =item * X509_policy_node_get0_policy ??? (more info needed) my $rv = Net::SSLeay::X509_policy_node_get0_policy($node); # $node - value corresponding to openssl's X509_POLICY_NODE structure # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) =item * X509_policy_node_get0_qualifiers ??? (more info needed) my $rv = Net::SSLeay::X509_policy_node_get0_qualifiers($node); # $node - value corresponding to openssl's X509_POLICY_NODE structure # # returns: value corresponding to openssl's STACK_OF(POLICYQUALINFO) structure (0 on failure) =item * X509_policy_tree_free ??? (more info needed) Net::SSLeay::X509_policy_tree_free($tree); # $tree - value corresponding to openssl's X509_POLICY_TREE structure # # returns: no return value =item * X509_policy_tree_get0_level ??? (more info needed) my $rv = Net::SSLeay::X509_policy_tree_get0_level($tree, $i); # $tree - value corresponding to openssl's X509_POLICY_TREE structure # $i - (integer) level index # # returns: value corresponding to openssl's X509_POLICY_LEVEL structure (0 on failure) =item * X509_policy_tree_get0_policies ??? (more info needed) my $rv = Net::SSLeay::X509_policy_tree_get0_policies($tree); # $tree - value corresponding to openssl's X509_POLICY_TREE structure # # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure) =item * X509_policy_tree_get0_user_policies ??? (more info needed) my $rv = Net::SSLeay::X509_policy_tree_get0_user_policies($tree); # $tree - value corresponding to openssl's X509_POLICY_TREE structure # # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure) =item * X509_policy_tree_level_count ??? (more info needed) my $rv = Net::SSLeay::X509_policy_tree_level_count($tree); # $tree - value corresponding to openssl's X509_POLICY_TREE structure # # returns: (integer) count =item * X509_verify_cert_error_string Returns a human readable error string for verification error $n. my $rv = Net::SSLeay::X509_verify_cert_error_string($n); # $n - (long) numeric error code # # returns: error string Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html> =item * P_X509_add_extensions B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Adds one or more X509 extensions to X509 object $x. my $rv = Net::SSLeay::P_X509_add_extensions($x, $ca_cert, $nid, $value); # $x - value corresponding to openssl's X509 structure # $ca_cert - value corresponding to openssl's X509 structure (issuer's cert - necessary for sertting NID_authority_key_identifier) # $nid - NID identifying extension to be set # $value - extension value # # returns: 1 on success, 0 on failure You can set more extensions at once: my $rv = Net::SSLeay::P_X509_add_extensions($x509, $ca_cert, &Net::SSLeay::NID_key_usage => 'digitalSignature,keyEncipherment', &Net::SSLeay::NID_subject_key_identifier => 'hash', &Net::SSLeay::NID_authority_key_identifier => 'keyid', &Net::SSLeay::NID_authority_key_identifier => 'issuer', &Net::SSLeay::NID_basic_constraints => 'CA:FALSE', &Net::SSLeay::NID_ext_key_usage => 'serverAuth,clientAuth', &Net::SSLeay::NID_netscape_cert_type => 'server', &Net::SSLeay::NID_subject_alt_name => 'DNS:s1.dom.com,DNS:s2.dom.com,DNS:s3.dom.com', ); =item * P_X509_copy_extensions B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Copies X509 extensions from X509_REQ object to X509 object - handy when you need to turn X509_REQ into X509 certificate. Net::SSLeay::P_X509_copy_extensions($x509_req, $x509, $override); # $x509_req - value corresponding to openssl's X509_REQ structure # $x509 - value corresponding to openssl's X509 structure # $override - (integer) flag indication whether to override already existing items in $x509 (default 1) # # returns: 1 on success, 0 on failure =item * P_X509_get_crl_distribution_points B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Get the list of CRL distribution points from X509 certificate. my @cdp = Net::SSLeay::P_X509_get_crl_distribution_points($x509); # $x509 - value corresponding to openssl's X509 structure # # returns: list of distribution points (usually URLs) =item * P_X509_get_ext_key_usage B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Gets the list of extended key usage of given X509 certificate $cert. my @ext_usage = Net::SSLeay::P_X509_get_ext_key_usage($cert, $format); # $cert - value corresponding to openssl's X509 structure # $format - choose type of return values: 0=OIDs, 1=NIDs, 2=shortnames, 3=longnames # # returns: list of values Examples: my @extkeyusage_oid = Net::SSLeay::P_X509_get_ext_key_usage($x509,0); # returns for example: ("1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2") my @extkeyusage_nid = Net::SSLeay::P_X509_get_ext_key_usage($x509,1); # returns for example: (129, 130) my @extkeyusage_sn = Net::SSLeay::P_X509_get_ext_key_usage($x509,2); # returns for example: ("serverAuth", "clientAuth") my @extkeyusage_ln = Net::SSLeay::P_X509_get_ext_key_usage($x509,3); # returns for example: ("TLS Web Server Authentication", "TLS Web Client Authentication") =item * P_X509_get_key_usage B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Gets the list of key usage of given X509 certificate $cert. my @keyusage = Net::SSLeay::P_X509_get_key_usage($cert); # $cert - value corresponding to openssl's X509 structure # # returns: list of key usage values which can be none, one or more from the following list: # "digitalSignature" # "nonRepudiation" # "keyEncipherment" # "dataEncipherment" # "keyAgreement" # "keyCertSign" # "cRLSign" # "encipherOnly" # "decipherOnly" =item * P_X509_get_netscape_cert_type B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Gets the list of Netscape cert types of given X509 certificate $cert. Net::SSLeay::P_X509_get_netscape_cert_type($cert); # $cert - value corresponding to openssl's X509 structure # # returns: list of Netscape type values which can be none, one or more from the following list: # "client" # "server" # "email" # "objsign" # "reserved" # "sslCA" # "emailCA" # "objCA" =item * P_X509_get_pubkey_alg B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns ASN1_OBJECT corresponding to X509 certificate public key algorithm. my $rv = Net::SSLeay::P_X509_get_pubkey_alg($x); # $x - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) To get textual representation use: my $alg = Net::SSLeay::OBJ_obj2txt(Net::SSLeay::P_X509_get_pubkey_alg($x509)); # returns for example: "rsaEncryption" =item * P_X509_get_signature_alg B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns ASN1_OBJECT corresponding to X509 signarite key algorithm. my $rv = Net::SSLeay::P_X509_get_signature_alg($x); # $x - value corresponding to openssl's X509 structure # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) To get textual representation use: my $alg = Net::SSLeay::OBJ_obj2txt(Net::SSLeay::P_X509_get_signature_alg($x509)) # returns for example: "sha1WithRSAEncryption" =item * sk_X509_new_null Returns a new, empty, STACK_OF(X509) structure. my $rv = Net::SSLeay::sk_X509_new_null(); # # returns: value corresponding to openssl's STACK_OF(X509) structure =item * sk_X509_push Pushes an X509 structure onto a STACK_OF(X509) structure. my $rv = Net::SSLeay::sk_X509_push($sk_x509, $x509); # $sk_x509 - value corresponding to openssl's STACK_OF(X509) structure # $x509 - value corresponding to openssl's X509 structure # # returns: 1 if successful, 0 if unsuccessful =back =head3 Low level API: X509_REQ_* related functions =over =item * X509_REQ_new B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Creates a new X509_REQ structure. my $rv = Net::SSLeay::X509_REQ_new(); # # returns: value corresponding to openssl's X509_REQ structure (0 on failure) =item * X509_REQ_free B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Free an allocated X509_REQ structure. Net::SSLeay::X509_REQ_free($x); # $x - value corresponding to openssl's X509_REQ structure # # returns: no return value =item * X509_REQ_add1_attr_by_NID B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Adds an attribute whose name is defined by a NID $nid. The field value to be added is in $bytes. my $rv = Net::SSLeay::X509_REQ_add1_attr_by_NID($req, $nid, $type, $bytes); # $req - value corresponding to openssl's X509_REQ structure # $nid - (integer) NID value # $type - (integer) type of data in $bytes (see below) # $bytes - data to be set # # returns: 1 on success, 0 on failure # values for $type - use constants: &Net::SSLeay::MBSTRING_UTF8 - $bytes contains utf8 encoded data &Net::SSLeay::MBSTRING_ASC - $bytes contains ASCII data =item * X509_REQ_digest B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Computes digest/fingerprint of X509_REQ $data using $type hash function. my $digest_value = Net::SSLeay::X509_REQ_digest($data, $type); # $data - value corresponding to openssl's X509_REQ structure # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname() # # returns: hash value (binary) #to get printable (hex) value of digest use: print unpack('H*', $digest_value); =item * X509_REQ_get_attr_by_NID B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Retrieve the next index matching $nid after $lastpos ($lastpos should initially be set to -1). my $rv = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid, $lastpos=-1); # $req - value corresponding to openssl's X509_REQ structure # $nid - (integer) NID value # $lastpos - [optional] (integer) index where to start search (default -1) # # returns: index (-1 if there are no more entries) Note: use L</P_X509_REQ_get_attr> to get the actual attribute value - e.g. my $index = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid); my @attr_values = Net::SSLeay::P_X509_REQ_get_attr($req, $index); =item * X509_REQ_get_attr_by_OBJ B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Retrieve the next index matching $obj after $lastpos ($lastpos should initially be set to -1). my $rv = Net::SSLeay::X509_REQ_get_attr_by_OBJ($req, $obj, $lastpos=-1); # $req - value corresponding to openssl's X509_REQ structure # $obj - value corresponding to openssl's ASN1_OBJECT structure # $lastpos - [optional] (integer) index where to start search (default -1) # # returns: index (-1 if there are no more entries) Note: use L</P_X509_REQ_get_attr> to get the actual attribute value - e.g. my $index = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid); my @attr_values = Net::SSLeay::P_X509_REQ_get_attr($req, $index); =item * X509_REQ_get_attr_count B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns the total number of attributes in $req. my $rv = Net::SSLeay::X509_REQ_get_attr_count($req); # $req - value corresponding to openssl's X509_REQ structure # # returns: (integer) items count =item * X509_REQ_get_pubkey B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns public key corresponding to given X509_REQ object $x. my $rv = Net::SSLeay::X509_REQ_get_pubkey($x); # $x - value corresponding to openssl's X509_REQ structure # # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure) =item * X509_REQ_get_subject_name B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns X509_NAME object corresponding to subject name of given X509_REQ object $x. my $rv = Net::SSLeay::X509_REQ_get_subject_name($x); # $x - value corresponding to openssl's X509_REQ structure # # returns: value corresponding to openssl's X509_NAME structure (0 on failure) =item * X509_REQ_get_version B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns 'version' value for given X509_REQ object $x. my $rv = Net::SSLeay::X509_REQ_get_version($x); # $x - value corresponding to openssl's X509_REQ structure # # returns: (integer) version e.g. 0 = "version 1" =item * X509_REQ_set_pubkey B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets public key of given X509_REQ object $x to $pkey. my $rv = Net::SSLeay::X509_REQ_set_pubkey($x, $pkey); # $x - value corresponding to openssl's X509_REQ structure # $pkey - value corresponding to openssl's EVP_PKEY structure # # returns: 1 on success, 0 on failure =item * X509_REQ_set_subject_name B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets subject name of given X509_REQ object $x to X509_NAME object $name. my $rv = Net::SSLeay::X509_REQ_set_subject_name($x, $name); # $x - value corresponding to openssl's X509_REQ structure # $name - value corresponding to openssl's X509_NAME structure # # returns: 1 on success, 0 on failure =item * X509_REQ_set_version B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sets 'version' of given X509_REQ object $x to $version. my $rv = Net::SSLeay::X509_REQ_set_version($x, $version); # $x - value corresponding to openssl's X509_REQ structure # $version - (integer) e.g. 0 = "version 1" # # returns: 1 on success, 0 on failure =item * X509_REQ_sign B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sign X509_REQ object $x with private key $pk (using digest algorithm $md). my $rv = Net::SSLeay::X509_REQ_sign($x, $pk, $md); # $x - value corresponding to openssl's X509_REQ structure # $pk - value corresponding to openssl's EVP_PKEY structure (requestor's private key) # $md - value corresponding to openssl's EVP_MD structure # # returns: 1 on success, 0 on failure =item * X509_REQ_verify B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Verifies X509_REQ object $x using public key $r (pubkey of requesting party). my $rv = Net::SSLeay::X509_REQ_verify($x, $r); # $x - value corresponding to openssl's X509_REQ structure # $r - value corresponding to openssl's EVP_PKEY structure # # returns: 0 - verify failure, 1 - verify OK, <0 - error =item * P_X509_REQ_add_extensions B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Adds one or more X509 extensions to X509_REQ object $x. my $rv = Net::SSLeay::P_X509_REQ_add_extensions($x, $nid, $value); # $x - value corresponding to openssl's X509_REQ structure # $nid - NID identifying extension to be set # $value - extension value # # returns: 1 on success, 0 on failure You can set more extensions at once: my $rv = Net::SSLeay::P_X509_REQ_add_extensions($x509_req, &Net::SSLeay::NID_key_usage => 'digitalSignature,keyEncipherment', &Net::SSLeay::NID_basic_constraints => 'CA:FALSE', &Net::SSLeay::NID_ext_key_usage => 'serverAuth,clientAuth', &Net::SSLeay::NID_netscape_cert_type => 'server', &Net::SSLeay::NID_subject_alt_name => 'DNS:s1.com,DNS:s2.com', &Net::SSLeay::NID_crl_distribution_points => 'URI:http://pki.com/crl1,URI:http://pki.com/crl2', ); =item * P_X509_REQ_get_attr B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Returns attribute value for X509_REQ's attribute at index $n. Net::SSLeay::P_X509_REQ_get_attr($req, $n); # $req - value corresponding to openssl's X509_REQ structure # $n - (integer) attribute index # # returns: value corresponding to openssl's ASN1_STRING structure =back =head3 Low level API: X509_CRL_* related functions =over =item * X509_CRL_new B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Creates a new X509_CRL structure. my $rv = Net::SSLeay::X509_CRL_new(); # # returns: value corresponding to openssl's X509_CRL structure (0 on failure) =item * X509_CRL_free B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Free an allocated X509_CRL structure. Net::SSLeay::X509_CRL_free($x); # $x - value corresponding to openssl's X509_CRL structure # # returns: no return value =item * X509_CRL_digest B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Computes digest/fingerprint of X509_CRL $data using $type hash function. my $digest_value = Net::SSLeay::X509_CRL_digest($data, $type); # $data - value corresponding to openssl's X509_CRL structure # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname() # # returns: hash value (binary) Example: my $x509_crl my $md = Net::SSLeay::EVP_get_digestbyname("sha1"); my $digest_value = Net::SSLeay::X509_CRL_digest($x509_crl, $md); #to get printable (hex) value of digest use: print "digest=", unpack('H*', $digest_value), "\n"; =item * X509_CRL_get_ext B<COMPATIBILITY:> not available in Net-SSLeay-1.54 and before Returns X509_EXTENSION from $x509 based on given position/index. my $rv = Net::SSLeay::X509_CRL_get_ext($x509, $index); # $x509 - value corresponding to openssl's X509_CRL structure # $index - (integer) position/index of extension within $x509 # # returns: value corresponding to openssl's X509_EXTENSION structure (0 on failure) =item * X509_CRL_get_ext_by_NID B<COMPATIBILITY:> not available in Net-SSLeay-1.54 and before Returns X509_EXTENSION from $x509 based on given NID. my $rv = Net::SSLeay::X509_CRL_get_ext_by_NID($x509, $nid, $loc); # $x509 - value corresponding to openssl's X509_CRL structure # $nid - (integer) NID value # $loc - (integer) position to start lookup at # # returns: position/index of extension, negative value on error # call Net::SSLeay::X509_CRL_get_ext($x509, $rv) to get the actual extension =item * X509_CRL_get_ext_count B<COMPATIBILITY:> not available in Net-SSLeay-1.54 and before Returns the total number of extensions in X509_CRL object $x. my $rv = Net::SSLeay::X509_CRL_get_ext_count($x); # $x - value corresponding to openssl's X509_CRL structure # # returns: count of extensions =item * X509_CRL_get_issuer B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns X509_NAME object corresponding to the issuer of X509_CRL $x. my $rv = Net::SSLeay::X509_CRL_get_issuer($x); # $x - value corresponding to openssl's X509_CRL structure # # returns: value corresponding to openssl's X509_NAME structure (0 on failure) See other C<X509_NAME_*> functions to get more info from X509_NAME structure. =item * X509_CRL_get_lastUpdate B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns 'lastUpdate' date-time value of X509_CRL object $x. my $rv = Net::SSLeay::X509_CRL_get_lastUpdate($x); # $x - value corresponding to openssl's X509_CRL structure # # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure) =item * X509_CRL_get_nextUpdate B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns 'nextUpdate' date-time value of X509_CRL object $x. my $rv = Net::SSLeay::X509_CRL_get_nextUpdate($x); # $x - value corresponding to openssl's X509_CRL structure # # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure) =item * X509_CRL_get_version B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns 'version' value of given X509_CRL structure $x. my $rv = Net::SSLeay::X509_CRL_get_version($x); # $x - value corresponding to openssl's X509_CRL structure # # returns: (integer) version =item * X509_CRL_set_issuer_name B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Sets the issuer of X509_CRL object $x to X509_NAME object $name. my $rv = Net::SSLeay::X509_CRL_set_issuer_name($x, $name); # $x - value corresponding to openssl's X509_CRL structure # $name - value corresponding to openssl's X509_NAME structure # # returns: 1 on success, 0 on failure =item * X509_CRL_set_lastUpdate B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Sets 'lastUpdate' value of X509_CRL object $x to $tm. my $rv = Net::SSLeay::X509_CRL_set_lastUpdate($x, $tm); # $x - value corresponding to openssl's X509_CRL structure # $tm - value corresponding to openssl's ASN1_TIME structure # # returns: 1 on success, 0 on failure =item * X509_CRL_set_nextUpdate B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Sets 'nextUpdate' value of X509_CRL object $x to $tm. my $rv = Net::SSLeay::X509_CRL_set_nextUpdate($x, $tm); # $x - value corresponding to openssl's X509_CRL structure # $tm - value corresponding to openssl's ASN1_TIME structure # # returns: 1 on success, 0 on failure =item * X509_CRL_set_version B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Sets 'version' value of given X509_CRL structure $x to $version. my $rv = Net::SSLeay::X509_CRL_set_version($x, $version); # $x - value corresponding to openssl's X509_CRL structure # $version - (integer) version number (1 = version 2 CRL) # # returns: 1 on success, 0 on failure Note that if you want to use any X509_CRL extension you need to set "version 2 CRL" - C<Net::SSLeay::X509_CRL_set_version($x, 1)>. =item * X509_CRL_sign B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Sign X509_CRL object $x with private key $pkey (using digest algorithm $md). my $rv = Net::SSLeay::X509_CRL_sign($x, $pkey, $md); # $x - value corresponding to openssl's X509_CRL structure # $pkey - value corresponding to openssl's EVP_PKEY structure # $md - value corresponding to openssl's EVP_MD structure # # returns: 1 on success, 0 on failure =item * X509_CRL_sort B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Sorts the data of X509_CRL object so it will be written in serial number order. my $rv = Net::SSLeay::X509_CRL_sort($x); # $x - value corresponding to openssl's X509_CRL structure # # returns: 1 on success, 0 on failure =item * X509_CRL_verify B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Verifies X509_CRL object $a using public key $r (pubkey of issuing CA). my $rv = Net::SSLeay::X509_CRL_verify($a, $r); # $a - value corresponding to openssl's X509_CRL structure # $r - value corresponding to openssl's EVP_PKEY structure # # returns: 0 - verify failure, 1 - verify OK, <0 - error =item * P_X509_CRL_add_revoked_serial_hex B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Adds given serial number $serial_hex to X509_CRL object $crl. Net::SSLeay::P_X509_CRL_add_revoked_serial_hex($crl, $serial_hex, $rev_time, $reason_code, $comp_time); # $crl - value corresponding to openssl's X509_CRL structure # $serial_hex - string (hexadecimal) representation of serial number # $rev_time - (revocation time) value corresponding to openssl's ASN1_TIME structure # $reason_code - [optional] (integer) reason code (see below) - default 0 # $comp_time - [optional] (compromise time) value corresponding to openssl's ASN1_TIME structure # # returns: no return value reason codes: 0 - unspecified 1 - keyCompromise 2 - CACompromise 3 - affiliationChanged 4 - superseded 5 - cessationOfOperation 6 - certificateHold 7 - removeFromCRL =item * P_X509_CRL_get_serial B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Returns serial number of X509_CRL object. my $rv = Net::SSLeay::P_X509_CRL_get_serial($crl); # $crl - value corresponding to openssl's X509_CRL structure # # returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure) =item * P_X509_CRL_set_serial B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.7 Sets serial number of X509_CRL object to $crl_number. my $rv = Net::SSLeay::P_X509_CRL_set_serial($crl, $crl_number); # $crl - value corresponding to openssl's X509_CRL structure # $crl_number - value corresponding to openssl's ASN1_INTEGER structure # # returns: 1 on success, 0 on failure =back =head3 Low level API: X509_EXTENSION_* related functions =over =item * X509_EXTENSION_get_critical B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns 'critical' flag of given X509_EXTENSION object $ex. my $rv = Net::SSLeay::X509_EXTENSION_get_critical($ex); # $ex - value corresponding to openssl's X509_EXTENSION structure # # returns: (integer) 1 - critical, 0 - noncritical =item * X509_EXTENSION_get_data B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns value (raw data) of X509_EXTENSION object $ne. my $rv = Net::SSLeay::X509_EXTENSION_get_data($ne); # $ne - value corresponding to openssl's X509_EXTENSION structure # # returns: value corresponding to openssl's ASN1_OCTET_STRING structure (0 on failure) Note: you can use L</P_ASN1_STRING_get> to convert ASN1_OCTET_STRING into perl scalar variable. =item * X509_EXTENSION_get_object B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns OID (ASN1_OBJECT) of X509_EXTENSION object $ne. my $rv = Net::SSLeay::X509_EXTENSION_get_object($ex); # $ex - value corresponding to openssl's X509_EXTENSION structure # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) =item * X509V3_EXT_print B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns string representation of given X509_EXTENSION object $ext. Net::SSLeay::X509V3_EXT_print($ext, $flags, $utf8_decode); # $ext - value corresponding to openssl's X509_EXTENSION structure # $flags - [optional] (integer) Currently the flag argument is unused and should be set to 0 # $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0) # # returns: no return value =item * X509V3_EXT_d2i Parses an extension and returns its internal structure. my $rv = Net::SSLeay::X509V3_EXT_d2i($ext); # $ext - value corresponding to openssl's X509_EXTENSION structure # # returns: pointer ??? =back =head3 Low level API: X509_NAME_* related functions =over =item * X509_NAME_ENTRY_get_data B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Retrieves the field value of $ne in and ASN1_STRING structure. my $rv = Net::SSLeay::X509_NAME_ENTRY_get_data($ne); # $ne - value corresponding to openssl's X509_NAME_ENTRY structure # # returns: value corresponding to openssl's ASN1_STRING structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html|http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html> =item * X509_NAME_ENTRY_get_object B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Retrieves the field name of $ne in and ASN1_OBJECT structure. my $rv = Net::SSLeay::X509_NAME_ENTRY_get_object($ne); # $ne - value corresponding to openssl's X509_NAME_ENTRY structure # # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html|http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html> =item * X509_NAME_new B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-0.9.5 Creates a new X509_NAME structure. Adds a field whose name is defined by a string $field. The field value to be added is in $bytes. my $rv = Net::SSLeay::X509_NAME_new(); # # returns: value corresponding to openssl's X509_NAME structure (0 on failure) =item * X509_NAME_hash B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-0.9.5 Sort of a checksum of issuer name $name. The result is not a full hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of 'unsigned long' (32 bits). The resulting value might differ across different openssl versions for the same X509 certificate. my $rv = Net::SSLeay::X509_NAME_hash($name); # $name - value corresponding to openssl's X509_NAME structure # # returns: number representing checksum =item * X509_NAME_add_entry_by_txt B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.5 Adds a field whose name is defined by a string $field. The field value to be added is in $bytes. my $rv = Net::SSLeay::X509_NAME_add_entry_by_txt($name, $field, $type, $bytes, $len, $loc, $set); # $name - value corresponding to openssl's X509_NAME structure # $field - (string) field definition (name) - e.g. "organizationName" # $type - (integer) type of data in $bytes (see below) # $bytes - data to be set # $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended # $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created # # returns: 1 on success, 0 on failure # values for $type - use constants: &Net::SSLeay::MBSTRING_UTF8 - $bytes contains utf8 encoded data &Net::SSLeay::MBSTRING_ASC - $bytes contains ASCII data Unicode note: when passing non-ascii (unicode) string in $bytes do not forget to set C<$flags = &Net::SSLeay::MBSTRING_UTF8> and encode the perl $string via C<$bytes = encode('utf-8', $string)>. Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html|http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html> =item * X509_NAME_add_entry_by_NID B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.5 Adds a field whose name is defined by a NID $nid. The field value to be added is in $bytes. my $rv = Net::SSLeay::X509_NAME_add_entry_by_NID($name, $nid, $type, $bytes, $len, $loc, $set); # $name - value corresponding to openssl's X509_NAME structure # $nid - (integer) field definition - NID value # $type - (integer) type of data in $bytes (see below) # $bytes - data to be set # $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended # $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html|http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html> =item * X509_NAME_add_entry_by_OBJ B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-0.9.5 Adds a field whose name is defined by a object (OID) $obj . The field value to be added is in $bytes. my $rv = Net::SSLeay::X509_NAME_add_entry_by_OBJ($name, $obj, $type, $bytes, $len, $loc, $set); # $name - value corresponding to openssl's X509_NAME structure # $obj - field definition - value corresponding to openssl's ASN1_OBJECT structure # $type - (integer) type of data in $bytes (see below) # $bytes - data to be set # $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended # $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html|http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html> =item * X509_NAME_cmp B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Compares two X509_NAME obejcts. my $rv = Net::SSLeay::X509_NAME_cmp($a, $b); # $a - value corresponding to openssl's X509_NAME structure # $b - value corresponding to openssl's X509_NAME structure # # returns: 0 if $a matches $b; non zero otherwise =item * X509_NAME_digest B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Computes digest/fingerprint of X509_NAME $data using $type hash function. my $digest_value = Net::SSLeay::X509_NAME_digest($data, $type); # $data - value corresponding to openssl's X509_NAME structure # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname() # # returns: hash value (binary) #to get printable (hex) value of digest use: print unpack('H*', $digest_value); =item * X509_NAME_entry_count B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns the total number of entries in $name. my $rv = Net::SSLeay::X509_NAME_entry_count($name); # $name - value corresponding to openssl's X509_NAME structure # # returns: (integer) entries count Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html|http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html> =item * X509_NAME_get_entry B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Retrieves the X509_NAME_ENTRY from $name corresponding to index $loc. Acceptable values for $loc run from 0 to C<Net::SSLeay::X509_NAME_entry_count($name)- 1>. The value returned is an internal pointer which must not be freed. my $rv = Net::SSLeay::X509_NAME_get_entry($name, $loc); # $name - value corresponding to openssl's X509_NAME structure # $loc - (integer) index of wanted entry # # returns: value corresponding to openssl's X509_NAME_ENTRY structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html|http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html> =item * X509_NAME_print_ex B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns a string with human readable version of $name. Net::SSLeay::X509_NAME_print_ex($name, $flags, $utf8_decode); # $name - value corresponding to openssl's X509_NAME structure # $flags - [optional] conversion flags (default XN_FLAG_RFC2253) - see below # $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0) # # returns: string representation of $name #available conversion flags - use constants: &Net::SSLeay::XN_FLAG_COMPAT &Net::SSLeay::XN_FLAG_DN_REV &Net::SSLeay::XN_FLAG_DUMP_UNKNOWN_FIELDS &Net::SSLeay::XN_FLAG_FN_ALIGN &Net::SSLeay::XN_FLAG_FN_LN &Net::SSLeay::XN_FLAG_FN_MASK &Net::SSLeay::XN_FLAG_FN_NONE &Net::SSLeay::XN_FLAG_FN_OID &Net::SSLeay::XN_FLAG_FN_SN &Net::SSLeay::XN_FLAG_MULTILINE &Net::SSLeay::XN_FLAG_ONELINE &Net::SSLeay::XN_FLAG_RFC2253 &Net::SSLeay::XN_FLAG_SEP_COMMA_PLUS &Net::SSLeay::XN_FLAG_SEP_CPLUS_SPC &Net::SSLeay::XN_FLAG_SEP_MASK &Net::SSLeay::XN_FLAG_SEP_MULTILINE &Net::SSLeay::XN_FLAG_SEP_SPLUS_SPC &Net::SSLeay::XN_FLAG_SPC_EQ Most likely you will be fine with default: Net::SSLeay::X509_NAME_print_ex($name, &Net::SSLeay::XN_FLAG_RFC2253); Or you might want RFC2253-like output without utf8 chars escaping: use Net::SSLeay qw/XN_FLAG_RFC2253 ASN1_STRFLGS_ESC_MSB/; my $flag_rfc22536_utf8 = (XN_FLAG_RFC2253) & (~ ASN1_STRFLGS_ESC_MSB); my $result = Net::SSLeay::X509_NAME_print_ex($name, $flag_rfc22536_utf8, 1); Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html|http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html> =item * X509_NAME_get_text_by_NID Retrieves the text from the first entry in name which matches $nid, if no such entry exists -1 is returned. B<openssl note:> this is a legacy function which has various limitations which makes it of minimal use in practice. It can only find the first matching entry and will copy the contents of the field verbatim: this can be highly confusing if the target is a multicharacter string type like a BMPString or a UTF8String. Net::SSLeay::X509_NAME_get_text_by_NID($name, $nid); # $name - value corresponding to openssl's X509_NAME structure # $nid - NID value (integer) # # returns: text value Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html|http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html> =item * X509_NAME_oneline Return an ASCII version of $name. Net::SSLeay::X509_NAME_oneline($name); # $name - value corresponding to openssl's X509_NAME structure # # returns: (string) ASCII version of $name Check openssl doc L<http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html|http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html> =item * sk_X509_NAME_free Free an allocated STACK_OF(X509_NAME) structure. Net::SSLeay::sk_X509_NAME_free($sk); # $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure # # returns: no return value =item * sk_X509_NAME_num Return number of items in STACK_OF(X509_NAME) my $rv = Net::SSLeay::sk_X509_NAME_num($sk); # $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure # # returns: number of items =item * sk_X509_NAME_value Returns X509_NAME from position $index in STACK_OF(X509_NAME) my $rv = Net::SSLeay::sk_X509_NAME_value($sk, $i); # $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure # $i - (integer) index/position # # returns: value corresponding to openssl's X509_NAME structure (0 on failure) =item * add_file_cert_subjects_to_stack Add a file of certs to a stack. All certs in $file that are not already in the $stackCAs will be added. my $rv = Net::SSLeay::add_file_cert_subjects_to_stack($stackCAs, $file); # $stackCAs - value corresponding to openssl's STACK_OF(X509_NAME) structure # $file - (string) filename # # returns: 1 on success, 0 on failure =item * add_dir_cert_subjects_to_stack Add a directory of certs to a stack. All certs in $dir that are not already in the $stackCAs will be added. my $rv = Net::SSLeay::add_dir_cert_subjects_to_stack($stackCAs, $dir); # $stackCAs - value corresponding to openssl's STACK_OF(X509_NAME) structure # $dir - (string) the directory to append from. All files in this directory will be examined as potential certs. Any that are acceptable to SSL_add_dir_cert_subjects_to_stack() that are not already in the stack will be included. # # returns: 1 on success, 0 on failure =back =head3 Low level API: X509_STORE_* related functions =over =item * X509_STORE_CTX_new returns a newly initialised X509_STORE_CTX structure. =item * X509_STORE_CTX_init X509_STORE_CTX_init() sets up an X509_STORE_CTX for a subsequent verification operation. It must be called before each call to X509_verify_cert(). Net::SSLeay::X509_STORE_CTX_init($x509_store_ctx, $x509_store, $x509, $chain); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure (required) # $x509_store - value corresponding to openssl's X509_STORE structure (optional) # $x509 - value corresponding to openssl's X509 structure (optional) # $chain - value corresponding to openssl's STACK_OF(X509) structure (optional) Check openssl doc L<https://www.openssl.org/docs/man1.0.2/crypto/X509_STORE_CTX_init.html|https://www.openssl.org/docs/man1.0.2/crypto/X509_STORE_CTX_init.html> =item * X509_STORE_CTX_free Frees an X509_STORE_CTX structure. Net::SSLeay::X509_STORE_CTX_free($x509_store_ctx); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure =item * X509_verify_cert The X509_verify_cert() function attempts to discover and validate a certificate chain based on parameters in ctx. A complete description of the process is contained in the verify(1) manual page. If this function returns 0, use X509_STORE_CTX_get_error to get additional error information. my $rv = Net::SSLeay::X509_verify_cert($x509_store_ctx); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # # returns: 1 if a complete chain can be built and validated, otherwise 0 Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/X509_verify_cert.html|https://www.openssl.org/docs/manmaster/man3/X509_verify_cert.html> =item * X509_STORE_CTX_get_current_cert Returns the certificate in ctx which caused the error or 0 if no certificate is relevant. my $rv = Net::SSLeay::X509_STORE_CTX_get_current_cert($x509_store_ctx); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # # returns: value corresponding to openssl's X509 structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html> =item * X509_STORE_CTX_get_error Returns the error code of $ctx. my $rv = Net::SSLeay::X509_STORE_CTX_get_error($x509_store_ctx); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # # returns: (integer) error code For more info about erro code values check function L</get_verify_result>. Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html> =item * X509_STORE_CTX_get_error_depth Returns the depth of the error. This is a non-negative integer representing where in the certificate chain the error occurred. If it is zero it occurred in the end entity certificate, one if it is the certificate which signed the end entity certificate and so on. my $rv = Net::SSLeay::X509_STORE_CTX_get_error_depth($x509_store_ctx); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # # returns: (integer) depth Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html> =item * X509_STORE_CTX_get_ex_data Is used to retrieve the information for $idx from $x509_store_ctx. my $rv = Net::SSLeay::X509_STORE_CTX_get_ex_data($x509_store_ctx, $idx); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # $idx - (integer) index for application specific data # # returns: pointer to ??? =item * X509_STORE_CTX_set_ex_data Is used to store application data at arg for idx into $x509_store_ctx. my $rv = Net::SSLeay::X509_STORE_CTX_set_ex_data($x509_store_ctx, $idx, $data); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # $idx - (integer) ??? # $data - (pointer) ??? # # returns: 1 on success, 0 on failure =item * X509_STORE_CTX_set_cert Sets the certificate to be verified in $x509_store_ctx to $x. Net::SSLeay::X509_STORE_CTX_set_cert($x509_store_ctx, $x); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # $x - value corresponding to openssl's X509 structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_new.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_new.html> =item * X509_STORE_new Returns a newly initialized X509_STORE structure. my $rv = Net::SSLeay::X509_STORE_new(); # # returns: value corresponding to openssl's X509_STORE structure (0 on failure) =item * X509_STORE_free Frees an X509_STORE structure Net::SSLeay::X509_STORE_free($x509_store); # $x509_store - value corresponding to openssl's X509_STORE structure =item * X509_STORE_add_lookup Adds a lookup to an X509_STORE for a given lookup method. my $method = &Net::SSLeay::X509_LOOKUP_hash_dir; my $rv = Net::SSLeay::X509_STORE_add_lookup($x509_store, $method); # $method - value corresponding to openssl's X509_LOOKUP_METHOD structure # $x509_store - value corresponding to openssl's X509_STORE structure # # returns: value corresponding to openssl's X509_LOOKUP structure Check openssl doc L<https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html|https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html> =item * X509_STORE_CTX_set_error Sets the error code of $ctx to $s. For example it might be used in a verification callback to set an error based on additional checks. Net::SSLeay::X509_STORE_CTX_set_error($x509_store_ctx, $s); # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure # $s - (integer) error id # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html|http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html> =item * X509_STORE_add_cert Adds X509 certificate $x into the X509_STORE $store. my $rv = Net::SSLeay::X509_STORE_add_cert($store, $x); # $store - value corresponding to openssl's X509_STORE structure # $x - value corresponding to openssl's X509 structure # # returns: 1 on success, 0 on failure =item * X509_STORE_add_crl Adds X509 CRL $x into the X509_STORE $store. my $rv = Net::SSLeay::X509_STORE_add_crl($store, $x); # $store - value corresponding to openssl's X509_STORE structure # $x - value corresponding to openssl's X509_CRL structure # # returns: 1 on success, 0 on failure =item * X509_STORE_set1_param ??? (more info needed) my $rv = Net::SSLeay::X509_STORE_set1_param($store, $pm); # $store - value corresponding to openssl's X509_STORE structure # $pm - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: 1 on success, 0 on failure =item * X509_LOOKUP_hash_dir Returns an X509_LOOKUP structure that instructs an X509_STORE to load files from a directory containing certificates with filenames in the format I<hash.N> or crls with filenames in the format I<hash.>B<r>I<N> my $rv = Net::SSLeay::X509_LOOKUP_hash_dir(); # # returns: value corresponding to openssl's X509_LOOKUP_METHOD structure, with the hashed directory method Check openssl doc L<https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html|https://www.openssl.org/docs/man1.1.1/man3/X509_load_crl_file.html> =item * X509_LOOKUP_add_dir Add a directory to an X509_LOOKUP structure, usually obtained from X509_STORE_add_lookup. my $method = &Net::SSLeay::X509_LOOKUP_hash_dir; my $lookup = Net::SSLeay::X509_STORE_add_lookup($x509_store, $method); my $type = &Net::SSLeay::X509_FILETYPE_PEM; Net::SSLeay::X509_LOOKUP_add_dir($lookup, $dir, $type); # $lookup - value corresponding to openssl's X509_LOOKUP structure # $dir - string path to a directory s# $type - constant corresponding to the type of file in the directory - can be X509_FILETYPE_PEM, X509_FILETYPE_DEFAULT, or X509_FILETYPE_ASN1 =item * X509_STORE_set_flags Net::SSLeay::X509_STORE_set_flags($ctx, $flags); # $ctx - value corresponding to openssl's X509_STORE structure # $flags - (unsigned long) flags to be set (bitmask) # # returns: no return value #to create $flags value use corresponding constants like $flags = Net::SSLeay::X509_V_FLAG_CRL_CHECK(); For more details about $flags bitmask see L</X509_VERIFY_PARAM_set_flags>. =item * X509_STORE_set_purpose Net::SSLeay::X509_STORE_set_purpose($ctx, $purpose); # $ctx - value corresponding to openssl's X509_STORE structure # $purpose - (integer) purpose identifier # # returns: no return value For more details about $purpose identifier check L</CTX_set_purpose>. =item * X509_STORE_set_trust Net::SSLeay::X509_STORE_set_trust($ctx, $trust); # $ctx - value corresponding to openssl's X509_STORE structure # $trust - (integer) trust identifier # # returns: no return value For more details about $trust identifier check L</CTX_set_trust>. =back =head3 Low Level API: X509_INFO related functions =over =item * sk_X509_INFO_num Returns the number of values in a STACK_OF(X509_INFO) structure. my $rv = Net::SSLeay::sk_X509_INFO_num($sk_x509_info); # $sk_x509_info - value corresponding to openssl's STACK_OF(X509_INFO) structure # # returns: number of values in $sk_X509_info =item * sk_X509_INFO_value Returns the value of a STACK_OF(X509_INFO) structure at a given index. my $rv = Net::SSLeay::sk_X509_INFO_value($sk_x509_info, $index); # $sk_x509_info - value corresponding to openssl's STACK_OF(X509_INFO) structure # $index - index into the stack # # returns: value corresponding to openssl's X509_INFO structure at the given index =item * P_X509_INFO_get_x509 Returns the X509 structure stored in an X509_INFO structure. my $rv = Net::SSLeay::P_X509_INFO_get_x509($x509_info); # $x509_info - value corresponding to openssl's X509_INFO structure # # returns: value corresponding to openssl's X509 structure =back =head3 Low level API: X509_VERIFY_PARAM_* related functions =over =item * X509_VERIFY_PARAM_add0_policy Enables policy checking (it is disabled by default) and adds $policy to the acceptable policy set. my $rv = Net::SSLeay::X509_VERIFY_PARAM_add0_policy($param, $policy); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $policy - value corresponding to openssl's ASN1_OBJECT structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_add0_table ??? (more info needed) my $rv = Net::SSLeay::X509_VERIFY_PARAM_add0_table($param); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: 1 on success, 0 on failure =item * X509_VERIFY_PARAM_add1_host B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Adds an additional reference identifier that can match the peer's certificate. my $rv = Net::SSLeay::X509_VERIFY_PARAM_add1_host($param, $name); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $name - (string) name to be set # # returns: 1 on success, 0 on failure See also OpenSSL docs, L</X509_VERIFY_PARAM_set1_host> and L</X509_VERIFY_PARAM_set_hostflags> for more information, including wildcard matching. Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_clear_flags Clears the flags $flags in param. my $rv = Net::SSLeay::X509_VERIFY_PARAM_clear_flags($param, $flags); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $flags - (unsigned long) flags to be set (bitmask) # # returns: 1 on success, 0 on failure For more details about $flags bitmask see L</X509_VERIFY_PARAM_set_flags>. Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_free Frees up the X509_VERIFY_PARAM structure. Net::SSLeay::X509_VERIFY_PARAM_free($param); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: no return value =item * X509_VERIFY_PARAM_get0_peername B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Returns the DNS hostname or subject CommonName from the peer certificate that matched one of the reference identifiers. my $rv = Net::SSLeay::X509_VERIFY_PARAM_get0_peername($param); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: (string) name e.g. '*.example.com' or undef Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_get_depth Returns the current verification depth. my $rv = Net::SSLeay::X509_VERIFY_PARAM_get_depth($param); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: (ineger) depth Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_get_flags Returns the current verification flags. my $rv = Net::SSLeay::X509_VERIFY_PARAM_get_flags($param); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: (unsigned long) flags to be set (bitmask) For more details about returned flags bitmask see L</X509_VERIFY_PARAM_set_flags>. Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set_flags my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_flags($param, $flags); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $flags - (unsigned long) flags to be set (bitmask) # # returns: 1 on success, 0 on failure #to create $flags value use corresponding constants like $flags = Net::SSLeay::X509_V_FLAG_CRL_CHECK(); For more details about $flags bitmask, see the OpenSSL docs below. Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_inherit ??? (more info needed) my $rv = Net::SSLeay::X509_VERIFY_PARAM_inherit($to, $from); # $to - value corresponding to openssl's X509_VERIFY_PARAM structure # $from - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: 1 on success, 0 on failure =item * X509_VERIFY_PARAM_lookup Finds X509_VERIFY_PARAM by name. my $rv = Net::SSLeay::X509_VERIFY_PARAM_lookup($name); # $name - (string) name we want to find # # returns: value corresponding to openssl's X509_VERIFY_PARAM structure (0 on failure) =item * X509_VERIFY_PARAM_new Creates a new X509_VERIFY_PARAM structure. my $rv = Net::SSLeay::X509_VERIFY_PARAM_new(); # # returns: value corresponding to openssl's X509_VERIFY_PARAM structure (0 on failure) =item * X509_VERIFY_PARAM_set1 Sets the name of X509_VERIFY_PARAM structure $to to the same value as the name of X509_VERIFY_PARAM structure $from. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1($to, $from); # $to - value corresponding to openssl's X509_VERIFY_PARAM structure # $from - value corresponding to openssl's X509_VERIFY_PARAM structure # # returns: 1 on success, 0 on failure =item * X509_VERIFY_PARAM_set1_email B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Sets the expected RFC822 email address to email. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_email($param, $email); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $email - (string) email to be set # # returns: 1 on success, 0 on failure Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set1_host B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Sets the expected DNS hostname to name clearing any previously specified host name or names. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_host($param, $name); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $name - (string) name to be set # # returns: 1 on success, 0 on failure See also OpenSSL docs, L</X509_VERIFY_PARAM_add1_host> and L</X509_VERIFY_PARAM_set_hostflags> for more information, including wildcard matching. Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set1_ip B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Sets the expected IP address to ip. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_ip($param, $ip); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $ip - (binary) 4 octet IPv4 or 16 octet IPv6 address # # returns: 1 on success, 0 on failure Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set1_ip_asc B<COMPATIBILITY:> not available in Net-SSLeay-1.82 and before; requires at least OpenSSL 1.0.2 Sets the expected IP address to ipasc. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_asc($param, $ipasc); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $ip - (string) IPv4 or IPv6 address # # returns: 1 on success, 0 on failure Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set1_name Sets the name of X509_VERIFY_PARAM structure $param to $name. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_name($param, $name); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $name - (string) name to be set # # returns: 1 on success, 0 on failure =item * X509_VERIFY_PARAM_set1_policies Enables policy checking (it is disabled by default) and sets the acceptable policy set to policies. Any existing policy set is cleared. The policies parameter can be 0 to clear an existing policy set. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_policies($param, $policies); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $policies - value corresponding to openssl's STACK_OF(ASN1_OBJECT) structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set_depth Sets the maximum verification depth to depth. That is the maximum number of untrusted CA certificates that can appear in a chain. Net::SSLeay::X509_VERIFY_PARAM_set_depth($param, $depth); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $depth - (integer) depth to be set # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set_hostflags Net::SSLeay::X509_VERIFY_PARAM_set_hostflags($param, $flags); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $flags - (unsigned int) flags to be set (bitmask) # # returns: no return value See also OpenSSL docs, L</X509_VERIFY_PARAM_add1_host> and L</X509_VERIFY_PARAM_set1_host> for more information. The flags for controlling wildcard checks and other features are defined in OpenSSL docs. Check openssl doc L<https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set_purpose Sets the verification purpose in $param to $purpose. This determines the acceptable purpose of the certificate chain, for example SSL client or SSL server. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_purpose($param, $purpose); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $purpose - (integer) purpose identifier # # returns: 1 on success, 0 on failure For more details about $purpose identifier check L</CTX_set_purpose>. Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set_time Sets the verification time in $param to $t. Normally the current time is used. Net::SSLeay::X509_VERIFY_PARAM_set_time($param, $t); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $t - (time_t) time in seconds since 1.1.1970 # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_set_trust Sets the trust setting in $param to $trust. my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_trust($param, $trust); # $param - value corresponding to openssl's X509_VERIFY_PARAM structure # $trust - (integer) trust identifier # # returns: 1 on success, 0 on failure For more details about $trust identifier check L</CTX_set_trust>. Check openssl doc L<http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html|http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html> =item * X509_VERIFY_PARAM_table_cleanup ??? (more info needed) Net::SSLeay::X509_VERIFY_PARAM_table_cleanup(); # # returns: no return value =back =head3 Low level API: Cipher (EVP_CIPHER_*) related functions =over =item * EVP_get_cipherbyname B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before Returns an EVP_CIPHER structure when passed a cipher name. my $rv = Net::SSLeay::EVP_get_cipherbyname($name); # $name - (string) cipher name e.g. 'aes-128-cbc', 'camellia-256-ecb', 'des-ede', ... # # returns: value corresponding to openssl's EVP_CIPHER structure Check openssl doc L<http://www.openssl.org/docs/crypto/EVP_EncryptInit.html|http://www.openssl.org/docs/crypto/EVP_EncryptInit.html> =back =head3 Low level API: Digest (EVP_MD_*) related functions =over =item * OpenSSL_add_all_digests B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before Net::SSLeay::OpenSSL_add_all_digests(); # no args, no return value http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html =item * P_EVP_MD_list_all B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-1.0.0 B<NOTE:> Does not exactly correspond to any low level API function my $rv = Net::SSLeay::P_EVP_MD_list_all(); # # returns: arrayref - list of available digest names The returned digest names correspond to values expected by L</EVP_get_digestbyname>. Note that some of the digests are available by default and some only after calling L</OpenSSL_add_all_digests>. =item * EVP_get_digestbyname B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before my $rv = Net::SSLeay::EVP_get_digestbyname($name); # $name - string with digest name # # returns: value corresponding to openssl's EVP_MD structure The $name param can be: md2 md4 md5 mdc2 ripemd160 sha sha1 sha224 sha256 sha512 whirlpool Or better check the supported digests by calling L</P_EVP_MD_list_all>. =item * EVP_MD_type B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before my $rv = Net::SSLeay::EVP_MD_type($md); # $md - value corresponding to openssl's EVP_MD structure # # returns: the NID (integer) of the OBJECT IDENTIFIER representing the given message digest =item * EVP_MD_size B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before my $rv = Net::SSLeay::EVP_MD_size($md); # $md - value corresponding to openssl's EVP_MD structure # # returns: the size of the message digest in bytes (e.g. 20 for SHA1) =item * EVP_MD_CTX_md B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Net::SSLeay::EVP_MD_CTX_md($ctx); # $ctx - value corresponding to openssl's EVP_MD_CTX structure # # returns: value corresponding to openssl's EVP_MD structure =item * EVP_MD_CTX_create B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Allocates, initializes and returns a digest context. my $rv = Net::SSLeay::EVP_MD_CTX_create(); # # returns: value corresponding to openssl's EVP_MD_CTX structure The complete idea behind EVP_MD_CTX looks like this example: Net::SSLeay::OpenSSL_add_all_digests(); my $md = Net::SSLeay::EVP_get_digestbyname("sha1"); my $ctx = Net::SSLeay::EVP_MD_CTX_create(); Net::SSLeay::EVP_DigestInit($ctx, $md); while(my $chunk = get_piece_of_data()) { Net::SSLeay::EVP_DigestUpdate($ctx,$chunk); } my $result = Net::SSLeay::EVP_DigestFinal($ctx); Net::SSLeay::EVP_MD_CTX_destroy($ctx); print "digest=", unpack('H*', $result), "\n"; #print hex value =item * EVP_DigestInit_ex B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Sets up digest context $ctx to use a digest $type from ENGINE $impl, $ctx must be initialized before calling this function, type will typically be supplied by a function such as L</EVP_get_digestbyname>. If $impl is 0 then the default implementation of digest $type is used. my $rv = Net::SSLeay::EVP_DigestInit_ex($ctx, $type, $impl); # $ctx - value corresponding to openssl's EVP_MD_CTX structure # $type - value corresponding to openssl's EVP_MD structure # $impl - value corresponding to openssl's ENGINE structure # # returns: 1 for success and 0 for failure =item * EVP_DigestInit B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Behaves in the same way as L</EVP_DigestInit_ex> except the passed context $ctx does not have to be initialized, and it always uses the default digest implementation. my $rv = Net::SSLeay::EVP_DigestInit($ctx, $type); # $ctx - value corresponding to openssl's EVP_MD_CTX structure # $type - value corresponding to openssl's EVP_MD structure # # returns: 1 for success and 0 for failure =item * EVP_MD_CTX_destroy B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Cleans up digest context $ctx and frees up the space allocated to it, it should be called only on a context created using L</EVP_MD_CTX_create>. Net::SSLeay::EVP_MD_CTX_destroy($ctx); # $ctx - value corresponding to openssl's EVP_MD_CTX structure # # returns: no return value =item * EVP_DigestUpdate B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 my $rv = Net::SSLeay::EVP_DigestUpdate($ctx, $data); # $ctx - value corresponding to openssl's EVP_MD_CTX structure # $data - data to be hashed # # returns: 1 for success and 0 for failure =item * EVP_DigestFinal_ex B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Retrieves the digest value from $ctx. After calling L</EVP_DigestFinal_ex> no additional calls to L</EVP_DigestUpdate> can be made, but L</EVP_DigestInit_ex> can be called to initialize a new digest operation. my $digest_value = Net::SSLeay::EVP_DigestFinal_ex($ctx); # $ctx - value corresponding to openssl's EVP_MD_CTX structure # # returns: hash value (binary) #to get printable (hex) value of digest use: print unpack('H*', $digest_value); =item * EVP_DigestFinal B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Similar to L</EVP_DigestFinal_ex> except the digest context ctx is automatically cleaned up. my $rv = Net::SSLeay::EVP_DigestFinal($ctx); # $ctx - value corresponding to openssl's EVP_MD_CTX structure # # returns: hash value (binary) #to get printable (hex) value of digest use: print unpack('H*', $digest_value); =item * MD2 B<COMPATIBILITY:> no supported by default in openssl-1.0.0 Computes MD2 from given $data (all data needs to be loaded into memory) my $digest = Net::SSLeay::MD2($data); print "digest(hexadecimal)=", unpack('H*', $digest); =item * MD4 Computes MD4 from given $data (all data needs to be loaded into memory) my $digest = Net::SSLeay::MD4($data); print "digest(hexadecimal)=", unpack('H*', $digest); =item * MD5 Computes MD5 from given $data (all data needs to be loaded into memory) my $digest = Net::SSLeay::MD5($data); print "digest(hexadecimal)=", unpack('H*', $digest); =item * RIPEMD160 Computes RIPEMD160 from given $data (all data needs to be loaded into memory) my $digest = Net::SSLeay::RIPEMD160($data); print "digest(hexadecimal)=", unpack('H*', $digest); =item * SHA1 B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before Computes SHA1 from given $data (all data needs to be loaded into memory) my $digest = Net::SSLeay::SHA1($data); print "digest(hexadecimal)=", unpack('H*', $digest); =item * SHA256 B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.8 Computes SHA256 from given $data (all data needs to be loaded into memory) my $digest = Net::SSLeay::SHA256($data); print "digest(hexadecimal)=", unpack('H*', $digest); =item * SHA512 B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.8 Computes SHA512 from given $data (all data needs to be loaded into memory) my $digest = Net::SSLeay::SHA512($data); print "digest(hexadecimal)=", unpack('H*', $digest); =item * EVP_Digest B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7 Computes "any" digest from given $data (all data needs to be loaded into memory) my $md = Net::SSLeay::EVP_get_digestbyname("sha1"); #or any other algorithm my $digest = Net::SSLeay::EVP_Digest($data, $md); print "digest(hexadecimal)=", unpack('H*', $digest); =item * EVP_sha1 B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before my $md = Net::SSLeay::EVP_sha1(); # # returns: value corresponding to openssl's EVP_MD structure =item * EVP_sha256 B<COMPATIBILITY:> requires at least openssl-0.9.8 my $md = Net::SSLeay::EVP_sha256(); # # returns: value corresponding to openssl's EVP_MD structure =item * EVP_sha512 B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.8 my $md = Net::SSLeay::EVP_sha512(); # # returns: value corresponding to openssl's EVP_MD structure =item * EVP_add_digest my $rv = Net::SSLeay::EVP_add_digest($digest); # $digest - value corresponding to openssl's EVP_MD structure # # returns: 1 on success, 0 otherwise =back =head3 Low level API: CIPHER_* related functions =over =item * CIPHER_get_name B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before Returns name of the cipher used. my $rv = Net::SSLeay::CIPHER_description($cipher); # $cipher - value corresponding to openssl's SSL_CIPHER structure # # returns: (string) cipher name e.g. 'DHE-RSA-AES256-SHA' Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html> Example: my $ssl_cipher = Net::SSLeay::get_current_cipher($ssl); my $cipher_name = Net::SSLeay::CIPHER_get_name($ssl_cipher); =item * CIPHER_description Returns a textual description of the cipher used. ??? (does this function really work?) my $rv = Net::SSLeay::CIPHER_description($cipher, $buf, $size); # $cipher - value corresponding to openssl's SSL_CIPHER structure # $bufer - (string/buffer) ??? # $size - (integer) ??? # # returns: (string) cipher description e.g. 'DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1' Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html> =item * CIPHER_get_bits Returns the number of secret bits used for cipher. my $rv = Net::SSLeay::CIPHER_get_bits($c); # $c - value corresponding to openssl's SSL_CIPHER structure # # returns: (integert) number of secret bits, 0 on error Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html|http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html> =back =head3 Low level API: RSA_* related functions =over =item * RSA_generate_key Generates a key pair and returns it in a newly allocated RSA structure. The pseudo-random number generator must be seeded prior to calling RSA_generate_key. my $rv = Net::SSLeay::RSA_generate_key($bits, $e, $perl_cb, $perl_cb_arg); # $bits - (integer) modulus size in bits e.g. 512, 1024, 2048 # $e - (integer) public exponent, an odd number, typically 3, 17 or 65537 # $perl_cb - [optional] reference to perl callback function # $perl_cb_arg - [optional] data that will be passed to callback function when invoked # # returns: value corresponding to openssl's RSA structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/RSA_generate_key.html|http://www.openssl.org/docs/crypto/RSA_generate_key.html> =item * RSA_free Frees the RSA structure and its components. The key is erased before the memory is returned to the system. Net::SSLeay::RSA_free($r); # $r - value corresponding to openssl's RSA structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/RSA_new.html|http://www.openssl.org/docs/crypto/RSA_new.html> =item * RSA_get_key_parameters Returns a list of pointers to BIGNUMs representing the parameters of the key in this order: (n, e, d, p, q, dmp1, dmq1, iqmp) Caution: returned list consists of SV pointers to BIGNUMs, which would need to be blessed as Crypt::OpenSSL::Bignum for further use my (@params) = RSA_get_key_parameters($r); =back =head3 Low level API: BIO_* related functions =over =item * BIO_eof Returns 1 if the BIO has read EOF, the precise meaning of 'EOF' varies according to the BIO type. my $rv = Net::SSLeay::BIO_eof($s); # $s - value corresponding to openssl's BIO structure # # returns: 1 if EOF has been reached 0 otherwise Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_ctrl.html|http://www.openssl.org/docs/crypto/BIO_ctrl.html> =item * BIO_f_ssl Returns the SSL BIO method. This is a filter BIO which is a wrapper round the OpenSSL SSL routines adding a BIO 'flavour' to SSL I/O. my $rv = Net::SSLeay::BIO_f_ssl(); # # returns: value corresponding to openssl's BIO_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html> =item * BIO_free Frees up a single BIO. my $rv = Net::SSLeay::BIO_free($bio;); # $bio; - value corresponding to openssl's BIO structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_new.html|http://www.openssl.org/docs/crypto/BIO_new.html> =item * BIO_new Returns a new BIO using method $type my $rv = Net::SSLeay::BIO_new($type); # $type - value corresponding to openssl's BIO_METHOD structure # # returns: value corresponding to openssl's BIO structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_new.html|http://www.openssl.org/docs/crypto/BIO_new.html> =item * BIO_new_buffer_ssl_connect Creates a new BIO chain consisting of a buffering BIO, an SSL BIO (using ctx) and a connect BIO. my $rv = Net::SSLeay::BIO_new_buffer_ssl_connect($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: value corresponding to openssl's BIO structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html> =item * BIO_new_file Creates a new file BIO with mode $mode the meaning of mode is the same as the stdio function fopen(). The BIO_CLOSE flag is set on the returned BIO. my $rv = Net::SSLeay::BIO_new_file($filename, $mode); # $filename - (string) filename # $mode - (string) opening mode (as mode by stdio function fopen) # # returns: value corresponding to openssl's BIO structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_s_file.html|http://www.openssl.org/docs/crypto/BIO_s_file.html> =item * BIO_new_ssl Allocates an SSL BIO using SSL_CTX ctx and using client mode if client is non zero. my $rv = Net::SSLeay::BIO_new_ssl($ctx, $client); # $ctx - value corresponding to openssl's SSL_CTX structure # $client - (integer) 0 or 1 - indicates ssl client mode # # returns: value corresponding to openssl's BIO structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html> =item * BIO_new_ssl_connect Creates a new BIO chain consisting of an SSL BIO (using ctx) followed by a connect BIO. my $rv = Net::SSLeay::BIO_new_ssl_connect($ctx); # $ctx - value corresponding to openssl's SSL_CTX structure # # returns: value corresponding to openssl's BIO structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html> =item * BIO_pending Return the number of pending characters in the BIOs read buffers. my $rv = Net::SSLeay::BIO_pending($s); # $s - value corresponding to openssl's BIO structure # # returns: the amount of pending data Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_ctrl.html|http://www.openssl.org/docs/crypto/BIO_ctrl.html> =item * BIO_wpending Return the number of pending characters in the BIOs write buffers. my $rv = Net::SSLeay::BIO_wpending($s); # $s - value corresponding to openssl's BIO structure # # returns: the amount of pending data Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_ctrl.html|http://www.openssl.org/docs/crypto/BIO_ctrl.html> =item * BIO_read Read the underlying descriptor. Net::SSLeay::BIO_read($s, $max); # $s - value corresponding to openssl's BIO structure # $max - [optional] max. bytes to read (if not specified, the value 32768 is used) # # returns: data Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_read.html|http://www.openssl.org/docs/crypto/BIO_read.html> =item * BIO_write Attempts to write data from $buffer to BIO $b. my $rv = Net::SSLeay::BIO_write($b, $buffer); # $b - value corresponding to openssl's BIO structure # $buffer - data # # returns: amount of data successfully written # or that no data was successfully read or written if the result is 0 or -1 # or -2 when the operation is not implemented in the specific BIO type Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_read.html|http://www.openssl.org/docs/crypto/BIO_read.html> =item * BIO_s_mem Return the memory BIO method function. my $rv = Net::SSLeay::BIO_s_mem(); # # returns: value corresponding to openssl's BIO_METHOD structure (0 on failure) Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_s_mem.html|http://www.openssl.org/docs/crypto/BIO_s_mem.html> =item * BIO_ssl_copy_session_id Copies an SSL session id between BIO chains from and to. It does this by locating the SSL BIOs in each chain and calling SSL_copy_session_id() on the internal SSL pointer. my $rv = Net::SSLeay::BIO_ssl_copy_session_id($to, $from); # $to - value corresponding to openssl's BIO structure # $from - value corresponding to openssl's BIO structure # # returns: 1 on success, 0 on failure Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html> =item * BIO_ssl_shutdown Closes down an SSL connection on BIO chain bio. It does this by locating the SSL BIO in the chain and calling SSL_shutdown() on its internal SSL pointer. Net::SSLeay::BIO_ssl_shutdown($ssl_bio); # $ssl_bio - value corresponding to openssl's BIO structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/BIO_f_ssl.html|http://www.openssl.org/docs/crypto/BIO_f_ssl.html> =back =head3 Low level API: Server side Server Name Indication (SNI) support =over =item * set_tlsext_host_name TBA =item * get_servername TBA =item * get_servername_type TBA =item * CTX_set_tlsext_servername_callback B<COMPATIBILITY:> requires at least OpenSSL 0.9.8f This function is used in a server to support Server side Server Name Indication (SNI). Net::SSLeay::CTX_set_tlsext_servername_callback($ctx, $code) # $ctx - SSL context # $code - reference to a subroutine that will be called when a new connection is being initiated # # returns: no return value On the client side: use set_tlsext_host_name($ssl, $servername) before initiating the SSL connection. On the server side: Set up an additional SSL_CTX() for each different certificate; Add a servername callback to each SSL_CTX() using CTX_set_tlsext_servername_callback(); The callback function is required to retrieve the client-supplied servername with get_servername(ssl). Figure out the right SSL_CTX to go with that host name, then switch the SSL object to that SSL_CTX with set_SSL_CTX(). Example: # set callback Net::SSLeay::CTX_set_tlsext_servername_callback($ctx, sub { my $ssl = shift; my $h = Net::SSLeay::get_servername($ssl); Net::SSLeay::set_SSL_CTX($ssl, $hostnames{$h}->{ctx}) if exists $hostnames{$h}; } ); More complete example: # ... initialize Net::SSLeay my %hostnames = ( 'sni1' => { cert=>'sni1.pem', key=>'sni1.key' }, 'sni2' => { cert=>'sni2.pem', key=>'sni2.key' }, ); # create a new context for each certificate/key pair for my $name (keys %hostnames) { $hostnames{$name}->{ctx} = Net::SSLeay::CTX_new or die; Net::SSLeay::CTX_set_cipher_list($hostnames{$name}->{ctx}, 'ALL'); Net::SSLeay::set_cert_and_key($hostnames{$name}->{ctx}, $hostnames{$name}->{cert}, $hostnames{$name}->{key}) or die; } # create default context my $ctx = Net::SSLeay::CTX_new or die; Net::SSLeay::CTX_set_cipher_list($ctx, 'ALL'); Net::SSLeay::set_cert_and_key($ctx, 'cert.pem','key.pem') or die; # set callback Net::SSLeay::CTX_set_tlsext_servername_callback($ctx, sub { my $ssl = shift; my $h = Net::SSLeay::get_servername($ssl); Net::SSLeay::set_SSL_CTX($ssl, $hostnames{$h}->{ctx}) if exists $hostnames{$h}; } ); # ... later $s = Net::SSLeay::new($ctx); Net::SSLeay::set_fd($s, fileno($accepted_socket)); Net::SSLeay::accept($s); =back =head3 Low level API: NPN (next protocol negotiation) related functions NPN is being replaced with ALPN, a more recent TLS extension for application protocol negotiation that's in process of being adopted by IETF. Please look below for APLN API description. Simple approach for using NPN support looks like this: ### client side use Net::SSLeay; use IO::Socket::INET; Net::SSLeay::initialize(); my $sock = IO::Socket::INET->new(PeerAddr=>'encrypted.google.com:443') or die; my $ctx = Net::SSLeay::CTX_tlsv1_new() or die; Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL); Net::SSLeay::CTX_set_next_proto_select_cb($ctx, ['http1.1','spdy/2']); my $ssl = Net::SSLeay::new($ctx) or die; Net::SSLeay::set_fd($ssl, fileno($sock)) or die; Net::SSLeay::connect($ssl); warn "client:negotiated=",Net::SSLeay::P_next_proto_negotiated($ssl), "\n"; warn "client:last_status=", Net::SSLeay::P_next_proto_last_status($ssl), "\n"; ### server side use Net::SSLeay; use IO::Socket::INET; Net::SSLeay::initialize(); my $ctx = Net::SSLeay::CTX_tlsv1_new() or die; Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL); Net::SSLeay::set_cert_and_key($ctx, "cert.pem", "key.pem"); Net::SSLeay::CTX_set_next_protos_advertised_cb($ctx, ['spdy/2','http1.1']); my $sock = IO::Socket::INET->new(LocalAddr=>'localhost', LocalPort=>5443, Proto=>'tcp', Listen=>20) or die; while (1) { my $ssl = Net::SSLeay::new($ctx); warn("server:waiting for incoming connection...\n"); my $fd = $sock->accept(); Net::SSLeay::set_fd($ssl, $fd->fileno); Net::SSLeay::accept($ssl); warn "server:negotiated=",Net::SSLeay::P_next_proto_negotiated($ssl),"\n"; my $got = Net::SSLeay::read($ssl); Net::SSLeay::ssl_write_all($ssl, "length=".length($got)); Net::SSLeay::free($ssl); $fd->close(); } # check with: openssl s_client -connect localhost:5443 -nextprotoneg http/1.1,spdy/2 Please note that the selection (negotiation) is performed by client side, the server side simply advertise the list of supported protocols. Advanced approach allows you to implement your own negotiation algorithm. #see below documentation for: Net::SSleay::CTX_set_next_proto_select_cb($ctx, $perl_callback_function, $callback_data); Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $perl_callback_function, $callback_data); Detection of NPN support (works even in older Net::SSLeay versions): use Net::SSLeay; if (exists &Net::SSLeay::P_next_proto_negotiated) { # do NPN stuff } =over =item * CTX_set_next_proto_select_cb B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1 B<NOTE:> You need CTX_set_next_proto_select_cb on B<client side> of SSL connection. Simple usage - in this case a "common" negotiation algorithm (as implemented by openssl's function SSL_select_next_proto) is used. $rv = Net::SSleay::CTX_set_next_proto_select_cb($ctx, $arrayref); # $ctx - value corresponding to openssl's SSL_CTX structure # $arrayref - list of accepted protocols - e.g. ['http1.0', 'http1.1'] # # returns: 0 on success, 1 on failure Advanced usage (you probably do not need this): $rv = Net::SSleay::CTX_set_next_proto_select_cb($ctx, $perl_callback_function, $callback_data); # $ctx - value corresponding to openssl's SSL_CTX structure # $perl_callback_function - reference to perl function # $callback_data - [optional] data to passed to callback function when invoked # # returns: 0 on success, 1 on failure # where callback function looks like sub npn_advertised_cb_invoke { my ($ssl, $arrayref_proto_list_advertised_by_server, $callback_data) = @_; my $status; # ... $status = 1; #status can be: # 0 - OPENSSL_NPN_UNSUPPORTED # 1 - OPENSSL_NPN_NEGOTIATED # 2 - OPENSSL_NPN_NO_OVERLAP return $status, ['http1.1','spdy/2']; # the callback has to return 2 values } To undefine/clear this callback use: Net::SSleay::CTX_set_next_proto_select_cb($ctx, undef); =item * CTX_set_next_protos_advertised_cb B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1 B<NOTE:> You need CTX_set_next_proto_select_cb on B<server side> of SSL connection. Simple usage: $rv = Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $arrayref); # $ctx - value corresponding to openssl's SSL_CTX structure # $arrayref - list of advertised protocols - e.g. ['http1.0', 'http1.1'] # # returns: 0 on success, 1 on failure Advanced usage (you probably do not need this): $rv = Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $perl_callback_function, $callback_data); # $ctx - value corresponding to openssl's SSL_CTX structure # $perl_callback_function - reference to perl function # $callback_data - [optional] data to passed to callback function when invoked # # returns: 0 on success, 1 on failure # where callback function looks like sub npn_advertised_cb_invoke { my ($ssl, $callback_data) = @_; # ... return ['http1.1','spdy/2']; # the callback has to return arrayref } To undefine/clear this callback use: Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, undef); =item * P_next_proto_negotiated B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1 Returns the name of negotiated protocol for given SSL connection $ssl. $rv = Net::SSLeay::P_next_proto_negotiated($ssl) # $ssl - value corresponding to openssl's SSL structure # # returns: (string) negotiated protocol name (or undef if no negotiation was done or failed with fatal error) =item * P_next_proto_last_status B<COMPATIBILITY:> not available in Net-SSLeay-1.45 and before; requires at least openssl-1.0.1 Returns the result of the last negotiation for given SSL connection $ssl. $rv = Net::SSLeay::P_next_proto_last_status($ssl) # $ssl - value corresponding to openssl's SSL structure # # returns: (integer) negotiation status # 0 - OPENSSL_NPN_UNSUPPORTED # 1 - OPENSSL_NPN_NEGOTIATED # 2 - OPENSSL_NPN_NO_OVERLAP =back =head3 Low level API: ALPN (application layer protocol negotiation) related functions Application protocol can be negotiated via two different mechanisms employing two different TLS extensions: NPN (obsolete) and ALPN (recommended). The API is rather similar, with slight differences reflecting protocol specifics. In particular, with ALPN the protocol negotiation takes place on server, while with NPN the client implements the protocol negotiation logic. With ALPN, the most basic implementation looks like this: ### client side use Net::SSLeay; use IO::Socket::INET; Net::SSLeay::initialize(); my $sock = IO::Socket::INET->new(PeerAddr=>'encrypted.google.com:443') or die; my $ctx = Net::SSLeay::CTX_tlsv1_new() or die; Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL); Net::SSLeay::CTX_set_alpn_protos($ctx, ['http/1.1', 'http/2.0', 'spdy/3]); my $ssl = Net::SSLeay::new($ctx) or die; Net::SSLeay::set_fd($ssl, fileno($sock)) or die; Net::SSLeay::connect($ssl); warn "client:selected=",Net::SSLeay::P_alpn_selected($ssl), "\n"; ### server side use Net::SSLeay; use IO::Socket::INET; Net::SSLeay::initialize(); my $ctx = Net::SSLeay::CTX_tlsv1_new() or die; Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL); Net::SSLeay::set_cert_and_key($ctx, "cert.pem", "key.pem"); Net::SSLeay::CTX_set_alpn_select_cb($ctx, ['http/1.1', 'http/2.0', 'spdy/3]); my $sock = IO::Socket::INET->new(LocalAddr=>'localhost', LocalPort=>5443, Proto=>'tcp', Listen=>20) or die; while (1) { my $ssl = Net::SSLeay::new($ctx); warn("server:waiting for incoming connection...\n"); my $fd = $sock->accept(); Net::SSLeay::set_fd($ssl, $fd->fileno); Net::SSLeay::accept($ssl); warn "server:selected=",Net::SSLeay::P_alpn_selected($ssl),"\n"; my $got = Net::SSLeay::read($ssl); Net::SSLeay::ssl_write_all($ssl, "length=".length($got)); Net::SSLeay::free($ssl); $fd->close(); } # check with: openssl s_client -connect localhost:5443 -alpn spdy/3,http/1.1 Advanced approach allows you to implement your own negotiation algorithm. #see below documentation for: Net::SSleay::CTX_set_alpn_select_cb($ctx, $perl_callback_function, $callback_data); Detection of ALPN support (works even in older Net::SSLeay versions): use Net::SSLeay; if (exists &Net::SSLeay::P_alpn_selected) { # do ALPN stuff } =over =item * CTX_set_alpn_select_cb B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2 B<NOTE:> You need CTX_set_alpn_select_cb on B<server side> of TLS connection. Simple usage - in this case a "common" negotiation algorithm (as implemented by openssl's function SSL_select_next_proto) is used. $rv = Net::SSleay::CTX_set_alpn_select_cb($ctx, $arrayref); # $ctx - value corresponding to openssl's SSL_CTX structure # $arrayref - list of accepted protocols - e.g. ['http/2.0', 'http/1.1', 'spdy/3'] # # returns: 0 on success, 1 on failure Advanced usage (you probably do not need this): $rv = Net::SSleay::CTX_set_alpn_select_cb($ctx, $perl_callback_function, $callback_data); # $ctx - value corresponding to openssl's SSL_CTX structure # $perl_callback_function - reference to perl function # $callback_data - [optional] data to passed to callback function when invoked # # returns: 0 on success, 1 on failure # where callback function looks like sub alpn_select_cb_invoke { my ($ssl, $arrayref_proto_list_advertised_by_client, $callback_data) = @_; # ... if ($negotiated) { return 'http/2.0'; } else { return undef; } } To undefine/clear this callback use: Net::SSleay::CTX_set_alpn_select_cb($ctx, undef); =item * set_alpn_protos B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2 B<NOTE:> You need set_alpn_protos on B<client side> of TLS connection. This adds list of supported application layer protocols to ClientHello message sent by a client. It advertises the enumeration of supported protocols: Net::SSLeay::set_alpn_protos($ssl, ['http/1.1', 'http/2.0', 'spdy/3]); # returns 0 on success =item * CTX_set_alpn_protos B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2 B<NOTE:> You need CTX_set_alpn_protos on B<client side> of TLS connection. This adds list of supported application layer protocols to ClientHello message sent by a client. It advertises the enumeration of supported protocols: Net::SSLeay::CTX_set_alpn_protos($ctx, ['http/1.1', 'http/2.0', 'spdy/3]); # returns 0 on success =item * P_alpn_selected B<COMPATIBILITY:> not available in Net-SSLeay-1.55 and before; requires at least openssl-1.0.2 Returns the name of negotiated protocol for given TLS connection $ssl. $rv = Net::SSLeay::P_alpn_selected($ssl) # $ssl - value corresponding to openssl's SSL structure # # returns: (string) negotiated protocol name (or undef if no negotiation was done or failed with fatal error) =back =head3 Low level API: DANE Support OpenSSL version 1.0.2 adds preliminary support RFC6698 Domain Authentication of Named Entities (DANE) Transport Layer Association within OpenSSL =over =item * SSL_get_tlsa_record_byname B<COMPATIBILITY:> DELETED from net-ssleay, since it is not supported by OpenSSL In order to facilitate DANE there is additional interface, SSL_get_tlsa_record_byname, accepting hostname, port and socket type that returns packed TLSA record. In order to make it even easier there is additional SSL_ctrl function that calls SSL_get_tlsa_record_byname for you. Latter is recommended for programmers that wish to maintain broader binary compatibility, e.g. make application work with both 1.0.2 and prior version (in which case call to SSL_ctrl with new code returning error would have to be ignored when running with prior version). Net::SSLeay::get_tlsa_record_byname($name, $port, $type); =back =head3 Low level API: Other functions =over =item * COMP_add_compression_method Adds the compression method cm with the identifier id to the list of available compression methods. This list is globally maintained for all SSL operations within this application. It cannot be set for specific SSL_CTX or SSL objects. my $rv = Net::SSLeay::COMP_add_compression_method($id, $cm); # $id - (integer) compression method id # 0 to 63: methods defined by the IETF # 64 to 192: external party methods assigned by IANA # 193 to 255: reserved for private use # # $cm - value corresponding to openssl's COMP_METHOD structure # # returns: 0 on success, 1 on failure (check the error queue to find out the reason) Check openssl doc L<http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html|http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html> =item * DH_free Frees the DH structure and its components. The values are erased before the memory is returned to the system. Net::SSLeay::DH_free($dh); # $dh - value corresponding to openssl's DH structure # # returns: no return value Check openssl doc L<http://www.openssl.org/docs/crypto/DH_new.html|http://www.openssl.org/docs/crypto/DH_new.html> =item * FIPS_mode_set Enable or disable FIPS mode in a FIPS capable OpenSSL. Net::SSLeay:: FIPS_mode_set($enable); # $enable - (integer) 1 to enable, 0 to disable =back =head3 Low level API: EC related functions =over =item * CTX_set_tmp_ecdh TBA =item * EC_KEY_free TBA =item * EC_KEY_new_by_curve_name TBA =item * EC_KEY_generate_key Generates a EC key and returns it in a newly allocated EC_KEY structure. The EC key then can be used to create a PKEY which can be used in calls like X509_set_pubkey. my $key = Net::SSLeay::EVP_PKEY_new(); my $ec = Net::SSLeay::EC_KEY_generate_key($curve); Net::SSLeay::EVP_PKEY_assign_EC_KEY($key,$ec); # $curve - curve name like 'secp521r1' or the matching Id (integer) of the curve # # returns: value corresponding to openssl's EC_KEY structure (0 on failure) This function has no equivalent in OpenSSL but combines multiple OpenSSL functions for an easier interface. =item * CTX_set_ecdh_auto, set_ecdh_auto These functions enable or disable the automatic curve selection on the server side by calling SSL_CTX_set_ecdh_auto or SSL_set_ecdh_auto respectively. If enabled the highest preference curve is automatically used for ECDH temporary keys used during key exchange. This function is no longer available for OpenSSL 1.1.0 or higher. Net::SSLeay::CTX_set_ecdh_auto($ctx,1); Net::SSLeay::set_ecdh_auto($ssl,1); =item * CTX_set1_curves_list, set1_curves_list These functions set the supported curves (in order of preference) by calling SSL_CTX_set1_curves_list or SSL_set1_curves_list respectively. For a TLS client these curves are offered to the server in the supported curves extension while on the server side these are used to determine the shared curve. These functions are only available since OpenSSL 1.1.0. Net::SSLeay::CTX_set1_curves_list($ctx,"P-521:P-384:P-256"); Net::SSLeay::set1_curves_list($ssl,"P-521:P-384:P-256"); =item * CTX_set1_groups_list, set1_groups_list These functions set the supported groups (in order of preference) by calling SSL_CTX_set1_groups_list or SSL_set1_groups_list respectively. This is practically the same as CTX_set1_curves_list and set1_curves_list except that all DH groups can be given as supported by TLS 1.3. These functions are only available since OpenSSL 1.1.1. Net::SSLeay::CTX_set1_groups_list($ctx,"P-521:P-384:P-256"); Net::SSLeay::set1_groups_list($ssl,"P-521:P-384:P-256"); =back =head2 Constants There are many openssl constants available in L<Net::SSLeay>. You can use them like this: use Net::SSLeay; print &Net::SSLeay::NID_commonName; #or print Net::SSLeay::NID_commonName(); Or you can import them and use: use Net::SSLeay qw/NID_commonName/; print &NID_commonName; #or print NID_commonName(); #or print NID_commonName; The constants names are derived from openssl constants, however constants starting with C<SSL_> prefix have name with C<SSL_> part stripped - e.g. openssl's constant C<SSL_OP_ALL> is available as C<Net::SSleay::OP_ALL> The list of all available constant names: =for comment the next part is the output of: perl helper_script/regen_openssl_constants.pl -gen-pod ASN1_STRFLGS_ESC_CTRL NID_netscape R_UNKNOWN_REMOTE_ERROR_TYPE ASN1_STRFLGS_ESC_MSB NID_netscape_base_url R_UNKNOWN_STATE ASN1_STRFLGS_ESC_QUOTE NID_netscape_ca_policy_url R_X509_LIB ASN1_STRFLGS_RFC2253 NID_netscape_ca_revocation_url SENT_SHUTDOWN CB_ACCEPT_EXIT NID_netscape_cert_extension SESSION_ASN1_VERSION CB_ACCEPT_LOOP NID_netscape_cert_sequence SESS_CACHE_BOTH CB_ALERT NID_netscape_cert_type SESS_CACHE_CLIENT CB_CONNECT_EXIT NID_netscape_comment SESS_CACHE_NO_AUTO_CLEAR CB_CONNECT_LOOP NID_netscape_data_type SESS_CACHE_NO_INTERNAL CB_EXIT NID_netscape_renewal_url SESS_CACHE_NO_INTERNAL_LOOKUP CB_HANDSHAKE_DONE NID_netscape_revocation_url SESS_CACHE_NO_INTERNAL_STORE CB_HANDSHAKE_START NID_netscape_ssl_server_name SESS_CACHE_OFF CB_LOOP NID_ns_sgc SESS_CACHE_SERVER CB_READ NID_organizationName SSL3_VERSION CB_READ_ALERT NID_organizationalUnitName SSLEAY_BUILT_ON CB_WRITE NID_pbeWithMD2AndDES_CBC SSLEAY_CFLAGS CB_WRITE_ALERT NID_pbeWithMD2AndRC2_CBC SSLEAY_DIR ERROR_NONE NID_pbeWithMD5AndCast5_CBC SSLEAY_PLATFORM ERROR_SSL NID_pbeWithMD5AndDES_CBC SSLEAY_VERSION ERROR_SYSCALL NID_pbeWithMD5AndRC2_CBC ST_ACCEPT ERROR_WANT_ACCEPT NID_pbeWithSHA1AndDES_CBC ST_BEFORE ERROR_WANT_CONNECT NID_pbeWithSHA1AndRC2_CBC ST_CONNECT ERROR_WANT_READ NID_pbe_WithSHA1And128BitRC2_CBC ST_INIT ERROR_WANT_WRITE NID_pbe_WithSHA1And128BitRC4 ST_OK ERROR_WANT_X509_LOOKUP NID_pbe_WithSHA1And2_Key_TripleDES_CBC ST_READ_BODY ERROR_ZERO_RETURN NID_pbe_WithSHA1And3_Key_TripleDES_CBC ST_READ_HEADER EVP_PKS_DSA NID_pbe_WithSHA1And40BitRC2_CBC TLS1_1_VERSION EVP_PKS_EC NID_pbe_WithSHA1And40BitRC4 TLS1_2_VERSION EVP_PKS_RSA NID_pbes2 TLS1_3_VERSION EVP_PKT_ENC NID_pbmac1 TLS1_VERSION EVP_PKT_EXCH NID_pkcs TLSEXT_STATUSTYPE_ocsp EVP_PKT_EXP NID_pkcs3 VERIFY_CLIENT_ONCE EVP_PKT_SIGN NID_pkcs7 VERIFY_FAIL_IF_NO_PEER_CERT EVP_PK_DH NID_pkcs7_data VERIFY_NONE EVP_PK_DSA NID_pkcs7_digest VERIFY_PEER EVP_PK_EC NID_pkcs7_encrypted VERIFY_POST_HANDSHAKE EVP_PK_RSA NID_pkcs7_enveloped V_OCSP_CERTSTATUS_GOOD FILETYPE_ASN1 NID_pkcs7_signed V_OCSP_CERTSTATUS_REVOKED FILETYPE_PEM NID_pkcs7_signedAndEnveloped V_OCSP_CERTSTATUS_UNKNOWN F_CLIENT_CERTIFICATE NID_pkcs8ShroudedKeyBag WRITING F_CLIENT_HELLO NID_pkcs9 X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT F_CLIENT_MASTER_KEY NID_pkcs9_challengePassword X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS F_D2I_SSL_SESSION NID_pkcs9_contentType X509_CHECK_FLAG_NEVER_CHECK_SUBJECT F_GET_CLIENT_FINISHED NID_pkcs9_countersignature X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS F_GET_CLIENT_HELLO NID_pkcs9_emailAddress X509_CHECK_FLAG_NO_WILDCARDS F_GET_CLIENT_MASTER_KEY NID_pkcs9_extCertAttributes X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS F_GET_SERVER_FINISHED NID_pkcs9_messageDigest X509_FILETYPE_ASN1 F_GET_SERVER_HELLO NID_pkcs9_signingTime X509_FILETYPE_DEFAULT F_GET_SERVER_VERIFY NID_pkcs9_unstructuredAddress X509_FILETYPE_PEM F_I2D_SSL_SESSION NID_pkcs9_unstructuredName X509_LOOKUP F_READ_N NID_private_key_usage_period X509_PURPOSE_ANY F_REQUEST_CERTIFICATE NID_rc2_40_cbc X509_PURPOSE_CRL_SIGN F_SERVER_HELLO NID_rc2_64_cbc X509_PURPOSE_NS_SSL_SERVER F_SSL_CERT_NEW NID_rc2_cbc X509_PURPOSE_OCSP_HELPER F_SSL_GET_NEW_SESSION NID_rc2_cfb64 X509_PURPOSE_SMIME_ENCRYPT F_SSL_NEW NID_rc2_ecb X509_PURPOSE_SMIME_SIGN F_SSL_READ NID_rc2_ofb64 X509_PURPOSE_SSL_CLIENT F_SSL_RSA_PRIVATE_DECRYPT NID_rc4 X509_PURPOSE_SSL_SERVER F_SSL_RSA_PUBLIC_ENCRYPT NID_rc4_40 X509_PURPOSE_TIMESTAMP_SIGN F_SSL_SESSION_NEW NID_rc5_cbc X509_TRUST_COMPAT F_SSL_SESSION_PRINT_FP NID_rc5_cfb64 X509_TRUST_EMAIL F_SSL_SET_FD NID_rc5_ecb X509_TRUST_OBJECT_SIGN F_SSL_SET_RFD NID_rc5_ofb64 X509_TRUST_OCSP_REQUEST F_SSL_SET_WFD NID_ripemd160 X509_TRUST_OCSP_SIGN F_SSL_USE_CERTIFICATE NID_ripemd160WithRSA X509_TRUST_SSL_CLIENT F_SSL_USE_CERTIFICATE_ASN1 NID_rle_compression X509_TRUST_SSL_SERVER F_SSL_USE_CERTIFICATE_FILE NID_rsa X509_TRUST_TSA F_SSL_USE_PRIVATEKEY NID_rsaEncryption X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH F_SSL_USE_PRIVATEKEY_ASN1 NID_rsadsi X509_V_ERR_AKID_SKID_MISMATCH F_SSL_USE_PRIVATEKEY_FILE NID_safeContentsBag X509_V_ERR_APPLICATION_VERIFICATION F_SSL_USE_RSAPRIVATEKEY NID_sdsiCertificate X509_V_ERR_CA_KEY_TOO_SMALL F_SSL_USE_RSAPRIVATEKEY_ASN1 NID_secretBag X509_V_ERR_CA_MD_TOO_WEAK F_SSL_USE_RSAPRIVATEKEY_FILE NID_serialNumber X509_V_ERR_CERT_CHAIN_TOO_LONG F_WRITE_PENDING NID_server_auth X509_V_ERR_CERT_HAS_EXPIRED GEN_DIRNAME NID_sha X509_V_ERR_CERT_NOT_YET_VALID GEN_DNS NID_sha1 X509_V_ERR_CERT_REJECTED GEN_EDIPARTY NID_sha1WithRSA X509_V_ERR_CERT_REVOKED GEN_EMAIL NID_sha1WithRSAEncryption X509_V_ERR_CERT_SIGNATURE_FAILURE GEN_IPADD NID_shaWithRSAEncryption X509_V_ERR_CERT_UNTRUSTED GEN_OTHERNAME NID_stateOrProvinceName X509_V_ERR_CRL_HAS_EXPIRED GEN_RID NID_subject_alt_name X509_V_ERR_CRL_NOT_YET_VALID GEN_URI NID_subject_key_identifier X509_V_ERR_CRL_PATH_VALIDATION_ERROR GEN_X400 NID_surname X509_V_ERR_CRL_SIGNATURE_FAILURE LIBRESSL_VERSION_NUMBER NID_sxnet X509_V_ERR_DANE_NO_MATCH MBSTRING_ASC NID_time_stamp X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT MBSTRING_BMP NID_title X509_V_ERR_DIFFERENT_CRL_SCOPE MBSTRING_FLAG NID_undef X509_V_ERR_EE_KEY_TOO_SMALL MBSTRING_UNIV NID_uniqueIdentifier X509_V_ERR_EMAIL_MISMATCH MBSTRING_UTF8 NID_x509Certificate X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD MIN_RSA_MODULUS_LENGTH_IN_BYTES NID_x509Crl X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD MODE_ACCEPT_MOVING_WRITE_BUFFER NID_zlib_compression X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD MODE_AUTO_RETRY NOTHING X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD MODE_ENABLE_PARTIAL_WRITE OCSP_RESPONSE_STATUS_INTERNALERROR X509_V_ERR_EXCLUDED_VIOLATION MODE_RELEASE_BUFFERS OCSP_RESPONSE_STATUS_MALFORMEDREQUEST X509_V_ERR_HOSTNAME_MISMATCH NID_OCSP_sign OCSP_RESPONSE_STATUS_SIGREQUIRED X509_V_ERR_INVALID_CA NID_SMIMECapabilities OCSP_RESPONSE_STATUS_SUCCESSFUL X509_V_ERR_INVALID_CALL NID_X500 OCSP_RESPONSE_STATUS_TRYLATER X509_V_ERR_INVALID_EXTENSION NID_X509 OCSP_RESPONSE_STATUS_UNAUTHORIZED X509_V_ERR_INVALID_NON_CA NID_ad_OCSP OPENSSL_BUILT_ON X509_V_ERR_INVALID_POLICY_EXTENSION NID_ad_ca_issuers OPENSSL_CFLAGS X509_V_ERR_INVALID_PURPOSE NID_algorithm OPENSSL_DIR X509_V_ERR_IP_ADDRESS_MISMATCH NID_authority_key_identifier OPENSSL_ENGINES_DIR X509_V_ERR_KEYUSAGE_NO_CERTSIGN NID_basic_constraints OPENSSL_PLATFORM X509_V_ERR_KEYUSAGE_NO_CRL_SIGN NID_bf_cbc OPENSSL_VERSION X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE NID_bf_cfb64 OPENSSL_VERSION_NUMBER X509_V_ERR_NO_EXPLICIT_POLICY NID_bf_ecb OP_ALL X509_V_ERR_NO_VALID_SCTS NID_bf_ofb64 OP_ALLOW_NO_DHE_KEX X509_V_ERR_OCSP_CERT_UNKNOWN NID_cast5_cbc OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION X509_V_ERR_OCSP_VERIFY_FAILED NID_cast5_cfb64 OP_CIPHER_SERVER_PREFERENCE X509_V_ERR_OCSP_VERIFY_NEEDED NID_cast5_ecb OP_CISCO_ANYCONNECT X509_V_ERR_OUT_OF_MEM NID_cast5_ofb64 OP_COOKIE_EXCHANGE X509_V_ERR_PATH_LENGTH_EXCEEDED NID_certBag OP_CRYPTOPRO_TLSEXT_BUG X509_V_ERR_PATH_LOOP NID_certificate_policies OP_DONT_INSERT_EMPTY_FRAGMENTS X509_V_ERR_PERMITTED_VIOLATION NID_client_auth OP_ENABLE_MIDDLEBOX_COMPAT X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED NID_code_sign OP_EPHEMERAL_RSA X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED NID_commonName OP_LEGACY_SERVER_CONNECT X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION NID_countryName OP_MICROSOFT_BIG_SSLV3_BUFFER X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN NID_crlBag OP_MICROSOFT_SESS_ID_BUG X509_V_ERR_STORE_LOOKUP NID_crl_distribution_points OP_MSIE_SSLV2_RSA_PADDING X509_V_ERR_SUBJECT_ISSUER_MISMATCH NID_crl_number OP_NETSCAPE_CA_DN_BUG X509_V_ERR_SUBTREE_MINMAX NID_crl_reason OP_NETSCAPE_CHALLENGE_BUG X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 NID_delta_crl OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_ALGORITHM NID_des_cbc OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG X509_V_ERR_SUITE_B_INVALID_CURVE NID_des_cfb64 OP_NON_EXPORT_FIRST X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM NID_des_ecb OP_NO_ANTI_REPLAY X509_V_ERR_SUITE_B_INVALID_VERSION NID_des_ede OP_NO_CLIENT_RENEGOTIATION X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED NID_des_ede3 OP_NO_COMPRESSION X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY NID_des_ede3_cbc OP_NO_ENCRYPT_THEN_MAC X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE NID_des_ede3_cfb64 OP_NO_QUERY_MTU X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE NID_des_ede3_ofb64 OP_NO_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL NID_des_ede_cbc OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER NID_des_ede_cfb64 OP_NO_SSL_MASK X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT NID_des_ede_ofb64 OP_NO_SSLv2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY NID_des_ofb64 OP_NO_SSLv3 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE NID_description OP_NO_TICKET X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION NID_desx_cbc OP_NO_TLSv1 X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION NID_dhKeyAgreement OP_NO_TLSv1_1 X509_V_ERR_UNNESTED_RESOURCE NID_dnQualifier OP_NO_TLSv1_2 X509_V_ERR_UNSPECIFIED NID_dsa OP_NO_TLSv1_3 X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX NID_dsaWithSHA OP_PKCS1_CHECK_1 X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE NID_dsaWithSHA1 OP_PKCS1_CHECK_2 X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE NID_dsaWithSHA1_2 OP_PRIORITIZE_CHACHA X509_V_ERR_UNSUPPORTED_NAME_SYNTAX NID_dsa_2 OP_SAFARI_ECDHE_ECDSA_BUG X509_V_FLAG_ALLOW_PROXY_CERTS NID_email_protect OP_SINGLE_DH_USE X509_V_FLAG_CB_ISSUER_CHECK NID_ext_key_usage OP_SINGLE_ECDH_USE X509_V_FLAG_CHECK_SS_SIGNATURE NID_ext_req OP_SSLEAY_080_CLIENT_DH_BUG X509_V_FLAG_CRL_CHECK NID_friendlyName OP_SSLREF2_REUSE_CERT_TYPE_BUG X509_V_FLAG_CRL_CHECK_ALL NID_givenName OP_TLSEXT_PADDING X509_V_FLAG_EXPLICIT_POLICY NID_hmacWithSHA1 OP_TLS_BLOCK_PADDING_BUG X509_V_FLAG_EXTENDED_CRL_SUPPORT NID_id_ad OP_TLS_D5_BUG X509_V_FLAG_IGNORE_CRITICAL NID_id_ce OP_TLS_ROLLBACK_BUG X509_V_FLAG_INHIBIT_ANY NID_id_kp READING X509_V_FLAG_INHIBIT_MAP NID_id_pbkdf2 RECEIVED_SHUTDOWN X509_V_FLAG_NOTIFY_POLICY NID_id_pe RSA_3 X509_V_FLAG_NO_ALT_CHAINS NID_id_pkix RSA_F4 X509_V_FLAG_NO_CHECK_TIME NID_id_qt_cps R_BAD_AUTHENTICATION_TYPE X509_V_FLAG_PARTIAL_CHAIN NID_id_qt_unotice R_BAD_CHECKSUM X509_V_FLAG_POLICY_CHECK NID_idea_cbc R_BAD_MAC_DECODE X509_V_FLAG_POLICY_MASK NID_idea_cfb64 R_BAD_RESPONSE_ARGUMENT X509_V_FLAG_SUITEB_128_LOS NID_idea_ecb R_BAD_SSL_FILETYPE X509_V_FLAG_SUITEB_128_LOS_ONLY NID_idea_ofb64 R_BAD_SSL_SESSION_ID_LENGTH X509_V_FLAG_SUITEB_192_LOS NID_info_access R_BAD_STATE X509_V_FLAG_TRUSTED_FIRST NID_initials R_BAD_WRITE_RETRY X509_V_FLAG_USE_CHECK_TIME NID_invalidity_date R_CHALLENGE_IS_DIFFERENT X509_V_FLAG_USE_DELTAS NID_issuer_alt_name R_CIPHER_TABLE_SRC_ERROR X509_V_FLAG_X509_STRICT NID_keyBag R_INVALID_CHALLENGE_LENGTH X509_V_OK NID_key_usage R_NO_CERTIFICATE_SET XN_FLAG_COMPAT NID_localKeyID R_NO_CERTIFICATE_SPECIFIED XN_FLAG_DN_REV NID_localityName R_NO_CIPHER_LIST XN_FLAG_DUMP_UNKNOWN_FIELDS NID_md2 R_NO_CIPHER_MATCH XN_FLAG_FN_ALIGN NID_md2WithRSAEncryption R_NO_PRIVATEKEY XN_FLAG_FN_LN NID_md5 R_NO_PUBLICKEY XN_FLAG_FN_MASK NID_md5WithRSA R_NULL_SSL_CTX XN_FLAG_FN_NONE NID_md5WithRSAEncryption R_PEER_DID_NOT_RETURN_A_CERTIFICATE XN_FLAG_FN_OID NID_md5_sha1 R_PEER_ERROR XN_FLAG_FN_SN NID_mdc2 R_PEER_ERROR_CERTIFICATE XN_FLAG_MULTILINE NID_mdc2WithRSA R_PEER_ERROR_NO_CIPHER XN_FLAG_ONELINE NID_ms_code_com R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE XN_FLAG_RFC2253 NID_ms_code_ind R_PUBLIC_KEY_ENCRYPT_ERROR XN_FLAG_SEP_COMMA_PLUS NID_ms_ctl_sign R_PUBLIC_KEY_IS_NOT_RSA XN_FLAG_SEP_CPLUS_SPC NID_ms_efs R_READ_WRONG_PACKET_TYPE XN_FLAG_SEP_MASK NID_ms_ext_req R_SHORT_READ XN_FLAG_SEP_MULTILINE NID_ms_sgc R_SSL_SESSION_ID_IS_DIFFERENT XN_FLAG_SEP_SPLUS_SPC NID_name R_UNABLE_TO_EXTRACT_PUBLIC_KEY XN_FLAG_SPC_EQ =head2 INTERNAL ONLY functions (do not use these) The following functions are not intended for use from outside of L<Net::SSLeay> module. They might be removed, renamed or changed without prior notice in future version. Simply B<DO NOT USE THEM>! =over =item * hello =item * blength =item * constant =back =head1 EXAMPLES One very good example to look at is the implementation of C<sslcat()> in the C<SSLeay.pm> file. The following is a simple SSLeay client (with too little error checking :-( #!/usr/bin/perl use Socket; use Net::SSLeay qw(die_now die_if_ssl_error) ; Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); ($dest_serv, $port, $msg) = @ARGV; # Read command line $port = getservbyname ($port, 'tcp') unless $port =~ /^\d+$/; $dest_ip = gethostbyname ($dest_serv); $dest_serv_params = sockaddr_in($port, $dest_ip); socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!"; connect (S, $dest_serv_params) or die "connect: $!"; select (S); $| = 1; select (STDOUT); # Eliminate STDIO buffering # The network connection is now open, lets fire up SSL $ctx = Net::SSLeay::CTX_new() or die_now("Failed to create SSL_CTX $!"); Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL) or die_if_ssl_error("ssl ctx set options"); $ssl = Net::SSLeay::new($ctx) or die_now("Failed to create SSL $!"); Net::SSLeay::set_fd($ssl, fileno(S)); # Must use fileno $res = Net::SSLeay::connect($ssl) and die_if_ssl_error("ssl connect"); print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n"; # Exchange data $res = Net::SSLeay::write($ssl, $msg); # Perl knows how long $msg is die_if_ssl_error("ssl write"); CORE::shutdown S, 1; # Half close --> No more output, sends EOF to server $got = Net::SSLeay::read($ssl); # Perl returns undef on failure die_if_ssl_error("ssl read"); print $got; Net::SSLeay::free ($ssl); # Tear down connection Net::SSLeay::CTX_free ($ctx); close S; The following is a simple SSLeay echo server (non forking): #!/usr/bin/perl -w use Socket; use Net::SSLeay qw(die_now die_if_ssl_error); Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); $our_ip = "\0\0\0\0"; # Bind to all interfaces $port = 1235; $sockaddr_template = 'S n a4 x8'; $our_serv_params = pack ($sockaddr_template, &AF_INET, $port, $our_ip); socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!"; bind (S, $our_serv_params) or die "bind: $!"; listen (S, 5) or die "listen: $!"; $ctx = Net::SSLeay::CTX_new () or die_now("CTX_new ($ctx): $!"); Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL) or die_if_ssl_error("ssl ctx set options"); # Following will ask password unless private key is not encrypted Net::SSLeay::CTX_use_RSAPrivateKey_file ($ctx, 'plain-rsa.pem', &Net::SSLeay::FILETYPE_PEM); die_if_ssl_error("private key"); Net::SSLeay::CTX_use_certificate_file ($ctx, 'plain-cert.pem', &Net::SSLeay::FILETYPE_PEM); die_if_ssl_error("certificate"); while (1) { print "Accepting connections...\n"; ($addr = accept (NS, S)) or die "accept: $!"; select (NS); $| = 1; select (STDOUT); # Piping hot! ($af,$client_port,$client_ip) = unpack($sockaddr_template,$addr); @inetaddr = unpack('C4',$client_ip); print "$af connection from " . join ('.', @inetaddr) . ":$client_port\n"; # We now have a network connection, lets fire up SSLeay... $ssl = Net::SSLeay::new($ctx) or die_now("SSL_new ($ssl): $!"); Net::SSLeay::set_fd($ssl, fileno(NS)); $err = Net::SSLeay::accept($ssl) and die_if_ssl_error('ssl accept'); print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n"; # Connected. Exchange some data. $got = Net::SSLeay::read($ssl); # Returns undef on fail die_if_ssl_error("ssl read"); print "Got `$got' (" . length ($got) . " chars)\n"; Net::SSLeay::write ($ssl, uc ($got)) or die "write: $!"; die_if_ssl_error("ssl write"); Net::SSLeay::free ($ssl); # Tear down connection close NS; } Yet another echo server. This one runs from C</etc/inetd.conf> so it avoids all the socket code overhead. Only caveat is opening an rsa key file - it had better be without any encryption or else it will not know where to ask for the password. Note how C<STDIN> and C<STDOUT> are wired to SSL. #!/usr/bin/perl # /etc/inetd.conf # ssltst stream tcp nowait root /path/to/server.pl server.pl # /etc/services # ssltst 1234/tcp use Net::SSLeay qw(die_now die_if_ssl_error); Net::SSLeay::load_error_strings(); Net::SSLeay::SSLeay_add_ssl_algorithms(); Net::SSLeay::randomize(); chdir '/key/dir' or die "chdir: $!"; $| = 1; # Piping hot! open LOG, ">>/dev/console" or die "Can't open log file $!"; select LOG; print "server.pl started\n"; $ctx = Net::SSLeay::CTX_new() or die_now "CTX_new ($ctx) ($!)"; $ssl = Net::SSLeay::new($ctx) or die_now "new ($ssl) ($!)"; Net::SSLeay::set_options($ssl, &Net::SSLeay::OP_ALL) and die_if_ssl_error("ssl set options"); # We get already open network connection from inetd, now we just # need to attach SSLeay to STDIN and STDOUT Net::SSLeay::set_rfd($ssl, fileno(STDIN)); Net::SSLeay::set_wfd($ssl, fileno(STDOUT)); Net::SSLeay::use_RSAPrivateKey_file ($ssl, 'plain-rsa.pem', Net::SSLeay::FILETYPE_PEM); die_if_ssl_error("private key"); Net::SSLeay::use_certificate_file ($ssl, 'plain-cert.pem', Net::SSLeay::FILETYPE_PEM); die_if_ssl_error("certificate"); Net::SSLeay::accept($ssl) and die_if_ssl_err("ssl accept: $!"); print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n"; $got = Net::SSLeay::read($ssl); die_if_ssl_error("ssl read"); print "Got `$got' (" . length ($got) . " chars)\n"; Net::SSLeay::write ($ssl, uc($got)) or die "write: $!"; die_if_ssl_error("ssl write"); Net::SSLeay::free ($ssl); # Tear down the connection Net::SSLeay::CTX_free ($ctx); close LOG; There are also a number of example/test programs in the examples directory: sslecho.pl - A simple server, not unlike the one above minicli.pl - Implements a client using low level SSLeay routines sslcat.pl - Demonstrates using high level sslcat utility function get_page.pl - Is a utility for getting html pages from secure servers callback.pl - Demonstrates certificate verification and callback usage stdio_bulk.pl - Does SSL over Unix pipes ssl-inetd-serv.pl - SSL server that can be invoked from inetd.conf httpd-proxy-snif.pl - Utility that allows you to see how a browser sends https request to given server and what reply it gets back (very educative :-) makecert.pl - Creates a self signed cert (does not use this module) =head1 INSTALLATION See README and README.* in the distribution directory for installation guidance on a variety of platforms. =head1 LIMITATIONS C<Net::SSLeay::read()> uses an internal buffer of 32KB, thus no single read will return more. In practice one read returns much less, usually as much as fits in one network packet. To work around this, you should use a loop like this: $reply = ''; while ($got = Net::SSLeay::read($ssl)) { last if print_errs('SSL_read'); $reply .= $got; } Although there is no built-in limit in C<Net::SSLeay::write()>, the network packet size limitation applies here as well, thus use: $written = 0; while ($written < length($message)) { $written += Net::SSLeay::write($ssl, substr($message, $written)); last if print_errs('SSL_write'); } Or alternatively you can just use the following convenience functions: Net::SSLeay::ssl_write_all($ssl, $message) or die "ssl write failure"; $got = Net::SSLeay::ssl_read_all($ssl) or die "ssl read failure"; =head1 KNOWN BUGS AND CAVEATS An OpenSSL bug CVE-2015-0290 "OpenSSL Multiblock Corrupted Pointer Issue" can cause POST requests of over 90kB to fail or crash. This bug is reported to be fixed in OpenSSL 1.0.2a. Autoloader emits a Argument "xxx" isn't numeric in entersub at blib/lib/Net/SSLeay.pm' warning if die_if_ssl_error is made autoloadable. If you figure out why, drop me a line. Callback set using C<SSL_set_verify()> does not appear to work. This may well be an openssl problem (e.g. see C<ssl/ssl_lib.c> line 1029). Try using C<SSL_CTX_set_verify()> instead and do not be surprised if even this stops working in future versions. Callback and certificate verification stuff is generally too little tested. Random numbers are not initialized randomly enough, especially if you do not have C</dev/random> and/or C</dev/urandom> (such as in Solaris platforms - but it's been suggested that cryptorand daemon from the SUNski package solves this). In this case you should investigate third party software that can emulate these devices, e.g. by way of a named pipe to some program. Another gotcha with random number initialization is randomness depletion. This phenomenon, which has been extensively discussed in OpenSSL, Apache-SSL, and Apache-mod_ssl forums, can cause your script to block if you use C</dev/random> or to operate insecurely if you use C</dev/urandom>. What happens is that when too much randomness is drawn from the operating system's randomness pool then randomness can temporarily be unavailable. C</dev/random> solves this problem by waiting until enough randomness can be gathered - and this can take a long time since blocking reduces activity in the machine and less activity provides less random events: a vicious circle. C</dev/urandom> solves this dilemma more pragmatically by simply returning predictable "random" numbers. SomeC< /dev/urandom> emulation software however actually seems to implement C</dev/random> semantics. Caveat emptor. I've been pointed to two such daemons by Mik Firestone <mik@@speed.stdio._com> who has used them on Solaris 8: =over =item 1 Entropy Gathering Daemon (EGD) at L<http://www.lothar.com/tech/crypto/> =item 2 Pseudo-random number generating daemon (PRNGD) at L<http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html> =back If you are using the low level API functions to communicate with other SSL implementations, you would do well to call Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL) or die_if_ssl_error("ssl ctx set options"); to cope with some well know bugs in some other SSL implementations. The high level API functions always set all known compatibility options. Sometimes C<sslcat()> (and the high level HTTPS functions that build on it) is too fast in signaling the EOF to legacy HTTPS servers. This causes the server to return empty page. To work around this problem you can set the global variable $Net::SSLeay::slowly = 1; # Add sleep so broken servers can keep up HTTP/1.1 is not supported. Specifically this module does not know to issue or serve multiple http requests per connection. This is a serious shortcoming, but using the SSL session cache on your server helps to alleviate the CPU load somewhat. As of version 1.09 many newer OpenSSL auxiliary functions were added (from C<REM_AUTOMATICALLY_GENERATED_1_09> onwards in C<SSLeay.xs>). Unfortunately I have not had any opportunity to test these. Some of them are trivial enough that I believe they "just work", but others have rather complex interfaces with function pointers and all. In these cases you should proceed wit great caution. This module defaults to using OpenSSL automatic protocol negotiation code for automatically detecting the version of the SSL/TLS protocol that the other end talks. With most web servers this works just fine, but once in a while I get complaints from people that the module does not work with some web servers. Usually this can be solved by explicitly setting the protocol version, e.g. $Net::SSLeay::ssl_version = 2; # Insist on SSLv2 $Net::SSLeay::ssl_version = 3; # Insist on SSLv3 $Net::SSLeay::ssl_version = 10; # Insist on TLSv1 $Net::SSLeay::ssl_version = 11; # Insist on TLSv1.1 $Net::SSLeay::ssl_version = 12; # Insist on TLSv1.2 $Net::SSLeay::ssl_version = 13; # Insist on TLSv1.3 Although the autonegotiation is nice to have, the SSL standards do not formally specify any such mechanism. Most of the world has accepted the SSLeay/OpenSSL way of doing it as the de facto standard. But for the few that think differently, you have to explicitly speak the correct version. This is not really a bug, but rather a deficiency in the standards. If a site refuses to respond or sends back some nonsensical error codes (at the SSL handshake level), try this option before mailing me. On some systems, OpenSSL may be compiled without support for SSLv2. If this is the case, Net::SSLeay will warn if ssl_version has been set to 2. The high level API returns the certificate of the peer, thus allowing one to check what certificate was supplied. However, you will only be able to check the certificate after the fact, i.e. you already sent your form data by the time you find out that you did not trust them, oops. So, while being able to know the certificate after the fact is surely useful, the security minded would still choose to do the connection and certificate verification first and only then exchange data with the site. Currently none of the high level API functions do this, thus you would have to program it using the low level API. A good place to start is to see how the C<Net::SSLeay::http_cat()> function is implemented. The high level API functions use a global file handle C<SSLCAT_S> internally. This really should not be a problem because there is no way to interleave the high level API functions, unless you use threads (but threads are not very well supported in perl anyway). However, you may run into problems if you call undocumented internal functions in an interleaved fashion. The best solution is to "require Net::SSLeay" in one thread after all the threads have been created. =head1 DIAGNOSTICS =over =item Random number generator not seeded!!! B<(W)> This warning indicates that C<randomize()> was not able to read C</dev/random> or C</dev/urandom>, possibly because your system does not have them or they are differently named. You can still use SSL, but the encryption will not be as strong. =item open_tcp_connection: destination host not found:`server' (port 123) ($!) Name lookup for host named C<server> failed. =item open_tcp_connection: failed `server', 123 ($!) The name was resolved, but establishing the TCP connection failed. =item msg 123: 1 - error:140770F8:SSL routines:SSL23_GET_SERVER_HELLO:unknown proto SSLeay error string. The first number (123) is the PID, the second number (1) indicates the position of the error message in SSLeay error stack. You often see a pile of these messages as errors cascade. =item msg 123: 1 - error:02001002::lib(2) :func(1) :reason(2) The same as above, but you didn't call load_error_strings() so SSLeay couldn't verbosely explain the error. You can still find out what it means with this command: /usr/local/ssl/bin/ssleay errstr 02001002 =item Password is being asked for private key This is normal behaviour if your private key is encrypted. Either you have to supply the password or you have to use an unencrypted private key. Scan OpenSSL.org for the FAQ that explains how to do this (or just study examples/makecert.pl which is used during C<make test> to do just that). =back =head1 SECURITY You can mitigate some of the security vulnerabilities that might be present in your SSL/TLS application: =head2 BEAST Attack http://blogs.cisco.com/security/beat-the-beast-with-tls/ https://community.qualys.com/blogs/securitylabs/2011/10/17/mitigating-the-beast-attack-on-tls http://blog.zoller.lu/2011/09/beast-summary-tls-cbc-countermeasures.html The BEAST attack relies on a weakness in the way CBC mode is used in SSL/TLS. In OpenSSL versions 0.9.6d and later, the protocol-level mitigation is enabled by default, thus making it not vulnerable to the BEAST attack. Solutions: =over =item * Compile with OpenSSL versions 0.9.6d or later, which enables SSL_OP_ALL by default =item * Ensure SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS is not enabled (its not enabled by default) =item * Don't support SSLv2, SSLv3 =item * Actively control the ciphers your server supports with set_cipher_list: =back Net::SSLeay::set_cipher_list($ssl, 'RC4-SHA:HIGH:!ADH'); =head2 Session Resumption http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html The SSL Labs vulnerability test on your SSL server might report in red: Session resumption No (IDs assigned but not accepted) This report is not really bug or a vulnerability, since the server will not accept session resumption requests. However, you can prevent this noise in the report by disabling the session cache altogether: Net::SSLeay::CTX_set_session_cache_mode($ssl_ctx, Net::SSLeay::SESS_CACHE_OFF()); Use 0 if you don't have SESS_CACHE_OFF constant. =head2 Secure Renegotiation and DoS Attack https://community.qualys.com/blogs/securitylabs/2011/10/31/tls-renegotiation-and-denial-of-service-attacks This is not a "security flaw," it is more of a DoS vulnerability. Solutions: =over =item * Do not support SSLv2 =item * Do not set the SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION option =item * Compile with OpenSSL 0.9.8m or later =back =head1 BUGS If you encounter a problem with this module that you believe is a bug, please report it in one of the following ways: =over =item * L<create a new issue|https://github.com/radiator-software/p5-net-ssleay/issues/new> under the Net-SSLeay GitHub project at L<https://github.com/radiator-software/p5-net-ssleay>; =item * L<open a ticket|https://rt.cpan.org/Ticket/Create.html?Queue=Net-SSLeay> using the CPAN RT bug tracker's web interface at L<https://rt.cpan.org/Dist/Display.html?Queue=Net-SSLeay>; =item * send an email to the CPAN RT bug tracker at L<bug-Net-SSLeay@rt.cpan.org|mailto:bug-Net-SSLeay@rt.cpan.org>. =back Please make sure your bug report includes the following information: =over =item * the code you are trying to run; =item * your operating system name and version; =item * the output of C<perl -V>; =item * the version of OpenSSL or LibreSSL you are using. =back =head1 AUTHOR Originally written by Sampo Kellomäki. Maintained by Florian Ragwitz between November 2005 and January 2010. Maintained by Mike McCauley between November 2005 and June 2018. Maintained by Chris Novakovic, Tuure Vartiainen and Heikki Vatiainen since June 2018. =head1 COPYRIGHT Copyright (c) 1996-2003 Sampo Kellomäki <sampo@iki.fi> Copyright (c) 2005-2010 Florian Ragwitz <rafl@debian.org> Copyright (c) 2005-2018 Mike McCauley <mikem@airspayce.com> Copyright (c) 2018- Chris Novakovic <chris@chrisn.me.uk> Copyright (c) 2018- Tuure Vartiainen <vartiait@radiatorsoftware.com> Copyright (c) 2018- Heikki Vatiainen <hvn@radiatorsoftware.com> All rights reserved. =head1 LICENSE This module is released under the terms of the Artistic License 2.0. For details, see the C<LICENSE> file distributed with Net-SSLeay's source code. =head1 SEE ALSO Net::SSLeay::Handle - File handle interface ./examples - Example servers and a clients <http://www.openssl.org/> - OpenSSL source, documentation, etc openssl-users-request@openssl.org - General OpenSSL mailing list <http://www.ietf.org/rfc/rfc2246.txt> - TLS 1.0 specification <http://www.w3c.org> - HTTP specifications <http://www.ietf.org/rfc/rfc2617.txt> - How to send password <http://www.lothar.com/tech/crypto/> - Entropy Gathering Daemon (EGD) <http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html> - pseudo-random number generating daemon (PRNGD) perl(1) perlref(1) perllol(1) perldoc ~openssl/doc/ssl/SSL_CTX_set_verify.pod Bundle/DBD/mysql.pm 0000644 00000000372 15037233334 0010056 0 ustar 00 package Bundle::DBD::mysql; use strict; use warnings; our $VERSION = '4.046'; 1; __END__ =pod =head1 NAME Bundle::DBD::mysql =head1 DESCRIPTION This package only exists for legacy reasons. Please use the L<DBD::mysql> package instead. =cut Encode/PerlIO.pod 0000644 00000013654 15037233334 0007613 0 ustar 00 =head1 NAME Encode::PerlIO -- a detailed document on Encode and PerlIO =head1 Overview It is very common to want to do encoding transformations when reading or writing files, network connections, pipes etc. If Perl is configured to use the new 'perlio' IO system then C<Encode> provides a "layer" (see L<PerlIO>) which can transform data as it is read or written. Here is how the blind poet would modernise the encoding: use Encode; open(my $iliad,'<:encoding(iso-8859-7)','iliad.greek'); open(my $utf8,'>:utf8','iliad.utf8'); my @epic = <$iliad>; print $utf8 @epic; close($utf8); close($illiad); In addition, the new IO system can also be configured to read/write UTF-8 encoded characters (as noted above, this is efficient): open(my $fh,'>:utf8','anything'); print $fh "Any \x{0021} string \N{SMILEY FACE}\n"; Either of the above forms of "layer" specifications can be made the default for a lexical scope with the C<use open ...> pragma. See L<open>. Once a handle is open, its layers can be altered using C<binmode>. Without any such configuration, or if Perl itself is built using the system's own IO, then write operations assume that the file handle accepts only I<bytes> and will C<die> if a character larger than 255 is written to the handle. When reading, each octet from the handle becomes a byte-in-a-character. Note that this default is the same behaviour as bytes-only languages (including Perl before v5.6) would have, and is sufficient to handle native 8-bit encodings e.g. iso-8859-1, EBCDIC etc. and any legacy mechanisms for handling other encodings and binary data. In other cases, it is the program's responsibility to transform characters into bytes using the API above before doing writes, and to transform the bytes read from a handle into characters before doing "character operations" (e.g. C<lc>, C</\W+/>, ...). You can also use PerlIO to convert larger amounts of data you don't want to bring into memory. For example, to convert between ISO-8859-1 (Latin 1) and UTF-8 (or UTF-EBCDIC in EBCDIC machines): open(F, "<:encoding(iso-8859-1)", "data.txt") or die $!; open(G, ">:utf8", "data.utf") or die $!; while (<F>) { print G } # Could also do "print G <F>" but that would pull # the whole file into memory just to write it out again. More examples: open(my $f, "<:encoding(cp1252)") open(my $g, ">:encoding(iso-8859-2)") open(my $h, ">:encoding(latin9)") # iso-8859-15 See also L<encoding> for how to change the default encoding of the data in your script. =head1 How does it work? Here is a crude diagram of how filehandle, PerlIO, and Encode interact. filehandle <-> PerlIO PerlIO <-> scalar (read/printed) \ / Encode When PerlIO receives data from either direction, it fills a buffer (currently with 1024 bytes) and passes the buffer to Encode. Encode tries to convert the valid part and passes it back to PerlIO, leaving invalid parts (usually a partial character) in the buffer. PerlIO then appends more data to the buffer, calls Encode again, and so on until the data stream ends. To do so, PerlIO always calls (de|en)code methods with CHECK set to 1. This ensures that the method stops at the right place when it encounters partial character. The following is what happens when PerlIO and Encode tries to encode (from utf8) more than 1024 bytes and the buffer boundary happens to be in the middle of a character. A B C .... ~ \x{3000} .... 41 42 43 .... 7E e3 80 80 .... <- buffer ---------------> << encoded >>>>>>>>>> <- next buffer ------ Encode converts from the beginning to \x7E, leaving \xe3 in the buffer because it is invalid (partial character). Unfortunately, this scheme does not work well with escape-based encodings such as ISO-2022-JP. =head1 Line Buffering Now let's see what happens when you try to decode from ISO-2022-JP and the buffer ends in the middle of a character. JIS208-ESC \x{5f3e} A B C .... ~ \e $ B |DAN | .... 41 42 43 .... 7E 1b 24 41 43 46 .... <- buffer ---------------------------> << encoded >>>>>>>>>>>>>>>>>>>>>>> As you see, the next buffer begins with \x43. But \x43 is 'C' in ASCII, which is wrong in this case because we are now in JISX 0208 area so it has to convert \x43\x46, not \x43. Unlike utf8 and EUC, in escape-based encodings you can't tell if a given octet is a whole character or just part of it. Fortunately PerlIO also supports line buffer if you tell PerlIO to use one instead of fixed buffer. Since ISO-2022-JP is guaranteed to revert to ASCII at the end of the line, partial character will never happen when line buffer is used. To tell PerlIO to use line buffer, implement -E<gt>needs_lines method for your encoding object. See L<Encode::Encoding> for details. Thanks to these efforts most encodings that come with Encode support PerlIO but that still leaves following encodings. iso-2022-kr MIME-B MIME-Header MIME-Q Fortunately iso-2022-kr is hardly used (according to Jungshik) and MIME-* are very unlikely to be fed to PerlIO because they are for mail headers. See L<Encode::MIME::Header> for details. =head2 How can I tell whether my encoding fully supports PerlIO ? As of this writing, any encoding whose class belongs to Encode::XS and Encode::Unicode works. The Encode module has a C<perlio_ok> method which you can use before applying PerlIO encoding to the filehandle. Here is an example: my $use_perlio = perlio_ok($enc); my $layer = $use_perlio ? "<:raw" : "<:encoding($enc)"; open my $fh, $layer, $file or die "$file : $!"; while(<$fh>){ $_ = decode($enc, $_) unless $use_perlio; # .... } =head1 SEE ALSO L<Encode::Encoding>, L<Encode::Supported>, L<Encode::PerlIO>, L<encoding>, L<perlebcdic>, L<perlfunc/open>, L<perlunicode>, L<utf8>, the Perl Unicode Mailing List E<lt>perl-unicode@perl.orgE<gt> =cut Encode/Changes.e2x 0000644 00000000263 15037233334 0007735 0 ustar 00 # # $Id: Changes.e2x,v 2.0 2004/05/16 20:55:15 dankogai Exp $ # Revision history for Perl extension Encode::$_Name_. # 0.01 $_Now_ Autogenerated by enc2xs version $_Version_. Encode/EBCDIC.pm 0000644 00000001541 15037233334 0007214 0 ustar 00 package Encode::EBCDIC; use strict; use warnings; use Encode; our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); 1; __END__ =head1 NAME Encode::EBCDIC - EBCDIC Encodings =head1 SYNOPSIS use Encode qw/encode decode/; $posix_bc = encode("posix-bc", $utf8); # loads Encode::EBCDIC implicitly $utf8 = decode("", $posix_bc); # ditto =head1 ABSTRACT This module implements various EBCDIC-Based encodings. Encodings supported are as follows. Canonical Alias Description -------------------------------------------------------------------- cp37 cp500 cp875 cp1026 cp1047 posix-bc =head1 DESCRIPTION To find how to use this module in detail, see L<Encode>. =head1 SEE ALSO L<Encode>, L<perlebcdic> =cut Encode/TW.pm 0000644 00000004364 15037233334 0006643 0 ustar 00 package Encode::TW; BEGIN { if ( ord("A") == 193 ) { die "Encode::TW not supported on EBCDIC\n"; } } use strict; use warnings; use Encode; our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); 1; __END__ =head1 NAME Encode::TW - Taiwan-based Chinese Encodings =head1 SYNOPSIS use Encode qw/encode decode/; $big5 = encode("big5", $utf8); # loads Encode::TW implicitly $utf8 = decode("big5", $big5); # ditto =head1 DESCRIPTION This module implements tradition Chinese charset encodings as used in Taiwan and Hong Kong. Encodings supported are as follows. Canonical Alias Description -------------------------------------------------------------------- big5-eten /\bbig-?5$/i Big5 encoding (with ETen extensions) /\bbig5-?et(en)?$/i /\btca-?big5$/i big5-hkscs /\bbig5-?hk(scs)?$/i /\bhk(scs)?-?big5$/i Big5 + Cantonese characters in Hong Kong MacChineseTrad Big5 + Apple Vendor Mappings cp950 Code Page 950 = Big5 + Microsoft vendor mappings -------------------------------------------------------------------- To find out how to use this module in detail, see L<Encode>. =head1 NOTES Due to size concerns, C<EUC-TW> (Extended Unix Character), C<CCCII> (Chinese Character Code for Information Interchange), C<BIG5PLUS> (CMEX's Big5+) and C<BIG5EXT> (CMEX's Big5e) are distributed separately on CPAN, under the name L<Encode::HanExtra>. That module also contains extra China-based encodings. =head1 BUGS Since the original C<big5> encoding (1984) is not supported anywhere (glibc and DOS-based systems uses C<big5> to mean C<big5-eten>; Microsoft uses C<big5> to mean C<cp950>), a conscious decision was made to alias C<big5> to C<big5-eten>, which is the de facto superset of the original big5. The C<CNS11643> encoding files are not complete. For common C<CNS11643> manipulation, please use C<EUC-TW> in L<Encode::HanExtra>, which contains planes 1-7. The ASCII region (0x00-0x7f) is preserved for all encodings, even though this conflicts with mappings by the Unicode Consortium. =head1 SEE ALSO L<Encode> =cut Encode/CN/HZ.pm 0000644 00000013704 15037233334 0007130 0 ustar 00 package Encode::CN::HZ; use strict; use warnings; use utf8 (); use vars qw($VERSION); $VERSION = do { my @r = ( q$Revision: 2.10 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Encode qw(:fallbacks); use parent qw(Encode::Encoding); __PACKAGE__->Define('hz'); # HZ is a combination of ASCII and escaped GB, so we implement it # with the GB2312(raw) encoding here. Cf. RFCs 1842 & 1843. # not ported for EBCDIC. Which should be used, "~" or "\x7E"? sub needs_lines { 1 } sub decode ($$;$) { my ( $obj, $str, $chk ) = @_; return undef unless defined $str; my $GB = Encode::find_encoding('gb2312-raw'); my $ret = substr($str, 0, 0); # to propagate taintedness my $in_ascii = 1; # default mode is ASCII. while ( length $str ) { if ($in_ascii) { # ASCII mode if ( $str =~ s/^([\x00-\x7D\x7F]+)// ) { # no '~' => ASCII $ret .= $1; # EBCDIC should need ascii2native, but not ported. } elsif ( $str =~ s/^\x7E\x7E// ) { # escaped tilde $ret .= '~'; } elsif ( $str =~ s/^\x7E\cJ// ) { # '\cJ' == LF in ASCII 1; # no-op } elsif ( $str =~ s/^\x7E\x7B// ) { # '~{' $in_ascii = 0; # to GB } else { # encounters an invalid escape, \x80 or greater last; } } else { # GB mode; the byte ranges are as in RFC 1843. no warnings 'uninitialized'; if ( $str =~ s/^((?:[\x21-\x77][\x21-\x7E])+)// ) { my $prefix = $1; $ret .= $GB->decode( $prefix, $chk ); } elsif ( $str =~ s/^\x7E\x7D// ) { # '~}' $in_ascii = 1; } else { # invalid last; } } } $_[1] = '' if $chk; # needs_lines guarantees no partial character return $ret; } sub cat_decode { my ( $obj, undef, $src, $pos, $trm, $chk ) = @_; my ( $rdst, $rsrc, $rpos ) = \@_[ 1 .. 3 ]; my $GB = Encode::find_encoding('gb2312-raw'); my $ret = ''; my $in_ascii = 1; # default mode is ASCII. my $ini_pos = pos($$rsrc); substr( $src, 0, $pos ) = ''; my $ini_len = bytes::length($src); # $trm is the first of the pair '~~', then 2nd tilde is to be removed. # XXX: Is better C<$src =~ s/^\x7E// or die if ...>? $src =~ s/^\x7E// if $trm eq "\x7E"; while ( length $src ) { my $now; if ($in_ascii) { # ASCII mode if ( $src =~ s/^([\x00-\x7D\x7F])// ) { # no '~' => ASCII $now = $1; } elsif ( $src =~ s/^\x7E\x7E// ) { # escaped tilde $now = '~'; } elsif ( $src =~ s/^\x7E\cJ// ) { # '\cJ' == LF in ASCII next; } elsif ( $src =~ s/^\x7E\x7B// ) { # '~{' $in_ascii = 0; # to GB next; } else { # encounters an invalid escape, \x80 or greater last; } } else { # GB mode; the byte ranges are as in RFC 1843. if ( $src =~ s/^((?:[\x21-\x77][\x21-\x7F])+)// ) { $now = $GB->decode( $1, $chk ); } elsif ( $src =~ s/^\x7E\x7D// ) { # '~}' $in_ascii = 1; next; } else { # invalid last; } } next if !defined $now; $ret .= $now; if ( $now eq $trm ) { $$rdst .= $ret; $$rpos = $ini_pos + $pos + $ini_len - bytes::length($src); pos($$rsrc) = $ini_pos; return 1; } } $$rdst .= $ret; $$rpos = $ini_pos + $pos + $ini_len - bytes::length($src); pos($$rsrc) = $ini_pos; return ''; # terminator not found } sub encode($$;$) { my ( $obj, $str, $chk ) = @_; return undef unless defined $str; my $GB = Encode::find_encoding('gb2312-raw'); my $ret = substr($str, 0, 0); # to propagate taintedness; my $in_ascii = 1; # default mode is ASCII. no warnings 'utf8'; # $str may be malformed UTF8 at the end of a chunk. while ( length $str ) { if ( $str =~ s/^([[:ascii:]]+)// ) { my $tmp = $1; $tmp =~ s/~/~~/g; # escapes tildes if ( !$in_ascii ) { $ret .= "\x7E\x7D"; # '~}' $in_ascii = 1; } $ret .= pack 'a*', $tmp; # remove UTF8 flag. } elsif ( $str =~ s/(.)// ) { my $s = $1; my $tmp = $GB->encode( $s, $chk || 0 ); last if !defined $tmp; if ( length $tmp == 2 ) { # maybe a valid GB char (XXX) if ($in_ascii) { $ret .= "\x7E\x7B"; # '~{' $in_ascii = 0; } $ret .= $tmp; } elsif ( length $tmp ) { # maybe FALLBACK in ASCII (XXX) if ( !$in_ascii ) { $ret .= "\x7E\x7D"; # '~}' $in_ascii = 1; } $ret .= $tmp; } } else { # if $str is malformed UTF8 *and* if length $str != 0. last; } } $_[1] = $str if $chk; # The state at the end of the chunk is discarded, even if in GB mode. # That results in the combination of GB-OUT and GB-IN, i.e. "~}~{". # Parhaps it is harmless, but further investigations may be required... if ( !$in_ascii ) { $ret .= "\x7E\x7D"; # '~}' $in_ascii = 1; } utf8::encode($ret); # https://rt.cpan.org/Ticket/Display.html?id=35120 return $ret; } 1; __END__ =head1 NAME Encode::CN::HZ -- internally used by Encode::CN =cut Encode/Config.pm 0000644 00000013661 15037233334 0007516 0 ustar 00 # # Demand-load module list # package Encode::Config; our $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use strict; use warnings; our %ExtModule = ( # Encode::Byte #iso-8859-1 is in Encode.pm itself 'iso-8859-2' => 'Encode::Byte', 'iso-8859-3' => 'Encode::Byte', 'iso-8859-4' => 'Encode::Byte', 'iso-8859-5' => 'Encode::Byte', 'iso-8859-6' => 'Encode::Byte', 'iso-8859-7' => 'Encode::Byte', 'iso-8859-8' => 'Encode::Byte', 'iso-8859-9' => 'Encode::Byte', 'iso-8859-10' => 'Encode::Byte', 'iso-8859-11' => 'Encode::Byte', 'iso-8859-13' => 'Encode::Byte', 'iso-8859-14' => 'Encode::Byte', 'iso-8859-15' => 'Encode::Byte', 'iso-8859-16' => 'Encode::Byte', 'koi8-f' => 'Encode::Byte', 'koi8-r' => 'Encode::Byte', 'koi8-u' => 'Encode::Byte', 'viscii' => 'Encode::Byte', 'cp424' => 'Encode::Byte', 'cp437' => 'Encode::Byte', 'cp737' => 'Encode::Byte', 'cp775' => 'Encode::Byte', 'cp850' => 'Encode::Byte', 'cp852' => 'Encode::Byte', 'cp855' => 'Encode::Byte', 'cp856' => 'Encode::Byte', 'cp857' => 'Encode::Byte', 'cp858' => 'Encode::Byte', 'cp860' => 'Encode::Byte', 'cp861' => 'Encode::Byte', 'cp862' => 'Encode::Byte', 'cp863' => 'Encode::Byte', 'cp864' => 'Encode::Byte', 'cp865' => 'Encode::Byte', 'cp866' => 'Encode::Byte', 'cp869' => 'Encode::Byte', 'cp874' => 'Encode::Byte', 'cp1006' => 'Encode::Byte', 'cp1250' => 'Encode::Byte', 'cp1251' => 'Encode::Byte', 'cp1252' => 'Encode::Byte', 'cp1253' => 'Encode::Byte', 'cp1254' => 'Encode::Byte', 'cp1255' => 'Encode::Byte', 'cp1256' => 'Encode::Byte', 'cp1257' => 'Encode::Byte', 'cp1258' => 'Encode::Byte', 'AdobeStandardEncoding' => 'Encode::Byte', 'MacArabic' => 'Encode::Byte', 'MacCentralEurRoman' => 'Encode::Byte', 'MacCroatian' => 'Encode::Byte', 'MacCyrillic' => 'Encode::Byte', 'MacFarsi' => 'Encode::Byte', 'MacGreek' => 'Encode::Byte', 'MacHebrew' => 'Encode::Byte', 'MacIcelandic' => 'Encode::Byte', 'MacRoman' => 'Encode::Byte', 'MacRomanian' => 'Encode::Byte', 'MacRumanian' => 'Encode::Byte', 'MacSami' => 'Encode::Byte', 'MacThai' => 'Encode::Byte', 'MacTurkish' => 'Encode::Byte', 'MacUkrainian' => 'Encode::Byte', 'nextstep' => 'Encode::Byte', 'hp-roman8' => 'Encode::Byte', #'gsm0338' => 'Encode::Byte', 'gsm0338' => 'Encode::GSM0338', # Encode::EBCDIC 'cp37' => 'Encode::EBCDIC', 'cp500' => 'Encode::EBCDIC', 'cp875' => 'Encode::EBCDIC', 'cp1026' => 'Encode::EBCDIC', 'cp1047' => 'Encode::EBCDIC', 'posix-bc' => 'Encode::EBCDIC', # Encode::Symbol 'dingbats' => 'Encode::Symbol', 'symbol' => 'Encode::Symbol', 'AdobeSymbol' => 'Encode::Symbol', 'AdobeZdingbat' => 'Encode::Symbol', 'MacDingbats' => 'Encode::Symbol', 'MacSymbol' => 'Encode::Symbol', # Encode::Unicode 'UCS-2BE' => 'Encode::Unicode', 'UCS-2LE' => 'Encode::Unicode', 'UTF-16' => 'Encode::Unicode', 'UTF-16BE' => 'Encode::Unicode', 'UTF-16LE' => 'Encode::Unicode', 'UTF-32' => 'Encode::Unicode', 'UTF-32BE' => 'Encode::Unicode', 'UTF-32LE' => 'Encode::Unicode', 'UTF-7' => 'Encode::Unicode::UTF7', ); unless ( ord("A") == 193 ) { %ExtModule = ( %ExtModule, 'euc-cn' => 'Encode::CN', 'gb12345-raw' => 'Encode::CN', 'gb2312-raw' => 'Encode::CN', 'hz' => 'Encode::CN', 'iso-ir-165' => 'Encode::CN', 'cp936' => 'Encode::CN', 'MacChineseSimp' => 'Encode::CN', '7bit-jis' => 'Encode::JP', 'euc-jp' => 'Encode::JP', 'iso-2022-jp' => 'Encode::JP', 'iso-2022-jp-1' => 'Encode::JP', 'jis0201-raw' => 'Encode::JP', 'jis0208-raw' => 'Encode::JP', 'jis0212-raw' => 'Encode::JP', 'cp932' => 'Encode::JP', 'MacJapanese' => 'Encode::JP', 'shiftjis' => 'Encode::JP', 'euc-kr' => 'Encode::KR', 'iso-2022-kr' => 'Encode::KR', 'johab' => 'Encode::KR', 'ksc5601-raw' => 'Encode::KR', 'cp949' => 'Encode::KR', 'MacKorean' => 'Encode::KR', 'big5-eten' => 'Encode::TW', 'big5-hkscs' => 'Encode::TW', 'cp950' => 'Encode::TW', 'MacChineseTrad' => 'Encode::TW', #'big5plus' => 'Encode::HanExtra', #'euc-tw' => 'Encode::HanExtra', #'gb18030' => 'Encode::HanExtra', 'MIME-Header' => 'Encode::MIME::Header', 'MIME-B' => 'Encode::MIME::Header', 'MIME-Q' => 'Encode::MIME::Header', 'MIME-Header-ISO_2022_JP' => 'Encode::MIME::Header::ISO_2022_JP', ); } # # Why not export ? to keep ConfigLocal Happy! # while ( my ( $enc, $mod ) = each %ExtModule ) { $Encode::ExtModule{$enc} = $mod; } 1; __END__ =head1 NAME Encode::Config -- internally used by Encode =cut Encode/Byte.pm 0000644 00000004576 15037233334 0007221 0 ustar 00 package Encode::Byte; use strict; use warnings; use Encode; our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); 1; __END__ =head1 NAME Encode::Byte - Single Byte Encodings =head1 SYNOPSIS use Encode qw/encode decode/; $greek = encode("iso-8859-7", $utf8); # loads Encode::Byte implicitly $utf8 = decode("iso-8859-7", $greek); # ditto =head1 ABSTRACT This module implements various single byte encodings. For most cases it uses \x80-\xff (upper half) to map non-ASCII characters. Encodings supported are as follows. Canonical Alias Description -------------------------------------------------------------------- # ISO 8859 series (iso-8859-1 is in built-in) iso-8859-2 latin2 [ISO] iso-8859-3 latin3 [ISO] iso-8859-4 latin4 [ISO] iso-8859-5 [ISO] iso-8859-6 [ISO] iso-8859-7 [ISO] iso-8859-8 [ISO] iso-8859-9 latin5 [ISO] iso-8859-10 latin6 [ISO] iso-8859-11 (iso-8859-12 is nonexistent) iso-8859-13 latin7 [ISO] iso-8859-14 latin8 [ISO] iso-8859-15 latin9 [ISO] iso-8859-16 latin10 [ISO] # Cyrillic koi8-f koi8-r cp878 [RFC1489] koi8-u [RFC2319] # Vietnamese viscii # all cp* are also available as ibm-*, ms-*, and windows-* # also see L<http://msdn.microsoft.com/en-us/library/aa752010%28VS.85%29.aspx> cp424 cp437 cp737 cp775 cp850 cp852 cp855 cp856 cp857 cp860 cp861 cp862 cp863 cp864 cp865 cp866 cp869 cp874 cp1006 cp1250 WinLatin2 cp1251 WinCyrillic cp1252 WinLatin1 cp1253 WinGreek cp1254 WinTurkish cp1255 WinHebrew cp1256 WinArabic cp1257 WinBaltic cp1258 WinVietnamese # Macintosh # Also see L<http://developer.apple.com/technotes/tn/tn1150.html> MacArabic MacCentralEurRoman MacCroatian MacCyrillic MacFarsi MacGreek MacHebrew MacIcelandic MacRoman MacRomanian MacRumanian MacSami MacThai MacTurkish MacUkrainian # More vendor encodings AdobeStandardEncoding nextstep hp-roman8 =head1 DESCRIPTION To find how to use this module in detail, see L<Encode>. =head1 SEE ALSO L<Encode> =cut Encode/encode.h 0000644 00000010060 15037233334 0007347 0 ustar 00 #ifndef ENCODE_H #define ENCODE_H #ifndef H_PERL /* check whether we're "in perl" so that we can do data parts without getting extern references to the code parts */ typedef unsigned char U8; #endif typedef struct encpage_s encpage_t; struct encpage_s { /* fields ordered to pack nicely on 32-bit machines */ const U8 *const seq; /* Packed output sequences we generate if we match */ const encpage_t *const next; /* Page to go to if we match */ const U8 min; /* Min value of octet to match this entry */ const U8 max; /* Max value of octet to match this entry */ const U8 dlen; /* destination length - size of entries in seq */ const U8 slen; /* source length - number of source octets needed */ }; /* At any point in a translation there is a page pointer which points at an array of the above structures. Basic operation : get octet from source stream. if (octet >= min && octet < max) { if slen is 0 then we cannot represent this character. if we have less than slen octets (including this one) then we have a partial character. otherwise copy dlen octets from seq + dlen*(octet-min) to output (dlen may be zero if we don't know yet.) load page pointer with next to continue. (is slen is one this is end of a character) get next octet. } else { increment the page pointer to look at next slot in the array } arrays SHALL be constructed so there is an entry which matches ..0xFF at the end, and either maps it or indicates no representation. if MSB of slen is set then mapping is an approximate "FALLBACK" entry. */ typedef struct encode_s encode_t; struct encode_s { const encpage_t *const t_utf8; /* Starting table for translation from the encoding to UTF-8 form */ const encpage_t *const f_utf8; /* Starting table for translation from UTF-8 to the encoding */ const U8 *const rep; /* Replacement character in this encoding e.g. "?" */ int replen; /* Number of octets in rep */ U8 min_el; /* Minimum octets to represent a character */ U8 max_el; /* Maximum octets to represent a character */ const char *const name[2]; /* name(s) of this encoding */ }; #ifdef H_PERL /* See comment at top of file for deviousness */ extern int do_encode(const encpage_t *enc, const U8 *src, STRLEN *slen, U8 *dst, STRLEN dlen, STRLEN *dout, int approx, const U8 *term, STRLEN tlen); extern void Encode_DefineEncoding(encode_t *enc); #endif /* H_PERL */ #define ENCODE_NOSPACE 1 #define ENCODE_PARTIAL 2 #define ENCODE_NOREP 3 #define ENCODE_FALLBACK 4 #define ENCODE_FOUND_TERM 5 /* Use the perl core value if available; it is portable to EBCDIC */ #ifdef REPLACEMENT_CHARACTER_UTF8 # define FBCHAR_UTF8 REPLACEMENT_CHARACTER_UTF8 #else # define FBCHAR_UTF8 "\xEF\xBF\xBD" #endif #define ENCODE_DIE_ON_ERR 0x0001 /* croaks immediately */ #define ENCODE_WARN_ON_ERR 0x0002 /* warn on error; may proceed */ #define ENCODE_RETURN_ON_ERR 0x0004 /* immediately returns on NOREP */ #define ENCODE_LEAVE_SRC 0x0008 /* $src updated unless set */ #define ENCODE_PERLQQ 0x0100 /* perlqq fallback string */ #define ENCODE_HTMLCREF 0x0200 /* HTML character ref. fb mode */ #define ENCODE_XMLCREF 0x0400 /* XML character ref. fb mode */ #define ENCODE_STOP_AT_PARTIAL 0x0800 /* stop at partial explicitly */ #define ENCODE_FB_DEFAULT 0x0000 #define ENCODE_FB_CROAK 0x0001 #define ENCODE_FB_QUIET ENCODE_RETURN_ON_ERR #define ENCODE_FB_WARN (ENCODE_RETURN_ON_ERR|ENCODE_WARN_ON_ERR) #define ENCODE_FB_PERLQQ (ENCODE_PERLQQ|ENCODE_LEAVE_SRC) #define ENCODE_FB_HTMLCREF (ENCODE_HTMLCREF|ENCODE_LEAVE_SRC) #define ENCODE_FB_XMLCREF (ENCODE_XMLCREF|ENCODE_LEAVE_SRC) #endif /* ENCODE_H */ Encode/CN.pm 0000644 00000003772 15037233334 0006613 0 ustar 00 package Encode::CN; BEGIN { if ( ord("A") == 193 ) { die "Encode::CN not supported on EBCDIC\n"; } } use strict; use warnings; use Encode; our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); # Relocated from Encode.pm use Encode::CN::HZ; # use Encode::CN::2022_CN; 1; __END__ =head1 NAME Encode::CN - China-based Chinese Encodings =head1 SYNOPSIS use Encode qw/encode decode/; $euc_cn = encode("euc-cn", $utf8); # loads Encode::CN implicitly $utf8 = decode("euc-cn", $euc_cn); # ditto =head1 DESCRIPTION This module implements China-based Chinese charset encodings. Encodings supported are as follows. Canonical Alias Description -------------------------------------------------------------------- euc-cn /\beuc.*cn$/i EUC (Extended Unix Character) /\bcn.*euc$/i /\bGB[-_ ]?2312(?:\D.*$|$)/i (see below) gb2312-raw The raw (low-bit) GB2312 character map gb12345-raw Traditional chinese counterpart to GB2312 (raw) iso-ir-165 GB2312 + GB6345 + GB8565 + additions MacChineseSimp GB2312 + Apple Additions cp936 Code Page 936, also known as GBK (Extended GuoBiao) hz 7-bit escaped GB2312 encoding -------------------------------------------------------------------- To find how to use this module in detail, see L<Encode>. =head1 NOTES Due to size concerns, C<GB 18030> (an extension to C<GBK>) is distributed separately on CPAN, under the name L<Encode::HanExtra>. That module also contains extra Taiwan-based encodings. =head1 BUGS When you see C<charset=gb2312> on mails and web pages, they really mean C<euc-cn> encodings. To fix that, C<gb2312> is aliased to C<euc-cn>. Use C<gb2312-raw> when you really mean it. The ASCII region (0x00-0x7f) is preserved for all encodings, even though this conflicts with mappings by the Unicode Consortium. =head1 SEE ALSO L<Encode> =cut Encode/Unicode/UTF7.pm 0000644 00000007443 15037233334 0010425 0 ustar 00 # # $Id: UTF7.pm,v 2.10 2017/06/10 17:23:50 dankogai Exp $ # package Encode::Unicode::UTF7; use strict; use warnings; use parent qw(Encode::Encoding); __PACKAGE__->Define('UTF-7'); our $VERSION = do { my @r = ( q$Revision: 2.10 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use MIME::Base64; use Encode qw(find_encoding); # # Algorithms taken from Unicode::String by Gisle Aas # our $OPTIONAL_DIRECT_CHARS = 1; my $specials = quotemeta "\'(),-./:?"; $OPTIONAL_DIRECT_CHARS and $specials .= quotemeta "!\"#$%&*;<=>@[]^_`{|}"; # \s will not work because it matches U+3000 DEOGRAPHIC SPACE # We use qr/[\n\r\t\ ] instead my $re_asis = qr/(?:[\n\r\t\ A-Za-z0-9$specials])/; my $re_encoded = qr/(?:[^\n\r\t\ A-Za-z0-9$specials])/; my $e_utf16 = find_encoding("UTF-16BE"); sub needs_lines { 1 } sub encode($$;$) { my ( $obj, $str, $chk ) = @_; return undef unless defined $str; my $len = length($str); pos($str) = 0; my $bytes = substr($str, 0, 0); # to propagate taintedness while ( pos($str) < $len ) { if ( $str =~ /\G($re_asis+)/ogc ) { my $octets = $1; utf8::downgrade($octets); $bytes .= $octets; } elsif ( $str =~ /\G($re_encoded+)/ogsc ) { if ( $1 eq "+" ) { $bytes .= "+-"; } else { my $s = $1; my $base64 = encode_base64( $e_utf16->encode($s), '' ); $base64 =~ s/=+$//; $bytes .= "+$base64-"; } } else { die "This should not happen! (pos=" . pos($str) . ")"; } } $_[1] = '' if $chk; return $bytes; } sub decode($$;$) { use re 'taint'; my ( $obj, $bytes, $chk ) = @_; return undef unless defined $bytes; my $len = length($bytes); my $str = substr($bytes, 0, 0); # to propagate taintedness; pos($bytes) = 0; no warnings 'uninitialized'; while ( pos($bytes) < $len ) { if ( $bytes =~ /\G([^+]+)/ogc ) { $str .= $1; } elsif ( $bytes =~ /\G\+-/ogc ) { $str .= "+"; } elsif ( $bytes =~ /\G\+([A-Za-z0-9+\/]+)-?/ogsc ) { my $base64 = $1; my $pad = length($base64) % 4; $base64 .= "=" x ( 4 - $pad ) if $pad; $str .= $e_utf16->decode( decode_base64($base64) ); } elsif ( $bytes =~ /\G\+/ogc ) { $^W and warn "Bad UTF7 data escape"; $str .= "+"; } else { die "This should not happen " . pos($bytes); } } $_[1] = '' if $chk; return $str; } 1; __END__ =head1 NAME Encode::Unicode::UTF7 -- UTF-7 encoding =head1 SYNOPSIS use Encode qw/encode decode/; $utf7 = encode("UTF-7", $utf8); $utf8 = decode("UTF-7", $ucs2); =head1 ABSTRACT This module implements UTF-7 encoding documented in RFC 2152. UTF-7, as its name suggests, is a 7-bit re-encoded version of UTF-16BE. It is designed to be MTA-safe and expected to be a standard way to exchange Unicoded mails via mails. But with the advent of UTF-8 and 8-bit compliant MTAs, UTF-7 is hardly ever used. UTF-7 was not supported by Encode until version 1.95 because of that. But Unicode::String, a module by Gisle Aas which adds Unicode supports to non-utf8-savvy perl did support UTF-7, the UTF-7 support was added so Encode can supersede Unicode::String 100%. =head1 In Practice When you want to encode Unicode for mails and web pages, however, do not use UTF-7 unless you are sure your recipients and readers can handle it. Very few MUAs and WWW Browsers support these days (only Mozilla seems to support one). For general cases, use UTF-8 for message body and MIME-Header for header instead. =head1 SEE ALSO L<Encode>, L<Encode::Unicode>, L<Unicode::String> RFC 2781 L<http://www.ietf.org/rfc/rfc2152.txt> =cut Encode/Guess.pm 0000644 00000023601 15037233334 0007372 0 ustar 00 package Encode::Guess; use strict; use warnings; use Encode qw(:fallbacks find_encoding); our $VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; my $Canon = 'Guess'; use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; our %DEF_SUSPECTS = map { $_ => find_encoding($_) } qw(ascii utf8); my $obj = bless { Name => $Canon, Suspects => {%DEF_SUSPECTS}, } => __PACKAGE__; Encode::define_encoding($obj, $Canon); use parent qw(Encode::Encoding); sub needs_lines { 1 } sub perlio_ok { 0 } our @EXPORT = qw(guess_encoding); our $NoUTFAutoGuess = 0; our $UTF8_BOM = pack( "C3", 0xef, 0xbb, 0xbf ); sub import { # Exporter not used so we do it on our own my $callpkg = caller; for my $item (@EXPORT) { no strict 'refs'; *{"$callpkg\::$item"} = \&{"$item"}; } set_suspects(@_); } sub set_suspects { my $class = shift; my $self = ref($class) ? $class : $Encode::Encoding{$Canon}; $self->{Suspects} = {%DEF_SUSPECTS}; $self->add_suspects(@_); } sub add_suspects { my $class = shift; my $self = ref($class) ? $class : $Encode::Encoding{$Canon}; for my $c (@_) { my $e = find_encoding($c) or die "Unknown encoding: $c"; $self->{Suspects}{ $e->name } = $e; DEBUG and warn "Added: ", $e->name; } } sub decode($$;$) { my ( $obj, $octet, $chk ) = @_; my $guessed = guess( $obj, $octet ); unless ( ref($guessed) ) { require Carp; Carp::croak($guessed); } my $utf8 = $guessed->decode( $octet, $chk || 0 ); $_[1] = $octet if $chk; return $utf8; } sub guess_encoding { guess( $Encode::Encoding{$Canon}, @_ ); } sub guess { my $class = shift; my $obj = ref($class) ? $class : $Encode::Encoding{$Canon}; my $octet = shift; # sanity check return "Empty string, empty guess" unless defined $octet and length $octet; # cheat 0: utf8 flag; if ( Encode::is_utf8($octet) ) { return find_encoding('utf8') unless $NoUTFAutoGuess; Encode::_utf8_off($octet); } # cheat 1: BOM use Encode::Unicode; unless ($NoUTFAutoGuess) { my $BOM = pack( 'C3', unpack( "C3", $octet ) ); return find_encoding('utf8') if ( defined $BOM and $BOM eq $UTF8_BOM ); $BOM = unpack( 'N', $octet ); return find_encoding('UTF-32') if ( defined $BOM and ( $BOM == 0xFeFF or $BOM == 0xFFFe0000 ) ); $BOM = unpack( 'n', $octet ); return find_encoding('UTF-16') if ( defined $BOM and ( $BOM == 0xFeFF or $BOM == 0xFFFe ) ); if ( $octet =~ /\x00/o ) { # if \x00 found, we assume UTF-(16|32)(BE|LE) my $utf; my ( $be, $le ) = ( 0, 0 ); if ( $octet =~ /\x00\x00/o ) { # UTF-32(BE|LE) assumed $utf = "UTF-32"; for my $char ( unpack( 'N*', $octet ) ) { $char & 0x0000ffff and $be++; $char & 0xffff0000 and $le++; } } else { # UTF-16(BE|LE) assumed $utf = "UTF-16"; for my $char ( unpack( 'n*', $octet ) ) { $char & 0x00ff and $be++; $char & 0xff00 and $le++; } } DEBUG and warn "$utf, be == $be, le == $le"; $be == $le and return "Encodings ambiguous between $utf BE and LE ($be, $le)"; $utf .= ( $be > $le ) ? 'BE' : 'LE'; return find_encoding($utf); } } my %try = %{ $obj->{Suspects} }; for my $c (@_) { my $e = find_encoding($c) or die "Unknown encoding: $c"; $try{ $e->name } = $e; DEBUG and warn "Added: ", $e->name; } my $nline = 1; for my $line ( split /\r\n?|\n/, $octet ) { # cheat 2 -- \e in the string if ( $line =~ /\e/o ) { my @keys = keys %try; delete @try{qw/utf8 ascii/}; for my $k (@keys) { ref( $try{$k} ) eq 'Encode::XS' and delete $try{$k}; } } my %ok = %try; # warn join(",", keys %try); for my $k ( keys %try ) { my $scratch = $line; $try{$k}->decode( $scratch, FB_QUIET ); if ( $scratch eq '' ) { DEBUG and warn sprintf( "%4d:%-24s ok\n", $nline, $k ); } else { use bytes (); DEBUG and warn sprintf( "%4d:%-24s not ok; %d bytes left\n", $nline, $k, bytes::length($scratch) ); delete $ok{$k}; } } %ok or return "No appropriate encodings found!"; if ( scalar( keys(%ok) ) == 1 ) { my ($retval) = values(%ok); return $retval; } %try = %ok; $nline++; } $try{ascii} or return "Encodings too ambiguous: ", join( " or ", keys %try ); return $try{ascii}; } 1; __END__ =head1 NAME Encode::Guess -- Guesses encoding from data =head1 SYNOPSIS # if you are sure $data won't contain anything bogus use Encode; use Encode::Guess qw/euc-jp shiftjis 7bit-jis/; my $utf8 = decode("Guess", $data); my $data = encode("Guess", $utf8); # this doesn't work! # more elaborate way use Encode::Guess; my $enc = guess_encoding($data, qw/euc-jp shiftjis 7bit-jis/); ref($enc) or die "Can't guess: $enc"; # trap error this way $utf8 = $enc->decode($data); # or $utf8 = decode($enc->name, $data) =head1 ABSTRACT Encode::Guess enables you to guess in what encoding a given data is encoded, or at least tries to. =head1 DESCRIPTION By default, it checks only ascii, utf8 and UTF-16/32 with BOM. use Encode::Guess; # ascii/utf8/BOMed UTF To use it more practically, you have to give the names of encodings to check (I<suspects> as follows). The name of suspects can either be canonical names or aliases. CAVEAT: Unlike UTF-(16|32), BOM in utf8 is NOT AUTOMATICALLY STRIPPED. # tries all major Japanese Encodings as well use Encode::Guess qw/euc-jp shiftjis 7bit-jis/; If the C<$Encode::Guess::NoUTFAutoGuess> variable is set to a true value, no heuristics will be applied to UTF8/16/32, and the result will be limited to the suspects and C<ascii>. =over 4 =item Encode::Guess->set_suspects You can also change the internal suspects list via C<set_suspects> method. use Encode::Guess; Encode::Guess->set_suspects(qw/euc-jp shiftjis 7bit-jis/); =item Encode::Guess->add_suspects Or you can use C<add_suspects> method. The difference is that C<set_suspects> flushes the current suspects list while C<add_suspects> adds. use Encode::Guess; Encode::Guess->add_suspects(qw/euc-jp shiftjis 7bit-jis/); # now the suspects are euc-jp,shiftjis,7bit-jis, AND # euc-kr,euc-cn, and big5-eten Encode::Guess->add_suspects(qw/euc-kr euc-cn big5-eten/); =item Encode::decode("Guess" ...) When you are content with suspects list, you can now my $utf8 = Encode::decode("Guess", $data); =item Encode::Guess->guess($data) But it will croak if: =over =item * Two or more suspects remain =item * No suspects left =back So you should instead try this; my $decoder = Encode::Guess->guess($data); On success, $decoder is an object that is documented in L<Encode::Encoding>. So you can now do this; my $utf8 = $decoder->decode($data); On failure, $decoder now contains an error message so the whole thing would be as follows; my $decoder = Encode::Guess->guess($data); die $decoder unless ref($decoder); my $utf8 = $decoder->decode($data); =item guess_encoding($data, [, I<list of suspects>]) You can also try C<guess_encoding> function which is exported by default. It takes $data to check and it also takes the list of suspects by option. The optional suspect list is I<not reflected> to the internal suspects list. my $decoder = guess_encoding($data, qw/euc-jp euc-kr euc-cn/); die $decoder unless ref($decoder); my $utf8 = $decoder->decode($data); # check only ascii, utf8 and UTF-(16|32) with BOM my $decoder = guess_encoding($data); =back =head1 CAVEATS =over 4 =item * Because of the algorithm used, ISO-8859 series and other single-byte encodings do not work well unless either one of ISO-8859 is the only one suspect (besides ascii and utf8). use Encode::Guess; # perhaps ok my $decoder = guess_encoding($data, 'latin1'); # definitely NOT ok my $decoder = guess_encoding($data, qw/latin1 greek/); The reason is that Encode::Guess guesses encoding by trial and error. It first splits $data into lines and tries to decode the line for each suspect. It keeps it going until all but one encoding is eliminated out of suspects list. ISO-8859 series is just too successful for most cases (because it fills almost all code points in \x00-\xff). =item * Do not mix national standard encodings and the corresponding vendor encodings. # a very bad idea my $decoder = guess_encoding($data, qw/shiftjis MacJapanese cp932/); The reason is that vendor encoding is usually a superset of national standard so it becomes too ambiguous for most cases. =item * On the other hand, mixing various national standard encodings automagically works unless $data is too short to allow for guessing. # This is ok if $data is long enough my $decoder = guess_encoding($data, qw/euc-cn euc-jp shiftjis 7bit-jis euc-kr big5-eten/); =item * DO NOT PUT TOO MANY SUSPECTS! Don't you try something like this! my $decoder = guess_encoding($data, Encode->encodings(":all")); =back It is, after all, just a guess. You should alway be explicit when it comes to encodings. But there are some, especially Japanese, environment that guess-coding is a must. Use this module with care. =head1 TO DO Encode::Guess does not work on EBCDIC platforms. =head1 SEE ALSO L<Encode>, L<Encode::Encoding> =cut Encode/Makefile_PL.e2x 0000644 00000012060 15037233334 0010473 0 ustar 00 # # This file is auto-generated by: # enc2xs version $_Version_ # $_Now_ # use 5.7.2; use strict; use ExtUtils::MakeMaker; use Config; # Please edit the following to the taste! my $name = '$_Name_'; my %tables = ( $_Name__t => [ $_TableFiles_ ], ); #### DO NOT EDIT BEYOND THIS POINT! require File::Spec; my ($enc2xs, $encode_h) = (); my @path_ext = (''); @path_ext = split(';', $ENV{PATHEXT}) if $^O eq 'MSWin32'; PATHLOOP: for my $d (@Config{qw/bin sitebin vendorbin/}, (split /$Config{path_sep}/o, $ENV{PATH})){ for my $f (qw/enc2xs enc2xs5.7.3/){ my $path = File::Spec->catfile($d, $f); for my $ext (@path_ext) { my $bin = "$path$ext"; -r "$bin" and $enc2xs = $bin and last PATHLOOP; } } } $enc2xs or die "enc2xs not found!"; print "enc2xs is $enc2xs\n"; my %encode_h = (); for my $d (@INC){ my $dir = File::Spec->catfile($d, "Encode"); my $file = File::Spec->catfile($dir, "encode.h"); -f $file and $encode_h{$dir} = -M $file; } %encode_h or die "encode.h not found!"; # find the latest one ($encode_h) = sort {$encode_h{$b} <=> $encode_h{$a}} keys %encode_h; print "encode.h is at $encode_h\n"; WriteMakefile( INC => "-I$encode_h", #### END_OF_HEADER -- DO NOT EDIT THIS LINE BY HAND! #### NAME => 'Encode::'.$name, VERSION_FROM => "$name.pm", OBJECT => '$(O_FILES)', 'dist' => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', DIST_DEFAULT => 'all tardist', }, MAN3PODS => {}, PREREQ_PM => { 'Encode' => "1.41", }, # OS 390 winges about line numbers > 64K ??? XSOPT => '-nolinenumbers', ); package MY; sub post_initialize { my ($self) = @_; my %o; my $x = $self->{'OBJ_EXT'}; # Add the table O_FILES foreach my $e (keys %tables) { $o{$e.$x} = 1; } $o{"$name$x"} = 1; $self->{'O_FILES'} = [sort keys %o]; my @files = ("$name.xs"); $self->{'C'} = ["$name.c"]; # The next two lines to make MacPerl Happy -- dankogai via pudge $self->{SOURCE} .= " $name.c" if $^O eq 'MacOS' && $self->{SOURCE} !~ /\b$name\.c\b/; # $self->{'H'} = [$self->catfile($self->updir,'encode.h')]; my %xs; foreach my $table (sort keys %tables) { push (@{$self->{'C'}},"$table.c"); # Do NOT add $table.h etc. to H_FILES unless we own up as to how they # get built. foreach my $ext (qw($(OBJ_EXT) .c .h .exh .fnm)) { push (@files,$table.$ext); } } $self->{'XS'} = { "$name.xs" => "$name.c" }; $self->{'clean'}{'FILES'} .= join(' ',@files); open(XS,">$name.xs") || die "Cannot open $name.xs:$!"; print XS <<'END'; #include <EXTERN.h> #include <perl.h> #include <XSUB.h> #include "encode.h" END foreach my $table (sort keys %tables) { print XS qq[#include "${table}.h"\n]; } print XS <<"END"; static void Encode_XSEncoding(pTHX_ encode_t *enc) { dSP; HV *stash = gv_stashpv("Encode::XS", TRUE); SV *iv = newSViv(PTR2IV(enc)); SV *sv = sv_bless(newRV_noinc(iv),stash); int i = 0; /* with the SvLEN() == 0 hack, PVX won't be freed. We cast away name's constness, in the hope that perl won't mess with it. */ assert(SvTYPE(iv) >= SVt_PV); assert(SvLEN(iv) == 0); SvFLAGS(iv) |= SVp_POK; SvPVX(iv) = (char*) enc->name[0]; PUSHMARK(sp); XPUSHs(sv); while (enc->name[i]) { const char *name = enc->name[i++]; XPUSHs(sv_2mortal(newSVpvn(name,strlen(name)))); } PUTBACK; call_pv("Encode::define_encoding",G_DISCARD); SvREFCNT_dec(sv); } MODULE = Encode::$name PACKAGE = Encode::$name PROTOTYPES: DISABLE BOOT: { END foreach my $table (sort keys %tables) { print XS qq[#include "${table}.exh"\n]; } print XS "}\n"; close(XS); return "# Built $name.xs\n\n"; } sub postamble { my $self = shift; my $dir = "."; # $self->catdir('Encode'); my $str = "# $name\$(OBJ_EXT) depends on .h and .exh files not .c files - but all written by enc2xs\n"; $str .= "$name.c : $name.xs "; foreach my $table (sort keys %tables) { $str .= " $table.c"; } $str .= "\n\n"; $str .= "$name\$(OBJ_EXT) : $name.c\n\n"; foreach my $table (sort keys %tables) { my $numlines = 1; my $lengthsofar = length($str); my $continuator = ''; $str .= "$table.c : Makefile.PL"; foreach my $file (@{$tables{$table}}) { $str .= $continuator.' '.$self->catfile($dir,$file); if ( length($str)-$lengthsofar > 128*$numlines ) { $continuator .= " \\\n\t"; $numlines++; } else { $continuator = ''; } } my $plib = $self->{PERL_CORE} ? '"-I$(PERL_LIB)"' : ''; my $ucopts = '-"Q"'; $str .= qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n}; open (FILELIST, ">$table.fnm") || die "Could not open $table.fnm: $!"; foreach my $file (@{$tables{$table}}) { print FILELIST $self->catfile($dir,$file) . "\n"; } close(FILELIST); } return $str; } Encode/Alias.pm 0000644 00000030401 15037233334 0007331 0 ustar 00 package Encode::Alias; use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 2.24 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use Exporter 'import'; # Public, encouraged API is exported by default our @EXPORT = qw ( define_alias find_alias ); our @Alias; # ordered matching list our %Alias; # cached known aliases sub find_alias { my $class = shift; my $find = shift; unless ( exists $Alias{$find} ) { $Alias{$find} = undef; # Recursion guard for ( my $i = 0 ; $i < @Alias ; $i += 2 ) { my $alias = $Alias[$i]; my $val = $Alias[ $i + 1 ]; my $new; if ( ref($alias) eq 'Regexp' && $find =~ $alias ) { DEBUG and warn "eval $val"; $new = eval $val; DEBUG and $@ and warn "$val, $@"; } elsif ( ref($alias) eq 'CODE' ) { DEBUG and warn "$alias", "->", "($find)"; $new = $alias->($find); } elsif ( lc($find) eq lc($alias) ) { $new = $val; } if ( defined($new) ) { next if $new eq $find; # avoid (direct) recursion on bugs DEBUG and warn "$alias, $new"; my $enc = ( ref($new) ) ? $new : Encode::find_encoding($new); if ($enc) { $Alias{$find} = $enc; last; } } } # case insensitive search when canonical is not in all lowercase # RT ticket #7835 unless ( $Alias{$find} ) { my $lcfind = lc($find); for my $name ( keys %Encode::Encoding, keys %Encode::ExtModule ) { $lcfind eq lc($name) or next; $Alias{$find} = Encode::find_encoding($name); DEBUG and warn "$find => $name"; } } } if (DEBUG) { my $name; if ( my $e = $Alias{$find} ) { $name = $e->name; } else { $name = ""; } warn "find_alias($class, $find)->name = $name"; } return $Alias{$find}; } sub define_alias { while (@_) { my $alias = shift; my $name = shift; unshift( @Alias, $alias => $name ) # newer one has precedence if defined $alias; if ( ref($alias) ) { # clear %Alias cache to allow overrides my @a = keys %Alias; for my $k (@a) { if ( ref($alias) eq 'Regexp' && $k =~ $alias ) { DEBUG and warn "delete \$Alias\{$k\}"; delete $Alias{$k}; } elsif ( ref($alias) eq 'CODE' && $alias->($k) ) { DEBUG and warn "delete \$Alias\{$k\}"; delete $Alias{$k}; } } } elsif (defined $alias) { DEBUG and warn "delete \$Alias\{$alias\}"; delete $Alias{$alias}; } elsif (DEBUG) { require Carp; Carp::croak("undef \$alias"); } } } # HACK: Encode must be used after define_alias is declarated as Encode calls define_alias use Encode (); # Allow latin-1 style names as well # 0 1 2 3 4 5 6 7 8 9 10 our @Latin2iso = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 ); # Allow winlatin1 style names as well our %Winlatin2cp = ( 'latin1' => 1252, 'latin2' => 1250, 'cyrillic' => 1251, 'greek' => 1253, 'turkish' => 1254, 'hebrew' => 1255, 'arabic' => 1256, 'baltic' => 1257, 'vietnamese' => 1258, ); init_aliases(); sub undef_aliases { @Alias = (); %Alias = (); } sub init_aliases { undef_aliases(); # Try all-lower-case version should all else fails define_alias( qr/^(.*)$/ => '"\L$1"' ); # UTF/UCS stuff define_alias( qr/^(unicode-1-1-)?UTF-?7$/i => '"UTF-7"' ); define_alias( qr/^UCS-?2-?LE$/i => '"UCS-2LE"' ); define_alias( qr/^UCS-?2-?(BE)?$/i => '"UCS-2BE"', qr/^UCS-?4-?(BE|LE|)?$/i => 'uc("UTF-32$1")', qr/^iso-10646-1$/i => '"UCS-2BE"' ); define_alias( qr/^UTF-?(16|32)-?BE$/i => '"UTF-$1BE"', qr/^UTF-?(16|32)-?LE$/i => '"UTF-$1LE"', qr/^UTF-?(16|32)$/i => '"UTF-$1"', ); # ASCII define_alias( qr/^(?:US-?)ascii$/i => '"ascii"' ); define_alias( 'C' => 'ascii' ); define_alias( qr/\b(?:ISO[-_]?)?646(?:[-_]?US)?$/i => '"ascii"' ); # Allow variants of iso-8859-1 etc. define_alias( qr/\biso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' ); # At least HP-UX has these. define_alias( qr/\biso8859(\d+)$/i => '"iso-8859-$1"' ); # More HP stuff. define_alias( qr/\b(?:hp-)?(arabic|greek|hebrew|kana|roman|thai|turkish)8$/i => '"${1}8"' ); # The Official name of ASCII. define_alias( qr/\bANSI[-_]?X3\.4[-_]?1968$/i => '"ascii"' ); # This is a font issue, not an encoding issue. # (The currency symbol of the Latin 1 upper half # has been redefined as the euro symbol.) define_alias( qr/^(.+)\@euro$/i => '"$1"' ); define_alias( qr/\b(?:iso[-_]?)?latin[-_]?(\d+)$/i => 'defined $Encode::Alias::Latin2iso[$1] ? "iso-8859-$Encode::Alias::Latin2iso[$1]" : undef' ); define_alias( qr/\bwin(latin[12]|cyrillic|baltic|greek|turkish| hebrew|arabic|baltic|vietnamese)$/ix => '"cp" . $Encode::Alias::Winlatin2cp{lc($1)}' ); # Common names for non-latin preferred MIME names define_alias( 'ascii' => 'US-ascii', 'cyrillic' => 'iso-8859-5', 'arabic' => 'iso-8859-6', 'greek' => 'iso-8859-7', 'hebrew' => 'iso-8859-8', 'thai' => 'iso-8859-11', ); # RT #20781 define_alias(qr/\btis-?620\b/i => '"iso-8859-11"'); # At least AIX has IBM-NNN (surprisingly...) instead of cpNNN. # And Microsoft has their own naming (again, surprisingly). # And windows-* is registered in IANA! define_alias( qr/\b(?:cp|ibm|ms|windows)[-_ ]?(\d{2,4})$/i => '"cp$1"' ); # Sometimes seen with a leading zero. # define_alias( qr/\bcp037\b/i => '"cp37"'); # Mac Mappings # predefined in *.ucm; unneeded # define_alias( qr/\bmacIcelandic$/i => '"macIceland"'); define_alias( qr/^(?:x[_-])?mac[_-](.*)$/i => '"mac$1"' ); # http://rt.cpan.org/Ticket/Display.html?id=36326 define_alias( qr/^macintosh$/i => '"MacRoman"' ); # https://rt.cpan.org/Ticket/Display.html?id=78125 define_alias( qr/^macce$/i => '"MacCentralEurRoman"' ); # Ououououou. gone. They are different! # define_alias( qr/\bmacRomanian$/i => '"macRumanian"'); # Standardize on the dashed versions. define_alias( qr/\bkoi8[\s\-_]*([ru])$/i => '"koi8-$1"' ); unless ($Encode::ON_EBCDIC) { # for Encode::CN define_alias( qr/\beuc.*cn$/i => '"euc-cn"' ); define_alias( qr/\bcn.*euc$/i => '"euc-cn"' ); # define_alias( qr/\bGB[- ]?(\d+)$/i => '"euc-cn"' ) # CP936 doesn't have vendor-addon for GBK, so they're identical. define_alias( qr/^gbk$/i => '"cp936"' ); # This fixes gb2312 vs. euc-cn confusion, practically define_alias( qr/\bGB[-_ ]?2312(?!-?raw)/i => '"euc-cn"' ); # for Encode::JP define_alias( qr/\bjis$/i => '"7bit-jis"' ); define_alias( qr/\beuc.*jp$/i => '"euc-jp"' ); define_alias( qr/\bjp.*euc$/i => '"euc-jp"' ); define_alias( qr/\bujis$/i => '"euc-jp"' ); define_alias( qr/\bshift.*jis$/i => '"shiftjis"' ); define_alias( qr/\bsjis$/i => '"shiftjis"' ); define_alias( qr/\bwindows-31j$/i => '"cp932"' ); # for Encode::KR define_alias( qr/\beuc.*kr$/i => '"euc-kr"' ); define_alias( qr/\bkr.*euc$/i => '"euc-kr"' ); # This fixes ksc5601 vs. euc-kr confusion, practically define_alias( qr/(?:x-)?uhc$/i => '"cp949"' ); define_alias( qr/(?:x-)?windows-949$/i => '"cp949"' ); define_alias( qr/\bks_c_5601-1987$/i => '"cp949"' ); # for Encode::TW define_alias( qr/\bbig-?5$/i => '"big5-eten"' ); define_alias( qr/\bbig5-?et(?:en)?$/i => '"big5-eten"' ); define_alias( qr/\btca[-_]?big5$/i => '"big5-eten"' ); define_alias( qr/\bbig5-?hk(?:scs)?$/i => '"big5-hkscs"' ); define_alias( qr/\bhk(?:scs)?[-_]?big5$/i => '"big5-hkscs"' ); } # https://github.com/dankogai/p5-encode/issues/37 define_alias(qr/cp65000/i => '"UTF-7"'); define_alias(qr/cp65001/i => '"utf-8-strict"'); # utf8 is blessed :) define_alias( qr/\bUTF-8$/i => '"utf-8-strict"' ); # At last, Map white space and _ to '-' define_alias( qr/^([^\s_]+)[\s_]+([^\s_]*)$/i => '"$1-$2"' ); } 1; __END__ # TODO: HP-UX '8' encodings arabic8 greek8 hebrew8 kana8 thai8 turkish8 # TODO: HP-UX '15' encodings japanese15 korean15 roi15 # TODO: Cyrillic encoding ISO-IR-111 (useful?) # TODO: Armenian encoding ARMSCII-8 # TODO: Hebrew encoding ISO-8859-8-1 # TODO: Thai encoding TCVN # TODO: Vietnamese encodings VPS # TODO: Mac Asian+African encodings: Arabic Armenian Bengali Burmese # ChineseSimp ChineseTrad Devanagari Ethiopic ExtArabic # Farsi Georgian Gujarati Gurmukhi Hebrew Japanese # Kannada Khmer Korean Laotian Malayalam Mongolian # Oriya Sinhalese Symbol Tamil Telugu Tibetan Vietnamese =head1 NAME Encode::Alias - alias definitions to encodings =head1 SYNOPSIS use Encode; use Encode::Alias; define_alias( "newName" => ENCODING); define_alias( qr/.../ => ENCODING); define_alias( sub { return ENCODING if ...; } ); =head1 DESCRIPTION Allows newName to be used as an alias for ENCODING. ENCODING may be either the name of an encoding or an encoding object (as described in L<Encode>). Currently the first argument to define_alias() can be specified in the following ways: =over 4 =item As a simple string. =item As a qr// compiled regular expression, e.g.: define_alias( qr/^iso8859-(\d+)$/i => '"iso-8859-$1"' ); In this case, if I<ENCODING> is not a reference, it is C<eval>-ed in order to allow C<$1> etc. to be substituted. The example is one way to alias names as used in X11 fonts to the MIME names for the iso-8859-* family. Note the double quotes inside the single quotes. (or, you don't have to do this yourself because this example is predefined) If you are using a regex here, you have to use the quotes as shown or it won't work. Also note that regex handling is tricky even for the experienced. Use this feature with caution. =item As a code reference, e.g.: define_alias( sub {shift =~ /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } ); The same effect as the example above in a different way. The coderef takes the alias name as an argument and returns a canonical name on success or undef if not. Note the second argument is ignored if provided. Use this with even more caution than the regex version. =back =head3 Changes in code reference aliasing As of Encode 1.87, the older form define_alias( sub { return /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } ); no longer works. Encode up to 1.86 internally used "local $_" to implement this older form. But consider the code below; use Encode; $_ = "eeeee" ; while (/(e)/g) { my $utf = decode('aliased-encoding-name', $1); print "position:",pos,"\n"; } Prior to Encode 1.86 this fails because of "local $_". =head2 Alias overloading You can override predefined aliases by simply applying define_alias(). The new alias is always evaluated first, and when necessary, define_alias() flushes the internal cache to make the new definition available. # redirect SHIFT_JIS to MS/IBM Code Page 932, which is a # superset of SHIFT_JIS define_alias( qr/shift.*jis$/i => '"cp932"' ); define_alias( qr/sjis$/i => '"cp932"' ); If you want to zap all predefined aliases, you can use Encode::Alias->undef_aliases; to do so. And Encode::Alias->init_aliases; gets the factory settings back. Note that define_alias() will not be able to override the canonical name of encodings. Encodings are first looked up by canonical name before potential aliases are tried. =head1 SEE ALSO L<Encode>, L<Encode::Supported> =cut Encode/Encoder.pm 0000644 00000014254 15037233334 0007667 0 ustar 00 # # $Id: Encoder.pm,v 2.3 2013/09/14 07:51:59 dankogai Exp $ # package Encode::Encoder; use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw ( encoder ); our $AUTOLOAD; use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use Encode qw(encode decode find_encoding from_to); use Carp; sub new { my ( $class, $data, $encname ) = @_; unless ($encname) { $encname = Encode::is_utf8($data) ? 'utf8' : ''; } else { my $obj = find_encoding($encname) or croak __PACKAGE__, ": unknown encoding: $encname"; $encname = $obj->name; } my $self = { data => $data, encoding => $encname, }; bless $self => $class; } sub encoder { __PACKAGE__->new(@_) } sub data { my ( $self, $data ) = @_; if ( defined $data ) { $self->{data} = $data; return $data; } else { return $self->{data}; } } sub encoding { my ( $self, $encname ) = @_; if ($encname) { my $obj = find_encoding($encname) or confess __PACKAGE__, ": unknown encoding: $encname"; $self->{encoding} = $obj->name; return $self; } else { return $self->{encoding}; } } sub bytes { my ( $self, $encname ) = @_; $encname ||= $self->{encoding}; my $obj = find_encoding($encname) or confess __PACKAGE__, ": unknown encoding: $encname"; $self->{data} = $obj->decode( $self->{data}, 1 ); $self->{encoding} = ''; return $self; } sub DESTROY { # defined so it won't autoload. DEBUG and warn shift; } sub AUTOLOAD { my $self = shift; my $type = ref($self) or confess "$self is not an object"; my $myname = $AUTOLOAD; $myname =~ s/.*://; # strip fully-qualified portion my $obj = find_encoding($myname) or confess __PACKAGE__, ": unknown encoding: $myname"; DEBUG and warn $self->{encoding}, " => ", $obj->name; if ( $self->{encoding} ) { from_to( $self->{data}, $self->{encoding}, $obj->name, 1 ); } else { $self->{data} = $obj->encode( $self->{data}, 1 ); } $self->{encoding} = $obj->name; return $self; } use overload q("") => sub { $_[0]->{data} }, q(0+) => sub { use bytes(); bytes::length( $_[0]->{data} ) }, fallback => 1, ; 1; __END__ =head1 NAME Encode::Encoder -- Object Oriented Encoder =head1 SYNOPSIS use Encode::Encoder; # Encode::encode("ISO-8859-1", $data); Encode::Encoder->new($data)->iso_8859_1; # OOP way # shortcut use Encode::Encoder qw(encoder); encoder($data)->iso_8859_1; # you can stack them! encoder($data)->iso_8859_1->base64; # provided base64() is defined # you can use it as a decoder as well encoder($base64)->bytes('base64')->latin1; # stringified print encoder($data)->utf8->latin1; # prints the string in latin1 # numified encoder("\x{abcd}\x{ef}g")->utf8 == 6; # true. bytes::length($data) =head1 ABSTRACT B<Encode::Encoder> allows you to use Encode in an object-oriented style. This is not only more intuitive than a functional approach, but also handier when you want to stack encodings. Suppose you want your UTF-8 string converted to Latin1 then Base64: you can simply say my $base64 = encoder($utf8)->latin1->base64; instead of my $latin1 = encode("latin1", $utf8); my $base64 = encode_base64($utf8); or the lazier and more convoluted my $base64 = encode_base64(encode("latin1", $utf8)); =head1 Description Here is how to use this module. =over 4 =item * There are at least two instance variables stored in a hash reference, {data} and {encoding}. =item * When there is no method, it takes the method name as the name of the encoding and encodes the instance I<data> with I<encoding>. If successful, the instance I<encoding> is set accordingly. =item * You can retrieve the result via -E<gt>data but usually you don't have to because the stringify operator ("") is overridden to do exactly that. =back =head2 Predefined Methods This module predefines the methods below: =over 4 =item $e = Encode::Encoder-E<gt>new([$data, $encoding]); returns an encoder object. Its data is initialized with $data if present, and its encoding is set to $encoding if present. When $encoding is omitted, it defaults to utf8 if $data is already in utf8 or "" (empty string) otherwise. =item encoder() is an alias of Encode::Encoder-E<gt>new(). This one is exported on demand. =item $e-E<gt>data([$data]) When $data is present, sets the instance data to $data and returns the object itself. Otherwise, the current instance data is returned. =item $e-E<gt>encoding([$encoding]) When $encoding is present, sets the instance encoding to $encoding and returns the object itself. Otherwise, the current instance encoding is returned. =item $e-E<gt>bytes([$encoding]) decodes instance data from $encoding, or the instance encoding if omitted. If the conversion is successful, the instance encoding will be set to "". The name I<bytes> was deliberately picked to avoid namespace tainting -- this module may be used as a base class so method names that appear in Encode::Encoding are avoided. =back =head2 Example: base64 transcoder This module is designed to work with L<Encode::Encoding>. To make the Base64 transcoder example above really work, you could write a module like this: package Encode::Base64; use parent 'Encode::Encoding'; __PACKAGE__->Define('base64'); use MIME::Base64; sub encode{ my ($obj, $data) = @_; return encode_base64($data); } sub decode{ my ($obj, $data) = @_; return decode_base64($data); } 1; __END__ And your caller module would be something like this: use Encode::Encoder; use Encode::Base64; # now you can really do the following encoder($data)->iso_8859_1->base64; encoder($base64)->bytes('base64')->latin1; =head2 Operator Overloading This module overloads two operators, stringify ("") and numify (0+). Stringify dumps the data inside the object. Numify returns the number of bytes in the instance data. They come in handy when you want to print or find the size of data. =head1 SEE ALSO L<Encode>, L<Encode::Encoding> =cut Encode/JP.pm 0000644 00000005172 15037233334 0006620 0 ustar 00 package Encode::JP; BEGIN { if ( ord("A") == 193 ) { die "Encode::JP not supported on EBCDIC\n"; } } use strict; use warnings; use Encode; our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); use Encode::JP::JIS7; 1; __END__ =head1 NAME Encode::JP - Japanese Encodings =head1 SYNOPSIS use Encode qw/encode decode/; $euc_jp = encode("euc-jp", $utf8); # loads Encode::JP implicitly $utf8 = decode("euc-jp", $euc_jp); # ditto =head1 ABSTRACT This module implements Japanese charset encodings. Encodings supported are as follows. Canonical Alias Description -------------------------------------------------------------------- euc-jp /\beuc.*jp$/i EUC (Extended Unix Character) /\bjp.*euc/i /\bujis$/i shiftjis /\bshift.*jis$/i Shift JIS (aka MS Kanji) /\bsjis$/i 7bit-jis /\bjis$/i 7bit JIS iso-2022-jp ISO-2022-JP [RFC1468] = 7bit JIS with all Halfwidth Kana converted to Fullwidth iso-2022-jp-1 ISO-2022-JP-1 [RFC2237] = ISO-2022-JP with JIS X 0212-1990 support. See below MacJapanese Shift JIS + Apple vendor mappings cp932 /\bwindows-31j$/i Code Page 932 = Shift JIS + MS/IBM vendor mappings jis0201-raw JIS0201, raw format jis0208-raw JIS0201, raw format jis0212-raw JIS0201, raw format -------------------------------------------------------------------- =head1 DESCRIPTION To find out how to use this module in detail, see L<Encode>. =head1 Note on ISO-2022-JP(-1)? ISO-2022-JP-1 (RFC2237) is a superset of ISO-2022-JP (RFC1468) which adds support for JIS X 0212-1990. That means you can use the same code to decode to utf8 but not vice versa. $utf8 = decode('iso-2022-jp-1', $stream); and $utf8 = decode('iso-2022-jp', $stream); yield the same result but $with_0212 = encode('iso-2022-jp-1', $utf8); is now different from $without_0212 = encode('iso-2022-jp', $utf8 ); In the latter case, characters that map to 0212 are first converted to U+3013 (0xA2AE in EUC-JP; a white square also known as 'Tofu' or 'geta mark') then fed to the decoding engine. U+FFFD is not used, in order to preserve text layout as much as possible. =head1 BUGS The ASCII region (0x00-0x7f) is preserved for all encodings, even though this conflicts with mappings by the Unicode Consortium. =head1 SEE ALSO L<Encode> =cut Encode/KR.pm 0000644 00000003650 15037233334 0006622 0 ustar 00 package Encode::KR; BEGIN { if ( ord("A") == 193 ) { die "Encode::KR not supported on EBCDIC\n"; } } use strict; use warnings; use Encode; our $VERSION = do { my @r = ( q$Revision: 2.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); use Encode::KR::2022_KR; 1; __END__ =head1 NAME Encode::KR - Korean Encodings =head1 SYNOPSIS use Encode qw/encode decode/; $euc_kr = encode("euc-kr", $utf8); # loads Encode::KR implicitly $utf8 = decode("euc-kr", $euc_kr); # ditto =head1 DESCRIPTION This module implements Korean charset encodings. Encodings supported are as follows. Canonical Alias Description -------------------------------------------------------------------- euc-kr /\beuc.*kr$/i EUC (Extended Unix Character) /\bkr.*euc$/i ksc5601-raw Korean standard code set (as is) cp949 /(?:x-)?uhc$/i /(?:x-)?windows-949$/i /\bks_c_5601-1987$/i Code Page 949 (EUC-KR + 8,822 (additional Hangul syllables) MacKorean EUC-KR + Apple Vendor Mappings johab JOHAB A supplementary encoding defined in Annex 3 of KS X 1001:1998 iso-2022-kr iso-2022-kr [RFC1557] -------------------------------------------------------------------- To find how to use this module in detail, see L<Encode>. =head1 BUGS When you see C<charset=ks_c_5601-1987> on mails and web pages, they really mean "cp949" encodings. To fix that, the following aliases are set; qr/(?:x-)?uhc$/i => '"cp949"' qr/(?:x-)?windows-949$/i => '"cp949"' qr/ks_c_5601-1987$/i => '"cp949"' The ASCII region (0x00-0x7f) is preserved for all encodings, even though this conflicts with mappings by the Unicode Consortium. =head1 SEE ALSO L<Encode> =cut Encode/GSM0338.pm 0000644 00000027147 15037233334 0007261 0 ustar 00 # # $Id: GSM0338.pm,v 2.7 2017/06/10 17:23:50 dankogai Exp $ # package Encode::GSM0338; use strict; use warnings; use Carp; use vars qw($VERSION); $VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Encode qw(:fallbacks); use parent qw(Encode::Encoding); __PACKAGE__->Define('gsm0338'); sub needs_lines { 1 } sub perlio_ok { 0 } use utf8; our %UNI2GSM = ( "\x{0040}" => "\x00", # COMMERCIAL AT "\x{000A}" => "\x0A", # LINE FEED "\x{000C}" => "\x1B\x0A", # FORM FEED "\x{000D}" => "\x0D", # CARRIAGE RETURN "\x{0020}" => "\x20", # SPACE "\x{0021}" => "\x21", # EXCLAMATION MARK "\x{0022}" => "\x22", # QUOTATION MARK "\x{0023}" => "\x23", # NUMBER SIGN "\x{0024}" => "\x02", # DOLLAR SIGN "\x{0025}" => "\x25", # PERCENT SIGN "\x{0026}" => "\x26", # AMPERSAND "\x{0027}" => "\x27", # APOSTROPHE "\x{0028}" => "\x28", # LEFT PARENTHESIS "\x{0029}" => "\x29", # RIGHT PARENTHESIS "\x{002A}" => "\x2A", # ASTERISK "\x{002B}" => "\x2B", # PLUS SIGN "\x{002C}" => "\x2C", # COMMA "\x{002D}" => "\x2D", # HYPHEN-MINUS "\x{002E}" => "\x2E", # FULL STOP "\x{002F}" => "\x2F", # SOLIDUS "\x{0030}" => "\x30", # DIGIT ZERO "\x{0031}" => "\x31", # DIGIT ONE "\x{0032}" => "\x32", # DIGIT TWO "\x{0033}" => "\x33", # DIGIT THREE "\x{0034}" => "\x34", # DIGIT FOUR "\x{0035}" => "\x35", # DIGIT FIVE "\x{0036}" => "\x36", # DIGIT SIX "\x{0037}" => "\x37", # DIGIT SEVEN "\x{0038}" => "\x38", # DIGIT EIGHT "\x{0039}" => "\x39", # DIGIT NINE "\x{003A}" => "\x3A", # COLON "\x{003B}" => "\x3B", # SEMICOLON "\x{003C}" => "\x3C", # LESS-THAN SIGN "\x{003D}" => "\x3D", # EQUALS SIGN "\x{003E}" => "\x3E", # GREATER-THAN SIGN "\x{003F}" => "\x3F", # QUESTION MARK "\x{0041}" => "\x41", # LATIN CAPITAL LETTER A "\x{0042}" => "\x42", # LATIN CAPITAL LETTER B "\x{0043}" => "\x43", # LATIN CAPITAL LETTER C "\x{0044}" => "\x44", # LATIN CAPITAL LETTER D "\x{0045}" => "\x45", # LATIN CAPITAL LETTER E "\x{0046}" => "\x46", # LATIN CAPITAL LETTER F "\x{0047}" => "\x47", # LATIN CAPITAL LETTER G "\x{0048}" => "\x48", # LATIN CAPITAL LETTER H "\x{0049}" => "\x49", # LATIN CAPITAL LETTER I "\x{004A}" => "\x4A", # LATIN CAPITAL LETTER J "\x{004B}" => "\x4B", # LATIN CAPITAL LETTER K "\x{004C}" => "\x4C", # LATIN CAPITAL LETTER L "\x{004D}" => "\x4D", # LATIN CAPITAL LETTER M "\x{004E}" => "\x4E", # LATIN CAPITAL LETTER N "\x{004F}" => "\x4F", # LATIN CAPITAL LETTER O "\x{0050}" => "\x50", # LATIN CAPITAL LETTER P "\x{0051}" => "\x51", # LATIN CAPITAL LETTER Q "\x{0052}" => "\x52", # LATIN CAPITAL LETTER R "\x{0053}" => "\x53", # LATIN CAPITAL LETTER S "\x{0054}" => "\x54", # LATIN CAPITAL LETTER T "\x{0055}" => "\x55", # LATIN CAPITAL LETTER U "\x{0056}" => "\x56", # LATIN CAPITAL LETTER V "\x{0057}" => "\x57", # LATIN CAPITAL LETTER W "\x{0058}" => "\x58", # LATIN CAPITAL LETTER X "\x{0059}" => "\x59", # LATIN CAPITAL LETTER Y "\x{005A}" => "\x5A", # LATIN CAPITAL LETTER Z "\x{005F}" => "\x11", # LOW LINE "\x{0061}" => "\x61", # LATIN SMALL LETTER A "\x{0062}" => "\x62", # LATIN SMALL LETTER B "\x{0063}" => "\x63", # LATIN SMALL LETTER C "\x{0064}" => "\x64", # LATIN SMALL LETTER D "\x{0065}" => "\x65", # LATIN SMALL LETTER E "\x{0066}" => "\x66", # LATIN SMALL LETTER F "\x{0067}" => "\x67", # LATIN SMALL LETTER G "\x{0068}" => "\x68", # LATIN SMALL LETTER H "\x{0069}" => "\x69", # LATIN SMALL LETTER I "\x{006A}" => "\x6A", # LATIN SMALL LETTER J "\x{006B}" => "\x6B", # LATIN SMALL LETTER K "\x{006C}" => "\x6C", # LATIN SMALL LETTER L "\x{006D}" => "\x6D", # LATIN SMALL LETTER M "\x{006E}" => "\x6E", # LATIN SMALL LETTER N "\x{006F}" => "\x6F", # LATIN SMALL LETTER O "\x{0070}" => "\x70", # LATIN SMALL LETTER P "\x{0071}" => "\x71", # LATIN SMALL LETTER Q "\x{0072}" => "\x72", # LATIN SMALL LETTER R "\x{0073}" => "\x73", # LATIN SMALL LETTER S "\x{0074}" => "\x74", # LATIN SMALL LETTER T "\x{0075}" => "\x75", # LATIN SMALL LETTER U "\x{0076}" => "\x76", # LATIN SMALL LETTER V "\x{0077}" => "\x77", # LATIN SMALL LETTER W "\x{0078}" => "\x78", # LATIN SMALL LETTER X "\x{0079}" => "\x79", # LATIN SMALL LETTER Y "\x{007A}" => "\x7A", # LATIN SMALL LETTER Z "\x{000C}" => "\x1B\x0A", # FORM FEED "\x{005B}" => "\x1B\x3C", # LEFT SQUARE BRACKET "\x{005C}" => "\x1B\x2F", # REVERSE SOLIDUS "\x{005D}" => "\x1B\x3E", # RIGHT SQUARE BRACKET "\x{005E}" => "\x1B\x14", # CIRCUMFLEX ACCENT "\x{007B}" => "\x1B\x28", # LEFT CURLY BRACKET "\x{007C}" => "\x1B\x40", # VERTICAL LINE "\x{007D}" => "\x1B\x29", # RIGHT CURLY BRACKET "\x{007E}" => "\x1B\x3D", # TILDE "\x{00A0}" => "\x1B", # NO-BREAK SPACE "\x{00A1}" => "\x40", # INVERTED EXCLAMATION MARK "\x{00A3}" => "\x01", # POUND SIGN "\x{00A4}" => "\x24", # CURRENCY SIGN "\x{00A5}" => "\x03", # YEN SIGN "\x{00A7}" => "\x5F", # SECTION SIGN "\x{00BF}" => "\x60", # INVERTED QUESTION MARK "\x{00C4}" => "\x5B", # LATIN CAPITAL LETTER A WITH DIAERESIS "\x{00C5}" => "\x0E", # LATIN CAPITAL LETTER A WITH RING ABOVE "\x{00C6}" => "\x1C", # LATIN CAPITAL LETTER AE "\x{00C9}" => "\x1F", # LATIN CAPITAL LETTER E WITH ACUTE "\x{00D1}" => "\x5D", # LATIN CAPITAL LETTER N WITH TILDE "\x{00D6}" => "\x5C", # LATIN CAPITAL LETTER O WITH DIAERESIS "\x{00D8}" => "\x0B", # LATIN CAPITAL LETTER O WITH STROKE "\x{00DC}" => "\x5E", # LATIN CAPITAL LETTER U WITH DIAERESIS "\x{00DF}" => "\x1E", # LATIN SMALL LETTER SHARP S "\x{00E0}" => "\x7F", # LATIN SMALL LETTER A WITH GRAVE "\x{00E4}" => "\x7B", # LATIN SMALL LETTER A WITH DIAERESIS "\x{00E5}" => "\x0F", # LATIN SMALL LETTER A WITH RING ABOVE "\x{00E6}" => "\x1D", # LATIN SMALL LETTER AE #"\x{00E7}" => "\x09", # LATIN SMALL LETTER C WITH CEDILLA "\x{00C7}" => "\x09", # LATIN CAPITAL LETTER C WITH CEDILLA "\x{00E8}" => "\x04", # LATIN SMALL LETTER E WITH GRAVE "\x{00E9}" => "\x05", # LATIN SMALL LETTER E WITH ACUTE "\x{00EC}" => "\x07", # LATIN SMALL LETTER I WITH GRAVE "\x{00F1}" => "\x7D", # LATIN SMALL LETTER N WITH TILDE "\x{00F2}" => "\x08", # LATIN SMALL LETTER O WITH GRAVE "\x{00F6}" => "\x7C", # LATIN SMALL LETTER O WITH DIAERESIS "\x{00F8}" => "\x0C", # LATIN SMALL LETTER O WITH STROKE "\x{00F9}" => "\x06", # LATIN SMALL LETTER U WITH GRAVE "\x{00FC}" => "\x7E", # LATIN SMALL LETTER U WITH DIAERESIS "\x{0393}" => "\x13", # GREEK CAPITAL LETTER GAMMA "\x{0394}" => "\x10", # GREEK CAPITAL LETTER DELTA "\x{0398}" => "\x19", # GREEK CAPITAL LETTER THETA "\x{039B}" => "\x14", # GREEK CAPITAL LETTER LAMDA "\x{039E}" => "\x1A", # GREEK CAPITAL LETTER XI "\x{03A0}" => "\x16", # GREEK CAPITAL LETTER PI "\x{03A3}" => "\x18", # GREEK CAPITAL LETTER SIGMA "\x{03A6}" => "\x12", # GREEK CAPITAL LETTER PHI "\x{03A8}" => "\x17", # GREEK CAPITAL LETTER PSI "\x{03A9}" => "\x15", # GREEK CAPITAL LETTER OMEGA "\x{20AC}" => "\x1B\x65", # EURO SIGN ); our %GSM2UNI = reverse %UNI2GSM; our $ESC = "\x1b"; our $ATMARK = "\x40"; our $FBCHAR = "\x3F"; our $NBSP = "\x{00A0}"; #define ERR_DECODE_NOMAP "%s \"\\x%02" UVXf "\" does not map to Unicode" sub decode ($$;$) { my ( $obj, $bytes, $chk ) = @_; return undef unless defined $bytes; my $str = substr($bytes, 0, 0); # to propagate taintedness; while ( length $bytes ) { my $c = substr( $bytes, 0, 1, '' ); my $u; if ( $c eq "\x00" ) { my $c2 = substr( $bytes, 0, 1, '' ); $u = !length $c2 ? $ATMARK : $c2 eq "\x00" ? "\x{0000}" : exists $GSM2UNI{$c2} ? $ATMARK . $GSM2UNI{$c2} : $chk ? croak sprintf( "\\x%02X\\x%02X does not map to Unicode", ord($c), ord($c2) ) : $ATMARK . $FBCHAR; } elsif ( $c eq $ESC ) { my $c2 = substr( $bytes, 0, 1, '' ); $u = exists $GSM2UNI{ $c . $c2 } ? $GSM2UNI{ $c . $c2 } : exists $GSM2UNI{$c2} ? $NBSP . $GSM2UNI{$c2} : $chk ? croak sprintf( "\\x%02X\\x%02X does not map to Unicode", ord($c), ord($c2) ) : $NBSP . $FBCHAR; } else { $u = exists $GSM2UNI{$c} ? $GSM2UNI{$c} : $chk ? ref $chk eq 'CODE' ? $chk->( ord $c ) : croak sprintf( "\\x%02X does not map to Unicode", ord($c) ) : $FBCHAR; } $str .= $u; } $_[1] = $bytes if $chk; return $str; } #define ERR_ENCODE_NOMAP "\"\\x{%04" UVxf "}\" does not map to %s" sub encode($$;$) { my ( $obj, $str, $chk ) = @_; return undef unless defined $str; my $bytes = substr($str, 0, 0); # to propagate taintedness while ( length $str ) { my $u = substr( $str, 0, 1, '' ); my $c; $bytes .= exists $UNI2GSM{$u} ? $UNI2GSM{$u} : $chk ? ref $chk eq 'CODE' ? $chk->( ord($u) ) : croak sprintf( "\\x{%04x} does not map to %s", ord($u), $obj->name ) : $FBCHAR; } $_[1] = $str if $chk; return $bytes; } 1; __END__ =head1 NAME Encode::GSM0338 -- ESTI GSM 03.38 Encoding =head1 SYNOPSIS use Encode qw/encode decode/; $gsm0338 = encode("gsm0338", $utf8); # loads Encode::GSM0338 implicitly $utf8 = decode("gsm0338", $gsm0338); # ditto =head1 DESCRIPTION GSM0338 is for GSM handsets. Though it shares alphanumerals with ASCII, control character ranges and other parts are mapped very differently, mainly to store Greek characters. There are also escape sequences (starting with 0x1B) to cover e.g. the Euro sign. This was once handled by L<Encode::Bytes> but because of all those unusual specifications, Encode 2.20 has relocated the support to this module. =head1 NOTES Unlike most other encodings, the following always croaks on error for any $chk that evaluates to true. $gsm0338 = encode("gsm0338", $utf8 $chk); $utf8 = decode("gsm0338", $gsm0338, $chk); So if you want to check the validity of the encoding, surround the expression with C<eval {}> block as follows; eval { $utf8 = decode("gsm0338", $gsm0338, $chk); } or do { # handle exception here }; =head1 BUGS ESTI GSM 03.38 Encoding itself. Mapping \x00 to '@' causes too much pain everywhere. Its use of \x1b (escape) is also very questionable. Because of those two, the code paging approach used use in ucm-based Encoding SOMETIMES fails so this module was written. =head1 SEE ALSO L<Encode> =cut Encode/Unicode.pm 0000644 00000021340 15037233334 0007670 0 ustar 00 package Encode::Unicode; use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 2.17 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); # # Object Generator 8 transcoders all at once! # use Encode (); our %BOM_Unknown = map { $_ => 1 } qw(UTF-16 UTF-32); for my $name ( qw(UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE UCS-2BE UCS-2LE) ) { my ( $size, $endian, $ucs2, $mask ); $name =~ /^(\w+)-(\d+)(\w*)$/o; if ( $ucs2 = ( $1 eq 'UCS' ) ) { $size = 2; } else { $size = $2 / 8; } $endian = ( $3 eq 'BE' ) ? 'n' : ( $3 eq 'LE' ) ? 'v' : ''; $size == 4 and $endian = uc($endian); my $obj = bless { Name => $name, size => $size, endian => $endian, ucs2 => $ucs2, } => __PACKAGE__; Encode::define_encoding($obj, $name); } use parent qw(Encode::Encoding); sub renew { my $self = shift; $BOM_Unknown{ $self->name } or return $self; my $clone = bless {%$self} => ref($self); $clone->{renewed}++; # so the caller knows it is renewed. return $clone; } 1; __END__ =head1 NAME Encode::Unicode -- Various Unicode Transformation Formats =cut =head1 SYNOPSIS use Encode qw/encode decode/; $ucs2 = encode("UCS-2BE", $utf8); $utf8 = decode("UCS-2BE", $ucs2); =head1 ABSTRACT This module implements all Character Encoding Schemes of Unicode that are officially documented by Unicode Consortium (except, of course, for UTF-8, which is a native format in perl). =over 4 =item L<http://www.unicode.org/glossary/> says: I<Character Encoding Scheme> A character encoding form plus byte serialization. There are Seven character encoding schemes in Unicode: UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32 (UCS-4), UTF-32BE (UCS-4BE) and UTF-32LE (UCS-4LE), and UTF-7. Since UTF-7 is a 7-bit (re)encoded version of UTF-16BE, It is not part of Unicode's Character Encoding Scheme. It is separately implemented in Encode::Unicode::UTF7. For details see L<Encode::Unicode::UTF7>. =item Quick Reference Decodes from ord(N) Encodes chr(N) to... octet/char BOM S.P d800-dfff ord > 0xffff \x{1abcd} == ---------------+-----------------+------------------------------ UCS-2BE 2 N N is bogus Not Available UCS-2LE 2 N N bogus Not Available UTF-16 2/4 Y Y is S.P S.P BE/LE UTF-16BE 2/4 N Y S.P S.P 0xd82a,0xdfcd UTF-16LE 2/4 N Y S.P S.P 0x2ad8,0xcddf UTF-32 4 Y - is bogus As is BE/LE UTF-32BE 4 N - bogus As is 0x0001abcd UTF-32LE 4 N - bogus As is 0xcdab0100 UTF-8 1-4 - - bogus >= 4 octets \xf0\x9a\af\8d ---------------+-----------------+------------------------------ =back =head1 Size, Endianness, and BOM You can categorize these CES by 3 criteria: size of each character, endianness, and Byte Order Mark. =head2 by size UCS-2 is a fixed-length encoding with each character taking 16 bits. It B<does not> support I<surrogate pairs>. When a surrogate pair is encountered during decode(), its place is filled with \x{FFFD} if I<CHECK> is 0, or the routine croaks if I<CHECK> is 1. When a character whose ord value is larger than 0xFFFF is encountered, its place is filled with \x{FFFD} if I<CHECK> is 0, or the routine croaks if I<CHECK> is 1. UTF-16 is almost the same as UCS-2 but it supports I<surrogate pairs>. When it encounters a high surrogate (0xD800-0xDBFF), it fetches the following low surrogate (0xDC00-0xDFFF) and C<desurrogate>s them to form a character. Bogus surrogates result in death. When \x{10000} or above is encountered during encode(), it C<ensurrogate>s them and pushes the surrogate pair to the output stream. UTF-32 (UCS-4) is a fixed-length encoding with each character taking 32 bits. Since it is 32-bit, there is no need for I<surrogate pairs>. =head2 by endianness The first (and now failed) goal of Unicode was to map all character repertoires into a fixed-length integer so that programmers are happy. Since each character is either a I<short> or I<long> in C, you have to pay attention to the endianness of each platform when you pass data to one another. Anything marked as BE is Big Endian (or network byte order) and LE is Little Endian (aka VAX byte order). For anything not marked either BE or LE, a character called Byte Order Mark (BOM) indicating the endianness is prepended to the string. CAVEAT: Though BOM in utf8 (\xEF\xBB\xBF) is valid, it is meaningless and as of this writing Encode suite just leave it as is (\x{FeFF}). =over 4 =item BOM as integer when fetched in network byte order 16 32 bits/char ------------------------- BE 0xFeFF 0x0000FeFF LE 0xFFFe 0xFFFe0000 ------------------------- =back This modules handles the BOM as follows. =over 4 =item * When BE or LE is explicitly stated as the name of encoding, BOM is simply treated as a normal character (ZERO WIDTH NO-BREAK SPACE). =item * When BE or LE is omitted during decode(), it checks if BOM is at the beginning of the string; if one is found, the endianness is set to what the BOM says. =item * Default Byte Order When no BOM is found, Encode 2.76 and blow croaked. Since Encode 2.77, it falls back to BE accordingly to RFC2781 and the Unicode Standard version 8.0 =item * When BE or LE is omitted during encode(), it returns a BE-encoded string with BOM prepended. So when you want to encode a whole text file, make sure you encode() the whole text at once, not line by line or each line, not file, will have a BOM prepended. =item * C<UCS-2> is an exception. Unlike others, this is an alias of UCS-2BE. UCS-2 is already registered by IANA and others that way. =back =head1 Surrogate Pairs To say the least, surrogate pairs were the biggest mistake of the Unicode Consortium. But according to the late Douglas Adams in I<The Hitchhiker's Guide to the Galaxy> Trilogy, C<In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move>. Their mistake was not of this magnitude so let's forgive them. (I don't dare make any comparison with Unicode Consortium and the Vogons here ;) Or, comparing Encode to Babel Fish is completely appropriate -- if you can only stick this into your ear :) Surrogate pairs were born when the Unicode Consortium finally admitted that 16 bits were not big enough to hold all the world's character repertoires. But they already made UCS-2 16-bit. What do we do? Back then, the range 0xD800-0xDFFF was not allocated. Let's split that range in half and use the first half to represent the C<upper half of a character> and the second half to represent the C<lower half of a character>. That way, you can represent 1024 * 1024 = 1048576 more characters. Now we can store character ranges up to \x{10ffff} even with 16-bit encodings. This pair of half-character is now called a I<surrogate pair> and UTF-16 is the name of the encoding that embraces them. Here is a formula to ensurrogate a Unicode character \x{10000} and above; $hi = ($uni - 0x10000) / 0x400 + 0xD800; $lo = ($uni - 0x10000) % 0x400 + 0xDC00; And to desurrogate; $uni = 0x10000 + ($hi - 0xD800) * 0x400 + ($lo - 0xDC00); Note this move has made \x{D800}-\x{DFFF} into a forbidden zone but perl does not prohibit the use of characters within this range. To perl, every one of \x{0000_0000} up to \x{ffff_ffff} (*) is I<a character>. (*) or \x{ffff_ffff_ffff_ffff} if your perl is compiled with 64-bit integer support! =head1 Error Checking Unlike most encodings which accept various ways to handle errors, Unicode encodings simply croaks. % perl -MEncode -e'$_ = "\xfe\xff\xd8\xd9\xda\xdb\0\n"' \ -e'Encode::from_to($_, "utf16","shift_jis", 0); print' UTF-16:Malformed LO surrogate d8d9 at /path/to/Encode.pm line 184. % perl -MEncode -e'$a = "BOM missing"' \ -e' Encode::from_to($a, "utf16", "shift_jis", 0); print' UTF-16:Unrecognised BOM 424f at /path/to/Encode.pm line 184. Unlike other encodings where mappings are not one-to-one against Unicode, UTFs are supposed to map 100% against one another. So Encode is more strict on UTFs. Consider that "division by zero" of Encode :) =head1 SEE ALSO L<Encode>, L<Encode::Unicode::UTF7>, L<http://www.unicode.org/glossary/>, L<http://www.unicode.org/unicode/faq/utf_bom.html>, RFC 2781 L<http://www.ietf.org/rfc/rfc2781.txt>, The whole Unicode standard L<http://www.unicode.org/unicode/uni2book/u2.html> Ch. 15, pp. 403 of C<Programming Perl (3rd Edition)> by Larry Wall, Tom Christiansen, Jon Orwant; O'Reilly & Associates; ISBN 0-596-00027-8 =cut Encode/_T.e2x 0000644 00000000227 15037233334 0006727 0 ustar 00 use strict; # Adjust the number here! use Test::More tests => 2; BEGIN { use_ok('Encode'); use_ok('Encode::$_Name_'); } # Add more test here! Encode/_PM.e2x 0000644 00000000372 15037233334 0007041 0 ustar 00 package Encode::$_Name_; our $VERSION = "0.01"; use Encode; use XSLoader; XSLoader::load(__PACKAGE__,$VERSION); 1; __END__ =head1 NAME Encode::$_Name_ - New Encoding =head1 SYNOPSIS You got to fill this in! =head1 SEE ALSO L<Encode> =cut Encode/JP/H2Z.pm 0000644 00000012026 15037233334 0007217 0 ustar 00 # # $Id: H2Z.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $ # package Encode::JP::H2Z; use strict; use warnings; our $RCSID = q$Id: H2Z.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $; our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Encode::CJKConstants qw(:all); use vars qw(%_D2Z $_PAT_D2Z %_Z2D $_PAT_Z2D %_H2Z $_PAT_H2Z %_Z2H $_PAT_Z2H); %_H2Z = ( "\x8e\xa1" => "\xa1\xa3", #�� "\x8e\xa2" => "\xa1\xd6", #�� "\x8e\xa3" => "\xa1\xd7", #�� "\x8e\xa4" => "\xa1\xa2", #�� "\x8e\xa5" => "\xa1\xa6", #�� "\x8e\xa6" => "\xa5\xf2", #�� "\x8e\xa7" => "\xa5\xa1", #�� "\x8e\xa8" => "\xa5\xa3", #�� "\x8e\xa9" => "\xa5\xa5", #�� "\x8e\xaa" => "\xa5\xa7", #�� "\x8e\xab" => "\xa5\xa9", #�� "\x8e\xac" => "\xa5\xe3", #�� "\x8e\xad" => "\xa5\xe5", #�� "\x8e\xae" => "\xa5\xe7", #�� "\x8e\xaf" => "\xa5\xc3", #�� "\x8e\xb0" => "\xa1\xbc", #�� "\x8e\xb1" => "\xa5\xa2", #�� "\x8e\xb2" => "\xa5\xa4", #�� "\x8e\xb3" => "\xa5\xa6", #�� "\x8e\xb4" => "\xa5\xa8", #�� "\x8e\xb5" => "\xa5\xaa", #�� "\x8e\xb6" => "\xa5\xab", #�� "\x8e\xb7" => "\xa5\xad", #�� "\x8e\xb8" => "\xa5\xaf", #�� "\x8e\xb9" => "\xa5\xb1", #�� "\x8e\xba" => "\xa5\xb3", #�� "\x8e\xbb" => "\xa5\xb5", #�� "\x8e\xbc" => "\xa5\xb7", #�� "\x8e\xbd" => "\xa5\xb9", #�� "\x8e\xbe" => "\xa5\xbb", #�� "\x8e\xbf" => "\xa5\xbd", #�� "\x8e\xc0" => "\xa5\xbf", #�� "\x8e\xc1" => "\xa5\xc1", #�� "\x8e\xc2" => "\xa5\xc4", #�� "\x8e\xc3" => "\xa5\xc6", #�� "\x8e\xc4" => "\xa5\xc8", #�� "\x8e\xc5" => "\xa5\xca", #�� "\x8e\xc6" => "\xa5\xcb", #�� "\x8e\xc7" => "\xa5\xcc", #�� "\x8e\xc8" => "\xa5\xcd", #�� "\x8e\xc9" => "\xa5\xce", #�� "\x8e\xca" => "\xa5\xcf", #�� "\x8e\xcb" => "\xa5\xd2", #�� "\x8e\xcc" => "\xa5\xd5", #�� "\x8e\xcd" => "\xa5\xd8", #�� "\x8e\xce" => "\xa5\xdb", #�� "\x8e\xcf" => "\xa5\xde", #�� "\x8e\xd0" => "\xa5\xdf", #�� "\x8e\xd1" => "\xa5\xe0", #�� "\x8e\xd2" => "\xa5\xe1", #�� "\x8e\xd3" => "\xa5\xe2", #�� "\x8e\xd4" => "\xa5\xe4", #�� "\x8e\xd5" => "\xa5\xe6", #�� "\x8e\xd6" => "\xa5\xe8", #�� "\x8e\xd7" => "\xa5\xe9", #�� "\x8e\xd8" => "\xa5\xea", #�� "\x8e\xd9" => "\xa5\xeb", #�� "\x8e\xda" => "\xa5\xec", #�� "\x8e\xdb" => "\xa5\xed", #�� "\x8e\xdc" => "\xa5\xef", #�� "\x8e\xdd" => "\xa5\xf3", #�� "\x8e\xde" => "\xa1\xab", #�� "\x8e\xdf" => "\xa1\xac", #�� ); %_D2Z = ( "\x8e\xb6\x8e\xde" => "\xa5\xac", #�� "\x8e\xb7\x8e\xde" => "\xa5\xae", #�� "\x8e\xb8\x8e\xde" => "\xa5\xb0", #�� "\x8e\xb9\x8e\xde" => "\xa5\xb2", #�� "\x8e\xba\x8e\xde" => "\xa5\xb4", #�� "\x8e\xbb\x8e\xde" => "\xa5\xb6", #�� "\x8e\xbc\x8e\xde" => "\xa5\xb8", #�� "\x8e\xbd\x8e\xde" => "\xa5\xba", #�� "\x8e\xbe\x8e\xde" => "\xa5\xbc", #�� "\x8e\xbf\x8e\xde" => "\xa5\xbe", #�� "\x8e\xc0\x8e\xde" => "\xa5\xc0", #�� "\x8e\xc1\x8e\xde" => "\xa5\xc2", #�� "\x8e\xc2\x8e\xde" => "\xa5\xc5", #�� "\x8e\xc3\x8e\xde" => "\xa5\xc7", #�� "\x8e\xc4\x8e\xde" => "\xa5\xc9", #�� "\x8e\xca\x8e\xde" => "\xa5\xd0", #�� "\x8e\xcb\x8e\xde" => "\xa5\xd3", #�� "\x8e\xcc\x8e\xde" => "\xa5\xd6", #�� "\x8e\xcd\x8e\xde" => "\xa5\xd9", #�� "\x8e\xce\x8e\xde" => "\xa5\xdc", #�� "\x8e\xca\x8e\xdf" => "\xa5\xd1", #�� "\x8e\xcb\x8e\xdf" => "\xa5\xd4", #�� "\x8e\xcc\x8e\xdf" => "\xa5\xd7", #�� "\x8e\xcd\x8e\xdf" => "\xa5\xda", #�� "\x8e\xce\x8e\xdf" => "\xa5\xdd", #�� "\x8e\xb3\x8e\xde" => "\xa5\xf4", #�� ); # init only once; #$_PAT_D2Z = join("|", keys %_D2Z); #$_PAT_H2Z = join("|", keys %_H2Z); %_Z2H = reverse %_H2Z; %_Z2D = reverse %_D2Z; #$_PAT_Z2H = join("|", keys %_Z2H); #$_PAT_Z2D = join("|", keys %_Z2D); sub h2z { no warnings qw(uninitialized); my $r_str = shift; my ($keep_dakuten) = @_; my $n = 0; unless ($keep_dakuten) { $n = ( $$r_str =~ s( ($RE{EUC_KANA} (?:\x8e[\xde\xdf])?) ){ my $str = $1; $_D2Z{$str} || $_H2Z{$str} || # in case dakuten and handakuten are side-by-side! $_H2Z{substr($str,0,2)} . $_H2Z{substr($str,2,2)}; }eogx ); } else { $n = ( $$r_str =~ s( ($RE{EUC_KANA}) ){ $_H2Z{$1}; }eogx ); } $n; } sub z2h { my $r_str = shift; my $n = ( $$r_str =~ s( ($RE{EUC_C}|$RE{EUC_0212}|$RE{EUC_KANA}) ){ $_Z2D{$1} || $_Z2H{$1} || $1; }eogx ); $n; } 1; __END__ =head1 NAME Encode::JP::H2Z -- internally used by Encode::JP::2022_JP* =cut Encode/JP/JIS7.pm 0000644 00000010246 15037233334 0007332 0 ustar 00 package Encode::JP::JIS7; use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 2.8 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Encode qw(:fallbacks); for my $name ( '7bit-jis', 'iso-2022-jp', 'iso-2022-jp-1' ) { my $h2z = ( $name eq '7bit-jis' ) ? 0 : 1; my $jis0212 = ( $name eq 'iso-2022-jp' ) ? 0 : 1; my $obj = bless { Name => $name, h2z => $h2z, jis0212 => $jis0212, } => __PACKAGE__; Encode::define_encoding($obj, $name); } use parent qw(Encode::Encoding); # we override this to 1 so PerlIO works sub needs_lines { 1 } use Encode::CJKConstants qw(:all); # # decode is identical for all 2022 variants # sub decode($$;$) { my ( $obj, $str, $chk ) = @_; return undef unless defined $str; my $residue = ''; if ($chk) { $str =~ s/([^\x00-\x7f].*)$//so and $residue = $1; } $residue .= jis_euc( \$str ); $_[1] = $residue if $chk; return Encode::decode( 'euc-jp', $str, FB_PERLQQ ); } # # encode is different # sub encode($$;$) { require Encode::JP::H2Z; my ( $obj, $utf8, $chk ) = @_; return undef unless defined $utf8; # empty the input string in the stack so perlio is ok $_[1] = '' if $chk; my ( $h2z, $jis0212 ) = @$obj{qw(h2z jis0212)}; my $octet = Encode::encode( 'euc-jp', $utf8, $chk || 0 ); $h2z and &Encode::JP::H2Z::h2z( \$octet ); euc_jis( \$octet, $jis0212 ); return $octet; } # # cat_decode # my $re_scan_jis_g = qr{ \G ( ($RE{JIS_0212}) | $RE{JIS_0208} | ($RE{ISO_ASC}) | ($RE{JIS_KANA}) | ) ([^\e]*) }x; sub cat_decode { # ($obj, $dst, $src, $pos, $trm, $chk) my ( $obj, undef, undef, $pos, $trm ) = @_; # currently ignores $chk my ( $rdst, $rsrc, $rpos ) = \@_[ 1, 2, 3 ]; local ${^ENCODING}; use bytes; my $opos = pos($$rsrc); pos($$rsrc) = $pos; while ( $$rsrc =~ /$re_scan_jis_g/gc ) { my ( $esc, $esc_0212, $esc_asc, $esc_kana, $chunk ) = ( $1, $2, $3, $4, $5 ); unless ($chunk) { $esc or last; next; } if ( $esc && !$esc_asc ) { $chunk =~ tr/\x21-\x7e/\xa1-\xfe/; if ($esc_kana) { $chunk =~ s/([\xa1-\xdf])/\x8e$1/og; } elsif ($esc_0212) { $chunk =~ s/([\xa1-\xfe][\xa1-\xfe])/\x8f$1/og; } $chunk = Encode::decode( 'euc-jp', $chunk, 0 ); } elsif ( ( my $npos = index( $chunk, $trm ) ) >= 0 ) { $$rdst .= substr( $chunk, 0, $npos + length($trm) ); $$rpos += length($esc) + $npos + length($trm); pos($$rsrc) = $opos; return 1; } $$rdst .= $chunk; $$rpos = pos($$rsrc); } $$rpos = pos($$rsrc); pos($$rsrc) = $opos; return ''; } # JIS<->EUC my $re_scan_jis = qr{ (?:($RE{JIS_0212})|$RE{JIS_0208}|($RE{ISO_ASC})|($RE{JIS_KANA}))([^\e]*) }x; sub jis_euc { local ${^ENCODING}; my $r_str = shift; $$r_str =~ s($re_scan_jis) { my ($esc_0212, $esc_asc, $esc_kana, $chunk) = ($1, $2, $3, $4); if (!$esc_asc) { $chunk =~ tr/\x21-\x7e/\xa1-\xfe/; if ($esc_kana) { $chunk =~ s/([\xa1-\xdf])/\x8e$1/og; } elsif ($esc_0212) { $chunk =~ s/([\xa1-\xfe][\xa1-\xfe])/\x8f$1/og; } } $chunk; }geox; my ($residue) = ( $$r_str =~ s/(\e.*)$//so ); return $residue; } sub euc_jis { no warnings qw(uninitialized); local ${^ENCODING}; my $r_str = shift; my $jis0212 = shift; $$r_str =~ s{ ((?:$RE{EUC_C})+|(?:$RE{EUC_KANA})+|(?:$RE{EUC_0212})+) }{ my $chunk = $1; my $esc = ( $chunk =~ tr/\x8E//d ) ? $ESC{KANA} : ( $chunk =~ tr/\x8F//d ) ? $ESC{JIS_0212} : $ESC{JIS_0208}; if ($esc eq $ESC{JIS_0212} && !$jis0212){ # fallback to '?' $chunk =~ tr/\xA1-\xFE/\x3F/; }else{ $chunk =~ tr/\xA1-\xFE/\x21-\x7E/; } $esc . $chunk . $ESC{ASC}; }geox; $$r_str =~ s/\Q$ESC{ASC}\E (\Q$ESC{KANA}\E|\Q$ESC{JIS_0212}\E|\Q$ESC{JIS_0208}\E)/$1/gox; $$r_str; } 1; __END__ =head1 NAME Encode::JP::JIS7 -- internally used by Encode::JP =cut Encode/CJKConstants.pm 0000644 00000003223 15037233334 0010606 0 ustar 00 # # $Id: CJKConstants.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $ # package Encode::CJKConstants; use strict; use warnings; our $RCSID = q$Id: CJKConstants.pm,v 2.2 2006/06/03 20:28:48 dankogai Exp $; our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Carp; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(); our @EXPORT_OK = qw(%CHARCODE %ESC %RE); our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK, @EXPORT ] ); my %_0208 = ( 1978 => '\e\$\@', 1983 => '\e\$B', 1990 => '\e&\@\e\$B', ); our %CHARCODE = ( UNDEF_EUC => "\xa2\xae", # �� in EUC UNDEF_SJIS => "\x81\xac", # �� in SJIS UNDEF_JIS => "\xa2\xf7", # �� -- used in unicode UNDEF_UNICODE => "\x20\x20", # �� -- used in unicode ); our %ESC = ( GB_2312 => "\e\$A", JIS_0208 => "\e\$B", JIS_0212 => "\e\$(D", KSC_5601 => "\e\$(C", ASC => "\e\(B", KANA => "\e\(I", '2022_KR' => "\e\$)C", ); our %RE = ( ASCII => '[\x00-\x7f]', BIN => '[\x00-\x06\x7f\xff]', EUC_0212 => '\x8f[\xa1-\xfe][\xa1-\xfe]', EUC_C => '[\xa1-\xfe][\xa1-\xfe]', EUC_KANA => '\x8e[\xa1-\xdf]', JIS_0208 => "$_0208{1978}|$_0208{1983}|$_0208{1990}", JIS_0212 => "\e" . '\$\(D', ISO_ASC => "\e" . '\([BJ]', JIS_KANA => "\e" . '\(I', '2022_KR' => "\e" . '\$\)C', SJIS_C => '[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]', SJIS_KANA => '[\xa1-\xdf]', UTF8 => '[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf]' ); 1; =head1 NAME Encode::CJKConstants.pm -- Internally used by Encode::??::ISO_2022_* =cut Encode/KR/2022_KR.pm 0000644 00000003671 15037233334 0007606 0 ustar 00 package Encode::KR::2022_KR; use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Encode qw(:fallbacks); use parent qw(Encode::Encoding); __PACKAGE__->Define('iso-2022-kr'); sub needs_lines { 1 } sub perlio_ok { return 0; # for the time being } sub decode { my ( $obj, $str, $chk ) = @_; return undef unless defined $str; my $res = $str; my $residue = iso_euc( \$res ); # This is for PerlIO $_[1] = $residue if $chk; return Encode::decode( 'euc-kr', $res, FB_PERLQQ ); } sub encode { my ( $obj, $utf8, $chk ) = @_; return undef unless defined $utf8; # empty the input string in the stack so perlio is ok $_[1] = '' if $chk; my $octet = Encode::encode( 'euc-kr', $utf8, FB_PERLQQ ); euc_iso( \$octet ); return $octet; } use Encode::CJKConstants qw(:all); # ISO<->EUC sub iso_euc { my $r_str = shift; $$r_str =~ s/$RE{'2022_KR'}//gox; # remove the designator $$r_str =~ s{ # replace characters in GL \x0e # between SO(\x0e) and SI(\x0f) ([^\x0f]*) # with characters in GR \x0f } { my $out= $1; $out =~ tr/\x21-\x7e/\xa1-\xfe/; $out; }geox; my ($residue) = ( $$r_str =~ s/(\e.*)$//so ); return $residue; } sub euc_iso { no warnings qw(uninitialized); my $r_str = shift; substr( $$r_str, 0, 0 ) = $ESC{'2022_KR'}; # put the designator at the beg. $$r_str =~ s{ # move KS X 1001 characters in GR to GL ($RE{EUC_C}+) # and enclose them with SO and SI }{ my $str = $1; $str =~ tr/\xA1-\xFE/\x21-\x7E/; "\x0e" . $str . "\x0f"; }geox; $$r_str; } 1; __END__ =head1 NAME Encode::KR::2022_KR -- internally used by Encode::KR =cut Encode/README.e2x 0000644 00000001051 15037233334 0007316 0 ustar 00 Encode::$_Name_ version 0.1 ======== NAME Encode::$_Name_ - <describe encoding> SYNOPSIS use Encode::$_Name_; #<put more words here> ABSTRACT <fill this in> INSTALLATION To install this module type the following: perl Makefile.PL make make test make install DEPENDENCIES This module requires perl version 5.7.3 or later. COPYRIGHT AND LICENCE Copyright (C) 2002 Your Name <your@address.domain> This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Encode/Encoding.pm 0000644 00000021547 15037233334 0010041 0 ustar 00 package Encode::Encoding; # Base class for classes which implement encodings use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 2.8 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; our @CARP_NOT = qw(Encode Encode::Encoder); use Carp (); use Encode (); use Encode::MIME::Name; use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; sub Define { my $obj = shift; my $canonical = shift; $obj = bless { Name => $canonical }, $obj unless ref $obj; # warn "$canonical => $obj\n"; Encode::define_encoding( $obj, $canonical, @_ ); } sub name { return shift->{'Name'} } sub mime_name { return Encode::MIME::Name::get_mime_name(shift->name); } sub renew { my $self = shift; my $clone = bless {%$self} => ref($self); $clone->{renewed}++; # so the caller can see it DEBUG and warn $clone->{renewed}; return $clone; } sub renewed { return $_[0]->{renewed} || 0 } *new_sequence = \&renew; sub needs_lines { 0 } sub perlio_ok { return eval { require PerlIO::encoding } ? 1 : 0; } # (Temporary|legacy) methods sub toUnicode { shift->decode(@_) } sub fromUnicode { shift->encode(@_) } # # Needs to be overloaded or just croak # sub encode { my $obj = shift; my $class = ref($obj) ? ref($obj) : $obj; Carp::croak( $class . "->encode() not defined!" ); } sub decode { my $obj = shift; my $class = ref($obj) ? ref($obj) : $obj; Carp::croak( $class . "->encode() not defined!" ); } sub DESTROY { } 1; __END__ =head1 NAME Encode::Encoding - Encode Implementation Base Class =head1 SYNOPSIS package Encode::MyEncoding; use parent qw(Encode::Encoding); __PACKAGE__->Define(qw(myCanonical myAlias)); =head1 DESCRIPTION As mentioned in L<Encode>, encodings are (in the current implementation at least) defined as objects. The mapping of encoding name to object is via the C<%Encode::Encoding> hash. Though you can directly manipulate this hash, it is strongly encouraged to use this base class module and add encode() and decode() methods. =head2 Methods you should implement You are strongly encouraged to implement methods below, at least either encode() or decode(). =over 4 =item -E<gt>encode($string [,$check]) MUST return the octet sequence representing I<$string>. =over 2 =item * If I<$check> is true, it SHOULD modify I<$string> in place to remove the converted part (i.e. the whole string unless there is an error). If perlio_ok() is true, SHOULD becomes MUST. =item * If an error occurs, it SHOULD return the octet sequence for the fragment of string that has been converted and modify $string in-place to remove the converted part leaving it starting with the problem fragment. If perlio_ok() is true, SHOULD becomes MUST. =item * If I<$check> is false then C<encode> MUST make a "best effort" to convert the string - for example, by using a replacement character. =back =item -E<gt>decode($octets [,$check]) MUST return the string that I<$octets> represents. =over 2 =item * If I<$check> is true, it SHOULD modify I<$octets> in place to remove the converted part (i.e. the whole sequence unless there is an error). If perlio_ok() is true, SHOULD becomes MUST. =item * If an error occurs, it SHOULD return the fragment of string that has been converted and modify $octets in-place to remove the converted part leaving it starting with the problem fragment. If perlio_ok() is true, SHOULD becomes MUST. =item * If I<$check> is false then C<decode> should make a "best effort" to convert the string - for example by using Unicode's "\x{FFFD}" as a replacement character. =back =back If you want your encoding to work with L<encoding> pragma, you should also implement the method below. =over 4 =item -E<gt>cat_decode($destination, $octets, $offset, $terminator [,$check]) MUST decode I<$octets> with I<$offset> and concatenate it to I<$destination>. Decoding will terminate when $terminator (a string) appears in output. I<$offset> will be modified to the last $octets position at end of decode. Returns true if $terminator appears output, else returns false. =back =head2 Other methods defined in Encode::Encodings You do not have to override methods shown below unless you have to. =over 4 =item -E<gt>name Predefined As: sub name { return shift->{'Name'} } MUST return the string representing the canonical name of the encoding. =item -E<gt>mime_name Predefined As: sub mime_name{ return Encode::MIME::Name::get_mime_name(shift->name); } MUST return the string representing the IANA charset name of the encoding. =item -E<gt>renew Predefined As: sub renew { my $self = shift; my $clone = bless { %$self } => ref($self); $clone->{renewed}++; return $clone; } This method reconstructs the encoding object if necessary. If you need to store the state during encoding, this is where you clone your object. PerlIO ALWAYS calls this method to make sure it has its own private encoding object. =item -E<gt>renewed Predefined As: sub renewed { $_[0]->{renewed} || 0 } Tells whether the object is renewed (and how many times). Some modules emit C<Use of uninitialized value in null operation> warning unless the value is numeric so return 0 for false. =item -E<gt>perlio_ok() Predefined As: sub perlio_ok { return eval { require PerlIO::encoding } ? 1 : 0; } If your encoding does not support PerlIO for some reasons, just; sub perlio_ok { 0 } =item -E<gt>needs_lines() Predefined As: sub needs_lines { 0 }; If your encoding can work with PerlIO but needs line buffering, you MUST define this method so it returns true. 7bit ISO-2022 encodings are one example that needs this. When this method is missing, false is assumed. =back =head2 Example: Encode::ROT13 package Encode::ROT13; use strict; use parent qw(Encode::Encoding); __PACKAGE__->Define('rot13'); sub encode($$;$){ my ($obj, $str, $chk) = @_; $str =~ tr/A-Za-z/N-ZA-Mn-za-m/; $_[1] = '' if $chk; # this is what in-place edit means return $str; } # Jr pna or ynml yvxr guvf; *decode = \&encode; 1; =head1 Why the heck Encode API is different? It should be noted that the I<$check> behaviour is different from the outer public API. The logic is that the "unchecked" case is useful when the encoding is part of a stream which may be reporting errors (e.g. STDERR). In such cases, it is desirable to get everything through somehow without causing additional errors which obscure the original one. Also, the encoding is best placed to know what the correct replacement character is, so if that is the desired behaviour then letting low level code do it is the most efficient. By contrast, if I<$check> is true, the scheme above allows the encoding to do as much as it can and tell the layer above how much that was. What is lacking at present is a mechanism to report what went wrong. The most likely interface will be an additional method call to the object, or perhaps (to avoid forcing per-stream objects on otherwise stateless encodings) an additional parameter. It is also highly desirable that encoding classes inherit from C<Encode::Encoding> as a base class. This allows that class to define additional behaviour for all encoding objects. package Encode::MyEncoding; use parent qw(Encode::Encoding); __PACKAGE__->Define(qw(myCanonical myAlias)); to create an object with C<< bless {Name => ...}, $class >>, and call define_encoding. They inherit their C<name> method from C<Encode::Encoding>. =head2 Compiled Encodings For the sake of speed and efficiency, most of the encodings are now supported via a I<compiled form>: XS modules generated from UCM files. Encode provides the enc2xs tool to achieve that. Please see L<enc2xs> for more details. =head1 SEE ALSO L<perlmod>, L<enc2xs> =begin future =over 4 =item Scheme 1 The fixup routine gets passed the remaining fragment of string being processed. It modifies it in place to remove bytes/characters it can understand and returns a string used to represent them. For example: sub fixup { my $ch = substr($_[0],0,1,''); return sprintf("\x{%02X}",ord($ch); } This scheme is close to how the underlying C code for Encode works, but gives the fixup routine very little context. =item Scheme 2 The fixup routine gets passed the original string, an index into it of the problem area, and the output string so far. It appends what it wants to the output string and returns a new index into the original string. For example: sub fixup { # my ($s,$i,$d) = @_; my $ch = substr($_[0],$_[1],1); $_[2] .= sprintf("\x{%02X}",ord($ch); return $_[1]+1; } This scheme gives maximal control to the fixup routine but is more complicated to code, and may require that the internals of Encode be tweaked to keep the original string intact. =item Other Schemes Hybrids of the above. Multiple return values rather than in-place modifications. Index into the string could be C<pos($str)> allowing C<s/\G...//>. =back =end future =cut Encode/Symbol.pm 0000644 00000001517 15037233334 0007553 0 ustar 00 package Encode::Symbol; use strict; use warnings; use Encode; our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); 1; __END__ =head1 NAME Encode::Symbol - Symbol Encodings =head1 SYNOPSIS use Encode qw/encode decode/; $symbol = encode("symbol", $utf8); # loads Encode::Symbol implicitly $utf8 = decode("", $symbol); # ditto =head1 ABSTRACT This module implements symbol and dingbats encodings. Encodings supported are as follows. Canonical Alias Description -------------------------------------------------------------------- symbol dingbats AdobeZDingbat AdobeSymbol MacDingbats =head1 DESCRIPTION To find out how to use this module in detail, see L<Encode>. =head1 SEE ALSO L<Encode> =cut Encode/Supported.pod 0000644 00000070074 15037233334 0010445 0 ustar 00 =head1 NAME Encode::Supported -- Encodings supported by Encode =head1 DESCRIPTION =head2 Encoding Names Encoding names are case insensitive. White space in names is ignored. In addition, an encoding may have aliases. Each encoding has one "canonical" name. The "canonical" name is chosen from the names of the encoding by picking the first in the following sequence (with a few exceptions). =over 2 =item * The name used by the Perl community. That includes 'utf8' and 'ascii'. Unlike aliases, canonical names directly reach the method so such frequently used words like 'utf8' don't need to do alias lookups. =item * The MIME name as defined in IETF RFCs. This includes all "iso-"s. =item * The name in the IANA registry. =item * The name used by the organization that defined it. =back In case I<de jure> canonical names differ from that of the Encode module, they are always aliased if it ever be implemented. So you can safely tell if a given encoding is implemented or not just by passing the canonical name. Because of all the alias issues, and because in the general case encodings have state, "Encode" uses an encoding object internally once an operation is in progress. =head1 Supported Encodings As of Perl 5.8.0, at least the following encodings are recognized. Note that unless otherwise specified, they are all case insensitive (via alias) and all occurrence of spaces are replaced with '-'. In other words, "ISO 8859 1" and "iso-8859-1" are identical. Encodings are categorized and implemented in several different modules but you don't have to C<use Encode::XX> to make them available for most cases. Encode.pm will automatically load those modules on demand. =head2 Built-in Encodings The following encodings are always available. Canonical Aliases Comments & References ---------------------------------------------------------------- ascii US-ascii ISO-646-US [ECMA] ascii-ctrl Special Encoding iso-8859-1 latin1 [ISO] null Special Encoding utf8 UTF-8 [RFC2279] ---------------------------------------------------------------- I<null> and I<ascii-ctrl> are special. "null" fails for all character so when you set fallback mode to PERLQQ, HTMLCREF or XMLCREF, ALL CHARACTERS will fall back to character references. Ditto for "ascii-ctrl" except for control characters. For fallback modes, see L<Encode>. =head2 Encode::Unicode -- other Unicode encodings Unicode coding schemes other than native utf8 are supported by Encode::Unicode, which will be autoloaded on demand. ---------------------------------------------------------------- UCS-2BE UCS-2, iso-10646-1 [IANA, UC] UCS-2LE [UC] UTF-16 [UC] UTF-16BE [UC] UTF-16LE [UC] UTF-32 [UC] UTF-32BE UCS-4 [UC] UTF-32LE [UC] UTF-7 [RFC2152] ---------------------------------------------------------------- To find how (UCS-2|UTF-(16|32))(LE|BE)? differ from one another, see L<Encode::Unicode>. UTF-7 is a special encoding which "re-encodes" UTF-16BE into a 7-bit encoding. It is implemented separately by Encode::Unicode::UTF7. =head2 Encode::Byte -- Extended ASCII Encode::Byte implements most single-byte encodings except for Symbols and EBCDIC. The following encodings are based on single-byte encodings implemented as extended ASCII. Most of them map \x80-\xff (upper half) to non-ASCII characters. =over 2 =item ISO-8859 and corresponding vendor mappings Since there are so many, they are presented in table format with languages and corresponding encoding names by vendors. Note that the table is sorted in order of ISO-8859 and the corresponding vendor mappings are slightly different from that of ISO. See L<http://czyborra.com/charsets/iso8859.html> for details. Lang/Regions ISO/Other Std. DOS Windows Macintosh Others ---------------------------------------------------------------- N. America (ASCII) cp437 AdobeStandardEncoding cp863 (DOSCanadaF) W. Europe iso-8859-1 cp850 cp1252 MacRoman nextstep hp-roman8 cp860 (DOSPortuguese) Cntrl. Europe iso-8859-2 cp852 cp1250 MacCentralEurRoman MacCroatian MacRomanian MacRumanian Latin3[1] iso-8859-3 Latin4[2] iso-8859-4 Cyrillics iso-8859-5 cp855 cp1251 MacCyrillic (See also next section) cp866 MacUkrainian Arabic iso-8859-6 cp864 cp1256 MacArabic cp1006 MacFarsi Greek iso-8859-7 cp737 cp1253 MacGreek cp869 (DOSGreek2) Hebrew iso-8859-8 cp862 cp1255 MacHebrew Turkish iso-8859-9 cp857 cp1254 MacTurkish Nordics iso-8859-10 cp865 cp861 MacIcelandic MacSami Thai iso-8859-11[3] cp874 MacThai (iso-8859-12 is nonexistent. Reserved for Indics?) Baltics iso-8859-13 cp775 cp1257 Celtics iso-8859-14 Latin9 [4] iso-8859-15 Latin10 iso-8859-16 Vietnamese viscii cp1258 MacVietnamese ---------------------------------------------------------------- [1] Esperanto, Maltese, and Turkish. Turkish is now on 8859-9. [2] Baltics. Now on 8859-10, except for Latvian. [3] TIS 620 + Non-Breaking Space (0xA0 / U+00A0) [4] Nicknamed Latin0; the Euro sign as well as French and Finnish letters that are missing from 8859-1 were added. All cp* are also available as ibm-*, ms-*, and windows-* . See also L<http://czyborra.com/charsets/codepages.html>. Macintosh encodings don't seem to be registered in such entities as IANA. "Canonical" names in Encode are based upon Apple's Tech Note 1150. See L<http://developer.apple.com/technotes/tn/tn1150.html> for details. =item KOI8 - De Facto Standard for the Cyrillic world Though ISO-8859 does have ISO-8859-5, the KOI8 series is far more popular in the Net. L<Encode> comes with the following KOI charsets. For gory details, see L<http://czyborra.com/charsets/cyrillic.html> ---------------------------------------------------------------- koi8-f koi8-r cp878 [RFC1489] koi8-u [RFC2319] ---------------------------------------------------------------- =back =head2 gsm0338 - Hentai Latin 1 GSM0338 is for GSM handsets. Though it shares alphanumerals with ASCII, control character ranges and other parts are mapped very differently, mainly to store Greek characters. There are also escape sequences (starting with 0x1B) to cover e.g. the Euro sign. This was once handled by L<Encode::Bytes> but because of all those unusual specifications, Encode 2.20 has relocated the support to L<Encode::GSM0338>. See L<Encode::GSM0338> for details. =over 2 =item gsm0338 support before 2.19 Some special cases like a trailing 0x00 byte or a lone 0x1B byte are not well-defined and decode() will return an empty string for them. One possible workaround is $gsm =~ s/\x00\z/\x00\x00/; $uni = decode("gsm0338", $gsm); $uni .= "\xA0" if $gsm =~ /\x1B\z/; Note that the Encode implementation of GSM0338 does not implement the reuse of Latin capital letters as Greek capital letters (for example, the 0x5A is U+005A (LATIN CAPITAL LETTER Z), not U+0396 (GREEK CAPITAL LETTER ZETA). The GSM0338 is also covered in Encode::Byte even though it is not an "extended ASCII" encoding. =back =head2 CJK: Chinese, Japanese, Korean (Multibyte) Note that Vietnamese is listed above. Also read "Encoding vs Charset" below. Also note that these are implemented in distinct modules by countries, due to the size concerns (simplified Chinese is mapped to 'CN', continental China, while traditional Chinese is mapped to 'TW', Taiwan). Please refer to their respective documentation pages. =over 2 =item Encode::CN -- Continental China Standard DOS/Win Macintosh Comment/Reference ---------------------------------------------------------------- euc-cn [1] MacChineseSimp (gbk) cp936 [2] gb12345-raw { GB12345 without CES } gb2312-raw { GB2312 without CES } hz iso-ir-165 ---------------------------------------------------------------- [1] GB2312 is aliased to this. See L<Microsoft-related naming mess> [2] gbk is aliased to this. See L<Microsoft-related naming mess> =item Encode::JP -- Japan Standard DOS/Win Macintosh Comment/Reference ---------------------------------------------------------------- euc-jp shiftjis cp932 macJapanese 7bit-jis iso-2022-jp [RFC1468] iso-2022-jp-1 [RFC2237] jis0201-raw { JIS X 0201 (roman + halfwidth kana) without CES } jis0208-raw { JIS X 0208 (Kanji + fullwidth kana) without CES } jis0212-raw { JIS X 0212 (Extended Kanji) without CES } ---------------------------------------------------------------- =item Encode::KR -- Korea Standard DOS/Win Macintosh Comment/Reference ---------------------------------------------------------------- euc-kr MacKorean [RFC1557] cp949 [1] iso-2022-kr [RFC1557] johab [KS X 1001:1998, Annex 3] ksc5601-raw { KSC5601 without CES } ---------------------------------------------------------------- [1] ks_c_5601-1987, (x-)?windows-949, and uhc are aliased to this. See below. =item Encode::TW -- Taiwan Standard DOS/Win Macintosh Comment/Reference ---------------------------------------------------------------- big5-eten cp950 MacChineseTrad {big5 aliased to big5-eten} big5-hkscs ---------------------------------------------------------------- =item Encode::HanExtra -- More Chinese via CPAN Due to the size concerns, additional Chinese encodings below are distributed separately on CPAN, under the name Encode::HanExtra. Standard DOS/Win Macintosh Comment/Reference ---------------------------------------------------------------- big5ext CMEX's Big5e Extension big5plus CMEX's Big5+ Extension cccii Chinese Character Code for Information Interchange euc-tw EUC (Extended Unix Character) gb18030 GBK with Traditional Characters ---------------------------------------------------------------- =item Encode::JIS2K -- JIS X 0213 encodings via CPAN Due to size concerns, additional Japanese encodings below are distributed separately on CPAN, under the name Encode::JIS2K. Standard DOS/Win Macintosh Comment/Reference ---------------------------------------------------------------- euc-jisx0213 shiftjisx0123 iso-2022-jp-3 jis0213-1-raw jis0213-2-raw ---------------------------------------------------------------- =back =head2 Miscellaneous encodings =over 2 =item Encode::EBCDIC See L<perlebcdic> for details. ---------------------------------------------------------------- cp37 cp500 cp875 cp1026 cp1047 posix-bc ---------------------------------------------------------------- =item Encode::Symbols For symbols and dingbats. ---------------------------------------------------------------- symbol dingbats MacDingbats AdobeZdingbat AdobeSymbol ---------------------------------------------------------------- =item Encode::MIME::Header Strictly speaking, MIME header encoding documented in RFC 2047 is more of encapsulation than encoding. However, their support in modern world is imperative so they are supported. ---------------------------------------------------------------- MIME-Header [RFC2047] MIME-B [RFC2047] MIME-Q [RFC2047] ---------------------------------------------------------------- =item Encode::Guess This one is not a name of encoding but a utility that lets you pick up the most appropriate encoding for a data out of given I<suspects>. See L<Encode::Guess> for details. =back =head1 Unsupported encodings The following encodings are not supported as yet; some because they are rarely used, some because of technical difficulties. They may be supported by external modules via CPAN in the future, however. =over 2 =item ISO-2022-JP-2 [RFC1554] Not very popular yet. Needs Unicode Database or equivalent to implement encode() (because it includes JIS X 0208/0212, KSC5601, and GB2312 simultaneously, whose code points in Unicode overlap. So you need to lookup the database to determine to what character set a given Unicode character should belong). =item ISO-2022-CN [RFC1922] Not very popular. Needs CNS 11643-1 and -2 which are not available in this module. CNS 11643 is supported (via euc-tw) in Encode::HanExtra. Audrey Tang may add support for this encoding in her module in future. =item Various HP-UX encodings The following are unsupported due to the lack of mapping data. '8' - arabic8, greek8, hebrew8, kana8, thai8, and turkish8 '15' - japanese15, korean15, and roi15 =item Cyrillic encoding ISO-IR-111 Anton Tagunov doubts its usefulness. =item ISO-8859-8-1 [Hebrew] None of the Encode team knows Hebrew enough (ISO-8859-8, cp1255 and MacHebrew are supported because and just because there were mappings available at L<http://www.unicode.org/>). Contributions welcome. =item ISIRI 3342, Iran System, ISIRI 2900 [Farsi] Ditto. =item Thai encoding TCVN Ditto. =item Vietnamese encodings VPS Though Jungshik Shin has reported that Mozilla supports this encoding, it was too late before 5.8.0 for us to add it. In the future, it may be available via a separate module. See L<http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.uf> and L<http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.ut> if you are interested in helping us. =item Various Mac encodings The following are unsupported due to the lack of mapping data. MacArmenian, MacBengali, MacBurmese, MacEthiopic MacExtArabic, MacGeorgian, MacKannada, MacKhmer MacLaotian, MacMalayalam, MacMongolian, MacOriya MacSinhalese, MacTamil, MacTelugu, MacTibetan MacVietnamese The rest which are already available are based upon the vendor mappings at L<http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> . =item (Mac) Indic encodings The maps for the following are available at L<http://www.unicode.org/> but remain unsupported because those encodings need an algorithmical approach, currently unsupported by F<enc2xs>: MacDevanagari MacGurmukhi MacGujarati For details, please see C<Unicode mapping issues and notes:> at L<http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/DEVANAGA.TXT> . I believe this issue is prevalent not only for Mac Indics but also in other Indic encodings, but the above were the only Indic encodings maps that I could find at L<http://www.unicode.org/> . =back =head1 Encoding vs. Charset -- terminology We are used to using the term (character) I<encoding> and I<character set> interchangeably. But just as confusing the terms byte and character is dangerous and the terms should be differentiated when needed, we need to differentiate I<encoding> and I<character set>. To understand that, here is a description of how we make computers grok our characters. =over 2 =item * First we start with which characters to include. We call this collection of characters I<character repertoire>. =item * Then we have to give each character a unique ID so your computer can tell the difference between 'a' and 'A'. This itemized character repertoire is now a I<character set>. =item * If your computer can grow the character set without further processing, you can go ahead and use it. This is called a I<coded character set> (CCS) or I<raw character encoding>. ASCII is used this way for most cases. =item * But in many cases, especially multi-byte CJK encodings, you have to tweak a little more. Your network connection may not accept any data with the Most Significant Bit set, and your computer may not be able to tell if a given byte is a whole character or just half of it. So you have to I<encode> the character set to use it. A I<character encoding scheme> (CES) determines how to encode a given character set, or a set of multiple character sets. 7bit ISO-2022 is an example of a CES. You switch between character sets via I<escape sequences>. =back Technically, or mathematically, speaking, a character set encoded in such a CES that maps character by character may form a CCS. EUC is such an example. The CES of EUC is as follows: =over 2 =item * Map ASCII unchanged. =item * Map such a character set that consists of 94 or 96 powered by N members by adding 0x80 to each byte. =item * You can also use 0x8e and 0x8f to indicate that the following sequence of characters belongs to yet another character set. To each following byte is added the value 0x80. =back By carefully looking at the encoded byte sequence, you can find that the byte sequence conforms a unique number. In that sense, EUC is a CCS generated by a CES above from up to four CCS (complicated?). UTF-8 falls into this category. See L<perlUnicode/"UTF-8"> to find out how UTF-8 maps Unicode to a byte sequence. You may also have found out by now why 7bit ISO-2022 cannot comprise a CCS. If you look at a byte sequence \x21\x21, you can't tell if it is two !'s or IDEOGRAPHIC SPACE. EUC maps the latter to \xA1\xA1 so you have no trouble differentiating between "!!". and S<" ">. =head1 Encoding Classification (by Anton Tagunov and Dan Kogai) This section tries to classify the supported encodings by their applicability for information exchange over the Internet and to choose the most suitable aliases to name them in the context of such communication. =over 2 =item * To (en|de)code encodings marked by C<(**)>, you need C<Encode::HanExtra>, available from CPAN. =back Encoding names US-ASCII UTF-8 ISO-8859-* KOI8-R Shift_JIS EUC-JP ISO-2022-JP ISO-2022-JP-1 EUC-KR Big5 GB2312 are registered with IANA as preferred MIME names and may be used over the Internet. C<Shift_JIS> has been officialized by JIS X 0208:1997. L<Microsoft-related naming mess> gives details. C<GB2312> is the IANA name for C<EUC-CN>. See L<Microsoft-related naming mess> for details. C<GB_2312-80> I<raw> encoding is available as C<gb2312-raw> with Encode. See L<Encode::CN> for details. EUC-CN KOI8-U [RFC2319] have not been registered with IANA (as of March 2002) but seem to be supported by major web browsers. The IANA name for C<EUC-CN> is C<GB2312>. KS_C_5601-1987 is heavily misused. See L<Microsoft-related naming mess> for details. C<KS_C_5601-1987> I<raw> encoding is available as C<kcs5601-raw> with Encode. See L<Encode::KR> for details. UTF-16 UTF-16BE UTF-16LE are IANA-registered C<charset>s. See [RFC 2781] for details. Jungshik Shin reports that UTF-16 with a BOM is well accepted by MS IE 5/6 and NS 4/6. Beware however that =over 2 =item * C<UTF-16> support in any software you're going to be using/interoperating with has probably been less tested then C<UTF-8> support =item * C<UTF-8> coded data seamlessly passes traditional command piping (C<cat>, C<more>, etc.) while C<UTF-16> coded data is likely to cause confusion (with its zero bytes, for example) =item * it is beyond the power of words to describe the way HTML browsers encode non-C<ASCII> form data. To get a general impression, visit L<http://www.alanflavell.org.uk/charset/form-i18n.html>. While encoding of form data has stabilized for C<UTF-8> encoded pages (at least IE 5/6, NS 6, and Opera 6 behave consistently), be sure to expect fun (and cross-browser discrepancies) with C<UTF-16> encoded pages! =back The rule of thumb is to use C<UTF-8> unless you know what you're doing and unless you really benefit from using C<UTF-16>. ISO-IR-165 [RFC1345] VISCII GB 12345 GB 18030 (**) (see links below) EUC-TW (**) are totally valid encodings but not registered at IANA. The names under which they are listed here are probably the most widely-known names for these encodings and are recommended names. BIG5PLUS (**) is a proprietary name. =head2 Microsoft-related naming mess Microsoft products misuse the following names: =over 2 =item KS_C_5601-1987 Microsoft extension to C<EUC-KR>. Proper names: C<CP949>, C<UHC>, C<x-windows-949> (as used by Mozilla). See L<http://lists.w3.org/Archives/Public/ietf-charsets/2001AprJun/0033.html> for details. Encode aliases C<KS_C_5601-1987> to C<cp949> to reflect this common misusage. I<Raw> C<KS_C_5601-1987> encoding is available as C<kcs5601-raw>. See L<Encode::KR> for details. =item GB2312 Microsoft extension to C<EUC-CN>. Proper names: C<CP936>, C<GBK>. C<GB2312> has been registered in the C<EUC-CN> meaning at IANA. This has partially repaired the situation: Microsoft's C<GB2312> has become a superset of the official C<GB2312>. Encode aliases C<GB2312> to C<euc-cn> in full agreement with IANA registration. C<cp936> is supported separately. I<Raw> C<GB_2312-80> encoding is available as C<gb2312-raw>. See L<Encode::CN> for details. =item Big5 Microsoft extension to C<Big5>. Proper name: C<CP950>. Encode separately supports C<Big5> and C<cp950>. =item Shift_JIS Microsoft's understanding of C<Shift_JIS>. JIS has not endorsed the full Microsoft standard however. The official C<Shift_JIS> includes only JIS X 0201 and JIS X 0208 character sets, while Microsoft has always used C<Shift_JIS> to encode a wider character repertoire. See C<IANA> registration for C<Windows-31J>. As a historical predecessor, Microsoft's variant probably has more rights for the name, though it may be objected that Microsoft shouldn't have used JIS as part of the name in the first place. Unambiguous name: C<CP932>. C<IANA> name (also used by Mozilla, and provided as an alias by Encode): C<Windows-31J>. Encode separately supports C<Shift_JIS> and C<cp932>. =back =head1 Glossary =over 2 =item character repertoire A collection of unique characters. A I<character> set in the strictest sense. At this stage, characters are not numbered. =item coded character set (CCS) A character set that is mapped in a way computers can use directly. Many character encodings, including EUC, fall in this category. =item character encoding scheme (CES) An algorithm to map a character set to a byte sequence. You don't have to be able to tell which character set a given byte sequence belongs. 7-bit ISO-2022 is a CES but it cannot be a CCS. EUC is an example of being both a CCS and CES. =item charset (in MIME context) has long been used in the meaning of C<encoding>, CES. While the word combination C<character set> has lost this meaning in MIME context since [RFC 2130], the C<charset> abbreviation has retained it. This is how [RFC 2277] and [RFC 2278] bless C<charset>: This document uses the term "charset" to mean a set of rules for mapping from a sequence of octets to a sequence of characters, such as the combination of a coded character set and a character encoding scheme; this is also what is used as an identifier in MIME "charset=" parameters, and registered in the IANA charset registry ... (Note that this is NOT a term used by other standards bodies, such as ISO). [RFC 2277] =item EUC Extended Unix Character. See ISO-2022. =item ISO-2022 A CES that was carefully designed to coexist with ASCII. There are a 7 bit version and an 8 bit version. The 7 bit version switches character set via escape sequence so it cannot form a CCS. Since this is more difficult to handle in programs than the 8 bit version, the 7 bit version is not very popular except for iso-2022-jp, the I<de facto> standard CES for e-mails. The 8 bit version can form a CCS. EUC and ISO-8859 are two examples thereof. Pre-5.6 perl could use them as string literals. =item UCS Short for I<Universal Character Set>. When you say just UCS, it means I<Unicode>. =item UCS-2 ISO/IEC 10646 encoding form: Universal Character Set coded in two octets. =item Unicode A character set that aims to include all character repertoires of the world. Many character sets in various national as well as industrial standards have become, in a way, just subsets of Unicode. =item UTF Short for I<Unicode Transformation Format>. Determines how to map a Unicode character into a byte sequence. =item UTF-16 A UTF in 16-bit encoding. Can either be in big endian or little endian. The big endian version is called UTF-16BE (equal to UCS-2 + surrogate support) and the little endian version is called UTF-16LE. =back =head1 See Also L<Encode>, L<Encode::Byte>, L<Encode::CN>, L<Encode::JP>, L<Encode::KR>, L<Encode::TW>, L<Encode::EBCDIC>, L<Encode::Symbol> L<Encode::MIME::Header>, L<Encode::Guess> =head1 References =over 2 =item ECMA European Computer Manufacturers Association L<http://www.ecma.ch> =over 2 =item ECMA-035 (eq C<ISO-2022>) L<http://www.ecma.ch/ecma1/STAND/ECMA-035.HTM> The specification of ISO-2022 is available from the link above. =back =item IANA Internet Assigned Numbers Authority L<http://www.iana.org/> =over 2 =item Assigned Charset Names by IANA L<http://www.iana.org/assignments/character-sets> Most of the C<canonical names> in Encode derive from this list so you can directly apply the string you have extracted from MIME header of mails and web pages. =back =item ISO International Organization for Standardization L<http://www.iso.ch/> =item RFC Request For Comments -- need I say more? L<http://www.rfc-editor.org/>, L<http://www.ietf.org/rfc.html>, L<http://www.faqs.org/rfcs/> =item UC Unicode Consortium L<http://www.unicode.org/> =over 2 =item Unicode Glossary L<http://www.unicode.org/glossary/> The glossary of this document is based upon this site. =back =back =head2 Other Notable Sites =over 2 =item czyborra.com L<http://czyborra.com/> Contains a lot of useful information, especially gory details of ISO vs. vendor mappings. =item CJK.inf L<http://examples.oreilly.com/cjkvinfo/doc/cjk.inf> Somewhat obsolete (last update in 1996), but still useful. Also try L<ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/pdf/GB18030_Summary.pdf> You will find brief info on C<EUC-CN>, C<GBK> and mostly on C<GB 18030>. =item Jungshik Shin's Hangul FAQ L<http://jshin.net/faq> And especially its subject 8. L<http://jshin.net/faq/qa8.html> A comprehensive overview of the Korean (C<KS *>) standards. =item debian.org: "Introduction to i18n" A brief description for most of the mentioned CJK encodings is contained in L<http://www.debian.org/doc/manuals/intro-i18n/ch-codes.en.html> =back =head2 Offline sources =over 2 =item C<CJKV Information Processing> by Ken Lunde CJKV Information Processing 1999 O'Reilly & Associates, ISBN : 1-56592-224-7 The modern successor of C<CJK.inf>. Features a comprehensive coverage of CJKV character sets and encodings along with many other issues faced by anyone trying to better support CJKV languages/scripts in all the areas of information processing. To purchase this book, visit L<http://oreilly.com/catalog/9780596514471/> or your favourite bookstore. =back =cut Encode/ConfigLocal_PM.e2x 0000644 00000000270 15037233334 0011137 0 ustar 00 # # Local demand-load module list # # You should not edit this file by hand! use "enc2xs -C" # package Encode::ConfigLocal; our $VERSION = $_LocalVer_; use strict; $_ModLines_ 1; Encode/MIME/Name.pm 0000644 00000007355 15037233334 0007723 0 ustar 00 package Encode::MIME::Name; use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 1.3 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; # NOTE: This table must be 1:1 mapping our %MIME_NAME_OF = ( 'AdobeStandardEncoding' => 'Adobe-Standard-Encoding', 'AdobeSymbol' => 'Adobe-Symbol-Encoding', 'ascii' => 'US-ASCII', 'big5-hkscs' => 'Big5-HKSCS', 'cp1026' => 'IBM1026', 'cp1047' => 'IBM1047', 'cp1250' => 'windows-1250', 'cp1251' => 'windows-1251', 'cp1252' => 'windows-1252', 'cp1253' => 'windows-1253', 'cp1254' => 'windows-1254', 'cp1255' => 'windows-1255', 'cp1256' => 'windows-1256', 'cp1257' => 'windows-1257', 'cp1258' => 'windows-1258', 'cp37' => 'IBM037', 'cp424' => 'IBM424', 'cp437' => 'IBM437', 'cp500' => 'IBM500', 'cp775' => 'IBM775', 'cp850' => 'IBM850', 'cp852' => 'IBM852', 'cp855' => 'IBM855', 'cp857' => 'IBM857', 'cp860' => 'IBM860', 'cp861' => 'IBM861', 'cp862' => 'IBM862', 'cp863' => 'IBM863', 'cp864' => 'IBM864', 'cp865' => 'IBM865', 'cp866' => 'IBM866', 'cp869' => 'IBM869', 'cp936' => 'GBK', 'euc-cn' => 'EUC-CN', 'euc-jp' => 'EUC-JP', 'euc-kr' => 'EUC-KR', #'gb2312-raw' => 'GB2312', # no, you're wrong, I18N::Charset 'hp-roman8' => 'hp-roman8', 'hz' => 'HZ-GB-2312', 'iso-2022-jp' => 'ISO-2022-JP', 'iso-2022-jp-1' => 'ISO-2022-JP-1', 'iso-2022-kr' => 'ISO-2022-KR', 'iso-8859-1' => 'ISO-8859-1', 'iso-8859-10' => 'ISO-8859-10', 'iso-8859-13' => 'ISO-8859-13', 'iso-8859-14' => 'ISO-8859-14', 'iso-8859-15' => 'ISO-8859-15', 'iso-8859-16' => 'ISO-8859-16', 'iso-8859-2' => 'ISO-8859-2', 'iso-8859-3' => 'ISO-8859-3', 'iso-8859-4' => 'ISO-8859-4', 'iso-8859-5' => 'ISO-8859-5', 'iso-8859-6' => 'ISO-8859-6', 'iso-8859-7' => 'ISO-8859-7', 'iso-8859-8' => 'ISO-8859-8', 'iso-8859-9' => 'ISO-8859-9', #'jis0201-raw' => 'JIS_X0201', #'jis0208-raw' => 'JIS_C6226-1983', #'jis0212-raw' => 'JIS_X0212-1990', 'koi8-r' => 'KOI8-R', 'koi8-u' => 'KOI8-U', #'ksc5601-raw' => 'KS_C_5601-1987', 'shiftjis' => 'Shift_JIS', 'UTF-16' => 'UTF-16', 'UTF-16BE' => 'UTF-16BE', 'UTF-16LE' => 'UTF-16LE', 'UTF-32' => 'UTF-32', 'UTF-32BE' => 'UTF-32BE', 'UTF-32LE' => 'UTF-32LE', 'UTF-7' => 'UTF-7', 'utf-8-strict' => 'UTF-8', 'viscii' => 'VISCII', ); # NOTE: %MIME_NAME_OF is still 1:1 mapping our %ENCODE_NAME_OF = map { uc $MIME_NAME_OF{$_} => $_ } keys %MIME_NAME_OF; # Add additional 1:N mapping $MIME_NAME_OF{'utf8'} = 'UTF-8'; sub get_mime_name($) { $MIME_NAME_OF{$_[0]} }; sub get_encode_name($) { $ENCODE_NAME_OF{uc $_[0]} }; 1; __END__ =head1 NAME Encode::MIME::NAME -- internally used by Encode =head1 SEE ALSO L<I18N::Charset> =cut Encode/MIME/Header.pm 0000644 00000040427 15037233335 0010231 0 ustar 00 package Encode::MIME::Header; use strict; use warnings; our $VERSION = do { my @r = ( q$Revision: 2.28 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Carp (); use Encode (); use MIME::Base64 (); my %seed = ( decode_b => 1, # decodes 'B' encoding ? decode_q => 1, # decodes 'Q' encoding ? encode => 'B', # encode with 'B' or 'Q' ? charset => 'UTF-8', # encode charset bpl => 75, # bytes per line ); my @objs; push @objs, bless { %seed, Name => 'MIME-Header', } => __PACKAGE__; push @objs, bless { %seed, decode_q => 0, Name => 'MIME-B', } => __PACKAGE__; push @objs, bless { %seed, decode_b => 0, encode => 'Q', Name => 'MIME-Q', } => __PACKAGE__; Encode::define_encoding($_, $_->{Name}) foreach @objs; use parent qw(Encode::Encoding); sub needs_lines { 1 } sub perlio_ok { 0 } # RFC 2047 and RFC 2231 grammar my $re_charset = qr/[!"#\$%&'+\-0-9A-Z\\\^_`a-z\{\|\}~]+/; my $re_language = qr/[A-Za-z]{1,8}(?:-[0-9A-Za-z]{1,8})*/; my $re_encoding = qr/[QqBb]/; my $re_encoded_text = qr/[^\?]*/; my $re_encoded_word = qr/=\?$re_charset(?:\*$re_language)?\?$re_encoding\?$re_encoded_text\?=/; my $re_capture_encoded_word = qr/=\?($re_charset)((?:\*$re_language)?)\?($re_encoding\?$re_encoded_text)\?=/; my $re_capture_encoded_word_split = qr/=\?($re_charset)((?:\*$re_language)?)\?($re_encoding)\?($re_encoded_text)\?=/; # in strict mode check also for valid base64 characters and also for valid quoted printable codes my $re_encoding_strict_b = qr/[Bb]/; my $re_encoding_strict_q = qr/[Qq]/; my $re_encoded_text_strict_b = qr/[0-9A-Za-z\+\/]*={0,2}/; my $re_encoded_text_strict_q = qr/(?:[\x21-\x3C\x3E\x40-\x7E]|=[0-9A-Fa-f]{2})*/; # NOTE: first part are printable US-ASCII except ?, =, SPACE and TAB my $re_encoded_word_strict = qr/=\?$re_charset(?:\*$re_language)?\?(?:$re_encoding_strict_b\?$re_encoded_text_strict_b|$re_encoding_strict_q\?$re_encoded_text_strict_q)\?=/; my $re_capture_encoded_word_strict = qr/=\?($re_charset)((?:\*$re_language)?)\?($re_encoding_strict_b\?$re_encoded_text_strict_b|$re_encoding_strict_q\?$re_encoded_text_strict_q)\?=/; my $re_newline = qr/(?:\r\n|[\r\n])/; # in strict mode encoded words must be always separated by spaces or tabs (or folded newline) # except in comments when separator between words and comment round brackets can be omitted my $re_word_begin_strict = qr/(?:(?:[ \t]|\A)\(?|(?:[^\\]|\A)\)\()/; my $re_word_sep_strict = qr/(?:$re_newline?[ \t])+/; my $re_word_end_strict = qr/(?:\)\(|\)?(?:$re_newline?[ \t]|\z))/; my $re_match = qr/()((?:$re_encoded_word\s*)*$re_encoded_word)()/; my $re_match_strict = qr/($re_word_begin_strict)((?:$re_encoded_word_strict$re_word_sep_strict)*$re_encoded_word_strict)(?=$re_word_end_strict)/; my $re_capture = qr/$re_capture_encoded_word(?:\s*)?/; my $re_capture_strict = qr/$re_capture_encoded_word_strict$re_word_sep_strict?/; our $STRICT_DECODE = 0; sub decode($$;$) { my ($obj, $str, $chk) = @_; return undef unless defined $str; my $re_match_decode = $STRICT_DECODE ? $re_match_strict : $re_match; my $re_capture_decode = $STRICT_DECODE ? $re_capture_strict : $re_capture; my $stop = 0; my $output = substr($str, 0, 0); # to propagate taintedness # decode each line separately, match whole continuous folded line at one call 1 while not $stop and $str =~ s{^((?:[^\r\n]*(?:$re_newline[ \t])?)*)($re_newline)?}{ my $line = $1; my $sep = defined $2 ? $2 : ''; $stop = 1 unless length($line) or length($sep); # NOTE: this code partially could break $chk support # in non strict mode concat consecutive encoded mime words with same charset, language and encoding # fixes breaking inside multi-byte characters 1 while not $STRICT_DECODE and $line =~ s/$re_capture_encoded_word_split\s*=\?\1\2\?\3\?($re_encoded_text)\?=/=\?$1$2\?$3\?$4$5\?=/so; # process sequence of encoded MIME words at once 1 while not $stop and $line =~ s{^(.*?)$re_match_decode}{ my $begin = $1 . $2; my $words = $3; $begin =~ tr/\r\n//d; $output .= $begin; # decode one MIME word 1 while not $stop and $words =~ s{^(.*?)($re_capture_decode)}{ $output .= $1; my $orig = $2; my $charset = $3; my ($mime_enc, $text) = split /\?/, $5; $text =~ tr/\r\n//d; my $enc = Encode::find_mime_encoding($charset); # in non strict mode allow also perl encoding aliases if ( not defined $enc and not $STRICT_DECODE ) { # make sure that decoded string will be always strict UTF-8 $charset = 'UTF-8' if lc($charset) eq 'utf8'; $enc = Encode::find_encoding($charset); } if ( not defined $enc ) { Carp::croak qq(Unknown charset "$charset") if not ref $chk and $chk and $chk & Encode::DIE_ON_ERR; Carp::carp qq(Unknown charset "$charset") if not ref $chk and $chk and $chk & Encode::WARN_ON_ERR; $stop = 1 if not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR; $output .= ($output =~ /(?:\A|[ \t])$/ ? '' : ' ') . $orig unless $stop; # $orig mime word is separated by whitespace $stop ? $orig : ''; } else { if ( uc($mime_enc) eq 'B' and $obj->{decode_b} ) { my $decoded = _decode_b($enc, $text, $chk); $stop = 1 if not defined $decoded and not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR; $output .= (defined $decoded ? $decoded : $text) unless $stop; $stop ? $orig : ''; } elsif ( uc($mime_enc) eq 'Q' and $obj->{decode_q} ) { my $decoded = _decode_q($enc, $text, $chk); $stop = 1 if not defined $decoded and not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR; $output .= (defined $decoded ? $decoded : $text) unless $stop; $stop ? $orig : ''; } else { Carp::croak qq(MIME "$mime_enc" unsupported) if not ref $chk and $chk and $chk & Encode::DIE_ON_ERR; Carp::carp qq(MIME "$mime_enc" unsupported) if not ref $chk and $chk and $chk & Encode::WARN_ON_ERR; $stop = 1 if not ref $chk and $chk and $chk & Encode::RETURN_ON_ERR; $output .= ($output =~ /(?:\A|[ \t])$/ ? '' : ' ') . $orig unless $stop; # $orig mime word is separated by whitespace $stop ? $orig : ''; } } }se; if ( not $stop ) { $output .= $words; $words = ''; } $words; }se; if ( not $stop ) { $line =~ tr/\r\n//d; $output .= $line . $sep; $line = ''; $sep = ''; } $line . $sep; }se; $_[1] = $str if not ref $chk and $chk and !($chk & Encode::LEAVE_SRC); return $output; } sub _decode_b { my ($enc, $text, $chk) = @_; # MIME::Base64::decode ignores everything after a '=' padding character # in non strict mode split string after each sequence of padding characters and decode each substring my $octets = $STRICT_DECODE ? MIME::Base64::decode($text) : join('', map { MIME::Base64::decode($_) } split /(?<==)(?=[^=])/, $text); return _decode_octets($enc, $octets, $chk); } sub _decode_q { my ($enc, $text, $chk) = @_; $text =~ s/_/ /go; $text =~ s/=([0-9A-Fa-f]{2})/pack('C', hex($1))/ego; return _decode_octets($enc, $text, $chk); } sub _decode_octets { my ($enc, $octets, $chk) = @_; $chk = 0 unless defined $chk; $chk &= ~Encode::LEAVE_SRC if not ref $chk and $chk; my $output = $enc->decode($octets, $chk); return undef if not ref $chk and $chk and $octets ne ''; return $output; } sub encode($$;$) { my ($obj, $str, $chk) = @_; return undef unless defined $str; my $output = $obj->_fold_line($obj->_encode_string($str, $chk)); $_[1] = $str if not ref $chk and $chk and !($chk & Encode::LEAVE_SRC); return $output . substr($str, 0, 0); # to propagate taintedness } sub _fold_line { my ($obj, $line) = @_; my $bpl = $obj->{bpl}; my $output = ''; while ( length($line) ) { if ( $line =~ s/^(.{0,$bpl})(\s|\z)// ) { $output .= $1; $output .= "\r\n" . $2 if length($line); } elsif ( $line =~ s/(\s)(.*)$// ) { $output .= $line; $line = $2; $output .= "\r\n" . $1 if length($line); } else { $output .= $line; last; } } return $output; } sub _encode_string { my ($obj, $str, $chk) = @_; my $wordlen = $obj->{bpl} > 76 ? 76 : $obj->{bpl}; my $enc = Encode::find_mime_encoding($obj->{charset}); my $enc_chk = $chk; $enc_chk = 0 unless defined $enc_chk; $enc_chk |= Encode::LEAVE_SRC if not ref $enc_chk and $enc_chk; my @result = (); my $octets = ''; while ( length( my $chr = substr($str, 0, 1, '') ) ) { my $seq = $enc->encode($chr, $enc_chk); if ( not length($seq) ) { substr($str, 0, 0, $chr); last; } if ( $obj->_encoded_word_len($octets . $seq) > $wordlen ) { push @result, $obj->_encode_word($octets); $octets = ''; } $octets .= $seq; } length($octets) and push @result, $obj->_encode_word($octets); $_[1] = $str if not ref $chk and $chk and !($chk & Encode::LEAVE_SRC); return join(' ', @result); } sub _encode_word { my ($obj, $octets) = @_; my $charset = $obj->{charset}; my $encode = $obj->{encode}; my $text = $encode eq 'B' ? _encode_b($octets) : _encode_q($octets); return "=?$charset?$encode?$text?="; } sub _encoded_word_len { my ($obj, $octets) = @_; my $charset = $obj->{charset}; my $encode = $obj->{encode}; my $text_len = $encode eq 'B' ? _encoded_b_len($octets) : _encoded_q_len($octets); return length("=?$charset?$encode??=") + $text_len; } sub _encode_b { my ($octets) = @_; return MIME::Base64::encode($octets, ''); } sub _encoded_b_len { my ($octets) = @_; return ( length($octets) + 2 ) / 3 * 4; } my $re_invalid_q_char = qr/[^0-9A-Za-z !*+\-\/]/; sub _encode_q { my ($octets) = @_; $octets =~ s{($re_invalid_q_char)}{ join('', map { sprintf('=%02X', $_) } unpack('C*', $1)) }egox; $octets =~ s/ /_/go; return $octets; } sub _encoded_q_len { my ($octets) = @_; my $invalid_count = () = $octets =~ /$re_invalid_q_char/sgo; return ( $invalid_count * 3 ) + ( length($octets) - $invalid_count ); } 1; __END__ =head1 NAME Encode::MIME::Header -- MIME encoding for an unstructured email header =head1 SYNOPSIS use Encode qw(encode decode); my $mime_str = encode("MIME-Header", "Sample:Text \N{U+263A}"); # $mime_str is "=?UTF-8?B?U2FtcGxlOlRleHQg4pi6?=" my $mime_q_str = encode("MIME-Q", "Sample:Text \N{U+263A}"); # $mime_q_str is "=?UTF-8?Q?Sample=3AText_=E2=98=BA?=" my $str = decode("MIME-Header", "=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\r\n " . "=?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=" ); # $str is "If you can read this you understand the example." use Encode qw(decode :fallbacks); use Encode::MIME::Header; local $Encode::MIME::Header::STRICT_DECODE = 1; my $strict_string = decode("MIME-Header", $mime_string, FB_CROAK); # use strict decoding and croak on errors =head1 ABSTRACT This module implements L<RFC 2047|https://tools.ietf.org/html/rfc2047> MIME encoding for an unstructured field body of the email header. It can also be used for L<RFC 822|https://tools.ietf.org/html/rfc822> 'text' token. However, it cannot be used directly for the whole header with the field name or for the structured header fields like From, To, Cc, Message-Id, etc... There are 3 encoding names supported by this module: C<MIME-Header>, C<MIME-B> and C<MIME-Q>. =head1 DESCRIPTION Decode method takes an unstructured field body of the email header (or L<RFC 822|https://tools.ietf.org/html/rfc822> 'text' token) as its input and decodes each MIME encoded-word from input string to a sequence of bytes according to L<RFC 2047|https://tools.ietf.org/html/rfc2047> and L<RFC 2231|https://tools.ietf.org/html/rfc2231>. Subsequently, each sequence of bytes with the corresponding MIME charset is decoded with L<the Encode module|Encode> and finally, one output string is returned. Text parts of the input string which do not contain MIME encoded-word stay unmodified in the output string. Folded newlines between two consecutive MIME encoded-words are discarded, others are preserved in the output string. C<MIME-B> can decode Base64 variant, C<MIME-Q> can decode Quoted-Printable variant and C<MIME-Header> can decode both of them. If L<Encode module|Encode> does not support particular MIME charset or chosen variant then an action based on L<CHECK flags|Encode/Handling Malformed Data> is performed (by default, the MIME encoded-word is not decoded). Encode method takes a scalar string as its input and uses L<strict UTF-8|Encode/UTF-8 vs. utf8 vs. UTF8> encoder for encoding it to UTF-8 bytes. Then a sequence of UTF-8 bytes is encoded into MIME encoded-words (C<MIME-Header> and C<MIME-B> use a Base64 variant while C<MIME-Q> uses a Quoted-Printable variant) where each MIME encoded-word is limited to 75 characters. MIME encoded-words are separated by C<CRLF SPACE> and joined to one output string. Output string is suitable for unstructured field body of the email header. Both encode and decode methods propagate L<CHECK flags|Encode/Handling Malformed Data> when encoding and decoding the MIME charset. =head1 BUGS Versions prior to 2.22 (part of Encode 2.83) have a malfunctioning decoder and encoder. The MIME encoder infamously inserted additional spaces or discarded white spaces between consecutive MIME encoded-words, which led to invalid MIME headers produced by this module. The MIME decoder had a tendency to discard white spaces, incorrectly interpret data or attempt to decode Base64 MIME encoded-words as Quoted-Printable. These problems were fixed in version 2.22. It is highly recommended not to use any version prior 2.22! Versions prior to 2.24 (part of Encode 2.87) ignored L<CHECK flags|Encode/Handling Malformed Data>. The MIME encoder used L<not strict utf8|Encode/UTF-8 vs. utf8 vs. UTF8> encoder for input Unicode strings which could lead to invalid UTF-8 sequences. MIME decoder used also L<not strict utf8|Encode/UTF-8 vs. utf8 vs. UTF8> decoder and additionally called the decode method with a C<Encode::FB_PERLQQ> flag (thus user-specified L<CHECK flags|Encode/Handling Malformed Data> were ignored). Moreover, it automatically croaked when a MIME encoded-word contained unknown encoding. Since version 2.24, this module uses L<strict UTF-8|Encode/UTF-8 vs. utf8 vs. UTF8> encoder and decoder. And L<CHECK flags|Encode/Handling Malformed Data> are correctly propagated. Since version 2.22 (part of Encode 2.83), the MIME encoder should be fully compliant to L<RFC 2047|https://tools.ietf.org/html/rfc2047> and L<RFC 2231|https://tools.ietf.org/html/rfc2231>. Due to the aforementioned bugs in previous versions of the MIME encoder, there is a I<less strict> compatible mode for the MIME decoder which is used by default. It should be able to decode MIME encoded-words encoded by pre 2.22 versions of this module. However, note that this is not correct according to L<RFC 2047|https://tools.ietf.org/html/rfc2047>. In default I<not strict> mode the MIME decoder attempts to decode every substring which looks like a MIME encoded-word. Therefore, the MIME encoded-words do not need to be separated by white space. To enforce a correct I<strict> mode, set variable C<$Encode::MIME::Header::STRICT_DECODE> to 1 e.g. by localizing: use Encode::MIME::Header; local $Encode::MIME::Header::STRICT_DECODE = 1; =head1 AUTHORS Pali E<lt>pali@cpan.orgE<gt> =head1 SEE ALSO L<Encode>, L<RFC 822|https://tools.ietf.org/html/rfc822>, L<RFC 2047|https://tools.ietf.org/html/rfc2047>, L<RFC 2231|https://tools.ietf.org/html/rfc2231> =cut Encode/MIME/Header/ISO_2022_JP.pm 0000644 00000006200 15037233335 0011710 0 ustar 00 package Encode::MIME::Header::ISO_2022_JP; use strict; use warnings; use parent qw(Encode::MIME::Header); my $obj = bless { decode_b => '1', decode_q => '1', encode => 'B', bpl => 76, Name => 'MIME-Header-ISO_2022_JP' } => __PACKAGE__; Encode::define_encoding($obj, 'MIME-Header-ISO_2022_JP'); use constant HEAD => '=?ISO-2022-JP?B?'; use constant TAIL => '?='; use Encode::CJKConstants qw(%RE); our $VERSION = do { my @r = ( q$Revision: 1.9 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; # I owe the below codes totally to # Jcode by Dan Kogai & http://www.din.or.jp/~ohzaki/perl.htm#JP_Base64 sub encode { my $self = shift; my $str = shift; return undef unless defined $str; utf8::encode($str) if ( Encode::is_utf8($str) ); Encode::from_to( $str, 'utf8', 'euc-jp' ); my ($trailing_crlf) = ( $str =~ /(\n|\r|\x0d\x0a)$/o ); $str = _mime_unstructured_header( $str, $self->{bpl} ); not $trailing_crlf and $str =~ s/(\n|\r|\x0d\x0a)$//o; return $str; } sub _mime_unstructured_header { my ( $oldheader, $bpl ) = @_; my $crlf = $oldheader =~ /\n$/; my ( $header, @words, @wordstmp, $i ) = (''); $oldheader =~ s/\s+$//; @wordstmp = split /\s+/, $oldheader; for ( $i = 0 ; $i < $#wordstmp ; $i++ ) { if ( $wordstmp[$i] !~ /^[\x21-\x7E]+$/ and $wordstmp[ $i + 1 ] !~ /^[\x21-\x7E]+$/ ) { $wordstmp[ $i + 1 ] = "$wordstmp[$i] $wordstmp[$i + 1]"; } else { push( @words, $wordstmp[$i] ); } } push( @words, $wordstmp[-1] ); for my $word (@words) { if ( $word =~ /^[\x21-\x7E]+$/ ) { $header =~ /(?:.*\n)*(.*)/; if ( length($1) + length($word) > $bpl ) { $header .= "\n $word"; } else { $header .= $word; } } else { $header = _add_encoded_word( $word, $header, $bpl ); } $header =~ /(?:.*\n)*(.*)/; if ( length($1) == $bpl ) { $header .= "\n "; } else { $header .= ' '; } } $header =~ s/\n? $//mg; $crlf ? "$header\n" : $header; } sub _add_encoded_word { my ( $str, $line, $bpl ) = @_; my $result = ''; while ( length($str) ) { my $target = $str; $str = ''; if ( length($line) + 22 + ( $target =~ /^(?:$RE{EUC_0212}|$RE{EUC_C})/o ) * 8 > $bpl ) { $line =~ s/[ \t\n\r]*$/\n/; $result .= $line; $line = ' '; } while (1) { my $iso_2022_jp = $target; Encode::from_to( $iso_2022_jp, 'euc-jp', 'iso-2022-jp' ); my $encoded = HEAD . MIME::Base64::encode_base64( $iso_2022_jp, '' ) . TAIL; if ( length($encoded) + length($line) > $bpl ) { $target =~ s/($RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C}|$RE{ASCII})$//o; $str = $1 . $str; } else { $line .= $encoded; last; } } } $result . $line; } 1; __END__ Digest/SHA.pm 0000644 00000053236 15037233335 0006751 0 ustar 00 package Digest::SHA; require 5.003000; use strict; use warnings; use vars qw($VERSION @ISA @EXPORT_OK $errmsg); use Fcntl qw(O_RDONLY O_RDWR); use integer; $VERSION = '6.02'; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw( $errmsg hmac_sha1 hmac_sha1_base64 hmac_sha1_hex hmac_sha224 hmac_sha224_base64 hmac_sha224_hex hmac_sha256 hmac_sha256_base64 hmac_sha256_hex hmac_sha384 hmac_sha384_base64 hmac_sha384_hex hmac_sha512 hmac_sha512_base64 hmac_sha512_hex hmac_sha512224 hmac_sha512224_base64 hmac_sha512224_hex hmac_sha512256 hmac_sha512256_base64 hmac_sha512256_hex sha1 sha1_base64 sha1_hex sha224 sha224_base64 sha224_hex sha256 sha256_base64 sha256_hex sha384 sha384_base64 sha384_hex sha512 sha512_base64 sha512_hex sha512224 sha512224_base64 sha512224_hex sha512256 sha512256_base64 sha512256_hex); # Inherit from Digest::base if possible eval { require Digest::base; push(@ISA, 'Digest::base'); }; # The following routines aren't time-critical, so they can be left in Perl sub new { my($class, $alg) = @_; $alg =~ s/\D+//g if defined $alg; if (ref($class)) { # instance method if (!defined($alg) || ($alg == $class->algorithm)) { sharewind($class); return($class); } return shainit($class, $alg) ? $class : undef; } $alg = 1 unless defined $alg; return $class->newSHA($alg); } BEGIN { *reset = \&new } sub add_bits { my($self, $data, $nbits) = @_; unless (defined $nbits) { $nbits = length($data); $data = pack("B*", $data); } $nbits = length($data) * 8 if $nbits > length($data) * 8; shawrite($data, $nbits, $self); return($self); } sub _bail { my $msg = shift; $errmsg = $!; $msg .= ": $!"; require Carp; Carp::croak($msg); } { my $_can_T_filehandle; sub _istext { local *FH = shift; my $file = shift; if (! defined $_can_T_filehandle) { local $^W = 0; my $istext = eval { -T FH }; $_can_T_filehandle = $@ ? 0 : 1; return $_can_T_filehandle ? $istext : -T $file; } return $_can_T_filehandle ? -T FH : -T $file; } } sub _addfile { my ($self, $handle) = @_; my $n; my $buf = ""; while (($n = read($handle, $buf, 4096))) { $self->add($buf); } _bail("Read failed") unless defined $n; $self; } sub addfile { my ($self, $file, $mode) = @_; return(_addfile($self, $file)) unless ref(\$file) eq 'SCALAR'; $mode = defined($mode) ? $mode : ""; my ($binary, $UNIVERSAL, $BITS) = map { $_ eq $mode } ("b", "U", "0"); ## Always interpret "-" to mean STDIN; otherwise use ## sysopen to handle full range of POSIX file names. ## If $file is a directory, force an EISDIR error ## by attempting to open with mode O_RDWR local *FH; $file eq '-' and open(FH, '< -') or sysopen(FH, $file, -d $file ? O_RDWR : O_RDONLY) or _bail('Open failed'); if ($BITS) { my ($n, $buf) = (0, ""); while (($n = read(FH, $buf, 4096))) { $buf =~ tr/01//cd; $self->add_bits($buf); } _bail("Read failed") unless defined $n; close(FH); return($self); } binmode(FH) if $binary || $UNIVERSAL; if ($UNIVERSAL && _istext(*FH, $file)) { $self->_addfileuniv(*FH); } else { $self->_addfilebin(*FH) } close(FH); $self; } sub getstate { my $self = shift; my $alg = $self->algorithm or return; my $state = $self->_getstate or return; my $nD = $alg <= 256 ? 8 : 16; my $nH = $alg <= 256 ? 32 : 64; my $nB = $alg <= 256 ? 64 : 128; my($H, $block, $blockcnt, $lenhh, $lenhl, $lenlh, $lenll) = $state =~ /^(.{$nH})(.{$nB})(.{4})(.{4})(.{4})(.{4})(.{4})$/s; for ($alg, $H, $block, $blockcnt, $lenhh, $lenhl, $lenlh, $lenll) { return unless defined $_; } my @s = (); push(@s, "alg:" . $alg); push(@s, "H:" . join(":", unpack("H*", $H) =~ /.{$nD}/g)); push(@s, "block:" . join(":", unpack("H*", $block) =~ /.{2}/g)); push(@s, "blockcnt:" . unpack("N", $blockcnt)); push(@s, "lenhh:" . unpack("N", $lenhh)); push(@s, "lenhl:" . unpack("N", $lenhl)); push(@s, "lenlh:" . unpack("N", $lenlh)); push(@s, "lenll:" . unpack("N", $lenll)); join("\n", @s) . "\n"; } sub putstate { my($class, $state) = @_; my %s = (); for (split(/\n/, $state)) { s/^\s+//; s/\s+$//; next if (/^(#|$)/); my @f = split(/[:\s]+/); my $tag = shift(@f); $s{$tag} = join('', @f); } # H and block may contain arbitrary values, but check everything else grep { $_ == $s{'alg'} } (1,224,256,384,512,512224,512256) or return; length($s{'H'}) == ($s{'alg'} <= 256 ? 64 : 128) or return; length($s{'block'}) == ($s{'alg'} <= 256 ? 128 : 256) or return; { no integer; for (qw(blockcnt lenhh lenhl lenlh lenll)) { 0 <= $s{$_} or return; $s{$_} <= 4294967295 or return; } $s{'blockcnt'} < ($s{'alg'} <= 256 ? 512 : 1024) or return; } my $packed_state = ( pack("H*", $s{'H'}) . pack("H*", $s{'block'}) . pack("N", $s{'blockcnt'}) . pack("N", $s{'lenhh'}) . pack("N", $s{'lenhl'}) . pack("N", $s{'lenlh'}) . pack("N", $s{'lenll'}) ); return $class->new($s{'alg'})->_putstate($packed_state); } sub dump { my $self = shift; my $file = shift; my $state = $self->getstate or return; $file = "-" if (!defined($file) || $file eq ""); local *FH; open(FH, "> $file") or return; print FH $state; close(FH); return($self); } sub load { my $class = shift; my $file = shift; $file = "-" if (!defined($file) || $file eq ""); local *FH; open(FH, "< $file") or return; my $str = join('', <FH>); close(FH); $class->putstate($str); } eval { require XSLoader; XSLoader::load('Digest::SHA', $VERSION); 1; } or do { require DynaLoader; push @ISA, 'DynaLoader'; Digest::SHA->bootstrap($VERSION); }; 1; __END__ =head1 NAME Digest::SHA - Perl extension for SHA-1/224/256/384/512 =head1 SYNOPSIS In programs: # Functional interface use Digest::SHA qw(sha1 sha1_hex sha1_base64 ...); $digest = sha1($data); $digest = sha1_hex($data); $digest = sha1_base64($data); $digest = sha256($data); $digest = sha384_hex($data); $digest = sha512_base64($data); # Object-oriented use Digest::SHA; $sha = Digest::SHA->new($alg); $sha->add($data); # feed data into stream $sha->addfile(*F); $sha->addfile($filename); $sha->add_bits($bits); $sha->add_bits($data, $nbits); $sha_copy = $sha->clone; # make copy of digest object $state = $sha->getstate; # save current state to string $sha->putstate($state); # restore previous $state $digest = $sha->digest; # compute digest $digest = $sha->hexdigest; $digest = $sha->b64digest; From the command line: $ shasum files $ shasum --help =head1 SYNOPSIS (HMAC-SHA) # Functional interface only use Digest::SHA qw(hmac_sha1 hmac_sha1_hex ...); $digest = hmac_sha1($data, $key); $digest = hmac_sha224_hex($data, $key); $digest = hmac_sha256_base64($data, $key); =head1 ABSTRACT Digest::SHA is a complete implementation of the NIST Secure Hash Standard. It gives Perl programmers a convenient way to calculate SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, and SHA-512/256 message digests. The module can handle all types of input, including partial-byte data. =head1 DESCRIPTION Digest::SHA is written in C for speed. If your platform lacks a C compiler, you can install the functionally equivalent (but much slower) L<Digest::SHA::PurePerl> module. The programming interface is easy to use: it's the same one found in CPAN's L<Digest> module. So, if your applications currently use L<Digest::MD5> and you'd prefer the stronger security of SHA, it's a simple matter to convert them. The interface provides two ways to calculate digests: all-at-once, or in stages. To illustrate, the following short program computes the SHA-256 digest of "hello world" using each approach: use Digest::SHA qw(sha256_hex); $data = "hello world"; @frags = split(//, $data); # all-at-once (Functional style) $digest1 = sha256_hex($data); # in-stages (OOP style) $state = Digest::SHA->new(256); for (@frags) { $state->add($_) } $digest2 = $state->hexdigest; print $digest1 eq $digest2 ? "whew!\n" : "oops!\n"; To calculate the digest of an n-bit message where I<n> is not a multiple of 8, use the I<add_bits()> method. For example, consider the 446-bit message consisting of the bit-string "110" repeated 148 times, followed by "11". Here's how to display its SHA-1 digest: use Digest::SHA; $bits = "110" x 148 . "11"; $sha = Digest::SHA->new(1)->add_bits($bits); print $sha->hexdigest, "\n"; Note that for larger bit-strings, it's more efficient to use the two-argument version I<add_bits($data, $nbits)>, where I<$data> is in the customary packed binary format used for Perl strings. The module also lets you save intermediate SHA states to a string. The I<getstate()> method generates portable, human-readable text describing the current state of computation. You can subsequently restore that state with I<putstate()> to resume where the calculation left off. To see what a state description looks like, just run the following: use Digest::SHA; print Digest::SHA->new->add("Shaw" x 1962)->getstate; As an added convenience, the Digest::SHA module offers routines to calculate keyed hashes using the HMAC-SHA-1/224/256/384/512 algorithms. These services exist in functional form only, and mimic the style and behavior of the I<sha()>, I<sha_hex()>, and I<sha_base64()> functions. # Test vector from draft-ietf-ipsec-ciph-sha-256-01.txt use Digest::SHA qw(hmac_sha256_hex); print hmac_sha256_hex("Hi There", chr(0x0b) x 32), "\n"; =head1 UNICODE AND SIDE EFFECTS Perl supports Unicode strings as of version 5.6. Such strings may contain wide characters, namely, characters whose ordinal values are greater than 255. This can cause problems for digest algorithms such as SHA that are specified to operate on sequences of bytes. The rule by which Digest::SHA handles a Unicode string is easy to state, but potentially confusing to grasp: the string is interpreted as a sequence of byte values, where each byte value is equal to the ordinal value (viz. code point) of its corresponding Unicode character. That way, the Unicode string 'abc' has exactly the same digest value as the ordinary string 'abc'. Since a wide character does not fit into a byte, the Digest::SHA routines croak if they encounter one. Whereas if a Unicode string contains no wide characters, the module accepts it quite happily. The following code illustrates the two cases: $str1 = pack('U*', (0..255)); print sha1_hex($str1); # ok $str2 = pack('U*', (0..256)); print sha1_hex($str2); # croaks Be aware that the digest routines silently convert UTF-8 input into its equivalent byte sequence in the native encoding (cf. utf8::downgrade). This side effect influences only the way Perl stores the data internally, but otherwise leaves the actual value of the data intact. =head1 NIST STATEMENT ON SHA-1 NIST acknowledges that the work of Prof. Xiaoyun Wang constitutes a practical collision attack on SHA-1. Therefore, NIST encourages the rapid adoption of the SHA-2 hash functions (e.g. SHA-256) for applications requiring strong collision resistance, such as digital signatures. ref. L<http://csrc.nist.gov/groups/ST/hash/statement.html> =head1 PADDING OF BASE64 DIGESTS By convention, CPAN Digest modules do B<not> pad their Base64 output. Problems can occur when feeding such digests to other software that expects properly padded Base64 encodings. For the time being, any necessary padding must be done by the user. Fortunately, this is a simple operation: if the length of a Base64-encoded digest isn't a multiple of 4, simply append "=" characters to the end of the digest until it is: while (length($b64_digest) % 4) { $b64_digest .= '='; } To illustrate, I<sha256_base64("abc")> is computed to be ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0 which has a length of 43. So, the properly padded version is ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= =head1 EXPORT None by default. =head1 EXPORTABLE FUNCTIONS Provided your C compiler supports a 64-bit type (e.g. the I<long long> of C99, or I<__int64> used by Microsoft C/C++), all of these functions will be available for use. Otherwise, you won't be able to perform the SHA-384 and SHA-512 transforms, both of which require 64-bit operations. I<Functional style> =over 4 =item B<sha1($data, ...)> =item B<sha224($data, ...)> =item B<sha256($data, ...)> =item B<sha384($data, ...)> =item B<sha512($data, ...)> =item B<sha512224($data, ...)> =item B<sha512256($data, ...)> Logically joins the arguments into a single string, and returns its SHA-1/224/256/384/512 digest encoded as a binary string. =item B<sha1_hex($data, ...)> =item B<sha224_hex($data, ...)> =item B<sha256_hex($data, ...)> =item B<sha384_hex($data, ...)> =item B<sha512_hex($data, ...)> =item B<sha512224_hex($data, ...)> =item B<sha512256_hex($data, ...)> Logically joins the arguments into a single string, and returns its SHA-1/224/256/384/512 digest encoded as a hexadecimal string. =item B<sha1_base64($data, ...)> =item B<sha224_base64($data, ...)> =item B<sha256_base64($data, ...)> =item B<sha384_base64($data, ...)> =item B<sha512_base64($data, ...)> =item B<sha512224_base64($data, ...)> =item B<sha512256_base64($data, ...)> Logically joins the arguments into a single string, and returns its SHA-1/224/256/384/512 digest encoded as a Base64 string. It's important to note that the resulting string does B<not> contain the padding characters typical of Base64 encodings. This omission is deliberate, and is done to maintain compatibility with the family of CPAN Digest modules. See L</"PADDING OF BASE64 DIGESTS"> for details. =back I<OOP style> =over 4 =item B<new($alg)> Returns a new Digest::SHA object. Allowed values for I<$alg> are 1, 224, 256, 384, 512, 512224, or 512256. It's also possible to use common string representations of the algorithm (e.g. "sha256", "SHA-384"). If the argument is missing, SHA-1 will be used by default. Invoking I<new> as an instance method will reset the object to the initial state associated with I<$alg>. If the argument is missing, the object will continue using the same algorithm that was selected at creation. =item B<reset($alg)> This method has exactly the same effect as I<new($alg)>. In fact, I<reset> is just an alias for I<new>. =item B<hashsize> Returns the number of digest bits for this object. The values are 160, 224, 256, 384, 512, 224, and 256 for SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 and SHA-512/256, respectively. =item B<algorithm> Returns the digest algorithm for this object. The values are 1, 224, 256, 384, 512, 512224, and 512256 for SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, and SHA-512/256, respectively. =item B<clone> Returns a duplicate copy of the object. =item B<add($data, ...)> Logically joins the arguments into a single string, and uses it to update the current digest state. In other words, the following statements have the same effect: $sha->add("a"); $sha->add("b"); $sha->add("c"); $sha->add("a")->add("b")->add("c"); $sha->add("a", "b", "c"); $sha->add("abc"); The return value is the updated object itself. =item B<add_bits($data, $nbits)> =item B<add_bits($bits)> Updates the current digest state by appending bits to it. The return value is the updated object itself. The first form causes the most-significant I<$nbits> of I<$data> to be appended to the stream. The I<$data> argument is in the customary binary format used for Perl strings. The second form takes an ASCII string of "0" and "1" characters as its argument. It's equivalent to $sha->add_bits(pack("B*", $bits), length($bits)); So, the following two statements do the same thing: $sha->add_bits("111100001010"); $sha->add_bits("\xF0\xA0", 12); Note that SHA-1 and SHA-2 use I<most-significant-bit ordering> for their internal state. This means that $sha3->add_bits("110"); is equivalent to $sha3->add_bits("1")->add_bits("1")->add_bits("0"); =item B<addfile(*FILE)> Reads from I<FILE> until EOF, and appends that data to the current state. The return value is the updated object itself. =item B<addfile($filename [, $mode])> Reads the contents of I<$filename>, and appends that data to the current state. The return value is the updated object itself. By default, I<$filename> is simply opened and read; no special modes or I/O disciplines are used. To change this, set the optional I<$mode> argument to one of the following values: "b" read file in binary mode "U" use universal newlines "0" use BITS mode The "U" mode is modeled on Python's "Universal Newlines" concept, whereby DOS and Mac OS line terminators are converted internally to UNIX newlines before processing. This ensures consistent digest values when working simultaneously across multiple file systems. B<The "U" mode influences only text files>, namely those passing Perl's I<-T> test; binary files are processed with no translation whatsoever. The BITS mode ("0") interprets the contents of I<$filename> as a logical stream of bits, where each ASCII '0' or '1' character represents a 0 or 1 bit, respectively. All other characters are ignored. This provides a convenient way to calculate the digest values of partial-byte data by using files, rather than having to write separate programs employing the I<add_bits> method. =item B<getstate> Returns a string containing a portable, human-readable representation of the current SHA state. =item B<putstate($str)> Returns a Digest::SHA object representing the SHA state contained in I<$str>. The format of I<$str> matches the format of the output produced by method I<getstate>. If called as a class method, a new object is created; if called as an instance method, the object is reset to the state contained in I<$str>. =item B<dump($filename)> Writes the output of I<getstate> to I<$filename>. If the argument is missing, or equal to the empty string, the state information will be written to STDOUT. =item B<load($filename)> Returns a Digest::SHA object that results from calling I<putstate> on the contents of I<$filename>. If the argument is missing, or equal to the empty string, the state information will be read from STDIN. =item B<digest> Returns the digest encoded as a binary string. Note that the I<digest> method is a read-once operation. Once it has been performed, the Digest::SHA object is automatically reset in preparation for calculating another digest value. Call I<$sha-E<gt>clone-E<gt>digest> if it's necessary to preserve the original digest state. =item B<hexdigest> Returns the digest encoded as a hexadecimal string. Like I<digest>, this method is a read-once operation. Call I<$sha-E<gt>clone-E<gt>hexdigest> if it's necessary to preserve the original digest state. =item B<b64digest> Returns the digest encoded as a Base64 string. Like I<digest>, this method is a read-once operation. Call I<$sha-E<gt>clone-E<gt>b64digest> if it's necessary to preserve the original digest state. It's important to note that the resulting string does B<not> contain the padding characters typical of Base64 encodings. This omission is deliberate, and is done to maintain compatibility with the family of CPAN Digest modules. See L</"PADDING OF BASE64 DIGESTS"> for details. =back I<HMAC-SHA-1/224/256/384/512> =over 4 =item B<hmac_sha1($data, $key)> =item B<hmac_sha224($data, $key)> =item B<hmac_sha256($data, $key)> =item B<hmac_sha384($data, $key)> =item B<hmac_sha512($data, $key)> =item B<hmac_sha512224($data, $key)> =item B<hmac_sha512256($data, $key)> Returns the HMAC-SHA-1/224/256/384/512 digest of I<$data>/I<$key>, with the result encoded as a binary string. Multiple I<$data> arguments are allowed, provided that I<$key> is the last argument in the list. =item B<hmac_sha1_hex($data, $key)> =item B<hmac_sha224_hex($data, $key)> =item B<hmac_sha256_hex($data, $key)> =item B<hmac_sha384_hex($data, $key)> =item B<hmac_sha512_hex($data, $key)> =item B<hmac_sha512224_hex($data, $key)> =item B<hmac_sha512256_hex($data, $key)> Returns the HMAC-SHA-1/224/256/384/512 digest of I<$data>/I<$key>, with the result encoded as a hexadecimal string. Multiple I<$data> arguments are allowed, provided that I<$key> is the last argument in the list. =item B<hmac_sha1_base64($data, $key)> =item B<hmac_sha224_base64($data, $key)> =item B<hmac_sha256_base64($data, $key)> =item B<hmac_sha384_base64($data, $key)> =item B<hmac_sha512_base64($data, $key)> =item B<hmac_sha512224_base64($data, $key)> =item B<hmac_sha512256_base64($data, $key)> Returns the HMAC-SHA-1/224/256/384/512 digest of I<$data>/I<$key>, with the result encoded as a Base64 string. Multiple I<$data> arguments are allowed, provided that I<$key> is the last argument in the list. It's important to note that the resulting string does B<not> contain the padding characters typical of Base64 encodings. This omission is deliberate, and is done to maintain compatibility with the family of CPAN Digest modules. See L</"PADDING OF BASE64 DIGESTS"> for details. =back =head1 SEE ALSO L<Digest>, L<Digest::SHA::PurePerl> The Secure Hash Standard (Draft FIPS PUB 180-4) can be found at: L<http://csrc.nist.gov/publications/drafts/fips180-4/Draft-FIPS180-4_Feb2011.pdf> The Keyed-Hash Message Authentication Code (HMAC): L<http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf> =head1 AUTHOR Mark Shelor <mshelor@cpan.org> =head1 ACKNOWLEDGMENTS The author is particularly grateful to Gisle Aas H. Merijn Brand Sean Burke Chris Carey Alexandr Ciornii Chris David Jim Doble Thomas Drugeon Julius Duque Jeffrey Friedl Robert Gilmour Brian Gladman Jarkko Hietaniemi Adam Kennedy Mark Lawrence Andy Lester Alex Muntada Steve Peters Chris Skiscim Martin Thurn Gunnar Wolf Adam Woodbury "who by trained skill rescued life from such great billows and such thick darkness and moored it in so perfect a calm and in so brilliant a light" - Lucretius =head1 COPYRIGHT AND LICENSE Copyright (C) 2003-2018 Mark Shelor This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. L<perlartistic> =cut Digest/MD5.pm 0000644 00000025275 15037233335 0006725 0 ustar 00 package Digest::MD5; use strict; use vars qw($VERSION @ISA @EXPORT_OK); $VERSION = '2.55'; require Exporter; *import = \&Exporter::import; @EXPORT_OK = qw(md5 md5_hex md5_base64); eval { require Digest::base; push(@ISA, 'Digest::base'); }; if ($@) { my $err = $@; *add_bits = sub { die $err }; } eval { require XSLoader; XSLoader::load('Digest::MD5', $VERSION); }; if ($@) { my $olderr = $@; eval { # Try to load the pure perl version require Digest::Perl::MD5; Digest::Perl::MD5->import(qw(md5 md5_hex md5_base64)); unshift(@ISA, "Digest::Perl::MD5"); # make OO interface work }; if ($@) { # restore the original error die $olderr; } } else { *reset = \&new; } 1; __END__ =head1 NAME Digest::MD5 - Perl interface to the MD5 Algorithm =head1 SYNOPSIS # Functional style use Digest::MD5 qw(md5 md5_hex md5_base64); $digest = md5($data); $digest = md5_hex($data); $digest = md5_base64($data); # OO style use Digest::MD5; $ctx = Digest::MD5->new; $ctx->add($data); $ctx->addfile($file_handle); $digest = $ctx->digest; $digest = $ctx->hexdigest; $digest = $ctx->b64digest; =head1 DESCRIPTION The C<Digest::MD5> module allows you to use the RSA Data Security Inc. MD5 Message Digest algorithm from within Perl programs. The algorithm takes as input a message of arbitrary length and produces as output a 128-bit "fingerprint" or "message digest" of the input. Note that the MD5 algorithm is not as strong as it used to be. It has since 2005 been easy to generate different messages that produce the same MD5 digest. It still seems hard to generate messages that produce a given digest, but it is probably wise to move to stronger algorithms for applications that depend on the digest to uniquely identify a message. The C<Digest::MD5> module provide a procedural interface for simple use, as well as an object oriented interface that can handle messages of arbitrary length and which can read files directly. =head1 FUNCTIONS The following functions are provided by the C<Digest::MD5> module. None of these functions are exported by default. =over 4 =item md5($data,...) This function will concatenate all arguments, calculate the MD5 digest of this "message", and return it in binary form. The returned string will be 16 bytes long. The result of md5("a", "b", "c") will be exactly the same as the result of md5("abc"). =item md5_hex($data,...) Same as md5(), but will return the digest in hexadecimal form. The length of the returned string will be 32 and it will only contain characters from this set: '0'..'9' and 'a'..'f'. =item md5_base64($data,...) Same as md5(), but will return the digest as a base64 encoded string. The length of the returned string will be 22 and it will only contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and '/'. Note that the base64 encoded string returned is not padded to be a multiple of 4 bytes long. If you want interoperability with other base64 encoded md5 digests you might want to append the redundant string "==" to the result. =back =head1 METHODS The object oriented interface to C<Digest::MD5> is described in this section. After a C<Digest::MD5> object has been created, you will add data to it and finally ask for the digest in a suitable format. A single object can be used to calculate multiple digests. The following methods are provided: =over 4 =item $md5 = Digest::MD5->new The constructor returns a new C<Digest::MD5> object which encapsulate the state of the MD5 message-digest algorithm. If called as an instance method (i.e. $md5->new) it will just reset the state the object to the state of a newly created object. No new object is created in this case. =item $md5->reset This is just an alias for $md5->new. =item $md5->clone This a copy of the $md5 object. It is useful when you do not want to destroy the digests state, but need an intermediate value of the digest, e.g. when calculating digests iteratively on a continuous data stream. Example: my $md5 = Digest::MD5->new; while (<>) { $md5->add($_); print "Line $.: ", $md5->clone->hexdigest, "\n"; } =item $md5->add($data,...) The $data provided as argument are appended to the message we calculate the digest for. The return value is the $md5 object itself. All these lines will have the same effect on the state of the $md5 object: $md5->add("a"); $md5->add("b"); $md5->add("c"); $md5->add("a")->add("b")->add("c"); $md5->add("a", "b", "c"); $md5->add("abc"); =item $md5->addfile($io_handle) The $io_handle will be read until EOF and its content appended to the message we calculate the digest for. The return value is the $md5 object itself. The addfile() method will croak() if it fails reading data for some reason. If it croaks it is unpredictable what the state of the $md5 object will be in. The addfile() method might have been able to read the file partially before it failed. It is probably wise to discard or reset the $md5 object if this occurs. In most cases you want to make sure that the $io_handle is in C<binmode> before you pass it as argument to the addfile() method. =item $md5->add_bits($data, $nbits) =item $md5->add_bits($bitstring) Since the MD5 algorithm is byte oriented you might only add bits as multiples of 8, so you probably want to just use add() instead. The add_bits() method is provided for compatibility with other digest implementations. See L<Digest> for description of the arguments that add_bits() take. =item $md5->digest Return the binary digest for the message. The returned string will be 16 bytes long. Note that the C<digest> operation is effectively a destructive, read-once operation. Once it has been performed, the C<Digest::MD5> object is automatically C<reset> and can be used to calculate another digest value. Call $md5->clone->digest if you want to calculate the digest without resetting the digest state. =item $md5->hexdigest Same as $md5->digest, but will return the digest in hexadecimal form. The length of the returned string will be 32 and it will only contain characters from this set: '0'..'9' and 'a'..'f'. =item $md5->b64digest Same as $md5->digest, but will return the digest as a base64 encoded string. The length of the returned string will be 22 and it will only contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and '/'. The base64 encoded string returned is not padded to be a multiple of 4 bytes long. If you want interoperability with other base64 encoded md5 digests you might want to append the string "==" to the result. =item @ctx = $md5->context =item $md5->context(@ctx) Saves or restores the internal state. When called with no arguments, returns a 3-element list: number of blocks processed, a 16-byte internal state buffer, then up to 63 bytes of unprocessed data. When passed those same arguments, restores the state. This is only useful for specialised operations. =back =head1 EXAMPLES The simplest way to use this library is to import the md5_hex() function (or one of its cousins): use Digest::MD5 qw(md5_hex); print "Digest is ", md5_hex("foobarbaz"), "\n"; The above example would print out the message: Digest is 6df23dc03f9b54cc38a0fc1483df6e21 The same checksum can also be calculated in OO style: use Digest::MD5; $md5 = Digest::MD5->new; $md5->add('foo', 'bar'); $md5->add('baz'); $digest = $md5->hexdigest; print "Digest is $digest\n"; With OO style, you can break the message arbitrarily. This means that we are no longer limited to have space for the whole message in memory, i.e. we can handle messages of any size. This is useful when calculating checksum for files: use Digest::MD5; my $filename = shift || "/etc/passwd"; open (my $fh, '<', $filename) or die "Can't open '$filename': $!"; binmode($fh); $md5 = Digest::MD5->new; while (<$fh>) { $md5->add($_); } close($fh); print $md5->b64digest, " $filename\n"; Or we can use the addfile method for more efficient reading of the file: use Digest::MD5; my $filename = shift || "/etc/passwd"; open (my $fh, '<', $filename) or die "Can't open '$filename': $!"; binmode ($fh); print Digest::MD5->new->addfile($fh)->hexdigest, " $filename\n"; Since the MD5 algorithm is only defined for strings of bytes, it can not be used on strings that contains chars with ordinal number above 255 (Unicode strings). The MD5 functions and methods will croak if you try to feed them such input data: use Digest::MD5 qw(md5_hex); my $str = "abc\x{300}"; print md5_hex($str), "\n"; # croaks # Wide character in subroutine entry What you can do is calculate the MD5 checksum of the UTF-8 representation of such strings. This is achieved by filtering the string through encode_utf8() function: use Digest::MD5 qw(md5_hex); use Encode qw(encode_utf8); my $str = "abc\x{300}"; print md5_hex(encode_utf8($str)), "\n"; # 8c2d46911f3f5a326455f0ed7a8ed3b3 =head1 SEE ALSO L<Digest>, L<Digest::MD2>, L<Digest::SHA>, L<Digest::HMAC> L<md5sum(1)> RFC 1321 http://en.wikipedia.org/wiki/MD5 The paper "How to Break MD5 and Other Hash Functions" by Xiaoyun Wang and Hongbo Yu. =head1 COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Copyright 1998-2003 Gisle Aas. Copyright 1995-1996 Neil Winton. Copyright 1991-1992 RSA Data Security, Inc. The MD5 algorithm is defined in RFC 1321. This implementation is derived from the reference C code in RFC 1321 which is covered by the following copyright statement: =over 4 =item Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. =back This copyright does not prohibit distribution of any version of Perl containing this extension under the terms of the GNU or Artistic licenses. =head1 AUTHORS The original C<MD5> interface was written by Neil Winton (C<N.Winton@axion.bt.co.uk>). The C<Digest::MD5> module is written by Gisle Aas <gisle@ActiveState.com>. =cut Digest/SHA1.pm 0000644 00000015663 15037233335 0007034 0 ustar 00 package Digest::SHA1; use strict; use vars qw($VERSION @ISA @EXPORT_OK); $VERSION = '2.13'; require Exporter; *import = \&Exporter::import; @EXPORT_OK = qw(sha1 sha1_hex sha1_base64 sha1_transform); require DynaLoader; @ISA=qw(DynaLoader); eval { require Digest::base; push(@ISA, 'Digest::base'); }; if ($@) { my $err = $@; *add_bits = sub { die $err }; } Digest::SHA1->bootstrap($VERSION); 1; __END__ =head1 NAME Digest::SHA1 - Perl interface to the SHA-1 algorithm =head1 SYNOPSIS # Functional style use Digest::SHA1 qw(sha1 sha1_hex sha1_base64); $digest = sha1($data); $digest = sha1_hex($data); $digest = sha1_base64($data); $digest = sha1_transform($data); # OO style use Digest::SHA1; $sha1 = Digest::SHA1->new; $sha1->add($data); $sha1->addfile(*FILE); $sha1_copy = $sha1->clone; $digest = $sha1->digest; $digest = $sha1->hexdigest; $digest = $sha1->b64digest; $digest = $sha1->transform; =head1 DESCRIPTION The C<Digest::SHA1> module allows you to use the NIST SHA-1 message digest algorithm from within Perl programs. The algorithm takes as input a message of arbitrary length and produces as output a 160-bit "fingerprint" or "message digest" of the input. In 2005, security flaws were identified in SHA-1, namely that a possible mathematical weakness might exist, indicating that a stronger hash function would be desirable. The L<Digest::SHA> module implements the stronger algorithms in the SHA family. The C<Digest::SHA1> module provide a procedural interface for simple use, as well as an object oriented interface that can handle messages of arbitrary length and which can read files directly. =head1 FUNCTIONS The following functions can be exported from the C<Digest::SHA1> module. No functions are exported by default. =over 4 =item sha1($data,...) This function will concatenate all arguments, calculate the SHA-1 digest of this "message", and return it in binary form. The returned string will be 20 bytes long. The result of sha1("a", "b", "c") will be exactly the same as the result of sha1("abc"). =item sha1_hex($data,...) Same as sha1(), but will return the digest in hexadecimal form. The length of the returned string will be 40 and it will only contain characters from this set: '0'..'9' and 'a'..'f'. =item sha1_base64($data,...) Same as sha1(), but will return the digest as a base64 encoded string. The length of the returned string will be 27 and it will only contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and '/'. Note that the base64 encoded string returned is not padded to be a multiple of 4 bytes long. If you want interoperability with other base64 encoded sha1 digests you might want to append the redundant string "=" to the result. =item sha1_transform($data) Implements the basic SHA1 transform on a 64 byte block. The $data argument and the returned $digest are in binary form. This algorithm is used in NIST FIPS 186-2 =back =head1 METHODS The object oriented interface to C<Digest::SHA1> is described in this section. After a C<Digest::SHA1> object has been created, you will add data to it and finally ask for the digest in a suitable format. A single object can be used to calculate multiple digests. The following methods are provided: =over 4 =item $sha1 = Digest::SHA1->new The constructor returns a new C<Digest::SHA1> object which encapsulate the state of the SHA-1 message-digest algorithm. If called as an instance method (i.e. $sha1->new) it will just reset the state the object to the state of a newly created object. No new object is created in this case. =item $sha1->reset This is just an alias for $sha1->new. =item $sha1->clone This a copy of the $sha1 object. It is useful when you do not want to destroy the digests state, but need an intermediate value of the digest, e.g. when calculating digests iteratively on a continuous data stream. Example: my $sha1 = Digest::SHA1->new; while (<>) { $sha1->add($_); print "Line $.: ", $sha1->clone->hexdigest, "\n"; } =item $sha1->add($data,...) The $data provided as argument are appended to the message we calculate the digest for. The return value is the $sha1 object itself. All these lines will have the same effect on the state of the $sha1 object: $sha1->add("a"); $sha1->add("b"); $sha1->add("c"); $sha1->add("a")->add("b")->add("c"); $sha1->add("a", "b", "c"); $sha1->add("abc"); =item $sha1->addfile($io_handle) The $io_handle will be read until EOF and its content appended to the message we calculate the digest for. The return value is the $sha1 object itself. The addfile() method will croak() if it fails reading data for some reason. If it croaks it is unpredictable what the state of the $sha1 object will be in. The addfile() method might have been able to read the file partially before it failed. It is probably wise to discard or reset the $sha1 object if this occurs. In most cases you want to make sure that the $io_handle is in C<binmode> before you pass it as argument to the addfile() method. =item $sha1->add_bits($data, $nbits) =item $sha1->add_bits($bitstring) This implementation of SHA-1 only supports byte oriented input so you might only add bits as multiples of 8. If you need bit level support please consider using the C<Digest::SHA> module instead. The add_bits() method is provided here for compatibility with other digest implementations. See L<Digest> for description of the arguments that add_bits() take. =item $sha1->digest Return the binary digest for the message. The returned string will be 20 bytes long. Note that the C<digest> operation is effectively a destructive, read-once operation. Once it has been performed, the C<Digest::SHA1> object is automatically C<reset> and can be used to calculate another digest value. Call $sha1->clone->digest if you want to calculate the digest without reseting the digest state. =item $sha1->hexdigest Same as $sha1->digest, but will return the digest in hexadecimal form. The length of the returned string will be 40 and it will only contain characters from this set: '0'..'9' and 'a'..'f'. =item $sha1->b64digest Same as $sha1->digest, but will return the digest as a base64 encoded string. The length of the returned string will be 27 and it will only contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and '/'. The base64 encoded string returned is not padded to be a multiple of 4 bytes long. If you want interoperability with other base64 encoded SHA-1 digests you might want to append the string "=" to the result. =back =head1 SEE ALSO L<Digest>, L<Digest::HMAC_SHA1>, L<Digest::SHA>, L<Digest::MD5> http://www.itl.nist.gov/fipspubs/fip180-1.htm http://en.wikipedia.org/wiki/SHA_hash_functions =head1 COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Copyright 1999-2004 Gisle Aas. Copyright 1997 Uwe Hollerbach. =head1 AUTHORS Peter C. Gutmann, Uwe Hollerbach <uh@alumni.caltech.edu>, Gisle Aas <gisle@aas.no> =cut Time/HiRes.pm 0000644 00000060070 15037233335 0007021 0 ustar 00 package Time::HiRes; { use 5.006; } use strict; require Exporter; use XSLoader (); our @ISA = qw(Exporter); our @EXPORT = qw( ); # TODO: this list is a superset of the @names in # Makefile.PL:doConstants(), automate this somehow. our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval getitimer setitimer nanosleep clock_gettime clock_getres clock clock_nanosleep CLOCKS_PER_SEC CLOCK_BOOTTIME CLOCK_HIGHRES CLOCK_MONOTONIC CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC_FAST CLOCK_MONOTONIC_PRECISE CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC_RAW_APPROX CLOCK_PROCESS_CPUTIME_ID CLOCK_PROF CLOCK_REALTIME CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST CLOCK_REALTIME_PRECISE CLOCK_REALTIME_RAW CLOCK_SECOND CLOCK_SOFTTIME CLOCK_THREAD_CPUTIME_ID CLOCK_TIMEOFDAY CLOCK_UPTIME CLOCK_UPTIME_COARSE CLOCK_UPTIME_FAST CLOCK_UPTIME_PRECISE CLOCK_UPTIME_RAW CLOCK_UPTIME_RAW_APPROX CLOCK_VIRTUAL ITIMER_PROF ITIMER_REAL ITIMER_REALPROF ITIMER_VIRTUAL TIMER_ABSTIME d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer d_nanosleep d_clock_gettime d_clock_getres d_clock d_clock_nanosleep d_hires_stat d_futimens d_utimensat d_hires_utime stat lstat utime ); our $VERSION = '1.9758'; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; our $AUTOLOAD; sub AUTOLOAD { my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; # print "AUTOLOAD: constname = $constname ($AUTOLOAD)\n"; die "&Time::HiRes::constant not defined" if $constname eq 'constant'; my ($error, $val) = constant($constname); # print "AUTOLOAD: error = $error, val = $val\n"; if ($error) { my (undef,$file,$line) = caller; die "$error at $file line $line.\n"; } { no strict 'refs'; *$AUTOLOAD = sub { $val }; } goto &$AUTOLOAD; } sub import { my $this = shift; for my $i (@_) { if (($i eq 'clock_getres' && !&d_clock_getres) || ($i eq 'clock_gettime' && !&d_clock_gettime) || ($i eq 'clock_nanosleep' && !&d_clock_nanosleep) || ($i eq 'clock' && !&d_clock) || ($i eq 'nanosleep' && !&d_nanosleep) || ($i eq 'usleep' && !&d_usleep) || ($i eq 'utime' && !&d_hires_utime) || ($i eq 'ualarm' && !&d_ualarm)) { require Carp; Carp::croak("Time::HiRes::$i(): unimplemented in this platform"); } } Time::HiRes->export_to_level(1, $this, @_); } XSLoader::load( 'Time::HiRes', $XS_VERSION ); # Preloaded methods go here. # Autoload methods go after =cut, and are processed by the autosplit program. 1; __END__ =head1 NAME Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers =head1 SYNOPSIS use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep clock_gettime clock_getres clock_nanosleep clock stat lstat utime); usleep ($microseconds); nanosleep ($nanoseconds); ualarm ($microseconds); ualarm ($microseconds, $interval_microseconds); $t0 = [gettimeofday]; ($seconds, $microseconds) = gettimeofday; $elapsed = tv_interval ( $t0, [$seconds, $microseconds]); $elapsed = tv_interval ( $t0, [gettimeofday]); $elapsed = tv_interval ( $t0 ); use Time::HiRes qw ( time alarm sleep ); $now_fractions = time; sleep ($floating_seconds); alarm ($floating_seconds); alarm ($floating_seconds, $floating_interval); use Time::HiRes qw( setitimer getitimer ); setitimer ($which, $floating_seconds, $floating_interval ); getitimer ($which); use Time::HiRes qw( clock_gettime clock_getres clock_nanosleep ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ITIMER_REALPROF ); $realtime = clock_gettime(CLOCK_REALTIME); $resolution = clock_getres(CLOCK_REALTIME); clock_nanosleep(CLOCK_REALTIME, 1.5e9); clock_nanosleep(CLOCK_REALTIME, time()*1e9 + 10e9, TIMER_ABSTIME); my $ticktock = clock(); use Time::HiRes qw( stat lstat ); my @stat = stat("file"); my @stat = stat(FH); my @stat = lstat("file"); use Time::HiRes qw( utime ); utime $floating_seconds, $floating_seconds, file...; =head1 DESCRIPTION The C<Time::HiRes> module implements a Perl interface to the C<usleep>, C<nanosleep>, C<ualarm>, C<gettimeofday>, and C<setitimer>/C<getitimer> system calls, in other words, high resolution time and timers. See the L</EXAMPLES> section below and the test scripts for usage; see your system documentation for the description of the underlying C<nanosleep> or C<usleep>, C<ualarm>, C<gettimeofday>, and C<setitimer>/C<getitimer> calls. If your system lacks C<gettimeofday()> or an emulation of it you don't get C<gettimeofday()> or the one-argument form of C<tv_interval()>. If your system lacks all of C<nanosleep()>, C<usleep()>, C<select()>, and C<poll>, you don't get C<Time::HiRes::usleep()>, C<Time::HiRes::nanosleep()>, or C<Time::HiRes::sleep()>. If your system lacks both C<ualarm()> and C<setitimer()> you don't get C<Time::HiRes::ualarm()> or C<Time::HiRes::alarm()>. If you try to import an unimplemented function in the C<use> statement it will fail at compile time. If your subsecond sleeping is implemented with C<nanosleep()> instead of C<usleep()>, you can mix subsecond sleeping with signals since C<nanosleep()> does not use signals. This, however, is not portable, and you should first check for the truth value of C<&Time::HiRes::d_nanosleep> to see whether you have nanosleep, and then carefully read your C<nanosleep()> C API documentation for any peculiarities. If you are using C<nanosleep> for something else than mixing sleeping with signals, give some thought to whether Perl is the tool you should be using for work requiring nanosecond accuracies. Remember that unless you are working on a I<hard realtime> system, any clocks and timers will be imprecise, especially so if you are working in a pre-emptive multiuser system. Understand the difference between I<wallclock time> and process time (in UNIX-like systems the sum of I<user> and I<system> times). Any attempt to sleep for X seconds will most probably end up sleeping B<more> than that, but don't be surprised if you end up sleeping slightly B<less>. The following functions can be imported from this module. No functions are exported by default. =over 4 =item gettimeofday () In array context returns a two-element array with the seconds and microseconds since the epoch. In scalar context returns floating seconds like C<Time::HiRes::time()> (see below). =item usleep ( $useconds ) Sleeps for the number of microseconds (millionths of a second) specified. Returns the number of microseconds actually slept. Can sleep for more than one second, unlike the C<usleep> system call. Can also sleep for zero seconds, which often works like a I<thread yield>. See also C<Time::HiRes::usleep()>, C<Time::HiRes::sleep()>, and C<Time::HiRes::clock_nanosleep()>. Do not expect usleep() to be exact down to one microsecond. =item nanosleep ( $nanoseconds ) Sleeps for the number of nanoseconds (1e9ths of a second) specified. Returns the number of nanoseconds actually slept (accurate only to microseconds, the nearest thousand of them). Can sleep for more than one second. Can also sleep for zero seconds, which often works like a I<thread yield>. See also C<Time::HiRes::sleep()>, C<Time::HiRes::usleep()>, and C<Time::HiRes::clock_nanosleep()>. Do not expect nanosleep() to be exact down to one nanosecond. Getting even accuracy of one thousand nanoseconds is good. =item ualarm ( $useconds [, $interval_useconds ] ) Issues a C<ualarm> call; the C<$interval_useconds> is optional and will be zero if unspecified, resulting in C<alarm>-like behaviour. Returns the remaining time in the alarm in microseconds, or C<undef> if an error occurred. ualarm(0) will cancel an outstanding ualarm(). Note that the interaction between alarms and sleeps is unspecified. =item tv_interval tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] ) Returns the floating seconds between the two times, which should have been returned by C<gettimeofday()>. If the second argument is omitted, then the current time is used. =item time () Returns a floating seconds since the epoch. This function can be imported, resulting in a nice drop-in replacement for the C<time> provided with core Perl; see the L</EXAMPLES> below. B<NOTE 1>: This higher resolution timer can return values either less or more than the core C<time()>, depending on whether your platform rounds the higher resolution timer values up, down, or to the nearest second to get the core C<time()>, but naturally the difference should be never more than half a second. See also L</clock_getres>, if available in your system. B<NOTE 2>: Since Sunday, September 9th, 2001 at 01:46:40 AM GMT, when the C<time()> seconds since epoch rolled over to 1_000_000_000, the default floating point format of Perl and the seconds since epoch have conspired to produce an apparent bug: if you print the value of C<Time::HiRes::time()> you seem to be getting only five decimals, not six as promised (microseconds). Not to worry, the microseconds are there (assuming your platform supports such granularity in the first place). What is going on is that the default floating point format of Perl only outputs 15 digits. In this case that means ten digits before the decimal separator and five after. To see the microseconds you can use either C<printf>/C<sprintf> with C<"%.6f">, or the C<gettimeofday()> function in list context, which will give you the seconds and microseconds as two separate values. =item sleep ( $floating_seconds ) Sleeps for the specified amount of seconds. Returns the number of seconds actually slept (a floating point value). This function can be imported, resulting in a nice drop-in replacement for the C<sleep> provided with perl, see the L</EXAMPLES> below. Note that the interaction between alarms and sleeps is unspecified. =item alarm ( $floating_seconds [, $interval_floating_seconds ] ) The C<SIGALRM> signal is sent after the specified number of seconds. Implemented using C<setitimer()> if available, C<ualarm()> if not. The C<$interval_floating_seconds> argument is optional and will be zero if unspecified, resulting in C<alarm()>-like behaviour. This function can be imported, resulting in a nice drop-in replacement for the C<alarm> provided with perl, see the L</EXAMPLES> below. Returns the remaining time in the alarm in seconds, or C<undef> if an error occurred. B<NOTE 1>: With some combinations of operating systems and Perl releases C<SIGALRM> restarts C<select()>, instead of interrupting it. This means that an C<alarm()> followed by a C<select()> may together take the sum of the times specified for the C<alarm()> and the C<select()>, not just the time of the C<alarm()>. Note that the interaction between alarms and sleeps is unspecified. =item setitimer ( $which, $floating_seconds [, $interval_floating_seconds ] ) Start up an interval timer: after a certain time, a signal ($which) arrives, and more signals may keep arriving at certain intervals. To disable an "itimer", use C<$floating_seconds> of zero. If the C<$interval_floating_seconds> is set to zero (or unspecified), the timer is disabled B<after> the next delivered signal. Use of interval timers may interfere with C<alarm()>, C<sleep()>, and C<usleep()>. In standard-speak the "interaction is unspecified", which means that I<anything> may happen: it may work, it may not. In scalar context, the remaining time in the timer is returned. In list context, both the remaining time and the interval are returned. There are usually three or four interval timers (signals) available: the C<$which> can be C<ITIMER_REAL>, C<ITIMER_VIRTUAL>, C<ITIMER_PROF>, or C<ITIMER_REALPROF>. Note that which ones are available depends: true UNIX platforms usually have the first three, but only Solaris seems to have C<ITIMER_REALPROF> (which is used to profile multithreaded programs). Win32 unfortunately does not have interval timers. C<ITIMER_REAL> results in C<alarm()>-like behaviour. Time is counted in I<real time>; that is, wallclock time. C<SIGALRM> is delivered when the timer expires. C<ITIMER_VIRTUAL> counts time in (process) I<virtual time>; that is, only when the process is running. In multiprocessor/user/CPU systems this may be more or less than real or wallclock time. (This time is also known as the I<user time>.) C<SIGVTALRM> is delivered when the timer expires. C<ITIMER_PROF> counts time when either the process virtual time or when the operating system is running on behalf of the process (such as I/O). (This time is also known as the I<system time>.) (The sum of user time and system time is known as the I<CPU time>.) C<SIGPROF> is delivered when the timer expires. C<SIGPROF> can interrupt system calls. The semantics of interval timers for multithreaded programs are system-specific, and some systems may support additional interval timers. For example, it is unspecified which thread gets the signals. See your C<setitimer()> documentation. =item getitimer ( $which ) Return the remaining time in the interval timer specified by C<$which>. In scalar context, the remaining time is returned. In list context, both the remaining time and the interval are returned. The interval is always what you put in using C<setitimer()>. =item clock_gettime ( $which ) Return as seconds the current value of the POSIX high resolution timer specified by C<$which>. All implementations that support POSIX high resolution timers are supposed to support at least the C<$which> value of C<CLOCK_REALTIME>, which is supposed to return results close to the results of C<gettimeofday>, or the number of seconds since 00:00:00:00 January 1, 1970 Greenwich Mean Time (GMT). Do not assume that CLOCK_REALTIME is zero, it might be one, or something else. Another potentially useful (but not available everywhere) value is C<CLOCK_MONOTONIC>, which guarantees a monotonically increasing time value (unlike time() or gettimeofday(), which can be adjusted). See your system documentation for other possibly supported values. =item clock_getres ( $which ) Return as seconds the resolution of the POSIX high resolution timer specified by C<$which>. All implementations that support POSIX high resolution timers are supposed to support at least the C<$which> value of C<CLOCK_REALTIME>, see L</clock_gettime>. B<NOTE>: the resolution returned may be highly optimistic. Even if the resolution is high (a small number), all it means is that you'll be able to specify the arguments to clock_gettime() and clock_nanosleep() with that resolution. The system might not actually be able to measure events at that resolution, and the various overheads and the overall system load are certain to affect any timings. =item clock_nanosleep ( $which, $nanoseconds, $flags = 0) Sleeps for the number of nanoseconds (1e9ths of a second) specified. Returns the number of nanoseconds actually slept. The $which is the "clock id", as with clock_gettime() and clock_getres(). The flags default to zero but C<TIMER_ABSTIME> can specified (must be exported explicitly) which means that C<$nanoseconds> is not a time interval (as is the default) but instead an absolute time. Can sleep for more than one second. Can also sleep for zero seconds, which often works like a I<thread yield>. See also C<Time::HiRes::sleep()>, C<Time::HiRes::usleep()>, and C<Time::HiRes::nanosleep()>. Do not expect clock_nanosleep() to be exact down to one nanosecond. Getting even accuracy of one thousand nanoseconds is good. =item clock() Return as seconds the I<process time> (user + system time) spent by the process since the first call to clock() (the definition is B<not> "since the start of the process", though if you are lucky these times may be quite close to each other, depending on the system). What this means is that you probably need to store the result of your first call to clock(), and subtract that value from the following results of clock(). The time returned also includes the process times of the terminated child processes for which wait() has been executed. This value is somewhat like the second value returned by the times() of core Perl, but not necessarily identical. Note that due to backward compatibility limitations the returned value may wrap around at about 2147 seconds or at about 36 minutes. =item stat =item stat FH =item stat EXPR =item lstat =item lstat FH =item lstat EXPR As L<perlfunc/stat> or L<perlfunc/lstat> but with the access/modify/change file timestamps in subsecond resolution, if the operating system and the filesystem both support such timestamps. To override the standard stat(): use Time::HiRes qw(stat); Test for the value of &Time::HiRes::d_hires_stat to find out whether the operating system supports subsecond file timestamps: a value larger than zero means yes. There are unfortunately no easy ways to find out whether the filesystem supports such timestamps. UNIX filesystems often do; NTFS does; FAT doesn't (FAT timestamp granularity is B<two> seconds). A zero return value of &Time::HiRes::d_hires_stat means that Time::HiRes::stat is a no-op passthrough for CORE::stat() (and likewise for lstat), and therefore the timestamps will stay integers. The same thing will happen if the filesystem does not do subsecond timestamps, even if the &Time::HiRes::d_hires_stat is non-zero. In any case do not expect nanosecond resolution, or even a microsecond resolution. Also note that the modify/access timestamps might have different resolutions, and that they need not be synchronized, e.g. if the operations are write stat # t1 read stat # t2 the access time stamp from t2 need not be greater-than the modify time stamp from t1: it may be equal or I<less>. =item utime LIST As L<perlfunc/utime> but with the ability to set the access/modify file timestamps in subsecond resolution, if the operating system and the filesystem, and the mount options of the filesystem, all support such timestamps. To override the standard utime(): use Time::HiRes qw(utime); Test for the value of &Time::HiRes::d_hires_utime to find out whether the operating system supports setting subsecond file timestamps. As with CORE::utime(), passing undef as both the atime and mtime will call the syscall with a NULL argument. The actual achievable subsecond resolution depends on the combination of the operating system and the filesystem. Modifying the timestamps may not be possible at all: for example, the C<noatime> filesystem mount option may prohibit you from changing the access time timestamp. Returns the number of files successfully changed. =back =head1 EXAMPLES use Time::HiRes qw(usleep ualarm gettimeofday tv_interval); $microseconds = 750_000; usleep($microseconds); # signal alarm in 2.5s & every .1s thereafter ualarm(2_500_000, 100_000); # cancel that ualarm ualarm(0); # get seconds and microseconds since the epoch ($s, $usec) = gettimeofday(); # measure elapsed time # (could also do by subtracting 2 gettimeofday return values) $t0 = [gettimeofday]; # do bunch of stuff here $t1 = [gettimeofday]; # do more stuff here $t0_t1 = tv_interval $t0, $t1; $elapsed = tv_interval ($t0, [gettimeofday]); $elapsed = tv_interval ($t0); # equivalent code # # replacements for time, alarm and sleep that know about # floating seconds # use Time::HiRes; $now_fractions = Time::HiRes::time; Time::HiRes::sleep (2.5); Time::HiRes::alarm (10.6666666); use Time::HiRes qw ( time alarm sleep ); $now_fractions = time; sleep (2.5); alarm (10.6666666); # Arm an interval timer to go off first at 10 seconds and # after that every 2.5 seconds, in process virtual time use Time::HiRes qw ( setitimer ITIMER_VIRTUAL time ); $SIG{VTALRM} = sub { print time, "\n" }; setitimer(ITIMER_VIRTUAL, 10, 2.5); use Time::HiRes qw( clock_gettime clock_getres CLOCK_REALTIME ); # Read the POSIX high resolution timer. my $high = clock_gettime(CLOCK_REALTIME); # But how accurate we can be, really? my $reso = clock_getres(CLOCK_REALTIME); use Time::HiRes qw( clock_nanosleep TIMER_ABSTIME ); clock_nanosleep(CLOCK_REALTIME, 1e6); clock_nanosleep(CLOCK_REALTIME, 2e9, TIMER_ABSTIME); use Time::HiRes qw( clock ); my $clock0 = clock(); ... # Do something. my $clock1 = clock(); my $clockd = $clock1 - $clock0; use Time::HiRes qw( stat ); my ($atime, $mtime, $ctime) = (stat("istics"))[8, 9, 10]; =head1 C API In addition to the perl API described above, a C API is available for extension writers. The following C functions are available in the modglobal hash: name C prototype --------------- ---------------------- Time::NVtime NV (*)() Time::U2time void (*)(pTHX_ UV ret[2]) Both functions return equivalent information (like C<gettimeofday>) but with different representations. The names C<NVtime> and C<U2time> were selected mainly because they are operating system independent. (C<gettimeofday> is Unix-centric, though some platforms like Win32 and VMS have emulations for it.) Here is an example of using C<NVtime> from C: NV (*myNVtime)(); /* Returns -1 on failure. */ SV **svp = hv_fetchs(PL_modglobal, "Time::NVtime", 0); if (!svp) croak("Time::HiRes is required"); if (!SvIOK(*svp)) croak("Time::NVtime isn't a function pointer"); myNVtime = INT2PTR(NV(*)(), SvIV(*svp)); printf("The current time is: %" NVff "\n", (*myNVtime)()); =head1 DIAGNOSTICS =head2 useconds or interval more than ... In ualarm() you tried to use number of microseconds or interval (also in microseconds) more than 1_000_000 and setitimer() is not available in your system to emulate that case. =head2 negative time not invented yet You tried to use a negative time argument. =head2 internal error: useconds < 0 (unsigned ... signed ...) Something went horribly wrong-- the number of microseconds that cannot become negative just became negative. Maybe your compiler is broken? =head2 useconds or uinterval equal to or more than 1000000 In some platforms it is not possible to get an alarm with subsecond resolution and later than one second. =head2 unimplemented in this platform Some calls simply aren't available, real or emulated, on every platform. =head1 CAVEATS Notice that the core C<time()> maybe rounding rather than truncating. What this means is that the core C<time()> may be reporting the time as one second later than C<gettimeofday()> and C<Time::HiRes::time()>. Adjusting the system clock (either manually or by services like ntp) may cause problems, especially for long running programs that assume a monotonously increasing time (note that all platforms do not adjust time as gracefully as UNIX ntp does). For example in Win32 (and derived platforms like Cygwin and MinGW) the Time::HiRes::time() may temporarily drift off from the system clock (and the original time()) by up to 0.5 seconds. Time::HiRes will notice this eventually and recalibrate. Note that since Time::HiRes 1.77 the clock_gettime(CLOCK_MONOTONIC) might help in this (in case your system supports CLOCK_MONOTONIC). Some systems have APIs but not implementations: for example QNX and Haiku have the interval timer APIs but not the functionality. In pre-Sierra macOS (pre-10.12, OS X) clock_getres(), clock_gettime() and clock_nanosleep() are emulated using the Mach timers; as a side effect of being emulated the CLOCK_REALTIME and CLOCK_MONOTONIC are the same timer. gnukfreebsd seems to have non-functional futimens() and utimensat() (at least as of 10.1): therefore the hires utime() does not work. =head1 SEE ALSO Perl modules L<BSD::Resource>, L<Time::TAI64>. Your system documentation for C<clock>, C<clock_gettime>, C<clock_getres>, C<clock_nanosleep>, C<clock_settime>, C<getitimer>, C<gettimeofday>, C<setitimer>, C<sleep>, C<stat>, C<ualarm>. =head1 AUTHORS D. Wegscheid <wegscd@whirlpool.com> R. Schertler <roderick@argon.org> J. Hietaniemi <jhi@iki.fi> G. Aas <gisle@aas.no> =head1 COPYRIGHT AND LICENSE Copyright (c) 1996-2002 Douglas E. Wegscheid. All rights reserved. Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Jarkko Hietaniemi. All rights reserved. Copyright (C) 2011, 2012, 2013 Andrew Main (Zefram) <zefram@fysh.org> This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut DBD/Gofer/Policy/Base.pm 0000644 00000011741 15037233335 0010656 0 ustar 00 package DBD::Gofer::Policy::Base; # $Id: Base.pm 10087 2007-10-16 12:42:37Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use Carp; our $VERSION = "0.010088"; our $AUTOLOAD; my %policy_defaults = ( # force connect method (unless overridden by go_connect_method=>'...' attribute) # if false: call same method on client as on server connect_method => 'connect', # force prepare method (unless overridden by go_prepare_method=>'...' attribute) # if false: call same method on client as on server prepare_method => 'prepare', skip_connect_check => 0, skip_default_methods => 0, skip_prepare_check => 0, skip_ping => 0, dbh_attribute_update => 'every', dbh_attribute_list => ['*'], locally_quote => 0, locally_quote_identifier => 0, cache_parse_trace_flags => 1, cache_parse_trace_flag => 1, cache_data_sources => 1, cache_type_info_all => 1, cache_tables => 0, cache_table_info => 0, cache_column_info => 0, cache_primary_key_info => 0, cache_foreign_key_info => 0, cache_statistics_info => 0, cache_get_info => 0, cache_func => 0, ); my $base_policy_file = $INC{"DBD/Gofer/Policy/Base.pm"}; __PACKAGE__->create_policy_subs(\%policy_defaults); sub create_policy_subs { my ($class, $policy_defaults) = @_; while ( my ($policy_name, $policy_default) = each %$policy_defaults) { my $policy_attr_name = "go_$policy_name"; my $sub = sub { # $policy->foo($attr, ...) #carp "$policy_name($_[1],...)"; # return the policy default value unless an attribute overrides it return (ref $_[1] && exists $_[1]->{$policy_attr_name}) ? $_[1]->{$policy_attr_name} : $policy_default; }; no strict 'refs'; *{$class . '::' . $policy_name} = $sub; } } sub AUTOLOAD { carp "Unknown policy name $AUTOLOAD used"; # only warn once no strict 'refs'; *$AUTOLOAD = sub { undef }; return undef; } sub new { my ($class, $args) = @_; my $policy = {}; bless $policy, $class; } sub DESTROY { }; 1; =head1 NAME DBD::Gofer::Policy::Base - Base class for DBD::Gofer policies =head1 SYNOPSIS $dbh = DBI->connect("dbi:Gofer:transport=...;policy=...", ...) =head1 DESCRIPTION DBD::Gofer can be configured via a 'policy' mechanism that allows you to fine-tune the number of round-trips to the Gofer server. The policies are grouped into classes (which may be subclassed) and referenced by the name of the class. The L<DBD::Gofer::Policy::Base> class is the base class for all the policy classes and describes all the individual policy items. The Base policy is not used directly. You should use a policy class derived from it. =head1 POLICY CLASSES Three policy classes are supplied with DBD::Gofer: L<DBD::Gofer::Policy::pedantic> is most 'transparent' but slowest because it makes more round-trips to the Gofer server. L<DBD::Gofer::Policy::classic> is a reasonable compromise - it's the default policy. L<DBD::Gofer::Policy::rush> is fastest, but may require code changes in your applications. Generally the default C<classic> policy is fine. When first testing an existing application with Gofer it is a good idea to start with the C<pedantic> policy first and then switch to C<classic> or a custom policy, for final testing. =head1 POLICY ITEMS These are temporary docs: See the source code for list of policies and their defaults. In a future version the policies and their defaults will be defined in the pod and parsed out at load-time. See the source code to this module for more details. =head1 POLICY CUSTOMIZATION XXX This area of DBD::Gofer is subject to change. There are three ways to customize policies: Policy classes are designed to influence the overall behaviour of DBD::Gofer with existing, unaltered programs, so they work in a reasonably optimal way without requiring code changes. You can implement new policy classes as subclasses of existing policies. In many cases individual policy items can be overridden on a case-by-case basis within your application code. You do this by passing a corresponding C<<go_<policy_name>>> attribute into DBI methods by your application code. This let's you fine-tune the behaviour for special cases. The policy items are implemented as methods. In many cases the methods are passed parameters relating to the DBD::Gofer code being executed. This means the policy can implement dynamic behaviour that varies depending on the particular circumstances, such as the particular statement being executed. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBD/Gofer/Policy/rush.pm 0000644 00000005045 15037233335 0010765 0 ustar 00 package DBD::Gofer::Policy::rush; # $Id: rush.pm 10087 2007-10-16 12:42:37Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; our $VERSION = "0.010088"; use base qw(DBD::Gofer::Policy::Base); __PACKAGE__->create_policy_subs({ # always use connect_cached on server connect_method => 'connect_cached', # use same methods on server as is called on client # (because code not using placeholders would bloat the sth cache) prepare_method => '', # Skipping the connect check is fast, but it also skips # fetching the remote dbh attributes! # Make sure that your application doesn't need access to dbh attributes. skip_connect_check => 1, # most code doesn't rely on sth attributes being set after prepare skip_prepare_check => 1, # we're happy to use local method if that's the same as the remote skip_default_methods => 1, # ping is almost meaningless for DBD::Gofer and most transports anyway skip_ping => 1, # don't update dbh attributes at all # XXX actually we currently need dbh_attribute_update for skip_default_methods to work # and skip_default_methods is more valuable to us than the cost of dbh_attribute_update dbh_attribute_update => 'none', # actually means 'first' currently #dbh_attribute_list => undef, # we'd like to set locally_* but can't because drivers differ # in a rush assume metadata doesn't change cache_tables => 1, cache_table_info => 1, cache_column_info => 1, cache_primary_key_info => 1, cache_foreign_key_info => 1, cache_statistics_info => 1, cache_get_info => 1, }); 1; =head1 NAME DBD::Gofer::Policy::rush - The 'rush' policy for DBD::Gofer =head1 SYNOPSIS $dbh = DBI->connect("dbi:Gofer:transport=...;policy=rush", ...) =head1 DESCRIPTION The C<rush> policy tries to make as few round-trips as possible. It's the opposite end of the policy spectrum to the C<pedantic> policy. Temporary docs: See the source code for list of policies and their defaults. In a future version the policies and their defaults will be defined in the pod and parsed out at load-time. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBD/Gofer/Policy/classic.pm 0000644 00000004072 15037233335 0011424 0 ustar 00 package DBD::Gofer::Policy::classic; # $Id: classic.pm 10087 2007-10-16 12:42:37Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; our $VERSION = "0.010088"; use base qw(DBD::Gofer::Policy::Base); __PACKAGE__->create_policy_subs({ # always use connect_cached on server connect_method => 'connect_cached', # use same methods on server as is called on client prepare_method => '', # don't skip the connect check since that also sets dbh attributes # although this makes connect more expensive, that's partly offset # by skip_ping=>1 below, which makes connect_cached very fast. skip_connect_check => 0, # most code doesn't rely on sth attributes being set after prepare skip_prepare_check => 1, # we're happy to use local method if that's the same as the remote skip_default_methods => 1, # ping is not important for DBD::Gofer and most transports skip_ping => 1, # only update dbh attributes on first contact with server dbh_attribute_update => 'first', # we'd like to set locally_* but can't because drivers differ # get_info results usually don't change cache_get_info => 1, }); 1; =head1 NAME DBD::Gofer::Policy::classic - The 'classic' policy for DBD::Gofer =head1 SYNOPSIS $dbh = DBI->connect("dbi:Gofer:transport=...;policy=classic", ...) The C<classic> policy is the default DBD::Gofer policy, so need not be included in the DSN. =head1 DESCRIPTION Temporary docs: See the source code for list of policies and their defaults. In a future version the policies and their defaults will be defined in the pod and parsed out at load-time. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBD/Gofer/Policy/pedantic.pm 0000644 00000002633 15037233335 0011573 0 ustar 00 package DBD::Gofer::Policy::pedantic; # $Id: pedantic.pm 10087 2007-10-16 12:42:37Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; our $VERSION = "0.010088"; use base qw(DBD::Gofer::Policy::Base); # the 'pedantic' policy is the same as the Base policy 1; =head1 NAME DBD::Gofer::Policy::pedantic - The 'pedantic' policy for DBD::Gofer =head1 SYNOPSIS $dbh = DBI->connect("dbi:Gofer:transport=...;policy=pedantic", ...) =head1 DESCRIPTION The C<pedantic> policy tries to be as transparent as possible. To do this it makes round-trips to the server for almost every DBI method call. This is the best policy to use when first testing existing code with Gofer. Once it's working well you should consider moving to the C<classic> policy or defining your own policy class. Temporary docs: See the source code for list of policies and their defaults. In a future version the policies and their defaults will be defined in the pod and parsed out at load-time. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =cut DBD/Gofer/Transport/Base.pm 0000644 00000030723 15037233335 0011414 0 ustar 00 package DBD::Gofer::Transport::Base; # $Id: Base.pm 14120 2010-06-07 19:52:19Z H.Merijn $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use base qw(DBI::Gofer::Transport::Base); our $VERSION = "0.014121"; __PACKAGE__->mk_accessors(qw( trace go_dsn go_url go_policy go_timeout go_retry_hook go_retry_limit go_cache cache_hit cache_miss cache_store )); __PACKAGE__->mk_accessors_using(make_accessor_autoviv_hashref => qw( meta )); sub new { my ($class, $args) = @_; $args->{$_} = 0 for (qw(cache_hit cache_miss cache_store)); $args->{keep_meta_frozen} ||= 1 if $args->{go_cache}; #warn "args @{[ %$args ]}\n"; return $class->SUPER::new($args); } sub _init_trace { $ENV{DBD_GOFER_TRACE} || 0 } sub new_response { my $self = shift; return DBI::Gofer::Response->new(@_); } sub transmit_request { my ($self, $request) = @_; my $trace = $self->trace; my $response; my ($go_cache, $request_cache_key); if ($go_cache = $self->{go_cache}) { $request_cache_key = $request->{meta}{request_cache_key} = $self->get_cache_key_for_request($request); if ($request_cache_key) { my $frozen_response = eval { $go_cache->get($request_cache_key) }; if ($frozen_response) { $self->_dump("cached response found for ".ref($request), $request) if $trace; $response = $self->thaw_response($frozen_response); $self->trace_msg("transmit_request is returning a response from cache $go_cache\n") if $trace; ++$self->{cache_hit}; return $response; } warn $@ if $@; ++$self->{cache_miss}; $self->trace_msg("transmit_request cache miss\n") if $trace; } } my $to = $self->go_timeout; my $transmit_sub = sub { $self->trace_msg("transmit_request\n") if $trace; local $SIG{ALRM} = sub { die "TIMEOUT\n" } if $to; my $response = eval { local $SIG{PIPE} = sub { my $extra = ($! eq "Broken pipe") ? "" : " ($!)"; die "Unable to send request: Broken pipe$extra\n"; }; alarm($to) if $to; $self->transmit_request_by_transport($request); }; alarm(0) if $to; if ($@) { return $self->transport_timedout("transmit_request", $to) if $@ eq "TIMEOUT\n"; return $self->new_response({ err => 1, errstr => $@ }); } return $response; }; $response = $self->_transmit_request_with_retries($request, $transmit_sub); if ($response) { my $frozen_response = delete $response->{meta}{frozen}; $self->_store_response_in_cache($frozen_response, $request_cache_key) if $request_cache_key; } $self->trace_msg("transmit_request is returning a response itself\n") if $trace && $response; return $response unless wantarray; return ($response, $transmit_sub); } sub _transmit_request_with_retries { my ($self, $request, $transmit_sub) = @_; my $response; do { $response = $transmit_sub->(); } while ( $response && $self->response_needs_retransmit($request, $response) ); return $response; } sub receive_response { my ($self, $request, $retransmit_sub) = @_; my $to = $self->go_timeout; my $receive_sub = sub { $self->trace_msg("receive_response\n"); local $SIG{ALRM} = sub { die "TIMEOUT\n" } if $to; my $response = eval { alarm($to) if $to; $self->receive_response_by_transport($request); }; alarm(0) if $to; if ($@) { return $self->transport_timedout("receive_response", $to) if $@ eq "TIMEOUT\n"; return $self->new_response({ err => 1, errstr => $@ }); } return $response; }; my $response; do { $response = $receive_sub->(); if ($self->response_needs_retransmit($request, $response)) { $response = $self->_transmit_request_with_retries($request, $retransmit_sub); $response ||= $receive_sub->(); } } while ( $self->response_needs_retransmit($request, $response) ); if ($response) { my $frozen_response = delete $response->{meta}{frozen}; my $request_cache_key = $request->{meta}{request_cache_key}; $self->_store_response_in_cache($frozen_response, $request_cache_key) if $request_cache_key && $self->{go_cache}; } return $response; } sub response_retry_preference { my ($self, $request, $response) = @_; # give the user a chance to express a preference (or undef for default) if (my $go_retry_hook = $self->go_retry_hook) { my $retry = $go_retry_hook->($request, $response, $self); $self->trace_msg(sprintf "go_retry_hook returned %s\n", (defined $retry) ? $retry : 'undef'); return $retry if defined $retry; } # This is the main decision point. We don't retry requests that got # as far as executing because the error is probably from the database # (not transport) so retrying is unlikely to help. But note that any # severe transport error occurring after execute is likely to return # a new response object that doesn't have the execute flag set. Beware! return 0 if $response->executed_flag_set; return 1 if ($response->errstr || '') =~ m/induced by DBI_GOFER_RANDOM/; return 1 if $request->is_idempotent; # i.e. is SELECT or ReadOnly was set return undef; # we couldn't make up our mind } sub response_needs_retransmit { my ($self, $request, $response) = @_; my $err = $response->err or return 0; # nothing went wrong my $retry = $self->response_retry_preference($request, $response); if (!$retry) { # false or undef $self->trace_msg("response_needs_retransmit: response not suitable for retry\n"); return 0; } # we'd like to retry but have we retried too much already? my $retry_limit = $self->go_retry_limit; if (!$retry_limit) { $self->trace_msg("response_needs_retransmit: retries disabled (retry_limit not set)\n"); return 0; } my $request_meta = $request->meta; my $retry_count = $request_meta->{retry_count} || 0; if ($retry_count >= $retry_limit) { $self->trace_msg("response_needs_retransmit: $retry_count is too many retries\n"); # XXX should be possible to disable altering the err $response->errstr(sprintf "%s (after %d retries by gofer)", $response->errstr, $retry_count); return 0; } # will retry now, do the admin ++$retry_count; $self->trace_msg("response_needs_retransmit: retry $retry_count\n"); # hook so response_retry_preference can defer some code execution # until we've checked retry_count and retry_limit. if (ref $retry eq 'CODE') { $retry->($retry_count, $retry_limit) and warn "should return false"; # protect future use } ++$request_meta->{retry_count}; # update count for this request object ++$self->meta->{request_retry_count}; # update cumulative transport stats return 1; } sub transport_timedout { my ($self, $method, $timeout) = @_; $timeout ||= $self->go_timeout; return $self->new_response({ err => 1, errstr => "DBD::Gofer $method timed-out after $timeout seconds" }); } # return undef if we don't want to cache this request # subclasses may use more specialized rules sub get_cache_key_for_request { my ($self, $request) = @_; # we only want to cache idempotent requests # is_idempotent() is true if GOf_REQUEST_IDEMPOTENT or GOf_REQUEST_READONLY set return undef if not $request->is_idempotent; # XXX would be nice to avoid the extra freeze here my $key = $self->freeze_request($request, undef, 1); #use Digest::MD5; warn "get_cache_key_for_request: ".Digest::MD5::md5_base64($key)."\n"; return $key; } sub _store_response_in_cache { my ($self, $frozen_response, $request_cache_key) = @_; my $go_cache = $self->{go_cache} or return; # new() ensures that enabling go_cache also enables keep_meta_frozen warn "No meta frozen in response" if !$frozen_response; warn "No request_cache_key" if !$request_cache_key; if ($frozen_response && $request_cache_key) { $self->trace_msg("receive_response added response to cache $go_cache\n"); eval { $go_cache->set($request_cache_key, $frozen_response) }; warn $@ if $@; ++$self->{cache_store}; } } 1; __END__ =head1 NAME DBD::Gofer::Transport::Base - base class for DBD::Gofer client transports =head1 SYNOPSIS my $remote_dsn = "..." DBI->connect("dbi:Gofer:transport=...;url=...;timeout=...;retry_limit=...;dsn=$remote_dsn",...) or, enable by setting the DBI_AUTOPROXY environment variable: export DBI_AUTOPROXY='dbi:Gofer:transport=...;url=...' which will force I<all> DBI connections to be made via that Gofer server. =head1 DESCRIPTION This is the base class for all DBD::Gofer client transports. =head1 ATTRIBUTES Gofer transport attributes can be specified either in the attributes parameter of the connect() method call, or in the DSN string. When used in the DSN string, attribute names don't have the C<go_> prefix. =head2 go_dsn The full DBI DSN that the Gofer server should connect to on your behalf. When used in the DSN it must be the last element in the DSN string. =head2 go_timeout A time limit for sending a request and receiving a response. Some drivers may implement sending and receiving as separate steps, in which case (currently) the timeout applies to each separately. If a request needs to be resent then the timeout is restarted for each sending of a request and receiving of a response. =head2 go_retry_limit The maximum number of times an request may be retried. The default is 2. =head2 go_retry_hook This subroutine reference is called, if defined, for each response received where $response->err is true. The subroutine is pass three parameters: the request object, the response object, and the transport object. If it returns an undefined value then the default retry behaviour is used. See L</RETRY ON ERROR> below. If it returns a defined but false value then the request is not resent. If it returns true value then the request is resent, so long as the number of retries does not exceed C<go_retry_limit>. =head1 RETRY ON ERROR The default retry on error behaviour is: - Retry if the error was due to DBI_GOFER_RANDOM. See L<DBI::Gofer::Execute>. - Retry if $request->is_idempotent returns true. See L<DBI::Gofer::Request>. A retry won't be allowed if the number of previous retries has reached C<go_retry_limit>. =head1 TRACING Tracing of gofer requests and responses can be enabled by setting the C<DBD_GOFER_TRACE> environment variable. A value of 1 gives a reasonably compact summary of each request and response. A value of 2 or more gives a detailed, and voluminous, dump. The trace is written using DBI->trace_msg() and so is written to the default DBI trace output, which is usually STDERR. =head1 METHODS I<This section is currently far from complete.> =head2 response_retry_preference $retry = $transport->response_retry_preference($request, $response); The response_retry_preference is called by DBD::Gofer when considering if a request should be retried after an error. Returns true (would like to retry), false (must not retry), undef (no preference). If a true value is returned in the form of a CODE ref then, if DBD::Gofer does decide to retry the request, it calls the code ref passing $retry_count, $retry_limit. Can be used for logging and/or to implement exponential backoff behaviour. Currently the called code must return using C<return;> to allow for future extensions. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007-2008, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =head1 SEE ALSO L<DBD::Gofer>, L<DBI::Gofer::Request>, L<DBI::Gofer::Response>, L<DBI::Gofer::Execute>. and some example transports: L<DBD::Gofer::Transport::stream> L<DBD::Gofer::Transport::http> L<DBI::Gofer::Transport::mod_perl> =cut DBD/Gofer/Transport/pipeone.pm 0000644 00000016203 15037233336 0012177 0 ustar 00 package DBD::Gofer::Transport::pipeone; # $Id: pipeone.pm 10087 2007-10-16 12:42:37Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use Carp; use Fcntl; use IO::Select; use IPC::Open3 qw(open3); use Symbol qw(gensym); use base qw(DBD::Gofer::Transport::Base); our $VERSION = "0.010088"; __PACKAGE__->mk_accessors(qw( connection_info go_perl )); sub new { my ($self, $args) = @_; $args->{go_perl} ||= do { ($INC{"blib.pm"}) ? [ $^X, '-Mblib' ] : [ $^X ]; }; if (not ref $args->{go_perl}) { # user can override the perl to be used, either with an array ref # containing the command name and args to use, or with a string # (ie via the DSN) in which case, to enable args to be passed, # we split on two or more consecutive spaces (otherwise the path # to perl couldn't contain a space itself). $args->{go_perl} = [ split /\s{2,}/, $args->{go_perl} ]; } return $self->SUPER::new($args); } # nonblock($fh) puts filehandle into nonblocking mode sub nonblock { my $fh = shift; my $flags = fcntl($fh, F_GETFL, 0) or croak "Can't get flags for filehandle $fh: $!"; fcntl($fh, F_SETFL, $flags | O_NONBLOCK) or croak "Can't make filehandle $fh nonblocking: $!"; } sub start_pipe_command { my ($self, $cmd) = @_; $cmd = [ $cmd ] unless ref $cmd eq 'ARRAY'; # if it's important that the subprocess uses the same # (versions of) modules as us then the caller should # set PERL5LIB itself. # limit various forms of insanity, for now local $ENV{DBI_TRACE}; # use DBI_GOFER_TRACE instead local $ENV{DBI_AUTOPROXY}; local $ENV{DBI_PROFILE}; my ($wfh, $rfh, $efh) = (gensym, gensym, gensym); my $pid = open3($wfh, $rfh, $efh, @$cmd) or die "error starting @$cmd: $!\n"; if ($self->trace) { $self->trace_msg(sprintf("Started pid $pid: @$cmd {fd: w%d r%d e%d, ppid=$$}\n", fileno $wfh, fileno $rfh, fileno $efh),0); } nonblock($rfh); nonblock($efh); my $ios = IO::Select->new($rfh, $efh); return { cmd=>$cmd, pid=>$pid, wfh=>$wfh, rfh=>$rfh, efh=>$efh, ios=>$ios, }; } sub cmd_as_string { my $self = shift; # XXX meant to return a properly shell-escaped string suitable for system # but its only for debugging so that can wait my $connection_info = $self->connection_info; return join " ", map { (m/^[-:\w]*$/) ? $_ : "'$_'" } @{$connection_info->{cmd}}; } sub transmit_request_by_transport { my ($self, $request) = @_; my $frozen_request = $self->freeze_request($request); my $cmd = [ @{$self->go_perl}, qw(-MDBI::Gofer::Transport::pipeone -e run_one_stdio)]; my $info = $self->start_pipe_command($cmd); my $wfh = delete $info->{wfh}; # send frozen request local $\; print $wfh $frozen_request or warn "error writing to @$cmd: $!\n"; # indicate that there's no more close $wfh or die "error closing pipe to @$cmd: $!\n"; $self->connection_info( $info ); return; } sub read_response_from_fh { my ($self, $fh_actions) = @_; my $trace = $self->trace; my $info = $self->connection_info || die; my ($ios) = @{$info}{qw(ios)}; my $errors = 0; my $complete; die "No handles to read response from" unless $ios->count; while ($ios->count) { my @readable = $ios->can_read(); for my $fh (@readable) { local $_; my $actions = $fh_actions->{$fh} || die "panic: no action for $fh"; my $rv = sysread($fh, $_='', 1024*31); # to fit in 32KB slab unless ($rv) { # error (undef) or end of file (0) my $action; unless (defined $rv) { # was an error $self->trace_msg("error on handle $fh: $!\n") if $trace >= 4; $action = $actions->{error} || $actions->{eof}; ++$errors; # XXX an error may be a permenent condition of the handle # if so we'll loop here - not good } else { $action = $actions->{eof}; $self->trace_msg("eof on handle $fh\n") if $trace >= 4; } if ($action->($fh)) { $self->trace_msg("removing $fh from handle set\n") if $trace >= 4; $ios->remove($fh); } next; } # action returns true if the response is now complete # (we finish all handles $actions->{read}->($fh) && ++$complete; } last if $complete; } return $errors; } sub receive_response_by_transport { my $self = shift; my $info = $self->connection_info || die; my ($pid, $rfh, $efh, $ios, $cmd) = @{$info}{qw(pid rfh efh ios cmd)}; my $frozen_response; my $stderr_msg; $self->read_response_from_fh( { $efh => { error => sub { warn "error reading response stderr: $!"; 1 }, eof => sub { warn "eof on stderr" if 0; 1 }, read => sub { $stderr_msg .= $_; 0 }, }, $rfh => { error => sub { warn "error reading response: $!"; 1 }, eof => sub { warn "eof on stdout" if 0; 1 }, read => sub { $frozen_response .= $_; 0 }, }, }); waitpid $info->{pid}, 0 or warn "waitpid: $!"; # XXX do something more useful? die ref($self)." command (@$cmd) failed: $stderr_msg" if not $frozen_response; # no output on stdout at all # XXX need to be able to detect and deal with corruption my $response = $self->thaw_response($frozen_response); if ($stderr_msg) { # add stderr messages as warnings (for PrintWarn) $response->add_err(0, $stderr_msg, undef, $self->trace) # but ignore warning from old version of blib unless $stderr_msg =~ /^Using .*blib/ && "@$cmd" =~ /-Mblib/; } return $response; } 1; __END__ =head1 NAME DBD::Gofer::Transport::pipeone - DBD::Gofer client transport for testing =head1 SYNOPSIS $original_dsn = "..."; DBI->connect("dbi:Gofer:transport=pipeone;dsn=$original_dsn",...) or, enable by setting the DBI_AUTOPROXY environment variable: export DBI_AUTOPROXY="dbi:Gofer:transport=pipeone" =head1 DESCRIPTION Connect via DBD::Gofer and execute each request by starting executing a subprocess. This is, as you might imagine, spectacularly inefficient! It's only intended for testing. Specifically it demonstrates that the server side is completely stateless. It also provides a base class for the much more useful L<DBD::Gofer::Transport::stream> transport. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =head1 SEE ALSO L<DBD::Gofer::Transport::Base> L<DBD::Gofer> =cut DBD/Gofer/Transport/null.pm 0000644 00000005322 15037233336 0011512 0 ustar 00 package DBD::Gofer::Transport::null; # $Id: null.pm 10087 2007-10-16 12:42:37Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use base qw(DBD::Gofer::Transport::Base); use DBI::Gofer::Execute; our $VERSION = "0.010088"; __PACKAGE__->mk_accessors(qw( pending_response transmit_count )); my $executor = DBI::Gofer::Execute->new(); sub transmit_request_by_transport { my ($self, $request) = @_; $self->transmit_count( ($self->transmit_count()||0) + 1 ); # just for tests my $frozen_request = $self->freeze_request($request); # ... # the request is magically transported over to ... ourselves # ... my $response = $executor->execute_request( $self->thaw_request($frozen_request, undef, 1) ); # put response 'on the shelf' ready for receive_response() $self->pending_response( $response ); return undef; } sub receive_response_by_transport { my $self = shift; my $response = $self->pending_response; my $frozen_response = $self->freeze_response($response, undef, 1); # ... # the response is magically transported back to ... ourselves # ... return $self->thaw_response($frozen_response); } 1; __END__ =head1 NAME DBD::Gofer::Transport::null - DBD::Gofer client transport for testing =head1 SYNOPSIS my $original_dsn = "..." DBI->connect("dbi:Gofer:transport=null;dsn=$original_dsn",...) or, enable by setting the DBI_AUTOPROXY environment variable: export DBI_AUTOPROXY="dbi:Gofer:transport=null" =head1 DESCRIPTION Connect via DBD::Gofer but execute the requests within the same process. This is a quick and simple way to test applications for compatibility with the (few) restrictions that DBD::Gofer imposes. It also provides a simple, portable way for the DBI test suite to be used to test DBD::Gofer on all platforms with no setup. Also, by measuring the difference in performance between normal connections and connections via C<dbi:Gofer:transport=null> the basic cost of using DBD::Gofer can be measured. Furthermore, the additional cost of more advanced transports can be isolated by comparing their performance with the null transport. The C<t/85gofer.t> script in the DBI distribution includes a comparative benchmark. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =head1 SEE ALSO L<DBD::Gofer::Transport::Base> L<DBD::Gofer> =cut DBD/Gofer/Transport/stream.pm 0000644 00000022040 15037233336 0012027 0 ustar 00 package DBD::Gofer::Transport::stream; # $Id: stream.pm 14598 2010-12-21 22:53:25Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. use strict; use warnings; use Carp; use base qw(DBD::Gofer::Transport::pipeone); our $VERSION = "0.014599"; __PACKAGE__->mk_accessors(qw( go_persist )); my $persist_all = 5; my %persist; sub _connection_key { my ($self) = @_; return join "~", $self->go_url||"", @{ $self->go_perl || [] }; } sub _connection_get { my ($self) = @_; my $persist = $self->go_persist; # = 0 can force non-caching $persist = $persist_all if not defined $persist; my $key = ($persist) ? $self->_connection_key : ''; if ($persist{$key} && $self->_connection_check($persist{$key})) { $self->trace_msg("reusing persistent connection $key\n",0) if $self->trace >= 1; return $persist{$key}; } my $connection = $self->_make_connection; if ($key) { %persist = () if keys %persist > $persist_all; # XXX quick hack to limit subprocesses $persist{$key} = $connection; } return $connection; } sub _connection_check { my ($self, $connection) = @_; $connection ||= $self->connection_info; my $pid = $connection->{pid}; my $ok = (kill 0, $pid); $self->trace_msg("_connection_check: $ok (pid $$)\n",0) if $self->trace; return $ok; } sub _connection_kill { my ($self) = @_; my $connection = $self->connection_info; my ($pid, $wfh, $rfh, $efh) = @{$connection}{qw(pid wfh rfh efh)}; $self->trace_msg("_connection_kill: closing write handle\n",0) if $self->trace; # closing the write file handle should be enough, generally close $wfh; # in future we may want to be more aggressive #close $rfh; close $efh; kill 15, $pid # but deleting from the persist cache... delete $persist{ $self->_connection_key }; # ... and removing the connection_info should suffice $self->connection_info( undef ); return; } sub _make_connection { my ($self) = @_; my $go_perl = $self->go_perl; my $cmd = [ @$go_perl, qw(-MDBI::Gofer::Transport::stream -e run_stdio_hex)]; #push @$cmd, "DBI_TRACE=2=/tmp/goferstream.log", "sh", "-c"; if (my $url = $self->go_url) { die "Only 'ssh:user\@host' style url supported by this transport" unless $url =~ s/^ssh://; my $ssh = $url; my $setup_env = join "||", map { "source $_ 2>/dev/null" } qw(.bash_profile .bash_login .profile); my $setup = $setup_env.q{; exec "$@"}; # don't use $^X on remote system by default as it's possibly wrong $cmd->[0] = 'perl' if "@$go_perl" eq $^X; # -x not only 'Disables X11 forwarding' but also makes connections *much* faster unshift @$cmd, qw(ssh -xq), split(' ', $ssh), qw(bash -c), $setup; } $self->trace_msg("new connection: @$cmd\n",0) if $self->trace; # XXX add a handshake - some message from DBI::Gofer::Transport::stream that's # sent as soon as it starts that we can wait for to report success - and soak up # and report useful warnings etc from ssh before we get it? Increases latency though. my $connection = $self->start_pipe_command($cmd); return $connection; } sub transmit_request_by_transport { my ($self, $request) = @_; my $trace = $self->trace; my $connection = $self->connection_info || do { my $con = $self->_connection_get; $self->connection_info( $con ); $con; }; my $encoded_request = unpack("H*", $self->freeze_request($request)); $encoded_request .= "\015\012"; my $wfh = $connection->{wfh}; $self->trace_msg(sprintf("transmit_request_by_transport: to fh %s fd%d\n", $wfh, fileno($wfh)),0) if $trace >= 4; # send frozen request local $\; $wfh->print($encoded_request) # autoflush enabled or do { my $err = $!; # XXX could/should make new connection and retry $self->_connection_kill; die "Error sending request: $err"; }; $self->trace_msg("Request sent: $encoded_request\n",0) if $trace >= 4; return undef; # indicate no response yet (so caller calls receive_response_by_transport) } sub receive_response_by_transport { my $self = shift; my $trace = $self->trace; $self->trace_msg("receive_response_by_transport: awaiting response\n",0) if $trace >= 4; my $connection = $self->connection_info || die; my ($pid, $rfh, $efh, $cmd) = @{$connection}{qw(pid rfh efh cmd)}; my $errno = 0; my $encoded_response; my $stderr_msg; $self->read_response_from_fh( { $efh => { error => sub { warn "error reading response stderr: $!"; $errno||=$!; 1 }, eof => sub { warn "eof reading efh" if $trace >= 4; 1 }, read => sub { $stderr_msg .= $_; 0 }, }, $rfh => { error => sub { warn "error reading response: $!"; $errno||=$!; 1 }, eof => sub { warn "eof reading rfh" if $trace >= 4; 1 }, read => sub { $encoded_response .= $_; ($encoded_response=~s/\015\012$//) ? 1 : 0 }, }, }); # if we got no output on stdout at all then the command has # probably exited, possibly with an error to stderr. # Turn this situation into a reasonably useful DBI error. if (not $encoded_response) { my @msg; push @msg, "error while reading response: $errno" if $errno; if ($stderr_msg) { chomp $stderr_msg; push @msg, sprintf "error reported by \"%s\" (pid %d%s): %s", $self->cmd_as_string, $pid, ((kill 0, $pid) ? "" : ", exited"), $stderr_msg; } die join(", ", "No response received", @msg)."\n"; } $self->trace_msg("Response received: $encoded_response\n",0) if $trace >= 4; $self->trace_msg("Gofer stream stderr message: $stderr_msg\n",0) if $stderr_msg && $trace; my $frozen_response = pack("H*", $encoded_response); # XXX need to be able to detect and deal with corruption my $response = $self->thaw_response($frozen_response); if ($stderr_msg) { # add stderr messages as warnings (for PrintWarn) $response->add_err(0, $stderr_msg, undef, $trace) # but ignore warning from old version of blib unless $stderr_msg =~ /^Using .*blib/ && "@$cmd" =~ /-Mblib/; } return $response; } sub transport_timedout { my $self = shift; $self->_connection_kill; return $self->SUPER::transport_timedout(@_); } 1; __END__ =head1 NAME DBD::Gofer::Transport::stream - DBD::Gofer transport for stdio streaming =head1 SYNOPSIS DBI->connect('dbi:Gofer:transport=stream;url=ssh:username@host.example.com;dsn=dbi:...',...) or, enable by setting the DBI_AUTOPROXY environment variable: export DBI_AUTOPROXY='dbi:Gofer:transport=stream;url=ssh:username@host.example.com' =head1 DESCRIPTION Without the C<url=> parameter it launches a subprocess as perl -MDBI::Gofer::Transport::stream -e run_stdio_hex and feeds requests into it and reads responses from it. But that's not very useful. With a C<url=ssh:username@host.example.com> parameter it uses ssh to launch the subprocess on a remote system. That's much more useful! It gives you secure remote access to DBI databases on any system you can login to. Using ssh also gives you optional compression and many other features (see the ssh manual for how to configure that and many other options via ~/.ssh/config file). The actual command invoked is something like: ssh -xq ssh:username@host.example.com bash -c $setup $run where $run is the command shown above, and $command is . .bash_profile 2>/dev/null || . .bash_login 2>/dev/null || . .profile 2>/dev/null; exec "$@" which is trying (in a limited and fairly unportable way) to setup the environment (PATH, PERL5LIB etc) as it would be if you had logged in to that system. The "C<perl>" used in the command will default to the value of $^X when not using ssh. On most systems that's the full path to the perl that's currently executing. =head1 PERSISTENCE Currently gofer stream connections persist (remain connected) after all database handles have been disconnected. This makes later connections in the same process very fast. Currently up to 5 different gofer stream connections (based on url) can persist. If more than 5 are in the cache when a new connection is made then the cache is cleared before adding the new connection. Simple but effective. =head1 TO DO Document go_perl attribute Automatically reconnect (within reason) if there's a transport error. Decide on default for persistent connection - on or off? limits? ttl? =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =head1 SEE ALSO L<DBD::Gofer::Transport::Base> L<DBD::Gofer> =cut DBD/Gofer.pm 0000644 00000137657 15037233336 0006565 0 ustar 00 { package DBD::Gofer; use strict; require DBI; require DBI::Gofer::Request; require DBI::Gofer::Response; require Carp; our $VERSION = "0.015327"; # $Id: Gofer.pm 15326 2012-06-06 16:32:38Z Tim $ # # Copyright (c) 2007, Tim Bunce, Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. # attributes we'll allow local STORE our %xxh_local_store_attrib = map { $_=>1 } qw( Active CachedKids Callbacks DbTypeSubclass ErrCount Executed FetchHashKeyName HandleError HandleSetErr InactiveDestroy AutoInactiveDestroy PrintError PrintWarn Profile RaiseError RootClass ShowErrorStatement Taint TaintIn TaintOut TraceLevel Warn dbi_quote_identifier_cache dbi_connect_closure dbi_go_execute_unique ); our %xxh_local_store_attrib_if_same_value = map { $_=>1 } qw( Username dbi_connect_method ); our $drh = undef; # holds driver handle once initialized our $methods_already_installed; sub driver{ return $drh if $drh; DBI->setup_driver('DBD::Gofer'); unless ($methods_already_installed++) { my $opts = { O=> 0x0004 }; # IMA_KEEP_ERR DBD::Gofer::db->install_method('go_dbh_method', $opts); DBD::Gofer::st->install_method('go_sth_method', $opts); DBD::Gofer::st->install_method('go_clone_sth', $opts); DBD::Gofer::db->install_method('go_cache', $opts); DBD::Gofer::st->install_method('go_cache', $opts); } my($class, $attr) = @_; $class .= "::dr"; ($drh) = DBI::_new_drh($class, { 'Name' => 'Gofer', 'Version' => $VERSION, 'Attribution' => 'DBD Gofer by Tim Bunce', }); $drh; } sub CLONE { undef $drh; } sub go_cache { my $h = shift; $h->{go_cache} = shift if @_; # return handle's override go_cache, if it has one return $h->{go_cache} if defined $h->{go_cache}; # or else the transports default go_cache return $h->{go_transport}->{go_cache}; } sub set_err_from_response { # set error/warn/info and propagate warnings my $h = shift; my $response = shift; if (my $warnings = $response->warnings) { warn $_ for @$warnings; } my ($err, $errstr, $state) = $response->err_errstr_state; # Only set_err() if there's an error else leave the current values # (The current values will normally be set undef by the DBI dispatcher # except for methods marked KEEPERR such as ping.) $h->set_err($err, $errstr, $state) if defined $err; return undef; } sub install_methods_proxy { my ($installed_methods) = @_; while ( my ($full_method, $attr) = each %$installed_methods ) { # need to install both a DBI dispatch stub and a proxy stub # (the dispatch stub may be already here due to local driver use) DBI->_install_method($full_method, "", $attr||{}) unless defined &{$full_method}; # now install proxy stubs on the driver side $full_method =~ m/^DBI::(\w\w)::(\w+)$/ or die "Invalid method name '$full_method' for install_method"; my ($type, $method) = ($1, $2); my $driver_method = "DBD::Gofer::${type}::${method}"; next if defined &{$driver_method}; my $sub; if ($type eq 'db') { $sub = sub { return shift->go_dbh_method(undef, $method, @_) }; } else { $sub = sub { shift->set_err($DBI::stderr, "Can't call \$${type}h->$method when using DBD::Gofer"); return; }; } no strict 'refs'; *$driver_method = $sub; } } } { package DBD::Gofer::dr; # ====== DRIVER ====== $imp_data_size = 0; use strict; sub connect_cached { my ($drh, $dsn, $user, $auth, $attr)= @_; $attr ||= {}; return $drh->SUPER::connect_cached($dsn, $user, $auth, { (%$attr), go_connect_method => $attr->{go_connect_method} || 'connect_cached', }); } sub connect { my($drh, $dsn, $user, $auth, $attr)= @_; my $orig_dsn = $dsn; # first remove dsn= and everything after it my $remote_dsn = ($dsn =~ s/;?\bdsn=(.*)$// && $1) or return $drh->set_err($DBI::stderr, "No dsn= argument in '$orig_dsn'"); if ($attr->{go_bypass}) { # don't use DBD::Gofer for this connection # useful for testing with DBI_AUTOPROXY, e.g., t/03handle.t return DBI->connect($remote_dsn, $user, $auth, $attr); } my %go_attr; # extract any go_ attributes from the connect() attr arg for my $k (grep { /^go_/ } keys %$attr) { $go_attr{$k} = delete $attr->{$k}; } # then override those with any attributes embedded in our dsn (not remote_dsn) for my $kv (grep /=/, split /;/, $dsn, -1) { my ($k, $v) = split /=/, $kv, 2; $go_attr{ "go_$k" } = $v; } if (not ref $go_attr{go_policy}) { # if not a policy object already my $policy_class = $go_attr{go_policy} || 'classic'; $policy_class = "DBD::Gofer::Policy::$policy_class" unless $policy_class =~ /::/; _load_class($policy_class) or return $drh->set_err($DBI::stderr, "Can't load $policy_class: $@"); # replace policy name in %go_attr with policy object $go_attr{go_policy} = eval { $policy_class->new(\%go_attr) } or return $drh->set_err($DBI::stderr, "Can't instanciate $policy_class: $@"); } # policy object is left in $go_attr{go_policy} so transport can see it my $go_policy = $go_attr{go_policy}; if ($go_attr{go_cache} and not ref $go_attr{go_cache}) { # if not a cache object already my $cache_class = $go_attr{go_cache}; $cache_class = "DBI::Util::CacheMemory" if $cache_class eq '1'; _load_class($cache_class) or return $drh->set_err($DBI::stderr, "Can't load $cache_class $@"); $go_attr{go_cache} = eval { $cache_class->new() } or $drh->set_err(0, "Can't instanciate $cache_class: $@"); # warning } # delete any other attributes that don't apply to transport my $go_connect_method = delete $go_attr{go_connect_method}; my $transport_class = delete $go_attr{go_transport} or return $drh->set_err($DBI::stderr, "No transport= argument in '$orig_dsn'"); $transport_class = "DBD::Gofer::Transport::$transport_class" unless $transport_class =~ /::/; _load_class($transport_class) or return $drh->set_err($DBI::stderr, "Can't load $transport_class: $@"); my $go_transport = eval { $transport_class->new(\%go_attr) } or return $drh->set_err($DBI::stderr, "Can't instanciate $transport_class: $@"); my $request_class = "DBI::Gofer::Request"; my $go_request = eval { my $go_attr = { %$attr }; # XXX user/pass of fwd server vs db server ? also impact of autoproxy if ($user) { $go_attr->{Username} = $user; $go_attr->{Password} = $auth; } # delete any attributes we can't serialize (or don't want to) delete @{$go_attr}{qw(Profile HandleError HandleSetErr Callbacks)}; # delete any attributes that should only apply to the client-side delete @{$go_attr}{qw(RootClass DbTypeSubclass)}; $go_connect_method ||= $go_policy->connect_method($remote_dsn, $go_attr) || 'connect'; $request_class->new({ dbh_connect_call => [ $go_connect_method, $remote_dsn, $user, $auth, $go_attr ], }) } or return $drh->set_err($DBI::stderr, "Can't instanciate $request_class: $@"); my ($dbh, $dbh_inner) = DBI::_new_dbh($drh, { 'Name' => $dsn, 'USER' => $user, go_transport => $go_transport, go_request => $go_request, go_policy => $go_policy, }); # mark as inactive temporarily for STORE. Active not set until connected() called. $dbh->STORE(Active => 0); # should we ping to check the connection # and fetch dbh attributes my $skip_connect_check = $go_policy->skip_connect_check($attr, $dbh); if (not $skip_connect_check) { if (not $dbh->go_dbh_method(undef, 'ping')) { return undef if $dbh->err; # error already recorded, typically return $dbh->set_err($DBI::stderr, "ping failed"); } } return $dbh; } sub _load_class { # return true or false+$@ my $class = shift; (my $pm = $class) =~ s{::}{/}g; $pm .= ".pm"; return 1 if eval { require $pm }; delete $INC{$pm}; # shouldn't be needed (perl bug?) and assigning undef isn't enough undef; # error in $@ } } { package DBD::Gofer::db; # ====== DATABASE ====== $imp_data_size = 0; use strict; use Carp qw(carp croak); my %dbh_local_store_attrib = %DBD::Gofer::xxh_local_store_attrib; sub connected { shift->STORE(Active => 1); } sub go_dbh_method { my $dbh = shift; my $meta = shift; # @_ now contains ($method_name, @args) my $request = $dbh->{go_request}; $request->init_request([ wantarray, @_ ], $dbh); ++$dbh->{go_request_count}; my $go_policy = $dbh->{go_policy}; my $dbh_attribute_update = $go_policy->dbh_attribute_update(); $request->dbh_attributes( $go_policy->dbh_attribute_list() ) if $dbh_attribute_update eq 'every' or $dbh->{go_request_count}==1; $request->dbh_last_insert_id_args($meta->{go_last_insert_id_args}) if $meta->{go_last_insert_id_args}; my $transport = $dbh->{go_transport} or return $dbh->set_err($DBI::stderr, "Not connected (no transport)"); local $transport->{go_cache} = $dbh->{go_cache} if defined $dbh->{go_cache}; my ($response, $retransmit_sub) = $transport->transmit_request($request); $response ||= $transport->receive_response($request, $retransmit_sub); $dbh->{go_response} = $response or die "No response object returned by $transport"; die "response '$response' returned by $transport is not a response object" unless UNIVERSAL::isa($response,"DBI::Gofer::Response"); if (my $dbh_attributes = $response->dbh_attributes) { # XXX installed_methods piggybacks on dbh_attributes for now if (my $installed_methods = delete $dbh_attributes->{dbi_installed_methods}) { DBD::Gofer::install_methods_proxy($installed_methods) if $dbh->{go_request_count}==1; } # XXX we don't STORE here, we just stuff the value into the attribute cache $dbh->{$_} = $dbh_attributes->{$_} for keys %$dbh_attributes; } my $rv = $response->rv; if (my $resultset_list = $response->sth_resultsets) { # dbh method call returned one or more resultsets # (was probably a metadata method like table_info) # # setup an sth but don't execute/forward it my $sth = $dbh->prepare(undef, { go_skip_prepare_check => 1 }); # set the sth response to our dbh response (tied %$sth)->{go_response} = $response; # setup the sth with the results in our response $sth->more_results; # and return that new sth as if it came from original request $rv = [ $sth ]; } elsif (!$rv) { # should only occur for major transport-level error #carp("no rv in response { @{[ %$response ]} }"); $rv = [ ]; } DBD::Gofer::set_err_from_response($dbh, $response); return (wantarray) ? @$rv : $rv->[0]; } # Methods that should be forwarded but can be cached for my $method (qw( tables table_info column_info primary_key_info foreign_key_info statistics_info data_sources type_info_all get_info parse_trace_flags parse_trace_flag func )) { my $policy_name = "cache_$method"; my $super_name = "SUPER::$method"; my $sub = sub { my $dbh = shift; my $rv; # if we know the remote side doesn't override the DBI's default method # then we might as well just call the DBI's default method on the client # (which may, in turn, call other methods that are forwarded, like get_info) if ($dbh->{dbi_default_methods}{$method} && $dbh->{go_policy}->skip_default_methods()) { $dbh->trace_msg(" !! $method: using local default as remote method is also default\n"); return $dbh->$super_name(@_); } my $cache; my $cache_key; if (my $cache_it = $dbh->{go_policy}->$policy_name(undef, $dbh, @_)) { $cache = $dbh->{go_meta_cache} ||= {}; # keep separate from go_cache $cache_key = sprintf "%s_wa%d(%s)", $policy_name, wantarray||0, join(",\t", map { # XXX basic but sufficient for now !ref($_) ? DBI::neat($_,1e6) : ref($_) eq 'ARRAY' ? DBI::neat_list($_,1e6,",\001") : ref($_) eq 'HASH' ? do { my @k = sort keys %$_; DBI::neat_list([@k,@{$_}{@k}],1e6,",\002") } : do { warn "unhandled argument type ($_)"; $_ } } @_); if ($rv = $cache->{$cache_key}) { $dbh->trace_msg("$method(@_) returning previously cached value ($cache_key)\n",4); my @cache_rv = @$rv; # if it's an sth we have to clone it $cache_rv[0] = $cache_rv[0]->go_clone_sth if UNIVERSAL::isa($cache_rv[0],'DBI::st'); return (wantarray) ? @cache_rv : $cache_rv[0]; } } $rv = [ (wantarray) ? ($dbh->go_dbh_method(undef, $method, @_)) : scalar $dbh->go_dbh_method(undef, $method, @_) ]; if ($cache) { $dbh->trace_msg("$method(@_) caching return value ($cache_key)\n",4); my @cache_rv = @$rv; # if it's an sth we have to clone it #$cache_rv[0] = $cache_rv[0]->go_clone_sth # if UNIVERSAL::isa($cache_rv[0],'DBI::st'); $cache->{$cache_key} = \@cache_rv unless UNIVERSAL::isa($cache_rv[0],'DBI::st'); # XXX cloning sth not yet done } return (wantarray) ? @$rv : $rv->[0]; }; no strict 'refs'; *$method = $sub; } # Methods that can use the DBI defaults for some situations/drivers for my $method (qw( quote quote_identifier )) { # XXX keep DBD::Gofer::Policy::Base in sync my $policy_name = "locally_$method"; my $super_name = "SUPER::$method"; my $sub = sub { my $dbh = shift; # if we know the remote side doesn't override the DBI's default method # then we might as well just call the DBI's default method on the client # (which may, in turn, call other methods that are forwarded, like get_info) if ($dbh->{dbi_default_methods}{$method} && $dbh->{go_policy}->skip_default_methods()) { $dbh->trace_msg(" !! $method: using local default as remote method is also default\n"); return $dbh->$super_name(@_); } # false: use remote gofer # 1: use local DBI default method # code ref: use the code ref my $locally = $dbh->{go_policy}->$policy_name($dbh, @_); if ($locally) { return $locally->($dbh, @_) if ref $locally eq 'CODE'; return $dbh->$super_name(@_); } return $dbh->go_dbh_method(undef, $method, @_); # propagate context }; no strict 'refs'; *$method = $sub; } # Methods that should always fail for my $method (qw( begin_work commit rollback )) { no strict 'refs'; *$method = sub { return shift->set_err($DBI::stderr, "$method not available with DBD::Gofer") } } sub do { my ($dbh, $sql, $attr, @args) = @_; delete $dbh->{Statement}; # avoid "Modification of non-creatable hash value attempted" $dbh->{Statement} = $sql; # for profiling and ShowErrorStatement my $meta = { go_last_insert_id_args => $attr->{go_last_insert_id_args} }; return $dbh->go_dbh_method($meta, 'do', $sql, $attr, @args); } sub ping { my $dbh = shift; return $dbh->set_err('', "can't ping while not connected") # info unless $dbh->SUPER::FETCH('Active'); my $skip_ping = $dbh->{go_policy}->skip_ping(); return ($skip_ping) ? 1 : $dbh->go_dbh_method(undef, 'ping', @_); } sub last_insert_id { my $dbh = shift; my $response = $dbh->{go_response} or return undef; return $response->last_insert_id; } sub FETCH { my ($dbh, $attrib) = @_; # FETCH is effectively already cached because the DBI checks the # attribute cache in the handle before calling FETCH # and this FETCH copies the value into the attribute cache # forward driver-private attributes (except ours) if ($attrib =~ m/^[a-z]/ && $attrib !~ /^go_/) { my $value = $dbh->go_dbh_method(undef, 'FETCH', $attrib); $dbh->{$attrib} = $value; # XXX forces caching by DBI return $dbh->{$attrib} = $value; } # else pass up to DBI to handle return $dbh->SUPER::FETCH($attrib); } sub STORE { my ($dbh, $attrib, $value) = @_; if ($attrib eq 'AutoCommit') { croak "Can't enable transactions when using DBD::Gofer" if !$value; return $dbh->SUPER::STORE($attrib => ($value) ? -901 : -900); } return $dbh->SUPER::STORE($attrib => $value) # we handle this attribute locally if $dbh_local_store_attrib{$attrib} # or it's a private_ (application) attribute or $attrib =~ /^private_/ # or not yet connected (ie being called by DBI->connect) or not $dbh->FETCH('Active'); return $dbh->SUPER::STORE($attrib => $value) if $DBD::Gofer::xxh_local_store_attrib_if_same_value{$attrib} && do { # values are the same my $crnt = $dbh->FETCH($attrib); local $^W; (defined($value) ^ defined($crnt)) ? 0 # definedness differs : $value eq $crnt; }; # dbh attributes are set at connect-time - see connect() carp("Can't alter \$dbh->{$attrib} after handle created with DBD::Gofer") if $dbh->FETCH('Warn'); return $dbh->set_err($DBI::stderr, "Can't alter \$dbh->{$attrib} after handle created with DBD::Gofer"); } sub disconnect { my $dbh = shift; $dbh->{go_transport} = undef; $dbh->STORE(Active => 0); } sub prepare { my ($dbh, $statement, $attr)= @_; return $dbh->set_err($DBI::stderr, "Can't prepare when disconnected") unless $dbh->FETCH('Active'); $attr = { %$attr } if $attr; # copy so we can edit my $policy = delete($attr->{go_policy}) || $dbh->{go_policy}; my $lii_args = delete $attr->{go_last_insert_id_args}; my $go_prepare = delete($attr->{go_prepare_method}) || $dbh->{go_prepare_method} || $policy->prepare_method($dbh, $statement, $attr) || 'prepare'; # e.g. for code not using placeholders my $go_cache = delete $attr->{go_cache}; # set to undef if there are no attributes left for the actual prepare call $attr = undef if $attr and not %$attr; my ($sth, $sth_inner) = DBI::_new_sth($dbh, { Statement => $statement, go_prepare_call => [ 0, $go_prepare, $statement, $attr ], # go_method_calls => [], # autovivs if needed go_request => $dbh->{go_request}, go_transport => $dbh->{go_transport}, go_policy => $policy, go_last_insert_id_args => $lii_args, go_cache => $go_cache, }); $sth->STORE(Active => 0); # XXX needed? It should be the default my $skip_prepare_check = $policy->skip_prepare_check($attr, $dbh, $statement, $attr, $sth); if (not $skip_prepare_check) { $sth->go_sth_method() or return undef; } return $sth; } sub prepare_cached { my ($dbh, $sql, $attr, $if_active)= @_; $attr ||= {}; return $dbh->SUPER::prepare_cached($sql, { %$attr, go_prepare_method => $attr->{go_prepare_method} || 'prepare_cached', }, $if_active); } *go_cache = \&DBD::Gofer::go_cache; } { package DBD::Gofer::st; # ====== STATEMENT ====== $imp_data_size = 0; use strict; my %sth_local_store_attrib = (%DBD::Gofer::xxh_local_store_attrib, NUM_OF_FIELDS => 1); sub go_sth_method { my ($sth, $meta) = @_; if (my $ParamValues = $sth->{ParamValues}) { my $ParamAttr = $sth->{ParamAttr}; # XXX the sort here is a hack to work around a DBD::Sybase bug # but only works properly for params 1..9 # (reverse because of the unshift) my @params = reverse sort keys %$ParamValues; if (@params > 9 && ($sth->{Database}{go_dsn}||'') =~ /dbi:Sybase/) { # if more than 9 then we need to do a proper numeric sort # also warn to alert user of this issue warn "Sybase param binding order hack in use"; @params = sort { $b <=> $a } @params; } for my $p (@params) { # unshift to put binds before execute call unshift @{ $sth->{go_method_calls} }, [ 'bind_param', $p, $ParamValues->{$p}, $ParamAttr->{$p} ]; } } my $dbh = $sth->{Database} or die "panic"; ++$dbh->{go_request_count}; my $request = $sth->{go_request}; $request->init_request($sth->{go_prepare_call}, $sth); $request->sth_method_calls(delete $sth->{go_method_calls}) if $sth->{go_method_calls}; $request->sth_result_attr({}); # (currently) also indicates this is an sth request $request->dbh_last_insert_id_args($meta->{go_last_insert_id_args}) if $meta->{go_last_insert_id_args}; my $go_policy = $sth->{go_policy}; my $dbh_attribute_update = $go_policy->dbh_attribute_update(); $request->dbh_attributes( $go_policy->dbh_attribute_list() ) if $dbh_attribute_update eq 'every' or $dbh->{go_request_count}==1; my $transport = $sth->{go_transport} or return $sth->set_err($DBI::stderr, "Not connected (no transport)"); local $transport->{go_cache} = $sth->{go_cache} if defined $sth->{go_cache}; my ($response, $retransmit_sub) = $transport->transmit_request($request); $response ||= $transport->receive_response($request, $retransmit_sub); $sth->{go_response} = $response or die "No response object returned by $transport"; $dbh->{go_response} = $response; # mainly for last_insert_id if (my $dbh_attributes = $response->dbh_attributes) { # XXX we don't STORE here, we just stuff the value into the attribute cache $dbh->{$_} = $dbh_attributes->{$_} for keys %$dbh_attributes; # record the values returned, so we know that we have fetched # values are which we have fetched (see dbh->FETCH method) $dbh->{go_dbh_attributes_fetched} = $dbh_attributes; } my $rv = $response->rv; # may be undef on error if ($response->sth_resultsets) { # setup first resultset - including sth attributes $sth->more_results; } else { $sth->STORE(Active => 0); $sth->{go_rows} = $rv; } # set error/warn/info (after more_results as that'll clear err) DBD::Gofer::set_err_from_response($sth, $response); return $rv; } sub bind_param { my ($sth, $param, $value, $attr) = @_; $sth->{ParamValues}{$param} = $value; $sth->{ParamAttr}{$param} = $attr if defined $attr; # attr is sticky if not explicitly set return 1; } sub execute { my $sth = shift; $sth->bind_param($_, $_[$_-1]) for (1..@_); push @{ $sth->{go_method_calls} }, [ 'execute' ]; my $meta = { go_last_insert_id_args => $sth->{go_last_insert_id_args} }; return $sth->go_sth_method($meta); } sub more_results { my $sth = shift; $sth->finish; my $response = $sth->{go_response} or do { # e.g., we haven't sent a request yet (ie prepare then more_results) $sth->trace_msg(" No response object present", 3); return; }; my $resultset_list = $response->sth_resultsets or return $sth->set_err($DBI::stderr, "No sth_resultsets"); my $meta = shift @$resultset_list or return undef; # no more result sets #warn "more_results: ".Data::Dumper::Dumper($meta); # pull out the special non-attributes first my ($rowset, $err, $errstr, $state) = delete @{$meta}{qw(rowset err errstr state)}; # copy meta attributes into attribute cache my $NUM_OF_FIELDS = delete $meta->{NUM_OF_FIELDS}; $sth->STORE('NUM_OF_FIELDS', $NUM_OF_FIELDS); # XXX need to use STORE for some? $sth->{$_} = $meta->{$_} for keys %$meta; if (($NUM_OF_FIELDS||0) > 0) { $sth->{go_rows} = ($rowset) ? @$rowset : -1; $sth->{go_current_rowset} = $rowset; $sth->{go_current_rowset_err} = [ $err, $errstr, $state ] if defined $err; $sth->STORE(Active => 1) if $rowset; } return $sth; } sub go_clone_sth { my ($sth1) = @_; # clone an (un-fetched-from) sth - effectively undoes the initial more_results # not 100% so just for use in caching returned sth e.g. table_info my $sth2 = $sth1->{Database}->prepare($sth1->{Statement}, { go_skip_prepare_check => 1 }); $sth2->STORE($_, $sth1->{$_}) for qw(NUM_OF_FIELDS Active); my $sth2_inner = tied %$sth2; $sth2_inner->{$_} = $sth1->{$_} for qw(NUM_OF_PARAMS FetchHashKeyName); die "not fully implemented yet"; return $sth2; } sub fetchrow_arrayref { my ($sth) = @_; my $resultset = $sth->{go_current_rowset} || do { # should only happen if fetch called after execute failed my $rowset_err = $sth->{go_current_rowset_err} || [ 1, 'no result set (did execute fail)' ]; return $sth->set_err( @$rowset_err ); }; return $sth->_set_fbav(shift @$resultset) if @$resultset; $sth->finish; # no more data so finish return undef; } *fetch = \&fetchrow_arrayref; # alias sub fetchall_arrayref { my ($sth, $slice, $max_rows) = @_; my $resultset = $sth->{go_current_rowset} || do { # should only happen if fetch called after execute failed my $rowset_err = $sth->{go_current_rowset_err} || [ 1, 'no result set (did execute fail)' ]; return $sth->set_err( @$rowset_err ); }; my $mode = ref($slice) || 'ARRAY'; return $sth->SUPER::fetchall_arrayref($slice, $max_rows) if ref($slice) or defined $max_rows; $sth->finish; # no more data after this so finish return $resultset; } sub rows { return shift->{go_rows}; } sub STORE { my ($sth, $attrib, $value) = @_; return $sth->SUPER::STORE($attrib => $value) if $sth_local_store_attrib{$attrib} # handle locally # or it's a private_ (application) attribute or $attrib =~ /^private_/; # otherwise warn but do it anyway # this will probably need refining later my $msg = "Altering \$sth->{$attrib} won't affect proxied handle"; Carp::carp($msg) if $sth->FETCH('Warn'); # XXX could perhaps do # push @{ $sth->{go_method_calls} }, [ 'STORE', $attrib, $value ] # if not $sth->FETCH('Executed'); # but how to handle repeat executions? How to we know when an # attribute is being set to affect the current resultset or the # next execution? # Could just always use go_method_calls I guess. # do the store locally anyway, just in case $sth->SUPER::STORE($attrib => $value); return $sth->set_err($DBI::stderr, $msg); } # sub bind_param_array # we use DBI's default, which sets $sth->{ParamArrays}{$param} = $value # and calls bind_param($param, undef, $attr) if $attr. sub execute_array { my $sth = shift; my $attr = shift; $sth->bind_param_array($_, $_[$_-1]) for (1..@_); push @{ $sth->{go_method_calls} }, [ 'execute_array', $attr ]; return $sth->go_sth_method($attr); } *go_cache = \&DBD::Gofer::go_cache; } 1; __END__ =head1 NAME DBD::Gofer - A stateless-proxy driver for communicating with a remote DBI =head1 SYNOPSIS use DBI; $original_dsn = "dbi:..."; # your original DBI Data Source Name $dbh = DBI->connect("dbi:Gofer:transport=$transport;...;dsn=$original_dsn", $user, $passwd, \%attributes); ... use $dbh as if it was connected to $original_dsn ... The C<transport=$transport> part specifies the name of the module to use to transport the requests to the remote DBI. If $transport doesn't contain any double colons then it's prefixed with C<DBD::Gofer::Transport::>. The C<dsn=$original_dsn> part I<must be the last element> of the DSN because everything after C<dsn=> is assumed to be the DSN that the remote DBI should use. The C<...> represents attributes that influence the operation of the Gofer driver or transport. These are described below or in the documentation of the transport module being used. =encoding ISO8859-1 =head1 DESCRIPTION DBD::Gofer is a DBI database driver that forwards requests to another DBI driver, usually in a separate process, often on a separate machine. It tries to be as transparent as possible so it appears that you are using the remote driver directly. DBD::Gofer is very similar to DBD::Proxy. The major difference is that with DBD::Gofer no state is maintained on the remote end. That means every request contains all the information needed to create the required state. (So, for example, every request includes the DSN to connect to.) Each request can be sent to any available server. The server executes the request and returns a single response that includes all the data. This is very similar to the way http works as a stateless protocol for the web. Each request from your web browser can be handled by a different web server process. =head2 Use Cases This may seem like pointless overhead but there are situations where this is a very good thing. Let's consider a specific case. Imagine using DBD::Gofer with an http transport. Your application calls connect(), prepare("select * from table where foo=?"), bind_param(), and execute(). At this point DBD::Gofer builds a request containing all the information about the method calls. It then uses the httpd transport to send that request to an apache web server. This 'dbi execute' web server executes the request (using DBI::Gofer::Execute and related modules) and builds a response that contains all the rows of data, if the statement returned any, along with all the attributes that describe the results, such as $sth->{NAME}. This response is sent back to DBD::Gofer which unpacks it and presents it to the application as if it had executed the statement itself. =head2 Advantages Okay, but you still don't see the point? Well let's consider what we've gained: =head3 Connection Pooling and Throttling The 'dbi execute' web server leverages all the functionality of web infrastructure in terms of load balancing, high-availability, firewalls, access management, proxying, caching. At its most basic level you get a configurable pool of persistent database connections. =head3 Simple Scaling Got thousands of processes all trying to connect to the database? You can use DBD::Gofer to connect them to your smaller pool of 'dbi execute' web servers instead. =head3 Caching Client-side caching is as simple as adding "C<cache=1>" to the DSN. This feature alone can be worth using DBD::Gofer for. =head3 Fewer Network Round-trips DBD::Gofer sends as few requests as possible (dependent on the policy being used). =head3 Thin Clients / Unsupported Platforms You no longer need drivers for your database on every system. DBD::Gofer is pure perl. =head1 CONSTRAINTS There are some natural constraints imposed by the DBD::Gofer 'stateless' approach. But not many: =head2 You can't change database handle attributes after connect() You can't change database handle attributes after you've connected. Use the connect() call to specify all the attribute settings you want. This is because it's critical that when a request is complete the database handle is left in the same state it was when first connected. An exception is made for attributes with names starting "C<private_>": They can be set after connect() but the change is only applied locally. =head2 You can't change statement handle attributes after prepare() You can't change statement handle attributes after prepare. An exception is made for attributes with names starting "C<private_>": They can be set after prepare() but the change is only applied locally. =head2 You can't use transactions AutoCommit only. Transactions aren't supported. (In theory transactions could be supported when using a transport that maintains a connection, like C<stream> does. If you're interested in this please get in touch via dbi-dev@perl.org) =head2 You can't call driver-private sth methods But that's rarely needed anyway. =head1 GENERAL CAVEATS A few important things to keep in mind when using DBD::Gofer: =head2 Temporary tables, locks, and other per-connection persistent state You shouldn't expect any per-session state to persist between requests. This includes locks and temporary tables. Because the server-side may execute your requests via a different database connections, you can't rely on any per-connection persistent state, such as temporary tables, being available from one request to the next. This is an easy trap to fall into. A good way to check for this is to test your code with a Gofer policy package that sets the C<connect_method> policy to 'connect' to force a new connection for each request. The C<pedantic> policy does this. =head2 Driver-private Database Handle Attributes Some driver-private dbh attributes may not be available if the driver has not implemented the private_attribute_info() method (added in DBI 1.54). =head2 Driver-private Statement Handle Attributes Driver-private sth attributes can be set in the prepare() call. TODO Some driver-private sth attributes may not be available if the driver has not implemented the private_attribute_info() method (added in DBI 1.54). =head2 Multiple Resultsets Multiple resultsets are supported only if the driver supports the more_results() method (an exception is made for DBD::Sybase). =head2 Statement activity that also updates dbh attributes Some drivers may update one or more dbh attributes after performing activity on a child sth. For example, DBD::mysql provides $dbh->{mysql_insertid} in addition to $sth->{mysql_insertid}. Currently mysql_insertid is supported via a hack but a more general mechanism is needed for other drivers to use. =head2 Methods that report an error always return undef With DBD::Gofer, a method that sets an error always return an undef or empty list. That shouldn't be a problem in practice because the DBI doesn't define any methods that return meaningful values while also reporting an error. =head2 Subclassing only applies to client-side The RootClass and DbTypeSubclass attributes are not passed to the Gofer server. =head1 CAVEATS FOR SPECIFIC METHODS =head2 last_insert_id To enable use of last_insert_id you need to indicate to DBD::Gofer that you'd like to use it. You do that my adding a C<go_last_insert_id_args> attribute to the do() or prepare() method calls. For example: $dbh->do($sql, { go_last_insert_id_args => [...] }); or $sth = $dbh->prepare($sql, { go_last_insert_id_args => [...] }); The array reference should contains the args that you want passed to the last_insert_id() method. =head2 execute_for_fetch The array methods bind_param_array() and execute_array() are supported. When execute_array() is called the data is serialized and executed in a single round-trip to the Gofer server. This makes it very fast, but requires enough memory to store all the serialized data. The execute_for_fetch() method currently isn't optimised, it uses the DBI fallback behaviour of executing each tuple individually. (It could be implemented as a wrapper for execute_array() - patches welcome.) =head1 TRANSPORTS DBD::Gofer doesn't concern itself with transporting requests and responses to and fro. For that it uses special Gofer transport modules. Gofer transport modules usually come in pairs: one for the 'client' DBD::Gofer driver to use and one for the remote 'server' end. They have very similar names: DBD::Gofer::Transport::<foo> DBI::Gofer::Transport::<foo> Sometimes the transports on the DBD and DBI sides may have different names. For example DBD::Gofer::Transport::http is typically used with DBI::Gofer::Transport::mod_perl (DBD::Gofer::Transport::http and DBI::Gofer::Transport::mod_perl modules are part of the GoferTransport-http distribution). =head2 Bundled Transports Several transport modules are provided with DBD::Gofer: =head3 null The null transport is the simplest of them all. It doesn't actually transport the request anywhere. It just serializes (freezes) the request into a string, then thaws it back into a data structure before passing it to DBI::Gofer::Execute to execute. The same freeze and thaw is applied to the results. The null transport is the best way to test if your application will work with Gofer. Just set the DBI_AUTOPROXY environment variable to "C<dbi:Gofer:transport=null;policy=pedantic>" (see L</Using DBI_AUTOPROXY> below) and run your application, or ideally its test suite, as usual. It doesn't take any parameters. =head3 pipeone The pipeone transport launches a subprocess for each request. It passes in the request and reads the response. The fact that a new subprocess is started for each request ensures that the server side is truly stateless. While this does make the transport I<very> slow, it is useful as a way to test that your application doesn't depend on per-connection state, such as temporary tables, persisting between requests. It's also useful both as a proof of concept and as a base class for the stream driver. =head3 stream The stream driver also launches a subprocess and writes requests and reads responses, like the pipeone transport. In this case, however, the subprocess is expected to handle more that one request. (Though it will be automatically restarted if it exits.) This is the first transport that is truly useful because it can launch the subprocess on a remote machine using C<ssh>. This means you can now use DBD::Gofer to easily access any databases that's accessible from any system you can login to. You also get all the benefits of ssh, including encryption and optional compression. See L</Using DBI_AUTOPROXY> below for an example. =head2 Other Transports Implementing a Gofer transport is I<very> simple, and more transports are very welcome. Just take a look at any existing transports that are similar to your needs. =head3 http See the GoferTransport-http distribution on CPAN: http://search.cpan.org/dist/GoferTransport-http/ =head3 Gearman I know Ask Bjørn Hansen has implemented a transport for the C<gearman> distributed job system, though it's not on CPAN at the time of writing this. =head1 CONNECTING Simply prefix your existing DSN with "C<dbi:Gofer:transport=$transport;dsn=>" where $transport is the name of the Gofer transport you want to use (see L</TRANSPORTS>). The C<transport> and C<dsn> attributes must be specified and the C<dsn> attributes must be last. Other attributes can be specified in the DSN to configure DBD::Gofer and/or the Gofer transport module being used. The main attributes after C<transport>, are C<url> and C<policy>. These and other attributes are described below. =head2 Using DBI_AUTOPROXY The simplest way to try out DBD::Gofer is to set the DBI_AUTOPROXY environment variable. In this case you don't include the C<dsn=> part. For example: export DBI_AUTOPROXY="dbi:Gofer:transport=null" or, for a more useful example, try: export DBI_AUTOPROXY="dbi:Gofer:transport=stream;url=ssh:user@example.com" =head2 Connection Attributes These attributes can be specified in the DSN. They can also be passed in the \%attr parameter of the DBI connect method by adding a "C<go_>" prefix to the name. =head3 transport Specifies the Gofer transport class to use. Required. See L</TRANSPORTS> above. If the value does not include C<::> then "C<DBD::Gofer::Transport::>" is prefixed. The transport object can be accessed via $h->{go_transport}. =head3 dsn Specifies the DSN for the remote side to connect to. Required, and must be last. =head3 url Used to tell the transport where to connect to. The exact form of the value depends on the transport used. =head3 policy Specifies the policy to use. See L</CONFIGURING BEHAVIOUR POLICY>. If the value does not include C<::> then "C<DBD::Gofer::Policy>" is prefixed. The policy object can be accessed via $h->{go_policy}. =head3 timeout Specifies a timeout, in seconds, to use when waiting for responses from the server side. =head3 retry_limit Specifies the number of times a failed request will be retried. Default is 0. =head3 retry_hook Specifies a code reference to be called to decide if a failed request should be retried. The code reference is called like this: $transport = $h->{go_transport}; $retry = $transport->go_retry_hook->($request, $response, $transport); If it returns true then the request will be retried, up to the C<retry_limit>. If it returns a false but defined value then the request will not be retried. If it returns undef then the default behaviour will be used, as if C<retry_hook> had not been specified. The default behaviour is to retry requests where $request->is_idempotent is true, or the error message matches C</induced by DBI_GOFER_RANDOM/>. =head3 cache Specifies that client-side caching should be performed. The value is the name of a cache class to use. Any class implementing get($key) and set($key, $value) methods can be used. That includes a great many powerful caching classes on CPAN, including the Cache and Cache::Cache distributions. You can use "C<cache=1>" is a shortcut for "C<cache=DBI::Util::CacheMemory>". See L<DBI::Util::CacheMemory> for a description of this simple fast default cache. The cache object can be accessed via $h->go_cache. For example: $dbh->go_cache->clear; # free up memory being used by the cache The cache keys are the frozen (serialized) requests, and the values are the frozen responses. The default behaviour is to only use the cache for requests where $request->is_idempotent is true (i.e., the dbh has the ReadOnly attribute set or the SQL statement is obviously a SELECT without a FOR UPDATE clause.) For even more control you can use the C<go_cache> attribute to pass in an instantiated cache object. Individual methods, including prepare(), can also specify alternative caches via the C<go_cache> attribute. For example, to specify no caching for a particular query, you could use $sth = $dbh->prepare( $sql, { go_cache => 0 } ); This can be used to implement different caching policies for different statements. It's interesting to note that DBD::Gofer can be used to add client-side caching to any (gofer compatible) application, with no code changes and no need for a gofer server. Just set the DBI_AUTOPROXY environment variable like this: DBI_AUTOPROXY='dbi:Gofer:transport=null;cache=1' =head1 CONFIGURING BEHAVIOUR POLICY DBD::Gofer supports a 'policy' mechanism that allows you to fine-tune the number of round-trips to the Gofer server. The policies are grouped into classes (which may be subclassed) and referenced by the name of the class. The L<DBD::Gofer::Policy::Base> class is the base class for all the policy packages and describes all the available policies. Three policy packages are supplied with DBD::Gofer: L<DBD::Gofer::Policy::pedantic> is most 'transparent' but slowest because it makes more round-trips to the Gofer server. L<DBD::Gofer::Policy::classic> is a reasonable compromise - it's the default policy. L<DBD::Gofer::Policy::rush> is fastest, but may require code changes in your applications. Generally the default C<classic> policy is fine. When first testing an existing application with Gofer it is a good idea to start with the C<pedantic> policy first and then switch to C<classic> or a custom policy, for final testing. =head1 AUTHOR Tim Bunce, L<http://www.tim.bunce.name> =head1 LICENCE AND COPYRIGHT Copyright (c) 2007, Tim Bunce, Ireland. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic>. =head1 ACKNOWLEDGEMENTS The development of DBD::Gofer and related modules was sponsored by Shopzilla.com (L<http://Shopzilla.com>), where I currently work. =head1 SEE ALSO L<DBI::Gofer::Request>, L<DBI::Gofer::Response>, L<DBI::Gofer::Execute>. L<DBI::Gofer::Transport::Base>, L<DBD::Gofer::Policy::Base>. L<DBI> =head1 Caveats for specific drivers This section aims to record issues to be aware of when using Gofer with specific drivers. It usually only documents issues that are not natural consequences of the limitations of the Gofer approach - as documented above. =head1 TODO This is just a random brain dump... (There's more in the source of the Changes file, not the pod) Document policy mechanism Add mechanism for transports to list config params and for Gofer to apply any that match (and warn if any left over?) Driver-private sth attributes - set via prepare() - change DBI spec add hooks into transport base class for checking & updating a result set cache ie via a standard cache interface such as: http://search.cpan.org/~robm/Cache-FastMmap/FastMmap.pm http://search.cpan.org/~bradfitz/Cache-Memcached/lib/Cache/Memcached.pm http://search.cpan.org/~dclinton/Cache-Cache/ http://search.cpan.org/~cleishman/Cache/ Also caching instructions could be passed through the httpd transport layer in such a way that appropriate http cache headers are added to the results so that web caches (squid etc) could be used to implement the caching. (MUST require the use of GET rather than POST requests.) Rework handling of installed_methods to not piggyback on dbh_attributes? Perhaps support transactions for transports where it's possible (ie null and stream)? Would make stream transport (ie ssh) more useful to more people. Make sth_result_attr more like dbh_attributes (using '*' etc) Add @val = FETCH_many(@names) to DBI in C and use in Gofer/Execute? Implement _new_sth in C. =cut DBD/ExampleP.pm 0000644 00000030175 15037233336 0007221 0 ustar 00 { package DBD::ExampleP; use strict; use Symbol; use DBI qw(:sql_types); require File::Spec; our (@EXPORT,$VERSION,@statnames,%statnames,@stattypes,%stattypes, @statprec,%statprec,$drh,); @EXPORT = qw(); # Do NOT @EXPORT anything. $VERSION = "12.014311"; # $Id: ExampleP.pm 14310 2010-08-02 06:35:25Z Jens $ # # Copyright (c) 1994,1997,1998 Tim Bunce # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. @statnames = qw(dev ino mode nlink uid gid rdev size atime mtime ctime blksize blocks name); @statnames{@statnames} = (0 .. @statnames-1); @stattypes = (SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_INTEGER, SQL_VARCHAR); @stattypes{@statnames} = @stattypes; @statprec = ((10) x (@statnames-1), 1024); @statprec{@statnames} = @statprec; die unless @statnames == @stattypes; die unless @statprec == @stattypes; $drh = undef; # holds driver handle once initialised #$gensym = "SYM000"; # used by st::execute() for filehandles sub driver{ return $drh if $drh; my($class, $attr) = @_; $class .= "::dr"; ($drh) = DBI::_new_drh($class, { 'Name' => 'ExampleP', 'Version' => $VERSION, 'Attribution' => 'DBD Example Perl stub by Tim Bunce', }, ['example implementors private data '.__PACKAGE__]); $drh; } sub CLONE { undef $drh; } } { package DBD::ExampleP::dr; # ====== DRIVER ====== $imp_data_size = 0; use strict; sub connect { # normally overridden, but a handy default my($drh, $dbname, $user, $auth)= @_; my ($outer, $dbh) = DBI::_new_dbh($drh, { Name => $dbname, examplep_private_dbh_attrib => 42, # an example, for testing }); $dbh->{examplep_get_info} = { 29 => '"', # SQL_IDENTIFIER_QUOTE_CHAR 41 => '.', # SQL_CATALOG_NAME_SEPARATOR 114 => 1, # SQL_CATALOG_LOCATION }; #$dbh->{Name} = $dbname; $dbh->STORE('Active', 1); return $outer; } sub data_sources { return ("dbi:ExampleP:dir=."); # possibly usefully meaningless } } { package DBD::ExampleP::db; # ====== DATABASE ====== $imp_data_size = 0; use strict; sub prepare { my($dbh, $statement)= @_; my @fields; my($fields, $dir) = $statement =~ m/^\s*select\s+(.*?)\s+from\s+(\S*)/i; if (defined $fields and defined $dir) { @fields = ($fields eq '*') ? keys %DBD::ExampleP::statnames : split(/\s*,\s*/, $fields); } else { return $dbh->set_err($DBI::stderr, "Syntax error in select statement (\"$statement\")") unless $statement =~ m/^\s*set\s+/; # the SET syntax is just a hack so the ExampleP driver can # be used to test non-select statements. # Now we have DBI::DBM etc., ExampleP should be deprecated } my ($outer, $sth) = DBI::_new_sth($dbh, { 'Statement' => $statement, examplep_private_sth_attrib => 24, # an example, for testing }, ['example implementors private data '.__PACKAGE__]); my @bad = map { defined $DBD::ExampleP::statnames{$_} ? () : $_ } @fields; return $dbh->set_err($DBI::stderr, "Unknown field names: @bad") if @bad; $outer->STORE('NUM_OF_FIELDS' => scalar(@fields)); $sth->{examplep_ex_dir} = $dir if defined($dir) && $dir !~ /\?/; $outer->STORE('NUM_OF_PARAMS' => ($dir) ? $dir =~ tr/?/?/ : 0); if (@fields) { $outer->STORE('NAME' => \@fields); $outer->STORE('NULLABLE' => [ (0) x @fields ]); $outer->STORE('SCALE' => [ (0) x @fields ]); } $outer; } sub table_info { my $dbh = shift; my ($catalog, $schema, $table, $type) = @_; my @types = split(/["']*,["']/, $type || 'TABLE'); my %types = map { $_=>$_ } @types; # Return a list of all subdirectories my $dh = Symbol::gensym(); # "DBD::ExampleP::".++$DBD::ExampleP::gensym; my $dir = $catalog || File::Spec->curdir(); my @list; if ($types{VIEW}) { # for use by test harness push @list, [ undef, "schema", "table", 'VIEW', undef ]; push @list, [ undef, "sch-ema", "table", 'VIEW', undef ]; push @list, [ undef, "schema", "ta-ble", 'VIEW', undef ]; push @list, [ undef, "sch ema", "table", 'VIEW', undef ]; push @list, [ undef, "schema", "ta ble", 'VIEW', undef ]; } if ($types{TABLE}) { no strict 'refs'; opendir($dh, $dir) or return $dbh->set_err(int($!), "Failed to open directory $dir: $!"); while (defined(my $item = readdir($dh))) { if ($^O eq 'VMS') { # if on VMS then avoid warnings from catdir if you use a file # (not a dir) as the item below next if $item !~ /\.dir$/oi; } my $file = File::Spec->catdir($dir,$item); next unless -d $file; my($dev, $ino, $mode, $nlink, $uid) = lstat($file); my $pwnam = undef; # eval { scalar(getpwnam($uid)) } || $uid; push @list, [ $dir, $pwnam, $item, 'TABLE', undef ]; } close($dh); } # We would like to simply do a DBI->connect() here. However, # this is wrong if we are in a subclass like DBI::ProxyServer. $dbh->{'dbd_sponge_dbh'} ||= DBI->connect("DBI:Sponge:", '','') or return $dbh->set_err($DBI::err, "Failed to connect to DBI::Sponge: $DBI::errstr"); my $attr = { 'rows' => \@list, 'NUM_OF_FIELDS' => 5, 'NAME' => ['TABLE_CAT', 'TABLE_SCHEM', 'TABLE_NAME', 'TABLE_TYPE', 'REMARKS'], 'TYPE' => [DBI::SQL_VARCHAR(), DBI::SQL_VARCHAR(), DBI::SQL_VARCHAR(), DBI::SQL_VARCHAR(), DBI::SQL_VARCHAR() ], 'NULLABLE' => [1, 1, 1, 1, 1] }; my $sdbh = $dbh->{'dbd_sponge_dbh'}; my $sth = $sdbh->prepare("SHOW TABLES FROM $dir", $attr) or return $dbh->set_err($sdbh->err(), $sdbh->errstr()); $sth; } sub type_info_all { my ($dbh) = @_; my $ti = [ { TYPE_NAME => 0, DATA_TYPE => 1, COLUMN_SIZE => 2, LITERAL_PREFIX => 3, LITERAL_SUFFIX => 4, CREATE_PARAMS => 5, NULLABLE => 6, CASE_SENSITIVE => 7, SEARCHABLE => 8, UNSIGNED_ATTRIBUTE=> 9, FIXED_PREC_SCALE=> 10, AUTO_UNIQUE_VALUE => 11, LOCAL_TYPE_NAME => 12, MINIMUM_SCALE => 13, MAXIMUM_SCALE => 14, }, [ 'VARCHAR', DBI::SQL_VARCHAR, 1024, "'","'", undef, 0, 1, 1, 0, 0,0,undef,0,0 ], [ 'INTEGER', DBI::SQL_INTEGER, 10, "","", undef, 0, 0, 1, 0, 0,0,undef,0,0 ], ]; return $ti; } sub ping { (shift->FETCH('Active')) ? 2 : 0; # the value 2 is checked for by t/80proxy.t } sub disconnect { shift->STORE(Active => 0); return 1; } sub get_info { my ($dbh, $info_type) = @_; return $dbh->{examplep_get_info}->{$info_type}; } sub FETCH { my ($dbh, $attrib) = @_; # In reality this would interrogate the database engine to # either return dynamic values that cannot be precomputed # or fetch and cache attribute values too expensive to prefetch. # else pass up to DBI to handle return $INC{"DBD/ExampleP.pm"} if $attrib eq 'example_driver_path'; return $dbh->SUPER::FETCH($attrib); } sub STORE { my ($dbh, $attrib, $value) = @_; # store only known attributes else pass up to DBI to handle if ($attrib eq 'examplep_set_err') { # a fake attribute to enable a test case where STORE issues a warning $dbh->set_err($value, $value); return; } if ($attrib eq 'AutoCommit') { # convert AutoCommit values to magic ones to let DBI # know that the driver has 'handled' the AutoCommit attribute $value = ($value) ? -901 : -900; } return $dbh->{$attrib} = $value if $attrib =~ /^examplep_/; return $dbh->SUPER::STORE($attrib, $value); } sub DESTROY { my $dbh = shift; $dbh->disconnect if $dbh->FETCH('Active'); undef } # This is an example to demonstrate the use of driver-specific # methods via $dbh->func(). # Use it as follows: # my @tables = $dbh->func($re, 'examplep_tables'); # # Returns all the tables that match the regular expression $re. sub examplep_tables { my $dbh = shift; my $re = shift; grep { $_ =~ /$re/ } $dbh->tables(); } sub parse_trace_flag { my ($h, $name) = @_; return 0x01000000 if $name eq 'foo'; return 0x02000000 if $name eq 'bar'; return 0x04000000 if $name eq 'baz'; return 0x08000000 if $name eq 'boo'; return 0x10000000 if $name eq 'bop'; return $h->SUPER::parse_trace_flag($name); } sub private_attribute_info { return { example_driver_path => undef }; } } { package DBD::ExampleP::st; # ====== STATEMENT ====== $imp_data_size = 0; use strict; no strict 'refs'; # cause problems with filehandles sub bind_param { my($sth, $param, $value, $attribs) = @_; $sth->{'dbd_param'}->[$param-1] = $value; return 1; } sub execute { my($sth, @dir) = @_; my $dir; if (@dir) { $sth->bind_param($_, $dir[$_-1]) or return foreach (1..@dir); } my $dbd_param = $sth->{'dbd_param'} || []; return $sth->set_err(2, @$dbd_param." values bound when $sth->{NUM_OF_PARAMS} expected") unless @$dbd_param == $sth->{NUM_OF_PARAMS}; return 0 unless $sth->{NUM_OF_FIELDS}; # not a select $dir = $dbd_param->[0] || $sth->{examplep_ex_dir}; return $sth->set_err(2, "No bind parameter supplied") unless defined $dir; $sth->finish; # # If the users asks for directory "long_list_4532", then we fake a # directory with files "file4351", "file4350", ..., "file0". # This is a special case used for testing, especially DBD::Proxy. # if ($dir =~ /^long_list_(\d+)$/) { $sth->{dbd_dir} = [ $1 ]; # array ref indicates special mode $sth->{dbd_datahandle} = undef; } else { $sth->{dbd_dir} = $dir; my $sym = Symbol::gensym(); # "DBD::ExampleP::".++$DBD::ExampleP::gensym; opendir($sym, $dir) or return $sth->set_err(2, "opendir($dir): $!"); $sth->{dbd_datahandle} = $sym; } $sth->STORE(Active => 1); return 1; } sub fetch { my $sth = shift; my $dir = $sth->{dbd_dir}; my %s; if (ref $dir) { # special fake-data test mode my $num = $dir->[0]--; unless ($num > 0) { $sth->finish(); return; } my $time = time; @s{@DBD::ExampleP::statnames} = ( 2051, 1000+$num, 0644, 2, $>, $), 0, 1024, $time, $time, $time, 512, 2, "file$num") } else { # normal mode my $dh = $sth->{dbd_datahandle} or return $sth->set_err($DBI::stderr, "fetch without successful execute"); my $f = readdir($dh); unless ($f) { $sth->finish; return; } # untaint $f so that we can use this for DBI taint tests ($f) = ($f =~ m/^(.*)$/); my $file = File::Spec->catfile($dir, $f); # put in all the data fields @s{ @DBD::ExampleP::statnames } = (lstat($file), $f); } # return just what fields the query asks for my @new = @s{ @{$sth->{NAME}} }; return $sth->_set_fbav(\@new); } *fetchrow_arrayref = \&fetch; sub finish { my $sth = shift; closedir($sth->{dbd_datahandle}) if $sth->{dbd_datahandle}; $sth->{dbd_datahandle} = undef; $sth->{dbd_dir} = undef; $sth->SUPER::finish(); return 1; } sub FETCH { my ($sth, $attrib) = @_; # In reality this would interrogate the database engine to # either return dynamic values that cannot be precomputed # or fetch and cache attribute values too expensive to prefetch. if ($attrib eq 'TYPE'){ return [ @DBD::ExampleP::stattypes{ @{ $sth->FETCH(q{NAME_lc}) } } ]; } elsif ($attrib eq 'PRECISION'){ return [ @DBD::ExampleP::statprec{ @{ $sth->FETCH(q{NAME_lc}) } } ]; } elsif ($attrib eq 'ParamValues') { my $dbd_param = $sth->{dbd_param} || []; my %pv = map { $_ => $dbd_param->[$_-1] } 1..@$dbd_param; return \%pv; } # else pass up to DBI to handle return $sth->SUPER::FETCH($attrib); } sub STORE { my ($sth, $attrib, $value) = @_; # would normally validate and only store known attributes # else pass up to DBI to handle return $sth->{$attrib} = $value if $attrib eq 'NAME' or $attrib eq 'NULLABLE' or $attrib eq 'SCALE' or $attrib eq 'PRECISION'; return $sth->SUPER::STORE($attrib, $value); } *parse_trace_flag = \&DBD::ExampleP::db::parse_trace_flag; } 1; # vim: sw=4:ts=8 DBD/File/HowTo.pod 0000644 00000011624 15037233336 0007571 0 ustar 00 =head1 NAME DBD::File::HowTo - Guide to create DBD::File based driver =head1 SYNOPSIS perldoc DBD::File::HowTo perldoc DBI perldoc DBI::DBD perldoc DBD::File::Developers perldoc DBI::DBD::SqlEngine::Developers perldoc DBI::DBD::SqlEngine perldoc SQL::Eval perldoc DBI::DBD::SqlEngine::HowTo perldoc SQL::Statement::Embed perldoc DBD::File perldoc DBD::File::HowTo perldoc DBD::File::Developers =head1 DESCRIPTION This document provides a step-by-step guide, how to create a new C<DBD::File> based DBD. It expects that you carefully read the L<DBI> documentation and that you're familiar with L<DBI::DBD> and had read and understood L<DBD::ExampleP>. This document addresses experienced developers who are really sure that they need to invest time when writing a new DBI Driver. Writing a DBI Driver is neither a weekend project nor an easy job for hobby coders after work. Expect one or two man-month of time for the first start. Those who are still reading, should be able to sing the rules of L<DBI::DBD/CREATING A NEW DRIVER>. Of course, DBD::File is a DBI::DBD::SqlEngine and you surely read L<DBI::DBD::SqlEngine::HowTo> before continuing here. =head1 CREATING DRIVER CLASSES Do you have an entry in DBI's DBD registry? For this guide, a prefix of C<foo_> is assumed. =head2 Sample Skeleton package DBD::Foo; use strict; use warnings; use vars qw(@ISA $VERSION); use base qw(DBD::File); use DBI (); $VERSION = "0.001"; package DBD::Foo::dr; use vars qw(@ISA $imp_data_size); @ISA = qw(DBD::File::dr); $imp_data_size = 0; package DBD::Foo::db; use vars qw(@ISA $imp_data_size); @ISA = qw(DBD::File::db); $imp_data_size = 0; package DBD::Foo::st; use vars qw(@ISA $imp_data_size); @ISA = qw(DBD::File::st); $imp_data_size = 0; package DBD::Foo::Statement; use vars qw(@ISA); @ISA = qw(DBD::File::Statement); package DBD::Foo::Table; use vars qw(@ISA); @ISA = qw(DBD::File::Table); 1; Tiny, eh? And all you have now is a DBD named foo which will is able to deal with temporary tables, as long as you use L<SQL::Statement>. In L<DBI::SQL::Nano> environments, this DBD can do nothing. =head2 Start over Based on L<DBI::DBD::SqlEngine::HowTo>, we're now having a driver which could do basic things. Of course, it should now derive from DBD::File instead of DBI::DBD::SqlEngine, shouldn't it? DBD::File extends DBI::DBD::SqlEngine to deal with any kind of files. In principle, the only extensions required are to the table class: package DBD::Foo::Table; sub bootstrap_table_meta { my ( $self, $dbh, $meta, $table ) = @_; # initialize all $meta attributes which might be relevant for # file2table return $self->SUPER::bootstrap_table_meta($dbh, $meta, $table); } sub init_table_meta { my ( $self, $dbh, $meta, $table ) = @_; # called after $meta contains the results from file2table # initialize all missing $meta attributes $self->SUPER::init_table_meta( $dbh, $meta, $table ); } In case C<DBD::File::Table::open_file> doesn't open the files as the driver needs that, override it! sub open_file { my ( $self, $meta, $attrs, $flags ) = @_; # ensure that $meta->{f_dontopen} is set $self->SUPER::open_file( $meta, $attrs, $flags ); # now do what ever needs to be done } Combined with the methods implemented using the L<SQL::Statement::Embed> guide, the table is full working and you could try a start over. =head2 User comfort C<DBD::File> since C<0.39> consolidates all persistent meta data of a table into a single structure stored in C<< $dbh->{f_meta} >>. With C<DBD::File> version C<0.41> and C<DBI::DBD::SqlEngine> version C<0.05>, this consolidation moves to L<DBI::DBD::SqlEngine>. It's still the C<< $dbh->{$drv_prefix . "_meta"} >> attribute which cares, so what you learned at this place before, is still valid. sub init_valid_attributes { my $dbh = $_[0]; $dbh->SUPER::init_valid_attributes (); $dbh->{foo_valid_attrs} = { ... }; $dbh->{foo_readonly_attrs} = { ... }; $dbh->{foo_meta} = "foo_tables"; return $dbh; } See updates at L<DBI::DBD::SqlEngine::HowTo/User comfort>. =head2 Testing Now you should have your own DBD::File based driver. Was easy, wasn't it? But does it work well? Prove it by writing tests and remember to use dbd_edit_mm_attribs from L<DBI::DBD> to ensure testing even rare cases. =head1 AUTHOR This guide is written by Jens Rehsack. DBD::File is written by Jochen Wiedmann and Jeff Zucker. The module DBD::File is currently maintained by H.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com > =head1 COPYRIGHT AND LICENSE Copyright (C) 2010 by H.Merijn Brand & Jens Rehsack All rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =cut DBD/File/Developers.pod 0000644 00000050166 15037233336 0010645 0 ustar 00 =head1 NAME DBD::File::Developers - Developers documentation for DBD::File =head1 SYNOPSIS package DBD::myDriver; use base qw( DBD::File ); sub driver { ... my $drh = $proto->SUPER::driver ($attr); ... return $drh->{class}; } sub CLONE { ... } package DBD::myDriver::dr; @ISA = qw( DBD::File::dr ); sub data_sources { ... } ... package DBD::myDriver::db; @ISA = qw( DBD::File::db ); sub init_valid_attributes { ... } sub init_default_attributes { ... } sub set_versions { ... } sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; ... } sub validate_FETCH_attr { my ($dbh, $attrib) = @_; ... } sub get_myd_versions { ... } package DBD::myDriver::st; @ISA = qw( DBD::File::st ); sub FETCH { ... } sub STORE { ... } package DBD::myDriver::Statement; @ISA = qw( DBD::File::Statement ); package DBD::myDriver::Table; @ISA = qw( DBD::File::Table ); my %reset_on_modify = ( myd_abc => "myd_foo", myd_mno => "myd_bar", ); __PACKAGE__->register_reset_on_modify (\%reset_on_modify); my %compat_map = ( abc => 'foo_abc', xyz => 'foo_xyz', ); __PACKAGE__->register_compat_map (\%compat_map); sub bootstrap_table_meta { ... } sub init_table_meta { ... } sub table_meta_attr_changed { ... } sub open_data { ... } sub fetch_row { ... } sub push_row { ... } sub push_names { ... } # optimize the SQL engine by add one or more of sub update_current_row { ... } # or sub update_specific_row { ... } # or sub update_one_row { ... } # or sub insert_new_row { ... } # or sub delete_current_row { ... } # or sub delete_one_row { ... } =head1 DESCRIPTION This document describes how DBD developers can write DBD::File based DBI drivers. It supplements L<DBI::DBD> and L<DBI::DBD::SqlEngine::Developers>, which you should read first. =head1 CLASSES Each DBI driver must provide a package global C<driver> method and three DBI related classes: =over 4 =item DBD::File::dr Driver package, contains the methods DBI calls indirectly via DBI interface: DBI->connect ('DBI:DBM:', undef, undef, {}) # invokes package DBD::DBM::dr; @DBD::DBM::dr::ISA = qw( DBD::File::dr ); sub connect ($$;$$$) { ... } Similar for C<< data_sources >> and C<< disconnect_all >>. Pure Perl DBI drivers derived from DBD::File do not usually need to override any of the methods provided through the DBD::XXX::dr package however if you need additional initialization in the connect method you may need to. =item DBD::File::db Contains the methods which are called through DBI database handles (C<< $dbh >>). e.g., $sth = $dbh->prepare ("select * from foo"); # returns the f_encoding setting for table foo $dbh->csv_get_meta ("foo", "f_encoding"); DBD::File provides the typical methods required here. Developers who write DBI drivers based on DBD::File need to override the methods C<< set_versions >> and C<< init_valid_attributes >>. =item DBD::File::st Contains the methods to deal with prepared statement handles. e.g., $sth->execute () or die $sth->errstr; =back =head2 DBD::File This is the main package containing the routines to initialize DBD::File based DBI drivers. Primarily the C<< DBD::File::driver >> method is invoked, either directly from DBI when the driver is initialized or from the derived class. package DBD::DBM; use base qw( DBD::File ); sub driver { my ($class, $attr) = @_; ... my $drh = $class->SUPER::driver ($attr); ... return $drh; } It is not necessary to implement your own driver method as long as additional initialization (e.g. installing more private driver methods) is not required. You do not need to call C<< setup_driver >> as DBD::File takes care of it. =head2 DBD::File::dr The driver package contains the methods DBI calls indirectly via the DBI interface (see L<DBI/DBI Class Methods>). DBD::File based DBI drivers usually do not need to implement anything here, it is enough to do the basic initialization: package DBD:XXX::dr; @DBD::XXX::dr::ISA = qw (DBD::File::dr); $DBD::XXX::dr::imp_data_size = 0; $DBD::XXX::dr::data_sources_attr = undef; $DBD::XXX::ATTRIBUTION = "DBD::XXX $DBD::XXX::VERSION by Hans Mustermann"; =head2 DBD::File::db This package defines the database methods, which are called via the DBI database handle C<< $dbh >>. Methods provided by DBD::File: =over 4 =item ping Simply returns the content of the C<< Active >> attribute. Override when your driver needs more complicated actions here. =item prepare Prepares a new SQL statement to execute. Returns a statement handle, C<< $sth >> - instance of the DBD:XXX::st. It is neither required nor recommended to override this method. =item FETCH Fetches an attribute of a DBI database object. Private handle attributes must have a prefix (this is mandatory). If a requested attribute is detected as a private attribute without a valid prefix, the driver prefix (written as C<$drv_prefix>) is added. The driver prefix is extracted from the attribute name and verified against C<< $dbh->{$drv_prefix . "valid_attrs"} >> (when it exists). If the requested attribute value is not listed as a valid attribute, this method croaks. If the attribute is valid and readonly (listed in C<< $dbh->{ $drv_prefix . "readonly_attrs" } >> when it exists), a real copy of the attribute value is returned. So it's not possible to modify C<f_valid_attrs> from outside of DBD::File::db or a derived class. =item STORE Stores a database private attribute. Private handle attributes must have a prefix (this is mandatory). If a requested attribute is detected as a private attribute without a valid prefix, the driver prefix (written as C<$drv_prefix>) is added. If the database handle has an attribute C<${drv_prefix}_valid_attrs> - for attribute names which are not listed in that hash, this method croaks. If the database handle has an attribute C<${drv_prefix}_readonly_attrs>, only attributes which are not listed there can be stored (once they are initialized). Trying to overwrite such an immutable attribute forces this method to croak. An example of a valid attributes list can be found in C<< DBD::File::db::init_valid_attributes >>. =item set_versions This method sets the attribute C<f_version> with the version of DBD::File. This method is called at the begin of the C<connect ()> phase. When overriding this method, do not forget to invoke the superior one. =item init_valid_attributes This method is called after the database handle is instantiated as the first attribute initialization. C<< DBD::File::db::init_valid_attributes >> initializes the attributes C<f_valid_attrs> and C<f_readonly_attrs>. When overriding this method, do not forget to invoke the superior one, preferably before doing anything else. Compatibility table attribute access must be initialized here to allow DBD::File to instantiate the map tie: # for DBD::CSV $dbh->{csv_meta} = "csv_tables"; # for DBD::DBM $dbh->{dbm_meta} = "dbm_tables"; # for DBD::AnyData $dbh->{ad_meta} = "ad_tables"; =item init_default_attributes This method is called after the database handle is instantiated to initialize the default attributes. C<< DBD::File::db::init_default_attributes >> initializes the attributes C<f_dir>, C<f_meta>, C<f_meta_map>, C<f_version>. When the derived implementor class provides the attribute to validate attributes (e.g. C<< $dbh->{dbm_valid_attrs} = {...}; >>) or the attribute containing the immutable attributes (e.g. C<< $dbh->{dbm_readonly_attrs} = {...}; >>), the attributes C<drv_valid_attrs>, C<drv_readonly_attrs>, C<drv_version> and C<drv_meta> are added (when available) to the list of valid and immutable attributes (where C<drv_> is interpreted as the driver prefix). If C<drv_meta> is set, an attribute with the name in C<drv_meta> is initialized providing restricted read/write access to the meta data of the tables using C<DBD::File::TieTables> in the first (table) level and C<DBD::File::TieMeta> for the meta attribute level. C<DBD::File::TieTables> uses C<DBD::DRV::Table::get_table_meta> to initialize the second level tied hash on FETCH/STORE. The C<DBD::File::TieMeta> class uses C<DBD::DRV::Table::get_table_meta_attr> to FETCH attribute values and C<DBD::DRV::Table::set_table_meta_attr> to STORE attribute values. This allows it to map meta attributes for compatibility reasons. =item get_single_table_meta =item get_file_meta Retrieve an attribute from a table's meta information. The method signature is C<< get_file_meta ($dbh, $table, $attr) >>. This method is called by the injected db handle method C<< ${drv_prefix}get_meta >>. While get_file_meta allows C<$table> or C<$attr> to be a list of tables or attributes to retrieve, get_single_table_meta allows only one table name and only one attribute name. A table name of C<'.'> (single dot) is interpreted as the default table and this will retrieve the appropriate attribute globally from the dbh. This has the same restrictions as C<< $dbh->{$attrib} >>. get_file_meta allows C<'+'> and C<'*'> as wildcards for table names and C<$table> being a regular expression matching against the table names (evaluated without the default table). The table name C<'*'> is I<all currently known tables, including the default one>. The table name C<'+'> is I<all table names which conform to ANSI file name restrictions> (/^[_A-Za-z0-9]+$/). The table meta information is retrieved using the get_table_meta and get_table_meta_attr methods of the table class of the implementation. =item set_single_table_meta =item set_file_meta Sets an attribute in a table's meta information. The method signature is C<< set_file_meta ($dbh, $table, $attr, $value) >>. This method is called by the injected db handle method C<< ${drv_prefix}set_meta >>. While set_file_meta allows C<$table> to be a list of tables and C<$attr> to be a hash of several attributes to set, set_single_table_meta allows only one table name and only one attribute name/value pair. The wildcard characters for the table name are the same as for get_file_meta. The table meta information is updated using the get_table_meta and set_table_meta_attr methods of the table class of the implementation. =item clear_file_meta Clears all meta information cached about a table. The method signature is C<< clear_file_meta ($dbh, $table) >>. This method is called by the injected db handle method C<< ${drv_prefix}clear_meta >>. =back =head2 DBD::File::st Contains the methods to deal with prepared statement handles: =over 4 =item FETCH Fetches statement handle attributes. Supported attributes (for full overview see L<DBI/Statement Handle Attributes>) are C<NAME>, C<TYPE>, C<PRECISION> and C<NULLABLE> in case that SQL::Statement is used as SQL execution engine and a statement is successful prepared. When SQL::Statement has additional information about a table, those information are returned. Otherwise, the same defaults as in L<DBI::DBD::SqlEngine> are used. This method usually requires extending in a derived implementation. See L<DBD::CSV> or L<DBD::DBM> for some example. =back =head2 DBD::File::TableSource::FileSystem Provides data sources and table information on database driver and database handle level. package DBD::File::TableSource::FileSystem; sub data_sources ($;$) { my ($class, $drh, $attrs) = @_; ... } sub avail_tables { my ($class, $drh) = @_; ... } The C<data_sources> method is called when the user invokes any of the following: @ary = DBI->data_sources ($driver); @ary = DBI->data_sources ($driver, \%attr); @ary = $dbh->data_sources (); @ary = $dbh->data_sources (\%attr); The C<avail_tables> method is called when the user invokes any of the following: @names = $dbh->tables ($catalog, $schema, $table, $type); $sth = $dbh->table_info ($catalog, $schema, $table, $type); $sth = $dbh->table_info ($catalog, $schema, $table, $type, \%attr); $dbh->func ("list_tables"); Every time where an C<\%attr> argument can be specified, this C<\%attr> object's C<sql_table_source> attribute is preferred over the C<$dbh> attribute or the driver default. =head2 DBD::File::DataSource::Stream package DBD::File::DataSource::Stream; @DBD::File::DataSource::Stream::ISA = 'DBI::DBD::SqlEngine::DataSource'; sub complete_table_name { my ($self, $meta, $file, $respect_case) = @_; ... } Clears all meta attributes identifying a file: C<f_fqfn>, C<f_fqbn> and C<f_fqln>. The table name is set according to C<$respect_case> and C<< $meta->{sql_identifier_case} >> (SQL_IC_LOWER, SQL_IC_UPPER). package DBD::File::DataSource::Stream; sub apply_encoding { my ($self, $meta, $fn) = @_; ... } Applies the encoding from I<meta information> (C<< $meta->{f_encoding} >>) to the file handled opened in C<open_data>. package DBD::File::DataSource::Stream; sub open_data { my ($self, $meta, $attrs, $flags) = @_; ... } Opens (C<dup (2)>) the file handle provided in C<< $meta->{f_file} >>. package DBD::File::DataSource::Stream; sub can_flock { ... } Returns whether C<flock (2)> is available or not (avoids retesting in subclasses). =head2 DBD::File::DataSource::File package DBD::File::DataSource::File; sub complete_table_name ($$;$) { my ($self, $meta, $table, $respect_case) = @_; ... } The method C<complete_table_name> tries to map a filename to the associated table name. It is called with a partially filled meta structure for the resulting table containing at least the following attributes: C<< f_ext >>, C<< f_dir >>, C<< f_lockfile >> and C<< sql_identifier_case >>. If a file/table map can be found then this method sets the C<< f_fqfn >>, C<< f_fqbn >>, C<< f_fqln >> and C<< table_name >> attributes in the meta structure. If a map cannot be found the table name will be undef. package DBD::File::DataSource::File; sub open_data ($) { my ($self, $meta, $attrs, $flags) = @_; ... } Depending on the attributes set in the table's meta data, the following steps are performed. Unless C<< f_dontopen >> is set to a true value, C<< f_fqfn >> must contain the full qualified file name for the table to work on (file2table ensures this). The encoding in C<< f_encoding >> is applied if set and the file is opened. If C<<f_fqln >> (full qualified lock name) is set, this file is opened, too. Depending on the value in C<< f_lock >>, the appropriate lock is set on the opened data file or lock file. =head2 DBD::File::Statement Derives from DBI::SQL::Nano::Statement to provide following method: =over 4 =item open_table Implements the open_table method required by L<SQL::Statement> and L<DBI::SQL::Nano>. All the work for opening the file(s) belonging to the table is handled and parametrized in DBD::File::Table. Unless you intend to add anything to the following implementation, an empty DBD::XXX::Statement package satisfies DBD::File. sub open_table ($$$$$) { my ($self, $data, $table, $createMode, $lockMode) = @_; my $class = ref $self; $class =~ s/::Statement/::Table/; my $flags = { createMode => $createMode, lockMode => $lockMode, }; $self->{command} eq "DROP" and $flags->{dropMode} = 1; return $class->new ($data, { table => $table }, $flags); } # open_table =back =head2 DBD::File::Table Derives from DBI::SQL::Nano::Table and provides physical file access for the table data which are stored in the files. =over 4 =item bootstrap_table_meta Initializes a table meta structure. Can be safely overridden in a derived class, as long as the C<< SUPER >> method is called at the end of the overridden method. It copies the following attributes from the database into the table meta data C<< f_dir >>, C<< f_ext >>, C<< f_encoding >>, C<< f_lock >>, C<< f_schema >> and C<< f_lockfile >> and makes them sticky to the table. This method should be called before you attempt to map between file name and table name to ensure the correct directory, extension etc. are used. =item init_table_meta Initializes more attributes of the table meta data - usually more expensive ones (e.g. those which require class instantiations) - when the file name and the table name could mapped. =item get_table_meta Returns the table meta data. If there are none for the required table, a new one is initialized. When it fails, nothing is returned. On success, the name of the table and the meta data structure is returned. =item get_table_meta_attr Returns a single attribute from the table meta data. If the attribute name appears in C<%compat_map>, the attribute name is updated from there. =item set_table_meta_attr Sets a single attribute in the table meta data. If the attribute name appears in C<%compat_map>, the attribute name is updated from there. =item table_meta_attr_changed Called when an attribute of the meta data is modified. If the modified attribute requires to reset a calculated attribute, the calculated attribute is reset (deleted from meta data structure) and the I<initialized> flag is removed, too. The decision is made based on C<%register_reset_on_modify>. =item register_reset_on_modify Allows C<set_table_meta_attr> to reset meta attributes when special attributes are modified. For DBD::File, modifying one of C<f_file>, C<f_dir>, C<f_ext> or C<f_lockfile> will reset C<f_fqfn>. DBD::DBM extends the list for C<dbm_type> and C<dbm_mldbm> to reset the value of C<dbm_tietype>. If your DBD has calculated values in the meta data area, then call C<register_reset_on_modify>: my %reset_on_modify = (xxx_foo => "xxx_bar"); __PACKAGE__->register_reset_on_modify (\%reset_on_modify); =item register_compat_map Allows C<get_table_meta_attr> and C<set_table_meta_attr> to update the attribute name to the current favored one: # from DBD::DBM my %compat_map = (dbm_ext => "f_ext"); __PACKAGE__->register_compat_map (\%compat_map); =item open_file Called to open the table's data file. Depending on the attributes set in the table's meta data, the following steps are performed. Unless C<< f_dontopen >> is set to a true value, C<< f_fqfn >> must contain the full qualified file name for the table to work on (file2table ensures this). The encoding in C<< f_encoding >> is applied if set and the file is opened. If C<<f_fqln >> (full qualified lock name) is set, this file is opened, too. Depending on the value in C<< f_lock >>, the appropriate lock is set on the opened data file or lock file. After this is done, a derived class might add more steps in an overridden C<< open_file >> method. =item new Instantiates the table. This is done in 3 steps: 1. get the table meta data 2. open the data file 3. bless the table data structure using inherited constructor new It is not recommended to override the constructor of the table class. Find a reasonable place to add you extensions in one of the above four methods. =item drop Implements the abstract table method for the C<< DROP >> command. Discards table meta data after all files belonging to the table are closed and unlinked. Overriding this method might be reasonable in very rare cases. =item seek Implements the abstract table method used when accessing the table from the engine. C<< seek >> is called every time the engine uses dumb algorithms for iterating over the table content. =item truncate Implements the abstract table method used when dumb table algorithms for C<< UPDATE >> or C<< DELETE >> need to truncate the table storage after the last written row. =back You should consult the documentation of C<< SQL::Eval::Table >> (see L<SQL::Eval>) to get more information about the abstract methods of the table's base class you have to override and a description of the table meta information expected by the SQL engines. =head1 AUTHOR The module DBD::File is currently maintained by H.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com > The original author is Jochen Wiedmann. =head1 COPYRIGHT AND LICENSE Copyright (C) 2010-2013 by H.Merijn Brand & Jens Rehsack All rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =cut DBD/File/Roadmap.pod 0000644 00000013473 15037233336 0010120 0 ustar 00 =head1 NAME DBD::File::Roadmap - Planned Enhancements for DBD::File and pure Perl DBD's Jens Rehsack - May 2010 =head1 SYNOPSIS This document gives a high level overview of the future of the DBD::File DBI driver and groundwork for pure Perl DBI drivers. The planned enhancements cover features, testing, performance, reliability, extensibility and more. =head1 CHANGES AND ENHANCEMENTS =head2 Features There are some features missing we would like to add, but there is no time plan: =over 4 =item LOCK TABLE The newly implemented internal common table meta storage area would allow us to implement LOCK TABLE support based on file system C<flock ()> support. =item Transaction support While DBD::AnyData recommends explicitly committing by importing and exporting tables, DBD::File might be enhanced in a future version to allow transparent transactions using the temporary tables of SQL::Statement as shadow (dirty) tables. Transaction support will heavily rely on lock table support. =item Data Dictionary Persistence SQL::Statement provides dictionary information when a "CREATE TABLE ..." statement is executed. This dictionary is preserved for some statement handle attribute fetches (as C<NULLABLE> or C<PRECISION>). It is planned to extend DBD::File to support data dictionaries to work on the tables in it. It is not planned to support one table in different dictionaries, but you can have several dictionaries in one directory. =item SQL Engine selecting on connect Currently the SQL engine selected is chosen during the loading of the module L<DBI::SQL::Nano>. Ideally end users should be able to select the engine used in C<< DBI->connect () >> with a special DBD::File attribute. =back Other points of view to the planned features (and more features for the SQL::Statement engine) are shown in L<SQL::Statement::Roadmap>. =head2 Testing DBD::File and the dependent DBD::DBM requires a lot more automated tests covering API stability and compatibility with optional modules like SQL::Statement. =head2 Performance Several arguments for support of features like indexes on columns and cursors are made for DBD::CSV (which is a DBD::File based driver, too). Similar arguments could be made for DBD::DBM, DBD::AnyData, DBD::RAM or DBD::PO etc. To improve the performance of the underlying SQL engines, a clean re-implementation seems to be required. Currently both engines are prematurely optimized and therefore it is not trivial to provide further optimization without the risk of breaking existing features. Join the DBI developers IRC channel at L<irc://irc.perl.org/dbi> to participate or post to the DBI Developers Mailing List. =head2 Reliability DBD::File currently lacks the following points: =over 4 =item duplicate table names It is currently possible to access a table quoted with a relative path (a) and additionally using an absolute path (b). If (a) and (b) are the same file that is not recognized (except for flock protection handled by the Operating System) and two independent tables are handled. =item invalid table names The current implementation does not prevent someone choosing a directory name as a physical file name for the table to open. =back =head2 Extensibility I (Jens Rehsack) have some (partially for example only) DBD's in mind: =over 4 =item DBD::Sys Derive DBD::Sys from a common code base shared with DBD::File which handles all the emulation DBI needs (as getinfo, SQL engine handling, ...) =item DBD::Dir Provide a DBD::File derived to work with fixed table definitions through the file system to demonstrate how DBI / Pure Perl DBDs could handle databases with hierarchical structures. =item DBD::Join Provide a DBI driver which is able to manage multiple connections to other Databases (as DBD::Multiplex), but allow them to point to different data sources and allow joins between the tables of them: # Example # Let table 'lsof' being a table in DBD::Sys giving a list of open files using lsof utility # Let table 'dir' being a atable from DBD::Dir $sth = $dbh->prepare( "select * from dir,lsof where path='/documents' and dir.entry = lsof.filename" ) $sth->execute(); # gives all open files in '/documents' ... # Let table 'filesys' a DBD::Sys table of known file systems on current host # Let table 'applications' a table of your Configuration Management Database # where current applications (relocatable, with mountpoints for filesystems) # are stored $sth = dbh->prepare( "select * from applications,filesys where " . "application.mountpoint = filesys.mountpoint and ". "filesys.mounted is true" ); $sth->execute(); # gives all currently mounted applications on this host =back =head1 PRIORITIES Our priorities are focused on current issues. Initially many new test cases for DBD::File and DBD::DBM should be added to the DBI test suite. After that some additional documentation on how to use the DBD::File API will be provided. Any additional priorities will come later and can be modified by (paying) users. =head1 RESOURCES AND CONTRIBUTIONS See L<http://dbi.perl.org/contributing> for I<how you can help>. If your company has benefited from DBI, please consider if it could make a donation to The Perl Foundation "DBI Development" fund at L<http://dbi.perl.org/donate> to secure future development. Alternatively, if your company would benefit from a specific new DBI feature, please consider sponsoring it's development through the options listed in the section "Commercial Support from the Author" on L<http://dbi.perl.org/support/>. Using such targeted financing allows you to contribute to DBI development and rapidly get something specific and directly valuable to you in return. My company also offers annual support contracts for the DBI, which provide another way to support the DBI and get something specific in return. Contact me for details. Thank you. =cut DBD/Mem.pm 0000644 00000023615 15037233336 0006225 0 ustar 00 # -*- perl -*- # # DBD::Mem - A DBI driver for in-memory tables # # This module is currently maintained by # # Jens Rehsack # # Copyright (C) 2016,2017 by Jens Rehsack # # All rights reserved. # # You may distribute this module under the terms of either the GNU # General Public License or the Artistic License, as specified in # the Perl README file. require 5.008; use strict; ################# package DBD::Mem; ################# use base qw( DBI::DBD::SqlEngine ); use vars qw($VERSION $ATTRIBUTION $drh); $VERSION = '0.001'; $ATTRIBUTION = 'DBD::Mem by Jens Rehsack'; # no need to have driver() unless you need private methods # sub driver ($;$) { my ( $class, $attr ) = @_; return $drh if ($drh); # do the real work in DBI::DBD::SqlEngine # $attr->{Attribution} = 'DBD::Mem by Jens Rehsack'; $drh = $class->SUPER::driver($attr); return $drh; } sub CLONE { undef $drh; } ##################### package DBD::Mem::dr; ##################### $DBD::Mem::dr::imp_data_size = 0; @DBD::Mem::dr::ISA = qw(DBI::DBD::SqlEngine::dr); # you could put some :dr private methods here # you may need to over-ride some DBI::DBD::SqlEngine::dr methods here # but you can probably get away with just letting it do the work # in most cases ##################### package DBD::Mem::db; ##################### $DBD::Mem::db::imp_data_size = 0; @DBD::Mem::db::ISA = qw(DBI::DBD::SqlEngine::db); use Carp qw/carp/; sub set_versions { my $this = $_[0]; $this->{mem_version} = $DBD::Mem::VERSION; return $this->SUPER::set_versions(); } sub init_valid_attributes { my $dbh = shift; # define valid private attributes # # attempts to set non-valid attrs in connect() or # with $dbh->{attr} will throw errors # # the attrs here *must* start with mem_ or foo_ # # see the STORE methods below for how to check these attrs # $dbh->{mem_valid_attrs} = { mem_version => 1, # verbose DBD::Mem version mem_valid_attrs => 1, # DBD::Mem::db valid attrs mem_readonly_attrs => 1, # DBD::Mem::db r/o attrs mem_meta => 1, # DBD::Mem public access for f_meta mem_tables => 1, # DBD::Mem public access for f_meta }; $dbh->{mem_readonly_attrs} = { mem_version => 1, # verbose DBD::Mem version mem_valid_attrs => 1, # DBD::Mem::db valid attrs mem_readonly_attrs => 1, # DBD::Mem::db r/o attrs mem_meta => 1, # DBD::Mem public access for f_meta }; $dbh->{mem_meta} = "mem_tables"; return $dbh->SUPER::init_valid_attributes(); } sub get_mem_versions { my ( $dbh, $table ) = @_; $table ||= ''; my $meta; my $class = $dbh->{ImplementorClass}; $class =~ s/::db$/::Table/; $table and ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 ); $meta or ( $meta = {} and $class->bootstrap_table_meta( $dbh, $meta, $table ) ); return sprintf( "%s using %s", $dbh->{mem_version}, $AnyData2::VERSION ); } package DBD::Mem::st; use strict; use warnings; our $imp_data_size = 0; our @ISA = qw(DBI::DBD::SqlEngine::st); ############################ package DBD::Mem::Statement; ############################ @DBD::Mem::Statement::ISA = qw(DBI::DBD::SqlEngine::Statement); sub open_table ($$$$$) { my ( $self, $data, $table, $createMode, $lockMode ) = @_; my $class = ref $self; $class =~ s/::Statement/::Table/; my $flags = { createMode => $createMode, lockMode => $lockMode, }; if( defined( $data->{Database}->{mem_table_data}->{$table} ) && $data->{Database}->{mem_table_data}->{$table}) { my $t = $data->{Database}->{mem_tables}->{$table}; $t->seek( $data, 0, 0 ); return $t; } return $self->SUPER::open_table($data, $table, $createMode, $lockMode); } # ====== DataSource ============================================================ package DBD::Mem::DataSource; use strict; use warnings; use Carp; @DBD::Mem::DataSource::ISA = "DBI::DBD::SqlEngine::DataSource"; sub complete_table_name ($$;$) { my ( $self, $meta, $table, $respect_case ) = @_; $table; } sub open_data ($) { my ( $self, $meta, $attrs, $flags ) = @_; defined $meta->{data_tbl} or $meta->{data_tbl} = []; } ######################## package DBD::Mem::Table; ######################## # shamelessly stolen from SQL::Statement::RAM use Carp qw/croak/; @DBD::Mem::Table::ISA = qw(DBI::DBD::SqlEngine::Table); use Carp qw(croak); sub new { #my ( $class, $tname, $col_names, $data_tbl ) = @_; my ( $class, $data, $attrs, $flags ) = @_; my $self = $class->SUPER::new($data, $attrs, $flags); my $meta = $self->{meta}; $self->{records} = $meta->{data_tbl}; $self->{index} = 0; $self; } sub bootstrap_table_meta { my ( $self, $dbh, $meta, $table ) = @_; defined $meta->{sql_data_source} or $meta->{sql_data_source} = "DBD::Mem::DataSource"; $meta; } sub fetch_row { my ( $self, $data ) = @_; return $self->{row} = ( $self->{records} and ( $self->{index} < scalar( @{ $self->{records} } ) ) ) ? [ @{ $self->{records}->[ $self->{index}++ ] } ] : undef; } sub push_row { my ( $self, $data, $fields ) = @_; my $currentRow = $self->{index}; $self->{index} = $currentRow + 1; $self->{records}->[$currentRow] = $fields; return 1; } sub truncate { my $self = shift; return splice @{ $self->{records} }, $self->{index}, 1; } sub push_names { my ( $self, $data, $names ) = @_; my $meta = $self->{meta}; $meta->{col_names} = $self->{col_names} = $names; $self->{org_col_names} = [ @{$names} ]; $self->{col_nums} = {}; $self->{col_nums}{ $names->[$_] } = $_ for ( 0 .. scalar @$names - 1 ); } sub drop ($) { my ($self, $data) = @_; delete $data->{Database}{sql_meta}{$self->{table}}; return 1; } # drop sub seek { my ( $self, $data, $pos, $whence ) = @_; return unless defined $self->{records}; my ($currentRow) = $self->{index}; if ( $whence == 0 ) { $currentRow = $pos; } elsif ( $whence == 1 ) { $currentRow += $pos; } elsif ( $whence == 2 ) { $currentRow = @{ $self->{records} } + $pos; } else { croak $self . "->seek: Illegal whence argument ($whence)"; } $currentRow < 0 and croak "Illegal row number: $currentRow"; $self->{index} = $currentRow; } 1; =head1 NAME DBD::Mem - a DBI driver for Mem & MLMem files =head1 SYNOPSIS use DBI; $dbh = DBI->connect('dbi:Mem:', undef, undef, {}); $dbh = DBI->connect('dbi:Mem:', undef, undef, {RaiseError => 1}); # or $dbh = DBI->connect('dbi:Mem:'); $dbh = DBI->connect('DBI:Mem(RaiseError=1):'); and other variations on connect() as shown in the L<DBI> docs and <DBI::DBD::SqlEngine metadata|DBI::DBD::SqlEngine/Metadata>. Use standard DBI prepare, execute, fetch, placeholders, etc., see L<QUICK START> for an example. =head1 DESCRIPTION DBD::Mem is a database management system that works right out of the box. If you have a standard installation of Perl and DBI you can begin creating, accessing, and modifying simple database tables without any further modules. You can add other modules (e.g., SQL::Statement) for improved functionality. DBD::Mem doesn't store any data persistently - all data has the lifetime of the instantiated C<$dbh>. The main reason to use DBD::Mem is to use extended features of L<SQL::Statement> where temporary tables are required. One can use DBD::Mem to simulate C<VIEWS> or sub-queries. Bundling C<DBD::Mem> with L<DBI> will allow us further compatibility checks of L<DBI::DBD::SqlEngine> beyond the capabilities of L<DBD::File> and L<DBD::DBM>. This will ensure DBI provided basis for drivers like L<DBD::AnyData2> or L<DBD::Amazon> are better prepared and tested for not-file based backends. =head2 Metadata There're no new meta data introduced by C<DBD::Mem>. See L<DBI::DBD::SqlEngine/Metadata> for full description. =head1 GETTING HELP, MAKING SUGGESTIONS, AND REPORTING BUGS If you need help installing or using DBD::Mem, please write to the DBI users mailing list at L<mailto:dbi-users@perl.org> or to the comp.lang.perl.modules newsgroup on usenet. I cannot always answer every question quickly but there are many on the mailing list or in the newsgroup who can. DBD developers for DBD's which rely on DBI::DBD::SqlEngine or DBD::Mem or use one of them as an example are suggested to join the DBI developers mailing list at L<mailto:dbi-dev@perl.org> and strongly encouraged to join our IRC channel at L<irc://irc.perl.org/dbi>. If you have suggestions, ideas for improvements, or bugs to report, please report a bug as described in DBI. Do not mail any of the authors directly, you might not get an answer. When reporting bugs, please send the output of C<< $dbh->mem_versions($table) >> for a table that exhibits the bug and as small a sample as you can make of the code that produces the bug. And of course, patches are welcome, too :-). If you need enhancements quickly, you can get commercial support as described at L<http://dbi.perl.org/support/> or you can contact Jens Rehsack at rehsack@cpan.org for commercial support. =head1 AUTHOR AND COPYRIGHT This module is written by Jens Rehsack < rehsack AT cpan.org >. Copyright (c) 2016- by Jens Rehsack, all rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =head1 SEE ALSO L<DBI> for the Database interface of the Perl Programming Language. L<SQL::Statement> and L<DBI::SQL::Nano> for the available SQL engines. L<SQL::Statement::RAM> where the implementation is shamelessly stolen from to allow DBI bundled Pure-Perl drivers increase the test coverage. L<DBD::SQLite> using C<dbname=:memory:> for an incredible fast in-memory database engine. =cut DBD/Sponge.pm 0000644 00000017436 15037233336 0006746 0 ustar 00 use strict; { package DBD::Sponge; require DBI; require Carp; our @EXPORT = qw(); # Do NOT @EXPORT anything. our $VERSION = "12.010003"; # $Id: Sponge.pm 10002 2007-09-26 21:03:25Z Tim $ # # Copyright (c) 1994-2003 Tim Bunce Ireland # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. our $drh = undef; # holds driver handle once initialised my $methods_already_installed; sub driver{ return $drh if $drh; DBD::Sponge::db->install_method("sponge_test_installed_method") unless $methods_already_installed++; my($class, $attr) = @_; $class .= "::dr"; ($drh) = DBI::_new_drh($class, { 'Name' => 'Sponge', 'Version' => $VERSION, 'Attribution' => "DBD::Sponge $VERSION (fake cursor driver) by Tim Bunce", }); $drh; } sub CLONE { undef $drh; } } { package DBD::Sponge::dr; # ====== DRIVER ====== our $imp_data_size = 0; # we use default (dummy) connect method } { package DBD::Sponge::db; # ====== DATABASE ====== our $imp_data_size = 0; use strict; sub prepare { my($dbh, $statement, $attribs) = @_; my $rows = delete $attribs->{'rows'} or return $dbh->set_err($DBI::stderr,"No rows attribute supplied to prepare"); my ($outer, $sth) = DBI::_new_sth($dbh, { 'Statement' => $statement, 'rows' => $rows, (map { exists $attribs->{$_} ? ($_=>$attribs->{$_}) : () } qw(execute_hook) ), }); if (my $behave_like = $attribs->{behave_like}) { $outer->{$_} = $behave_like->{$_} foreach (qw(RaiseError PrintError HandleError ShowErrorStatement)); } if ($statement =~ /^\s*insert\b/) { # very basic, just for testing execute_array() $sth->{is_insert} = 1; my $NUM_OF_PARAMS = $attribs->{NUM_OF_PARAMS} or return $dbh->set_err($DBI::stderr,"NUM_OF_PARAMS not specified for INSERT statement"); $sth->STORE('NUM_OF_PARAMS' => $attribs->{NUM_OF_PARAMS} ); } else { #assume select # we need to set NUM_OF_FIELDS my $numFields; if ($attribs->{'NUM_OF_FIELDS'}) { $numFields = $attribs->{'NUM_OF_FIELDS'}; } elsif ($attribs->{'NAME'}) { $numFields = @{$attribs->{NAME}}; } elsif ($attribs->{'TYPE'}) { $numFields = @{$attribs->{TYPE}}; } elsif (my $firstrow = $rows->[0]) { $numFields = scalar @$firstrow; } else { return $dbh->set_err($DBI::stderr, 'Cannot determine NUM_OF_FIELDS'); } $sth->STORE('NUM_OF_FIELDS' => $numFields); $sth->{NAME} = $attribs->{NAME} || [ map { "col$_" } 1..$numFields ]; $sth->{TYPE} = $attribs->{TYPE} || [ (DBI::SQL_VARCHAR()) x $numFields ]; $sth->{PRECISION} = $attribs->{PRECISION} || [ map { length($sth->{NAME}->[$_]) } 0..$numFields -1 ]; $sth->{SCALE} = $attribs->{SCALE} || [ (0) x $numFields ]; $sth->{NULLABLE} = $attribs->{NULLABLE} || [ (2) x $numFields ]; } $outer; } sub type_info_all { my ($dbh) = @_; my $ti = [ { TYPE_NAME => 0, DATA_TYPE => 1, PRECISION => 2, LITERAL_PREFIX => 3, LITERAL_SUFFIX => 4, CREATE_PARAMS => 5, NULLABLE => 6, CASE_SENSITIVE => 7, SEARCHABLE => 8, UNSIGNED_ATTRIBUTE=> 9, MONEY => 10, AUTO_INCREMENT => 11, LOCAL_TYPE_NAME => 12, MINIMUM_SCALE => 13, MAXIMUM_SCALE => 14, }, [ 'VARCHAR', DBI::SQL_VARCHAR(), undef, "'","'", undef, 0, 1, 1, 0, 0,0,undef,0,0 ], ]; return $ti; } sub FETCH { my ($dbh, $attrib) = @_; # In reality this would interrogate the database engine to # either return dynamic values that cannot be precomputed # or fetch and cache attribute values too expensive to prefetch. return 1 if $attrib eq 'AutoCommit'; # else pass up to DBI to handle return $dbh->SUPER::FETCH($attrib); } sub STORE { my ($dbh, $attrib, $value) = @_; # would normally validate and only store known attributes # else pass up to DBI to handle if ($attrib eq 'AutoCommit') { return 1 if $value; # is already set Carp::croak("Can't disable AutoCommit"); } return $dbh->SUPER::STORE($attrib, $value); } sub sponge_test_installed_method { my ($dbh, @args) = @_; return $dbh->set_err(42, "not enough parameters") unless @args >= 2; return \@args; } } { package DBD::Sponge::st; # ====== STATEMENT ====== our $imp_data_size = 0; use strict; sub execute { my $sth = shift; # hack to support ParamValues (when not using bind_param) $sth->{ParamValues} = (@_) ? { map { $_ => $_[$_-1] } 1..@_ } : undef; if (my $hook = $sth->{execute_hook}) { &$hook($sth, @_) or return; } if ($sth->{is_insert}) { my $row; $row = (@_) ? [ @_ ] : die "bind_param not supported yet" ; my $NUM_OF_PARAMS = $sth->{NUM_OF_PARAMS}; return $sth->set_err($DBI::stderr, @$row." values bound (@$row) but $NUM_OF_PARAMS expected") if @$row != $NUM_OF_PARAMS; { local $^W; $sth->trace_msg("inserting (@$row)\n"); } push @{ $sth->{rows} }, $row; } else { # mark select sth as Active $sth->STORE(Active => 1); } # else do nothing for select as data is already in $sth->{rows} return 1; } sub fetch { my ($sth) = @_; my $row = shift @{$sth->{'rows'}}; unless ($row) { $sth->STORE(Active => 0); return undef; } return $sth->_set_fbav($row); } *fetchrow_arrayref = \&fetch; sub FETCH { my ($sth, $attrib) = @_; # would normally validate and only fetch known attributes # else pass up to DBI to handle return $sth->SUPER::FETCH($attrib); } sub STORE { my ($sth, $attrib, $value) = @_; # would normally validate and only store known attributes # else pass up to DBI to handle return $sth->SUPER::STORE($attrib, $value); } } 1; __END__ =pod =head1 NAME DBD::Sponge - Create a DBI statement handle from Perl data =head1 SYNOPSIS my $sponge = DBI->connect("dbi:Sponge:","","",{ RaiseError => 1 }); my $sth = $sponge->prepare($statement, { rows => $data, NAME => $names, %attr } ); =head1 DESCRIPTION DBD::Sponge is useful for making a Perl data structure accessible through a standard DBI statement handle. This may be useful to DBD module authors who need to transform data in this way. =head1 METHODS =head2 connect() my $sponge = DBI->connect("dbi:Sponge:","","",{ RaiseError => 1 }); Here's a sample syntax for creating a database handle for the Sponge driver. No username and password are needed. =head2 prepare() my $sth = $sponge->prepare($statement, { rows => $data, NAME => $names, %attr } ); =over 4 =item * The C<$statement> here is an arbitrary statement or name you want to provide as identity of your data. If you're using DBI::Profile it will appear in the profile data. Generally it's expected that you are preparing a statement handle as if a C<select> statement happened. =item * C<$data> is a reference to the data you are providing, given as an array of arrays. =item * C<$names> is a reference an array of column names for the C<$data> you are providing. The number and order should match the number and ordering of the C<$data> columns. =item * C<%attr> is a hash of other standard DBI attributes that you might pass to a prepare statement. Currently only NAME, TYPE, and PRECISION are supported. =back =head1 BUGS Using this module to prepare INSERT-like statements is not currently documented. =head1 AUTHOR AND COPYRIGHT This module is Copyright (c) 2003 Tim Bunce Documentation initially written by Mark Stosberg The DBD::Sponge module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. In particular permission is granted to Tim Bunce for distributing this as a part of the DBI. =head1 SEE ALSO L<DBI> =cut DBD/NullP.pm 0000644 00000013650 15037233336 0006537 0 ustar 00 use strict; { package DBD::NullP; require DBI; require Carp; our @EXPORT = qw(); # Do NOT @EXPORT anything. our $VERSION = "12.014715"; # $Id: NullP.pm 14714 2011-02-22 17:27:07Z Tim $ # # Copyright (c) 1994-2007 Tim Bunce # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. our $drh = undef; # holds driver handle once initialised sub driver{ return $drh if $drh; my($class, $attr) = @_; $class .= "::dr"; ($drh) = DBI::_new_drh($class, { 'Name' => 'NullP', 'Version' => $VERSION, 'Attribution' => 'DBD Example Null Perl stub by Tim Bunce', }, [ qw'example implementors private data']); $drh; } sub CLONE { undef $drh; } } { package DBD::NullP::dr; # ====== DRIVER ====== our $imp_data_size = 0; use strict; sub connect { # normally overridden, but a handy default my $dbh = shift->SUPER::connect(@_) or return; $dbh->STORE(Active => 1); $dbh; } sub DESTROY { undef } } { package DBD::NullP::db; # ====== DATABASE ====== our $imp_data_size = 0; use strict; use Carp qw(croak); # Added get_info to support tests in 10examp.t sub get_info { my ($dbh, $type) = @_; if ($type == 29) { # identifier quote return '"'; } return; } # Added table_info to support tests in 10examp.t sub table_info { my ($dbh, $catalog, $schema, $table, $type) = @_; my ($outer, $sth) = DBI::_new_sth($dbh, { 'Statement' => 'tables', }); if (defined($type) && $type eq '%' && # special case for tables('','','','%') grep {defined($_) && $_ eq ''} ($catalog, $schema, $table)) { $outer->{dbd_nullp_data} = [[undef, undef, undef, 'TABLE', undef], [undef, undef, undef, 'VIEW', undef], [undef, undef, undef, 'ALIAS', undef]]; } elsif (defined($catalog) && $catalog eq '%' && # special case for tables('%','','') grep {defined($_) && $_ eq ''} ($schema, $table)) { $outer->{dbd_nullp_data} = [['catalog1', undef, undef, undef, undef], ['catalog2', undef, undef, undef, undef]]; } else { $outer->{dbd_nullp_data} = [['catalog', 'schema', 'table1', 'TABLE']]; $outer->{dbd_nullp_data} = [['catalog', 'schema', 'table2', 'TABLE']]; $outer->{dbd_nullp_data} = [['catalog', 'schema', 'table3', 'TABLE']]; } $outer->STORE(NUM_OF_FIELDS => 5); $sth->STORE(Active => 1); return $outer; } sub prepare { my ($dbh, $statement)= @_; my ($outer, $sth) = DBI::_new_sth($dbh, { 'Statement' => $statement, }); return $outer; } sub FETCH { my ($dbh, $attrib) = @_; # In reality this would interrogate the database engine to # either return dynamic values that cannot be precomputed # or fetch and cache attribute values too expensive to prefetch. return $dbh->SUPER::FETCH($attrib); } sub STORE { my ($dbh, $attrib, $value) = @_; # would normally validate and only store known attributes # else pass up to DBI to handle if ($attrib eq 'AutoCommit') { Carp::croak("Can't disable AutoCommit") unless $value; # convert AutoCommit values to magic ones to let DBI # know that the driver has 'handled' the AutoCommit attribute $value = ($value) ? -901 : -900; } elsif ($attrib eq 'nullp_set_err') { # a fake attribute to produce a test case where STORE issues a warning $dbh->set_err($value, $value); } return $dbh->SUPER::STORE($attrib, $value); } sub ping { 1 } sub disconnect { shift->STORE(Active => 0); } } { package DBD::NullP::st; # ====== STATEMENT ====== our $imp_data_size = 0; use strict; sub bind_param { my ($sth, $param, $value, $attr) = @_; $sth->{ParamValues}{$param} = $value; $sth->{ParamAttr}{$param} = $attr if defined $attr; # attr is sticky if not explicitly set return 1; } sub execute { my $sth = shift; $sth->bind_param($_, $_[$_-1]) for (1..@_); if ($sth->{Statement} =~ m/^ \s* SELECT \s+/xmsi) { $sth->STORE(NUM_OF_FIELDS => 1); $sth->{NAME} = [ "fieldname" ]; # just for the sake of returning something, we return the params my $params = $sth->{ParamValues} || {}; $sth->{dbd_nullp_data} = [ @{$params}{ sort keys %$params } ]; $sth->STORE(Active => 1); } # force a sleep - handy for testing elsif ($sth->{Statement} =~ m/^ \s* SLEEP \s+ (\S+) /xmsi) { my $secs = $1; if (eval { require Time::HiRes; defined &Time::HiRes::sleep }) { Time::HiRes::sleep($secs); } else { sleep $secs; } } # force an error - handy for testing elsif ($sth->{Statement} =~ m/^ \s* ERROR \s+ (\d+) \s* (.*) /xmsi) { return $sth->set_err($1, $2); } # anything else is silently ignored, successfully 1; } sub fetchrow_arrayref { my $sth = shift; my $data = shift @{$sth->{dbd_nullp_data}}; if (!$data || !@$data) { $sth->finish; # no more data so finish return undef; } return $sth->_set_fbav($data); } *fetch = \&fetchrow_arrayref; # alias sub FETCH { my ($sth, $attrib) = @_; # would normally validate and only fetch known attributes # else pass up to DBI to handle return $sth->SUPER::FETCH($attrib); } sub STORE { my ($sth, $attrib, $value) = @_; # would normally validate and only store known attributes # else pass up to DBI to handle return $sth->SUPER::STORE($attrib, $value); } } 1; DBD/mysql.pm 0000644 00000175106 15037233337 0006660 0 ustar 00 #!/usr/bin/perl use strict; use warnings; require 5.008_001; # just as DBI package DBD::mysql; use DBI; use DynaLoader(); use Carp; our @ISA = qw(DynaLoader); # please make sure the sub-version does not increase above '099' # SQL_DRIVER_VER is formatted as dd.dd.dddd # for version 5.x please switch to 5.00(_00) version numbering # keep $VERSION in Bundle/DBD/mysql.pm in sync our $VERSION = '4.046'; bootstrap DBD::mysql $VERSION; our $err = 0; # holds error code for DBI::err our $errstr = ""; # holds error string for DBI::errstr our $drh = undef; # holds driver handle once initialised my $methods_are_installed = 0; sub driver{ return $drh if $drh; my($class, $attr) = @_; $class .= "::dr"; # not a 'my' since we use it above to prevent multiple drivers $drh = DBI::_new_drh($class, { 'Name' => 'mysql', 'Version' => $VERSION, 'Err' => \$DBD::mysql::err, 'Errstr' => \$DBD::mysql::errstr, 'Attribution' => 'DBD::mysql by Patrick Galbraith' }); if (!$methods_are_installed) { DBD::mysql::db->install_method('mysql_fd'); DBD::mysql::db->install_method('mysql_async_result'); DBD::mysql::db->install_method('mysql_async_ready'); DBD::mysql::st->install_method('mysql_async_result'); DBD::mysql::st->install_method('mysql_async_ready'); $methods_are_installed++; } $drh; } sub CLONE { undef $drh; } sub _OdbcParse($$$) { my($class, $dsn, $hash, $args) = @_; my($var, $val); if (!defined($dsn)) { return; } while (length($dsn)) { if ($dsn =~ /([^:;]*\[.*]|[^:;]*)[:;](.*)/) { $val = $1; $dsn = $2; $val =~ s/\[|]//g; # Remove [] if present, the rest of the code prefers plain IPv6 addresses } else { $val = $dsn; $dsn = ''; } if ($val =~ /([^=]*)=(.*)/) { $var = $1; $val = $2; if ($var eq 'hostname' || $var eq 'host') { $hash->{'host'} = $val; } elsif ($var eq 'db' || $var eq 'dbname') { $hash->{'database'} = $val; } else { $hash->{$var} = $val; } } else { foreach $var (@$args) { if (!defined($hash->{$var})) { $hash->{$var} = $val; last; } } } } } sub _OdbcParseHost ($$) { my($class, $dsn) = @_; my($hash) = {}; $class->_OdbcParse($dsn, $hash, ['host', 'port']); ($hash->{'host'}, $hash->{'port'}); } sub AUTOLOAD { my ($meth) = $DBD::mysql::AUTOLOAD; my ($smeth) = $meth; $smeth =~ s/(.*)\:\://; my $val = constant($smeth, @_ ? $_[0] : 0); if ($! == 0) { eval "sub $meth { $val }"; return $val; } Carp::croak "$meth: Not defined"; } 1; package DBD::mysql::dr; # ====== DRIVER ====== use strict; use DBI qw(:sql_types); use DBI::Const::GetInfoType; sub connect { my($drh, $dsn, $username, $password, $attrhash) = @_; my($port); my($cWarn); my $connect_ref= { 'Name' => $dsn }; my $dbi_imp_data; # Avoid warnings for undefined values $username ||= ''; $password ||= ''; $attrhash ||= {}; $attrhash->{mysql_conn_attrs} ||= {}; $attrhash->{mysql_conn_attrs}->{'program_name'} ||= $0; # create a 'blank' dbh my($this, $privateAttrHash) = (undef, $attrhash); $privateAttrHash = { %$privateAttrHash, 'Name' => $dsn, 'user' => $username, 'password' => $password }; DBD::mysql->_OdbcParse($dsn, $privateAttrHash, ['database', 'host', 'port']); if ($DBI::VERSION >= 1.49) { $dbi_imp_data = delete $attrhash->{dbi_imp_data}; $connect_ref->{'dbi_imp_data'} = $dbi_imp_data; } if (!defined($this = DBI::_new_dbh($drh, $connect_ref, $privateAttrHash))) { return undef; } DBD::mysql::db::_login($this, $dsn, $username, $password) or $this = undef; if ($this && ($ENV{MOD_PERL} || $ENV{GATEWAY_INTERFACE})) { $this->{mysql_auto_reconnect} = 1; } $this; } sub data_sources { my($self) = shift; my($attributes) = shift; my($host, $port, $user, $password) = ('', '', '', ''); if ($attributes) { $host = $attributes->{host} || ''; $port = $attributes->{port} || ''; $user = $attributes->{user} || ''; $password = $attributes->{password} || ''; } my(@dsn) = $self->func($host, $port, $user, $password, '_ListDBs'); my($i); for ($i = 0; $i < @dsn; $i++) { $dsn[$i] = "DBI:mysql:$dsn[$i]"; } @dsn; } sub admin { my($drh) = shift; my($command) = shift; my($dbname) = ($command eq 'createdb' || $command eq 'dropdb') ? shift : ''; my($host, $port) = DBD::mysql->_OdbcParseHost(shift(@_) || ''); my($user) = shift || ''; my($password) = shift || ''; $drh->func(undef, $command, $dbname || '', $host || '', $port || '', $user, $password, '_admin_internal'); } package DBD::mysql::db; # ====== DATABASE ====== use strict; use DBI qw(:sql_types); %DBD::mysql::db::db2ANSI = ( "INT" => "INTEGER", "CHAR" => "CHAR", "REAL" => "REAL", "IDENT" => "DECIMAL" ); ### ANSI datatype mapping to MySQL datatypes %DBD::mysql::db::ANSI2db = ( "CHAR" => "CHAR", "VARCHAR" => "CHAR", "LONGVARCHAR" => "CHAR", "NUMERIC" => "INTEGER", "DECIMAL" => "INTEGER", "BIT" => "INTEGER", "TINYINT" => "INTEGER", "SMALLINT" => "INTEGER", "INTEGER" => "INTEGER", "BIGINT" => "INTEGER", "REAL" => "REAL", "FLOAT" => "REAL", "DOUBLE" => "REAL", "BINARY" => "CHAR", "VARBINARY" => "CHAR", "LONGVARBINARY" => "CHAR", "DATE" => "CHAR", "TIME" => "CHAR", "TIMESTAMP" => "CHAR" ); sub prepare { my($dbh, $statement, $attribs)= @_; return unless $dbh->func('_async_check'); # create a 'blank' dbh my $sth = DBI::_new_sth($dbh, {'Statement' => $statement}); # Populate internal handle data. if (!DBD::mysql::st::_prepare($sth, $statement, $attribs)) { $sth = undef; } $sth; } sub db2ANSI { my $self = shift; my $type = shift; return $DBD::mysql::db::db2ANSI{"$type"}; } sub ANSI2db { my $self = shift; my $type = shift; return $DBD::mysql::db::ANSI2db{"$type"}; } sub admin { my($dbh) = shift; my($command) = shift; my($dbname) = ($command eq 'createdb' || $command eq 'dropdb') ? shift : ''; $dbh->{'Driver'}->func($dbh, $command, $dbname, '', '', '', '_admin_internal'); } sub _SelectDB ($$) { die "_SelectDB is removed from this module; use DBI->connect instead."; } sub table_info ($) { my ($dbh, $catalog, $schema, $table, $type, $attr) = @_; $dbh->{mysql_server_prepare}||= 0; my $mysql_server_prepare_save= $dbh->{mysql_server_prepare}; $dbh->{mysql_server_prepare}= 0; my @names = qw(TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS); my @rows; my $sponge = DBI->connect("DBI:Sponge:", '','') or return $dbh->DBI::set_err($DBI::err, "DBI::Sponge: $DBI::errstr"); # Return the list of catalogs if (defined $catalog && $catalog eq "%" && (!defined($schema) || $schema eq "") && (!defined($table) || $table eq "")) { @rows = (); # Empty, because MySQL doesn't support catalogs (yet) } # Return the list of schemas elsif (defined $schema && $schema eq "%" && (!defined($catalog) || $catalog eq "") && (!defined($table) || $table eq "")) { my $sth = $dbh->prepare("SHOW DATABASES") or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return undef); $sth->execute() or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return DBI::set_err($dbh, $sth->err(), $sth->errstr())); while (my $ref = $sth->fetchrow_arrayref()) { push(@rows, [ undef, $ref->[0], undef, undef, undef ]); } } # Return the list of table types elsif (defined $type && $type eq "%" && (!defined($catalog) || $catalog eq "") && (!defined($schema) || $schema eq "") && (!defined($table) || $table eq "")) { @rows = ( [ undef, undef, undef, "TABLE", undef ], [ undef, undef, undef, "VIEW", undef ], ); } # Special case: a catalog other than undef, "", or "%" elsif (defined $catalog && $catalog ne "" && $catalog ne "%") { @rows = (); # Nothing, because MySQL doesn't support catalogs yet. } # Uh oh, we actually have a meaty table_info call. Work is required! else { my @schemas; # If no table was specified, we want them all $table ||= "%"; # If something was given for the schema, we need to expand it to # a list of schemas, since it may be a wildcard. if (defined $schema && $schema ne "") { my $sth = $dbh->prepare("SHOW DATABASES LIKE " . $dbh->quote($schema)) or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return undef); $sth->execute() or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return DBI::set_err($dbh, $sth->err(), $sth->errstr())); while (my $ref = $sth->fetchrow_arrayref()) { push @schemas, $ref->[0]; } } # Otherwise we want the current database else { push @schemas, $dbh->selectrow_array("SELECT DATABASE()"); } # Figure out which table types are desired my ($want_tables, $want_views); if (defined $type && $type ne "") { $want_tables = ($type =~ m/table/i); $want_views = ($type =~ m/view/i); } else { $want_tables = $want_views = 1; } for my $database (@schemas) { my $sth = $dbh->prepare("SHOW /*!50002 FULL*/ TABLES FROM " . $dbh->quote_identifier($database) . " LIKE " . $dbh->quote($table)) or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return undef); $sth->execute() or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return DBI::set_err($dbh, $sth->err(), $sth->errstr())); while (my $ref = $sth->fetchrow_arrayref()) { my $type = (defined $ref->[1] && $ref->[1] =~ /view/i) ? 'VIEW' : 'TABLE'; next if $type eq 'TABLE' && not $want_tables; next if $type eq 'VIEW' && not $want_views; push @rows, [ undef, $database, $ref->[0], $type, undef ]; } } } my $sth = $sponge->prepare("table_info", { rows => \@rows, NUM_OF_FIELDS => scalar @names, NAME => \@names, }) or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return $dbh->DBI::set_err($sponge->err(), $sponge->errstr())); $dbh->{mysql_server_prepare}= $mysql_server_prepare_save; return $sth; } sub _ListTables { my $dbh = shift; if (!$DBD::mysql::QUIET) { warn "_ListTables is deprecated, use \$dbh->tables()"; } return map { $_ =~ s/.*\.//; $_ } $dbh->tables(); } sub column_info { my ($dbh, $catalog, $schema, $table, $column) = @_; return unless $dbh->func('_async_check'); $dbh->{mysql_server_prepare}||= 0; my $mysql_server_prepare_save= $dbh->{mysql_server_prepare}; $dbh->{mysql_server_prepare}= 0; # ODBC allows a NULL to mean all columns, so we'll accept undef $column = '%' unless defined $column; my $ER_NO_SUCH_TABLE= 1146; my $table_id = $dbh->quote_identifier($catalog, $schema, $table); my @names = qw( TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE CHAR_SET_CAT CHAR_SET_SCHEM CHAR_SET_NAME COLLATION_CAT COLLATION_SCHEM COLLATION_NAME UDT_CAT UDT_SCHEM UDT_NAME DOMAIN_CAT DOMAIN_SCHEM DOMAIN_NAME SCOPE_CAT SCOPE_SCHEM SCOPE_NAME MAX_CARDINALITY DTD_IDENTIFIER IS_SELF_REF mysql_is_pri_key mysql_type_name mysql_values mysql_is_auto_increment ); my %col_info; local $dbh->{FetchHashKeyName} = 'NAME_lc'; # only ignore ER_NO_SUCH_TABLE in internal_execute if issued from here my $desc_sth = $dbh->prepare("DESCRIBE $table_id " . $dbh->quote($column)); my $desc = $dbh->selectall_arrayref($desc_sth, { Columns=>{} }); #return $desc_sth if $desc_sth->err(); if (my $err = $desc_sth->err()) { # return the error, unless it is due to the table not # existing per DBI spec if ($err != $ER_NO_SUCH_TABLE) { $dbh->{mysql_server_prepare}= $mysql_server_prepare_save; return undef; } $dbh->set_err(undef,undef); $desc = []; } my $ordinal_pos = 0; my @fields; for my $row (@$desc) { my $type = $row->{type}; $type =~ m/^(\w+)(\((.+)\))?\s?(.*)?$/; my $basetype = lc($1); my $typemod = $3; my $attr = $4; push @fields, $row->{field}; my $info = $col_info{ $row->{field} }= { TABLE_CAT => $catalog, TABLE_SCHEM => $schema, TABLE_NAME => $table, COLUMN_NAME => $row->{field}, NULLABLE => ($row->{null} eq 'YES') ? 1 : 0, IS_NULLABLE => ($row->{null} eq 'YES') ? "YES" : "NO", TYPE_NAME => uc($basetype), COLUMN_DEF => $row->{default}, ORDINAL_POSITION => ++$ordinal_pos, mysql_is_pri_key => ($row->{key} eq 'PRI'), mysql_type_name => $row->{type}, mysql_is_auto_increment => ($row->{extra} =~ /auto_increment/i ? 1 : 0), }; # # This code won't deal with a pathological case where a value # contains a single quote followed by a comma, and doesn't unescape # any escaped values. But who would use those in an enum or set? # my @type_params= ($typemod && index($typemod,"'")>=0) ? ("$typemod," =~ /'(.*?)',/g) # assume all are quoted : split /,/, $typemod||''; # no quotes, plain list s/''/'/g for @type_params; # undo doubling of quotes my @type_attr= split / /, $attr||''; $info->{DATA_TYPE}= SQL_VARCHAR(); if ($basetype =~ /^(char|varchar|\w*text|\w*blob)/) { $info->{DATA_TYPE}= SQL_CHAR() if $basetype eq 'char'; if ($type_params[0]) { $info->{COLUMN_SIZE} = $type_params[0]; } else { $info->{COLUMN_SIZE} = 65535; $info->{COLUMN_SIZE} = 255 if $basetype =~ /^tiny/; $info->{COLUMN_SIZE} = 16777215 if $basetype =~ /^medium/; $info->{COLUMN_SIZE} = 4294967295 if $basetype =~ /^long/; } } elsif ($basetype =~ /^(binary|varbinary)/) { $info->{COLUMN_SIZE} = $type_params[0]; # SQL_BINARY & SQL_VARBINARY are tempting here but don't match the # semantics for mysql (not hex). SQL_CHAR & SQL_VARCHAR are correct here. $info->{DATA_TYPE} = ($basetype eq 'binary') ? SQL_CHAR() : SQL_VARCHAR(); } elsif ($basetype =~ /^(enum|set)/) { if ($basetype eq 'set') { $info->{COLUMN_SIZE} = length(join ",", @type_params); } else { my $max_len = 0; length($_) > $max_len and $max_len = length($_) for @type_params; $info->{COLUMN_SIZE} = $max_len; } $info->{"mysql_values"} = \@type_params; } elsif ($basetype =~ /int/ || $basetype eq 'bit' ) { # big/medium/small/tiny etc + unsigned? $info->{DATA_TYPE} = SQL_INTEGER(); $info->{NUM_PREC_RADIX} = 10; $info->{COLUMN_SIZE} = $type_params[0]; } elsif ($basetype =~ /^decimal/) { $info->{DATA_TYPE} = SQL_DECIMAL(); $info->{NUM_PREC_RADIX} = 10; $info->{COLUMN_SIZE} = $type_params[0]; $info->{DECIMAL_DIGITS} = $type_params[1]; } elsif ($basetype =~ /^(float|double)/) { $info->{DATA_TYPE} = ($basetype eq 'float') ? SQL_FLOAT() : SQL_DOUBLE(); $info->{NUM_PREC_RADIX} = 2; $info->{COLUMN_SIZE} = ($basetype eq 'float') ? 32 : 64; } elsif ($basetype =~ /date|time/) { # date/datetime/time/timestamp if ($basetype eq 'time' or $basetype eq 'date') { #$info->{DATA_TYPE} = ($basetype eq 'time') ? SQL_TYPE_TIME() : SQL_TYPE_DATE(); $info->{DATA_TYPE} = ($basetype eq 'time') ? SQL_TIME() : SQL_DATE(); $info->{COLUMN_SIZE} = ($basetype eq 'time') ? 8 : 10; } else { # datetime/timestamp #$info->{DATA_TYPE} = SQL_TYPE_TIMESTAMP(); $info->{DATA_TYPE} = SQL_TIMESTAMP(); $info->{SQL_DATA_TYPE} = SQL_DATETIME(); $info->{SQL_DATETIME_SUB} = $info->{DATA_TYPE} - ($info->{SQL_DATA_TYPE} * 10); $info->{COLUMN_SIZE} = ($basetype eq 'datetime') ? 19 : $type_params[0] || 14; } $info->{DECIMAL_DIGITS}= 0; # no fractional seconds } elsif ($basetype eq 'year') { # no close standard so treat as int $info->{DATA_TYPE} = SQL_INTEGER(); $info->{NUM_PREC_RADIX} = 10; $info->{COLUMN_SIZE} = 4; } else { Carp::carp("column_info: unrecognized column type '$basetype' of $table_id.$row->{field} treated as varchar"); } $info->{SQL_DATA_TYPE} ||= $info->{DATA_TYPE}; #warn Dumper($info); } my $sponge = DBI->connect("DBI:Sponge:", '','') or ( $dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return $dbh->DBI::set_err($DBI::err, "DBI::Sponge: $DBI::errstr")); my $sth = $sponge->prepare("column_info $table", { rows => [ map { [ @{$_}{@names} ] } map { $col_info{$_} } @fields ], NUM_OF_FIELDS => scalar @names, NAME => \@names, }) or return ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && $dbh->DBI::set_err($sponge->err(), $sponge->errstr())); $dbh->{mysql_server_prepare}= $mysql_server_prepare_save; return $sth; } sub primary_key_info { my ($dbh, $catalog, $schema, $table) = @_; return unless $dbh->func('_async_check'); $dbh->{mysql_server_prepare}||= 0; my $mysql_server_prepare_save= $dbh->{mysql_server_prepare}; my $table_id = $dbh->quote_identifier($catalog, $schema, $table); my @names = qw( TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME KEY_SEQ PK_NAME ); my %col_info; local $dbh->{FetchHashKeyName} = 'NAME_lc'; my $desc_sth = $dbh->prepare("SHOW KEYS FROM $table_id"); my $desc= $dbh->selectall_arrayref($desc_sth, { Columns=>{} }); my $ordinal_pos = 0; for my $row (grep { $_->{key_name} eq 'PRIMARY'} @$desc) { $col_info{ $row->{column_name} }= { TABLE_CAT => $catalog, TABLE_SCHEM => $schema, TABLE_NAME => $table, COLUMN_NAME => $row->{column_name}, KEY_SEQ => $row->{seq_in_index}, PK_NAME => $row->{key_name}, }; } my $sponge = DBI->connect("DBI:Sponge:", '','') or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return $dbh->DBI::set_err($DBI::err, "DBI::Sponge: $DBI::errstr")); my $sth= $sponge->prepare("primary_key_info $table", { rows => [ map { [ @{$_}{@names} ] } sort { $a->{KEY_SEQ} <=> $b->{KEY_SEQ} } values %col_info ], NUM_OF_FIELDS => scalar @names, NAME => \@names, }) or ($dbh->{mysql_server_prepare}= $mysql_server_prepare_save && return $dbh->DBI::set_err($sponge->err(), $sponge->errstr())); $dbh->{mysql_server_prepare}= $mysql_server_prepare_save; return $sth; } sub foreign_key_info { my ($dbh, $pk_catalog, $pk_schema, $pk_table, $fk_catalog, $fk_schema, $fk_table, ) = @_; return unless $dbh->func('_async_check'); # INFORMATION_SCHEMA.KEY_COLUMN_USAGE was added in 5.0.6 # no one is going to be running 5.0.6, taking out the check for $point > .6 my ($maj, $min, $point) = _version($dbh); return if $maj < 5 ; my $sql = <<'EOF'; SELECT NULL AS PKTABLE_CAT, A.REFERENCED_TABLE_SCHEMA AS PKTABLE_SCHEM, A.REFERENCED_TABLE_NAME AS PKTABLE_NAME, A.REFERENCED_COLUMN_NAME AS PKCOLUMN_NAME, A.TABLE_CATALOG AS FKTABLE_CAT, A.TABLE_SCHEMA AS FKTABLE_SCHEM, A.TABLE_NAME AS FKTABLE_NAME, A.COLUMN_NAME AS FKCOLUMN_NAME, A.ORDINAL_POSITION AS KEY_SEQ, NULL AS UPDATE_RULE, NULL AS DELETE_RULE, A.CONSTRAINT_NAME AS FK_NAME, NULL AS PK_NAME, NULL AS DEFERABILITY, NULL AS UNIQUE_OR_PRIMARY FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE A, INFORMATION_SCHEMA.TABLE_CONSTRAINTS B WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA AND A.TABLE_NAME = B.TABLE_NAME AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND B.CONSTRAINT_TYPE IS NOT NULL EOF my @where; my @bind; # catalogs are not yet supported by MySQL # if (defined $pk_catalog) { # push @where, 'A.REFERENCED_TABLE_CATALOG = ?'; # push @bind, $pk_catalog; # } if (defined $pk_schema) { push @where, 'A.REFERENCED_TABLE_SCHEMA = ?'; push @bind, $pk_schema; } if (defined $pk_table) { push @where, 'A.REFERENCED_TABLE_NAME = ?'; push @bind, $pk_table; } # if (defined $fk_catalog) { # push @where, 'A.TABLE_CATALOG = ?'; # push @bind, $fk_schema; # } if (defined $fk_schema) { push @where, 'A.TABLE_SCHEMA = ?'; push @bind, $fk_schema; } if (defined $fk_table) { push @where, 'A.TABLE_NAME = ?'; push @bind, $fk_table; } if (@where) { $sql .= ' AND '; $sql .= join ' AND ', @where; } $sql .= " ORDER BY A.TABLE_SCHEMA, A.TABLE_NAME, A.ORDINAL_POSITION"; local $dbh->{FetchHashKeyName} = 'NAME_uc'; my $sth = $dbh->prepare($sql); $sth->execute(@bind); return $sth; } # #86030: PATCH: adding statistics_info support # Thank you to David Dick http://search.cpan.org/~ddick/ sub statistics_info { my ($dbh, $catalog, $schema, $table, $unique_only, $quick, ) = @_; return unless $dbh->func('_async_check'); # INFORMATION_SCHEMA.KEY_COLUMN_USAGE was added in 5.0.6 # no one is going to be running 5.0.6, taking out the check for $point > .6 my ($maj, $min, $point) = _version($dbh); return if $maj < 5 ; my $sql = <<'EOF'; SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS TABLE_SCHEM, TABLE_NAME AS TABLE_NAME, NON_UNIQUE AS NON_UNIQUE, NULL AS INDEX_QUALIFIER, INDEX_NAME AS INDEX_NAME, LCASE(INDEX_TYPE) AS TYPE, SEQ_IN_INDEX AS ORDINAL_POSITION, COLUMN_NAME AS COLUMN_NAME, COLLATION AS ASC_OR_DESC, CARDINALITY AS CARDINALITY, NULL AS PAGES, NULL AS FILTER_CONDITION FROM INFORMATION_SCHEMA.STATISTICS EOF my @where; my @bind; # catalogs are not yet supported by MySQL # if (defined $catalog) { # push @where, 'TABLE_CATALOG = ?'; # push @bind, $catalog; # } if (defined $schema) { push @where, 'TABLE_SCHEMA = ?'; push @bind, $schema; } if (defined $table) { push @where, 'TABLE_NAME = ?'; push @bind, $table; } if (@where) { $sql .= ' WHERE '; $sql .= join ' AND ', @where; } $sql .= " ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION"; local $dbh->{FetchHashKeyName} = 'NAME_uc'; my $sth = $dbh->prepare($sql); $sth->execute(@bind); return $sth; } sub _version { my $dbh = shift; return $dbh->get_info($DBI::Const::GetInfoType::GetInfoType{SQL_DBMS_VER}) =~ /(\d+)\.(\d+)\.(\d+)/; } #################### # get_info() # Generated by DBI::DBD::Metadata sub get_info { my($dbh, $info_type) = @_; return unless $dbh->func('_async_check'); require DBD::mysql::GetInfo; my $v = $DBD::mysql::GetInfo::info{int($info_type)}; $v = $v->($dbh) if ref $v eq 'CODE'; return $v; } BEGIN { my @needs_async_check = qw/data_sources quote_identifier begin_work/; foreach my $method (@needs_async_check) { no strict 'refs'; my $super = "SUPER::$method"; *$method = sub { my $h = shift; return unless $h->func('_async_check'); return $h->$super(@_); }; } } package DBD::mysql::st; # ====== STATEMENT ====== use strict; BEGIN { my @needs_async_result = qw/fetchrow_hashref fetchall_hashref/; my @needs_async_check = qw/bind_param_array bind_col bind_columns execute_for_fetch/; foreach my $method (@needs_async_result) { no strict 'refs'; my $super = "SUPER::$method"; *$method = sub { my $sth = shift; if(defined $sth->mysql_async_ready) { return unless $sth->mysql_async_result; } return $sth->$super(@_); }; } foreach my $method (@needs_async_check) { no strict 'refs'; my $super = "SUPER::$method"; *$method = sub { my $h = shift; return unless $h->func('_async_check'); return $h->$super(@_); }; } } 1; __END__ =pod =encoding utf8 =head1 NAME DBD::mysql - MySQL driver for the Perl5 Database Interface (DBI) =head1 SYNOPSIS use DBI; my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port"; my $dbh = DBI->connect($dsn, $user, $password); my $sth = $dbh->prepare( 'SELECT id, first_name, last_name FROM authors WHERE last_name = ?') or die "prepare statement failed: $dbh->errstr()"; $sth->execute('Eggers') or die "execution failed: $dbh->errstr()"; print $sth->rows . " rows found.\n"; while (my $ref = $sth->fetchrow_hashref()) { print "Found a row: id = $ref->{'id'}, fn = $ref->{'first_name'}\n"; } $sth->finish; =head1 EXAMPLE #!/usr/bin/perl use strict; use warnings; use DBI; # Connect to the database. my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost", "joe", "joe's password", {'RaiseError' => 1}); # Drop table 'foo'. This may fail, if 'foo' doesn't exist # Thus we put an eval around it. eval { $dbh->do("DROP TABLE foo") }; print "Dropping foo failed: $@\n" if $@; # Create a new table 'foo'. This must not fail, thus we don't # catch errors. $dbh->do("CREATE TABLE foo (id INTEGER, name VARCHAR(20))"); # INSERT some data into 'foo'. We are using $dbh->quote() for # quoting the name. $dbh->do("INSERT INTO foo VALUES (1, " . $dbh->quote("Tim") . ")"); # same thing, but using placeholders (recommended!) $dbh->do("INSERT INTO foo VALUES (?, ?)", undef, 2, "Jochen"); # now retrieve data from the table. my $sth = $dbh->prepare("SELECT * FROM foo"); $sth->execute(); while (my $ref = $sth->fetchrow_hashref()) { print "Found a row: id = $ref->{'id'}, name = $ref->{'name'}\n"; } $sth->finish(); # Disconnect from the database. $dbh->disconnect(); =head1 DESCRIPTION B<DBD::mysql> is the Perl5 Database Interface driver for the MySQL database. In other words: DBD::mysql is an interface between the Perl programming language and the MySQL programming API that comes with the MySQL relational database management system. Most functions provided by this programming API are supported. Some rarely used functions are missing, mainly because no-one ever requested them. :-) In what follows we first discuss the use of DBD::mysql, because this is what you will need the most. For installation, see the separate document L<DBD::mysql::INSTALL>. See L</"EXAMPLE"> for a simple example above. From perl you activate the interface with the statement use DBI; After that you can connect to multiple MySQL database servers and send multiple queries to any of them via a simple object oriented interface. Two types of objects are available: database handles and statement handles. Perl returns a database handle to the connect method like so: $dbh = DBI->connect("DBI:mysql:database=$db;host=$host", $user, $password, {RaiseError => 1}); Once you have connected to a database, you can execute SQL statements with: my $query = sprintf("INSERT INTO foo VALUES (%d, %s)", $number, $dbh->quote("name")); $dbh->do($query); See L<DBI> for details on the quote and do methods. An alternative approach is $dbh->do("INSERT INTO foo VALUES (?, ?)", undef, $number, $name); in which case the quote method is executed automatically. See also the bind_param method in L<DBI>. See L</"DATABASE HANDLES"> below for more details on database handles. If you want to retrieve results, you need to create a so-called statement handle with: $sth = $dbh->prepare("SELECT * FROM $table"); $sth->execute(); This statement handle can be used for multiple things. First of all you can retrieve a row of data: my $row = $sth->fetchrow_hashref(); If your table has columns ID and NAME, then $row will be hash ref with keys ID and NAME. See L</"STATEMENT HANDLES"> below for more details on statement handles. But now for a more formal approach: =head2 Class Methods =over =item B<connect> use DBI; $dsn = "DBI:mysql:$database"; $dsn = "DBI:mysql:database=$database;host=$hostname"; $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port"; $dbh = DBI->connect($dsn, $user, $password); The C<database> is not a required attribute, but please note that MySQL has no such thing as a default database. If you don't specify the database at connection time your active database will be null and you'd need to prefix your tables with the database name; i.e. 'SELECT * FROM mydb.mytable'. This is similar to the behavior of the mysql command line client. Also, 'SELECT DATABASE()' will return the current database active for the handle. =over =item host =item port The hostname, if not specified or specified as '' or 'localhost', will default to a MySQL server running on the local machine using the default for the UNIX socket. To connect to a MySQL server on the local machine via TCP, you must specify the loopback IP address (127.0.0.1) as the host. Should the MySQL server be running on a non-standard port number, you may explicitly state the port number to connect to in the C<hostname> argument, by concatenating the I<hostname> and I<port number> together separated by a colon ( C<:> ) character or by using the C<port> argument. To connect to a MySQL server on localhost using TCP/IP, you must specify the hostname as 127.0.0.1 (with the optional port). When connecting to a MySQL Server with IPv6, a bracketed IPv6 address should be used. Example DSN: my $dsn = "DBI:mysql:;host=[1a12:2800:6f2:85::f20:8cf];port=3306"; =item mysql_client_found_rows Enables (TRUE value) or disables (FALSE value) the flag CLIENT_FOUND_ROWS while connecting to the MySQL server. This has a somewhat funny effect: Without mysql_client_found_rows, if you perform a query like UPDATE $table SET id = 1 WHERE id = 1; then the MySQL engine will always return 0, because no rows have changed. With mysql_client_found_rows however, it will return the number of rows that have an id 1, as some people are expecting. (At least for compatibility to other engines.) =item mysql_compression If your DSN contains the option "mysql_compression=1", then the communication between client and server will be compressed. =item mysql_connect_timeout If your DSN contains the option "mysql_connect_timeout=##", the connect request to the server will timeout if it has not been successful after the given number of seconds. =item mysql_write_timeout If your DSN contains the option "mysql_write_timeout=##", the write operation to the server will timeout if it has not been successful after the given number of seconds. =item mysql_read_timeout If your DSN contains the option "mysql_read_timeout=##", the read operation to the server will timeout if it has not been successful after the given number of seconds. =item mysql_init_command If your DSN contains the option "mysql_init_command=##", then this SQL statement is executed when connecting to the MySQL server. It is automatically re-executed if reconnection occurs. =item mysql_skip_secure_auth This option is for older mysql databases that don't have secure auth set. =item mysql_read_default_file =item mysql_read_default_group These options can be used to read a config file like /etc/my.cnf or ~/.my.cnf. By default MySQL's C client library doesn't use any config files unlike the client programs (mysql, mysqladmin, ...) that do, but outside of the C client library. Thus you need to explicitly request reading a config file, as in $dsn = "DBI:mysql:test;mysql_read_default_file=/home/joe/my.cnf"; $dbh = DBI->connect($dsn, $user, $password) The option mysql_read_default_group can be used to specify the default group in the config file: Usually this is the I<client> group, but see the following example: [client] host=localhost [perl] host=perlhost (Note the order of the entries! The example won't work, if you reverse the [client] and [perl] sections!) If you read this config file, then you'll be typically connected to I<localhost>. However, by using $dsn = "DBI:mysql:test;mysql_read_default_group=perl;" . "mysql_read_default_file=/home/joe/my.cnf"; $dbh = DBI->connect($dsn, $user, $password); you'll be connected to I<perlhost>. Note that if you specify a default group and do not specify a file, then the default config files will all be read. See the documentation of the C function mysql_options() for details. =item mysql_socket It is possible to choose the Unix socket that is used for connecting to the server. This is done, for example, with mysql_socket=/dev/mysql Usually there's no need for this option, unless you are using another location for the socket than that built into the client. =item mysql_ssl A true value turns on the CLIENT_SSL flag when connecting to the MySQL server and enforce SSL encryption. A false value (which is default) disable SSL encryption with the MySQL server. When enabling SSL encryption you should set also other SSL options, at least mysql_ssl_ca_file or mysql_ssl_ca_path. mysql_ssl=1 mysql_ssl_verify_server_cert=1 mysql_ssl_ca_file=/path/to/ca_cert.pem This means that your communication with the server will be encrypted. Please note that this can only work if you enabled SSL when compiling DBD::mysql; this is the default starting version 4.034. See L<DBD::mysql::INSTALL> for more details. =item mysql_ssl_ca_file The path to a file in PEM format that contains a list of trusted SSL certificate authorities. When set MySQL server certificate is checked that it is signed by some CA certificate in the list. Common Name value is not verified unless C<mysql_ssl_verify_server_cert> is enabled. =item mysql_ssl_ca_path The path to a directory that contains trusted SSL certificate authority certificates in PEM format. When set MySQL server certificate is checked that it is signed by some CA certificate in the list. Common Name value is not verified unless C<mysql_ssl_verify_server_cert> is enabled. Please note that this option is supported only if your MySQL client was compiled with OpenSSL library, and not with default yaSSL library. =item mysql_ssl_verify_server_cert Checks the server's Common Name value in the certificate that the server sends to the client. The client verifies that name against the host name the client uses for connecting to the server, and the connection fails if there is a mismatch. For encrypted connections, this option helps prevent man-in-the-middle attacks. Verification of the host name is disabled by default. =item mysql_ssl_client_key The name of the SSL key file in PEM format to use for establishing a secure connection. =item mysql_ssl_client_cert The name of the SSL certificate file in PEM format to use for establishing a secure connection. =item mysql_ssl_cipher A list of permissible ciphers to use for connection encryption. If no cipher in the list is supported, encrypted connections will not work. mysql_ssl_cipher=AES128-SHA mysql_ssl_cipher=DHE-RSA-AES256-SHA:AES128-SHA =item mysql_ssl_optional Setting C<mysql_ssl_optional> to true disables strict SSL enforcement and makes SSL connection optional. This option opens security hole for man-in-the-middle attacks. Default value is false which means that C<mysql_ssl> set to true enforce SSL encryption. This option was introduced in 4.043 version of DBD::mysql. Due to L<The BACKRONYM|http://backronym.fail/> and L<The Riddle|http://riddle.link/> vulnerabilities in libmysqlclient library, enforcement of SSL encryption was not possbile and therefore C<mysql_ssl_optional=1> was effectively set for all DBD::mysql versions prior to 4.043. Starting with 4.043, DBD::mysql with C<mysql_ssl=1> could refuse connection to MySQL server if underlaying libmysqlclient library is vulnerable. Option C<mysql_ssl_optional> can be used to make SSL connection vulnerable. =item mysql_local_infile The LOCAL capability for LOAD DATA may be disabled in the MySQL client library by default. If your DSN contains the option "mysql_local_infile=1", LOAD DATA LOCAL will be enabled. (However, this option is *ineffective* if the server has also been configured to disallow LOCAL.) =item mysql_multi_statements Support for multiple statements separated by a semicolon (;) may be enabled by using this option. Enabling this option may cause problems if server-side prepared statements are also enabled. =item mysql_server_prepare This option is used to enable server side prepared statements. To use server side prepared statements, all you need to do is set the variable mysql_server_prepare in the connect: $dbh = DBI->connect( "DBI:mysql:database=test;host=localhost;mysql_server_prepare=1", "", "", { RaiseError => 1, AutoCommit => 1 } ); or: $dbh = DBI->connect( "DBI:mysql:database=test;host=localhost", "", "", { RaiseError => 1, AutoCommit => 1, mysql_server_prepare => 1 } ); There are many benefits to using server side prepare statements, mostly if you are performing many inserts because of that fact that a single statement is prepared to accept multiple insert values. To make sure that the 'make test' step tests whether server prepare works, you just need to export the env variable MYSQL_SERVER_PREPARE: export MYSQL_SERVER_PREPARE=1 Please note that mysql server cannot prepare or execute some prepared statements. In this case DBD::mysql fallbacks to normal non-prepared statement and tries again. =item mysql_server_prepare_disable_fallback This option disable fallback to normal non-prepared statement when mysql server does not support execution of current statement as prepared. Useful when you want to be sure that statement is going to be executed as server side prepared. Error message and code in case of failure is propagated back to DBI. =item mysql_embedded_options The option <mysql_embedded_options> can be used to pass 'command-line' options to embedded server. Example: use DBI; $testdsn="DBI:mysqlEmb:database=test;mysql_embedded_options=--help,--verbose"; $dbh = DBI->connect($testdsn,"a","b"); This would cause the command line help to the embedded MySQL server library to be printed. =item mysql_embedded_groups The option <mysql_embedded_groups> can be used to specify the groups in the config file(I<my.cnf>) which will be used to get options for embedded server. If not specified [server] and [embedded] groups will be used. Example: $testdsn="DBI:mysqlEmb:database=test;mysql_embedded_groups=embedded_server,common"; =item mysql_conn_attrs The option <mysql_conn_attrs> is a hash of attribute names and values which can be used to send custom connection attributes to the server. Some attributes like '_os', '_platform', '_client_name' and '_client_version' are added by libmysqlclient and 'program_name' is added by DBD::mysql. You can then later read these attributes from the performance schema tables which can be quite helpful for profiling your database or creating statistics. You'll have to use a MySQL 5.6 server and libmysqlclient or newer to leverage this feature. my $dbh= DBI->connect($dsn, $user, $password, { AutoCommit => 0, mysql_conn_attrs => { foo => 'bar', wiz => 'bang' }, }); Now you can select the results from the performance schema tables. You can do this in the same session, but also afterwards. It can be very useful to answer questions like 'which script sent this query?'. my $results = $dbh->selectall_hashref( 'SELECT * FROM performance_schema.session_connect_attrs', 'ATTR_NAME' ); This returns: $result = { 'foo' => { 'ATTR_VALUE' => 'bar', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => 'foo', 'ORDINAL_POSITION' => '6' }, 'wiz' => { 'ATTR_VALUE' => 'bang', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => 'wiz', 'ORDINAL_POSITION' => '3' }, 'program_name' => { 'ATTR_VALUE' => './foo.pl', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => 'program_name', 'ORDINAL_POSITION' => '5' }, '_client_name' => { 'ATTR_VALUE' => 'libmysql', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => '_client_name', 'ORDINAL_POSITION' => '1' }, '_client_version' => { 'ATTR_VALUE' => '5.6.24', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => '_client_version', 'ORDINAL_POSITION' => '7' }, '_os' => { 'ATTR_VALUE' => 'osx10.8', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => '_os', 'ORDINAL_POSITION' => '0' }, '_pid' => { 'ATTR_VALUE' => '59860', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => '_pid', 'ORDINAL_POSITION' => '2' }, '_platform' => { 'ATTR_VALUE' => 'x86_64', 'PROCESSLIST_ID' => '3', 'ATTR_NAME' => '_platform', 'ORDINAL_POSITION' => '4' } }; =back =back =head2 Private MetaData Methods =over =item B<ListDBs> my $drh = DBI->install_driver("mysql"); @dbs = $drh->func("$hostname:$port", '_ListDBs'); @dbs = $drh->func($hostname, $port, '_ListDBs'); @dbs = $dbh->func('_ListDBs'); Returns a list of all databases managed by the MySQL server running on C<$hostname>, port C<$port>. This is a legacy method. Instead, you should use the portable method @dbs = DBI->data_sources("mysql"); =back =head1 DATABASE HANDLES The DBD::mysql driver supports the following attributes of database handles (read only): $errno = $dbh->{'mysql_errno'}; $error = $dbh->{'mysql_error'}; $info = $dbh->{'mysql_hostinfo'}; $info = $dbh->{'mysql_info'}; $insertid = $dbh->{'mysql_insertid'}; $info = $dbh->{'mysql_protoinfo'}; $info = $dbh->{'mysql_serverinfo'}; $info = $dbh->{'mysql_stat'}; $threadId = $dbh->{'mysql_thread_id'}; These correspond to mysql_errno(), mysql_error(), mysql_get_host_info(), mysql_info(), mysql_insert_id(), mysql_get_proto_info(), mysql_get_server_info(), mysql_stat() and mysql_thread_id(), respectively. =over 2 =item mysql_clientinfo List information of the MySQL client library that DBD::mysql was built against: print "$dbh->{mysql_clientinfo}\n"; 5.2.0-MariaDB =item mysql_clientversion print "$dbh->{mysql_clientversion}\n"; 50200 =item mysql_serverversion print "$dbh->{mysql_serverversion}\n"; 50200 =item mysql_dbd_stats $info_hashref = $dhb->{mysql_dbd_stats}; DBD::mysql keeps track of some statistics in the mysql_dbd_stats attribute. The following stats are being maintained: =over 8 =item auto_reconnects_ok The number of times that DBD::mysql successfully reconnected to the mysql server. =item auto_reconnects_failed The number of times that DBD::mysql tried to reconnect to mysql but failed. =back =back The DBD::mysql driver also supports the following attributes of database handles (read/write): =over =item mysql_auto_reconnect This attribute determines whether DBD::mysql will automatically reconnect to mysql if the connection be lost. This feature defaults to off; however, if either the GATEWAY_INTERFACE or MOD_PERL environment variable is set, DBD::mysql will turn mysql_auto_reconnect on. Setting mysql_auto_reconnect to on is not advised if 'lock tables' is used because if DBD::mysql reconnect to mysql all table locks will be lost. This attribute is ignored when AutoCommit is turned off, and when AutoCommit is turned off, DBD::mysql will not automatically reconnect to the server. It is also possible to set the default value of the C<mysql_auto_reconnect> attribute for the $dbh by passing it in the C<\%attr> hash for C<DBI->connect>. $dbh->{mysql_auto_reconnect} = 1; or my $dbh = DBI->connect($dsn, $user, $password, { mysql_auto_reconnect => 1, }); Note that if you are using a module or framework that performs reconnections for you (for example L<DBIx::Connector> in fixup mode), this value must be set to 0. =item mysql_use_result This attribute forces the driver to use mysql_use_result rather than mysql_store_result. The former is faster and less memory consuming, but tends to block other processes. mysql_store_result is the default due to that fact storing the result is expected behavior with most applications. It is possible to set the default value of the C<mysql_use_result> attribute for the $dbh via the DSN: $dbh = DBI->connect("DBI:mysql:test;mysql_use_result=1", "root", ""); You can also set it after creation of the database handle: $dbh->{mysql_use_result} = 0; # disable $dbh->{mysql_use_result} = 1; # enable You can also set or unset the C<mysql_use_result> setting on your statement handle, when creating the statement handle or after it has been created. See L</"STATEMENT HANDLES">. =item mysql_enable_utf8 This attribute determines whether DBD::mysql should assume strings stored in the database are utf8. This feature defaults to off. When set, a data retrieved from a textual column type (char, varchar, etc) will have the UTF-8 flag turned on if necessary. This enables character semantics on that string. You will also need to ensure that your database / table / column is configured to use UTF8. See for more information the chapter on character set support in the MySQL manual: L<http://dev.mysql.com/doc/refman/5.7/en/charset.html> Additionally, turning on this flag tells MySQL that incoming data should be treated as UTF-8. This will only take effect if used as part of the call to connect(). If you turn the flag on after connecting, you will need to issue the command C<SET NAMES utf8> to get the same effect. =item mysql_enable_utf8mb4 This is similar to mysql_enable_utf8, but is capable of handling 4-byte UTF-8 characters. =item mysql_bind_type_guessing This attribute causes the driver (emulated prepare statements) to attempt to guess if a value being bound is a numeric value, and if so, doesn't quote the value. This was created by Dragonchild and is one way to deal with the performance issue of using quotes in a statement that is inserting or updating a large numeric value. This was previously called C<unsafe_bind_type_guessing> because it is experimental. I have successfully run the full test suite with this option turned on, the name can now be simply C<mysql_bind_type_guessing>. CAVEAT: Even though you can insert an integer value into a character column, if this column is indexed, if you query that column with the integer value not being quoted, it will not use the index: MariaDB [test]> explain select * from test where value0 = '3' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: test type: ref possible_keys: value0 key: value0 key_len: 13 ref: const rows: 1 Extra: Using index condition 1 row in set (0.00 sec) MariaDB [test]> explain select * from test where value0 = 3 -> \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: test type: ALL possible_keys: value0 key: NULL key_len: NULL ref: NULL rows: 6 Extra: Using where 1 row in set (0.00 sec) See bug: https://rt.cpan.org/Ticket/Display.html?id=43822 C<mysql_bind_type_guessing> can be turned on via - through DSN my $dbh= DBI->connect('DBI:mysql:test', 'username', 'pass', { mysql_bind_type_guessing => 1}) - OR after handle creation $dbh->{mysql_bind_type_guessing} = 1; =item mysql_bind_comment_placeholders This attribute causes the driver (emulated prepare statements) will cause any placeholders in comments to be bound. This is not correct prepared statement behavior, but some developers have come to depend on this behavior, so I have made it available in 4.015 =item mysql_no_autocommit_cmd This attribute causes the driver to not issue 'set autocommit' either through explicit or using mysql_autocommit(). This is particularly useful in the case of using MySQL Proxy. See the bug report: https://rt.cpan.org/Public/Bug/Display.html?id=46308 C<mysql_no_autocommit_cmd> can be turned on when creating the database handle: my $dbh = DBI->connect('DBI:mysql:test', 'username', 'pass', { mysql_no_autocommit_cmd => 1}); or using an existing database handle: $dbh->{mysql_no_autocommit_cmd} = 1; =item ping This can be used to send a ping to the server. $rc = $dbh->ping(); =back =head1 STATEMENT HANDLES The statement handles of DBD::mysql support a number of attributes. You access these by using, for example, my $numFields = $sth->{NUM_OF_FIELDS}; Note, that most attributes are valid only after a successful I<execute>. An C<undef> value will returned otherwise. The most important exception is the C<mysql_use_result> attribute, which forces the driver to use mysql_use_result rather than mysql_store_result. The former is faster and less memory consuming, but tends to block other processes. (That's why mysql_store_result is the default.) To set the C<mysql_use_result> attribute, use either of the following: my $sth = $dbh->prepare("QUERY", { mysql_use_result => 1}); or my $sth = $dbh->prepare($sql); $sth->{mysql_use_result} = 1; Column dependent attributes, for example I<NAME>, the column names, are returned as a reference to an array. The array indices are corresponding to the indices of the arrays returned by I<fetchrow> and similar methods. For example the following code will print a header of table names together with all rows: my $sth = $dbh->prepare("SELECT * FROM $table") || die "Error:" . $dbh->errstr . "\n"; $sth->execute || die "Error:" . $sth->errstr . "\n"; my $names = $sth->{NAME}; my $numFields = $sth->{'NUM_OF_FIELDS'} - 1; for my $i ( 0..$numFields ) { printf("%s%s", $i ? "," : "", $$names[$i]); } print "\n"; while (my $ref = $sth->fetchrow_arrayref) { for my $i ( 0..$numFields ) { printf("%s%s", $i ? "," : "", $$ref[$i]); } print "\n"; } For portable applications you should restrict yourself to attributes with capitalized or mixed case names. Lower case attribute names are private to DBD::mysql. The attribute list includes: =over =item ChopBlanks this attribute determines whether a I<fetchrow> will chop preceding and trailing blanks off the column values. Chopping blanks does not have impact on the I<max_length> attribute. =item mysql_insertid If the statement you executed performs an INSERT, and there is an AUTO_INCREMENT column in the table you inserted in, this attribute holds the value stored into the AUTO_INCREMENT column, if that value is automatically generated, by storing NULL or 0 or was specified as an explicit value. Typically, you'd access the value via $sth->{mysql_insertid}. The value can also be accessed via $dbh->{mysql_insertid} but this can easily produce incorrect results in case one database handle is shared. =item mysql_is_blob Reference to an array of boolean values; TRUE indicates, that the respective column is a blob. This attribute is valid for MySQL only. =item mysql_is_key Reference to an array of boolean values; TRUE indicates, that the respective column is a key. This is valid for MySQL only. =item mysql_is_num Reference to an array of boolean values; TRUE indicates, that the respective column contains numeric values. =item mysql_is_pri_key Reference to an array of boolean values; TRUE indicates, that the respective column is a primary key. =item mysql_is_auto_increment Reference to an array of boolean values; TRUE indicates that the respective column is an AUTO_INCREMENT column. This is only valid for MySQL. =item mysql_length =item mysql_max_length A reference to an array of maximum column sizes. The I<max_length> is the maximum physically present in the result table, I<length> gives the theoretically possible maximum. I<max_length> is valid for MySQL only. =item NAME A reference to an array of column names. =item NULLABLE A reference to an array of boolean values; TRUE indicates that this column may contain NULL's. =item NUM_OF_FIELDS Number of fields returned by a I<SELECT> or I<LISTFIELDS> statement. You may use this for checking whether a statement returned a result: A zero value indicates a non-SELECT statement like I<INSERT>, I<DELETE> or I<UPDATE>. =item mysql_table A reference to an array of table names, useful in a I<JOIN> result. =item TYPE A reference to an array of column types. The engine's native column types are mapped to portable types like DBI::SQL_INTEGER() or DBI::SQL_VARCHAR(), as good as possible. Not all native types have a meaningful equivalent, for example DBD::mysql::FIELD_TYPE_INTERVAL is mapped to DBI::SQL_VARCHAR(). If you need the native column types, use I<mysql_type>. See below. =item mysql_type A reference to an array of MySQL's native column types, for example DBD::mysql::FIELD_TYPE_SHORT() or DBD::mysql::FIELD_TYPE_STRING(). Use the I<TYPE> attribute, if you want portable types like DBI::SQL_SMALLINT() or DBI::SQL_VARCHAR(). =item mysql_type_name Similar to mysql, but type names and not numbers are returned. Whenever possible, the ANSI SQL name is preferred. =item mysql_warning_count The number of warnings generated during execution of the SQL statement. This attribute is available on both statement handles and database handles. =back =head1 TRANSACTION SUPPORT The transaction support works as follows: =over =item * By default AutoCommit mode is on, following the DBI specifications. =item * If you execute $dbh->{AutoCommit} = 0; or $dbh->{AutoCommit} = 1; then the driver will set the MySQL server variable autocommit to 0 or 1, respectively. Switching from 0 to 1 will also issue a COMMIT, following the DBI specifications. =item * The methods $dbh->rollback(); $dbh->commit(); will issue the commands ROLLBACK and COMMIT, respectively. A ROLLBACK will also be issued if AutoCommit mode is off and the database handles DESTROY method is called. Again, this is following the DBI specifications. =back Given the above, you should note the following: =over =item * You should never change the server variable autocommit manually, unless you are ignoring DBI's transaction support. =item * Switching AutoCommit mode from on to off or vice versa may fail. You should always check for errors when changing AutoCommit mode. The suggested way of doing so is using the DBI flag RaiseError. If you don't like RaiseError, you have to use code like the following: $dbh->{AutoCommit} = 0; if ($dbh->{AutoCommit}) { # An error occurred! } =item * If you detect an error while changing the AutoCommit mode, you should no longer use the database handle. In other words, you should disconnect and reconnect again, because the transaction mode is unpredictable. Alternatively you may verify the transaction mode by checking the value of the server variable autocommit. However, such behaviour isn't portable. =item * DBD::mysql has a "reconnect" feature that handles the so-called MySQL "morning bug": If the server has disconnected, most probably due to a timeout, then by default the driver will reconnect and attempt to execute the same SQL statement again. However, this behaviour is disabled when AutoCommit is off: Otherwise the transaction state would be completely unpredictable after a reconnect. =item * The "reconnect" feature of DBD::mysql can be toggled by using the L<mysql_auto_reconnect> attribute. This behaviour should be turned off in code that uses LOCK TABLE because if the database server time out and DBD::mysql reconnect, table locks will be lost without any indication of such loss. =back =head1 MULTIPLE RESULT SETS DBD::mysql supports multiple result sets, thanks to Guy Harrison! The basic usage of multiple result sets is do { while (@row = $sth->fetchrow_array()) { do stuff; } } while ($sth->more_results) An example would be: $dbh->do("drop procedure if exists someproc") or print $DBI::errstr; $dbh->do("create procedure someproc() deterministic begin declare a,b,c,d int; set a=1; set b=2; set c=3; set d=4; select a, b, c, d; select d, c, b, a; select b, a, c, d; select c, b, d, a; end") or print $DBI::errstr; $sth=$dbh->prepare('call someproc()') || die $DBI::err.": ".$DBI::errstr; $sth->execute || die DBI::err.": ".$DBI::errstr; $rowset=0; do { print "\nRowset ".++$i."\n---------------------------------------\n\n"; foreach $colno (0..$sth->{NUM_OF_FIELDS}-1) { print $sth->{NAME}->[$colno]."\t"; } print "\n"; while (@row= $sth->fetchrow_array()) { foreach $field (0..$#row) { print $row[$field]."\t"; } print "\n"; } } until (!$sth->more_results) =head2 Issues with multiple result sets Please be aware there could be issues if your result sets are "jagged", meaning the number of columns of your results vary. Varying numbers of columns could result in your script crashing. =head1 MULTITHREADING The multithreading capabilities of DBD::mysql depend completely on the underlying C libraries. The modules are working with handle data only, no global variables are accessed or (to the best of my knowledge) thread unsafe functions are called. Thus DBD::mysql is believed to be completely thread safe, if the C libraries are thread safe and you don't share handles among threads. The obvious question is: Are the C libraries thread safe? In the case of MySQL the answer is "mostly" and, in theory, you should be able to get a "yes", if the C library is compiled for being thread safe (By default it isn't.) by passing the option -with-thread-safe-client to configure. See the section on I<How to make a threadsafe client> in the manual. =head1 ASYNCHRONOUS QUERIES You can make a single asynchronous query per MySQL connection; this allows you to submit a long-running query to the server and have an event loop inform you when it's ready. An asynchronous query is started by either setting the 'async' attribute to a true value in the L<DBI/do> method, or in the L<DBI/prepare> method. Statements created with 'async' set to true in prepare always run their queries asynchronously when L<DBI/execute> is called. The driver also offers three additional methods: C<mysql_async_result>, C<mysql_async_ready>, and C<mysql_fd>. C<mysql_async_result> returns what do or execute would have; that is, the number of rows affected. C<mysql_async_ready> returns true if C<mysql_async_result> will not block, and zero otherwise. They both return C<undef> if that handle is not currently running an asynchronous query. C<mysql_fd> returns the file descriptor number for the MySQL connection; you can use this in an event loop. Here's an example of how to use the asynchronous query interface: use feature 'say'; $dbh->do('SELECT SLEEP(10)', { async => 1 }); until($dbh->mysql_async_ready) { say 'not ready yet!'; sleep 1; } my $rows = $dbh->mysql_async_result; =head1 INSTALLATION See L<DBD::mysql::INSTALL>. =head1 AUTHORS Originally, there was a non-DBI driver, Mysql, which was much like PHP drivers such as mysql and mysqli. The B<Mysql> module was originally written by Andreas König <koenig@kulturbox.de> who still, to this day, contributes patches to DBD::mysql. An emulated version of Mysql was provided to DBD::mysql from Jochen Wiedmann, but eventually deprecated as it was another bundle of code to maintain. The first incarnation of DBD::mysql was developed by Alligator Descartes, who was also aided and abetted by Gary Shea, Andreas König and Tim Bunce. The current incarnation of B<DBD::mysql> was written by Jochen Wiedmann, then numerous changes and bug-fixes were added by Rudy Lippan. Next, prepared statement support was added by Patrick Galbraith and Alexy Stroganov (who also solely added embedded server support). For the past nine years DBD::mysql has been maintained by Patrick Galbraith (I<patg@patg.net>), and recently with the great help of Michiel Beijen (I<michiel.beijen@gmail.com>), along with the entire community of Perl developers who keep sending patches to help continue improving DBD::mysql =head1 CONTRIBUTIONS Anyone who desires to contribute to this project is encouraged to do so. Currently, the source code for this project can be found at Github: L<https://github.com/perl5-dbi/DBD-mysql/> Either fork this repository and produce a branch with your changeset that the maintainer can merge to his tree, or create a diff with git. The maintainer is more than glad to take contributions from the community as many features and fixes from DBD::mysql have come from the community. =head1 COPYRIGHT This module is =over =item * Large Portions Copyright (c) 2004-2013 Patrick Galbraith =item * Large Portions Copyright (c) 2004-2006 Alexey Stroganov =item * Large Portions Copyright (c) 2003-2005 Rudolf Lippan =item * Large Portions Copyright (c) 1997-2003 Jochen Wiedmann, with code portions =item * Copyright (c)1994-1997 their original authors =back =head1 LICENSE This module is released under the same license as Perl itself. See L<http://www.perl.com/perl/misc/Artistic.html> for details. =head1 MAILING LIST SUPPORT This module is maintained and supported on a mailing list, dbi-users. To subscribe to this list, send an email to dbi-users-subscribe@perl.org Mailing list archives are at L<http://groups.google.com/group/perl.dbi.users?hl=en&lr=> =head1 ADDITIONAL DBI INFORMATION Additional information on the DBI project can be found on the World Wide Web at the following URL: L<http://dbi.perl.org> where documentation, pointers to the mailing lists and mailing list archives and pointers to the most current versions of the modules can be used. Information on the DBI interface itself can be gained by typing: perldoc DBI Information on DBD::mysql specifically can be gained by typing: perldoc DBD::mysql (this will display the document you're currently reading) =head1 BUG REPORTING, ENHANCEMENT/FEATURE REQUESTS Please report bugs, including all the information needed such as DBD::mysql version, MySQL version, OS type/version, etc to this link: L<https://rt.cpan.org/Dist/Display.html?Name=DBD-mysql> Note: until recently, MySQL/Sun/Oracle responded to bugs and assisted in fixing bugs which many thanks should be given for their help! This driver is outside the realm of the numerous components they support, and the maintainer and community solely support DBD::mysql =cut DBD/DBM.pm 0000644 00000145600 15037233337 0006111 0 ustar 00 ####################################################################### # # DBD::DBM - a DBI driver for DBM files # # Copyright (c) 2004 by Jeff Zucker < jzucker AT cpan.org > # Copyright (c) 2010-2013 by Jens Rehsack & H.Merijn Brand # # All rights reserved. # # You may freely distribute and/or modify this module under the terms # of either the GNU General Public License (GPL) or the Artistic License, # as specified in the Perl README file. # # USERS - see the pod at the bottom of this file # # DBD AUTHORS - see the comments in the code # ####################################################################### require 5.008; use strict; ################# package DBD::DBM; ################# use base qw( DBD::File ); use vars qw($VERSION $ATTRIBUTION $drh $methods_already_installed); $VERSION = '0.08'; $ATTRIBUTION = 'DBD::DBM by Jens Rehsack'; # no need to have driver() unless you need private methods # sub driver ($;$) { my ( $class, $attr ) = @_; return $drh if ($drh); # do the real work in DBD::File # $attr->{Attribution} = 'DBD::DBM by Jens Rehsack'; $drh = $class->SUPER::driver($attr); # install private methods # # this requires that dbm_ (or foo_) be a registered prefix # but you can write private methods before official registration # by hacking the $dbd_prefix_registry in a private copy of DBI.pm # unless ( $methods_already_installed++ ) { DBD::DBM::st->install_method('dbm_schema'); } return $drh; } sub CLONE { undef $drh; } ##################### package DBD::DBM::dr; ##################### $DBD::DBM::dr::imp_data_size = 0; @DBD::DBM::dr::ISA = qw(DBD::File::dr); # you could put some :dr private methods here # you may need to over-ride some DBD::File::dr methods here # but you can probably get away with just letting it do the work # in most cases ##################### package DBD::DBM::db; ##################### $DBD::DBM::db::imp_data_size = 0; @DBD::DBM::db::ISA = qw(DBD::File::db); use Carp qw/carp/; sub validate_STORE_attr { my ( $dbh, $attrib, $value ) = @_; if ( $attrib eq "dbm_ext" or $attrib eq "dbm_lockfile" ) { ( my $newattrib = $attrib ) =~ s/^dbm_/f_/g; carp "Attribute '$attrib' is depreciated, use '$newattrib' instead" if ($^W); $attrib = $newattrib; } return $dbh->SUPER::validate_STORE_attr( $attrib, $value ); } sub validate_FETCH_attr { my ( $dbh, $attrib ) = @_; if ( $attrib eq "dbm_ext" or $attrib eq "dbm_lockfile" ) { ( my $newattrib = $attrib ) =~ s/^dbm_/f_/g; carp "Attribute '$attrib' is depreciated, use '$newattrib' instead" if ($^W); $attrib = $newattrib; } return $dbh->SUPER::validate_FETCH_attr($attrib); } sub set_versions { my $this = $_[0]; $this->{dbm_version} = $DBD::DBM::VERSION; return $this->SUPER::set_versions(); } sub init_valid_attributes { my $dbh = shift; # define valid private attributes # # attempts to set non-valid attrs in connect() or # with $dbh->{attr} will throw errors # # the attrs here *must* start with dbm_ or foo_ # # see the STORE methods below for how to check these attrs # $dbh->{dbm_valid_attrs} = { dbm_type => 1, # the global DBM type e.g. SDBM_File dbm_mldbm => 1, # the global MLDBM serializer dbm_cols => 1, # the global column names dbm_version => 1, # verbose DBD::DBM version dbm_store_metadata => 1, # column names, etc. dbm_berkeley_flags => 1, # for BerkeleyDB dbm_valid_attrs => 1, # DBD::DBM::db valid attrs dbm_readonly_attrs => 1, # DBD::DBM::db r/o attrs dbm_meta => 1, # DBD::DBM public access for f_meta dbm_tables => 1, # DBD::DBM public access for f_meta }; $dbh->{dbm_readonly_attrs} = { dbm_version => 1, # verbose DBD::DBM version dbm_valid_attrs => 1, # DBD::DBM::db valid attrs dbm_readonly_attrs => 1, # DBD::DBM::db r/o attrs dbm_meta => 1, # DBD::DBM public access for f_meta }; $dbh->{dbm_meta} = "dbm_tables"; return $dbh->SUPER::init_valid_attributes(); } sub init_default_attributes { my ( $dbh, $phase ) = @_; $dbh->SUPER::init_default_attributes($phase); $dbh->{f_lockfile} = '.lck'; return $dbh; } sub get_dbm_versions { my ( $dbh, $table ) = @_; $table ||= ''; my $meta; my $class = $dbh->{ImplementorClass}; $class =~ s/::db$/::Table/; $table and ( undef, $meta ) = $class->get_table_meta( $dbh, $table, 1 ); $meta or ( $meta = {} and $class->bootstrap_table_meta( $dbh, $meta, $table ) ); my $dver; my $dtype = $meta->{dbm_type}; eval { $dver = $meta->{dbm_type}->VERSION(); # *) when we're still alive here, everything went ok - no need to check for $@ $dtype .= " ($dver)"; }; if ( $meta->{dbm_mldbm} ) { $dtype .= ' + MLDBM'; eval { $dver = MLDBM->VERSION(); $dtype .= " ($dver)"; # (*) }; eval { my $ser_class = "MLDBM::Serializer::" . $meta->{dbm_mldbm}; my $ser_mod = $ser_class; $ser_mod =~ s|::|/|g; $ser_mod .= ".pm"; require $ser_mod; $dver = $ser_class->VERSION(); $dtype .= ' + ' . $ser_class; # (*) $dver and $dtype .= " ($dver)"; # (*) }; } return sprintf( "%s using %s", $dbh->{dbm_version}, $dtype ); } # you may need to over-ride some DBD::File::db methods here # but you can probably get away with just letting it do the work # in most cases ##################### package DBD::DBM::st; ##################### $DBD::DBM::st::imp_data_size = 0; @DBD::DBM::st::ISA = qw(DBD::File::st); sub FETCH { my ( $sth, $attr ) = @_; if ( $attr eq "NULLABLE" ) { my @colnames = $sth->sql_get_colnames(); # XXX only BerkeleyDB fails having NULL values for non-MLDBM databases, # none accept it for key - but it requires more knowledge between # queries and tables storage to return fully correct information $attr eq "NULLABLE" and return [ map { 0 } @colnames ]; } return $sth->SUPER::FETCH($attr); } # FETCH sub dbm_schema { my ( $sth, $tname ) = @_; return $sth->set_err( $DBI::stderr, 'No table name supplied!' ) unless $tname; my $tbl_meta = $sth->{Database}->func( $tname, "f_schema", "get_sql_engine_meta" ) or return $sth->set_err( $sth->{Database}->err(), $sth->{Database}->errstr() ); return $tbl_meta->{$tname}->{f_schema}; } # you could put some :st private methods here # you may need to over-ride some DBD::File::st methods here # but you can probably get away with just letting it do the work # in most cases ############################ package DBD::DBM::Statement; ############################ @DBD::DBM::Statement::ISA = qw(DBD::File::Statement); ######################## package DBD::DBM::Table; ######################## use Carp; use Fcntl; @DBD::DBM::Table::ISA = qw(DBD::File::Table); my $dirfext = $^O eq 'VMS' ? '.sdbm_dir' : '.dir'; my %reset_on_modify = ( dbm_type => "dbm_tietype", dbm_mldbm => "dbm_tietype", ); __PACKAGE__->register_reset_on_modify( \%reset_on_modify ); my %compat_map = ( ( map { $_ => "dbm_$_" } qw(type mldbm store_metadata) ), dbm_ext => 'f_ext', dbm_file => 'f_file', dbm_lockfile => ' f_lockfile', ); __PACKAGE__->register_compat_map( \%compat_map ); sub bootstrap_table_meta { my ( $self, $dbh, $meta, $table ) = @_; $meta->{dbm_type} ||= $dbh->{dbm_type} || 'SDBM_File'; $meta->{dbm_mldbm} ||= $dbh->{dbm_mldbm} if ( $dbh->{dbm_mldbm} ); $meta->{dbm_berkeley_flags} ||= $dbh->{dbm_berkeley_flags}; defined $meta->{f_ext} or $meta->{f_ext} = $dbh->{f_ext}; unless ( defined( $meta->{f_ext} ) ) { my $ext; if ( $meta->{dbm_type} eq 'SDBM_File' or $meta->{dbm_type} eq 'ODBM_File' ) { $ext = '.pag/r'; } elsif ( $meta->{dbm_type} eq 'NDBM_File' ) { # XXX NDBM_File on FreeBSD (and elsewhere?) may actually be Berkeley # behind the scenes and so create a single .db file. if ( $^O =~ /bsd/i or lc($^O) eq 'darwin' ) { $ext = '.db/r'; } elsif ( $^O eq 'SunOS' or $^O eq 'Solaris' or $^O eq 'AIX' ) { $ext = '.pag/r'; # here it's implemented like dbm - just a bit improved } # else wrapped GDBM } defined($ext) and $meta->{f_ext} = $ext; } $self->SUPER::bootstrap_table_meta( $dbh, $meta, $table ); } sub init_table_meta { my ( $self, $dbh, $meta, $table ) = @_; $meta->{f_dontopen} = 1; unless ( defined( $meta->{dbm_tietype} ) ) { my $tie_type = $meta->{dbm_type}; $INC{"$tie_type.pm"} or require "$tie_type.pm"; $tie_type eq 'BerkeleyDB' and $tie_type = 'BerkeleyDB::Hash'; if ( $meta->{dbm_mldbm} ) { $INC{"MLDBM.pm"} or require "MLDBM.pm"; $meta->{dbm_usedb} = $tie_type; $tie_type = 'MLDBM'; } $meta->{dbm_tietype} = $tie_type; } unless ( defined( $meta->{dbm_store_metadata} ) ) { my $store = $dbh->{dbm_store_metadata}; defined($store) or $store = 1; $meta->{dbm_store_metadata} = $store; } unless ( defined( $meta->{col_names} ) ) { defined( $dbh->{dbm_cols} ) and $meta->{col_names} = $dbh->{dbm_cols}; } $self->SUPER::init_table_meta( $dbh, $meta, $table ); } sub open_data { my ( $className, $meta, $attrs, $flags ) = @_; $className->SUPER::open_data( $meta, $attrs, $flags ); unless ( $flags->{dropMode} ) { # TIEING # # XXX allow users to pass in a pre-created tied object # my @tie_args; if ( $meta->{dbm_type} eq 'BerkeleyDB' ) { my $DB_CREATE = BerkeleyDB::DB_CREATE(); my $DB_RDONLY = BerkeleyDB::DB_RDONLY(); my %tie_flags; if ( my $f = $meta->{dbm_berkeley_flags} ) { defined( $f->{DB_CREATE} ) and $DB_CREATE = delete $f->{DB_CREATE}; defined( $f->{DB_RDONLY} ) and $DB_RDONLY = delete $f->{DB_RDONLY}; %tie_flags = %$f; } my $open_mode = $flags->{lockMode} || $flags->{createMode} ? $DB_CREATE : $DB_RDONLY; @tie_args = ( -Filename => $meta->{f_fqbn}, -Flags => $open_mode, %tie_flags ); } else { my $open_mode = O_RDONLY; $flags->{lockMode} and $open_mode = O_RDWR; $flags->{createMode} and $open_mode = O_RDWR | O_CREAT | O_TRUNC; @tie_args = ( $meta->{f_fqbn}, $open_mode, 0666 ); } if ( $meta->{dbm_mldbm} ) { $MLDBM::UseDB = $meta->{dbm_usedb}; $MLDBM::Serializer = $meta->{dbm_mldbm}; } $meta->{hash} = {}; my $tie_class = $meta->{dbm_tietype}; eval { tie %{ $meta->{hash} }, $tie_class, @tie_args }; $@ and croak "Cannot tie(\%h $tie_class @tie_args): $@"; -f $meta->{f_fqfn} or croak( "No such file: '" . $meta->{f_fqfn} . "'" ); } unless ( $flags->{createMode} ) { my ( $meta_data, $schema, $col_names ); if ( $meta->{dbm_store_metadata} ) { $meta_data = $col_names = $meta->{hash}->{"_metadata \0"}; if ( $meta_data and $meta_data =~ m~<dbd_metadata>(.+)</dbd_metadata>~is ) { $schema = $col_names = $1; $schema =~ s~.*<schema>(.+)</schema>.*~$1~is; $col_names =~ s~.*<col_names>(.+)</col_names>.*~$1~is; } } $col_names ||= $meta->{col_names} || [ 'k', 'v' ]; $col_names = [ split /,/, $col_names ] if ( ref $col_names ne 'ARRAY' ); if ( $meta->{dbm_store_metadata} and not $meta->{hash}->{"_metadata \0"} ) { $schema or $schema = ''; $meta->{hash}->{"_metadata \0"} = "<dbd_metadata>" . "<schema>$schema</schema>" . "<col_names>" . join( ",", @{$col_names} ) . "</col_names>" . "</dbd_metadata>"; } $meta->{schema} = $schema; $meta->{col_names} = $col_names; } } # you must define drop # it is called from execute of a SQL DROP statement # sub drop ($$) { my ( $self, $data ) = @_; my $meta = $self->{meta}; $meta->{hash} and untie %{ $meta->{hash} }; $self->SUPER::drop($data); # XXX extra_files -f $meta->{f_fqbn} . $dirfext and $meta->{f_ext} eq '.pag/r' and unlink( $meta->{f_fqbn} . $dirfext ); return 1; } # you must define fetch_row, it is called on all fetches; # it MUST return undef when no rows are left to fetch; # checking for $ary[0] is specific to hashes so you'll # probably need some other kind of check for nothing-left. # as Janis might say: "undef's just another word for # nothing left to fetch" :-) # sub fetch_row ($$) { my ( $self, $data ) = @_; my $meta = $self->{meta}; # fetch with %each # my @ary = each %{ $meta->{hash} }; $meta->{dbm_store_metadata} and $ary[0] and $ary[0] eq "_metadata \0" and @ary = each %{ $meta->{hash} }; my ( $key, $val ) = @ary; unless ($key) { delete $self->{row}; return; } my @row = ( ref($val) eq 'ARRAY' ) ? ( $key, @$val ) : ( $key, $val ); $self->{row} = @row ? \@row : undef; return wantarray ? @row : \@row; } # you must define push_row except insert_new_row and update_specific_row is defined # it is called on inserts and updates as primitive # sub insert_new_row ($$$) { my ( $self, $data, $row_aryref ) = @_; my $meta = $self->{meta}; my $ncols = scalar( @{ $meta->{col_names} } ); my $nitems = scalar( @{$row_aryref} ); $ncols == $nitems or croak "You tried to insert $nitems, but table is created with $ncols columns"; my $key = shift @$row_aryref; my $exists; eval { $exists = exists( $meta->{hash}->{$key} ); }; $exists and croak "Row with PK '$key' already exists"; $meta->{hash}->{$key} = $meta->{dbm_mldbm} ? $row_aryref : $row_aryref->[0]; return 1; } # this is where you grab the column names from a CREATE statement # if you don't need to do that, it must be defined but can be empty # sub push_names ($$$) { my ( $self, $data, $row_aryref ) = @_; my $meta = $self->{meta}; # some sanity checks ... my $ncols = scalar(@$row_aryref); $ncols < 2 and croak "At least 2 columns are required for DBD::DBM tables ..."; !$meta->{dbm_mldbm} and $ncols > 2 and croak "Without serializing with MLDBM only 2 columns are supported, you give $ncols"; $meta->{col_names} = $row_aryref; return unless $meta->{dbm_store_metadata}; my $stmt = $data->{sql_stmt}; my $col_names = join( ',', @{$row_aryref} ); my $schema = $data->{Database}->{Statement}; $schema =~ s/^[^\(]+\((.+)\)$/$1/s; $schema = $stmt->schema_str() if ( $stmt->can('schema_str') ); $meta->{hash}->{"_metadata \0"} = "<dbd_metadata>" . "<schema>$schema</schema>" . "<col_names>$col_names</col_names>" . "</dbd_metadata>"; } # fetch_one_row, delete_one_row, update_one_row # are optimized for hash-style lookup without looping; # if you don't need them, omit them, they're optional # but, in that case you may need to define # truncate() and seek(), see below # sub fetch_one_row ($$;$) { my ( $self, $key_only, $key ) = @_; my $meta = $self->{meta}; $key_only and return $meta->{col_names}->[0]; exists $meta->{hash}->{$key} or return; my $val = $meta->{hash}->{$key}; $val = ( ref($val) eq 'ARRAY' ) ? $val : [$val]; my $row = [ $key, @$val ]; return wantarray ? @{$row} : $row; } sub delete_one_row ($$$) { my ( $self, $data, $aryref ) = @_; my $meta = $self->{meta}; delete $meta->{hash}->{ $aryref->[0] }; } sub update_one_row ($$$) { my ( $self, $data, $aryref ) = @_; my $meta = $self->{meta}; my $key = shift @$aryref; defined $key or return; my $row = ( ref($aryref) eq 'ARRAY' ) ? $aryref : [$aryref]; $meta->{hash}->{$key} = $meta->{dbm_mldbm} ? $row : $row->[0]; } sub update_specific_row ($$$$) { my ( $self, $data, $aryref, $origary ) = @_; my $meta = $self->{meta}; my $key = shift @$origary; my $newkey = shift @$aryref; return unless ( defined $key ); $key eq $newkey or delete $meta->{hash}->{$key}; my $row = ( ref($aryref) eq 'ARRAY' ) ? $aryref : [$aryref]; $meta->{hash}->{$newkey} = $meta->{dbm_mldbm} ? $row : $row->[0]; } # you may not need to explicitly DESTROY the ::Table # put cleanup code to run when the execute is done # sub DESTROY ($) { my $self = shift; my $meta = $self->{meta}; $meta->{hash} and untie %{ $meta->{hash} }; $self->SUPER::DESTROY(); } # truncate() and seek() must be defined to satisfy DBI::SQL::Nano # *IF* you define the *_one_row methods above, truncate() and # seek() can be empty or you can use them without actually # truncating or seeking anything but if you don't define the # *_one_row methods, you may need to define these # if you need to do something after a series of # deletes or updates, you can put it in truncate() # which is called at the end of executing # sub truncate ($$) { # my ( $self, $data ) = @_; return 1; } # seek() is only needed if you use IO::File # though it could be used for other non-file operations # that you need to do before "writes" or truncate() # sub seek ($$$$) { # my ( $self, $data, $pos, $whence ) = @_; return 1; } # Th, th, th, that's all folks! See DBD::File and DBD::CSV for other # examples of creating pure perl DBDs. I hope this helped. # Now it's time to go forth and create your own DBD! # Remember to check in with dbi-dev@perl.org before you get too far. # We may be able to make suggestions or point you to other related # projects. 1; __END__ =pod =head1 NAME DBD::DBM - a DBI driver for DBM & MLDBM files =head1 SYNOPSIS use DBI; $dbh = DBI->connect('dbi:DBM:'); # defaults to SDBM_File $dbh = DBI->connect('DBI:DBM(RaiseError=1):'); # defaults to SDBM_File $dbh = DBI->connect('dbi:DBM:dbm_type=DB_File'); # defaults to DB_File $dbh = DBI->connect('dbi:DBM:dbm_mldbm=Storable'); # MLDBM with SDBM_File # or $dbh = DBI->connect('dbi:DBM:', undef, undef); $dbh = DBI->connect('dbi:DBM:', undef, undef, { f_ext => '.db/r', f_dir => '/path/to/dbfiles/', f_lockfile => '.lck', dbm_type => 'BerkeleyDB', dbm_mldbm => 'FreezeThaw', dbm_store_metadata => 1, dbm_berkeley_flags => { '-Cachesize' => 1000, # set a ::Hash flag }, }); and other variations on connect() as shown in the L<DBI> docs, L<DBD::File metadata|DBD::File/Metadata> and L</Metadata> shown below. Use standard DBI prepare, execute, fetch, placeholders, etc., see L<QUICK START> for an example. =head1 DESCRIPTION DBD::DBM is a database management system that works right out of the box. If you have a standard installation of Perl and DBI you can begin creating, accessing, and modifying simple database tables without any further modules. You can add other modules (e.g., SQL::Statement, DB_File etc) for improved functionality. The module uses a DBM file storage layer. DBM file storage is common on many platforms and files can be created with it in many programming languages using different APIs. That means, in addition to creating files with DBI/SQL, you can also use DBI/SQL to access and modify files created by other DBM modules and programs and vice versa. B<Note> that in those cases it might be necessary to use a common subset of the provided features. DBM files are stored in binary format optimized for quick retrieval when using a key field. That optimization can be used advantageously to make DBD::DBM SQL operations that use key fields very fast. There are several different "flavors" of DBM which use different storage formats supported by perl modules such as SDBM_File and MLDBM. This module supports all of the flavors that perl supports and, when used with MLDBM, supports tables with any number of columns and insertion of Perl objects into tables. DBD::DBM has been tested with the following DBM types: SDBM_File, NDBM_File, ODBM_File, GDBM_File, DB_File, BerkeleyDB. Each type was tested both with and without MLDBM and with the Data::Dumper, Storable, FreezeThaw, YAML and JSON serializers using the DBI::SQL::Nano or the SQL::Statement engines. =head1 QUICK START DBD::DBM operates like all other DBD drivers - it's basic syntax and operation is specified by DBI. If you're not familiar with DBI, you should start by reading L<DBI> and the documents it points to and then come back and read this file. If you are familiar with DBI, you already know most of what you need to know to operate this module. Just jump in and create a test script something like the one shown below. You should be aware that there are several options for the SQL engine underlying DBD::DBM, see L<Supported SQL syntax>. There are also many options for DBM support, see especially the section on L<Adding multi-column support with MLDBM>. But here's a sample to get you started. use DBI; my $dbh = DBI->connect('dbi:DBM:'); $dbh->{RaiseError} = 1; for my $sql( split /;\n+/," CREATE TABLE user ( user_name TEXT, phone TEXT ); INSERT INTO user VALUES ('Fred Bloggs','233-7777'); INSERT INTO user VALUES ('Sanjay Patel','777-3333'); INSERT INTO user VALUES ('Junk','xxx-xxxx'); DELETE FROM user WHERE user_name = 'Junk'; UPDATE user SET phone = '999-4444' WHERE user_name = 'Sanjay Patel'; SELECT * FROM user "){ my $sth = $dbh->prepare($sql); $sth->execute; $sth->dump_results if $sth->{NUM_OF_FIELDS}; } $dbh->disconnect; =head1 USAGE This section will explain some usage cases in more detail. To get an overview about the available attributes, see L</Metadata>. =head2 Specifying Files and Directories DBD::DBM will automatically supply an appropriate file extension for the type of DBM you are using. For example, if you use SDBM_File, a table called "fruit" will be stored in two files called "fruit.pag" and "fruit.dir". You should B<never> specify the file extensions in your SQL statements. DBD::DBM recognizes following default extensions for following types: =over 4 =item .pag/r Chosen for dbm_type C<< SDBM_File >>, C<< ODBM_File >> and C<< NDBM_File >> when an implementation is detected which wraps C<< -ldbm >> for C<< NDBM_File >> (e.g. Solaris, AIX, ...). For those types, the C<< .dir >> extension is recognized, too (for being deleted when dropping a table). =item .db/r Chosen for dbm_type C<< NDBM_File >> when an implementation is detected which wraps BerkeleyDB 1.x for C<< NDBM_File >> (typically BSD's, Darwin). =back C<< GDBM_File >>, C<< DB_File >> and C<< BerkeleyDB >> don't usually use a file extension. If your DBM type uses an extension other than one of the recognized types of extensions, you should set the I<f_ext> attribute to the extension B<and> file a bug report as described in DBI with the name of the implementation and extension so we can add it to DBD::DBM. Thanks in advance for that :-). $dbh = DBI->connect('dbi:DBM:f_ext=.db'); # .db extension is used $dbh = DBI->connect('dbi:DBM:f_ext='); # no extension is used # or $dbh->{f_ext}='.db'; # global setting $dbh->{f_meta}->{'qux'}->{f_ext}='.db'; # setting for table 'qux' By default files are assumed to be in the current working directory. To use other directories specify the I<f_dir> attribute in either the connect string or by setting the database handle attribute. For example, this will look for the file /foo/bar/fruit (or /foo/bar/fruit.pag for DBM types that use that extension) my $dbh = DBI->connect('dbi:DBM:f_dir=/foo/bar'); # and this will too: my $dbh = DBI->connect('dbi:DBM:'); $dbh->{f_dir} = '/foo/bar'; # but this is recommended my $dbh = DBI->connect('dbi:DBM:', undef, undef, { f_dir => '/foo/bar' } ); # now you can do my $ary = $dbh->selectall_arrayref(q{ SELECT x FROM fruit }); You can also use delimited identifiers to specify paths directly in SQL statements. This looks in the same place as the two examples above but without setting I<f_dir>: my $dbh = DBI->connect('dbi:DBM:'); my $ary = $dbh->selectall_arrayref(q{ SELECT x FROM "/foo/bar/fruit" }); You can also tell DBD::DBM to use a specified path for a specific table: $dbh->{dbm_tables}->{f}->{file} = q(/foo/bar/fruit); Please be aware that you cannot specify this during connection. If you have SQL::Statement installed, you can use table aliases: my $dbh = DBI->connect('dbi:DBM:'); my $ary = $dbh->selectall_arrayref(q{ SELECT f.x FROM "/foo/bar/fruit" AS f }); See the L<GOTCHAS AND WARNINGS> for using DROP on tables. =head2 Table locking and flock() Table locking is accomplished using a lockfile which has the same basename as the table's file but with the file extension '.lck' (or a lockfile extension that you supply, see below). This lock file is created with the table during a CREATE and removed during a DROP. Every time the table itself is opened, the lockfile is flocked(). For SELECT, this is a shared lock. For all other operations, it is an exclusive lock (except when you specify something different using the I<f_lock> attribute). Since the locking depends on flock(), it only works on operating systems that support flock(). In cases where flock() is not implemented, DBD::DBM will simply behave as if the flock() had occurred although no actual locking will happen. Read the documentation for flock() for more information. Even on those systems that do support flock(), locking is only advisory - as is always the case with flock(). This means that if another program tries to access the table file while DBD::DBM has the table locked, that other program will *succeed* at opening unless it is also using flock on the '.lck' file. As a result DBD::DBM's locking only really applies to other programs using DBD::DBM or other program written to cooperate with DBD::DBM locking. =head2 Specifying the DBM type Each "flavor" of DBM stores its files in a different format and has different capabilities and limitations. See L<AnyDBM_File> for a comparison of DBM types. By default, DBD::DBM uses the C<< SDBM_File >> type of storage since C<< SDBM_File >> comes with Perl itself. If you have other types of DBM storage available, you can use any of them with DBD::DBM. It is strongly recommended to use at least C<< DB_File >>, because C<< SDBM_File >> has quirks and limitations and C<< ODBM_file >>, C<< NDBM_File >> and C<< GDBM_File >> are not always available. You can specify the DBM type using the I<dbm_type> attribute which can be set in the connection string or with C<< $dbh->{dbm_type} >> and C<< $dbh->{f_meta}->{$table_name}->{type} >> for per-table settings in cases where a single script is accessing more than one kind of DBM file. In the connection string, just set C<< dbm_type=TYPENAME >> where C<< TYPENAME >> is any DBM type such as GDBM_File, DB_File, etc. Do I<not> use MLDBM as your I<dbm_type> as that is set differently, see below. my $dbh=DBI->connect('dbi:DBM:'); # uses the default SDBM_File my $dbh=DBI->connect('dbi:DBM:dbm_type=GDBM_File'); # uses the GDBM_File # You can also use $dbh->{dbm_type} to set the DBM type for the connection: $dbh->{dbm_type} = 'DB_File'; # set the global DBM type print $dbh->{dbm_type}; # display the global DBM type If you have several tables in your script that use different DBM types, you can use the $dbh->{dbm_tables} hash to store different settings for the various tables. You can even use this to perform joins on files that have completely different storage mechanisms. # sets global default of GDBM_File my $dbh->('dbi:DBM:type=GDBM_File'); # overrides the global setting, but only for the tables called # I<foo> and I<bar> my $dbh->{f_meta}->{foo}->{dbm_type} = 'DB_File'; my $dbh->{f_meta}->{bar}->{dbm_type} = 'BerkeleyDB'; # prints the dbm_type for the table "foo" print $dbh->{f_meta}->{foo}->{dbm_type}; B<Note> that you must change the I<dbm_type> of a table before you access it for first time. =head2 Adding multi-column support with MLDBM Most of the DBM types only support two columns and even if it would support more, DBD::DBM would only use two. However a CPAN module called MLDBM overcomes this limitation by allowing more than two columns. MLDBM does this by serializing the data - basically it puts a reference to an array into the second column. It can also put almost any kind of Perl object or even B<Perl coderefs> into columns. If you want more than two columns, you B<must> install MLDBM. It's available for many platforms and is easy to install. MLDBM is by default distributed with three serializers - Data::Dumper, Storable, and FreezeThaw. Data::Dumper is the default and Storable is the fastest. MLDBM can also make use of user-defined serialization methods or other serialization modules (e.g. L<YAML::MLDBM> or L<MLDBM::Serializer::JSON>. You select the serializer using the I<dbm_mldbm> attribute. Some examples: $dbh=DBI->connect('dbi:DBM:dbm_mldbm=Storable'); # use MLDBM with Storable $dbh=DBI->connect( 'dbi:DBM:dbm_mldbm=MySerializer' # use MLDBM with a user defined module ); $dbh=DBI->connect('dbi::dbm:', undef, undef, { dbm_mldbm => 'YAML' }); # use 3rd party serializer $dbh->{dbm_mldbm} = 'YAML'; # same as above print $dbh->{dbm_mldbm} # show the MLDBM serializer $dbh->{f_meta}->{foo}->{dbm_mldbm}='Data::Dumper'; # set Data::Dumper for table "foo" print $dbh->{f_meta}->{foo}->{mldbm}; # show serializer for table "foo" MLDBM works on top of other DBM modules so you can also set a DBM type along with setting dbm_mldbm. The examples above would default to using SDBM_File with MLDBM. If you wanted GDBM_File instead, here's how: # uses DB_File with MLDBM and Storable $dbh = DBI->connect('dbi:DBM:', undef, undef, { dbm_type => 'DB_File', dbm_mldbm => 'Storable', }); SDBM_File, the default I<dbm_type> is quite limited, so if you are going to use MLDBM, you should probably use a different type, see L<AnyDBM_File>. See below for some L<GOTCHAS AND WARNINGS> about MLDBM. =head2 Support for Berkeley DB The Berkeley DB storage type is supported through two different Perl modules - DB_File (which supports only features in old versions of Berkeley DB) and BerkeleyDB (which supports all versions). DBD::DBM supports specifying either "DB_File" or "BerkeleyDB" as a I<dbm_type>, with or without MLDBM support. The "BerkeleyDB" dbm_type is experimental and it's interface is likely to change. It currently defaults to BerkeleyDB::Hash and does not currently support ::Btree or ::Recno. With BerkeleyDB, you can specify initialization flags by setting them in your script like this: use BerkeleyDB; my $env = new BerkeleyDB::Env -Home => $dir; # and/or other Env flags $dbh = DBI->connect('dbi:DBM:', undef, undef, { dbm_type => 'BerkeleyDB', dbm_mldbm => 'Storable', dbm_berkeley_flags => { 'DB_CREATE' => DB_CREATE, # pass in constants 'DB_RDONLY' => DB_RDONLY, # pass in constants '-Cachesize' => 1000, # set a ::Hash flag '-Env' => $env, # pass in an environment }, }); Do I<not> set the -Flags or -Filename flags as those are determined and overwritten by the SQL (e.g. -Flags => DB_RDONLY is set automatically when you issue a SELECT statement). Time has not permitted us to provide support in this release of DBD::DBM for further Berkeley DB features such as transactions, concurrency, locking, etc. We will be working on these in the future and would value suggestions, patches, etc. See L<DB_File> and L<BerkeleyDB> for further details. =head2 Optimizing the use of key fields Most "flavors" of DBM have only two physical columns (but can contain multiple logical columns as explained above in L<Adding multi-column support with MLDBM>). They work similarly to a Perl hash with the first column serving as the key. Like a Perl hash, DBM files permit you to do quick lookups by specifying the key and thus avoid looping through all records (supported by DBI::SQL::Nano only). Also like a Perl hash, the keys must be unique. It is impossible to create two records with the same key. To put this more simply and in SQL terms, the key column functions as the I<PRIMARY KEY> or UNIQUE INDEX. In DBD::DBM, you can take advantage of the speed of keyed lookups by using DBI::SQL::Nano and a WHERE clause with a single equal comparison on the key field. For example, the following SQL statements are optimized for keyed lookup: CREATE TABLE user ( user_name TEXT, phone TEXT); INSERT INTO user VALUES ('Fred Bloggs','233-7777'); # ... many more inserts SELECT phone FROM user WHERE user_name='Fred Bloggs'; The "user_name" column is the key column since it is the first column. The SELECT statement uses the key column in a single equal comparison - "user_name='Fred Bloggs'" - so the search will find it very quickly without having to loop through all the names which were inserted into the table. In contrast, these searches on the same table are not optimized: 1. SELECT phone FROM user WHERE user_name < 'Fred'; 2. SELECT user_name FROM user WHERE phone = '233-7777'; In #1, the operation uses a less-than (<) comparison rather than an equals comparison, so it will not be optimized for key searching. In #2, the key field "user_name" is not specified in the WHERE clause, and therefore the search will need to loop through all rows to find the requested row(s). B<Note> that the underlying DBM storage needs to loop over all I<key/value> pairs when the optimized fetch is used. SQL::Statement has a massively improved where clause evaluation which costs around 15% of the evaluation in DBI::SQL::Nano - combined with the loop in the DBM storage the speed improvement isn't so impressive. Even if lookups are faster by around 50%, DBI::SQL::Nano and SQL::Statement can benefit from the key field optimizations on updating and deleting rows - and here the improved where clause evaluation of SQL::Statement might beat DBI::SQL::Nano every time the where clause contains not only the key field (or more than one). =head2 Supported SQL syntax DBD::DBM uses a subset of SQL. The robustness of that subset depends on what other modules you have installed. Both options support basic SQL operations including CREATE TABLE, DROP TABLE, INSERT, DELETE, UPDATE, and SELECT. B<Option #1:> By default, this module inherits its SQL support from DBI::SQL::Nano that comes with DBI. Nano is, as its name implies, a *very* small SQL engine. Although limited in scope, it is faster than option #2 for some operations (especially single I<primary key> lookups). See L<DBI::SQL::Nano> for a description of the SQL it supports and comparisons of it with option #2. B<Option #2:> If you install the pure Perl CPAN module SQL::Statement, DBD::DBM will use it instead of Nano. This adds support for table aliases, functions, joins, and much more. If you're going to use DBD::DBM for anything other than very simple tables and queries, you should install SQL::Statement. You don't have to change DBD::DBM or your scripts in any way, simply installing SQL::Statement will give you the more robust SQL capabilities without breaking scripts written for DBI::SQL::Nano. See L<SQL::Statement> for a description of the SQL it supports. To find out which SQL module is working in a given script, you can use the dbm_versions() method or, if you don't need the full output and version numbers, just do this: print $dbh->{sql_handler}, "\n"; That will print out either "SQL::Statement" or "DBI::SQL::Nano". Baring the section about optimized access to the DBM storage in mind, comparing the benefits of both engines: # DBI::SQL::Nano is faster $sth = $dbh->prepare( "update foo set value='new' where key=15" ); $sth->execute(); $sth = $dbh->prepare( "delete from foo where key=27" ); $sth->execute(); $sth = $dbh->prepare( "select * from foo where key='abc'" ); # SQL::Statement might faster (depending on DB size) $sth = $dbh->prepare( "update foo set value='new' where key=?" ); $sth->execute(15); $sth = $dbh->prepare( "update foo set value=? where key=15" ); $sth->execute('new'); $sth = $dbh->prepare( "delete from foo where key=?" ); $sth->execute(27); # SQL::Statement is faster $sth = $dbh->prepare( "update foo set value='new' where value='old'" ); $sth->execute(); # must be expressed using "where key = 15 or key = 27 or key = 42 or key = 'abc'" # in DBI::SQL::Nano $sth = $dbh->prepare( "delete from foo where key in (15,27,42,'abc')" ); $sth->execute(); # must be expressed using "where key > 10 and key < 90" in DBI::SQL::Nano $sth = $dbh->prepare( "select * from foo where key between (10,90)" ); $sth->execute(); # only SQL::Statement can handle $sth->prepare( "select * from foo,bar where foo.name = bar.name" ); $sth->execute(); $sth->prepare( "insert into foo values ( 1, 'foo' ), ( 2, 'bar' )" ); $sth->execute(); =head2 Specifying Column Names DBM files don't have a standard way to store column names. DBD::DBM gets around this issue with a DBD::DBM specific way of storing the column names. B<If you are working only with DBD::DBM and not using files created by or accessed with other DBM programs, you can ignore this section.> DBD::DBM stores column names as a row in the file with the key I<_metadata \0>. So this code my $dbh = DBI->connect('dbi:DBM:'); $dbh->do("CREATE TABLE baz (foo CHAR(10), bar INTEGER)"); $dbh->do("INSERT INTO baz (foo,bar) VALUES ('zippy',1)"); Will create a file that has a structure something like this: _metadata \0 | <dbd_metadata><schema></schema><col_names>foo,bar</col_names></dbd_metadata> zippy | 1 The next time you access this table with DBD::DBM, it will treat the I<_metadata \0> row as a header rather than as data and will pull the column names from there. However, if you access the file with something other than DBD::DBM, the row will be treated as a regular data row. If you do not want the column names stored as a data row in the table you can set the I<dbm_store_metadata> attribute to 0. my $dbh = DBI->connect('dbi:DBM:', undef, undef, { dbm_store_metadata => 0 }); # or $dbh->{dbm_store_metadata} = 0; # or for per-table setting $dbh->{f_meta}->{qux}->{dbm_store_metadata} = 0; By default, DBD::DBM assumes that you have two columns named "k" and "v" (short for "key" and "value"). So if you have I<dbm_store_metadata> set to 1 and you want to use alternate column names, you need to specify the column names like this: my $dbh = DBI->connect('dbi:DBM:', undef, undef, { dbm_store_metadata => 0, dbm_cols => [ qw(foo bar) ], }); # or $dbh->{dbm_store_metadata} = 0; $dbh->{dbm_cols} = 'foo,bar'; # or to set the column names on per-table basis, do this: # sets the column names only for table "qux" $dbh->{f_meta}->{qux}->{dbm_store_metadata} = 0; $dbh->{f_meta}->{qux}->{col_names} = [qw(foo bar)]; If you have a file that was created by another DBM program or created with I<dbm_store_metadata> set to zero and you want to convert it to using DBD::DBM's column name storage, just use one of the methods above to name the columns but *without* specifying I<dbm_store_metadata> as zero. You only have to do that once - thereafter you can get by without setting either I<dbm_store_metadata> or setting I<dbm_cols> because the names will be stored in the file. =head1 DBI database handle attributes =head2 Metadata =head3 Statement handle ($sth) attributes and methods Most statement handle attributes such as NAME, NUM_OF_FIELDS, etc. are available only after an execute. The same is true of $sth->rows which is available after the execute but does I<not> require a fetch. =head3 Driver handle ($dbh) attributes It is not supported anymore to use dbm-attributes without the dbm_-prefix. Currently, if an DBD::DBM private attribute is accessed without an underscore in it's name, dbm_ is prepended to that attribute and it's processed further. If the resulting attribute name is invalid, an error is thrown. =head4 dbm_cols Contains a comma separated list of column names or an array reference to the column names. =head4 dbm_type Contains the DBM storage type. Currently known supported type are C<< ODBM_File >>, C<< NDBM_File >>, C<< SDBM_File >>, C<< GDBM_File >>, C<< DB_File >> and C<< BerkeleyDB >>. It is not recommended to use one of the first three types - even if C<< SDBM_File >> is the most commonly available I<dbm_type>. =head4 dbm_mldbm Contains the serializer for DBM storage (value column). Requires the CPAN module L<MLDBM> installed. Currently known supported serializers are: =over 8 =item Data::Dumper Default serializer. Deployed with Perl core. =item Storable Faster serializer. Deployed with Perl core. =item FreezeThaw Pure Perl serializer, requires L<FreezeThaw> to be installed. =item YAML Portable serializer (between languages but not architectures). Requires L<YAML::MLDBM> installation. =item JSON Portable, fast serializer (between languages but not architectures). Requires L<MLDBM::Serializer::JSON> installation. =back =head4 dbm_store_metadata Boolean value which determines if the metadata in DBM is stored or not. =head4 dbm_berkeley_flags Hash reference with additional flags for BerkeleyDB::Hash instantiation. =head4 dbm_version Readonly attribute containing the version of DBD::DBM. =head4 f_meta In addition to the attributes L<DBD::File> recognizes, DBD::DBM knows about the (public) attributes C<col_names> (B<Note> not I<dbm_cols> here!), C<dbm_type>, C<dbm_mldbm>, C<dbm_store_metadata> and C<dbm_berkeley_flags>. As in DBD::File, there are undocumented, internal attributes in DBD::DBM. Be very careful when modifying attributes you do not know; the consequence might a destroyed or corrupted table. =head4 dbm_tables This attribute provides restricted access to the table meta data. See L<f_meta> and L<DBD::File/f_meta> for attribute details. dbm_tables is a tied hash providing the internal table names as keys (accessing unknown tables might create an entry) and their meta data as another tied hash. The table meta storage is obtained via the C<get_table_meta> method from the table implementation (see L<DBD::File::Developers>). Attribute setting and getting within the table meta data is handled via the methods C<set_table_meta_attr> and C<get_table_meta_attr>. =head3 Following attributes are no longer handled by DBD::DBM: =head4 dbm_ext This attribute is silently mapped to DBD::File's attribute I<f_ext>. Later versions of DBI might show a depreciated warning when this attribute is used and eventually it will be removed. =head4 dbm_lockfile This attribute is silently mapped to DBD::File's attribute I<f_lockfile>. Later versions of DBI might show a depreciated warning when this attribute is used and eventually it will be removed. =head1 DBI database handle methods =head2 The $dbh->dbm_versions() method The private method dbm_versions() returns a summary of what other modules are being used at any given time. DBD::DBM can work with or without many other modules - it can use either SQL::Statement or DBI::SQL::Nano as its SQL engine, it can be run with DBI or DBI::PurePerl, it can use many kinds of DBM modules, and many kinds of serializers when run with MLDBM. The dbm_versions() method reports all of that and more. print $dbh->dbm_versions; # displays global settings print $dbh->dbm_versions($table_name); # displays per table settings An important thing to note about this method is that when it called with no arguments, it displays the *global* settings. If you override these by setting per-table attributes, these will I<not> be shown unless you specify a table name as an argument to the method call. =head2 Storing Objects If you are using MLDBM, you can use DBD::DBM to take advantage of its serializing abilities to serialize any Perl object that MLDBM can handle. To store objects in columns, you should (but don't absolutely need to) declare it as a column of type BLOB (the type is *currently* ignored by the SQL engine, but it's good form). =head1 EXTENSIBILITY =over 8 =item C<SQL::Statement> Improved SQL engine compared to the built-in DBI::SQL::Nano - see L<Supported SQL syntax>. =item C<DB_File> Berkeley DB version 1. This database library is available on many systems without additional installation and most systems are supported. =item C<GDBM_File> Simple dbm type (comparable to C<DB_File>) under the GNU license. Typically not available (or requires extra installation) on non-GNU operating systems. =item C<BerkeleyDB> Berkeley DB version up to v4 (and maybe higher) - requires additional installation but is easier than GDBM_File on non-GNU systems. db4 comes with a many tools which allow repairing and migrating databases. This is the B<recommended> dbm type for production use. =item C<MLDBM> Serializer wrapper to support more than one column for the files. Comes with serializers using C<Data::Dumper>, C<FreezeThaw> and C<Storable>. =item C<YAML::MLDBM> Additional serializer for MLDBM. YAML is very portable between languages. =item C<MLDBM::Serializer::JSON> Additional serializer for MLDBM. JSON is very portable between languages, probably more than YAML. =back =head1 GOTCHAS AND WARNINGS Using the SQL DROP command will remove any file that has the name specified in the command with either '.pag' and '.dir', '.db' or your {f_ext} appended to it. So this be dangerous if you aren't sure what file it refers to: $dbh->do(qq{DROP TABLE "/path/to/any/file"}); Each DBM type has limitations. SDBM_File, for example, can only store values of less than 1,000 characters. *You* as the script author must ensure that you don't exceed those bounds. If you try to insert a value that is larger than DBM can store, the results will be unpredictable. See the documentation for whatever DBM you are using for details. Different DBM implementations return records in different orders. That means that you I<should not> rely on the order of records unless you use an ORDER BY statement. DBM data files are platform-specific. To move them from one platform to another, you'll need to do something along the lines of dumping your data to CSV on platform #1 and then dumping from CSV to DBM on platform #2. DBD::AnyData and DBD::CSV can help with that. There may also be DBM conversion tools for your platforms which would probably be quicker. When using MLDBM, there is a very powerful serializer - it will allow you to store Perl code or objects in database columns. When these get de-serialized, they may be eval'ed - in other words MLDBM (or actually Data::Dumper when used by MLDBM) may take the values and try to execute them in Perl. Obviously, this can present dangers, so if you do not know what is in a file, be careful before you access it with MLDBM turned on! See the entire section on L<Table locking and flock()> for gotchas and warnings about the use of flock(). =head1 BUGS AND LIMITATIONS This module uses hash interfaces of two column file databases. While none of supported SQL engines have support for indices, the following statements really do the same (even if they mean something completely different) for each dbm type which lacks C<EXISTS> support: $sth->do( "insert into foo values (1, 'hello')" ); # this statement does ... $sth->do( "update foo set v='world' where k=1" ); # ... the same as this statement $sth->do( "insert into foo values (1, 'world')" ); This is considered to be a bug and might change in a future release. Known affected dbm types are C<ODBM_File> and C<NDBM_File>. We highly recommended you use a more modern dbm type such as C<DB_File>. =head1 GETTING HELP, MAKING SUGGESTIONS, AND REPORTING BUGS If you need help installing or using DBD::DBM, please write to the DBI users mailing list at dbi-users@perl.org or to the comp.lang.perl.modules newsgroup on usenet. I cannot always answer every question quickly but there are many on the mailing list or in the newsgroup who can. DBD developers for DBD's which rely on DBD::File or DBD::DBM or use one of them as an example are suggested to join the DBI developers mailing list at dbi-dev@perl.org and strongly encouraged to join our IRC channel at L<irc://irc.perl.org/dbi>. If you have suggestions, ideas for improvements, or bugs to report, please report a bug as described in DBI. Do not mail any of the authors directly, you might not get an answer. When reporting bugs, please send the output of $dbh->dbm_versions($table) for a table that exhibits the bug and as small a sample as you can make of the code that produces the bug. And of course, patches are welcome, too :-). If you need enhancements quickly, you can get commercial support as described at L<http://dbi.perl.org/support/> or you can contact Jens Rehsack at rehsack@cpan.org for commercial support in Germany. Please don't bother Jochen Wiedmann or Jeff Zucker for support - they handed over further maintenance to H.Merijn Brand and Jens Rehsack. =head1 ACKNOWLEDGEMENTS Many, many thanks to Tim Bunce for prodding me to write this, and for copious, wise, and patient suggestions all along the way. (Jeff Zucker) I send my thanks and acknowledgements to H.Merijn Brand for his initial refactoring of DBD::File and his strong and ongoing support of SQL::Statement. Without him, the current progress would never have been made. And I have to name Martin J. Evans for each laugh (and correction) of all those funny word creations I (as non-native speaker) made to the documentation. And - of course - I have to thank all those unnamed contributors and testers from the Perl community. (Jens Rehsack) =head1 AUTHOR AND COPYRIGHT This module is written by Jeff Zucker < jzucker AT cpan.org >, who also maintained it till 2007. After that, in 2010, Jens Rehsack & H.Merijn Brand took over maintenance. Copyright (c) 2004 by Jeff Zucker, all rights reserved. Copyright (c) 2010-2013 by Jens Rehsack & H.Merijn Brand, all rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =head1 SEE ALSO L<DBI>, L<SQL::Statement>, L<DBI::SQL::Nano>, L<AnyDBM_File>, L<DB_File>, L<BerkeleyDB>, L<MLDBM>, L<YAML::MLDBM>, L<MLDBM::Serializer::JSON> =cut DBD/File.pm 0000644 00000117471 15037233337 0006373 0 ustar 00 # -*- perl -*- # # DBD::File - A base class for implementing DBI drivers that # act on plain files # # This module is currently maintained by # # H.Merijn Brand & Jens Rehsack # # The original author is Jochen Wiedmann. # # Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack # Copyright (C) 2004 by Jeff Zucker # Copyright (C) 1998 by Jochen Wiedmann # # All rights reserved. # # You may distribute this module under the terms of either the GNU # General Public License or the Artistic License, as specified in # the Perl README file. require 5.008; use strict; use warnings; use DBI (); package DBD::File; use strict; use warnings; use base qw( DBI::DBD::SqlEngine ); use Carp; use vars qw( @ISA $VERSION $drh ); $VERSION = "0.44"; $drh = undef; # holds driver handle(s) once initialized sub driver ($;$) { my ($class, $attr) = @_; # Drivers typically use a singleton object for the $drh # We use a hash here to have one singleton per subclass. # (Otherwise DBD::CSV and DBD::DBM, for example, would # share the same driver object which would cause problems.) # An alternative would be to not cache the $drh here at all # and require that subclasses do that. Subclasses should do # their own caching, so caching here just provides extra safety. $drh->{$class} and return $drh->{$class}; $attr ||= {}; { no strict "refs"; unless ($attr->{Attribution}) { $class eq "DBD::File" and $attr->{Attribution} = "$class by Jeff Zucker"; $attr->{Attribution} ||= ${$class . "::ATTRIBUTION"} || "oops the author of $class forgot to define this"; } $attr->{Version} ||= ${$class . "::VERSION"}; $attr->{Name} or ($attr->{Name} = $class) =~ s/^DBD\:\://; } $drh->{$class} = $class->SUPER::driver ($attr); # XXX inject DBD::XXX::Statement unless exists return $drh->{$class}; } # driver sub CLONE { undef $drh; } # CLONE # ====== DRIVER ================================================================ package DBD::File::dr; use strict; use warnings; use vars qw( @ISA $imp_data_size ); use Carp; @DBD::File::dr::ISA = qw( DBI::DBD::SqlEngine::dr ); $DBD::File::dr::imp_data_size = 0; sub dsn_quote { my $str = shift; ref $str and return ""; defined $str or return ""; $str =~ s/([;:\\])/\\$1/g; return $str; } # dsn_quote # XXX rewrite using TableConfig ... sub default_table_source { "DBD::File::TableSource::FileSystem" } sub connect { my ($drh, $dbname, $user, $auth, $attr) = @_; # We do not (yet) care about conflicting attributes here # my $dbh = DBI->connect ("dbi:CSV:f_dir=test", undef, undef, { f_dir => "text" }); # will test here that both test and text should exist if (my $attr_hash = (DBI->parse_dsn ($dbname))[3]) { if (defined $attr_hash->{f_dir} && ! -d $attr_hash->{f_dir}) { my $msg = "No such directory '$attr_hash->{f_dir}"; $drh->set_err (2, $msg); $attr_hash->{RaiseError} and croak $msg; return; } } if ($attr and defined $attr->{f_dir} && ! -d $attr->{f_dir}) { my $msg = "No such directory '$attr->{f_dir}"; $drh->set_err (2, $msg); $attr->{RaiseError} and croak $msg; return; } return $drh->SUPER::connect ($dbname, $user, $auth, $attr); } # connect sub disconnect_all { } # disconnect_all sub DESTROY { undef; } # DESTROY # ====== DATABASE ============================================================== package DBD::File::db; use strict; use warnings; use vars qw( @ISA $imp_data_size ); use Carp; require File::Spec; require Cwd; use Scalar::Util qw( refaddr ); # in CORE since 5.7.3 @DBD::File::db::ISA = qw( DBI::DBD::SqlEngine::db ); $DBD::File::db::imp_data_size = 0; sub data_sources { my ($dbh, $attr, @other) = @_; ref ($attr) eq "HASH" or $attr = {}; exists $attr->{f_dir} or $attr->{f_dir} = $dbh->{f_dir}; exists $attr->{f_dir_search} or $attr->{f_dir_search} = $dbh->{f_dir_search}; return $dbh->SUPER::data_sources ($attr, @other); } # data_source sub set_versions { my $dbh = shift; $dbh->{f_version} = $DBD::File::VERSION; return $dbh->SUPER::set_versions (); } # set_versions sub init_valid_attributes { my $dbh = shift; $dbh->{f_valid_attrs} = { f_version => 1, # DBD::File version f_dir => 1, # base directory f_dir_search => 1, # extended search directories f_ext => 1, # file extension f_schema => 1, # schema name f_lock => 1, # Table locking mode f_lockfile => 1, # Table lockfile extension f_encoding => 1, # Encoding of the file f_valid_attrs => 1, # File valid attributes f_readonly_attrs => 1, # File readonly attributes }; $dbh->{f_readonly_attrs} = { f_version => 1, # DBD::File version f_valid_attrs => 1, # File valid attributes f_readonly_attrs => 1, # File readonly attributes }; return $dbh->SUPER::init_valid_attributes (); } # init_valid_attributes sub init_default_attributes { my ($dbh, $phase) = @_; # must be done first, because setting flags implicitly calls $dbdname::db->STORE $dbh->SUPER::init_default_attributes ($phase); # DBI::BD::SqlEngine::dr::connect will detect old-style drivers and # don't call twice unless (defined $phase) { # we have an "old" driver here $phase = defined $dbh->{sql_init_phase}; $phase and $phase = $dbh->{sql_init_phase}; } if (0 == $phase) { # f_ext should not be initialized # f_map is deprecated (but might return) $dbh->{f_dir} = Cwd::abs_path (File::Spec->curdir ()); push @{$dbh->{sql_init_order}{90}}, "f_meta"; # complete derived attributes, if required (my $drv_class = $dbh->{ImplementorClass}) =~ s/::db$//; my $drv_prefix = DBI->driver_prefix ($drv_class); if (exists $dbh->{$drv_prefix . "meta"} and !$dbh->{sql_engine_in_gofer}) { my $attr = $dbh->{$drv_prefix . "meta"}; defined $dbh->{f_valid_attrs}{f_meta} and $dbh->{f_valid_attrs}{f_meta} = 1; $dbh->{f_meta} = $dbh->{$attr}; } } return $dbh; } # init_default_attributes sub validate_FETCH_attr { my ($dbh, $attrib) = @_; $attrib eq "f_meta" and $dbh->{sql_engine_in_gofer} and $attrib = "sql_meta"; return $dbh->SUPER::validate_FETCH_attr ($attrib); } # validate_FETCH_attr sub validate_STORE_attr { my ($dbh, $attrib, $value) = @_; if ($attrib eq "f_dir" && defined $value) { -d $value or return $dbh->set_err ($DBI::stderr, "No such directory '$value'"); File::Spec->file_name_is_absolute ($value) or $value = Cwd::abs_path ($value); } if ($attrib eq "f_ext") { $value eq "" || $value =~ m{^\.\w+(?:/[rR]*)?$} or carp "'$value' doesn't look like a valid file extension attribute\n"; } $attrib eq "f_meta" and $dbh->{sql_engine_in_gofer} and $attrib = "sql_meta"; return $dbh->SUPER::validate_STORE_attr ($attrib, $value); } # validate_STORE_attr sub get_f_versions { my ($dbh, $table) = @_; my $class = $dbh->{ImplementorClass}; $class =~ s/::db$/::Table/; my $dver; my $dtype = "IO::File"; eval { $dver = IO::File->VERSION (); # when we're still alive here, everything went ok - no need to check for $@ $dtype .= " ($dver)"; }; my $f_encoding; if ($table) { my $meta; $table and (undef, $meta) = $class->get_table_meta ($dbh, $table, 1); $meta and $meta->{f_encoding} and $f_encoding = $meta->{f_encoding}; } # if ($table) $f_encoding ||= $dbh->{f_encoding}; $f_encoding and $dtype .= " + " . $f_encoding . " encoding"; return sprintf "%s using %s", $dbh->{f_version}, $dtype; } # get_f_versions # ====== STATEMENT ============================================================= package DBD::File::st; use strict; use warnings; use vars qw( @ISA $imp_data_size ); @DBD::File::st::ISA = qw( DBI::DBD::SqlEngine::st ); $DBD::File::st::imp_data_size = 0; my %supported_attrs = ( TYPE => 1, PRECISION => 1, NULLABLE => 1, ); sub FETCH { my ($sth, $attr) = @_; if ($supported_attrs{$attr}) { my $stmt = $sth->{sql_stmt}; if (exists $sth->{ImplementorClass} && exists $sth->{sql_stmt} && $sth->{sql_stmt}->isa ("SQL::Statement")) { # fill overall_defs unless we know unless (exists $sth->{f_overall_defs} && ref $sth->{f_overall_defs}) { my $types = $sth->{Database}{Types}; unless ($types) { # Fetch types only once per database if (my $t = $sth->{Database}->type_info_all ()) { foreach my $i (1 .. $#$t) { $types->{uc $t->[$i][0]} = $t->[$i][1]; $types->{$t->[$i][1]} ||= uc $t->[$i][0]; } } # sane defaults for ([ 0, "" ], [ 1, "CHAR" ], [ 4, "INTEGER" ], [ 12, "VARCHAR" ], ) { $types->{$_->[0]} ||= $_->[1]; $types->{$_->[1]} ||= $_->[0]; } $sth->{Database}{Types} = $types; } my $all_meta = $sth->{Database}->func ("*", "table_defs", "get_sql_engine_meta"); foreach my $tbl (keys %$all_meta) { my $meta = $all_meta->{$tbl}; exists $meta->{table_defs} && ref $meta->{table_defs} or next; foreach (keys %{$meta->{table_defs}{columns}}) { my $field_info = $meta->{table_defs}{columns}{$_}; if (defined $field_info->{data_type} && $field_info->{data_type} !~ m/^[0-9]+$/) { $field_info->{type_name} = uc $field_info->{data_type}; $field_info->{data_type} = $types->{$field_info->{type_name}} || 0; } $field_info->{type_name} ||= $types->{$field_info->{data_type}} || "CHAR"; $sth->{f_overall_defs}{$_} = $field_info; } } } my @colnames = $sth->sql_get_colnames (); $attr eq "TYPE" and return [ map { $sth->{f_overall_defs}{$_}{data_type} || 12 } @colnames ]; $attr eq "TYPE_NAME" and return [ map { $sth->{f_overall_defs}{$_}{type_name} || "VARCHAR" } @colnames ]; $attr eq "PRECISION" and return [ map { $sth->{f_overall_defs}{$_}{data_length} || 0 } @colnames ]; $attr eq "NULLABLE" and return [ map { ( grep { $_ eq "NOT NULL" } @{ $sth->{f_overall_defs}{$_}{constraints} || [] }) ? 0 : 1 } @colnames ]; } } return $sth->SUPER::FETCH ($attr); } # FETCH # ====== TableSource =========================================================== package DBD::File::TableSource::FileSystem; use strict; use warnings; use IO::Dir; @DBD::File::TableSource::FileSystem::ISA = "DBI::DBD::SqlEngine::TableSource"; sub data_sources { my ($class, $drh, $attr) = @_; my $dir = $attr && exists $attr->{f_dir} ? $attr->{f_dir} : File::Spec->curdir (); defined $dir or return; # Stream-based databases do not have f_dir unless (-d $dir && -r $dir && -x $dir) { $drh->set_err ($DBI::stderr, "Cannot use directory $dir from f_dir"); return; } my %attrs; $attr and %attrs = %$attr; delete $attrs{f_dir}; my $dsn_quote = $drh->{ImplementorClass}->can ("dsn_quote"); my $dsnextra = join ";", map { $_ . "=" . &{$dsn_quote} ($attrs{$_}) } keys %attrs; my @dir = ($dir); $attr->{f_dir_search} && ref $attr->{f_dir_search} eq "ARRAY" and push @dir, grep { -d $_ } @{$attr->{f_dir_search}}; my @dsns; foreach $dir (@dir) { my $dirh = IO::Dir->new ($dir); unless (defined $dirh) { $drh->set_err ($DBI::stderr, "Cannot open directory $dir: $!"); return; } my ($file, %names, $driver); $driver = $drh->{ImplementorClass} =~ m/^dbd\:\:([^\:]+)\:\:/i ? $1 : "File"; while (defined ($file = $dirh->read ())) { my $d = File::Spec->catdir ($dir, $file); # allow current dir ... it can be a data_source too $file ne File::Spec->updir () && -d $d and push @dsns, "DBI:$driver:f_dir=" . &{$dsn_quote} ($d) . ($dsnextra ? ";$dsnextra" : ""); } } return @dsns; } # data_sources sub avail_tables { my ($self, $dbh) = @_; my $dir = $dbh->{f_dir}; defined $dir or return; # Stream based db's cannot be queried for tables my %seen; my @tables; my @dir = ($dir); $dbh->{f_dir_search} && ref $dbh->{f_dir_search} eq "ARRAY" and push @dir, grep { -d $_ } @{$dbh->{f_dir_search}}; foreach $dir (@dir) { my $dirh = IO::Dir->new ($dir); unless (defined $dirh) { $dbh->set_err ($DBI::stderr, "Cannot open directory $dir: $!"); return; } my $class = $dbh->FETCH ("ImplementorClass"); $class =~ s/::db$/::Table/; my ($file, %names); my $schema = exists $dbh->{f_schema} ? defined $dbh->{f_schema} && $dbh->{f_schema} ne "" ? $dbh->{f_schema} : undef : eval { getpwuid ((stat $dir)[4]) }; # XXX Win32::pwent while (defined ($file = $dirh->read ())) { my ($tbl, $meta) = $class->get_table_meta ($dbh, $file, 0, 0) or next; # XXX # $tbl && $meta && -f $meta->{f_fqfn} or next; $seen{defined $schema ? $schema : "\0"}{$dir}{$tbl}++ or push @tables, [ undef, $schema, $tbl, "TABLE", "FILE" ]; } $dirh->close () or $dbh->set_err ($DBI::stderr, "Cannot close directory $dir: $!"); } return @tables; } # avail_tables # ====== DataSource ============================================================ package DBD::File::DataSource::Stream; use strict; use warnings; use Carp; @DBD::File::DataSource::Stream::ISA = "DBI::DBD::SqlEngine::DataSource"; # We may have a working flock () built-in but that doesn't mean that locking # will work on NFS (flock () may hang hard) my $locking = eval { my $fh; my $nulldevice = File::Spec->devnull (); open $fh, ">", $nulldevice or croak "Can't open $nulldevice: $!"; flock $fh, 0; close $fh; 1; }; sub complete_table_name { my ($self, $meta, $file, $respect_case) = @_; my $tbl = $file; if (!$respect_case and $meta->{sql_identifier_case} == 1) { # XXX SQL_IC_UPPER $tbl = uc $tbl; } elsif (!$respect_case and $meta->{sql_identifier_case} == 2) { # XXX SQL_IC_LOWER $tbl = lc $tbl; } $meta->{f_fqfn} = undef; $meta->{f_fqbn} = undef; $meta->{f_fqln} = undef; $meta->{table_name} = $tbl; return $tbl; } # complete_table_name sub apply_encoding { my ($self, $meta, $fn) = @_; defined $fn or $fn = "file handle " . fileno ($meta->{fh}); if (my $enc = $meta->{f_encoding}) { binmode $meta->{fh}, ":encoding($enc)" or croak "Failed to set encoding layer '$enc' on $fn: $!"; } else { binmode $meta->{fh} or croak "Failed to set binary mode on $fn: $!"; } } # apply_encoding sub open_data { my ($self, $meta, $attrs, $flags) = @_; $flags->{dropMode} and croak "Can't drop a table in stream"; my $fn = "file handle " . fileno ($meta->{f_file}); if ($flags->{createMode} || $flags->{lockMode}) { $meta->{fh} = IO::Handle->new_from_fd (fileno ($meta->{f_file}), "w+") or croak "Cannot open $fn for writing: $! (" . ($!+0) . ")"; } else { $meta->{fh} = IO::Handle->new_from_fd (fileno ($meta->{f_file}), "r") or croak "Cannot open $fn for reading: $! (" . ($!+0) . ")"; } if ($meta->{fh}) { $self->apply_encoding ($meta, $fn); } # have $meta->{$fh} if ($self->can_flock && $meta->{fh}) { my $lm = defined $flags->{f_lock} && $flags->{f_lock} =~ m/^[012]$/ ? $flags->{f_lock} : $flags->{lockMode} ? 2 : 1; if ($lm == 2) { flock $meta->{fh}, 2 or croak "Cannot obtain exclusive lock on $fn: $!"; } elsif ($lm == 1) { flock $meta->{fh}, 1 or croak "Cannot obtain shared lock on $fn: $!"; } # $lm = 0 is forced no locking at all } } # open_data sub can_flock { $locking } package DBD::File::DataSource::File; use strict; use warnings; @DBD::File::DataSource::File::ISA = "DBD::File::DataSource::Stream"; use Carp; my $fn_any_ext_regex = qr/\.[^.]*/; sub complete_table_name { my ($self, $meta, $file, $respect_case, $file_is_table) = @_; $file eq "." || $file eq ".." and return; # XXX would break a possible DBD::Dir # XXX now called without proving f_fqfn first ... my ($ext, $req) = ("", 0); if ($meta->{f_ext}) { ($ext, my $opt) = split m{/}, $meta->{f_ext}; if ($ext && $opt) { $opt =~ m/r/i and $req = 1; } } # (my $tbl = $file) =~ s/\Q$ext\E$//i; my ($tbl, $basename, $dir, $fn_ext, $user_spec_file, $searchdir); if ($file_is_table and defined $meta->{f_file}) { $tbl = $file; ($basename, $dir, $fn_ext) = File::Basename::fileparse ($meta->{f_file}, $fn_any_ext_regex); $file = $basename . $fn_ext; $user_spec_file = 1; } else { ($basename, $dir, undef) = File::Basename::fileparse ($file, qr{\Q$ext\E}); # $dir is returned with trailing (back)slash. We just need to check # if it is ".", "./", or ".\" or "[]" (VMS) if ($dir =~ m{^(?:[.][/\\]?|\[\])$} && ref $meta->{f_dir_search} eq "ARRAY") { foreach my $d ($meta->{f_dir}, @{$meta->{f_dir_search}}) { my $f = File::Spec->catdir ($d, $file); -f $f or next; $searchdir = Cwd::abs_path ($d); $dir = ""; last; } } $file = $tbl = $basename; $user_spec_file = 0; } if (!$respect_case and $meta->{sql_identifier_case} == 1) { # XXX SQL_IC_UPPER $basename = uc $basename; $tbl = uc $tbl; } elsif (!$respect_case and $meta->{sql_identifier_case} == 2) { # XXX SQL_IC_LOWER $basename = lc $basename; $tbl = lc $tbl; } unless (defined $searchdir) { $searchdir = File::Spec->file_name_is_absolute ($dir) ? ($dir =~ s{/$}{}, $dir) : Cwd::abs_path (File::Spec->catdir ($meta->{f_dir}, $dir)); } -d $searchdir or croak "-d $searchdir: $!"; $searchdir eq $meta->{f_dir} and $dir = ""; unless ($user_spec_file) { $file_is_table and $file = "$basename$ext"; # Fully Qualified File Name my $cmpsub; if ($respect_case) { $cmpsub = sub { my ($fn, undef, $sfx) = File::Basename::fileparse ($_, $fn_any_ext_regex); $^O eq "VMS" && $sfx eq "." and $sfx = ""; # no extension turns up as a dot $fn eq $basename and return (lc $sfx eq lc $ext or !$req && !$sfx); return 0; } } else { $cmpsub = sub { my ($fn, undef, $sfx) = File::Basename::fileparse ($_, $fn_any_ext_regex); $^O eq "VMS" && $sfx eq "." and $sfx = ""; # no extension turns up as a dot lc $fn eq lc $basename and return (lc $sfx eq lc $ext or !$req && !$sfx); return 0; } } my @f; { my $dh = IO::Dir->new ($searchdir) or croak "Can't open '$searchdir': $!"; @f = sort { length $b <=> length $a } grep { &$cmpsub ($_) } $dh->read (); $dh->close () or croak "Can't close '$searchdir': $!"; } @f > 0 && @f <= 2 and $file = $f[0]; !$respect_case && $meta->{sql_identifier_case} == 4 and # XXX SQL_IC_MIXED ($tbl = $file) =~ s/\Q$ext\E$//i; my $tmpfn = $file; if ($ext && $req) { # File extension required $tmpfn =~ s/\Q$ext\E$//i or return; } } my $fqfn = File::Spec->catfile ($searchdir, $file); my $fqbn = File::Spec->catfile ($searchdir, $basename); $meta->{f_fqfn} = $fqfn; $meta->{f_fqbn} = $fqbn; defined $meta->{f_lockfile} && $meta->{f_lockfile} and $meta->{f_fqln} = $meta->{f_fqbn} . $meta->{f_lockfile}; $dir && !$user_spec_file and $tbl = File::Spec->catfile ($dir, $tbl); $meta->{table_name} = $tbl; return $tbl; } # complete_table_name sub open_data { my ($self, $meta, $attrs, $flags) = @_; defined $meta->{f_fqfn} && $meta->{f_fqfn} ne "" or croak "No filename given"; my ($fh, $fn); unless ($meta->{f_dontopen}) { $fn = $meta->{f_fqfn}; if ($flags->{createMode}) { -f $meta->{f_fqfn} and croak "Cannot create table $attrs->{table}: Already exists"; $fh = IO::File->new ($fn, "a+") or croak "Cannot open $fn for writing: $! (" . ($!+0) . ")"; } else { unless ($fh = IO::File->new ($fn, ($flags->{lockMode} ? "r+" : "r"))) { croak "Cannot open $fn: $! (" . ($!+0) . ")"; } } $meta->{fh} = $fh; if ($fh) { $fh->seek (0, 0) or croak "Error while seeking back: $!"; $self->apply_encoding ($meta); } } if ($meta->{f_fqln}) { $fn = $meta->{f_fqln}; if ($flags->{createMode}) { -f $fn and croak "Cannot create table lock at '$fn' for $attrs->{table}: Already exists"; $fh = IO::File->new ($fn, "a+") or croak "Cannot open $fn for writing: $! (" . ($!+0) . ")"; } else { unless ($fh = IO::File->new ($fn, ($flags->{lockMode} ? "r+" : "r"))) { croak "Cannot open $fn: $! (" . ($!+0) . ")"; } } $meta->{lockfh} = $fh; } if ($self->can_flock && $fh) { my $lm = defined $flags->{f_lock} && $flags->{f_lock} =~ m/^[012]$/ ? $flags->{f_lock} : $flags->{lockMode} ? 2 : 1; if ($lm == 2) { flock $fh, 2 or croak "Cannot obtain exclusive lock on $fn: $!"; } elsif ($lm == 1) { flock $fh, 1 or croak "Cannot obtain shared lock on $fn: $!"; } # $lm = 0 is forced no locking at all } } # open_data # ====== SQL::STATEMENT ======================================================== package DBD::File::Statement; use strict; use warnings; @DBD::File::Statement::ISA = qw( DBI::DBD::SqlEngine::Statement ); # ====== SQL::TABLE ============================================================ package DBD::File::Table; use strict; use warnings; use Carp; require IO::File; require File::Basename; require File::Spec; require Cwd; require Scalar::Util; @DBD::File::Table::ISA = qw( DBI::DBD::SqlEngine::Table ); # ====== UTILITIES ============================================================ if (eval { require Params::Util; }) { Params::Util->import ("_HANDLE"); } else { # taken but modified from Params::Util ... *_HANDLE = sub { # It has to be defined, of course defined $_[0] or return; # Normal globs are considered to be file handles ref $_[0] eq "GLOB" and return $_[0]; # Check for a normal tied filehandle # Side Note: 5.5.4's tied () and can () doesn't like getting undef tied ($_[0]) and tied ($_[0])->can ("TIEHANDLE") and return $_[0]; # There are no other non-object handles that we support Scalar::Util::blessed ($_[0]) or return; # Check for a common base classes for conventional IO::Handle object $_[0]->isa ("IO::Handle") and return $_[0]; # Check for tied file handles using Tie::Handle $_[0]->isa ("Tie::Handle") and return $_[0]; # IO::Scalar is not a proper seekable, but it is valid is a # regular file handle $_[0]->isa ("IO::Scalar") and return $_[0]; # Yet another special case for IO::String, which refuses (for now # anyway) to become a subclass of IO::Handle. $_[0]->isa ("IO::String") and return $_[0]; # This is not any sort of object we know about return; }; } # ====== FLYWEIGHT SUPPORT ===================================================== # Flyweight support for table_info # The functions file2table, init_table_meta, default_table_meta and # get_table_meta are using $self arguments for polymorphism only. The # must not rely on an instantiated DBD::File::Table sub file2table { my ($self, $meta, $file, $file_is_table, $respect_case) = @_; return $meta->{sql_data_source}->complete_table_name ($meta, $file, $respect_case, $file_is_table); } # file2table sub bootstrap_table_meta { my ($self, $dbh, $meta, $table, @other) = @_; $self->SUPER::bootstrap_table_meta ($dbh, $meta, $table, @other); exists $meta->{f_dir} or $meta->{f_dir} = $dbh->{f_dir}; exists $meta->{f_dir_search} or $meta->{f_dir_search} = $dbh->{f_dir_search}; defined $meta->{f_ext} or $meta->{f_ext} = $dbh->{f_ext}; defined $meta->{f_encoding} or $meta->{f_encoding} = $dbh->{f_encoding}; exists $meta->{f_lock} or $meta->{f_lock} = $dbh->{f_lock}; exists $meta->{f_lockfile} or $meta->{f_lockfile} = $dbh->{f_lockfile}; defined $meta->{f_schema} or $meta->{f_schema} = $dbh->{f_schema}; defined $meta->{f_open_file_needed} or $meta->{f_open_file_needed} = $self->can ("open_file") != DBD::File::Table->can ("open_file"); defined ($meta->{sql_data_source}) or $meta->{sql_data_source} = _HANDLE ($meta->{f_file}) ? "DBD::File::DataSource::Stream" : "DBD::File::DataSource::File"; } # bootstrap_table_meta sub get_table_meta ($$$$;$) { my ($self, $dbh, $table, $file_is_table, $respect_case) = @_; my $meta = $self->SUPER::get_table_meta ($dbh, $table, $respect_case, $file_is_table); $table = $meta->{table_name}; return unless $table; return ($table, $meta); } # get_table_meta my %reset_on_modify = ( f_file => [ "f_fqfn", "sql_data_source" ], f_dir => "f_fqfn", f_dir_search => [], f_ext => "f_fqfn", f_lockfile => "f_fqfn", # forces new file2table call ); __PACKAGE__->register_reset_on_modify (\%reset_on_modify); my %compat_map = map { $_ => "f_$_" } qw( file ext lock lockfile ); __PACKAGE__->register_compat_map (\%compat_map); # ====== DBD::File <= 0.40 compat stuff ======================================== # compat to 0.38 .. 0.40 API sub open_file { my ($className, $meta, $attrs, $flags) = @_; return $className->SUPER::open_data ($meta, $attrs, $flags); } # open_file sub open_data { my ($className, $meta, $attrs, $flags) = @_; # compat to 0.38 .. 0.40 API $meta->{f_open_file_needed} ? $className->open_file ($meta, $attrs, $flags) : $className->SUPER::open_data ($meta, $attrs, $flags); return; } # open_data # ====== SQL::Eval API ========================================================= sub drop ($) { my ($self, $data) = @_; my $meta = $self->{meta}; # We have to close the file before unlinking it: Some OS'es will # refuse the unlink otherwise. $meta->{fh} and $meta->{fh}->close (); $meta->{lockfh} and $meta->{lockfh}->close (); undef $meta->{fh}; undef $meta->{lockfh}; $meta->{f_fqfn} and unlink $meta->{f_fqfn}; # XXX ==> sql_data_source $meta->{f_fqln} and unlink $meta->{f_fqln}; # XXX ==> sql_data_source delete $data->{Database}{sql_meta}{$self->{table}}; return 1; } # drop sub seek ($$$$) { my ($self, $data, $pos, $whence) = @_; my $meta = $self->{meta}; if ($whence == 0 && $pos == 0) { $pos = defined $meta->{first_row_pos} ? $meta->{first_row_pos} : 0; } elsif ($whence != 2 || $pos != 0) { croak "Illegal seek position: pos = $pos, whence = $whence"; } $meta->{fh}->seek ($pos, $whence) or croak "Error while seeking in " . $meta->{f_fqfn} . ": $!"; } # seek sub truncate ($$) { my ($self, $data) = @_; my $meta = $self->{meta}; $meta->{fh}->truncate ($meta->{fh}->tell ()) or croak "Error while truncating " . $meta->{f_fqfn} . ": $!"; return 1; } # truncate sub DESTROY { my $self = shift; my $meta = $self->{meta}; $meta->{fh} and $meta->{fh}->close (); $meta->{lockfh} and $meta->{lockfh}->close (); undef $meta->{fh}; undef $meta->{lockfh}; $self->SUPER::DESTROY(); } # DESTROY 1; __END__ =head1 NAME DBD::File - Base class for writing file based DBI drivers =head1 SYNOPSIS This module is a base class for writing other L<DBD|DBI::DBD>s. It is not intended to function as a DBD itself (though it is possible). If you want to access flat files, use L<DBD::AnyData|DBD::AnyData>, or L<DBD::CSV|DBD::CSV> (both of which are subclasses of DBD::File). =head1 DESCRIPTION The DBD::File module is not a true L<DBI|DBI> driver, but an abstract base class for deriving concrete DBI drivers from it. The implication is, that these drivers work with plain files, for example CSV files or INI files. The module is based on the L<SQL::Statement|SQL::Statement> module, a simple SQL engine. See L<DBI|DBI> for details on DBI, L<SQL::Statement|SQL::Statement> for details on SQL::Statement and L<DBD::CSV|DBD::CSV>, L<DBD::DBM|DBD::DBM> or L<DBD::AnyData|DBD::AnyData> for example drivers. =head2 Metadata The following attributes are handled by DBI itself and not by DBD::File, thus they all work as expected: Active ActiveKids CachedKids CompatMode (Not used) InactiveDestroy AutoInactiveDestroy Kids PrintError RaiseError Warn (Not used) =head3 The following DBI attributes are handled by DBD::File: =head4 AutoCommit Always on. =head4 ChopBlanks Works. =head4 NUM_OF_FIELDS Valid after C<< $sth->execute >>. =head4 NUM_OF_PARAMS Valid after C<< $sth->prepare >>. =head4 NAME Valid after C<< $sth->execute >>; undef for Non-Select statements. =head4 NULLABLE Not really working, always returns an array ref of ones, except the affected table has been created in this session. Valid after C<< $sth->execute >>; undef for non-select statements. =head3 Unsupported DBI attributes and methods =head4 bind_param_inout =head4 CursorName =head4 LongReadLen =head4 LongTruncOk =head3 DBD::File specific attributes In addition to the DBI attributes, you can use the following dbh attributes: =head4 f_dir This attribute is used for setting the directory where the files are opened and it defaults to the current directory (F<.>). Usually you set it on the dbh but it may be overridden per table (see L<f_meta>). When the value for C<f_dir> is a relative path, it is converted into the appropriate absolute path name (based on the current working directory) when the dbh attribute is set. f_dir => "/data/foo/csv", See L<KNOWN BUGS AND LIMITATIONS>. =head4 f_dir_search This optional attribute can be set to pass a list of folders to also find existing tables. It will B<not> be used to create new files. f_dir_search => [ "/data/bar/csv", "/dump/blargh/data" ], =head4 f_ext This attribute is used for setting the file extension. The format is: extension{/flag} where the /flag is optional and the extension is case-insensitive. C<f_ext> allows you to specify an extension which: f_ext => ".csv/r", =over =item * makes DBD::File prefer F<table.extension> over F<table>. =item * makes the table name the filename minus the extension. =back DBI:CSV:f_dir=data;f_ext=.csv In the above example and when C<f_dir> contains both F<table.csv> and F<table>, DBD::File will open F<table.csv> and the table will be named "table". If F<table.csv> does not exist but F<table> does that file is opened and the table is also called "table". If C<f_ext> is not specified and F<table.csv> exists it will be opened and the table will be called "table.csv" which is probably not what you want. NOTE: even though extensions are case-insensitive, table names are not. DBI:CSV:f_dir=data;f_ext=.csv/r The C<r> flag means the file extension is required and any filename that does not match the extension is ignored. Usually you set it on the dbh but it may be overridden per table (see L<f_meta>). =head4 f_schema This will set the schema name and defaults to the owner of the directory in which the table file resides. You can set C<f_schema> to C<undef>. my $dbh = DBI->connect ("dbi:CSV:", "", "", { f_schema => undef, f_dir => "data", f_ext => ".csv/r", }) or die $DBI::errstr; By setting the schema you affect the results from the tables call: my @tables = $dbh->tables (); # no f_schema "merijn".foo "merijn".bar # f_schema => "dbi" "dbi".foo "dbi".bar # f_schema => undef foo bar Defining C<f_schema> to the empty string is equal to setting it to C<undef> so the DSN can be C<"dbi:CSV:f_schema=;f_dir=.">. =head4 f_lock The C<f_lock> attribute is used to set the locking mode on the opened table files. Note that not all platforms support locking. By default, tables are opened with a shared lock for reading, and with an exclusive lock for writing. The supported modes are: 0: No locking at all. 1: Shared locks will be used. 2: Exclusive locks will be used. But see L<KNOWN BUGS|/"KNOWN BUGS AND LIMITATIONS"> below. =head4 f_lockfile If you wish to use a lockfile extension other than C<.lck>, simply specify the C<f_lockfile> attribute: $dbh = DBI->connect ("dbi:DBM:f_lockfile=.foo"); $dbh->{f_lockfile} = ".foo"; $dbh->{dbm_tables}{qux}{f_lockfile} = ".foo"; If you wish to disable locking, set the C<f_lockfile> to C<0>. $dbh = DBI->connect ("dbi:DBM:f_lockfile=0"); $dbh->{f_lockfile} = 0; $dbh->{dbm_tables}{qux}{f_lockfile} = 0; =head4 f_encoding With this attribute, you can set the encoding in which the file is opened. This is implemented using C<< binmode $fh, ":encoding(<f_encoding>)" >>. =head4 f_meta Private data area aliasing L<DBI::DBD::SqlEngine/sql_meta> which contains information about the tables this module handles. Table meta data might not be available until the table has been accessed for the first time e.g., by issuing a select on it however it is possible to pre-initialize attributes for each table you use. DBD::File recognizes the (public) attributes C<f_ext>, C<f_dir>, C<f_file>, C<f_encoding>, C<f_lock>, C<f_lockfile>, C<f_schema>, in addition to the attributes L<DBI::DBD::SqlEngine/sql_meta> already supports. Be very careful when modifying attributes you do not know, the consequence might be a destroyed or corrupted table. C<f_file> is an attribute applicable to table meta data only and you will not find a corresponding attribute in the dbh. Whilst it may be reasonable to have several tables with the same column names, it is not for the same file name. If you need access to the same file using different table names, use C<SQL::Statement> as the SQL engine and the C<AS> keyword: SELECT * FROM tbl AS t1, tbl AS t2 WHERE t1.id = t2.id C<f_file> can be an absolute path name or a relative path name but if it is relative, it is interpreted as being relative to the C<f_dir> attribute of the table meta data. When C<f_file> is set DBD::File will use C<f_file> as specified and will not attempt to work out an alternative for C<f_file> using the C<table name> and C<f_ext> attribute. While C<f_meta> is a private and readonly attribute (which means, you cannot modify it's values), derived drivers might provide restricted write access through another attribute. Well known accessors are C<csv_tables> for L<DBD::CSV>, C<ad_tables> for L<DBD::AnyData> and C<dbm_tables> for L<DBD::DBM>. =head3 New opportunities for attributes from DBI::DBD::SqlEngine =head4 sql_table_source C<< $dbh->{sql_table_source} >> can be set to I<DBD::File::TableSource::FileSystem> (and is the default setting of DBD::File). This provides usual behaviour of previous DBD::File releases on @ary = DBI->data_sources ($driver); @ary = DBI->data_sources ($driver, \%attr); @ary = $dbh->data_sources (); @ary = $dbh->data_sources (\%attr); @names = $dbh->tables ($catalog, $schema, $table, $type); $sth = $dbh->table_info ($catalog, $schema, $table, $type); $sth = $dbh->table_info ($catalog, $schema, $table, $type, \%attr); $dbh->func ("list_tables"); =head4 sql_data_source C<< $dbh->{sql_data_source} >> can be set to either I<DBD::File::DataSource::File>, which is default and provides the well known behavior of DBD::File releases prior to 0.41, or I<DBD::File::DataSource::Stream>, which reuses already opened file-handle for operations. =head3 Internally private attributes to deal with SQL backends Do not modify any of these private attributes unless you understand the implications of doing so. The behavior of DBD::File and derived DBDs might be unpredictable when one or more of those attributes are modified. =head4 sql_nano_version Contains the version of loaded DBI::SQL::Nano. =head4 sql_statement_version Contains the version of loaded SQL::Statement. =head4 sql_handler Contains either the text 'SQL::Statement' or 'DBI::SQL::Nano'. =head4 sql_ram_tables Contains optionally temporary tables. =head4 sql_flags Contains optional flags to instantiate the SQL::Parser parsing engine when SQL::Statement is used as SQL engine. See L<SQL::Parser> for valid flags. =head2 Driver private methods =head3 Default DBI methods =head4 data_sources The C<data_sources> method returns a list of subdirectories of the current directory in the form "dbi:CSV:f_dir=$dirname". If you want to read the subdirectories of another directory, use my ($drh) = DBI->install_driver ("CSV"); my (@list) = $drh->data_sources (f_dir => "/usr/local/csv_data"); =head3 Additional methods The following methods are only available via their documented name when DBD::File is used directly. Because this is only reasonable for testing purposes, the real names must be used instead. Those names can be computed by replacing the C<f_> in the method name with the driver prefix. =head4 f_versions Signature: sub f_versions (;$) { my ($table_name) = @_; $table_name ||= "."; ... } Returns the versions of the driver, including the DBI version, the Perl version, DBI::PurePerl version (if DBI::PurePerl is active) and the version of the SQL engine in use. my $dbh = DBI->connect ("dbi:File:"); my $f_versions = $dbh->func ("f_versions"); print "$f_versions\n"; __END__ # DBD::File 0.41 using IO::File (1.16) # DBI::DBD::SqlEngine 0.05 using SQL::Statement 1.406 # DBI 1.623 # OS darwin (12.2.1) # Perl 5.017006 (darwin-thread-multi-ld-2level) Called in list context, f_versions will return an array containing each line as single entry. Some drivers might use the optional (table name) argument and modify version information related to the table (e.g. DBD::DBM provides storage backend information for the requested table, when it has a table name). =head1 KNOWN BUGS AND LIMITATIONS =over 4 =item * This module uses flock () internally but flock is not available on all platforms. On MacOS and Windows 95 there is no locking at all (perhaps not so important on MacOS and Windows 95, as there is only a single user). =item * The module stores details about the handled tables in a private area of the driver handle (C<$drh>). This data area is not shared between different driver instances, so several C<< DBI->connect () >> calls will cause different table instances and private data areas. This data area is filled for the first time when a table is accessed, either via an SQL statement or via C<table_info> and is not destroyed until the table is dropped or the driver handle is released. Manual destruction is possible via L<f_clear_meta>. The following attributes are preserved in the data area and will evaluated instead of driver globals: =over 8 =item f_ext =item f_dir =item f_dir_search =item f_lock =item f_lockfile =item f_encoding =item f_schema =item col_names =item sql_identifier_case =back The following attributes are preserved in the data area only and cannot be set globally. =over 8 =item f_file =back The following attributes are preserved in the data area only and are computed when initializing the data area: =over 8 =item f_fqfn =item f_fqbn =item f_fqln =item table_name =back For DBD::CSV tables this means, once opened "foo.csv" as table named "foo", another table named "foo" accessing the file "foo.txt" cannot be opened. Accessing "foo" will always access the file "foo.csv" in memorized C<f_dir>, locking C<f_lockfile> via memorized C<f_lock>. You can use L<f_clear_meta> or the C<f_file> attribute for a specific table to work around this. =item * When used with SQL::Statement and temporary tables e.g., CREATE TEMP TABLE ... the table data processing bypasses DBD::File::Table. No file system calls will be made and there are no clashes with existing (file based) tables with the same name. Temporary tables are chosen over file tables, but they will not covered by C<table_info>. =back =head1 AUTHOR This module is currently maintained by H.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com > The original author is Jochen Wiedmann. =head1 COPYRIGHT AND LICENSE Copyright (C) 2009-2013 by H.Merijn Brand & Jens Rehsack Copyright (C) 2004-2009 by Jeff Zucker Copyright (C) 1998-2004 by Jochen Wiedmann All rights reserved. You may freely distribute and/or modify this module under the terms of either the GNU General Public License (GPL) or the Artistic License, as specified in the Perl README file. =head1 SEE ALSO L<DBI|DBI>, L<DBD::DBM|DBD::DBM>, L<DBD::CSV|DBD::CSV>, L<Text::CSV|Text::CSV>, L<Text::CSV_XS|Text::CSV_XS>, L<SQL::Statement|SQL::Statement>, and L<DBI::SQL::Nano|DBI::SQL::Nano> =cut DBD/mysql/GetInfo.pm 0000644 00000037362 15037233337 0010214 0 ustar 00 package DBD::mysql::GetInfo; ######################################## # DBD::mysql::GetInfo # # # Generated by DBI::DBD::Metadata # $Author$ <-- the person to blame # $Revision$ # $Date$ use strict; use warnings; use DBD::mysql; # Beware: not officially documented interfaces... # use DBI::Const::GetInfoType qw(%GetInfoType); # use DBI::Const::GetInfoReturn qw(%GetInfoReturnTypes %GetInfoReturnValues); my $sql_driver = 'mysql'; # SQL_DRIVER_VER should be formatted as dd.dd.dddd my $dbdversion = $DBD::mysql::VERSION; $dbdversion .= '_00' if $dbdversion =~ /^\d+\.\d+$/; my $sql_driver_ver = sprintf("%02d.%02d.%04d", split(/[\._]/,$dbdversion)); my @Keywords = qw( BIGINT BLOB DEFAULT KEYS LIMIT LONGBLOB MEDIMUMBLOB MEDIUMINT MEDIUMTEXT PROCEDURE REGEXP RLIKE SHOW TABLES TINYBLOB TINYTEXT UNIQUE UNSIGNED ZEROFILL ); sub sql_keywords { return join ',', @Keywords; } sub sql_data_source_name { my $dbh = shift; return "dbi:$sql_driver:" . $dbh->{Name}; } sub sql_user_name { my $dbh = shift; # Non-standard attribute return $dbh->{CURRENT_USER}; } #################### # makefunc() # returns a ref to a sub that calls into XS to get # values for info types that must needs be coded in C sub makefunk ($) { my $type = shift; return sub {dbd_mysql_get_info(shift, $type)} } our %info = ( 20 => 'N', # SQL_ACCESSIBLE_PROCEDURES 19 => 'Y', # SQL_ACCESSIBLE_TABLES 0 => 0, # SQL_ACTIVE_CONNECTIONS 116 => 0, # SQL_ACTIVE_ENVIRONMENTS 1 => 0, # SQL_ACTIVE_STATEMENTS 169 => 127, # SQL_AGGREGATE_FUNCTIONS 117 => 0, # SQL_ALTER_DOMAIN 86 => 3, # SQL_ALTER_TABLE 10021 => makefunk 10021, # SQL_ASYNC_MODE 120 => 2, # SQL_BATCH_ROW_COUNT 121 => 2, # SQL_BATCH_SUPPORT 82 => 0, # SQL_BOOKMARK_PERSISTENCE 114 => 1, # SQL_CATALOG_LOCATION 10003 => 'Y', # SQL_CATALOG_NAME 41 => makefunk 41, # SQL_CATALOG_NAME_SEPARATOR 42 => makefunk 42, # SQL_CATALOG_TERM 92 => 29, # SQL_CATALOG_USAGE 10004 => '', # SQL_COLLATING_SEQUENCE 10004 => '', # SQL_COLLATION_SEQ 87 => 'Y', # SQL_COLUMN_ALIAS 22 => 0, # SQL_CONCAT_NULL_BEHAVIOR 53 => 259071, # SQL_CONVERT_BIGINT 54 => 0, # SQL_CONVERT_BINARY 55 => 259071, # SQL_CONVERT_BIT 56 => 259071, # SQL_CONVERT_CHAR 57 => 259071, # SQL_CONVERT_DATE 58 => 259071, # SQL_CONVERT_DECIMAL 59 => 259071, # SQL_CONVERT_DOUBLE 60 => 259071, # SQL_CONVERT_FLOAT 48 => 0, # SQL_CONVERT_FUNCTIONS # 173 => undef, # SQL_CONVERT_GUID 61 => 259071, # SQL_CONVERT_INTEGER 123 => 0, # SQL_CONVERT_INTERVAL_DAY_TIME 124 => 0, # SQL_CONVERT_INTERVAL_YEAR_MONTH 71 => 0, # SQL_CONVERT_LONGVARBINARY 62 => 259071, # SQL_CONVERT_LONGVARCHAR 63 => 259071, # SQL_CONVERT_NUMERIC 64 => 259071, # SQL_CONVERT_REAL 65 => 259071, # SQL_CONVERT_SMALLINT 66 => 259071, # SQL_CONVERT_TIME 67 => 259071, # SQL_CONVERT_TIMESTAMP 68 => 259071, # SQL_CONVERT_TINYINT 69 => 0, # SQL_CONVERT_VARBINARY 70 => 259071, # SQL_CONVERT_VARCHAR 122 => 0, # SQL_CONVERT_WCHAR 125 => 0, # SQL_CONVERT_WLONGVARCHAR 126 => 0, # SQL_CONVERT_WVARCHAR 74 => 1, # SQL_CORRELATION_NAME 127 => 0, # SQL_CREATE_ASSERTION 128 => 0, # SQL_CREATE_CHARACTER_SET 129 => 0, # SQL_CREATE_COLLATION 130 => 0, # SQL_CREATE_DOMAIN 131 => 0, # SQL_CREATE_SCHEMA 132 => 1045, # SQL_CREATE_TABLE 133 => 0, # SQL_CREATE_TRANSLATION 134 => 0, # SQL_CREATE_VIEW 23 => 2, # SQL_CURSOR_COMMIT_BEHAVIOR 24 => 2, # SQL_CURSOR_ROLLBACK_BEHAVIOR 10001 => 0, # SQL_CURSOR_SENSITIVITY 2 => \&sql_data_source_name, # SQL_DATA_SOURCE_NAME 25 => 'N', # SQL_DATA_SOURCE_READ_ONLY 119 => 7, # SQL_DATETIME_LITERALS 17 => 'MySQL', # SQL_DBMS_NAME 18 => makefunk 18, # SQL_DBMS_VER 170 => 3, # SQL_DDL_INDEX 26 => 2, # SQL_DEFAULT_TRANSACTION_ISOLATION 26 => 2, # SQL_DEFAULT_TXN_ISOLATION 10002 => 'N', # SQL_DESCRIBE_PARAMETER # 171 => undef, # SQL_DM_VER 3 => 137076632, # SQL_DRIVER_HDBC # 135 => undef, # SQL_DRIVER_HDESC 4 => 137076088, # SQL_DRIVER_HENV # 76 => undef, # SQL_DRIVER_HLIB # 5 => undef, # SQL_DRIVER_HSTMT 6 => 'libmyodbc3.so', # SQL_DRIVER_NAME 77 => '03.51', # SQL_DRIVER_ODBC_VER 7 => $sql_driver_ver, # SQL_DRIVER_VER 136 => 0, # SQL_DROP_ASSERTION 137 => 0, # SQL_DROP_CHARACTER_SET 138 => 0, # SQL_DROP_COLLATION 139 => 0, # SQL_DROP_DOMAIN 140 => 0, # SQL_DROP_SCHEMA 141 => 7, # SQL_DROP_TABLE 142 => 0, # SQL_DROP_TRANSLATION 143 => 0, # SQL_DROP_VIEW 144 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES1 145 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES2 27 => 'Y', # SQL_EXPRESSIONS_IN_ORDERBY 8 => 63, # SQL_FETCH_DIRECTION 84 => 0, # SQL_FILE_USAGE 146 => 97863, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 147 => 6016, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 81 => 11, # SQL_GETDATA_EXTENSIONS 88 => 3, # SQL_GROUP_BY 28 => 4, # SQL_IDENTIFIER_CASE #29 => sub {dbd_mysql_get_info(shift,$GetInfoType {SQL_IDENTIFIER_QUOTE_CHAR})}, 29 => makefunk 29, # SQL_IDENTIFIER_QUOTE_CHAR 148 => 0, # SQL_INDEX_KEYWORDS 149 => 0, # SQL_INFO_SCHEMA_VIEWS 172 => 7, # SQL_INSERT_STATEMENT 73 => 'N', # SQL_INTEGRITY 150 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES1 151 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES2 89 => \&sql_keywords, # SQL_KEYWORDS 113 => 'Y', # SQL_LIKE_ESCAPE_CLAUSE 78 => 0, # SQL_LOCK_TYPES 34 => 64, # SQL_MAXIMUM_CATALOG_NAME_LENGTH 97 => 0, # SQL_MAXIMUM_COLUMNS_IN_GROUP_BY 98 => 32, # SQL_MAXIMUM_COLUMNS_IN_INDEX 99 => 0, # SQL_MAXIMUM_COLUMNS_IN_ORDER_BY 100 => 0, # SQL_MAXIMUM_COLUMNS_IN_SELECT 101 => 0, # SQL_MAXIMUM_COLUMNS_IN_TABLE 30 => 64, # SQL_MAXIMUM_COLUMN_NAME_LENGTH 1 => 0, # SQL_MAXIMUM_CONCURRENT_ACTIVITIES 31 => 18, # SQL_MAXIMUM_CURSOR_NAME_LENGTH 0 => 0, # SQL_MAXIMUM_DRIVER_CONNECTIONS 10005 => 64, # SQL_MAXIMUM_IDENTIFIER_LENGTH 102 => 500, # SQL_MAXIMUM_INDEX_SIZE 104 => 0, # SQL_MAXIMUM_ROW_SIZE 32 => 0, # SQL_MAXIMUM_SCHEMA_NAME_LENGTH 105 => makefunk 105, # SQL_MAXIMUM_STATEMENT_LENGTH # 20000 => undef, # SQL_MAXIMUM_STMT_OCTETS # 20001 => undef, # SQL_MAXIMUM_STMT_OCTETS_DATA # 20002 => undef, # SQL_MAXIMUM_STMT_OCTETS_SCHEMA 106 => makefunk 106, # SQL_MAXIMUM_TABLES_IN_SELECT 35 => 64, # SQL_MAXIMUM_TABLE_NAME_LENGTH 107 => 16, # SQL_MAXIMUM_USER_NAME_LENGTH 10022 => makefunk 10022, # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS 112 => 0, # SQL_MAX_BINARY_LITERAL_LEN 34 => 64, # SQL_MAX_CATALOG_NAME_LEN 108 => 0, # SQL_MAX_CHAR_LITERAL_LEN 97 => 0, # SQL_MAX_COLUMNS_IN_GROUP_BY 98 => 32, # SQL_MAX_COLUMNS_IN_INDEX 99 => 0, # SQL_MAX_COLUMNS_IN_ORDER_BY 100 => 0, # SQL_MAX_COLUMNS_IN_SELECT 101 => 0, # SQL_MAX_COLUMNS_IN_TABLE 30 => 64, # SQL_MAX_COLUMN_NAME_LEN 1 => 0, # SQL_MAX_CONCURRENT_ACTIVITIES 31 => 18, # SQL_MAX_CURSOR_NAME_LEN 0 => 0, # SQL_MAX_DRIVER_CONNECTIONS 10005 => 64, # SQL_MAX_IDENTIFIER_LEN 102 => 500, # SQL_MAX_INDEX_SIZE 32 => 0, # SQL_MAX_OWNER_NAME_LEN 33 => 0, # SQL_MAX_PROCEDURE_NAME_LEN 34 => 64, # SQL_MAX_QUALIFIER_NAME_LEN 104 => 0, # SQL_MAX_ROW_SIZE 103 => 'Y', # SQL_MAX_ROW_SIZE_INCLUDES_LONG 32 => 0, # SQL_MAX_SCHEMA_NAME_LEN 105 => 8192, # SQL_MAX_STATEMENT_LEN 106 => 31, # SQL_MAX_TABLES_IN_SELECT 35 => makefunk 35, # SQL_MAX_TABLE_NAME_LEN 107 => 16, # SQL_MAX_USER_NAME_LEN 37 => 'Y', # SQL_MULTIPLE_ACTIVE_TXN 36 => 'Y', # SQL_MULT_RESULT_SETS 111 => 'N', # SQL_NEED_LONG_DATA_LEN 75 => 1, # SQL_NON_NULLABLE_COLUMNS 85 => 2, # SQL_NULL_COLLATION 49 => 16777215, # SQL_NUMERIC_FUNCTIONS 9 => 1, # SQL_ODBC_API_CONFORMANCE 152 => 2, # SQL_ODBC_INTERFACE_CONFORMANCE 12 => 1, # SQL_ODBC_SAG_CLI_CONFORMANCE 15 => 1, # SQL_ODBC_SQL_CONFORMANCE 73 => 'N', # SQL_ODBC_SQL_OPT_IEF 10 => '03.80', # SQL_ODBC_VER 115 => 123, # SQL_OJ_CAPABILITIES 90 => 'Y', # SQL_ORDER_BY_COLUMNS_IN_SELECT 38 => 'Y', # SQL_OUTER_JOINS 115 => 123, # SQL_OUTER_JOIN_CAPABILITIES 39 => '', # SQL_OWNER_TERM 91 => 0, # SQL_OWNER_USAGE 153 => 2, # SQL_PARAM_ARRAY_ROW_COUNTS 154 => 3, # SQL_PARAM_ARRAY_SELECTS 80 => 3, # SQL_POSITIONED_STATEMENTS 79 => 31, # SQL_POS_OPERATIONS 21 => 'N', # SQL_PROCEDURES 40 => '', # SQL_PROCEDURE_TERM 114 => 1, # SQL_QUALIFIER_LOCATION 41 => '.', # SQL_QUALIFIER_NAME_SEPARATOR 42 => 'database', # SQL_QUALIFIER_TERM 92 => 29, # SQL_QUALIFIER_USAGE 93 => 3, # SQL_QUOTED_IDENTIFIER_CASE 11 => 'N', # SQL_ROW_UPDATES 39 => '', # SQL_SCHEMA_TERM 91 => 0, # SQL_SCHEMA_USAGE 43 => 7, # SQL_SCROLL_CONCURRENCY 44 => 17, # SQL_SCROLL_OPTIONS 14 => '\\', # SQL_SEARCH_PATTERN_ESCAPE 13 => makefunk 13, # SQL_SERVER_NAME 94 => 'ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜáíóúñÑ', # SQL_SPECIAL_CHARACTERS 155 => 7, # SQL_SQL92_DATETIME_FUNCTIONS 156 => 0, # SQL_SQL92_FOREIGN_KEY_DELETE_RULE 157 => 0, # SQL_SQL92_FOREIGN_KEY_UPDATE_RULE 158 => 8160, # SQL_SQL92_GRANT 159 => 0, # SQL_SQL92_NUMERIC_VALUE_FUNCTIONS 160 => 0, # SQL_SQL92_PREDICATES 161 => 466, # SQL_SQL92_RELATIONAL_JOIN_OPERATORS 162 => 32640, # SQL_SQL92_REVOKE 163 => 7, # SQL_SQL92_ROW_VALUE_CONSTRUCTOR 164 => 255, # SQL_SQL92_STRING_FUNCTIONS 165 => 0, # SQL_SQL92_VALUE_EXPRESSIONS 118 => 4, # SQL_SQL_CONFORMANCE 166 => 2, # SQL_STANDARD_CLI_CONFORMANCE 167 => 97863, # SQL_STATIC_CURSOR_ATTRIBUTES1 168 => 6016, # SQL_STATIC_CURSOR_ATTRIBUTES2 83 => 7, # SQL_STATIC_SENSITIVITY 50 => 491519, # SQL_STRING_FUNCTIONS 95 => 0, # SQL_SUBQUERIES 51 => 7, # SQL_SYSTEM_FUNCTIONS 45 => 'table', # SQL_TABLE_TERM 109 => 0, # SQL_TIMEDATE_ADD_INTERVALS 110 => 0, # SQL_TIMEDATE_DIFF_INTERVALS 52 => 106495, # SQL_TIMEDATE_FUNCTIONS 46 => 3, # SQL_TRANSACTION_CAPABLE 72 => 15, # SQL_TRANSACTION_ISOLATION_OPTION 46 => 3, # SQL_TXN_CAPABLE 72 => 15, # SQL_TXN_ISOLATION_OPTION 96 => 0, # SQL_UNION 96 => 0, # SQL_UNION_STATEMENT 47 => \&sql_user_name, # SQL_USER_NAME 10000 => 1992, # SQL_XOPEN_CLI_YEAR ); 1; __END__ DBD/mysql/INSTALL.pod 0000644 00000057715 15037233337 0010141 0 ustar 00 =encoding utf8 =head1 NAME DBD::mysql::INSTALL - How to install and configure DBD::mysql =head1 SYNOPSIS perl Makefile.PL [options] make make test make install =head1 DESCRIPTION This document describes the installation and configuration of DBD::mysql, the Perl DBI driver for the MySQL database. Before reading on, make sure that you have the prerequisites available: Perl, MySQL and DBI. For details see the separate section L</PREREQUISITES>. Depending on your version of Perl, it might be possible to use a binary distribution of DBD::mysql. If possible, this is recommended. Otherwise you need to install from the sources. If so, you will definitely need a C compiler. Installation from binaries and sources are both described in separate sections. L</BINARY INSTALLATION>. L</SOURCE INSTALLATION>. Finally, if you encounter any problems, do not forget to read the section on known problems L</KNOWN PROBLEMS>. If that doesn't help, you should check the section on L</SUPPORT>. =head1 PREREQUISITES =over =item Perl Preferably a version of Perl, that comes preconfigured with your system. For example, all Linux and FreeBSD distributions come with Perl. For Windows, using ActivePerl or Strawberry Perl is recommended, see L<http://www.activestate.com> and L<http://www.strawberryperl.com> for details. =item MySQL You need not install the actual MySQL database server, the client files and the development files are sufficient. For example, Fedora Linux distribution comes with RPM files (using YUM) B<mysql> and B<mysql-server> (use "yum search" to find exact package names). These are sufficient, if the MySQL server is located on a foreign machine. You may also create client files by compiling from the MySQL source distribution and using configure --without-server If you are using Windows and need to compile from sources (which is only the case if you are not using ActivePerl or Strawberry Perl), then you must ensure that the header and library files are installed. This may require choosing a "Custom installation" and selecting the appropriate option when running the MySQL setup program. =item DBI DBD::mysql is a DBI driver, hence you need DBI. It is available from the same source where you got the DBD::mysql distribution from. =item C compiler A C compiler is only required if you install from source. In most cases there are binary distributions of DBD::mysql available. However, if you need a C compiler, make sure, that it is the same C compiler that was used for compiling Perl and MySQL! Otherwise you will almost definitely encounter problems because of differences in the underlying C runtime libraries. In the worst case, this might mean to compile Perl and MySQL yourself. But believe me, experience shows that a lot of problems are fixed this way. =item Gzip libraries Late versions of MySQL come with support for compression. Thus it B<may> be required that you have install an RPM package like libz-devel, libgz-devel or something similar. =back =head1 BINARY INSTALLATION Binary installation is possible in the most cases, depending on your system. =head2 Windows =head3 Strawberry Perl Strawberry Perl comes bundled with DBD::mysql and the needed client libraries. =head3 ActiveState Perl ActivePerl offers a PPM archive of DBD::mysql. All you need to do is typing in a cmd.exe window: ppm install DBD-mysql This will fetch the module via HTTP and install them. If you need to use a WWW proxy server, the environment variable HTTP_proxy must be set: set HTTP_proxy=http://myproxy.example.com:8080/ ppm install DBD-mysql Of course you need to replace the host name C<myproxy.example.com> and the port number C<8080> with your local values. If the above procedure doesn't work, please upgrade to the latest version of ActivePerl. ActiveState has a policy where it only provides access free-of-charge for the PPM mirrors of the last few stable Perl releases. If you have an older perl, you'd either need to upgrade your perl or contact ActiveState about a subscription. =head2 Red Hat Enterprise Linux (RHEL), CentOS and Fedora Red Hat Enterprise Linux, its community derivatives such as CentOS, and Fedora come with MySQL and DBD::mysql. Use the following command to install DBD::mysql: yum install "perl(DBD::mysql)" =head2 Debian and Ubuntu On Debian, Ubuntu and derivatives you can install DBD::mysql from the repositories with the following command: sudo apt-get install libdbd-mysql-perl =head2 SLES and openSUSE On SUSE Linux Enterprise and the community version openSUSE, you can install DBD::mysql from the repositories with the following command: zypper install perl-DBD-mysql =head2 Other systems In the case of other Linux or FreeBSD distributions it is very likely that all you need comes with your distribution. I just cannot give you names, as I am not using these systems. Please let me know if you find the files in your favorite Linux or FreeBSD distribution so that I can extend the above list. =head1 SOURCE INSTALLATION So you need to install from sources. If you are lucky, the Perl module C<CPAN> will do all for you, thanks to the excellent work of Andreas König. Otherwise you will need to do a manual installation. All of these installation types have their own section: L</CPAN installation>, L</Manual installation> and L</Configuration>. The DBD::mysql Makefile.PL needs to know where to find your MySQL installation. This may be achieved using command line switches (see L</Configuration>) or automatically using the mysql_config binary which comes with most MySQL distributions. If your MySQL distribution contains mysql_config the easiest method is to ensure this binary is on your path. Typically, this is the case if you've installed the mysql library from your systems' package manager. e.g. PATH=$PATH:/usr/local/mysql/bin export PATH As stated, to compile DBD::mysql you'll need a C compiler. This should be the same compiler as the one used to build perl AND the mysql client libraries. If you're on linux, this is most typically the case and you need not worry. If you're on UNIX systems, you might want to pay attention. Also you'll need to get the MySQL client and development headers on your system. The easiest is to get these from your package manager. To run the tests that ship with the module, you'll need access to a running MySQL server. This can be running on localhost, but it can also be on a remote machine. On Fedora the process is as follows. Please note that Fedora actually ships with MariaDB but not with MySQL. This is not a problem, it will work just as well. In this example we install and start a local server for running the tests against. yum -y install make gcc mariadb-devel mariadb-libs mariadb-server yum -y install "perl(Test::Deep)" "perl(Test::More)" systemctl start mariadb.service =head2 Environment Variables For ease of use, you can set environment variables for DBD::mysql installation. You can set any or all of the options, and export them by putting them in your .bashrc or the like: export DBD_MYSQL_CFLAGS=-I/usr/local/mysql/include/mysql export DBD_MYSQL_LIBS="-L/usr/local/mysql/lib/mysql -lmysqlclient" export DBD_MYSQL_EMBEDDED= export DBD_MYSQL_CONFIG=mysql_config export DBD_MYSQL_NOCATCHSTDERR=0 export DBD_MYSQL_NOFOUNDROWS=0 export DBD_MYSQL_NOSSL= export DBD_MYSQL_TESTDB=test export DBD_MYSQL_TESTHOST=localhost export DBD_MYSQL_TESTPASSWORD=s3kr1+ export DBD_MYSQL_TESTPORT=3306 export DBD_MYSQL_TESTUSER=me The most useful may be the host, database, port, socket, user, and password. Installation will first look to your mysql_config, and then your environment variables, and then it will guess with intelligent defaults. =head2 CPAN installation Installation of DBD::mysql can be incredibly easy: cpan DBD::mysql Please note that this will only work if the prerequisites are fulfilled, which means you have a C-compiler installed, and you have the development headers and mysql client libraries available on your system. If you are using the CPAN module for the first time, just answer the questions by accepting the defaults which are fine in most cases. If you cannot get the CPAN module working, you might try manual installation. If installation with CPAN fails because the your local settings have been guessed wrong, you need to ensure MySQL's mysql_config is on your path (see L</SOURCE INSTALLATION>) or alternatively create a script called C<mysql_config>. This is described in more details later. L</Configuration>. =head2 Manual installation For a manual installation you need to fetch the DBD::mysql source distribution. The latest version is always available from https://metacpan.org/module/DBD::mysql The name is typically something like DBD-mysql-4.025.tar.gz The archive needs to be extracted. On Windows you may use a tool like 7-zip, on *nix you type tar xf DBD-mysql-4.025.tar.gz This will create a subdirectory DBD-mysql-4.025. Enter this subdirectory and type perl Makefile.PL make make test (On Windows you may need to replace "make" with "dmake" or "nmake".) If the tests seem to look fine, you may continue with make install If the compilation (make) or tests fail, you might need to configure some settings. For example you might choose a different database, the C compiler or the linker might need some flags. L</Configuration>. L</Compiler flags>. L</Linker flags>. For Cygwin there is a special section below. L</Cygwin>. =head2 Configuration The install script "Makefile.PL" can be configured via a lot of switches. All switches can be used on the command line. For example, the test database: perl Makefile.PL --testdb=<db> If you do not like configuring these switches on the command line, you may alternatively create a script called C<mysql_config>. This is described later on. Available switches are: =over =item testdb Name of the test database, defaults to B<test>. =item testuser Name of the test user, defaults to empty. If the name is empty, then the currently logged in users name will be used. =item testpassword Password of the test user, defaults to empty. =item testhost Host name or IP number of the test database; defaults to localhost. =item testport Port number of the test database =item ps-protcol=1 or 0 Whether to run the test suite using server prepared statements or driver emulated prepared statements. ps-protocol=1 means use server prepare, ps-protocol=0 means driver emulated. =item cflags This is a list of flags that you want to give to the C compiler. The most important flag is the location of the MySQL header files. For example, on Red Hat Linux the header files are in /usr/include/mysql and you might try -I/usr/include/mysql On Windows the header files may be in C:\mysql\include and you might try -IC:\mysql\include The default flags are determined by running mysql_config --cflags More details on the C compiler flags can be found in the following section. L</Compiler flags>. =item libs This is a list of flags that you want to give to the linker or loader. The most important flags are the locations and names of additional libraries. For example, on Red Hat Linux your MySQL client libraries are in /usr/lib/mysql and you might try -L/usr/lib/mysql -lmysqlclient -lz On Windows the libraries may be in C:\mysql\lib and -LC:\mysql\lib -lmysqlclient might be a good choice. The default flags are determined by running mysql_config --libs More details on the linker flags can be found in a separate section. L<Linker flags>. =back If a switch is not present on the command line, then the script C<mysql_config> will be executed. This script comes as part of the MySQL distribution. For example, to determine the C compiler flags, we are executing mysql_config --cflags mysql_config --libs If you want to configure your own settings for database name, database user and so on, then you have to create a script with the same name, that replies =head2 Compiler flags Note: the following info about compiler and linker flags, you shouldn't have to use these options because Makefile.PL is pretty good at utilizing mysql_config to get the flags that you need for a successful compile. It is typically not so difficult to determine the appropriate flags for the C compiler. The linker flags, which you find in the next section, are another story. The determination of the C compiler flags is usually left to a configuration script called F<mysql_config>, which can be invoked with mysql_config --cflags When doing so, it will emit a line with suggested C compiler flags, for example like this: -L/usr/include/mysql The C compiler must find some header files. Header files have the extension C<.h>. MySQL header files are, for example, F<mysql.h> and F<mysql_version.h>. In most cases the header files are not installed by default. For example, on Windows it is an installation option of the MySQL setup program (Custom installation), whether the header files are installed or not. On Red Hat Linux, you need to install an RPM archive F<mysql-devel> or F<MySQL-devel>. If you know the location of the header files, then you will need to add an option -L<header directory> to the C compiler flags, for example C<-L/usr/include/mysql>. =head2 Linker flags Appropriate linker flags are the most common source of problems while installing DBD::mysql. I will only give a rough overview, you'll find more details in the troubleshooting section. L</KNOWN PROBLEMS> The determination of the C compiler flags is usually left to a configuration script called F<mysql_config>, which can be invoked with mysql_config --libs When doing so, it will emit a line with suggested C compiler flags, for example like this: -L'/usr/lib/mysql' -lmysqlclient -lnsl -lm -lz -lcrypt The following items typically need to be configured for the linker: =over =item The mysqlclient library The MySQL client library comes as part of the MySQL distribution. Depending on your system it may be a file called F<libmysqlclient.a> statically linked library, Unix F<libmysqlclient.so> dynamically linked library, Unix F<mysqlclient.lib> statically linked library, Windows F<mysqlclient.dll> dynamically linked library, Windows or something similar. As in the case of the header files, the client library is typically not installed by default. On Windows you will need to select them while running the MySQL setup program (Custom installation). On Red Hat Linux an RPM archive F<mysql-devel> or F<MySQL-devel> must be installed. The linker needs to know the location and name of the mysqlclient library. This can be done by adding the flags -L<lib directory> -lmysqlclient or by adding the complete path name. Examples: -L/usr/lib/mysql -lmysqlclient -LC:\mysql\lib -lmysqlclient If you would like to use the static libraries (and there are excellent reasons to do so), you need to create a separate directory, copy the static libraries to that place and use the -L switch above to point to your new directory. For example: mkdir /tmp/mysql-static cp /usr/lib/mysql/*.a /tmp/mysql-static perl Makefile.PL --libs="-L/tmp/mysql-static -lmysqlclient" make make test make install rm -rf /tmp/mysql-static =item The gzip library The MySQL client can use compression when talking to the MySQL server, a nice feature when sending or receiving large texts over a slow network. On Unix you typically find the appropriate file name by running ldconfig -p | grep libz ldconfig -p | grep libgz Once you know the name (libz.a or libgz.a is best), just add it to the list of linker flags. If this seems to be causing problem you may also try to link without gzip libraries. =back =head1 ENCRYPTED CONNECTIONS via SSL Connecting to your servers over an encrypted connection (SSL) is only possible if you enabled this setting at build time. Since version 4.034, this is the default. Attempting to connect to a server that requires an encrypted connection without first having L<DBD::mysql> compiled with the C<--ssl> option will result in an error that makes things appear as if your password is incorrect. If you want to compile L<DBD::mysql> without SSL support, which you might probably only want if you for some reason can't install libssl headers, you can do this by passing the C<--nossl> option to Makefile.PL or by setting the DBD_MYSQL_NOSSL environment variable to '1'. =head1 MARIADB NATIVE CLIENT INSTALLATION The MariaDB native client is another option for connecting to a MySQL· database licensed LGPL 2.1. To build DBD::mysql against this client, you will first need to build the client. Generally, this is done with the following: cd path/to/src/mariadb-native-client cmake -G "Unix Makefiles' make sudo make install Once the client is built and installed, you can build DBD::mysql against it: perl Makefile.PL --testuser=xxx --testpassword=xxx --testsocket=/path/to//mysqld.sock --mysql_config=/usr/local/bin/mariadb_config· make make test make install =head1 SPECIAL SYSTEMS Below you find information on particular systems: =head2 Mac OS X Please see the the post at L<https://discussions.apple.com/thread/3932531> (Thanks to Kris Davey for pointing this out to me). I plan to see if I can get the build process to be more intelligent about using build flags that work. It is very difficult as it's not a driver problem per se but a problem in how one builds DBD::mysql with a binary client lib built on a different compiler than the one the user is using. Quite simply, using the binary MySQL installation from Oracle, you will need to first run: perl Makefile.PL --mysql_config=/usr/local/mysql-5.6.16-osx10.7-x86_64/bin/mysql_config There are some runtime issues you may encounter with OS X. Upon running make test, you might encounter the error: Error: Can't load '/Users/username/DBD-mysql/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/Users/username/DBD-mysql/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.18.dylib To solve this issue, you need to set the library path, similar to LD_LIBRARY_PATH on other Unix variants, but on OS X you need to do the following (this is for a binary install of MySQL from Oracle) export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql-5.6.16-osx10.7-x86_64/lib/ =head2 Cygwin If you are a user of Cygwin you already know, it contains a nicely running perl 5.6.1, installation of additional modules usually works like a charm via the standard procedure of perl makefile.PL make make test make install The Windows binary distribution of MySQL runs smoothly under Cygwin. You can start/stop the server and use all Windows clients without problem. But to install DBD::mysql you have to take a little special action. Don't attempt to build DBD::mysql against either the MySQL Windows or Linux/Unix BINARY distributions: neither will work! You MUST compile the MySQL clients yourself under Cygwin, to get a 'libmysqlclient.a' compiled under Cygwin. Really! You'll only need that library and the header files, you don't need any other client parts. Continue to use the Windows binaries. And don't attempt (currently) to build the MySQL Server part, it is unnecessary, as MySQL AB does an excellent job to deliver optimized binaries for the mainstream operating systems, and it is told, that the server compiled under Cygwin is unstable. Install a MySQL server for testing against. You can install the regular Windows MySQL server package on your Windows machine, or you can also test against a MySQL server on a remote host. =head3 Build MySQL clients under Cygwin: download the MySQL LINUX source from L<https://www.mysql.com/downloads>, unpack mysql-<version>.tar.gz into some tmp location and from this directory run configure: ./configure --prefix=/usr/local/mysql --without-server This prepares the Makefile with the installed Cygwin features. It takes some time, but should finish without error. The 'prefix', as given, installs the whole Cygwin/MySQL thingy into a location not normally in your PATH, so that you continue to use already installed Windows binaries. The --without-server parameter tells configure to only build the clients. make This builds all MySQL client parts ... be patient. It should finish finally without any error. make install This installs the compiled client files under /usr/local/mysql/. Remember, you don't need anything except the library under /usr/local/mysql/lib and the headers under /usr/local/mysql/include! Essentially you are now done with this part. If you want, you may try your compiled binaries shortly; for that, do: cd /usr/local/mysql/bin ./mysql -h 127.0.0.1 The host (-h) parameter 127.0.0.1 targets the local host, but forces the mysql client to use a TCP/IP connection. The default would be a pipe/socket connection (even if you say '-h localhost') and this doesn't work between Cygwin and Windows (as far as I know). If you have your MySQL server running on some other box, then please substitute '127.0.0.1' with the name or IP-number of that box. Please note, in my environment the 'mysql' client did not accept a simple RETURN, I had to use CTRL-RETURN to send commands ... strange, but I didn't attempt to fix that, as we are only interested in the built lib and headers. At the 'mysql>' prompt do a quick check: mysql> use mysql mysql> show tables; mysql> select * from db; mysql> exit You are now ready to build DBD::mysql! =head3 compile DBD::mysql download and extract DBD-mysql-<version>.tar.gz from CPAN cd into unpacked dir DBD-mysql-<version> you probably did that already, if you are reading this! cp /usr/local/mysql/bin/mysql_config . This copies the executable script mentioned in the DBD::mysql docs from your just built Cywin/MySQL client directory; it knows about your Cygwin installation, especially about the right libraries to link with. perl Makefile.PL --testhost=127.0.0.1 The --testhost=127.0.0.1 parameter again forces a TCP/IP connection to the MySQL server on the local host instead of a pipe/socket connection for the 'make test' phase. make This should run without error make test make install This installs DBD::mysql into the Perl hierarchy. =head1 KNOWN PROBLEMS =head2 no gzip on your system Some Linux distributions don't come with a gzip library by default. Running "make" terminates with an error message like LD_RUN_PATH="/usr/lib/mysql:/lib:/usr/lib" gcc -o blib/arch/auto/DBD/mysql/mysql.so -shared -L/usr/local/lib dbdimp.o mysql.o -L/usr/lib/mysql -lmysqlclient -lm -L/usr/lib/gcc-lib/i386-redhat-linux/2.96 -lgcc -lz /usr/bin/ld: cannot find -lz collect2: ld returned 1 exit status make: *** [blib/arch/auto/DBD/mysql/mysql.so] Error 1 If this is the case for you, install an RPM archive like libz-devel, libgz-devel, zlib-devel or gzlib-devel or something similar. =head2 different compiler for mysql and perl If Perl was compiled with gcc or egcs, but MySQL was compiled with another compiler or on another system, an error message like this is very likely when running "Make test": t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: _umoddi3 at /usr/local/perl-5.005/lib/5.005/i586-linux-thread/DynaLoader.pm line 168. This means, that your linker doesn't include libgcc.a. You have the following options: The solution is telling the linker to use libgcc. Run gcc --print-libgcc-file to determine the exact location of libgcc.a or for older versions of gcc gcc -v to determine the directory. If you know the directory, add a -L<directory> -lgcc to the list of C compiler flags. L</Configuration>. L</Linker flags>. =head1 SUPPORT Finally, if everything else fails, you are not alone. First of all, for an immediate answer, you should look into the archives of the dbi-users mailing list, which is available at L<http://groups.google.com/group/perl.dbi.users?hl=en&lr=> To subscribe to this list, send and email to dbi-users-subscribe@perl.org If you don't find an appropriate posting and reply in the mailing list, please post a question. Typically a reply will be seen within one or two days. Cwd.pm 0000644 00000052447 15037233337 0005641 0 ustar 00 package Cwd; use strict; use Exporter; our $VERSION = '3.74'; my $xs_version = $VERSION; $VERSION =~ tr/_//d; our @ISA = qw/ Exporter /; our @EXPORT = qw(cwd getcwd fastcwd fastgetcwd); push @EXPORT, qw(getdcwd) if $^O eq 'MSWin32'; our @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath); # sys_cwd may keep the builtin command # All the functionality of this module may provided by builtins, # there is no sense to process the rest of the file. # The best choice may be to have this in BEGIN, but how to return from BEGIN? if ($^O eq 'os2') { local $^W = 0; *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd; *getcwd = \&cwd; *fastgetcwd = \&cwd; *fastcwd = \&cwd; *fast_abs_path = \&sys_abspath if defined &sys_abspath; *abs_path = \&fast_abs_path; *realpath = \&fast_abs_path; *fast_realpath = \&fast_abs_path; return 1; } # Need to look up the feature settings on VMS. The preferred way is to use the # VMS::Feature module, but that may not be available to dual life modules. my $use_vms_feature; BEGIN { if ($^O eq 'VMS') { if (eval { local $SIG{__DIE__}; local @INC = @INC; pop @INC if $INC[-1] eq '.'; require VMS::Feature; }) { $use_vms_feature = 1; } } } # Need to look up the UNIX report mode. This may become a dynamic mode # in the future. sub _vms_unix_rpt { my $unix_rpt; if ($use_vms_feature) { $unix_rpt = VMS::Feature::current("filename_unix_report"); } else { my $env_unix_rpt = $ENV{'DECC$FILENAME_UNIX_REPORT'} || ''; $unix_rpt = $env_unix_rpt =~ /^[ET1]/i; } return $unix_rpt; } # Need to look up the EFS character set mode. This may become a dynamic # mode in the future. sub _vms_efs { my $efs; if ($use_vms_feature) { $efs = VMS::Feature::current("efs_charset"); } else { my $env_efs = $ENV{'DECC$EFS_CHARSET'} || ''; $efs = $env_efs =~ /^[ET1]/i; } return $efs; } # If loading the XS stuff doesn't work, we can fall back to pure perl if(! defined &getcwd && defined &DynaLoader::boot_DynaLoader) { # skipped on miniperl require XSLoader; XSLoader::load( __PACKAGE__, $xs_version); } # Big nasty table of function aliases my %METHOD_MAP = ( VMS => { cwd => '_vms_cwd', getcwd => '_vms_cwd', fastcwd => '_vms_cwd', fastgetcwd => '_vms_cwd', abs_path => '_vms_abs_path', fast_abs_path => '_vms_abs_path', }, MSWin32 => { # We assume that &_NT_cwd is defined as an XSUB or in the core. cwd => '_NT_cwd', getcwd => '_NT_cwd', fastcwd => '_NT_cwd', fastgetcwd => '_NT_cwd', abs_path => 'fast_abs_path', realpath => 'fast_abs_path', }, dos => { cwd => '_dos_cwd', getcwd => '_dos_cwd', fastgetcwd => '_dos_cwd', fastcwd => '_dos_cwd', abs_path => 'fast_abs_path', }, # QNX4. QNX6 has a $os of 'nto'. qnx => { cwd => '_qnx_cwd', getcwd => '_qnx_cwd', fastgetcwd => '_qnx_cwd', fastcwd => '_qnx_cwd', abs_path => '_qnx_abs_path', fast_abs_path => '_qnx_abs_path', }, cygwin => { getcwd => 'cwd', fastgetcwd => 'cwd', fastcwd => 'cwd', abs_path => 'fast_abs_path', realpath => 'fast_abs_path', }, amigaos => { getcwd => '_backtick_pwd', fastgetcwd => '_backtick_pwd', fastcwd => '_backtick_pwd', abs_path => 'fast_abs_path', } ); $METHOD_MAP{NT} = $METHOD_MAP{MSWin32}; # Find the pwd command in the expected locations. We assume these # are safe. This prevents _backtick_pwd() consulting $ENV{PATH} # so everything works under taint mode. my $pwd_cmd; if($^O ne 'MSWin32') { foreach my $try ('/bin/pwd', '/usr/bin/pwd', '/QOpenSys/bin/pwd', # OS/400 PASE. ) { if( -x $try ) { $pwd_cmd = $try; last; } } } # Android has a built-in pwd. Using $pwd_cmd will DTRT if # this perl was compiled with -Dd_useshellcmds, which is the # default for Android, but the block below is needed for the # miniperl running on the host when cross-compiling, and # potentially for native builds with -Ud_useshellcmds. if ($^O =~ /android/) { # If targetsh is executable, then we're either a full # perl, or a miniperl for a native build. if (-x $Config::Config{targetsh}) { $pwd_cmd = "$Config::Config{targetsh} -c pwd" } else { my $sh = $Config::Config{sh} || (-x '/system/bin/sh' ? '/system/bin/sh' : 'sh'); $pwd_cmd = "$sh -c pwd" } } my $found_pwd_cmd = defined($pwd_cmd); unless ($pwd_cmd) { # Isn't this wrong? _backtick_pwd() will fail if someone has # pwd in their path but it is not /bin/pwd or /usr/bin/pwd? # See [perl #16774]. --jhi $pwd_cmd = 'pwd'; } # Lazy-load Carp sub _carp { require Carp; Carp::carp(@_) } sub _croak { require Carp; Carp::croak(@_) } # The 'natural and safe form' for UNIX (pwd may be setuid root) sub _backtick_pwd { # Localize %ENV entries in a way that won't create new hash keys. # Under AmigaOS we don't want to localize as it stops perl from # finding 'sh' in the PATH. my @localize = grep exists $ENV{$_}, qw(PATH IFS CDPATH ENV BASH_ENV) if $^O ne "amigaos"; local @ENV{@localize} if @localize; my $cwd = `$pwd_cmd`; # Belt-and-suspenders in case someone said "undef $/". local $/ = "\n"; # `pwd` may fail e.g. if the disk is full chomp($cwd) if defined $cwd; $cwd; } # Since some ports may predefine cwd internally (e.g., NT) # we take care not to override an existing definition for cwd(). unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) { # The pwd command is not available in some chroot(2)'ed environments my $sep = $Config::Config{path_sep} || ':'; my $os = $^O; # Protect $^O from tainting # Try again to find a pwd, this time searching the whole PATH. if (defined $ENV{PATH} and $os ne 'MSWin32') { # no pwd on Windows my @candidates = split($sep, $ENV{PATH}); while (!$found_pwd_cmd and @candidates) { my $candidate = shift @candidates; $found_pwd_cmd = 1 if -x "$candidate/pwd"; } } if( $found_pwd_cmd ) { *cwd = \&_backtick_pwd; } else { *cwd = \&getcwd; } } if ($^O eq 'cygwin') { # We need to make sure cwd() is called with no args, because it's # got an arg-less prototype and will die if args are present. local $^W = 0; my $orig_cwd = \&cwd; *cwd = sub { &$orig_cwd() } } # set a reasonable (and very safe) default for fastgetcwd, in case it # isn't redefined later (20001212 rspier) *fastgetcwd = \&cwd; # A non-XS version of getcwd() - also used to bootstrap the perl build # process, when miniperl is running and no XS loading happens. sub _perl_getcwd { abs_path('.'); } # By John Bazik # # Usage: $cwd = &fastcwd; # # This is a faster version of getcwd. It's also more dangerous because # you might chdir out of a directory that you can't chdir back into. sub fastcwd_ { my($odev, $oino, $cdev, $cino, $tdev, $tino); my(@path, $path); local(*DIR); my($orig_cdev, $orig_cino) = stat('.'); ($cdev, $cino) = ($orig_cdev, $orig_cino); for (;;) { my $direntry; ($odev, $oino) = ($cdev, $cino); CORE::chdir('..') || return undef; ($cdev, $cino) = stat('.'); last if $odev == $cdev && $oino == $cino; opendir(DIR, '.') || return undef; for (;;) { $direntry = readdir(DIR); last unless defined $direntry; next if $direntry eq '.'; next if $direntry eq '..'; ($tdev, $tino) = lstat($direntry); last unless $tdev != $odev || $tino != $oino; } closedir(DIR); return undef unless defined $direntry; # should never happen unshift(@path, $direntry); } $path = '/' . join('/', @path); if ($^O eq 'apollo') { $path = "/".$path; } # At this point $path may be tainted (if tainting) and chdir would fail. # Untaint it then check that we landed where we started. $path =~ /^(.*)\z/s # untaint && CORE::chdir($1) or return undef; ($cdev, $cino) = stat('.'); die "Unstable directory path, current directory changed unexpectedly" if $cdev != $orig_cdev || $cino != $orig_cino; $path; } if (not defined &fastcwd) { *fastcwd = \&fastcwd_ } # Keeps track of current working directory in PWD environment var # Usage: # use Cwd 'chdir'; # chdir $newdir; my $chdir_init = 0; sub chdir_init { if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') { my($dd,$di) = stat('.'); my($pd,$pi) = stat($ENV{'PWD'}); if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) { $ENV{'PWD'} = cwd(); } } else { my $wd = cwd(); $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32'; $ENV{'PWD'} = $wd; } # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar) if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) { my($pd,$pi) = stat($2); my($dd,$di) = stat($1); if (defined $pd and defined $dd and $di == $pi and $dd == $pd) { $ENV{'PWD'}="$2$3"; } } $chdir_init = 1; } sub chdir { my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir) if ($^O eq "cygwin") { $newdir =~ s|\A///+|//|; $newdir =~ s|(?<=[^/])//+|/|g; } elsif ($^O ne 'MSWin32') { $newdir =~ s|///*|/|g; } chdir_init() unless $chdir_init; my $newpwd; if ($^O eq 'MSWin32') { # get the full path name *before* the chdir() $newpwd = Win32::GetFullPathName($newdir); } return 0 unless CORE::chdir $newdir; if ($^O eq 'VMS') { return $ENV{'PWD'} = $ENV{'DEFAULT'} } elsif ($^O eq 'MSWin32') { $ENV{'PWD'} = $newpwd; return 1; } if (ref $newdir eq 'GLOB') { # in case a file/dir handle is passed in $ENV{'PWD'} = cwd(); } elsif ($newdir =~ m#^/#s) { $ENV{'PWD'} = $newdir; } else { my @curdir = split(m#/#,$ENV{'PWD'}); @curdir = ('') unless @curdir; my $component; foreach $component (split(m#/#, $newdir)) { next if $component eq '.'; pop(@curdir),next if $component eq '..'; push(@curdir,$component); } $ENV{'PWD'} = join('/',@curdir) || '/'; } 1; } sub _perl_abs_path { my $start = @_ ? shift : '.'; my($dotdots, $cwd, @pst, @cst, $dir, @tst); unless (@cst = stat( $start )) { return undef; } unless (-d _) { # Make sure we can be invoked on plain files, not just directories. # NOTE that this routine assumes that '/' is the only directory separator. my ($dir, $file) = $start =~ m{^(.*)/(.+)$} or return cwd() . '/' . $start; # Can't use "-l _" here, because the previous stat was a stat(), not an lstat(). if (-l $start) { my $link_target = readlink($start); die "Can't resolve link $start: $!" unless defined $link_target; require File::Spec; $link_target = $dir . '/' . $link_target unless File::Spec->file_name_is_absolute($link_target); return abs_path($link_target); } return $dir ? abs_path($dir) . "/$file" : "/$file"; } $cwd = ''; $dotdots = $start; do { $dotdots .= '/..'; @pst = @cst; local *PARENT; unless (opendir(PARENT, $dotdots)) { return undef; } unless (@cst = stat($dotdots)) { my $e = $!; closedir(PARENT); $! = $e; return undef; } if ($pst[0] == $cst[0] && $pst[1] == $cst[1]) { $dir = undef; } else { do { unless (defined ($dir = readdir(PARENT))) { closedir(PARENT); require Errno; $! = Errno::ENOENT(); return undef; } $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir")) } while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] || $tst[1] != $pst[1]); } $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ; closedir(PARENT); } while (defined $dir); chop($cwd) unless $cwd eq '/'; # drop the trailing / $cwd; } my $Curdir; sub fast_abs_path { local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage my $cwd = getcwd(); defined $cwd or return undef; require File::Spec; my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir); # Detaint else we'll explode in taint mode. This is safe because # we're not doing anything dangerous with it. ($path) = $path =~ /(.*)/s; ($cwd) = $cwd =~ /(.*)/s; unless (-e $path) { require Errno; $! = Errno::ENOENT(); return undef; } unless (-d _) { # Make sure we can be invoked on plain files, not just directories. my ($vol, $dir, $file) = File::Spec->splitpath($path); return File::Spec->catfile($cwd, $path) unless length $dir; if (-l $path) { my $link_target = readlink($path); defined $link_target or return undef; $link_target = File::Spec->catpath($vol, $dir, $link_target) unless File::Spec->file_name_is_absolute($link_target); return fast_abs_path($link_target); } return $dir eq File::Spec->rootdir ? File::Spec->catpath($vol, $dir, $file) : fast_abs_path(File::Spec->catpath($vol, $dir, '')) . '/' . $file; } if (!CORE::chdir($path)) { return undef; } my $realpath = getcwd(); if (! ((-d $cwd) && (CORE::chdir($cwd)))) { _croak("Cannot chdir back to $cwd: $!"); } $realpath; } # added function alias to follow principle of least surprise # based on previous aliasing. --tchrist 27-Jan-00 *fast_realpath = \&fast_abs_path; # --- PORTING SECTION --- # VMS: $ENV{'DEFAULT'} points to default directory at all times # 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu # Note: Use of Cwd::chdir() causes the logical name PWD to be defined # in the process logical name table as the default device and directory # seen by Perl. This may not be the same as the default device # and directory seen by DCL after Perl exits, since the effects # the CRTL chdir() function persist only until Perl exits. sub _vms_cwd { return $ENV{'DEFAULT'}; } sub _vms_abs_path { return $ENV{'DEFAULT'} unless @_; my $path = shift; my $efs = _vms_efs; my $unix_rpt = _vms_unix_rpt; if (defined &VMS::Filespec::vmsrealpath) { my $path_unix = 0; my $path_vms = 0; $path_unix = 1 if ($path =~ m#(?<=\^)/#); $path_unix = 1 if ($path =~ /^\.\.?$/); $path_vms = 1 if ($path =~ m#[\[<\]]#); $path_vms = 1 if ($path =~ /^--?$/); my $unix_mode = $path_unix; if ($efs) { # In case of a tie, the Unix report mode decides. if ($path_vms == $path_unix) { $unix_mode = $unix_rpt; } else { $unix_mode = 0 if $path_vms; } } if ($unix_mode) { # Unix format return VMS::Filespec::unixrealpath($path); } # VMS format my $new_path = VMS::Filespec::vmsrealpath($path); # Perl expects directories to be in directory format $new_path = VMS::Filespec::pathify($new_path) if -d $path; return $new_path; } # Fallback to older algorithm if correct ones are not # available. if (-l $path) { my $link_target = readlink($path); die "Can't resolve link $path: $!" unless defined $link_target; return _vms_abs_path($link_target); } # may need to turn foo.dir into [.foo] my $pathified = VMS::Filespec::pathify($path); $path = $pathified if defined $pathified; return VMS::Filespec::rmsexpand($path); } sub _os2_cwd { my $pwd = `cmd /c cd`; chomp $pwd; $pwd =~ s:\\:/:g ; $ENV{'PWD'} = $pwd; return $pwd; } sub _win32_cwd_simple { my $pwd = `cd`; chomp $pwd; $pwd =~ s:\\:/:g ; $ENV{'PWD'} = $pwd; return $pwd; } sub _win32_cwd { my $pwd; $pwd = Win32::GetCwd(); $pwd =~ s:\\:/:g ; $ENV{'PWD'} = $pwd; return $pwd; } *_NT_cwd = defined &Win32::GetCwd ? \&_win32_cwd : \&_win32_cwd_simple; sub _dos_cwd { my $pwd; if (!defined &Dos::GetCwd) { chomp($pwd = `command /c cd`); $pwd =~ s:\\:/:g ; } else { $pwd = Dos::GetCwd(); } $ENV{'PWD'} = $pwd; return $pwd; } sub _qnx_cwd { local $ENV{PATH} = ''; local $ENV{CDPATH} = ''; local $ENV{ENV} = ''; my $pwd = `/usr/bin/fullpath -t`; chomp $pwd; $ENV{'PWD'} = $pwd; return $pwd; } sub _qnx_abs_path { local $ENV{PATH} = ''; local $ENV{CDPATH} = ''; local $ENV{ENV} = ''; my $path = @_ ? shift : '.'; local *REALPATH; defined( open(REALPATH, '-|') || exec '/usr/bin/fullpath', '-t', $path ) or die "Can't open /usr/bin/fullpath: $!"; my $realpath = <REALPATH>; close REALPATH; chomp $realpath; return $realpath; } # Now that all the base-level functions are set up, alias the # user-level functions to the right places if (exists $METHOD_MAP{$^O}) { my $map = $METHOD_MAP{$^O}; foreach my $name (keys %$map) { local $^W = 0; # assignments trigger 'subroutine redefined' warning no strict 'refs'; *{$name} = \&{$map->{$name}}; } } # In case the XS version doesn't load. *abs_path = \&_perl_abs_path unless defined &abs_path; *getcwd = \&_perl_getcwd unless defined &getcwd; # added function alias for those of us more # used to the libc function. --tchrist 27-Jan-00 *realpath = \&abs_path; 1; __END__ =head1 NAME Cwd - get pathname of current working directory =head1 SYNOPSIS use Cwd; my $dir = getcwd; use Cwd 'abs_path'; my $abs_path = abs_path($file); =head1 DESCRIPTION This module provides functions for determining the pathname of the current working directory. It is recommended that getcwd (or another *cwd() function) be used in I<all> code to ensure portability. By default, it exports the functions cwd(), getcwd(), fastcwd(), and fastgetcwd() (and, on Win32, getdcwd()) into the caller's namespace. =head2 getcwd and friends Each of these functions are called without arguments and return the absolute path of the current working directory. =over 4 =item getcwd my $cwd = getcwd(); Returns the current working directory. On error returns C<undef>, with C<$!> set to indicate the error. Exposes the POSIX function getcwd(3) or re-implements it if it's not available. =item cwd my $cwd = cwd(); The cwd() is the most natural form for the current architecture. For most systems it is identical to `pwd` (but without the trailing line terminator). =item fastcwd my $cwd = fastcwd(); A more dangerous version of getcwd(), but potentially faster. It might conceivably chdir() you out of a directory that it can't chdir() you back into. If fastcwd encounters a problem it will return undef but will probably leave you in a different directory. For a measure of extra security, if everything appears to have worked, the fastcwd() function will check that it leaves you in the same directory that it started in. If it has changed it will C<die> with the message "Unstable directory path, current directory changed unexpectedly". That should never happen. =item fastgetcwd my $cwd = fastgetcwd(); The fastgetcwd() function is provided as a synonym for cwd(). =item getdcwd my $cwd = getdcwd(); my $cwd = getdcwd('C:'); The getdcwd() function is also provided on Win32 to get the current working directory on the specified drive, since Windows maintains a separate current working directory for each drive. If no drive is specified then the current drive is assumed. This function simply calls the Microsoft C library _getdcwd() function. =back =head2 abs_path and friends These functions are exported only on request. They each take a single argument and return the absolute pathname for it. If no argument is given they'll use the current working directory. =over 4 =item abs_path my $abs_path = abs_path($file); Uses the same algorithm as getcwd(). Symbolic links and relative-path components ("." and "..") are resolved to return the canonical pathname, just like realpath(3). On error returns C<undef>, with C<$!> set to indicate the error. =item realpath my $abs_path = realpath($file); A synonym for abs_path(). =item fast_abs_path my $abs_path = fast_abs_path($file); A more dangerous, but potentially faster version of abs_path. =back =head2 $ENV{PWD} If you ask to override your chdir() built-in function, use Cwd qw(chdir); then your PWD environment variable will be kept up to date. Note that it will only be kept up to date if all packages which use chdir import it from Cwd. =head1 NOTES =over 4 =item * Since the path separators are different on some operating systems ('/' on Unix, ':' on MacPerl, etc...) we recommend you use the File::Spec modules wherever portability is a concern. =item * Actually, on Mac OS, the C<getcwd()>, C<fastgetcwd()> and C<fastcwd()> functions are all aliases for the C<cwd()> function, which, on Mac OS, calls `pwd`. Likewise, the C<abs_path()> function is an alias for C<fast_abs_path()>. =back =head1 AUTHOR Originally by the perl5-porters. Maintained by Ken Williams <KWILLIAMS@cpan.org> =head1 COPYRIGHT Copyright (c) 2004 by the Perl 5 Porters. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Portions of the C code in this library are copyright (c) 1994 by the Regents of the University of California. All rights reserved. The license on this code is compatible with the licensing of the rest of the distribution - please see the source code in F<Cwd.xs> for the details. =head1 SEE ALSO L<File::chdir> =cut Encode.pm 0000644 00000105101 15037233337 0006303 0 ustar 00 # # $Id: Encode.pm,v 2.97 2018/02/21 12:14:24 dankogai Exp $ # package Encode; use strict; use warnings; use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; our $VERSION; BEGIN { $VERSION = sprintf "%d.%02d", q$Revision: 2.97 $ =~ /(\d+)/g; require XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); } use Exporter 5.57 'import'; our @CARP_NOT = qw(Encode::Encoder); # Public, encouraged API is exported by default our @EXPORT = qw( decode decode_utf8 encode encode_utf8 str2bytes bytes2str encodings find_encoding find_mime_encoding clone_encoding ); our @FB_FLAGS = qw( DIE_ON_ERR WARN_ON_ERR RETURN_ON_ERR LEAVE_SRC PERLQQ HTMLCREF XMLCREF STOP_AT_PARTIAL ); our @FB_CONSTS = qw( FB_DEFAULT FB_CROAK FB_QUIET FB_WARN FB_PERLQQ FB_HTMLCREF FB_XMLCREF ); our @EXPORT_OK = ( qw( _utf8_off _utf8_on define_encoding from_to is_16bit is_8bit is_utf8 perlio_ok resolve_alias utf8_downgrade utf8_upgrade ), @FB_FLAGS, @FB_CONSTS, ); our %EXPORT_TAGS = ( all => [ @EXPORT, @EXPORT_OK ], default => [ @EXPORT ], fallbacks => [ @FB_CONSTS ], fallback_all => [ @FB_CONSTS, @FB_FLAGS ], ); # Documentation moved after __END__ for speed - NI-S our $ON_EBCDIC = ( ord("A") == 193 ); use Encode::Alias (); use Encode::MIME::Name; use Storable; # Make a %Encoding package variable to allow a certain amount of cheating our %Encoding; our %ExtModule; require Encode::Config; # See # https://bugzilla.redhat.com/show_bug.cgi?id=435505#c2 # to find why sig handlers inside eval{} are disabled. eval { local $SIG{__DIE__}; local $SIG{__WARN__}; local @INC = @INC; pop @INC if $INC[-1] eq '.'; require Encode::ConfigLocal; }; sub encodings { my %enc; my $arg = $_[1] || ''; if ( $arg eq ":all" ) { %enc = ( %Encoding, %ExtModule ); } else { %enc = %Encoding; for my $mod ( map { m/::/ ? $_ : "Encode::$_" } @_ ) { DEBUG and warn $mod; for my $enc ( keys %ExtModule ) { $ExtModule{$enc} eq $mod and $enc{$enc} = $mod; } } } return sort { lc $a cmp lc $b } grep { !/^(?:Internal|Unicode|Guess)$/o } keys %enc; } sub perlio_ok { my $obj = ref( $_[0] ) ? $_[0] : find_encoding( $_[0] ); $obj->can("perlio_ok") and return $obj->perlio_ok(); return 0; # safety net } sub define_encoding { my $obj = shift; my $name = shift; $Encoding{$name} = $obj; my $lc = lc($name); define_alias( $lc => $obj ) unless $lc eq $name; while (@_) { my $alias = shift; define_alias( $alias, $obj ); } my $class = ref($obj); push @Encode::CARP_NOT, $class unless grep { $_ eq $class } @Encode::CARP_NOT; push @Encode::Encoding::CARP_NOT, $class unless grep { $_ eq $class } @Encode::Encoding::CARP_NOT; return $obj; } sub getEncoding { my ( $class, $name, $skip_external ) = @_; defined($name) or return; $name =~ s/\s+//g; # https://rt.cpan.org/Ticket/Display.html?id=65796 ref($name) && $name->can('renew') and return $name; exists $Encoding{$name} and return $Encoding{$name}; my $lc = lc $name; exists $Encoding{$lc} and return $Encoding{$lc}; my $oc = $class->find_alias($name); defined($oc) and return $oc; $lc ne $name and $oc = $class->find_alias($lc); defined($oc) and return $oc; unless ($skip_external) { if ( my $mod = $ExtModule{$name} || $ExtModule{$lc} ) { $mod =~ s,::,/,g; $mod .= '.pm'; eval { require $mod; }; exists $Encoding{$name} and return $Encoding{$name}; } } return; } # HACK: These two functions must be defined in Encode and because of # cyclic dependency between Encode and Encode::Alias, Exporter does not work sub find_alias { goto &Encode::Alias::find_alias; } sub define_alias { goto &Encode::Alias::define_alias; } sub find_encoding($;$) { my ( $name, $skip_external ) = @_; return __PACKAGE__->getEncoding( $name, $skip_external ); } sub find_mime_encoding($;$) { my ( $mime_name, $skip_external ) = @_; my $name = Encode::MIME::Name::get_encode_name( $mime_name ); return find_encoding( $name, $skip_external ); } sub resolve_alias($) { my $obj = find_encoding(shift); defined $obj and return $obj->name; return; } sub clone_encoding($) { my $obj = find_encoding(shift); ref $obj or return; return Storable::dclone($obj); } sub encode($$;$) { my ( $name, $string, $check ) = @_; return undef unless defined $string; $string .= ''; # stringify; $check ||= 0; unless ( defined $name ) { require Carp; Carp::croak("Encoding name should not be undef"); } my $enc = find_encoding($name); unless ( defined $enc ) { require Carp; Carp::croak("Unknown encoding '$name'"); } # For Unicode, warnings need to be caught and re-issued at this level # so that callers can disable utf8 warnings lexically. my $octets; if ( ref($enc) eq 'Encode::Unicode' ) { my $warn = ''; { local $SIG{__WARN__} = sub { $warn = shift }; $octets = $enc->encode( $string, $check ); } warnings::warnif('utf8', $warn) if length $warn; } else { $octets = $enc->encode( $string, $check ); } $_[1] = $string if $check and !ref $check and !( $check & LEAVE_SRC ); return $octets; } *str2bytes = \&encode; sub decode($$;$) { my ( $name, $octets, $check ) = @_; return undef unless defined $octets; $octets .= ''; $check ||= 0; my $enc = find_encoding($name); unless ( defined $enc ) { require Carp; Carp::croak("Unknown encoding '$name'"); } # For Unicode, warnings need to be caught and re-issued at this level # so that callers can disable utf8 warnings lexically. my $string; if ( ref($enc) eq 'Encode::Unicode' ) { my $warn = ''; { local $SIG{__WARN__} = sub { $warn = shift }; $string = $enc->decode( $octets, $check ); } warnings::warnif('utf8', $warn) if length $warn; } else { $string = $enc->decode( $octets, $check ); } $_[1] = $octets if $check and !ref $check and !( $check & LEAVE_SRC ); return $string; } *bytes2str = \&decode; sub from_to($$$;$) { my ( $string, $from, $to, $check ) = @_; return undef unless defined $string; $check ||= 0; my $f = find_encoding($from); unless ( defined $f ) { require Carp; Carp::croak("Unknown encoding '$from'"); } my $t = find_encoding($to); unless ( defined $t ) { require Carp; Carp::croak("Unknown encoding '$to'"); } # For Unicode, warnings need to be caught and re-issued at this level # so that callers can disable utf8 warnings lexically. my $uni; if ( ref($f) eq 'Encode::Unicode' ) { my $warn = ''; { local $SIG{__WARN__} = sub { $warn = shift }; $uni = $f->decode($string); } warnings::warnif('utf8', $warn) if length $warn; } else { $uni = $f->decode($string); } if ( ref($t) eq 'Encode::Unicode' ) { my $warn = ''; { local $SIG{__WARN__} = sub { $warn = shift }; $_[0] = $string = $t->encode( $uni, $check ); } warnings::warnif('utf8', $warn) if length $warn; } else { $_[0] = $string = $t->encode( $uni, $check ); } return undef if ( $check && length($uni) ); return defined( $_[0] ) ? length($string) : undef; } sub encode_utf8($) { my ($str) = @_; return undef unless defined $str; utf8::encode($str); return $str; } my $utf8enc; sub decode_utf8($;$) { my ( $octets, $check ) = @_; return undef unless defined $octets; $octets .= ''; $check ||= 0; $utf8enc ||= find_encoding('utf8'); my $string = $utf8enc->decode( $octets, $check ); $_[0] = $octets if $check and !ref $check and !( $check & LEAVE_SRC ); return $string; } onBOOT; if ($ON_EBCDIC) { package Encode::UTF_EBCDIC; use parent 'Encode::Encoding'; my $obj = bless { Name => "UTF_EBCDIC" } => "Encode::UTF_EBCDIC"; Encode::define_encoding($obj, 'Unicode'); sub decode { my ( undef, $str, $chk ) = @_; my $res = ''; for ( my $i = 0 ; $i < length($str) ; $i++ ) { $res .= chr( utf8::unicode_to_native( ord( substr( $str, $i, 1 ) ) ) ); } $_[1] = '' if $chk; return $res; } sub encode { my ( undef, $str, $chk ) = @_; my $res = ''; for ( my $i = 0 ; $i < length($str) ; $i++ ) { $res .= chr( utf8::native_to_unicode( ord( substr( $str, $i, 1 ) ) ) ); } $_[1] = '' if $chk; return $res; } } else { package Encode::Internal; use parent 'Encode::Encoding'; my $obj = bless { Name => "Internal" } => "Encode::Internal"; Encode::define_encoding($obj, 'Unicode'); sub decode { my ( undef, $str, $chk ) = @_; utf8::upgrade($str); $_[1] = '' if $chk; return $str; } *encode = \&decode; } { # https://rt.cpan.org/Public/Bug/Display.html?id=103253 package Encode::XS; use parent 'Encode::Encoding'; } { package Encode::utf8; use parent 'Encode::Encoding'; my %obj = ( 'utf8' => { Name => 'utf8' }, 'utf-8-strict' => { Name => 'utf-8-strict', strict_utf8 => 1 } ); for ( keys %obj ) { bless $obj{$_} => __PACKAGE__; Encode::define_encoding( $obj{$_} => $_ ); } sub cat_decode { # ($obj, $dst, $src, $pos, $trm, $chk) # currently ignores $chk my ( undef, undef, undef, $pos, $trm ) = @_; my ( $rdst, $rsrc, $rpos ) = \@_[ 1, 2, 3 ]; use bytes; if ( ( my $npos = index( $$rsrc, $trm, $pos ) ) >= 0 ) { $$rdst .= substr( $$rsrc, $pos, $npos - $pos + length($trm) ); $$rpos = $npos + length($trm); return 1; } $$rdst .= substr( $$rsrc, $pos ); $$rpos = length($$rsrc); return ''; } } 1; __END__ =head1 NAME Encode - character encodings in Perl =head1 SYNOPSIS use Encode qw(decode encode); $characters = decode('UTF-8', $octets, Encode::FB_CROAK); $octets = encode('UTF-8', $characters, Encode::FB_CROAK); =head2 Table of Contents Encode consists of a collection of modules whose details are too extensive to fit in one document. This one itself explains the top-level APIs and general topics at a glance. For other topics and more details, see the documentation for these modules: =over 2 =item L<Encode::Alias> - Alias definitions to encodings =item L<Encode::Encoding> - Encode Implementation Base Class =item L<Encode::Supported> - List of Supported Encodings =item L<Encode::CN> - Simplified Chinese Encodings =item L<Encode::JP> - Japanese Encodings =item L<Encode::KR> - Korean Encodings =item L<Encode::TW> - Traditional Chinese Encodings =back =head1 DESCRIPTION The C<Encode> module provides the interface between Perl strings and the rest of the system. Perl strings are sequences of I<characters>. The repertoire of characters that Perl can represent is a superset of those defined by the Unicode Consortium. On most platforms the ordinal values of a character as returned by C<ord(I<S>)> is the I<Unicode codepoint> for that character. The exceptions are platforms where the legacy encoding is some variant of EBCDIC rather than a superset of ASCII; see L<perlebcdic>. During recent history, data is moved around a computer in 8-bit chunks, often called "bytes" but also known as "octets" in standards documents. Perl is widely used to manipulate data of many types: not only strings of characters representing human or computer languages, but also "binary" data, being the machine's representation of numbers, pixels in an image, or just about anything. When Perl is processing "binary data", the programmer wants Perl to process "sequences of bytes". This is not a problem for Perl: because a byte has 256 possible values, it easily fits in Perl's much larger "logical character". This document mostly explains the I<how>. L<perlunitut> and L<perlunifaq> explain the I<why>. =head2 TERMINOLOGY =head3 character A character in the range 0 .. 2**32-1 (or more); what Perl's strings are made of. =head3 byte A character in the range 0..255; a special case of a Perl character. =head3 octet 8 bits of data, with ordinal values 0..255; term for bytes passed to or from a non-Perl context, such as a disk file, standard I/O stream, database, command-line argument, environment variable, socket etc. =head1 THE PERL ENCODING API =head2 Basic methods =head3 encode $octets = encode(ENCODING, STRING[, CHECK]) Encodes the scalar value I<STRING> from Perl's internal form into I<ENCODING> and returns a sequence of octets. I<ENCODING> can be either a canonical name or an alias. For encoding names and aliases, see L</"Defining Aliases">. For CHECK, see L</"Handling Malformed Data">. B<CAVEAT>: the input scalar I<STRING> might be modified in-place depending on what is set in CHECK. See L</LEAVE_SRC> if you want your inputs to be left unchanged. For example, to convert a string from Perl's internal format into ISO-8859-1, also known as Latin1: $octets = encode("iso-8859-1", $string); B<CAVEAT>: When you run C<$octets = encode("UTF-8", $string)>, then $octets I<might not be equal to> $string. Though both contain the same data, the UTF8 flag for $octets is I<always> off. When you encode anything, the UTF8 flag on the result is always off, even when it contains a completely valid UTF-8 string. See L</"The UTF8 flag"> below. If the $string is C<undef>, then C<undef> is returned. C<str2bytes> may be used as an alias for C<encode>. =head3 decode $string = decode(ENCODING, OCTETS[, CHECK]) This function returns the string that results from decoding the scalar value I<OCTETS>, assumed to be a sequence of octets in I<ENCODING>, into Perl's internal form. As with encode(), I<ENCODING> can be either a canonical name or an alias. For encoding names and aliases, see L</"Defining Aliases">; for I<CHECK>, see L</"Handling Malformed Data">. B<CAVEAT>: the input scalar I<OCTETS> might be modified in-place depending on what is set in CHECK. See L</LEAVE_SRC> if you want your inputs to be left unchanged. For example, to convert ISO-8859-1 data into a string in Perl's internal format: $string = decode("iso-8859-1", $octets); B<CAVEAT>: When you run C<$string = decode("UTF-8", $octets)>, then $string I<might not be equal to> $octets. Though both contain the same data, the UTF8 flag for $string is on. See L</"The UTF8 flag"> below. If the $string is C<undef>, then C<undef> is returned. C<bytes2str> may be used as an alias for C<decode>. =head3 find_encoding [$obj =] find_encoding(ENCODING) Returns the I<encoding object> corresponding to I<ENCODING>. Returns C<undef> if no matching I<ENCODING> is find. The returned object is what does the actual encoding or decoding. $string = decode($name, $bytes); is in fact $string = do { $obj = find_encoding($name); croak qq(encoding "$name" not found) unless ref $obj; $obj->decode($bytes); }; with more error checking. You can therefore save time by reusing this object as follows; my $enc = find_encoding("iso-8859-1"); while(<>) { my $string = $enc->decode($_); ... # now do something with $string; } Besides L</decode> and L</encode>, other methods are available as well. For instance, C<name()> returns the canonical name of the encoding object. find_encoding("latin1")->name; # iso-8859-1 See L<Encode::Encoding> for details. =head3 find_mime_encoding [$obj =] find_mime_encoding(MIME_ENCODING) Returns the I<encoding object> corresponding to I<MIME_ENCODING>. Acts same as C<find_encoding()> but C<mime_name()> of returned object must match to I<MIME_ENCODING>. So as opposite of C<find_encoding()> canonical names and aliases are not used when searching for object. find_mime_encoding("utf8"); # returns undef because "utf8" is not valid I<MIME_ENCODING> find_mime_encoding("utf-8"); # returns encode object "utf-8-strict" find_mime_encoding("UTF-8"); # same as "utf-8" because I<MIME_ENCODING> is case insensitive find_mime_encoding("utf-8-strict"); returns undef because "utf-8-strict" is not valid I<MIME_ENCODING> =head3 from_to [$length =] from_to($octets, FROM_ENC, TO_ENC [, CHECK]) Converts I<in-place> data between two encodings. The data in $octets must be encoded as octets and I<not> as characters in Perl's internal format. For example, to convert ISO-8859-1 data into Microsoft's CP1250 encoding: from_to($octets, "iso-8859-1", "cp1250"); and to convert it back: from_to($octets, "cp1250", "iso-8859-1"); Because the conversion happens in place, the data to be converted cannot be a string constant: it must be a scalar variable. C<from_to()> returns the length of the converted string in octets on success, and C<undef> on error. B<CAVEAT>: The following operations may look the same, but are not: from_to($data, "iso-8859-1", "UTF-8"); #1 $data = decode("iso-8859-1", $data); #2 Both #1 and #2 make $data consist of a completely valid UTF-8 string, but only #2 turns the UTF8 flag on. #1 is equivalent to: $data = encode("UTF-8", decode("iso-8859-1", $data)); See L</"The UTF8 flag"> below. Also note that: from_to($octets, $from, $to, $check); is equivalent to: $octets = encode($to, decode($from, $octets), $check); Yes, it does I<not> respect the $check during decoding. It is deliberately done that way. If you need minute control, use C<decode> followed by C<encode> as follows: $octets = encode($to, decode($from, $octets, $check_from), $check_to); =head3 encode_utf8 $octets = encode_utf8($string); Equivalent to C<$octets = encode("utf8", $string)>. The characters in $string are encoded in Perl's internal format, and the result is returned as a sequence of octets. Because all possible characters in Perl have a (loose, not strict) utf8 representation, this function cannot fail. B<WARNING>: do not use this function for data exchange as it can produce not strict utf8 $octets! For strictly valid UTF-8 output use C<$octets = encode("UTF-8", $string)>. =head3 decode_utf8 $string = decode_utf8($octets [, CHECK]); Equivalent to C<$string = decode("utf8", $octets [, CHECK])>. The sequence of octets represented by $octets is decoded from (loose, not strict) utf8 into a sequence of logical characters. Because not all sequences of octets are valid not strict utf8, it is quite possible for this function to fail. For CHECK, see L</"Handling Malformed Data">. B<WARNING>: do not use this function for data exchange as it can produce $string with not strict utf8 representation! For strictly valid UTF-8 $string representation use C<$string = decode("UTF-8", $octets [, CHECK])>. B<CAVEAT>: the input I<$octets> might be modified in-place depending on what is set in CHECK. See L</LEAVE_SRC> if you want your inputs to be left unchanged. =head2 Listing available encodings use Encode; @list = Encode->encodings(); Returns a list of canonical names of available encodings that have already been loaded. To get a list of all available encodings including those that have not yet been loaded, say: @all_encodings = Encode->encodings(":all"); Or you can give the name of a specific module: @with_jp = Encode->encodings("Encode::JP"); When "C<::>" is not in the name, "C<Encode::>" is assumed. @ebcdic = Encode->encodings("EBCDIC"); To find out in detail which encodings are supported by this package, see L<Encode::Supported>. =head2 Defining Aliases To add a new alias to a given encoding, use: use Encode; use Encode::Alias; define_alias(NEWNAME => ENCODING); After that, I<NEWNAME> can be used as an alias for I<ENCODING>. I<ENCODING> may be either the name of an encoding or an I<encoding object>. Before you do that, first make sure the alias is nonexistent using C<resolve_alias()>, which returns the canonical name thereof. For example: Encode::resolve_alias("latin1") eq "iso-8859-1" # true Encode::resolve_alias("iso-8859-12") # false; nonexistent Encode::resolve_alias($name) eq $name # true if $name is canonical C<resolve_alias()> does not need C<use Encode::Alias>; it can be imported via C<use Encode qw(resolve_alias)>. See L<Encode::Alias> for details. =head2 Finding IANA Character Set Registry names The canonical name of a given encoding does not necessarily agree with IANA Character Set Registry, commonly seen as C<< Content-Type: text/plain; charset=I<WHATEVER> >>. For most cases, the canonical name works, but sometimes it does not, most notably with "utf-8-strict". As of C<Encode> version 2.21, a new method C<mime_name()> is therefore added. use Encode; my $enc = find_encoding("UTF-8"); warn $enc->name; # utf-8-strict warn $enc->mime_name; # UTF-8 See also: L<Encode::Encoding> =head1 Encoding via PerlIO If your perl supports C<PerlIO> (which is the default), you can use a C<PerlIO> layer to decode and encode directly via a filehandle. The following two examples are fully identical in functionality: ### Version 1 via PerlIO open(INPUT, "< :encoding(shiftjis)", $infile) || die "Can't open < $infile for reading: $!"; open(OUTPUT, "> :encoding(euc-jp)", $outfile) || die "Can't open > $output for writing: $!"; while (<INPUT>) { # auto decodes $_ print OUTPUT; # auto encodes $_ } close(INPUT) || die "can't close $infile: $!"; close(OUTPUT) || die "can't close $outfile: $!"; ### Version 2 via from_to() open(INPUT, "< :raw", $infile) || die "Can't open < $infile for reading: $!"; open(OUTPUT, "> :raw", $outfile) || die "Can't open > $output for writing: $!"; while (<INPUT>) { from_to($_, "shiftjis", "euc-jp", 1); # switch encoding print OUTPUT; # emit raw (but properly encoded) data } close(INPUT) || die "can't close $infile: $!"; close(OUTPUT) || die "can't close $outfile: $!"; In the first version above, you let the appropriate encoding layer handle the conversion. In the second, you explicitly translate from one encoding to the other. Unfortunately, it may be that encodings are not C<PerlIO>-savvy. You can check to see whether your encoding is supported by C<PerlIO> by invoking the C<perlio_ok> method on it: Encode::perlio_ok("hz"); # false find_encoding("euc-cn")->perlio_ok; # true wherever PerlIO is available use Encode qw(perlio_ok); # imported upon request perlio_ok("euc-jp") Fortunately, all encodings that come with C<Encode> core are C<PerlIO>-savvy except for C<hz> and C<ISO-2022-kr>. For the gory details, see L<Encode::Encoding> and L<Encode::PerlIO>. =head1 Handling Malformed Data The optional I<CHECK> argument tells C<Encode> what to do when encountering malformed data. Without I<CHECK>, C<Encode::FB_DEFAULT> (== 0) is assumed. As of version 2.12, C<Encode> supports coderef values for C<CHECK>; see below. B<NOTE:> Not all encodings support this feature. Some encodings ignore the I<CHECK> argument. For example, L<Encode::Unicode> ignores I<CHECK> and it always croaks on error. =head2 List of I<CHECK> values =head3 FB_DEFAULT I<CHECK> = Encode::FB_DEFAULT ( == 0) If I<CHECK> is 0, encoding and decoding replace any malformed character with a I<substitution character>. When you encode, I<SUBCHAR> is used. When you decode, the Unicode REPLACEMENT CHARACTER, code point U+FFFD, is used. If the data is supposed to be UTF-8, an optional lexical warning of warning category C<"utf8"> is given. =head3 FB_CROAK I<CHECK> = Encode::FB_CROAK ( == 1) If I<CHECK> is 1, methods immediately die with an error message. Therefore, when I<CHECK> is 1, you should trap exceptions with C<eval{}>, unless you really want to let it C<die>. =head3 FB_QUIET I<CHECK> = Encode::FB_QUIET If I<CHECK> is set to C<Encode::FB_QUIET>, encoding and decoding immediately return the portion of the data that has been processed so far when an error occurs. The data argument is overwritten with everything after that point; that is, the unprocessed portion of the data. This is handy when you have to call C<decode> repeatedly in the case where your source data may contain partial multi-byte character sequences, (that is, you are reading with a fixed-width buffer). Here's some sample code to do exactly that: my($buffer, $string) = ("", ""); while (read($fh, $buffer, 256, length($buffer))) { $string .= decode($encoding, $buffer, Encode::FB_QUIET); # $buffer now contains the unprocessed partial character } =head3 FB_WARN I<CHECK> = Encode::FB_WARN This is the same as C<FB_QUIET> above, except that instead of being silent on errors, it issues a warning. This is handy for when you are debugging. =head3 FB_PERLQQ FB_HTMLCREF FB_XMLCREF =over 2 =item perlqq mode (I<CHECK> = Encode::FB_PERLQQ) =item HTML charref mode (I<CHECK> = Encode::FB_HTMLCREF) =item XML charref mode (I<CHECK> = Encode::FB_XMLCREF) =back For encodings that are implemented by the C<Encode::XS> module, C<CHECK> C<==> C<Encode::FB_PERLQQ> puts C<encode> and C<decode> into C<perlqq> fallback mode. When you decode, C<\xI<HH>> is inserted for a malformed character, where I<HH> is the hex representation of the octet that could not be decoded to utf8. When you encode, C<\x{I<HHHH>}> will be inserted, where I<HHHH> is the Unicode code point (in any number of hex digits) of the character that cannot be found in the character repertoire of the encoding. The HTML/XML character reference modes are about the same. In place of C<\x{I<HHHH>}>, HTML uses C<&#I<NNN>;> where I<NNN> is a decimal number, and XML uses C<&#xI<HHHH>;> where I<HHHH> is the hexadecimal number. In C<Encode> 2.10 or later, C<LEAVE_SRC> is also implied. =head3 The bitmask These modes are all actually set via a bitmask. Here is how the C<FB_I<XXX>> constants are laid out. You can import the C<FB_I<XXX>> constants via C<use Encode qw(:fallbacks)>, and you can import the generic bitmask constants via C<use Encode qw(:fallback_all)>. FB_DEFAULT FB_CROAK FB_QUIET FB_WARN FB_PERLQQ DIE_ON_ERR 0x0001 X WARN_ON_ERR 0x0002 X RETURN_ON_ERR 0x0004 X X LEAVE_SRC 0x0008 X PERLQQ 0x0100 X HTMLCREF 0x0200 XMLCREF 0x0400 =head3 LEAVE_SRC Encode::LEAVE_SRC If the C<Encode::LEAVE_SRC> bit is I<not> set but I<CHECK> is set, then the source string to encode() or decode() will be overwritten in place. If you're not interested in this, then bitwise-OR it with the bitmask. =head2 coderef for CHECK As of C<Encode> 2.12, C<CHECK> can also be a code reference which takes the ordinal value of the unmapped character as an argument and returns octets that represent the fallback character. For instance: $ascii = encode("ascii", $utf8, sub{ sprintf "<U+%04X>", shift }); Acts like C<FB_PERLQQ> but U+I<XXXX> is used instead of C<\x{I<XXXX>}>. Fallback for C<decode> must return decoded string (sequence of characters) and takes a list of ordinal values as its arguments. So for example if you wish to decode octets as UTF-8, and use ISO-8859-15 as a fallback for bytes that are not valid UTF-8, you could write $str = decode 'UTF-8', $octets, sub { my $tmp = join '', map chr, @_; return decode 'ISO-8859-15', $tmp; }; =head1 Defining Encodings To define a new encoding, use: use Encode qw(define_encoding); define_encoding($object, CANONICAL_NAME [, alias...]); I<CANONICAL_NAME> will be associated with I<$object>. The object should provide the interface described in L<Encode::Encoding>. If more than two arguments are provided, additional arguments are considered aliases for I<$object>. See L<Encode::Encoding> for details. =head1 The UTF8 flag Before the introduction of Unicode support in Perl, The C<eq> operator just compared the strings represented by two scalars. Beginning with Perl 5.8, C<eq> compares two strings with simultaneous consideration of I<the UTF8 flag>. To explain why we made it so, I quote from page 402 of I<Programming Perl, 3rd ed.> =over 2 =item Goal #1: Old byte-oriented programs should not spontaneously break on the old byte-oriented data they used to work on. =item Goal #2: Old byte-oriented programs should magically start working on the new character-oriented data when appropriate. =item Goal #3: Programs should run just as fast in the new character-oriented mode as in the old byte-oriented mode. =item Goal #4: Perl should remain one language, rather than forking into a byte-oriented Perl and a character-oriented Perl. =back When I<Programming Perl, 3rd ed.> was written, not even Perl 5.6.0 had been born yet, many features documented in the book remained unimplemented for a long time. Perl 5.8 corrected much of this, and the introduction of the UTF8 flag is one of them. You can think of there being two fundamentally different kinds of strings and string-operations in Perl: one a byte-oriented mode for when the internal UTF8 flag is off, and the other a character-oriented mode for when the internal UTF8 flag is on. This UTF8 flag is not visible in Perl scripts, exactly for the same reason you cannot (or rather, you I<don't have to>) see whether a scalar contains a string, an integer, or a floating-point number. But you can still peek and poke these if you will. See the next section. =head2 Messing with Perl's Internals The following API uses parts of Perl's internals in the current implementation. As such, they are efficient but may change in a future release. =head3 is_utf8 is_utf8(STRING [, CHECK]) [INTERNAL] Tests whether the UTF8 flag is turned on in the I<STRING>. If I<CHECK> is true, also checks whether I<STRING> contains well-formed UTF-8. Returns true if successful, false otherwise. Typically only necessary for debugging and testing. Don't use this flag as a marker to distinguish character and binary data, that should be decided for each variable when you write your code. B<CAVEAT>: If I<STRING> has UTF8 flag set, it does B<NOT> mean that I<STRING> is UTF-8 encoded and vice-versa. As of Perl 5.8.1, L<utf8> also has the C<utf8::is_utf8> function. =head3 _utf8_on _utf8_on(STRING) [INTERNAL] Turns the I<STRING>'s internal UTF8 flag B<on>. The I<STRING> is I<not> checked for containing only well-formed UTF-8. Do not use this unless you I<know with absolute certainty> that the STRING holds only well-formed UTF-8. Returns the previous state of the UTF8 flag (so please don't treat the return value as indicating success or failure), or C<undef> if I<STRING> is not a string. B<NOTE>: For security reasons, this function does not work on tainted values. =head3 _utf8_off _utf8_off(STRING) [INTERNAL] Turns the I<STRING>'s internal UTF8 flag B<off>. Do not use frivolously. Returns the previous state of the UTF8 flag, or C<undef> if I<STRING> is not a string. Do not treat the return value as indicative of success or failure, because that isn't what it means: it is only the previous setting. B<NOTE>: For security reasons, this function does not work on tainted values. =head1 UTF-8 vs. utf8 vs. UTF8 ....We now view strings not as sequences of bytes, but as sequences of numbers in the range 0 .. 2**32-1 (or in the case of 64-bit computers, 0 .. 2**64-1) -- Programming Perl, 3rd ed. That has historically been Perl's notion of UTF-8, as that is how UTF-8 was first conceived by Ken Thompson when he invented it. However, thanks to later revisions to the applicable standards, official UTF-8 is now rather stricter than that. For example, its range is much narrower (0 .. 0x10_FFFF to cover only 21 bits instead of 32 or 64 bits) and some sequences are not allowed, like those used in surrogate pairs, the 31 non-character code points 0xFDD0 .. 0xFDEF, the last two code points in I<any> plane (0xI<XX>_FFFE and 0xI<XX>_FFFF), all non-shortest encodings, etc. The former default in which Perl would always use a loose interpretation of UTF-8 has now been overruled: From: Larry Wall <larry@wall.org> Date: December 04, 2004 11:51:58 JST To: perl-unicode@perl.org Subject: Re: Make Encode.pm support the real UTF-8 Message-Id: <20041204025158.GA28754@wall.org> On Fri, Dec 03, 2004 at 10:12:12PM +0000, Tim Bunce wrote: : I've no problem with 'utf8' being perl's unrestricted uft8 encoding, : but "UTF-8" is the name of the standard and should give the : corresponding behaviour. For what it's worth, that's how I've always kept them straight in my head. Also for what it's worth, Perl 6 will mostly default to strict but make it easy to switch back to lax. Larry Got that? As of Perl 5.8.7, B<"UTF-8"> means UTF-8 in its current sense, which is conservative and strict and security-conscious, whereas B<"utf8"> means UTF-8 in its former sense, which was liberal and loose and lax. C<Encode> version 2.10 or later thus groks this subtle but critically important distinction between C<"UTF-8"> and C<"utf8">. encode("utf8", "\x{FFFF_FFFF}", 1); # okay encode("UTF-8", "\x{FFFF_FFFF}", 1); # croaks In the C<Encode> module, C<"UTF-8"> is actually a canonical name for C<"utf-8-strict">. That hyphen between the C<"UTF"> and the C<"8"> is critical; without it, C<Encode> goes "liberal" and (perhaps overly-)permissive: find_encoding("UTF-8")->name # is 'utf-8-strict' find_encoding("utf-8")->name # ditto. names are case insensitive find_encoding("utf_8")->name # ditto. "_" are treated as "-" find_encoding("UTF8")->name # is 'utf8'. Perl's internal UTF8 flag is called "UTF8", without a hyphen. It indicates whether a string is internally encoded as "utf8", also without a hyphen. =head1 SEE ALSO L<Encode::Encoding>, L<Encode::Supported>, L<Encode::PerlIO>, L<encoding>, L<perlebcdic>, L<perlfunc/open>, L<perlunicode>, L<perluniintro>, L<perlunifaq>, L<perlunitut> L<utf8>, the Perl Unicode Mailing List L<http://lists.perl.org/list/perl-unicode.html> =head1 MAINTAINER This project was originated by the late Nick Ing-Simmons and later maintained by Dan Kogai I<< <dankogai@cpan.org> >>. See AUTHORS for a full list of people involved. For any questions, send mail to I<< <perl-unicode@perl.org> >> so that we can all share. While Dan Kogai retains the copyright as a maintainer, credit should go to all those involved. See AUTHORS for a list of those who submitted code to the project. =head1 COPYRIGHT Copyright 2002-2014 Dan Kogai I<< <dankogai@cpan.org> >>. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut auto/IO/Tty/Tty.so 0000755 00000107350 15037233340 0007737 0 ustar 00 ELF >