From: Gurusamy Sarathy Date: Sun, 2 Sep 2001 01:06:30 +0000 (+0000) Subject: remove stray CRs in files; keep all files with UNIX line-ends X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=94bf5962d98bd99abeac287cb07a0bfb42e8b55f;p=p5sagit%2Fp5-mst-13.2.git remove stray CRs in files; keep all files with UNIX line-ends (Porting/makerel adds CRs to the files that need it in the distribution) p4raw-id: //depot/perl@11821 --- diff --git a/NetWare/t/NWScripts.pl b/NetWare/t/NWScripts.pl index bd1ab91..a2f22a4 100644 --- a/NetWare/t/NWScripts.pl +++ b/NetWare/t/NWScripts.pl @@ -11,7 +11,7 @@ $DirName = "t"; # These scripts have problems (either abend or hang) as of now (11 May 2001). # So, they are commented out in the corresponding auto scripts, io.pl and lib.pl -@ScriptsNotUsed = ("t/io/argv.t", "t/io/openpid.t", "t/lib/filehandle.t", "t/lib/warnings.t"); +@ScriptsNotUsed = ("t/io/argv.t", "t/io/openpid.t", "t/lib/filehandle.t", "t/lib/warnings.t"); opendir(DIR, $DirName); @Dirs = readdir(DIR); diff --git a/README.dos b/README.dos index 207325a..9c444a4 100644 --- a/README.dos +++ b/README.dos @@ -1,332 +1,332 @@ -If you read this file _as_is_, just ignore the funny characters you -see. It is written in the POD format (see perlpod manpage) which is -specially designed to be readable as is. - -=head1 NAME - -perldos - Perl under DOS, W31, W95. - -=head1 SYNOPSIS - -These are instructions for building Perl under DOS (or w??), using -DJGPP v2.03 or later. Under w95 long filenames are supported. - -=head1 DESCRIPTION - -Before you start, you should glance through the README file -found in the top-level directory where the Perl distribution -was extracted. Make sure you read and understand the terms under -which this software is being distributed. - -This port currently supports MakeMaker (the set of modules that -is used to build extensions to perl). Therefore, you should be -able to build and install most extensions found in the CPAN sites. - -Detailed instructions on how to build and install perl extension -modules, including XS-type modules, is included. See 'BUILDING AND -INSTALLING MODULES'. - -=head2 Prerequisites for Compiling Perl on DOS - -=over 4 - -=item DJGPP - -DJGPP is a port of GNU C/C++ compiler and development tools to 32-bit, -protected-mode environment on Intel 32-bit CPUs running MS-DOS and compatible -operating systems, by DJ Delorie and friends. - -For more details (FAQ), check out the home of DJGPP at: - - http://www.delorie.com/djgpp/ - -If you have questions about DJGPP, try posting to the DJGPP newsgroup: -comp.os.msdos.djgpp, or use the email gateway djgpp@delorie.com. - -You can find the full DJGPP distribution on any SimTel.Net mirror all over -the world. Like: - - ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2* - -You need the following files to build perl (or add new modules): - - v2/djdev203.zip - v2/bnu2951b.zip - v2gnu/gcc2952b.zip - v2gnu/bsh204b.zip - v2gnu/mak3791b.zip - v2gnu/fil316b.zip - v2gnu/sed302b.zip - v2gnu/txt20b.zip - v2gnu/dif272b.zip - v2gnu/grep24b.zip - v2gnu/shl112b.zip - v2gnu/gawk303b.zip - v2misc/csdpmi4b.zip - -or possibly any newer version. - -=item Pthreads - -Thread support is not tested in this version of the djgpp perl. - -=back - -=head2 Shortcomings of Perl under DOS - -Perl under DOS lacks some features of perl under UNIX because of -deficiencies in the UNIX-emulation, most notably: - -=over 4 - -=item * - -fork() and pipe() - -=item * - -some features of the UNIX filesystem regarding link count and file dates - -=item * - -in-place operation is a little bit broken with short filenames - -=item * - -sockets - -=back - -=head2 Building Perl on DOS - -=over 4 - -=item * - -Unpack the source package F with djtarx. If you want -to use long file names under w95 and also to get Perl to pass all its -tests, don't forget to use - - set LFN=y - set FNCASE=y - -before unpacking the archive. - -=item * - -Create a "symlink" or copy your bash.exe to sh.exe in your C<($DJDIR)/bin> -directory. - - ln -s bash.exe sh.exe - -[If you have the recommended version of bash for DJGPP, this is already -done for you.] - -And make the C environment variable point to this F: - - set SHELL=c:/djgpp/bin/sh.exe (use full path name!) - -You can do this in F too. Add this line BEFORE any section -definition: - - +SHELL=%DJDIR%/bin/sh.exe - -=item * - -If you have F and F in your path, then rename -F to F, and F to F. -Copy or link F to F if you don't have F. -Copy or link F to F if you don't have F. - -[If you have the recommended versions of djdev, shell utilities and -gawk, all these are already done for you, and you will not need to do -anything.] - -=item * - -Chdir to the djgpp subdirectory of perl toplevel and type the following -commands: - - set FNCASE=y - configure.bat - -This will do some preprocessing then run the Configure script for you. -The Configure script is interactive, but in most cases you just need to -press ENTER. The "set" command ensures that DJGPP preserves the letter -case of file names when reading directories. If you already issued this -set command when unpacking the archive, and you are in the same DOS -session as when you unpacked the archive, you don't have to issue the -set command again. This command is necessary *before* you start to -(re)configure or (re)build perl in order to ensure both that perl builds -correctly and that building XS-type modules can succeed. See the DJGPP -info entry for "_preserve_fncase" for more information: - - info libc alphabetical _preserve_fncase - -If the script says that your package is incomplete, and asks whether -to continue, just answer with Y (this can only happen if you don't use -long filenames or forget to issue "set FNCASE=y" first). - -When Configure asks about the extensions, I suggest IO and Fcntl, -and if you want database handling then SDBM_File or GDBM_File -(you need to install gdbm for this one). If you want to use the -POSIX extension (this is the default), make sure that the stack -size of your F is at least 512kbyte (you can check this -with: C). - -You can use the Configure script in non-interactive mode too. -When I built my F, I used something like this: - - configure.bat -des - -You can find more info about Configure's command line switches in -the F file. - -When the script ends, and you want to change some values in the -generated F file, then run - - sh Configure -S - -after you made your modifications. - -IMPORTANT: if you use this C<-S> switch, be sure to delete the CONFIG -environment variable before running the script: - - set CONFIG= - -=item * - -Now you can compile Perl. Type: - - make - -=back - -=head2 Testing Perl on DOS - -Type: - - make test - -If you're lucky you should see "All tests successful". But there can be -a few failed subtests (less than 5 hopefully) depending on some external -conditions (e.g. some subtests fail under linux/dosemu or plain dos -with short filenames only). - -=head2 Installation of Perl on DOS - -Type: - - make install - -This will copy the newly compiled perl and libraries into your DJGPP -directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>, -and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation -goes under C<($DJDIR)/lib/perl5/pod>. - -=head1 BUILDING AND INSTALLING MODULES ON DOS - -=head2 Building Prerequisites for Perl on DOS - -For building and installing non-XS modules, all you need is a working -perl under DJGPP. Non-XS modules do not require re-linking the perl -binary, and so are simpler to build and install. - -XS-type modules do require re-linking the perl binary, because part of -an XS module is written in "C", and has to be linked together with the -perl binary to be executed. This is required because perl under DJGPP -is built with the "static link" option, due to the lack of "dynamic -linking" in the DJGPP environment. - -Because XS modules require re-linking of the perl binary, you need both -the perl binary distribution and the perl source distribution to build -an XS extension module. In addition, you will have to have built your -perl binary from the source distribution so that all of the components -of the perl binary are available for the required link step. - -=head2 Unpacking CPAN Modules on DOS - -First, download the module package from CPAN (e.g., the "Comma Separated -Value" text package, Text-CSV-0.01.tar.gz). Then expand the contents of -the package into some location on your disk. Most CPAN modules are -built with an internal directory structure, so it is usually safe to -expand it in the root of your DJGPP installation. Some people prefer to -locate source trees under /usr/src (i.e., C<($DJDIR)/usr/src>), but you may -put it wherever seems most logical to you, *EXCEPT* under the same -directory as your perl source code. There are special rules that apply -to modules which live in the perl source tree that do not apply to most -of the modules in CPAN. - -Unlike other DJGPP packages, which are normal "zip" files, most CPAN -module packages are "gzipped tarballs". Recent versions of WinZip will -safely unpack and expand them, *UNLESS* they have zero-length files. It -is a known WinZip bug (as of v7.0) that it will not extract zero-length -files. - -From the command line, you can use the djtar utility provided with DJGPP -to unpack and expand these files. For example: - - C:\djgpp>djtarx -v Text-CSV-0.01.tar.gz - -This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling -it with the source for this module. - -=head2 Building Non-XS Modules on DOS - -To build a non-XS module, you can use the standard module-building -instructions distributed with perl modules. - - perl Makefile.PL - make - make test - make install - -This is sufficient because non-XS modules install only ".pm" files and -(sometimes) pod and/or man documentation. No re-linking of the perl -binary is needed to build, install or use non-XS modules. - -=head2 Building XS Modules on DOS - -To build an XS module, you must use the standard module-building -instructions distributed with perl modules *PLUS* three extra -instructions specific to the DJGPP "static link" build environment. - - set FNCASE=y - perl Makefile.PL - make - make perl - make test - make -f Makefile.aperl inst_perl MAP_TARGET=perl.exe - make install - -The first extra instruction sets DJGPP's FNCASE environment variable so -that the new perl binary which you must build for an XS-type module will -build correctly. The second extra instruction re-builds the perl binary -in your module directory before you run "make test", so that you are -testing with the new module code you built with "make". The third extra -instruction installs the perl binary from your module directory into the -standard DJGPP binary directory, C<($DJDIR)/bin>, replacing your -previous perl binary. - -Note that the MAP_TARGET value *must* have the ".exe" extension or you -will not create a "perl.exe" to replace the one in C<($DJDIR)/bin>. - -When you are done, the XS-module install process will have added information -to yout "perllocal" information telling that the perl binary has been replaced, -and what module was installed. you can view this information at any time -by using the command: - - perl -S perldoc perllocal - -=head1 AUTHOR - -Laszlo Molnar, F [Installing/building perl] - -Peter J. Farley III F [Building/installing modules] - -=head1 SEE ALSO - -perl(1). - -=cut - +If you read this file _as_is_, just ignore the funny characters you +see. It is written in the POD format (see perlpod manpage) which is +specially designed to be readable as is. + +=head1 NAME + +perldos - Perl under DOS, W31, W95. + +=head1 SYNOPSIS + +These are instructions for building Perl under DOS (or w??), using +DJGPP v2.03 or later. Under w95 long filenames are supported. + +=head1 DESCRIPTION + +Before you start, you should glance through the README file +found in the top-level directory where the Perl distribution +was extracted. Make sure you read and understand the terms under +which this software is being distributed. + +This port currently supports MakeMaker (the set of modules that +is used to build extensions to perl). Therefore, you should be +able to build and install most extensions found in the CPAN sites. + +Detailed instructions on how to build and install perl extension +modules, including XS-type modules, is included. See 'BUILDING AND +INSTALLING MODULES'. + +=head2 Prerequisites for Compiling Perl on DOS + +=over 4 + +=item DJGPP + +DJGPP is a port of GNU C/C++ compiler and development tools to 32-bit, +protected-mode environment on Intel 32-bit CPUs running MS-DOS and compatible +operating systems, by DJ Delorie and friends. + +For more details (FAQ), check out the home of DJGPP at: + + http://www.delorie.com/djgpp/ + +If you have questions about DJGPP, try posting to the DJGPP newsgroup: +comp.os.msdos.djgpp, or use the email gateway djgpp@delorie.com. + +You can find the full DJGPP distribution on any SimTel.Net mirror all over +the world. Like: + + ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2* + +You need the following files to build perl (or add new modules): + + v2/djdev203.zip + v2/bnu2951b.zip + v2gnu/gcc2952b.zip + v2gnu/bsh204b.zip + v2gnu/mak3791b.zip + v2gnu/fil316b.zip + v2gnu/sed302b.zip + v2gnu/txt20b.zip + v2gnu/dif272b.zip + v2gnu/grep24b.zip + v2gnu/shl112b.zip + v2gnu/gawk303b.zip + v2misc/csdpmi4b.zip + +or possibly any newer version. + +=item Pthreads + +Thread support is not tested in this version of the djgpp perl. + +=back + +=head2 Shortcomings of Perl under DOS + +Perl under DOS lacks some features of perl under UNIX because of +deficiencies in the UNIX-emulation, most notably: + +=over 4 + +=item * + +fork() and pipe() + +=item * + +some features of the UNIX filesystem regarding link count and file dates + +=item * + +in-place operation is a little bit broken with short filenames + +=item * + +sockets + +=back + +=head2 Building Perl on DOS + +=over 4 + +=item * + +Unpack the source package F with djtarx. If you want +to use long file names under w95 and also to get Perl to pass all its +tests, don't forget to use + + set LFN=y + set FNCASE=y + +before unpacking the archive. + +=item * + +Create a "symlink" or copy your bash.exe to sh.exe in your C<($DJDIR)/bin> +directory. + + ln -s bash.exe sh.exe + +[If you have the recommended version of bash for DJGPP, this is already +done for you.] + +And make the C environment variable point to this F: + + set SHELL=c:/djgpp/bin/sh.exe (use full path name!) + +You can do this in F too. Add this line BEFORE any section +definition: + + +SHELL=%DJDIR%/bin/sh.exe + +=item * + +If you have F and F in your path, then rename +F to F, and F to F. +Copy or link F to F if you don't have F. +Copy or link F to F if you don't have F. + +[If you have the recommended versions of djdev, shell utilities and +gawk, all these are already done for you, and you will not need to do +anything.] + +=item * + +Chdir to the djgpp subdirectory of perl toplevel and type the following +commands: + + set FNCASE=y + configure.bat + +This will do some preprocessing then run the Configure script for you. +The Configure script is interactive, but in most cases you just need to +press ENTER. The "set" command ensures that DJGPP preserves the letter +case of file names when reading directories. If you already issued this +set command when unpacking the archive, and you are in the same DOS +session as when you unpacked the archive, you don't have to issue the +set command again. This command is necessary *before* you start to +(re)configure or (re)build perl in order to ensure both that perl builds +correctly and that building XS-type modules can succeed. See the DJGPP +info entry for "_preserve_fncase" for more information: + + info libc alphabetical _preserve_fncase + +If the script says that your package is incomplete, and asks whether +to continue, just answer with Y (this can only happen if you don't use +long filenames or forget to issue "set FNCASE=y" first). + +When Configure asks about the extensions, I suggest IO and Fcntl, +and if you want database handling then SDBM_File or GDBM_File +(you need to install gdbm for this one). If you want to use the +POSIX extension (this is the default), make sure that the stack +size of your F is at least 512kbyte (you can check this +with: C). + +You can use the Configure script in non-interactive mode too. +When I built my F, I used something like this: + + configure.bat -des + +You can find more info about Configure's command line switches in +the F file. + +When the script ends, and you want to change some values in the +generated F file, then run + + sh Configure -S + +after you made your modifications. + +IMPORTANT: if you use this C<-S> switch, be sure to delete the CONFIG +environment variable before running the script: + + set CONFIG= + +=item * + +Now you can compile Perl. Type: + + make + +=back + +=head2 Testing Perl on DOS + +Type: + + make test + +If you're lucky you should see "All tests successful". But there can be +a few failed subtests (less than 5 hopefully) depending on some external +conditions (e.g. some subtests fail under linux/dosemu or plain dos +with short filenames only). + +=head2 Installation of Perl on DOS + +Type: + + make install + +This will copy the newly compiled perl and libraries into your DJGPP +directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>, +and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation +goes under C<($DJDIR)/lib/perl5/pod>. + +=head1 BUILDING AND INSTALLING MODULES ON DOS + +=head2 Building Prerequisites for Perl on DOS + +For building and installing non-XS modules, all you need is a working +perl under DJGPP. Non-XS modules do not require re-linking the perl +binary, and so are simpler to build and install. + +XS-type modules do require re-linking the perl binary, because part of +an XS module is written in "C", and has to be linked together with the +perl binary to be executed. This is required because perl under DJGPP +is built with the "static link" option, due to the lack of "dynamic +linking" in the DJGPP environment. + +Because XS modules require re-linking of the perl binary, you need both +the perl binary distribution and the perl source distribution to build +an XS extension module. In addition, you will have to have built your +perl binary from the source distribution so that all of the components +of the perl binary are available for the required link step. + +=head2 Unpacking CPAN Modules on DOS + +First, download the module package from CPAN (e.g., the "Comma Separated +Value" text package, Text-CSV-0.01.tar.gz). Then expand the contents of +the package into some location on your disk. Most CPAN modules are +built with an internal directory structure, so it is usually safe to +expand it in the root of your DJGPP installation. Some people prefer to +locate source trees under /usr/src (i.e., C<($DJDIR)/usr/src>), but you may +put it wherever seems most logical to you, *EXCEPT* under the same +directory as your perl source code. There are special rules that apply +to modules which live in the perl source tree that do not apply to most +of the modules in CPAN. + +Unlike other DJGPP packages, which are normal "zip" files, most CPAN +module packages are "gzipped tarballs". Recent versions of WinZip will +safely unpack and expand them, *UNLESS* they have zero-length files. It +is a known WinZip bug (as of v7.0) that it will not extract zero-length +files. + +From the command line, you can use the djtar utility provided with DJGPP +to unpack and expand these files. For example: + + C:\djgpp>djtarx -v Text-CSV-0.01.tar.gz + +This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling +it with the source for this module. + +=head2 Building Non-XS Modules on DOS + +To build a non-XS module, you can use the standard module-building +instructions distributed with perl modules. + + perl Makefile.PL + make + make test + make install + +This is sufficient because non-XS modules install only ".pm" files and +(sometimes) pod and/or man documentation. No re-linking of the perl +binary is needed to build, install or use non-XS modules. + +=head2 Building XS Modules on DOS + +To build an XS module, you must use the standard module-building +instructions distributed with perl modules *PLUS* three extra +instructions specific to the DJGPP "static link" build environment. + + set FNCASE=y + perl Makefile.PL + make + make perl + make test + make -f Makefile.aperl inst_perl MAP_TARGET=perl.exe + make install + +The first extra instruction sets DJGPP's FNCASE environment variable so +that the new perl binary which you must build for an XS-type module will +build correctly. The second extra instruction re-builds the perl binary +in your module directory before you run "make test", so that you are +testing with the new module code you built with "make". The third extra +instruction installs the perl binary from your module directory into the +standard DJGPP binary directory, C<($DJDIR)/bin>, replacing your +previous perl binary. + +Note that the MAP_TARGET value *must* have the ".exe" extension or you +will not create a "perl.exe" to replace the one in C<($DJDIR)/bin>. + +When you are done, the XS-module install process will have added information +to yout "perllocal" information telling that the perl binary has been replaced, +and what module was installed. you can view this information at any time +by using the command: + + perl -S perldoc perllocal + +=head1 AUTHOR + +Laszlo Molnar, F [Installing/building perl] + +Peter J. Farley III F [Building/installing modules] + +=head1 SEE ALSO + +perl(1). + +=cut + diff --git a/ext/Encode/Encode/cns11643-1.enc b/ext/Encode/Encode/cns11643-1.enc index 2254216..7e6589c 100644 --- a/ext/Encode/Encode/cns11643-1.enc +++ b/ext/Encode/Encode/cns11643-1.enc @@ -1,1108 +1,1108 @@ -# Encoding file: cns11643-1, double-byte -D -2134 0 65 -21 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00003000FF0C30013002FF0E30FBFF1BFF1AFF1FFF01FE3020262025FE50FE51 -FE5200B7FE54FE55FE56FE57FE312014FE3220130000000000000000FF08FF09 -FE35FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300B -FE3DFE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A -FE5BFE5CFE5DFE5E20182019201C201D301D301E20322035FF03FF06FF0A203B -00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -22 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000032A32105203E0000FF3F0000FE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61 -FF0BFF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62 -FE63FE64FE66FE65223C2229222A22A52220221F22BF33D233D1222B222E2235 -22342640264226412609219121932192219021962197219921982016FF5CFF0F -FF3C2215FE68FF04FFE53012FFE0FFE1FF05FF2021032109FE69FE6AFE6B33D5 -339C339D339E33CE33A1338E338F33C400B05159515B515E515D516151630000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -23 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000055E774E97CCE25812582258325842585258625872588258F258E258D258C -258B258A2589253C2534252C2524251C2594250025022595250C251025142518 -256D256E2570256F2550255E256A256125E225E325E525E42571257225730000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -24 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000FF10FF11FF12FF13FF14FF15FF16FF17FF18FF1921602161216221632164 -2165216621672168216930213022302330243025302630273028302900005344 -0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F -FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45 -FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55 -FF56FF57FF58FF59FF5A039103920393039403950396039703980399039A0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -25 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000039B039C039D039E039F03A003A103A303A403A503A603A703A803A903B1 -03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 -03C303C403C503C603C703C803C931053106310731083109310A310B310C310D -310E310F3110311131123113311431153116311731183119311A311B311C311D -311E311F312031213122312331243125312631273128312902D902C902CA02C7 -02CB000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -26 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000246024612462246324642465246624672468246924742475247624772478 -2479247A247B247C247D21702171217221732174217521762177217821790000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -42 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00002400240124022403240424052406240724082409240A240B240C240D240E -240F2410241124122413241424152416241724182419241A241B241C241D241E -241F242100000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -44 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00004E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201 -529B53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E -4E8E4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B53 -5BF85C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D -4E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC14EC0 -4EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F60000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -45 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000052065207520852FB52FE52FF53165339534853475345535E538453CB53CA -53CD58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F15 -5FC362086236624B624E652F6587659765A465B965E566F0670867286B206B62 -6B796BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E19 -4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4 -4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553060000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -46 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005317531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE -53E953E853FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA -5916592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01 -5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63 -6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529 -7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A740000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -47 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007ACB4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F15 -4F0D4F104F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B5149514751465148 -51685171518D51B0521752115212520E521652A3530853215320537053715409 -540F540C540A54105401540B54045411540D54085403540E5406541256E056DE -56DD573357305728572D572C572F57295919591A59375938598459785983597D -5979598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E760000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -48 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005E745F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E8 -65EC65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C59 -6C5F6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F36 -7F8A7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C -821B821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F47 -4F574F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F460000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -49 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00004F634F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B6 -51B7522552245229522A522852AB52A952AA52AC532353735375541D542D541E -543E5426544E542754465443543354485442541B5429544A5439543B5438542E -543554365420543C54405431542B541F542C56EA56F056E456EB574A57515740 -574D5747574E573E5750574F573B58EF593E599D599259A8599E59A359995996 -598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C410000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005C3F5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F64 -5F625F775F795FD85FCC5FD75FCD5FF15FEB5FF85FEA62126211628462976296 -628062766289626D628A627C627E627962736292626F6298626E629562936291 -62866539653B653865F166F4675F674E674F67506751675C6756675E67496746 -6760675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C90 -6C706C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C980000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006C827076707C707D707872627261726072C472C27396752C752B75377538 -768276EF77E379C179C079BF7A767CFB7F5580968093809D8098809B809A80B2 -826F8292828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA -8F9B8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632 -962E9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F73 -4F7F4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F910000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00004F7A515451525155516951775176517851BD51FD523B52385237523A5230 -522E5236524152BE52BB5352535453535351536653775378537953D653D453D7 -547354755496547854955480547B5477548454925486547C549054715476548C -549A54625468548B547D548E56FA57835777576A5769576157665764577C591C -5949594759485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D3 -59CA59AF59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005C485C455C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B -5E115E785E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD -5FE05FFD5FF55FFF600F6014602F60356016602A6015602160276029602B601B -62166215623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D3 -62D462CB62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D7 -62C662AC62CE653E65A765BC65FA66146613660C66066602660E6600660F0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006615660A6607670D670B676D678B67956771679C677367776787679D6797 -676F6770677F6789677E67906775679A6793677C676A67726B236B666B676B7F -6C136C1B6CE36CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD3 -6CB86CC46CB96CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC -6CD66CE07095708E7092708A7099722C722D723872487267726972C072CE72D9 -72D772D073A973A8739F73AB73A5753D759D7599759A768476C276F276F40000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000077E577FD793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B8005 -80BA80A580A280B180A180AB80A980B480AA80AF81E581FE820D82B3829D8299 -82AD82BD829F82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D -88688ECB8FCE8FD48FD190B590B890B190B691C791D195779580961C9640963F -963B9644964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD1 -4FCF4FDD4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -50 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00004FB751575192519151A0524E5243524A524D524C524B524752C752C952C3 -52C1530D5357537B539A53DB54AC54C054A854CE54C954B854A654B354C754C2 -54BD54AA54C154C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A0 -57A357A257CE57AE579359555951594F594E595059DC59D859FF59E359E85A03 -59E559EA59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D -5C4B5CD95CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F880000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -51 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005F855F8A5F8B5F875F8C5F896012601D60206025600E6028604D60706068 -606260466043606C606B606A6064624162DC6316630962FC62ED630162EE62FD -630762F162F762EF62EC62FE62F463116302653F654565AB65BD65E26625662D -66206627662F661F66286631662466F767FF67D367F167D467D067EC67B667AF -67F567E967EF67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD -67D26B6A6B836B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -52 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006D316D1E6D176D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D35 -6D0E6D2B70AB70BA70B370AC70AF70AD70B870AE70A472307272726F727472E9 -72E072E173B773CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB -75A475A575A275A3767876867687768876C876C676C376C5770176F976F87709 -770B76FE76FC770777DC78027814780C780D794679497948794779B979BA79D1 -79D279CB7A7F7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F380000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -53 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007F8E7FBF8010800D8011803680D680E580DA80C380C480CC80E180DB80CE -80DE80E480DD81F4822282E78303830582E382DB82E6830482E58302830982D2 -82D782F1830182DC82D482D182DE82D382DF82EF830686508679867B867A884D -886B898189D48A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE2 -8FEA8FE58FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B -964C964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB30000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -54 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000500C500D50234FEF502650254FF8502950165006503C501F501A50125011 -4FFA5000501450284FF15021500B501950184FF34FEE502D502A4FFE502B5009 -517C51A451A551A251CD51CC51C651CB5256525C5254525B525D532A537F539F -539D53DF54E855105501553754FC54E554F2550654FA551454E954ED54E15509 -54EE54EA54E65527550754FD550F5703570457C257D457CB57C35809590F5957 -5958595A5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A090000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -55 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005B6B5C585BB05BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED -5CFD5CFB5CEA5CE85CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F92 -5F915F9060596063606560506055606D6069606F6084609F609A608D6094608C -60856096624762F3630862FF634E633E632F635563426346634F6349633A6350 -633D632A632B6328634D634C65486549659965C165C566426649664F66436652 -664C6645664166F8671467156717682168386848684668536839684268540000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -56 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000682968B36817684C6851683D67F468506840683C6843682A684568136818 -68416B8A6B896BB76C236C276C286C266C246CF06D6A6D956D886D876D666D78 -6D776D596D936D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA -70D870E470D970C870CF7239727972FC72F972FD72F872F7738673ED740973EE -73E073EA73DE7554755D755C755A755975BE75C575C775B275B375BD75BC75B9 -75C275B8768B76B076CA76CD76CE7729771F7720772877E97830782778380000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -57 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000781D783478377825782D7820781F7832795579507960795F7956795E795D -7957795A79E479E379E779DF79E679E979D87A847A887AD97B067B117C897D21 -7D177D0B7D0A7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F94 -7FC57FC1800680048018801580198017803D803F80F1810280F0810580ED80F4 -810680F880F3810880FD810A80FC80EF81ED81EC82008210822A822B8228822C -82BB832B83528354834A83388350834983358334834F83328339833683170000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -58 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000083408331832883438654868A86AA869386A486A9868C86A3869C88708877 -88818882887D88798A188A108A0E8A0C8A158A0A8A178A138A168A0F8A118C48 -8C7A8C798CA18CA28D778EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF4 -90038FFD90058FF8909590E190DD90E29152914D914C91D891DD91D791DC91D9 -9583966296639661965B965D96649658965E96BB98E299AC9AA89AD89B259B32 -9B3C4E7E507A507D505C50475043504C505A504950655076504E505550750000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -59 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000050745077504F500F506F506D515C519551F0526A526F52D252D952D852D5 -5310530F5319533F5340533E53C366FC5546556A55665544555E55615543554A -55315556554F5555552F55645538552E555C552C55635533554155575708570B -570957DF5805580A580657E057E457FA5802583557F757F9592059625A365A41 -5A495A665A6A5A405A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC6 -5C095C085C075C605C5C5C5D5D075D065D0E5D1B5D165D225D115D295D140000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005D195D245D275D175DE25E385E365E335E375EB75EB85EB65EB55EBE5F35 -5F375F575F6C5F695F6B5F975F995F9E5F985FA15FA05F9C607F60A3608960A0 -60A860CB60B460E660BD60C560BB60B560DC60BC60D860D560C660DF60B860DA -60C7621A621B624863A063A76372639663A263A563776367639863AA637163A9 -63896383639B636B63A863846388639963A163AC6392638F6380637B63696368 -637A655D6556655165596557555F654F655865556554659C659B65AC65CF0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000065CB65CC65CE665D665A666466686666665E66F952D7671B688168AF68A2 -689368B5687F687668B168A7689768B0688368C468AD688668856894689D68A8 -689F68A168826B326BBA6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE4 -6DFB6DFA6E056DC76DCB6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A -6DB56DDA6DEB6DD86DEA6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109 -710A70FD70EF723D727D7281731C731B73167313731973877405740A74030000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000740673FE740D74E074F674F7751C75227565756675627570758F75D475D5 -75B575CA75CD768E76D476D276DB7737773E773C77367738773A786B7843784E -79657968796D79FB7A927A957B207B287B1B7B2C7B267B197B1E7B2E7C927C97 -7C957D467D437D717D2E7D397D3C7D407D307D337D447D2F7D427D327D317F3D -7F9E7F9A7FCC7FCE7FD2801C804A8046812F81168123812B8129813081248202 -8235823782368239838E839E8398837883A2839683BD83AB8392838A83930000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000838983A08377837B837C838683A786555F6A86C786C086B686C486B586C6 -86CB86B186AF86C98853889E888888AB88928896888D888B8993898F8A2A8A1D -8A238A258A318A2D8A1F8A1B8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D67 -8D668DBE8DBA8EDB8EDF9019900D901A90179023901F901D90109015901E9020 -900F90229016901B901490E890ED90FD915791CE91F591E691E391E791ED91E9 -9589966A9675967396789670967496769677966C96C096EA96E97AE07ADF0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000980298039B5A9CE59E759E7F9EA59EBB50A2508D50855099509150805096 -5098509A670051F1527252745275526952DE52DD52DB535A53A5557B558055A7 -557C558A559D55985582559C55AA55945587558B558355B355AE559F553E55B2 -559A55BB55AC55B1557E558955AB5599570D582F582A58345824583058315821 -581D582058F958FA59605A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD3 -5BD05C0A5C0B5C315D4C5D505D345D475DFD5E455E3D5E405E435E7E5ECA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005EC15EC25EC45F3C5F6D5FA95FAA5FA860D160E160B260B660E0611C6123 -60FA611560F060FB60F4616860F1610E60F6610961006112621F624963A3638C -63CF63C063E963C963C663CD63D263E363D063E163D663ED63EE637663F463EA -63DB645263DA63F9655E6566656265636591659065AF666E667066746676666F -6691667A667E667766FE66FF671F671D68FA68D568E068D868D7690568DF68F5 -68EE68E768F968D268F268E368CB68CD690D6912690E68C968DA696E68FB0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -60 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006B3E6B3A6B3D6B986B966BBC6BEF6C2E6C2F6C2C6E2F6E386E546E216E32 -6E676E4A6E206E256E236E1B6E5B6E586E246E566E6E6E2D6E266E6F6E346E4D -6E3A6E2C6E436E1D6E3E6ECB6E896E196E4E6E636E446E726E696E5F7119711A -7126713071217136716E711C724C728472807336732573347329743A742A7433 -74227425743574367434742F741B7426742875257526756B756A75E275DB75E3 -75D975D875DE75E0767B767C7696769376B476DC774F77ED785D786C786F0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -61 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007A0D7A087A0B7A057A007A987A977A967AE57AE37B497B567B467B507B52 -7B547B4D7B4B7B4F7B517C9F7CA57D5E7D507D687D557D2B7D6E7D727D617D66 -7D627D707D7355847FD47FD5800B8052808581558154814B8151814E81398146 -813E814C815381748212821C83E9840383F8840D83E083C5840B83C183EF83F1 -83F48457840A83F0840C83CC83FD83F283CA8438840E840483DC840783D483DF -865B86DF86D986ED86D486DB86E486D086DE885788C188C288B1898389960000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -62 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008A3B8A608A558A5E8A3C8A418A548A5B8A508A468A348A3A8A368A568C61 -8C828CAF8CBC8CB38CBD8CC18CBB8CC08CB48CB78CB68CBF8CB88D8A8D858D81 -8DCE8DDD8DCB8DDA8DD18DCC8DDB8DC68EFB8EF88EFC8F9C902E903590319038 -90329036910290F5910990FE9163916591CF9214921592239209921E920D9210 -920792119594958F958B959195939592958E968A968E968B967D96859686968D -9672968496C196C596C496C696C796EF96F297CC98059806980898E798EA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -63 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000098EF98E998F298ED99AE99AD9EC39ECD9ED14E8250AD50B550B250B350C5 -50BE50AC50B750BB50AF50C7527F5277527D52DF52E652E452E252E3532F55DF -55E855D355E655CE55DC55C755D155E355E455EF55DA55E155C555C655E555C9 -57125713585E585158585857585A5854586B584C586D584A58625852584B5967 -5AC15AC95ACC5ABE5ABD5ABC5AB35AC25AB25D695D6F5E4C5E795EC95EC85F12 -5F595FAC5FAE611A610F6148611F60F3611B60F961016108614E614C61440000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -64 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000614D613E61346127610D61066137622162226413643E641E642A642D643D -642C640F641C6414640D6436641664176406656C659F65B06697668966876688 -669666846698668D67036994696D695A697769606954697569306982694A6968 -696B695E695369796986695D6963695B6B476B726BC06BBF6BD36BFD6EA26EAF -6ED36EB66EC26E906E9D6EC76EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC4 -6ED46EAA6EA76EB4714E71597169716471497167715C716C7166714C71650000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -65 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000715E714671687156723A725273377345733F733E746F745A7455745F745E -7441743F7459745B745C75767578760075F0760175F275F175FA75FF75F475F3 -76DE76DF775B776B7766775E77637779776A776C775C77657768776277EE788E -78B078977898788C7889787C78917893787F797A797F7981842C79BD7A1C7A1A -7A207A147A1F7A1E7A9F7AA07B777BC07B607B6E7B677CB17CB37CB57D937D79 -7D917D817D8F7D5B7F6E7F697F6A7F727FA97FA87FA480568058808680840000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -66 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008171817081788165816E8173816B8179817A81668205824784828477843D -843184758466846B8449846C845B843C8435846184638469846D8446865E865C -865F86F9871387088707870086FE86FB870287038706870A885988DF88D488D9 -88DC88D888DD88E188CA88D588D2899C89E38A6B8A728A738A668A698A708A87 -8A7C8A638AA08A718A858A6D8A628A6E8A6C8A798A7B8A3E8A688C628C8A8C89 -8CCA8CC78CC88CC48CB28CC38CC28CC58DE18DDF8DE88DEF8DF38DFA8DEA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -67 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008DE48DE68EB28F038F098EFE8F0A8F9F8FB2904B904A905390429054903C -905590509047904F904E904D9051903E904191129117916C916A916991C99237 -92579238923D9240923E925B924B9264925192349249924D92459239923F925A -959896989694969596CD96CB96C996CA96F796FB96F996F69756977497769810 -98119813980A9812980C98FC98F498FD98FE99B399B199B49AE19CE99E829F0E -9F139F2050E750EE50E550D650ED50DA50D550CF50D150F150CE50E951620000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -68 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000051F352835282533153AD55FE5600561B561755FD561456065609560D560E -55F75616561F5608561055F6571857165875587E58835893588A58795885587D -58FD592559225924596A59695AE15AE65AE95AD75AD65AD85AE35B755BDE5BE7 -5BE15BE55BE65BE85BE25BE45BDF5C0D5C625D845D875E5B5E635E555E575E54 -5ED35ED65F0A5F465F705FB96147613F614B617761626163615F615A61586175 -622A64876458645464A46478645F647A645164676434646D647B657265A10000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -69 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000065D765D666A266A8669D699C69A8699569C169AE69D369CB699B69B769BB -69AB69B469D069CD69AD69CC69A669C369A36B496B4C6C336F336F146EFE6F13 -6EF46F296F3E6F206F2C6F0F6F026F226EFF6EEF6F066F316F386F326F236F15 -6F2B6F2F6F886F2A6EEC6F016EF26ECC6EF771947199717D718A71847192723E -729272967344735074647463746A7470746D750475917627760D760B76097613 -76E176E37784777D777F776178C1789F78A778B378A978A3798E798F798D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007A2E7A317AAA7AA97AED7AEF7BA17B957B8B7B757B977B9D7B947B8F7BB8 -7B877B847CB97CBD7CBE7DBB7DB07D9C7DBD7DBE7DA07DCA7DB47DB27DB17DBA -7DA27DBF7DB57DB87DAD7DD27DC77DAC7F707FE07FE17FDF805E805A80878150 -8180818F8188818A817F818281E781FA82078214821E824B84C984BF84C684C4 -8499849E84B2849C84CB84B884C084D3849084BC84D184CA873F871C873B8722 -87258734871887558737872988F3890288F488F988F888FD88E8891A88EF0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008AA68A8C8A9E8AA38A8D8AA18A938AA48AAA8AA58AA88A988A918A9A8AA7 -8C6A8C8D8C8C8CD38CD18CD28D6B8D998D958DFC8F148F128F158F138FA39060 -9058905C90639059905E9062905D905B91199118911E91759178917791749278 -92AC9280928592989296927B9293929C92A8927C929195A195A895A995A395A5 -95A49699969C969B96CC96D29700977C978597F69817981898AF98B199039905 -990C990999C19AAF9AB09AE69B419B429CF49CF69CF39EBC9F3B9F4A51040000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000510050FB50F550F9510251085109510551DC528752885289528D528A52F0 -53B2562E563B56395632563F563456295653564E565756745636562F56305880 -589F589E58B3589C58AE58A958A6596D5B095AFB5B0B5AF55B0C5B085BEE5BEC -5BE95BEB5C645C655D9D5D945E625E5F5E615EE25EDA5EDF5EDD5EE35EE05F48 -5F715FB75FB561766167616E615D61556182617C6170616B617E61A7619061AB -618E61AC619A61A4619461AE622E6469646F6479649E64B26488649064B00000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000064A56493649564A9649264AE64AD64AB649A64AC649964A264B365756577 -657866AE66AB66B466B16A236A1F69E86A016A1E6A1969FD6A216A136A0A69F3 -6A026A0569ED6A116B506B4E6BA46BC56BC66F3F6F7C6F846F516F666F546F86 -6F6D6F5B6F786F6E6F8E6F7A6F706F646F976F586ED56F6F6F606F5F719F71AC -71B171A87256729B734E73577469748B7483747E7480757F76207629761F7624 -762676217622769A76BA76E4778E7787778C7791778B78CB78C578BA78CA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000078BE78D578BC78D07A3F7A3C7A407A3D7A377A3B7AAF7AAE7BAD7BB17BC4 -7BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB7DD87DEC7DDD7DE87DE3 -7DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF7FE98026819B819C819D81A0 -819A81988517853D851A84EE852C852D8513851185238521851484EC852584FF -8506878287748776876087668778876887598757874C8753885B885D89108907 -891289138915890A8ABC8AD28AC78AC48A958ACB8AF88AB28AC98AC28ABF0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE08CDE8CE68CE48CEC8CED -8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D8E228E0F8E298E1F8E21 -8E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E8F259069906E9068906D9077 -9130912D9127913191879189918B918392C592BB92B792EA92E492C192B392BC -92D292C792F092B295AD95B197049706970797099760978D978B978F9821982B -981C98B3990A99139912991899DD99D099DF99DB99D199D599D299D99AB70000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -70 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009AEE9AEF9B279B459B449B779B6F9D069D099D039EA99EBE9ECE58A89F52 -51125118511451105115518051AA51DD5291529352F35659566B567956695664 -5678566A566856655671566F566C5662567658C158BE58C758C5596E5B1D5B34 -5B785BF05C0E5F4A61B2619161A9618A61CD61B661BE61CA61C8623064C564C1 -64CB64BB64BC64DA64C464C764C264CD64BF64D264D464BE657466C666C966B9 -66C466C766B86A3D6A386A3A6A596A6B6A586A396A446A626A616A4B6A470000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -71 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006A356A5F6A486B596B776C056FC26FB16FA16FC36FA46FC16FA76FB36FC0 -6FB96FB66FA66FA06FB471BE71C971D071D271C871D571B971CE71D971DC71C3 -71C47368749C74A37498749F749E74E2750C750D76347638763A76E776E577A0 -779E779F77A578E878DA78EC78E779A67A4D7A4E7A467A4C7A4B7ABA7BD97C11 -7BC97BE47BDB7BE17BE97BE67CD57CD67E0A7E117E087E1B7E237E1E7E1D7E09 -7E107F797FB27FF07FF17FEE802881B381A981A881FB820882588259854A0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -72 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000855985488568856985438549856D856A855E8783879F879E87A2878D8861 -892A89328925892B892189AA89A68AE68AFA8AEB8AF18B008ADC8AE78AEE8AFE -8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C938CF48E448E318E348E428E39 -8E358F3B8F2F8F388F338FA88FA69075907490789072907C907A913491929320 -933692F89333932F932292FC932B9304931A9310932693219315932E931995BB -96A796A896AA96D5970E97119716970D9713970F975B975C9766979898300000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -73 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009838983B9837982D9839982499109928991E991B9921991A99ED99E299F1 -9AB89ABC9AFB9AED9B289B919D159D239D269D289D129D1B9ED89ED49F8D9F9C -512A511F5121513252F5568E5680569056855687568F58D558D358D158CE5B30 -5B2A5B245B7A5C375C685DBC5DBA5DBD5DB85E6B5F4C5FBD61C961C261C761E6 -61CB6232623464CE64CA64D864E064F064E664EC64F164E264ED6582658366D9 -66D66A806A946A846AA26A9C6ADB6AA36A7E6A976A906AA06B5C6BAE6BDA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -74 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F806FEC6FE16FE96FD56FEE -6FF071E771DF71EE71E671E571ED71EC71F471E0723572467370737274A974B0 -74A674A876467642764C76EA77B377AA77B077AC77A777AD77EF78F778FA78F4 -78EF790179A779AA7A577ABF7C077C0D7BFE7BF77C0C7BE07CE07CDC7CDE7CE2 -7CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B7E3D7E317E457E417E347E39 -7E487E357E3F7E2F7F447FF37FFC807180728070806F807381C681C381BA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -75 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000081C281C081BF81BD81C981BE81E88209827185AA8584857E859C85918594 -85AF859B858785A8858A85A6866787C087D187B387D287C687AB87BB87BA87C8 -87CB893B893689448938893D89AC8B0E8B178B198B1B8B0A8B208B1D8B048B10 -8C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B8E488E4A8F448F3E8F42 -8F458F3F907F907D9084908190829080913991A3919E919C934D938293289375 -934A9365934B9318937E936C935B9370935A935495CA95CB95CC95C895C60000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -76 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000096B196B896D6971C971E97A097D3984698B699359A0199FF9BAE9BAB9BAA -9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2569556AE58D958D8 -5B385F5E61E3623364F464F264FE650664FA64FB64F765B766DC67266AB36AAC -6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE70066FFA7011700F -71FB71FC71FE71F87377737574A774BF751576567658765277BD77BF77BB77BC -790E79AE7A617A627A607AC47AC57C2B7C277C2A7C1E7C237C217CE77E540000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -77 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007E557E5E7E5A7E617E527E597F487FF97FFB8077807681CD81CF820A85CF -85A985CD85D085C985B085BA85B987EF87EC87F287E0898689B289F48B288B39 -8B2C8B2B8C508D058E598E638E668E648E5F8E558EC08F498F4D908790839088 -91AB91AC91D09394938A939693A293B393AE93AC93B09398939A939795D495D6 -95D095D596E296DC96D996DB96DE972497A397A697AD97F9984D984F984C984E -985398BA993E993F993D992E99A59A0E9AC19B039B069B4F9B4E9B4D9BCA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -78 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009BC99BFD9BC89BC09D519D5D9D609EE09F159F2C513356A556A858DE58DF -58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE56ADD6ADA6AD3 -701B701F7028701A701D701570187206720D725872A27378737A74BD74CA74E3 -75877586765F766177C7791979B17A6B7A697C3E7C3F7C387C3D7C377C407E6B -7E6D7E797E697E6A7E737F857FB67FB97FB881D885E985DD85EA85D585E485E5 -85F787FB8805880D87F987FE8960895F8956895E8B418B5C8B588B498B5A0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -79 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A8E748F548F4E -8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D693E293CD93D8 -93E493D793E895DC96B496E3972A9727976197DC97FB985E9858985B98BC9945 -99499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A9D6C9E929E979E93 -9EB452F856B756B656B456BC58E45B405B435B7D5BF65DC961F861FA65186514 -651966E667276AEC703E703070327210737B74CF766276657926792A792C0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -7a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C7E827F4C800081DA -826685FB85F9861185FA8606860B8607860A88148815896489BA89F88B708B6C -8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B491CB9418940393FD95E1 -973098C49952995199A89A2B9A309A379A359C139C0D9E799EB59EE89F2F9F5F -9F639F615137513856C156C056C259145C6C5DCD61FC61FE651D651C659566E9 -6AFB6B046AFA6BB2704C721B72A774D674D4766977D37C507E8F7E8C7FBC0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -7b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008617862D861A882388228821881F896A896C89BD8B748B778B7D8D138E8A -8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B95E2973897399732 -97FF9867986599579A459A439A409A3E9ACF9B549B519C2D9C259DAF9DB49DC2 -9DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C95B7F5DD45DD25F4E -61FF65246B0A6B6170517058738074E4758A766E766C79B37C607C5F807E807D -81DF8972896F89FC8B808D168D178E918E938F619148944494519452973D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -7c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000973E97C397C1986B99559A559A4D9AD29B1A9C499C319C3E9C3B9DD39DD7 -9F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B1074DA7ACA7C647C63 -7C657E937E967E9481E28638863F88318B8A9090908F9463946094649768986F -995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F9EF456D158E9652C -705E7671767277D77F507F888836883988628B938B928B9682778D1B91C0946A -97429748974497C698709A5F9B229B589C5F9DF99DFA9E7C9E7D9F079F770000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -7d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009F725EF36B1670637C6C7C6E883B89C08EA191C1947294709871995E9AD6 -9B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5947D947E947C -9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 +# Encoding file: cns11643-1, double-byte +D +2134 0 65 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003000FF0C30013002FF0E30FBFF1BFF1AFF1FFF01FE3020262025FE50FE51 +FE5200B7FE54FE55FE56FE57FE312014FE3220130000000000000000FF08FF09 +FE35FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300B +FE3DFE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A +FE5BFE5CFE5DFE5E20182019201C201D301D301E20322035FF03FF06FF0A203B +00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000032A32105203E0000FF3F0000FE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61 +FF0BFF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62 +FE63FE64FE66FE65223C2229222A22A52220221F22BF33D233D1222B222E2235 +22342640264226412609219121932192219021962197219921982016FF5CFF0F +FF3C2215FE68FF04FFE53012FFE0FFE1FF05FF2021032109FE69FE6AFE6B33D5 +339C339D339E33CE33A1338E338F33C400B05159515B515E515D516151630000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000055E774E97CCE25812582258325842585258625872588258F258E258D258C +258B258A2589253C2534252C2524251C2594250025022595250C251025142518 +256D256E2570256F2550255E256A256125E225E325E525E42571257225730000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF10FF11FF12FF13FF14FF15FF16FF17FF18FF1921602161216221632164 +2165216621672168216930213022302330243025302630273028302900005344 +0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45 +FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55 +FF56FF57FF58FF59FF5A039103920393039403950396039703980399039A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039B039C039D039E039F03A003A103A303A403A503A603A703A803A903B1 +03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 +03C303C403C503C603C703C803C931053106310731083109310A310B310C310D +310E310F3110311131123113311431153116311731183119311A311B311C311D +311E311F312031213122312331243125312631273128312902D902C902CA02C7 +02CB000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000246024612462246324642465246624672468246924742475247624772478 +2479247A247B247C247D21702171217221732174217521762177217821790000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00002400240124022403240424052406240724082409240A240B240C240D240E +240F2410241124122413241424152416241724182419241A241B241C241D241E +241F242100000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201 +529B53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E +4E8E4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B53 +5BF85C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D +4E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC14EC0 +4EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000052065207520852FB52FE52FF53165339534853475345535E538453CB53CA +53CD58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F15 +5FC362086236624B624E652F6587659765A465B965E566F0670867286B206B62 +6B796BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E19 +4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4 +4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553060000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005317531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE +53E953E853FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA +5916592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01 +5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63 +6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529 +7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A740000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007ACB4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F15 +4F0D4F104F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B5149514751465148 +51685171518D51B0521752115212520E521652A3530853215320537053715409 +540F540C540A54105401540B54045411540D54085403540E5406541256E056DE +56DD573357305728572D572C572F57295919591A59375938598459785983597D +5979598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E760000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E745F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E8 +65EC65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C59 +6C5F6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F36 +7F8A7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C +821B821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F47 +4F574F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F460000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F634F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B6 +51B7522552245229522A522852AB52A952AA52AC532353735375541D542D541E +543E5426544E542754465443543354485442541B5429544A5439543B5438542E +543554365420543C54405431542B541F542C56EA56F056E456EB574A57515740 +574D5747574E573E5750574F573B58EF593E599D599259A8599E59A359995996 +598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C410000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C3F5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F64 +5F625F775F795FD85FCC5FD75FCD5FF15FEB5FF85FEA62126211628462976296 +628062766289626D628A627C627E627962736292626F6298626E629562936291 +62866539653B653865F166F4675F674E674F67506751675C6756675E67496746 +6760675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C90 +6C706C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C980000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C827076707C707D707872627261726072C472C27396752C752B75377538 +768276EF77E379C179C079BF7A767CFB7F5580968093809D8098809B809A80B2 +826F8292828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA +8F9B8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632 +962E9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F73 +4F7F4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F910000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F7A515451525155516951775176517851BD51FD523B52385237523A5230 +522E5236524152BE52BB5352535453535351536653775378537953D653D453D7 +547354755496547854955480547B5477548454925486547C549054715476548C +549A54625468548B547D548E56FA57835777576A5769576157665764577C591C +5949594759485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D3 +59CA59AF59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C485C455C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B +5E115E785E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD +5FE05FFD5FF55FFF600F6014602F60356016602A6015602160276029602B601B +62166215623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D3 +62D462CB62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D7 +62C662AC62CE653E65A765BC65FA66146613660C66066602660E6600660F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006615660A6607670D670B676D678B67956771679C677367776787679D6797 +676F6770677F6789677E67906775679A6793677C676A67726B236B666B676B7F +6C136C1B6CE36CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD3 +6CB86CC46CB96CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC +6CD66CE07095708E7092708A7099722C722D723872487267726972C072CE72D9 +72D772D073A973A8739F73AB73A5753D759D7599759A768476C276F276F40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077E577FD793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B8005 +80BA80A580A280B180A180AB80A980B480AA80AF81E581FE820D82B3829D8299 +82AD82BD829F82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D +88688ECB8FCE8FD48FD190B590B890B190B691C791D195779580961C9640963F +963B9644964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD1 +4FCF4FDD4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FB751575192519151A0524E5243524A524D524C524B524752C752C952C3 +52C1530D5357537B539A53DB54AC54C054A854CE54C954B854A654B354C754C2 +54BD54AA54C154C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A0 +57A357A257CE57AE579359555951594F594E595059DC59D859FF59E359E85A03 +59E559EA59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D +5C4B5CD95CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F880000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F855F8A5F8B5F875F8C5F896012601D60206025600E6028604D60706068 +606260466043606C606B606A6064624162DC6316630962FC62ED630162EE62FD +630762F162F762EF62EC62FE62F463116302653F654565AB65BD65E26625662D +66206627662F661F66286631662466F767FF67D367F167D467D067EC67B667AF +67F567E967EF67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD +67D26B6A6B836B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D316D1E6D176D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D35 +6D0E6D2B70AB70BA70B370AC70AF70AD70B870AE70A472307272726F727472E9 +72E072E173B773CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB +75A475A575A275A3767876867687768876C876C676C376C5770176F976F87709 +770B76FE76FC770777DC78027814780C780D794679497948794779B979BA79D1 +79D279CB7A7F7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F380000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F8E7FBF8010800D8011803680D680E580DA80C380C480CC80E180DB80CE +80DE80E480DD81F4822282E78303830582E382DB82E6830482E58302830982D2 +82D782F1830182DC82D482D182DE82D382DF82EF830686508679867B867A884D +886B898189D48A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE2 +8FEA8FE58FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B +964C964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000500C500D50234FEF502650254FF8502950165006503C501F501A50125011 +4FFA5000501450284FF15021500B501950184FF34FEE502D502A4FFE502B5009 +517C51A451A551A251CD51CC51C651CB5256525C5254525B525D532A537F539F +539D53DF54E855105501553754FC54E554F2550654FA551454E954ED54E15509 +54EE54EA54E65527550754FD550F5703570457C257D457CB57C35809590F5957 +5958595A5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A090000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B6B5C585BB05BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED +5CFD5CFB5CEA5CE85CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F92 +5F915F9060596063606560506055606D6069606F6084609F609A608D6094608C +60856096624762F3630862FF634E633E632F635563426346634F6349633A6350 +633D632A632B6328634D634C65486549659965C165C566426649664F66436652 +664C6645664166F8671467156717682168386848684668536839684268540000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000682968B36817684C6851683D67F468506840683C6843682A684568136818 +68416B8A6B896BB76C236C276C286C266C246CF06D6A6D956D886D876D666D78 +6D776D596D936D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA +70D870E470D970C870CF7239727972FC72F972FD72F872F7738673ED740973EE +73E073EA73DE7554755D755C755A755975BE75C575C775B275B375BD75BC75B9 +75C275B8768B76B076CA76CD76CE7729771F7720772877E97830782778380000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000781D783478377825782D7820781F7832795579507960795F7956795E795D +7957795A79E479E379E779DF79E679E979D87A847A887AD97B067B117C897D21 +7D177D0B7D0A7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F94 +7FC57FC1800680048018801580198017803D803F80F1810280F0810580ED80F4 +810680F880F3810880FD810A80FC80EF81ED81EC82008210822A822B8228822C +82BB832B83528354834A83388350834983358334834F83328339833683170000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000083408331832883438654868A86AA869386A486A9868C86A3869C88708877 +88818882887D88798A188A108A0E8A0C8A158A0A8A178A138A168A0F8A118C48 +8C7A8C798CA18CA28D778EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF4 +90038FFD90058FF8909590E190DD90E29152914D914C91D891DD91D791DC91D9 +9583966296639661965B965D96649658965E96BB98E299AC9AA89AD89B259B32 +9B3C4E7E507A507D505C50475043504C505A504950655076504E505550750000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050745077504F500F506F506D515C519551F0526A526F52D252D952D852D5 +5310530F5319533F5340533E53C366FC5546556A55665544555E55615543554A +55315556554F5555552F55645538552E555C552C55635533554155575708570B +570957DF5805580A580657E057E457FA5802583557F757F9592059625A365A41 +5A495A665A6A5A405A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC6 +5C095C085C075C605C5C5C5D5D075D065D0E5D1B5D165D225D115D295D140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D195D245D275D175DE25E385E365E335E375EB75EB85EB65EB55EBE5F35 +5F375F575F6C5F695F6B5F975F995F9E5F985FA15FA05F9C607F60A3608960A0 +60A860CB60B460E660BD60C560BB60B560DC60BC60D860D560C660DF60B860DA +60C7621A621B624863A063A76372639663A263A563776367639863AA637163A9 +63896383639B636B63A863846388639963A163AC6392638F6380637B63696368 +637A655D6556655165596557555F654F655865556554659C659B65AC65CF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000065CB65CC65CE665D665A666466686666665E66F952D7671B688168AF68A2 +689368B5687F687668B168A7689768B0688368C468AD688668856894689D68A8 +689F68A168826B326BBA6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE4 +6DFB6DFA6E056DC76DCB6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A +6DB56DDA6DEB6DD86DEA6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109 +710A70FD70EF723D727D7281731C731B73167313731973877405740A74030000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000740673FE740D74E074F674F7751C75227565756675627570758F75D475D5 +75B575CA75CD768E76D476D276DB7737773E773C77367738773A786B7843784E +79657968796D79FB7A927A957B207B287B1B7B2C7B267B197B1E7B2E7C927C97 +7C957D467D437D717D2E7D397D3C7D407D307D337D447D2F7D427D327D317F3D +7F9E7F9A7FCC7FCE7FD2801C804A8046812F81168123812B8129813081248202 +8235823782368239838E839E8398837883A2839683BD83AB8392838A83930000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000838983A08377837B837C838683A786555F6A86C786C086B686C486B586C6 +86CB86B186AF86C98853889E888888AB88928896888D888B8993898F8A2A8A1D +8A238A258A318A2D8A1F8A1B8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D67 +8D668DBE8DBA8EDB8EDF9019900D901A90179023901F901D90109015901E9020 +900F90229016901B901490E890ED90FD915791CE91F591E691E391E791ED91E9 +9589966A9675967396789670967496769677966C96C096EA96E97AE07ADF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000980298039B5A9CE59E759E7F9EA59EBB50A2508D50855099509150805096 +5098509A670051F1527252745275526952DE52DD52DB535A53A5557B558055A7 +557C558A559D55985582559C55AA55945587558B558355B355AE559F553E55B2 +559A55BB55AC55B1557E558955AB5599570D582F582A58345824583058315821 +581D582058F958FA59605A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD3 +5BD05C0A5C0B5C315D4C5D505D345D475DFD5E455E3D5E405E435E7E5ECA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005EC15EC25EC45F3C5F6D5FA95FAA5FA860D160E160B260B660E0611C6123 +60FA611560F060FB60F4616860F1610E60F6610961006112621F624963A3638C +63CF63C063E963C963C663CD63D263E363D063E163D663ED63EE637663F463EA +63DB645263DA63F9655E6566656265636591659065AF666E667066746676666F +6691667A667E667766FE66FF671F671D68FA68D568E068D868D7690568DF68F5 +68EE68E768F968D268F268E368CB68CD690D6912690E68C968DA696E68FB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B3E6B3A6B3D6B986B966BBC6BEF6C2E6C2F6C2C6E2F6E386E546E216E32 +6E676E4A6E206E256E236E1B6E5B6E586E246E566E6E6E2D6E266E6F6E346E4D +6E3A6E2C6E436E1D6E3E6ECB6E896E196E4E6E636E446E726E696E5F7119711A +7126713071217136716E711C724C728472807336732573347329743A742A7433 +74227425743574367434742F741B7426742875257526756B756A75E275DB75E3 +75D975D875DE75E0767B767C7696769376B476DC774F77ED785D786C786F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A0D7A087A0B7A057A007A987A977A967AE57AE37B497B567B467B507B52 +7B547B4D7B4B7B4F7B517C9F7CA57D5E7D507D687D557D2B7D6E7D727D617D66 +7D627D707D7355847FD47FD5800B8052808581558154814B8151814E81398146 +813E814C815381748212821C83E9840383F8840D83E083C5840B83C183EF83F1 +83F48457840A83F0840C83CC83FD83F283CA8438840E840483DC840783D483DF +865B86DF86D986ED86D486DB86E486D086DE885788C188C288B1898389960000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008A3B8A608A558A5E8A3C8A418A548A5B8A508A468A348A3A8A368A568C61 +8C828CAF8CBC8CB38CBD8CC18CBB8CC08CB48CB78CB68CBF8CB88D8A8D858D81 +8DCE8DDD8DCB8DDA8DD18DCC8DDB8DC68EFB8EF88EFC8F9C902E903590319038 +90329036910290F5910990FE9163916591CF9214921592239209921E920D9210 +920792119594958F958B959195939592958E968A968E968B967D96859686968D +9672968496C196C596C496C696C796EF96F297CC98059806980898E798EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098EF98E998F298ED99AE99AD9EC39ECD9ED14E8250AD50B550B250B350C5 +50BE50AC50B750BB50AF50C7527F5277527D52DF52E652E452E252E3532F55DF +55E855D355E655CE55DC55C755D155E355E455EF55DA55E155C555C655E555C9 +57125713585E585158585857585A5854586B584C586D584A58625852584B5967 +5AC15AC95ACC5ABE5ABD5ABC5AB35AC25AB25D695D6F5E4C5E795EC95EC85F12 +5F595FAC5FAE611A610F6148611F60F3611B60F961016108614E614C61440000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000614D613E61346127610D61066137622162226413643E641E642A642D643D +642C640F641C6414640D6436641664176406656C659F65B06697668966876688 +669666846698668D67036994696D695A697769606954697569306982694A6968 +696B695E695369796986695D6963695B6B476B726BC06BBF6BD36BFD6EA26EAF +6ED36EB66EC26E906E9D6EC76EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC4 +6ED46EAA6EA76EB4714E71597169716471497167715C716C7166714C71650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000715E714671687156723A725273377345733F733E746F745A7455745F745E +7441743F7459745B745C75767578760075F0760175F275F175FA75FF75F475F3 +76DE76DF775B776B7766775E77637779776A776C775C77657768776277EE788E +78B078977898788C7889787C78917893787F797A797F7981842C79BD7A1C7A1A +7A207A147A1F7A1E7A9F7AA07B777BC07B607B6E7B677CB17CB37CB57D937D79 +7D917D817D8F7D5B7F6E7F697F6A7F727FA97FA87FA480568058808680840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008171817081788165816E8173816B8179817A81668205824784828477843D +843184758466846B8449846C845B843C8435846184638469846D8446865E865C +865F86F9871387088707870086FE86FB870287038706870A885988DF88D488D9 +88DC88D888DD88E188CA88D588D2899C89E38A6B8A728A738A668A698A708A87 +8A7C8A638AA08A718A858A6D8A628A6E8A6C8A798A7B8A3E8A688C628C8A8C89 +8CCA8CC78CC88CC48CB28CC38CC28CC58DE18DDF8DE88DEF8DF38DFA8DEA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008DE48DE68EB28F038F098EFE8F0A8F9F8FB2904B904A905390429054903C +905590509047904F904E904D9051903E904191129117916C916A916991C99237 +92579238923D9240923E925B924B9264925192349249924D92459239923F925A +959896989694969596CD96CB96C996CA96F796FB96F996F69756977497769810 +98119813980A9812980C98FC98F498FD98FE99B399B199B49AE19CE99E829F0E +9F139F2050E750EE50E550D650ED50DA50D550CF50D150F150CE50E951620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051F352835282533153AD55FE5600561B561755FD561456065609560D560E +55F75616561F5608561055F6571857165875587E58835893588A58795885587D +58FD592559225924596A59695AE15AE65AE95AD75AD65AD85AE35B755BDE5BE7 +5BE15BE55BE65BE85BE25BE45BDF5C0D5C625D845D875E5B5E635E555E575E54 +5ED35ED65F0A5F465F705FB96147613F614B617761626163615F615A61586175 +622A64876458645464A46478645F647A645164676434646D647B657265A10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000065D765D666A266A8669D699C69A8699569C169AE69D369CB699B69B769BB +69AB69B469D069CD69AD69CC69A669C369A36B496B4C6C336F336F146EFE6F13 +6EF46F296F3E6F206F2C6F0F6F026F226EFF6EEF6F066F316F386F326F236F15 +6F2B6F2F6F886F2A6EEC6F016EF26ECC6EF771947199717D718A71847192723E +729272967344735074647463746A7470746D750475917627760D760B76097613 +76E176E37784777D777F776178C1789F78A778B378A978A3798E798F798D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A2E7A317AAA7AA97AED7AEF7BA17B957B8B7B757B977B9D7B947B8F7BB8 +7B877B847CB97CBD7CBE7DBB7DB07D9C7DBD7DBE7DA07DCA7DB47DB27DB17DBA +7DA27DBF7DB57DB87DAD7DD27DC77DAC7F707FE07FE17FDF805E805A80878150 +8180818F8188818A817F818281E781FA82078214821E824B84C984BF84C684C4 +8499849E84B2849C84CB84B884C084D3849084BC84D184CA873F871C873B8722 +87258734871887558737872988F3890288F488F988F888FD88E8891A88EF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AA68A8C8A9E8AA38A8D8AA18A938AA48AAA8AA58AA88A988A918A9A8AA7 +8C6A8C8D8C8C8CD38CD18CD28D6B8D998D958DFC8F148F128F158F138FA39060 +9058905C90639059905E9062905D905B91199118911E91759178917791749278 +92AC9280928592989296927B9293929C92A8927C929195A195A895A995A395A5 +95A49699969C969B96CC96D29700977C978597F69817981898AF98B199039905 +990C990999C19AAF9AB09AE69B419B429CF49CF69CF39EBC9F3B9F4A51040000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000510050FB50F550F9510251085109510551DC528752885289528D528A52F0 +53B2562E563B56395632563F563456295653564E565756745636562F56305880 +589F589E58B3589C58AE58A958A6596D5B095AFB5B0B5AF55B0C5B085BEE5BEC +5BE95BEB5C645C655D9D5D945E625E5F5E615EE25EDA5EDF5EDD5EE35EE05F48 +5F715FB75FB561766167616E615D61556182617C6170616B617E61A7619061AB +618E61AC619A61A4619461AE622E6469646F6479649E64B26488649064B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064A56493649564A9649264AE64AD64AB649A64AC649964A264B365756577 +657866AE66AB66B466B16A236A1F69E86A016A1E6A1969FD6A216A136A0A69F3 +6A026A0569ED6A116B506B4E6BA46BC56BC66F3F6F7C6F846F516F666F546F86 +6F6D6F5B6F786F6E6F8E6F7A6F706F646F976F586ED56F6F6F606F5F719F71AC +71B171A87256729B734E73577469748B7483747E7480757F76207629761F7624 +762676217622769A76BA76E4778E7787778C7791778B78CB78C578BA78CA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078BE78D578BC78D07A3F7A3C7A407A3D7A377A3B7AAF7AAE7BAD7BB17BC4 +7BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB7DD87DEC7DDD7DE87DE3 +7DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF7FE98026819B819C819D81A0 +819A81988517853D851A84EE852C852D8513851185238521851484EC852584FF +8506878287748776876087668778876887598757874C8753885B885D89108907 +891289138915890A8ABC8AD28AC78AC48A958ACB8AF88AB28AC98AC28ABF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE08CDE8CE68CE48CEC8CED +8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D8E228E0F8E298E1F8E21 +8E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E8F259069906E9068906D9077 +9130912D9127913191879189918B918392C592BB92B792EA92E492C192B392BC +92D292C792F092B295AD95B197049706970797099760978D978B978F9821982B +981C98B3990A99139912991899DD99D099DF99DB99D199D599D299D99AB70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AEE9AEF9B279B459B449B779B6F9D069D099D039EA99EBE9ECE58A89F52 +51125118511451105115518051AA51DD5291529352F35659566B567956695664 +5678566A566856655671566F566C5662567658C158BE58C758C5596E5B1D5B34 +5B785BF05C0E5F4A61B2619161A9618A61CD61B661BE61CA61C8623064C564C1 +64CB64BB64BC64DA64C464C764C264CD64BF64D264D464BE657466C666C966B9 +66C466C766B86A3D6A386A3A6A596A6B6A586A396A446A626A616A4B6A470000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A356A5F6A486B596B776C056FC26FB16FA16FC36FA46FC16FA76FB36FC0 +6FB96FB66FA66FA06FB471BE71C971D071D271C871D571B971CE71D971DC71C3 +71C47368749C74A37498749F749E74E2750C750D76347638763A76E776E577A0 +779E779F77A578E878DA78EC78E779A67A4D7A4E7A467A4C7A4B7ABA7BD97C11 +7BC97BE47BDB7BE17BE97BE67CD57CD67E0A7E117E087E1B7E237E1E7E1D7E09 +7E107F797FB27FF07FF17FEE802881B381A981A881FB820882588259854A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000855985488568856985438549856D856A855E8783879F879E87A2878D8861 +892A89328925892B892189AA89A68AE68AFA8AEB8AF18B008ADC8AE78AEE8AFE +8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C938CF48E448E318E348E428E39 +8E358F3B8F2F8F388F338FA88FA69075907490789072907C907A913491929320 +933692F89333932F932292FC932B9304931A9310932693219315932E931995BB +96A796A896AA96D5970E97119716970D9713970F975B975C9766979898300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009838983B9837982D9839982499109928991E991B9921991A99ED99E299F1 +9AB89ABC9AFB9AED9B289B919D159D239D269D289D129D1B9ED89ED49F8D9F9C +512A511F5121513252F5568E5680569056855687568F58D558D358D158CE5B30 +5B2A5B245B7A5C375C685DBC5DBA5DBD5DB85E6B5F4C5FBD61C961C261C761E6 +61CB6232623464CE64CA64D864E064F064E664EC64F164E264ED6582658366D9 +66D66A806A946A846AA26A9C6ADB6AA36A7E6A976A906AA06B5C6BAE6BDA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F806FEC6FE16FE96FD56FEE +6FF071E771DF71EE71E671E571ED71EC71F471E0723572467370737274A974B0 +74A674A876467642764C76EA77B377AA77B077AC77A777AD77EF78F778FA78F4 +78EF790179A779AA7A577ABF7C077C0D7BFE7BF77C0C7BE07CE07CDC7CDE7CE2 +7CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B7E3D7E317E457E417E347E39 +7E487E357E3F7E2F7F447FF37FFC807180728070806F807381C681C381BA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C281C081BF81BD81C981BE81E88209827185AA8584857E859C85918594 +85AF859B858785A8858A85A6866787C087D187B387D287C687AB87BB87BA87C8 +87CB893B893689448938893D89AC8B0E8B178B198B1B8B0A8B208B1D8B048B10 +8C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B8E488E4A8F448F3E8F42 +8F458F3F907F907D9084908190829080913991A3919E919C934D938293289375 +934A9365934B9318937E936C935B9370935A935495CA95CB95CC95C895C60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000096B196B896D6971C971E97A097D3984698B699359A0199FF9BAE9BAB9BAA +9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2569556AE58D958D8 +5B385F5E61E3623364F464F264FE650664FA64FB64F765B766DC67266AB36AAC +6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE70066FFA7011700F +71FB71FC71FE71F87377737574A774BF751576567658765277BD77BF77BB77BC +790E79AE7A617A627A607AC47AC57C2B7C277C2A7C1E7C237C217CE77E540000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E557E5E7E5A7E617E527E597F487FF97FFB8077807681CD81CF820A85CF +85A985CD85D085C985B085BA85B987EF87EC87F287E0898689B289F48B288B39 +8B2C8B2B8C508D058E598E638E668E648E5F8E558EC08F498F4D908790839088 +91AB91AC91D09394938A939693A293B393AE93AC93B09398939A939795D495D6 +95D095D596E296DC96D996DB96DE972497A397A697AD97F9984D984F984C984E +985398BA993E993F993D992E99A59A0E9AC19B039B069B4F9B4E9B4D9BCA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009BC99BFD9BC89BC09D519D5D9D609EE09F159F2C513356A556A858DE58DF +58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE56ADD6ADA6AD3 +701B701F7028701A701D701570187206720D725872A27378737A74BD74CA74E3 +75877586765F766177C7791979B17A6B7A697C3E7C3F7C387C3D7C377C407E6B +7E6D7E797E697E6A7E737F857FB67FB97FB881D885E985DD85EA85D585E485E5 +85F787FB8805880D87F987FE8960895F8956895E8B418B5C8B588B498B5A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A8E748F548F4E +8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D693E293CD93D8 +93E493D793E895DC96B496E3972A9727976197DC97FB985E9858985B98BC9945 +99499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A9D6C9E929E979E93 +9EB452F856B756B656B456BC58E45B405B435B7D5BF65DC961F861FA65186514 +651966E667276AEC703E703070327210737B74CF766276657926792A792C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C7E827F4C800081DA +826685FB85F9861185FA8606860B8607860A88148815896489BA89F88B708B6C +8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B491CB9418940393FD95E1 +973098C49952995199A89A2B9A309A379A359C139C0D9E799EB59EE89F2F9F5F +9F639F615137513856C156C056C259145C6C5DCD61FC61FE651D651C659566E9 +6AFB6B046AFA6BB2704C721B72A774D674D4766977D37C507E8F7E8C7FBC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008617862D861A882388228821881F896A896C89BD8B748B778B7D8D138E8A +8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B95E2973897399732 +97FF9867986599579A459A439A409A3E9ACF9B549B519C2D9C259DAF9DB49DC2 +9DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C95B7F5DD45DD25F4E +61FF65246B0A6B6170517058738074E4758A766E766C79B37C607C5F807E807D +81DF8972896F89FC8B808D168D178E918E938F619148944494519452973D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000973E97C397C1986B99559A559A4D9AD29B1A9C499C319C3E9C3B9DD39DD7 +9F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B1074DA7ACA7C647C63 +7C657E937E967E9481E28638863F88318B8A9090908F9463946094649768986F +995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F9EF456D158E9652C +705E7671767277D77F507F888836883988628B938B928B9682778D1B91C0946A +97429748974497C698709A5F9B229B589C5F9DF99DFA9E7C9E7D9F079F770000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F725EF36B1670637C6C7C6E883B89C08EA191C1947294709871995E9AD6 +9B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5947D947E947C +9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/ext/Encode/Encode/cns11643-2.enc b/ext/Encode/Encode/cns11643-2.enc index fa5ad10..186b748 100644 --- a/ext/Encode/Encode/cns11643-2.enc +++ b/ext/Encode/Encode/cns11643-2.enc @@ -1,1397 +1,1397 @@ -# Encoding file: cns11643-2, double-byte -D -7244 0 82 -21 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00004E424E5C51F5531A53824E074E0C4E474E8D56D75C6E5F734E0F51874E0E -4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3 -6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C5209531C534C5722 -57235917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C15 -6C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F144EF1 -4F004EF74F084F1D4F024F054F224F134F044EF44F1251B15213521052A60000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -22 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005322531F534D538A540756E156DF572E572A5734593C5980597C5985597B -597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74 -5FD55FD45FCF625C625E626462616266626262596260625A6265653765EF65EE -673E67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B -6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D -897E909990979098909B909496229624962096234F564F3B4F624F494F530000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -23 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00004F644F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E -522152AD52AE530953635372538E538F54305437542A545454455419541C5425 -5418543D544F544154285424544756EE56E756E557415745574C5749574B5752 -5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A -5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C -5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE40000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -24 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005FE35FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271 -627B627A6270628162886277627D6272627465F065F465F365F265F567456747 -67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B -6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A -726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594 -75957681793D80348095809980908092809C8290828F8285828E829182930000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -25 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F -962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A -4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE -5235523252335246523152BC530A530B533C539253945487547F548154915482 -5488546B547A547E5465546C54745466548D546F546154605498546354675464 -56F756F9576F5772576D576B57715770577657805775577B5773577457620000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -26 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D6 -59B159BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB5 -5CAF5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E14 -5E195F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B -6034600A60176033601A601E602C6022600D6010602E60136011600C6009601C -6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B00000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -27 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000062B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD -6611661066F6670A6785676C678E67926776677B6798678667846774678D678C -677A679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C93 -6CEC6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF2 -6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1 -709470987085709370867084709170967082709A7083726A72D672CB72D80000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -28 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000072C972DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D -74DD74E8753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB -77FA77F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5 -80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8 -82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD -8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC50000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -29 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00004FD34FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC0 -4FB94FEC5244524952C052C2533D537C539753965399539854BA54A154AD54A5 -54CF54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE -54B057B5579E579F57A4578C5797579D579B57945798578F579957A5579A5795 -58F4590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F7 -59DB59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -2a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005CDB5CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF8 -5DF95E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F86 -6037603960546072605E6045605360476049605B604C60406042605F60246044 -60586066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F8 -62F663006313631462FA631562FB62F06541654365AA65BF6636662166326635 -661C662666226633662B663A661D66346639662E670F671067C167F267C80000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -2b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000067BA67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F7 -67F667EE67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB -67FA67C967CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D28 -6D346D2D6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D -6D426D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F -70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -2c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000072E472E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B5 -73B473EB73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA -767976C47708770377047705770A76F776FB76FA77E777E87806781178127805 -7810780F780E780978037813794A794C794B7945794479D579CD79CF79D679CE -7A807A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F91 -7F8D7FBE8007800E800F8014803780D880C780E080D180C880C280D080C50000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -2d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000080E380D980DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE -82F9830782E8830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F6 -82F082EA82E482E082FA82F382ED86778674867C86738841884E8867886A8869 -89D38A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB -90C891D491D39654964F96519653964A964E501E50055007501350225030501B -4FF54FF450335037502C4FF64FF75017501C502050275035502F5031500E0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -2e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000515A5194519351CA51C451C551C851CE5261525A5252525E525F52555262 -52CD530E539E552654E25517551254E754F354E4551A54FF5504550854EB5511 -550554F1550A54FB54F754F854E0550E5503550B5701570257CC583257D557D2 -57BA57C657BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D -5A2E5A155A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF -5CEE5CF15CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -2f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000605A6067604160A26088608060926081609D60836095609B60976087609C -608E6219624662F263106356632C634463456336634363E46339634B634A633C -632963416334635863546359632D63476333635A63516338635763406348654A -654665C665C365C465C2664A665F6647665167126713681F681A684968326833 -683B684B684F68166831681C6835682B682D682F684E68446834681D68126814 -68266828682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B880000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -30 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006BE66BE46BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D58 -6D626D6D6D6F6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D82 -6D986D2F6D686D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D1 -70DD70CB7F3970E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1 -7242727872777276730072FA72F472FE72F672F372FB730173D373D973E573D6 -73BC73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -31 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000074F474F57521755B755F75B075C175BB75C475C075BF75B675BA768A76C9 -771D771B7710771377127723771177157719771A772277277823782C78227835 -782F7828782E782B782178297833782A78317954795B794F795C795379527951 -79EB79EC79E079EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A87 -7AD87B107B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C88 -7C8D7C857D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F610000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -32 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007F5E7F607F5D7F5B7F967F927FC37FC27FC08016803E803980FA80F280F9 -80F5810180FB81008201822F82258333832D83448319835183258356833F8341 -8326831C83228342834E831B832A8308833C834D8316832483208337832F8329 -83478345834C8353831E832C834B832783488653865286A286A88696868D8691 -869E868786978686868B869A868586A5869986A186A786958698868E869D8690 -869488438844886D88758876887288808871887F886F8883887E8874887C0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -33 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008A128C478C578C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF5 -90028FFF8FFB90048FFC8FF690D690E090D990DA90E390DF90E590D890DB90D7 -90DC90E49150914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070 -506A5061505E50605053504B505D50725048504D5041505B504A506250155045 -505F5069506B5063506450465040506E50735057505151D0526B526D526C526E -52D652D3532D539C55755576553C554D55505534552A55515562553655350000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -34 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000553055525545550C55325565554E55395548552D553B5540554B570A5707 -57FB581457E257F657DC57F4580057ED57FD580857F8580B57F357CF580757EE -57E357F257E557EC57E1580E57FC581057E75801580C57F157E957F0580D5804 -595C5A605A585A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A57 -5A435A5D5A525A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A56 -5A425A5C5B725B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -35 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005D265D255D0F5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB3 -5F365F385F9B5F965F9F608A6090608660BE60B060BA60D360D460CF60E460D9 -60DD60C860B160DB60B760CA60BF60C360CD60C063326365638A6382637D63BD -639E63AD639D639763AB638E636F63876390636E63AF6375639C636D63AE637C -63A4633B639F6378638563816391638D6370655365CD66656661665B6659665C -66626718687968876890689C686D686E68AE68AB6956686F68A368AC68A90000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -36 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006875687468B2688F68776892687C686B687268AA68806871687E689B6896 -688B68A0688968A46878687B6891688C688A687D6B366B336B376B386B916B8F -6B8D6B8E6B8C6C2A6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E00 -6DC86DE06DDF6DD66DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD5 -6DC26DCF6DC96DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4 -710C70F0710470F3711070FC70FF71067113710070F870F6710B7102710E0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -37 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000727E727B727C727F731D7317730773117318730A730872FF730F731E7388 -73F673F873F57404740173FD7407740073FA73FC73FF740C740B73F474087564 -756375CE75D275CF75CB75CC75D175D0768F768976D37739772F772D77317732 -77347733773D7725773B7735784878527849784D784A784C7826784578507964 -79677969796A7963796B796179BB79FA79F879F679F77A8F7A947A907B357B3B -7B347B257B307B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B380000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -38 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007B1A7B237C947C987C967CA37D357D3D7D387D367D3A7D457D2C7D297D41 -7D477D3E7D3F7D4A7D3B7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD1 -7FC77FCF7FC9801F801E801B804780438048811881258119811B812D811F812C -811E812181158127811D8122821182388233823A823482328274839083A383A8 -838D837A837383A48374838F8381839583998375839483A9837D8383838C839D -839B83AA838B837E83A583AF8388839783B0837F83A6838783AE837686590000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -39 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000865686BF86B786C286C186C586BA86B086C886B986B386B886CC86B486BB -86BC86C386BD86BE88528889889588A888A288AA889A889188A1889F889888A7 -8899889B889788A488AC888C8893888E898289D689D989D58A308A278A2C8A1E -8C398C3B8C5C8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE -8EDD8EDC8ED78EE08EE19024900B9011901C900C902190EF90EA90F090F490F2 -90F390D490EB90EC90E991569158915A9153915591EC91F491F191F391F80000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -3a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000091E491F991EA91EB91F791E891EE957A95869588967C966D966B9671966F -96BF976A980498E59997509B50955094509E508B50A35083508C508E509D5068 -509C509250825087515F51D45312531153A453A7559155A855A555AD55775645 -55A255935588558F55B5558155A3559255A4557D558C55A6557F559555A1558E -570C582958375819581E58275823582857F558485825581C581B5833583F5836 -582E58395838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA60000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -3b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005A7C5AA55AAC5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C -5A9C5A8F5A935A9D5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B -5D415D4B5D3F5D355D515D4E5D555D335D3A5D525D3D5D315D595D425D395D49 -5D385D3C5D325D365D405D455E445E415F585FA65FA55FAB60C960B960CC60E2 -60CE60C4611460F2610A6116610560F5611360F860FC60FE60C161036118611D -611060FF6104610B624A639463B163B063CE63E563E863EF63C3649D63F30000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -3c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000063CA63E063F663D563F263F5646163DF63BE63DD63DC63C463D863D363C2 -63C763CC63CB63C863F063D763D965326567656A6564655C65686565658C659D -659E65AE65D065D2667C666C667B668066716679666A66726701690C68D36904 -68DC692A68EC68EA68F1690F68D668F768EB68E468F66913691068F368E16907 -68CC6908697068B4691168EF68C6691468F868D068FD68FC68E8690B690A6917 -68CE68C868DD68DE68E668F468D1690668D468E96915692568C76B396B3B0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -3d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006B3F6B3C6B946B976B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F -6E496E886E3C6E3D6E456E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E51 -6E3B6E036E2E6E5E6E686E5C6E616E316E286E606E716E6B6E396E226E306E53 -6E656E276E786E646E776E556E796E526E666E356E366E5A7120711E712F70FB -712E71317123712571227132711F7128713A711B724B725A7288728972867285 -728B7312730B733073227331733373277332732D732673237335730C742E0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -3e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000742C7430742B7416741A7421742D743174247423741D74297420743274FB -752F756F756C75E775DA75E175E675DD75DF75E475D77695769276DA77467747 -7744774D7745774A774E774B774C77DE77EC786078647865785C786D7871786A -786E787078697868785E786279747973797279707A027A0A7A037A0C7A047A99 -7AE67AE47B4A7B477B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D58 -7D6F7D637D537D567D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -3f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007D4E7F3E7F3F7F657F667FA27FA07FA17FD78051804F805080FE80D48143 -814A8152814F8147813D814D813A81E681EE81F781F881F98204823C823D823F -8275833B83CF83F9842383C083E8841283E783E483FC83F6841083C683C883EB -83E383BF840183DD83E583D883FF83E183CB83CE83D683F583C98409840F83DE -8411840683C283F383D583FA83C783D183EA8413839A83C383EC83EE83C483FB -83D783E2841B83DB83FE86D886E286E686D386E386DA86EA86DD86EB86DC0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -40 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000086EC86E986D786E886D188488856885588BA88D788B988B888C088BE88B6 -88BC88B788BD88B2890188C989958998899789DD89DA89DB8A4E8A4D8A398A59 -8A408A578A588A448A458A528A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE -8CB08CB98CB58D848D808D898DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC8 -8DD78DC58EEF8EF78EFA8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC -8EF48EE9902D9034902F9106912C910490FF90FC910890F990FB910191000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -41 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000091079105910391619164915F916291609201920A92259203921A9226920F -920C9200921291FF91FD9206920492279202921C92249219921792059216957B -958D958C95909687967E968896899683968096C296C896C396F196F0976C9770 -976E980798A998EB9CE69EF94E834E844EB650BD50BF50C650AE50C450CA50B4 -50C850C250B050C150BA50B150CB50C950B650B851D7527A5278527B527C55C3 -55DB55CC55D055CB55CA55DD55C055D455C455E955BF55D2558D55CF55D50000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -42 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000055E255D655C855F255CD55D955C25714585358685864584F584D5849586F -5855584E585D58595865585B583D5863587158FC5AC75AC45ACB5ABA5AB85AB1 -5AB55AB05ABF5AC85ABB5AC65AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD8 -5BD95C1F5C335D715D635D4A5D655D725D6C5D5E5D685D675D625DF05E4F5E4E -5E4A5E4D5E4B5EC55ECC5EC65ECB5EC75F405FAF5FAD60F76149614A612B6145 -61366132612E6146612F614F612961406220916862236225622463C563F10000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -43 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000063EB6410641264096420642464336443641F641564186439643764226423 -640C64266430642864416435642F640A641A644064256427640B63E7641B642E -6421640E656F659265D36686668C66956690668B668A66996694667867206966 -695F6938694E69626971693F6945696A6939694269576959697A694869496935 -696C6933693D696568F06978693469696940696F69446976695869416974694C -693B694B6937695C694F695169326952692F697B693C6B466B456B436B420000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -44 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006B486B416B9B6BFB6BFC6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E93 -6E946EA06EB16EB96EC66ED26EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB2 -6EBE6EC36EDC6ED86E996E926E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE -6EA3714771547152716371607141715D716271727178716A7161714271587143 -714B7170715F715071537144714D715A724F728D728C72917290728E733C7342 -733B733A7340734A73497444744A744B7452745174577440744F7450744E0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -45 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000074427446744D745474E174FF74FE74FD751D75797577698375EF760F7603 -75F775FE75FC75F975F8761075FB75F675ED75F575FD769976B576DD7755775F -776077527756775A7769776777547759776D77E07887789A7894788F78847895 -7885788678A178837879789978807896787B797C7982797D79797A117A187A19 -7A127A177A157A227A137A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B69 -7B727B657B737B717B707B617B787B767B637CB27CB47CAF7D887D867D800000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -46 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007D8D7D7F7D857D7A7D8E7D7B7D837D7C7D8C7D947D847D7D7D927F6D7F6B -7F677F687F6C7FA67FA57FA77FDB7FDC8021816481608177815C8169815B8162 -81726721815E81768167816F81448161821D8249824482408242824584F1843F -845684768479848F848D846584518440848684678430844D847D845A84598474 -8473845D8507845E8437843A8434847A8443847884328445842983D9844B842F -8442842D845F84708439844E844C8452846F84C5848E843B8447843684330000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -47 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008468847E8444842B84608454846E8450870B870486F7870C86FA86D686F5 -874D86F8870E8709870186F6870D870588D688CB88CD88CE88DE88DB88DA88CC -88D08985899B89DF89E589E489E189E089E289DC89E68A768A868A7F8A618A3F -8A778A828A848A758A838A818A748A7A8C3C8C4B8C4A8C658C648C668C868C84 -8C858CCC8D688D698D918D8C8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC -8DF18DEE8DD08DE98DE38DE28DE78DF28DEB8DF48F068EFF8F018F008F050000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -48 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008F078F088F028F0B9052903F90449049903D9110910D910F911191169114 -910B910E916E916F924892529230923A926692339265925E9283922E924A9246 -926D926C924F92609267926F92369261927092319254926392509272924E9253 -924C92569232959F959C959E959B969296939691969796CE96FA96FD96F896F5 -9773977797789772980F980D980E98AC98F698F999AF99B299B099B59AAD9AAB -9B5B9CEA9CED9CE79E809EFD50E650D450D750E850F350DB50EA50DD50E40000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -49 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000050D350EC50F050EF50E350E051D85280528152E952EB533053AC56275615 -560C561255FC560F561C56015613560255FA561D560455FF55F95889587C5890 -589858865881587F5874588B587A58875891588E587658825888587B5894588F -58FE596B5ADC5AEE5AE55AD55AEA5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE -5ADD5AD95AE85ADF5B775BE05BE35C635D825D805D7D5D865D7A5D815D775D8A -5D895D885D7E5D7C5D8D5D795D7F5E585E595E535ED85ED15ED75ECE5EDC0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005ED55ED95ED25ED45F445F435F6F5FB6612C61286141615E617161736152 -61536172616C618061746154617A615B6165613B616A6161615662296227622B -642B644D645B645D6474647664726473647D6475646664A6644E6482645E645C -644B645364606450647F643F646C646B645964656477657365A066A166A0669F -67056704672269B169B669C969A069CE699669B069AC69BC69916999698E69A7 -698D69A969BE69AF69BF69C469BD69A469D469B969CA699A69CF69B369930000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000069AA69A1699E69D96997699069C269B569A569C66B4A6B4D6B4B6B9E6B9F -6BA06BC36BC46BFE6ECE6EF56EF16F036F256EF86F376EFB6F2E6F096F4E6F19 -6F1A6F276F186F3B6F126EED6F0A6F366F736EF96EEE6F2D6F406F306F3C6F35 -6EEB6F076F0E6F436F056EFD6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21 -718771907189718071857182718F717B71867181719772447253729772957293 -7343734D7351734C746274737471747574727467746E750075027503757D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000759076167608760C76157611760A761476B87781777C77857782776E7780 -776F777E778378B278AA78B478AD78A8787E78AB789E78A578A078AC78A278A4 -7998798A798B799679957994799379977988799279907A2B7A4A7A307A2F7A28 -7A267AA87AAB7AAC7AEE7B887B9C7B8A7B917B907B967B8D7B8C7B9B7B8E7B85 -7B9852847B997BA47B827CBB7CBF7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC0 -7DC57D9D7DCE7DC47DC67DCB7DCC7DAF7DB97D967DBC7D9F7DA67DAE7DA90000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007DA17DC97F737FE27FE37FE57FDE8024805D805C8189818681838187818D -818C818B8215849784A484A1849F84BA84CE84C284AC84AE84AB84B984B484C1 -84CD84AA849A84B184D0849D84A784BB84A2849484C784CC849B84A984AF84A8 -84D6849884B684CF84A084D784D484D284DB84B084918661873387238728876B -8740872E871E87218719871B8743872C8741873E874687208732872A872D873C -8712873A8731873587428726872787388724871A8730871188F788E788F10000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000088F288FA88FE88EE88FC88F688FB88F088EC88EB899D89A1899F899E89E9 -89EB89E88AAB8A998A8B8A928A8F8A968C3D8C688C698CD58CCF8CD78D968E09 -8E028DFF8E0D8DFD8E0A8E038E078E068E058DFE8E008E048F108F118F0E8F0D -9123911C91209122911F911D911A91249121911B917A91729179917392A592A4 -9276929B927A92A0929492AA928D92A6929A92AB92799297927F92A392EE928E -9282929592A2927D928892A1928A9286928C929992A7927E928792A9929D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -4f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000928B922D969E96A196FF9758977D977A977E978397809782977B97849781 -977F97CE97CD981698AD98AE990299009907999D999C99C399B999BB99BA99C2 -99BD99C79AB19AE39AE79B3E9B3F9B609B619B5F9CF19CF29CF59EA750FF5103 -513050F85106510750F650FE510B510C50FD510A528B528C52F152EF56485642 -564C56355641564A564956465658565A56405633563D562C563E5638562A563A -571A58AB589D58B158A058A358AF58AC58A558A158FF5AFF5AF45AFD5AF70000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -50 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005AF65B035AF85B025AF95B015B075B055B0F5C675D995D975D9F5D925DA2 -5D935D955DA05D9C5DA15D9A5D9E5E695E5D5E605E5C7DF35EDB5EDE5EE15F49 -5FB2618B6183617961B161B061A26189619B619361AF61AD619F619261AA61A1 -618D616661B3622D646E6470649664A064856497649C648F648B648A648C64A3 -649F646864B164986576657A6579657B65B265B366B566B066A966B266B766AA -66AF6A006A066A1769E569F86A1569F169E46A2069FF69EC69E26A1B6A1D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -51 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000069FE6A2769F269EE6A1469F769E76A406A0869E669FB6A0D69FC69EB6A09 -6A046A186A256A0F69F66A266A0769F46A166B516BA56BA36BA26BA66C016C00 -6BFF6C026F416F266F7E6F876FC66F926F8D6F896F8C6F626F4F6F856F5A6F96 -6F766F6C6F826F556F726F526F506F576F946F936F5D6F006F616F6B6F7D6F67 -6F906F536F8B6F696F7F6F956F636F776F6A6F7B71B271AF719B71B071A0719A -71A971B5719D71A5719E71A471A171AA719C71A771B37298729A735873520000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -52 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000735E735F7360735D735B7361735A7359736274877489748A74867481747D -74857488747C747975087507757E7625761E7619761D761C7623761A7628761B -769C769D769E769B778D778F7789778878CD78BB78CF78CC78D178CE78D478C8 -78C378C478C9799A79A179A0799C79A2799B6B767A397AB27AB47AB37BB77BCB -7BBE7BAC7BCE7BAF7BB97BCA7BB57CC57CC87CCC7CCB7DF77DDB7DEA7DE77DD7 -7DE17E037DFA7DE67DF67DF17DF07DEE7DDF7F767FAC7FB07FAD7FED7FEB0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -53 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007FEA7FEC7FE67FE88064806781A3819F819E819581A2819981978216824F -825382528250824E82518524853B850F85008529850E8509850D851F850A8527 -851C84FB852B84FA8508850C84F4852A84F2851584F784EB84F384FC851284EA -84E9851684FE8528851D852E850284FD851E84F68531852684E784E884F084EF -84F9851885208530850B8519852F8662875687638764877787E1877387588754 -875B87528761875A8751875E876D876A8750874E875F875D876F876C877A0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -54 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000876E875C8765874F877B8775876287678769885A8905890C8914890B8917 -89188919890689168911890E890989A289A489A389ED89F089EC8ACF8AC68AB8 -8AD38AD18AD48AD58ABB8AD78ABE8AC08AC58AD88AC38ABA8ABD8AD98C3E8C4D -8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA08D9C8DA18D9B8E208E238E258E24 -8E2E8E158E1B8E168E118E198E268E278E148E128E188E138E1C8E178E1A8F2C -8F248F188F1A8F208F238F168F1790739070906F9067906B912F912B91290000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -55 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000912A91329126912E91859186918A918191829184918092D092C392C492C0 -92D992B692CF92F192DF92D892E992D792DD92CC92EF92C292E892CA92C892CE -92E692CD92D592C992E092DE92E792D192D392B592E1932592C692B4957C95AC -95AB95AE95B096A496A296D3970597089702975A978A978E978897D097CF981E -981D9826982998289820981B982798B2990898FA9911991499169917991599DC -99CD99CF99D399D499CE99C999D699D899CB99D799CC9AB39AEC9AEB9AF30000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -56 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009AF29AF19B469B439B679B749B719B669B769B759B709B689B649B6C9CFC -9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D049E839ED39F0F9F10511C -51135117511A511151DE533453E156705660566E567356665663566D5672565E -5677571C571B58C858BD58C958BF58BA58C258BC58C65B175B195B1B5B215B14 -5B135B105B165B285B1A5B205B1E5BEF5DAC5DB15DA95DA75DB55DB05DAE5DAA -5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE95EE75EE65EE85EE55F4B0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -57 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00005FBC5FBB619D61A8619661C561B461C661C161CC61BA61BF61B8618C64D7 -64D664D064CF64C964BD648964C364DB64F364D96533657F657C65A266C866BE -66C066CA66CB66CF66BD66BB66BA66CC67236A346A666A496A676A326A686A3E -6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A6A646A506A4F6A546A6F -6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B546B566BA76BAA6BAB6BC8 -6BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC86F5E6FC46FBD6F9E0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -58 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB86FA26FC96FAB6FCD -6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D471CA71C771CF71BD -71D871BC71C671DA71DB729D729E736973667367736C7365736B736A747F749A -74A074947492749574A1750B7580762F762D7631763D7633763C763576327630 -76BB76E6779A779D77A1779C779B77A277A377957799779778DD78E978E578EA -78DE78E378DB78E178E278ED78DF78E079A47A447A487A477AB67AB87AB50000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -59 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF97BD47BEA7BE27BDC -7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C7E1F7E207E137E0E -7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F437F7B7F7C7F7A7FB1 -7FEF802A8029806C81B181A681AE81B981B581AB81B081AC81B481B281B781A7 -81F282558256825785568545856B854D85538561855885408546856485418562 -8544855185478563853E855B8571854E856E8575855585678560858C85660000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000855D85548565856C86638665866487A4879B878F87978793879287888781 -879687988779878787A3878587908791879D87848794879C879A8789891E8926 -8930892D892E89278931892289298923892F892C891F89F18AE08AE28AF28AF4 -8AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF8AFB8C918C928C90 -8CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E388E408E458E368E3C -8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F3490769079907B0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000908690FA913391359136919391909191918D918F9327931E9308931F9306 -930F937A9338933C931B9323931293019346932D930E930D92CB931D92FA9313 -92F992F793349302932492FF932993399335932A9314930C930B92FE93099300 -92FB931695BC95CD95BE95B995BA95B695BF95B595BD96A996D4970B97129710 -97999797979497F097F89835982F98329924991F99279929999E99EE99EC99E5 -99E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA9AF99AF79B330000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B959B7D9B889D25 -9D179D209D1E9D149D299D1D9D189D229D109D199D1F9E889E869E879EAE9EAD -9ED59ED69EFA9F129F3D51265125512251245120512952F45693568C568D5686 -56845683567E5682567F568158D658D458CF58D25B2D5B255B325B235B2C5B27 -5B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE61C361B561BC61E761E061E5 -61E461E861DE64EF64E964E364EB64E464E86581658065B665DA66D26A8D0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E6A956A836AA86AA4 -6A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA96FF46FD46FE36FDC -6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F271E471F071E27373 -736E736F749774B274AB749074AA74AD74B174A574AF751075117512750F7584 -764376487649764776A476E977B577AB77B277B777B677B477B177A877F078F3 -78FD790278FB78FC78FF78F2790578F978FE790479AB79A87A5C7A5B7A560000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00007A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB7C0E7BF47C0B -7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE87E2D7E3C7E42 -7E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E447E3A7F457F7F -7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9825B825A825C -85838580858F85A7859585A0858B85A3857B85A4859A859E8577857C858985A1 -857A85788557858E85968586858D8599859D858185A285828588858585790000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -5f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000857685988590859F866887BE87AA87AD87C587B087AC87B987B587BC87AE -87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE87B28935 -8933893C893E894189528937894289AD89AF89AE89F289F38B1E8B188B168B11 -8B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B138B1A8C4F8C708C72 -8C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E478F438F409085907E -9138919A91A2919B9199919F91A1919D91A093A1938393AF9364935693470000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -60 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000937C9358935C93769349935093519360936D938F934C936A937993579355 -9352934F93719377937B9361935E93639367934E935995C795C095C995C395C5 -95B796AE96B096AC9720971F9718971D9719979A97A1979C979E979D97D597D4 -97F198419844984A9849984598439925992B992C992A99339932992F992D9931 -9930999899A399A19A0299FA99F499F799F999F899F699FB99FD99FE99FC9A03 -9ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA19BA59BA49B860000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -61 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D309D459D429D43 -9D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA9EFB9EFF9F249F23 -9F229F549FA05131512D512E5698569C5697569A569D569959705B3C5C695C6A -5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D661E964FF650464FD -64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD6AE16AC66ABA6AB6 -6AB76AC76AB46AAD6B5E6BC96C0B7007700C700D700170057014700E6FFF0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -62 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000070006FFB70266FFC6FF7700A720171FF71F9720371FD737674B874C074B5 -74C174BE74B674BB74C275147513765C76647659765076537657765A76A676BD -76EC77C277BA790C79137914790979107912791179AD79AC7A5F7C1C7C297C19 -7C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E567E637E587E627E5F -7E517E607E577E537FB57FB37FF77FF8807581D181D281D0825F825E85B485C6 -85C085C385C285B385B585BD85C785C485BF85CB85CE85C885C585B185B60000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -63 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000085D2862485B885B785BE866987E787E687E287DB87EB87EA87E587DF87F3 -87E487D487DC87D387ED87D887E387D787D9880187F487E887DD8953894B894F -894C89468950895189498B2A8B278B238B338B308B358B478B2F8B3C8B3E8B31 -8B258B378B268B368B2E8B248B3B8B3D8B3A8C428C758C998C988C978CFE8D04 -8D028D008E5C8E628E608E578E568E5E8E658E678E5B8E5A8E618E5D8E698E54 -8F468F478F488F4B9128913A913B913E91A891A591A791AF91AA93B5938C0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -64 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000939293B7939B939D938993A7938E93AA939E93A6939593889399939F9380 -938D93B1939193B293A493A893B493A395D295D395D196B396D796DA5DC296DF -96D896DD97239722972597AC97AE97A897AB97A497AA97A297A597D797D997D6 -97D897FA98509851985298B89941993C993A9A0F9A0B9A099A0D9A049A119A0A -9A059A079A069AC09ADC9B089B049B059B299B359B4A9B4C9B4B9BC79BC69BC3 -9BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C9D539D4F9D4A9D5B9D4B0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -65 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C9EDF9F019F009F16 -9F259F2B9F2A9F299F289F4C9F5551345135529652F753B456AB56AD56A656A7 -56AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E705FBF61FB65076510650D -6509650C650E658465DE65DD66DE6AE76AE06ACC6AD16AD96ACB6ADF6ADC6AD0 -6AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016702B7021702270237029 -70177024701C720C720A72077202720572A572A672A472A372A174CB74C50000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -66 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000074B774C37516766077C977CA77C477F1791D791B7921791C7917791E79B0 -7A677A687C337C3C7C397C2C7C3B7CEC7CEA7E767E757E787E707E777E6F7E7A -7E727E747E687F4B7F4A7F837F867FB77FFD7FFE807881D781D5820B82648261 -826385EB85F185ED85D985E185E885DA85D785EC85F285F885D885DF85E385DC -85D185F085E685EF85DE85E2880087FA880387F687F78809880C880B880687FC -880887FF880A88028962895A895B89578961895C8958895D8959898889B70000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -67 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000089B689F68B508B488B4A8B408B538B568B548B4B8B558B518B428B528B57 -8C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D8E788E738E6A8E6F -8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD93DE93C793CF93C2 -93DA93D093F993EC93CC93D993A993E693CA93D493EE93E393D593C493CE93C0 -93D293A593E7957D95DA95DB96E19729972B972C9728972697B397B797B697DD -97DE97DF985C9859985D985798BF98BD98BB98BE99489947994399A699A70000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -68 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C9A149AC29B0B -9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD49BD79BEC9BDC -9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D789D869D8B9D8C -9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F9D879D689E94 -9E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B256B556B358E35B45 -5DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF66E866E366E40000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -69 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F7037703470317042 -7038703F703A7039702A7040703B703370417213721472A8737D737C74BA76AB -76AA76BE76ED77CC77CE77CF77CD77F279257923792779287924792979B27A6E -7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E807FBA7FFF8079 -81DB81D982688269862285FF860185FE861B860085F6860486098605860C85FD -8819881088118817881388168963896689B989F78B608B6A8B5D8B688B630000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A908D9143 -914191B791B591B291B3940B941393FB9420940F941493FE9415941094289419 -940D93F5940093F79407940E9416941293FA940993F8943C940A93FF93FC940C -93F69411940695DE95E095DF972E972F97B997BB97FD97FE986098629863985F -98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A369A299A2E -9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF89C400000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B9DA0 -9D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA69DA79E99 -9E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91513A5139 -5298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC6B036AF8 -6B0070437044704A7048704970457046721D721A7219737E7517766A77D0792D -7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB803081DD0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6c -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00008618862A8626861F8623861C86198627862E862186208629861E86258829 -881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B458B7A -8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B9436 -9429943D94309439942A9437942C9440943195E595E495E39735973A97BF97E1 -986498C998C698C0995899569A399A3D9A469A449A429A419A3A9A3F9ACD9B15 -9B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C299C249C219DB70000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6d -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB99DBA9DAC -9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F189F1A9F31 -9F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF265216520 -652665226B0B6B086B096C0D7055705670577052721E721F72A9737F74D874D5 -74D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A7CF47CF17E91 -7F4F7F8781DE826B863486358633862C86328636882C88288826882A88250000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A8E92 -8E908E968E978F608F629147944C9450944A944B944F94479445944894499446 -973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A9A499A52 -9A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C339C419C3C9C37 -9C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF9DE99DD99DD8 -9DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2513D52990000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -6f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -000058E858E759725B4D5DD8882F5F4F62016203620465296525659666EB6B11 -6B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C863A -86408639863C8631863B863E88308832882E883389768974897389FE8B8C8B8E -8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C497C59800 -9A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C9C4E9DFB -9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC9DF40000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -70 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00009DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F9F71 -9F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D70607223 -74DB74E577D5793879B779B67C6A7E977F89826D8643883888378835884B8B94 -8B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743974797C7 -97E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E039E069E05 -9E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E65B80000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -71 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00006B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A7E98 -7E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA58EA4 -8EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E109E0F -9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB28EA6 -91C394749478947694759A609B2E9C749C739C719C759E149E139EF69F0A9FA4 -706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B9873987498CC0000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -72 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482 -948094819A699A689E19864B8B9F94839C799EB776759A6B9C7A9E1D7069706A -72299EA49F7E9F499F9800000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 +# Encoding file: cns11643-2, double-byte +D +7244 0 82 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E424E5C51F5531A53824E074E0C4E474E8D56D75C6E5F734E0F51874E0E +4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3 +6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C5209531C534C5722 +57235917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C15 +6C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F144EF1 +4F004EF74F084F1D4F024F054F224F134F044EF44F1251B15213521052A60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005322531F534D538A540756E156DF572E572A5734593C5980597C5985597B +597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74 +5FD55FD45FCF625C625E626462616266626262596260625A6265653765EF65EE +673E67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B +6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D +897E909990979098909B909496229624962096234F564F3B4F624F494F530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F644F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E +522152AD52AE530953635372538E538F54305437542A545454455419541C5425 +5418543D544F544154285424544756EE56E756E557415745574C5749574B5752 +5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A +5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C +5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005FE35FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271 +627B627A6270628162886277627D6272627465F065F465F365F265F567456747 +67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B +6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A +726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594 +75957681793D80348095809980908092809C8290828F8285828E829182930000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F +962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A +4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE +5235523252335246523152BC530A530B533C539253945487547F548154915482 +5488546B547A547E5465546C54745466548D546F546154605498546354675464 +56F756F9576F5772576D576B57715770577657805775577B5773577457620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D6 +59B159BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB5 +5CAF5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E14 +5E195F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B +6034600A60176033601A601E602C6022600D6010602E60136011600C6009601C +6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD +6611661066F6670A6785676C678E67926776677B6798678667846774678D678C +677A679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C93 +6CEC6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF2 +6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1 +709470987085709370867084709170967082709A7083726A72D672CB72D80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072C972DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D +74DD74E8753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB +77FA77F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5 +80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8 +82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD +8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FD34FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC0 +4FB94FEC5244524952C052C2533D537C539753965399539854BA54A154AD54A5 +54CF54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE +54B057B5579E579F57A4578C5797579D579B57945798578F579957A5579A5795 +58F4590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F7 +59DB59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005CDB5CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF8 +5DF95E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F86 +6037603960546072605E6045605360476049605B604C60406042605F60246044 +60586066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F8 +62F663006313631462FA631562FB62F06541654365AA65BF6636662166326635 +661C662666226633662B663A661D66346639662E670F671067C167F267C80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000067BA67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F7 +67F667EE67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB +67FA67C967CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D28 +6D346D2D6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D +6D426D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F +70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072E472E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B5 +73B473EB73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA +767976C47708770377047705770A76F776FB76FA77E777E87806781178127805 +7810780F780E780978037813794A794C794B7945794479D579CD79CF79D679CE +7A807A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F91 +7F8D7FBE8007800E800F8014803780D880C780E080D180C880C280D080C50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080E380D980DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE +82F9830782E8830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F6 +82F082EA82E482E082FA82F382ED86778674867C86738841884E8867886A8869 +89D38A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB +90C891D491D39654964F96519653964A964E501E50055007501350225030501B +4FF54FF450335037502C4FF64FF75017501C502050275035502F5031500E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000515A5194519351CA51C451C551C851CE5261525A5252525E525F52555262 +52CD530E539E552654E25517551254E754F354E4551A54FF5504550854EB5511 +550554F1550A54FB54F754F854E0550E5503550B5701570257CC583257D557D2 +57BA57C657BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D +5A2E5A155A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF +5CEE5CF15CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000605A6067604160A26088608060926081609D60836095609B60976087609C +608E6219624662F263106356632C634463456336634363E46339634B634A633C +632963416334635863546359632D63476333635A63516338635763406348654A +654665C665C365C465C2664A665F6647665167126713681F681A684968326833 +683B684B684F68166831681C6835682B682D682F684E68446834681D68126814 +68266828682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B880000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006BE66BE46BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D58 +6D626D6D6D6F6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D82 +6D986D2F6D686D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D1 +70DD70CB7F3970E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1 +7242727872777276730072FA72F472FE72F672F372FB730173D373D973E573D6 +73BC73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074F474F57521755B755F75B075C175BB75C475C075BF75B675BA768A76C9 +771D771B7710771377127723771177157719771A772277277823782C78227835 +782F7828782E782B782178297833782A78317954795B794F795C795379527951 +79EB79EC79E079EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A87 +7AD87B107B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C88 +7C8D7C857D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F610000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F5E7F607F5D7F5B7F967F927FC37FC27FC08016803E803980FA80F280F9 +80F5810180FB81008201822F82258333832D83448319835183258356833F8341 +8326831C83228342834E831B832A8308833C834D8316832483208337832F8329 +83478345834C8353831E832C834B832783488653865286A286A88696868D8691 +869E868786978686868B869A868586A5869986A186A786958698868E869D8690 +869488438844886D88758876887288808871887F886F8883887E8874887C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008A128C478C578C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF5 +90028FFF8FFB90048FFC8FF690D690E090D990DA90E390DF90E590D890DB90D7 +90DC90E49150914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070 +506A5061505E50605053504B505D50725048504D5041505B504A506250155045 +505F5069506B5063506450465040506E50735057505151D0526B526D526C526E +52D652D3532D539C55755576553C554D55505534552A55515562553655350000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000553055525545550C55325565554E55395548552D553B5540554B570A5707 +57FB581457E257F657DC57F4580057ED57FD580857F8580B57F357CF580757EE +57E357F257E557EC57E1580E57FC581057E75801580C57F157E957F0580D5804 +595C5A605A585A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A57 +5A435A5D5A525A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A56 +5A425A5C5B725B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D265D255D0F5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB3 +5F365F385F9B5F965F9F608A6090608660BE60B060BA60D360D460CF60E460D9 +60DD60C860B160DB60B760CA60BF60C360CD60C063326365638A6382637D63BD +639E63AD639D639763AB638E636F63876390636E63AF6375639C636D63AE637C +63A4633B639F6378638563816391638D6370655365CD66656661665B6659665C +66626718687968876890689C686D686E68AE68AB6956686F68A368AC68A90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006875687468B2688F68776892687C686B687268AA68806871687E689B6896 +688B68A0688968A46878687B6891688C688A687D6B366B336B376B386B916B8F +6B8D6B8E6B8C6C2A6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E00 +6DC86DE06DDF6DD66DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD5 +6DC26DCF6DC96DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4 +710C70F0710470F3711070FC70FF71067113710070F870F6710B7102710E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000727E727B727C727F731D7317730773117318730A730872FF730F731E7388 +73F673F873F57404740173FD7407740073FA73FC73FF740C740B73F474087564 +756375CE75D275CF75CB75CC75D175D0768F768976D37739772F772D77317732 +77347733773D7725773B7735784878527849784D784A784C7826784578507964 +79677969796A7963796B796179BB79FA79F879F679F77A8F7A947A907B357B3B +7B347B257B307B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B380000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007B1A7B237C947C987C967CA37D357D3D7D387D367D3A7D457D2C7D297D41 +7D477D3E7D3F7D4A7D3B7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD1 +7FC77FCF7FC9801F801E801B804780438048811881258119811B812D811F812C +811E812181158127811D8122821182388233823A823482328274839083A383A8 +838D837A837383A48374838F8381839583998375839483A9837D8383838C839D +839B83AA838B837E83A583AF8388839783B0837F83A6838783AE837686590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000865686BF86B786C286C186C586BA86B086C886B986B386B886CC86B486BB +86BC86C386BD86BE88528889889588A888A288AA889A889188A1889F889888A7 +8899889B889788A488AC888C8893888E898289D689D989D58A308A278A2C8A1E +8C398C3B8C5C8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE +8EDD8EDC8ED78EE08EE19024900B9011901C900C902190EF90EA90F090F490F2 +90F390D490EB90EC90E991569158915A9153915591EC91F491F191F391F80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000091E491F991EA91EB91F791E891EE957A95869588967C966D966B9671966F +96BF976A980498E59997509B50955094509E508B50A35083508C508E509D5068 +509C509250825087515F51D45312531153A453A7559155A855A555AD55775645 +55A255935588558F55B5558155A3559255A4557D558C55A6557F559555A1558E +570C582958375819581E58275823582857F558485825581C581B5833583F5836 +582E58395838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005A7C5AA55AAC5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C +5A9C5A8F5A935A9D5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B +5D415D4B5D3F5D355D515D4E5D555D335D3A5D525D3D5D315D595D425D395D49 +5D385D3C5D325D365D405D455E445E415F585FA65FA55FAB60C960B960CC60E2 +60CE60C4611460F2610A6116610560F5611360F860FC60FE60C161036118611D +611060FF6104610B624A639463B163B063CE63E563E863EF63C3649D63F30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063CA63E063F663D563F263F5646163DF63BE63DD63DC63C463D863D363C2 +63C763CC63CB63C863F063D763D965326567656A6564655C65686565658C659D +659E65AE65D065D2667C666C667B668066716679666A66726701690C68D36904 +68DC692A68EC68EA68F1690F68D668F768EB68E468F66913691068F368E16907 +68CC6908697068B4691168EF68C6691468F868D068FD68FC68E8690B690A6917 +68CE68C868DD68DE68E668F468D1690668D468E96915692568C76B396B3B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B3F6B3C6B946B976B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F +6E496E886E3C6E3D6E456E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E51 +6E3B6E036E2E6E5E6E686E5C6E616E316E286E606E716E6B6E396E226E306E53 +6E656E276E786E646E776E556E796E526E666E356E366E5A7120711E712F70FB +712E71317123712571227132711F7128713A711B724B725A7288728972867285 +728B7312730B733073227331733373277332732D732673237335730C742E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000742C7430742B7416741A7421742D743174247423741D74297420743274FB +752F756F756C75E775DA75E175E675DD75DF75E475D77695769276DA77467747 +7744774D7745774A774E774B774C77DE77EC786078647865785C786D7871786A +786E787078697868785E786279747973797279707A027A0A7A037A0C7A047A99 +7AE67AE47B4A7B477B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D58 +7D6F7D637D537D567D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D4E7F3E7F3F7F657F667FA27FA07FA17FD78051804F805080FE80D48143 +814A8152814F8147813D814D813A81E681EE81F781F881F98204823C823D823F +8275833B83CF83F9842383C083E8841283E783E483FC83F6841083C683C883EB +83E383BF840183DD83E583D883FF83E183CB83CE83D683F583C98409840F83DE +8411840683C283F383D583FA83C783D183EA8413839A83C383EC83EE83C483FB +83D783E2841B83DB83FE86D886E286E686D386E386DA86EA86DD86EB86DC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000086EC86E986D786E886D188488856885588BA88D788B988B888C088BE88B6 +88BC88B788BD88B2890188C989958998899789DD89DA89DB8A4E8A4D8A398A59 +8A408A578A588A448A458A528A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE +8CB08CB98CB58D848D808D898DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC8 +8DD78DC58EEF8EF78EFA8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC +8EF48EE9902D9034902F9106912C910490FF90FC910890F990FB910191000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000091079105910391619164915F916291609201920A92259203921A9226920F +920C9200921291FF91FD9206920492279202921C92249219921792059216957B +958D958C95909687967E968896899683968096C296C896C396F196F0976C9770 +976E980798A998EB9CE69EF94E834E844EB650BD50BF50C650AE50C450CA50B4 +50C850C250B050C150BA50B150CB50C950B650B851D7527A5278527B527C55C3 +55DB55CC55D055CB55CA55DD55C055D455C455E955BF55D2558D55CF55D50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000055E255D655C855F255CD55D955C25714585358685864584F584D5849586F +5855584E585D58595865585B583D5863587158FC5AC75AC45ACB5ABA5AB85AB1 +5AB55AB05ABF5AC85ABB5AC65AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD8 +5BD95C1F5C335D715D635D4A5D655D725D6C5D5E5D685D675D625DF05E4F5E4E +5E4A5E4D5E4B5EC55ECC5EC65ECB5EC75F405FAF5FAD60F76149614A612B6145 +61366132612E6146612F614F612961406220916862236225622463C563F10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063EB6410641264096420642464336443641F641564186439643764226423 +640C64266430642864416435642F640A641A644064256427640B63E7641B642E +6421640E656F659265D36686668C66956690668B668A66996694667867206966 +695F6938694E69626971693F6945696A6939694269576959697A694869496935 +696C6933693D696568F06978693469696940696F69446976695869416974694C +693B694B6937695C694F695169326952692F697B693C6B466B456B436B420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B486B416B9B6BFB6BFC6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E93 +6E946EA06EB16EB96EC66ED26EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB2 +6EBE6EC36EDC6ED86E996E926E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE +6EA3714771547152716371607141715D716271727178716A7161714271587143 +714B7170715F715071537144714D715A724F728D728C72917290728E733C7342 +733B733A7340734A73497444744A744B7452745174577440744F7450744E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074427446744D745474E174FF74FE74FD751D75797577698375EF760F7603 +75F775FE75FC75F975F8761075FB75F675ED75F575FD769976B576DD7755775F +776077527756775A7769776777547759776D77E07887789A7894788F78847895 +7885788678A178837879789978807896787B797C7982797D79797A117A187A19 +7A127A177A157A227A137A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B69 +7B727B657B737B717B707B617B787B767B637CB27CB47CAF7D887D867D800000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D8D7D7F7D857D7A7D8E7D7B7D837D7C7D8C7D947D847D7D7D927F6D7F6B +7F677F687F6C7FA67FA57FA77FDB7FDC8021816481608177815C8169815B8162 +81726721815E81768167816F81448161821D8249824482408242824584F1843F +845684768479848F848D846584518440848684678430844D847D845A84598474 +8473845D8507845E8437843A8434847A8443847884328445842983D9844B842F +8442842D845F84708439844E844C8452846F84C5848E843B8447843684330000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008468847E8444842B84608454846E8450870B870486F7870C86FA86D686F5 +874D86F8870E8709870186F6870D870588D688CB88CD88CE88DE88DB88DA88CC +88D08985899B89DF89E589E489E189E089E289DC89E68A768A868A7F8A618A3F +8A778A828A848A758A838A818A748A7A8C3C8C4B8C4A8C658C648C668C868C84 +8C858CCC8D688D698D918D8C8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC +8DF18DEE8DD08DE98DE38DE28DE78DF28DEB8DF48F068EFF8F018F008F050000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F078F088F028F0B9052903F90449049903D9110910D910F911191169114 +910B910E916E916F924892529230923A926692339265925E9283922E924A9246 +926D926C924F92609267926F92369261927092319254926392509272924E9253 +924C92569232959F959C959E959B969296939691969796CE96FA96FD96F896F5 +9773977797789772980F980D980E98AC98F698F999AF99B299B099B59AAD9AAB +9B5B9CEA9CED9CE79E809EFD50E650D450D750E850F350DB50EA50DD50E40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050D350EC50F050EF50E350E051D85280528152E952EB533053AC56275615 +560C561255FC560F561C56015613560255FA561D560455FF55F95889587C5890 +589858865881587F5874588B587A58875891588E587658825888587B5894588F +58FE596B5ADC5AEE5AE55AD55AEA5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE +5ADD5AD95AE85ADF5B775BE05BE35C635D825D805D7D5D865D7A5D815D775D8A +5D895D885D7E5D7C5D8D5D795D7F5E585E595E535ED85ED15ED75ECE5EDC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005ED55ED95ED25ED45F445F435F6F5FB6612C61286141615E617161736152 +61536172616C618061746154617A615B6165613B616A6161615662296227622B +642B644D645B645D6474647664726473647D6475646664A6644E6482645E645C +644B645364606450647F643F646C646B645964656477657365A066A166A0669F +67056704672269B169B669C969A069CE699669B069AC69BC69916999698E69A7 +698D69A969BE69AF69BF69C469BD69A469D469B969CA699A69CF69B369930000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000069AA69A1699E69D96997699069C269B569A569C66B4A6B4D6B4B6B9E6B9F +6BA06BC36BC46BFE6ECE6EF56EF16F036F256EF86F376EFB6F2E6F096F4E6F19 +6F1A6F276F186F3B6F126EED6F0A6F366F736EF96EEE6F2D6F406F306F3C6F35 +6EEB6F076F0E6F436F056EFD6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21 +718771907189718071857182718F717B71867181719772447253729772957293 +7343734D7351734C746274737471747574727467746E750075027503757D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000759076167608760C76157611760A761476B87781777C77857782776E7780 +776F777E778378B278AA78B478AD78A8787E78AB789E78A578A078AC78A278A4 +7998798A798B799679957994799379977988799279907A2B7A4A7A307A2F7A28 +7A267AA87AAB7AAC7AEE7B887B9C7B8A7B917B907B967B8D7B8C7B9B7B8E7B85 +7B9852847B997BA47B827CBB7CBF7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC0 +7DC57D9D7DCE7DC47DC67DCB7DCC7DAF7DB97D967DBC7D9F7DA67DAE7DA90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007DA17DC97F737FE27FE37FE57FDE8024805D805C8189818681838187818D +818C818B8215849784A484A1849F84BA84CE84C284AC84AE84AB84B984B484C1 +84CD84AA849A84B184D0849D84A784BB84A2849484C784CC849B84A984AF84A8 +84D6849884B684CF84A084D784D484D284DB84B084918661873387238728876B +8740872E871E87218719871B8743872C8741873E874687208732872A872D873C +8712873A8731873587428726872787388724871A8730871188F788E788F10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000088F288FA88FE88EE88FC88F688FB88F088EC88EB899D89A1899F899E89E9 +89EB89E88AAB8A998A8B8A928A8F8A968C3D8C688C698CD58CCF8CD78D968E09 +8E028DFF8E0D8DFD8E0A8E038E078E068E058DFE8E008E048F108F118F0E8F0D +9123911C91209122911F911D911A91249121911B917A91729179917392A592A4 +9276929B927A92A0929492AA928D92A6929A92AB92799297927F92A392EE928E +9282929592A2927D928892A1928A9286928C929992A7927E928792A9929D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000928B922D969E96A196FF9758977D977A977E978397809782977B97849781 +977F97CE97CD981698AD98AE990299009907999D999C99C399B999BB99BA99C2 +99BD99C79AB19AE39AE79B3E9B3F9B609B619B5F9CF19CF29CF59EA750FF5103 +513050F85106510750F650FE510B510C50FD510A528B528C52F152EF56485642 +564C56355641564A564956465658565A56405633563D562C563E5638562A563A +571A58AB589D58B158A058A358AF58AC58A558A158FF5AFF5AF45AFD5AF70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005AF65B035AF85B025AF95B015B075B055B0F5C675D995D975D9F5D925DA2 +5D935D955DA05D9C5DA15D9A5D9E5E695E5D5E605E5C7DF35EDB5EDE5EE15F49 +5FB2618B6183617961B161B061A26189619B619361AF61AD619F619261AA61A1 +618D616661B3622D646E6470649664A064856497649C648F648B648A648C64A3 +649F646864B164986576657A6579657B65B265B366B566B066A966B266B766AA +66AF6A006A066A1769E569F86A1569F169E46A2069FF69EC69E26A1B6A1D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000069FE6A2769F269EE6A1469F769E76A406A0869E669FB6A0D69FC69EB6A09 +6A046A186A256A0F69F66A266A0769F46A166B516BA56BA36BA26BA66C016C00 +6BFF6C026F416F266F7E6F876FC66F926F8D6F896F8C6F626F4F6F856F5A6F96 +6F766F6C6F826F556F726F526F506F576F946F936F5D6F006F616F6B6F7D6F67 +6F906F536F8B6F696F7F6F956F636F776F6A6F7B71B271AF719B71B071A0719A +71A971B5719D71A5719E71A471A171AA719C71A771B37298729A735873520000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000735E735F7360735D735B7361735A7359736274877489748A74867481747D +74857488747C747975087507757E7625761E7619761D761C7623761A7628761B +769C769D769E769B778D778F7789778878CD78BB78CF78CC78D178CE78D478C8 +78C378C478C9799A79A179A0799C79A2799B6B767A397AB27AB47AB37BB77BCB +7BBE7BAC7BCE7BAF7BB97BCA7BB57CC57CC87CCC7CCB7DF77DDB7DEA7DE77DD7 +7DE17E037DFA7DE67DF67DF17DF07DEE7DDF7F767FAC7FB07FAD7FED7FEB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007FEA7FEC7FE67FE88064806781A3819F819E819581A2819981978216824F +825382528250824E82518524853B850F85008529850E8509850D851F850A8527 +851C84FB852B84FA8508850C84F4852A84F2851584F784EB84F384FC851284EA +84E9851684FE8528851D852E850284FD851E84F68531852684E784E884F084EF +84F9851885208530850B8519852F8662875687638764877787E1877387588754 +875B87528761875A8751875E876D876A8750874E875F875D876F876C877A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000876E875C8765874F877B8775876287678769885A8905890C8914890B8917 +89188919890689168911890E890989A289A489A389ED89F089EC8ACF8AC68AB8 +8AD38AD18AD48AD58ABB8AD78ABE8AC08AC58AD88AC38ABA8ABD8AD98C3E8C4D +8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA08D9C8DA18D9B8E208E238E258E24 +8E2E8E158E1B8E168E118E198E268E278E148E128E188E138E1C8E178E1A8F2C +8F248F188F1A8F208F238F168F1790739070906F9067906B912F912B91290000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000912A91329126912E91859186918A918191829184918092D092C392C492C0 +92D992B692CF92F192DF92D892E992D792DD92CC92EF92C292E892CA92C892CE +92E692CD92D592C992E092DE92E792D192D392B592E1932592C692B4957C95AC +95AB95AE95B096A496A296D3970597089702975A978A978E978897D097CF981E +981D9826982998289820981B982798B2990898FA9911991499169917991599DC +99CD99CF99D399D499CE99C999D699D899CB99D799CC9AB39AEC9AEB9AF30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AF29AF19B469B439B679B749B719B669B769B759B709B689B649B6C9CFC +9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D049E839ED39F0F9F10511C +51135117511A511151DE533453E156705660566E567356665663566D5672565E +5677571C571B58C858BD58C958BF58BA58C258BC58C65B175B195B1B5B215B14 +5B135B105B165B285B1A5B205B1E5BEF5DAC5DB15DA95DA75DB55DB05DAE5DAA +5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE95EE75EE65EE85EE55F4B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005FBC5FBB619D61A8619661C561B461C661C161CC61BA61BF61B8618C64D7 +64D664D064CF64C964BD648964C364DB64F364D96533657F657C65A266C866BE +66C066CA66CB66CF66BD66BB66BA66CC67236A346A666A496A676A326A686A3E +6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A6A646A506A4F6A546A6F +6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B546B566BA76BAA6BAB6BC8 +6BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC86F5E6FC46FBD6F9E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB86FA26FC96FAB6FCD +6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D471CA71C771CF71BD +71D871BC71C671DA71DB729D729E736973667367736C7365736B736A747F749A +74A074947492749574A1750B7580762F762D7631763D7633763C763576327630 +76BB76E6779A779D77A1779C779B77A277A377957799779778DD78E978E578EA +78DE78E378DB78E178E278ED78DF78E079A47A447A487A477AB67AB87AB50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF97BD47BEA7BE27BDC +7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C7E1F7E207E137E0E +7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F437F7B7F7C7F7A7FB1 +7FEF802A8029806C81B181A681AE81B981B581AB81B081AC81B481B281B781A7 +81F282558256825785568545856B854D85538561855885408546856485418562 +8544855185478563853E855B8571854E856E8575855585678560858C85660000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000855D85548565856C86638665866487A4879B878F87978793879287888781 +879687988779878787A3878587908791879D87848794879C879A8789891E8926 +8930892D892E89278931892289298923892F892C891F89F18AE08AE28AF28AF4 +8AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF8AFB8C918C928C90 +8CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E388E408E458E368E3C +8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F3490769079907B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000908690FA913391359136919391909191918D918F9327931E9308931F9306 +930F937A9338933C931B9323931293019346932D930E930D92CB931D92FA9313 +92F992F793349302932492FF932993399335932A9314930C930B92FE93099300 +92FB931695BC95CD95BE95B995BA95B695BF95B595BD96A996D4970B97129710 +97999797979497F097F89835982F98329924991F99279929999E99EE99EC99E5 +99E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA9AF99AF79B330000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B959B7D9B889D25 +9D179D209D1E9D149D299D1D9D189D229D109D199D1F9E889E869E879EAE9EAD +9ED59ED69EFA9F129F3D51265125512251245120512952F45693568C568D5686 +56845683567E5682567F568158D658D458CF58D25B2D5B255B325B235B2C5B27 +5B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE61C361B561BC61E761E061E5 +61E461E861DE64EF64E964E364EB64E464E86581658065B665DA66D26A8D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E6A956A836AA86AA4 +6A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA96FF46FD46FE36FDC +6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F271E471F071E27373 +736E736F749774B274AB749074AA74AD74B174A574AF751075117512750F7584 +764376487649764776A476E977B577AB77B277B777B677B477B177A877F078F3 +78FD790278FB78FC78FF78F2790578F978FE790479AB79A87A5C7A5B7A560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB7C0E7BF47C0B +7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE87E2D7E3C7E42 +7E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E447E3A7F457F7F +7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9825B825A825C +85838580858F85A7859585A0858B85A3857B85A4859A859E8577857C858985A1 +857A85788557858E85968586858D8599859D858185A285828588858585790000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000857685988590859F866887BE87AA87AD87C587B087AC87B987B587BC87AE +87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE87B28935 +8933893C893E894189528937894289AD89AF89AE89F289F38B1E8B188B168B11 +8B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B138B1A8C4F8C708C72 +8C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E478F438F409085907E +9138919A91A2919B9199919F91A1919D91A093A1938393AF9364935693470000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000937C9358935C93769349935093519360936D938F934C936A937993579355 +9352934F93719377937B9361935E93639367934E935995C795C095C995C395C5 +95B796AE96B096AC9720971F9718971D9719979A97A1979C979E979D97D597D4 +97F198419844984A9849984598439925992B992C992A99339932992F992D9931 +9930999899A399A19A0299FA99F499F799F999F899F699FB99FD99FE99FC9A03 +9ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA19BA59BA49B860000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D309D459D429D43 +9D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA9EFB9EFF9F249F23 +9F229F549FA05131512D512E5698569C5697569A569D569959705B3C5C695C6A +5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D661E964FF650464FD +64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD6AE16AC66ABA6AB6 +6AB76AC76AB46AAD6B5E6BC96C0B7007700C700D700170057014700E6FFF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000070006FFB70266FFC6FF7700A720171FF71F9720371FD737674B874C074B5 +74C174BE74B674BB74C275147513765C76647659765076537657765A76A676BD +76EC77C277BA790C79137914790979107912791179AD79AC7A5F7C1C7C297C19 +7C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E567E637E587E627E5F +7E517E607E577E537FB57FB37FF77FF8807581D181D281D0825F825E85B485C6 +85C085C385C285B385B585BD85C785C485BF85CB85CE85C885C585B185B60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000085D2862485B885B785BE866987E787E687E287DB87EB87EA87E587DF87F3 +87E487D487DC87D387ED87D887E387D787D9880187F487E887DD8953894B894F +894C89468950895189498B2A8B278B238B338B308B358B478B2F8B3C8B3E8B31 +8B258B378B268B368B2E8B248B3B8B3D8B3A8C428C758C998C988C978CFE8D04 +8D028D008E5C8E628E608E578E568E5E8E658E678E5B8E5A8E618E5D8E698E54 +8F468F478F488F4B9128913A913B913E91A891A591A791AF91AA93B5938C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000939293B7939B939D938993A7938E93AA939E93A6939593889399939F9380 +938D93B1939193B293A493A893B493A395D295D395D196B396D796DA5DC296DF +96D896DD97239722972597AC97AE97A897AB97A497AA97A297A597D797D997D6 +97D897FA98509851985298B89941993C993A9A0F9A0B9A099A0D9A049A119A0A +9A059A079A069AC09ADC9B089B049B059B299B359B4A9B4C9B4B9BC79BC69BC3 +9BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C9D539D4F9D4A9D5B9D4B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C9EDF9F019F009F16 +9F259F2B9F2A9F299F289F4C9F5551345135529652F753B456AB56AD56A656A7 +56AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E705FBF61FB65076510650D +6509650C650E658465DE65DD66DE6AE76AE06ACC6AD16AD96ACB6ADF6ADC6AD0 +6AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016702B7021702270237029 +70177024701C720C720A72077202720572A572A672A472A372A174CB74C50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074B774C37516766077C977CA77C477F1791D791B7921791C7917791E79B0 +7A677A687C337C3C7C397C2C7C3B7CEC7CEA7E767E757E787E707E777E6F7E7A +7E727E747E687F4B7F4A7F837F867FB77FFD7FFE807881D781D5820B82648261 +826385EB85F185ED85D985E185E885DA85D785EC85F285F885D885DF85E385DC +85D185F085E685EF85DE85E2880087FA880387F687F78809880C880B880687FC +880887FF880A88028962895A895B89578961895C8958895D8959898889B70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089B689F68B508B488B4A8B408B538B568B548B4B8B558B518B428B528B57 +8C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D8E788E738E6A8E6F +8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD93DE93C793CF93C2 +93DA93D093F993EC93CC93D993A993E693CA93D493EE93E393D593C493CE93C0 +93D293A593E7957D95DA95DB96E19729972B972C9728972697B397B797B697DD +97DE97DF985C9859985D985798BF98BD98BB98BE99489947994399A699A70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C9A149AC29B0B +9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD49BD79BEC9BDC +9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D789D869D8B9D8C +9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F9D879D689E94 +9E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B256B556B358E35B45 +5DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF66E866E366E40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F7037703470317042 +7038703F703A7039702A7040703B703370417213721472A8737D737C74BA76AB +76AA76BE76ED77CC77CE77CF77CD77F279257923792779287924792979B27A6E +7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E807FBA7FFF8079 +81DB81D982688269862285FF860185FE861B860085F6860486098605860C85FD +8819881088118817881388168963896689B989F78B608B6A8B5D8B688B630000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6a +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A908D9143 +914191B791B591B291B3940B941393FB9420940F941493FE9415941094289419 +940D93F5940093F79407940E9416941293FA940993F8943C940A93FF93FC940C +93F69411940695DE95E095DF972E972F97B997BB97FD97FE986098629863985F +98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A369A299A2E +9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF89C400000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B9DA0 +9D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA69DA79E99 +9E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91513A5139 +5298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC6B036AF8 +6B0070437044704A7048704970457046721D721A7219737E7517766A77D0792D +7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB803081DD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6c +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008618862A8626861F8623861C86198627862E862186208629861E86258829 +881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B458B7A +8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B9436 +9429943D94309439942A9437942C9440943195E595E495E39735973A97BF97E1 +986498C998C698C0995899569A399A3D9A469A449A429A419A3A9A3F9ACD9B15 +9B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C299C249C219DB70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6d +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB99DBA9DAC +9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F189F1A9F31 +9F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF265216520 +652665226B0B6B086B096C0D7055705670577052721E721F72A9737F74D874D5 +74D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A7CF47CF17E91 +7F4F7F8781DE826B863486358633862C86328636882C88288826882A88250000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A8E92 +8E908E968E978F608F629147944C9450944A944B944F94479445944894499446 +973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A9A499A52 +9A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C339C419C3C9C37 +9C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF9DE99DD99DD8 +9DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2513D52990000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000058E858E759725B4D5DD8882F5F4F62016203620465296525659666EB6B11 +6B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C863A +86408639863C8631863B863E88308832882E883389768974897389FE8B8C8B8E +8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C497C59800 +9A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C9C4E9DFB +9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC9DF40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F9F71 +9F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D70607223 +74DB74E577D5793879B779B67C6A7E977F89826D8643883888378835884B8B94 +8B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743974797C7 +97E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E039E069E05 +9E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E65B80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A7E98 +7E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA58EA4 +8EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E109E0F +9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB28EA6 +91C394749478947694759A609B2E9C749C739C719C759E149E139EF69F0A9FA4 +706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B9873987498CC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482 +948094819A699A689E19864B8B9F94839C799EB776759A6B9C7A9E1D7069706A +72299EA49F7E9F499F9800000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/ext/SDBM_File/Makefile.PL b/ext/SDBM_File/Makefile.PL index 0e26609..05e08b5 100644 --- a/ext/SDBM_File/Makefile.PL +++ b/ext/SDBM_File/Makefile.PL @@ -24,7 +24,7 @@ sub MY::postamble { if ($^O =~ /MSWin32/ && Win32::IsWin95()) { if ($Config{'make'} =~ /dmake/i) { # dmake-specific - return <<'EOT'; + return <<'EOT'; $(MYEXTLIB): sdbm/Makefile @[ cd sdbm @@ -34,7 +34,7 @@ $(MYEXTLIB): sdbm/Makefile EOT } elsif ($Config{'make'} =~ /nmake/i) { # - return <<'EOT'; + return <<'EOT'; $(MYEXTLIB): sdbm/Makefile cd sdbm $(MAKE) all diff --git a/jpl/JNI/JNI.xs b/jpl/JNI/JNI.xs index ea67a2e..f482695 100644 --- a/jpl/JNI/JNI.xs +++ b/jpl/JNI/JNI.xs @@ -1,3253 +1,3253 @@ -/* - * Copyright 1997, O'Reilly & Associate, Inc. - * - * This package may be copied under the same terms as Perl itself. - */ - -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" - -#include -#include - -#ifndef PERL_VERSION -# include -# define PERL_REVISION 5 -# define PERL_VERSION PATCHLEVEL -# define PERL_SUBVERSION SUBVERSION -#endif - -#if PERL_REVISION == 5 && (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION <= 75)) -# define PL_na na -# define PL_sv_no sv_no -# define PL_sv_undef sv_undef -# define PL_dowarn dowarn -#endif - -#ifndef newSVpvn -# define newSVpvn(a,b) newSVpv(a,b) -#endif - -#ifndef pTHX -# define pTHX void -# define pTHX_ -# define aTHX -# define aTHX_ -# define dTHX extern int JNI___notused -#endif - -#ifndef WIN32 -# include -#endif - -#ifdef EMBEDDEDPERL -extern JNIEnv* jplcurenv; -extern int jpldebug; -#else -JNIEnv* jplcurenv; -int jpldebug = 1; -#endif - -#define SysRet jint - -#ifdef WIN32 -static void JNICALL call_my_exit(jint status) -{ - my_exit(status); -} -#else -static void call_my_exit(jint status) -{ - my_exit(status); -} -#endif - -jvalue* -makeargs(char *sig, SV** svp, int items) -{ - jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items); - int ix = 0; - char *s = sig; - JNIEnv* env = jplcurenv; - char *start; - STRLEN n_a; - - if (jpldebug) - fprintf(stderr, "sig = %s, items = %d\n", sig, items); - if (*s++ != '(') - goto cleanup; - - while (items--) { - SV *sv = *svp++; - start = s; - switch (*s++) { - case 'Z': - jv[ix++].z = (jboolean)(SvIV(sv) != 0); - break; - case 'B': - jv[ix++].b = (jbyte)SvIV(sv); - break; - case 'C': - jv[ix++].c = (jchar)SvIV(sv); - break; - case 'S': - jv[ix++].s = (jshort)SvIV(sv); - break; - case 'I': - jv[ix++].i = (jint)SvIV(sv); - break; - case 'J': - jv[ix++].j = (jlong)SvNV(sv); - break; - case 'F': - jv[ix++].f = (jfloat)SvNV(sv); - break; - case 'D': - jv[ix++].d = (jdouble)SvNV(sv); - break; - case '[': - switch (*s++) { - case 'Z': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean)); - int i; - SV** esv; - - jbooleanArray ja = (*env)->NewBooleanArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jboolean)SvIV(*esv); - (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jboolean); - - jbooleanArray ja = (*env)->NewBooleanArray(env, len); - (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'B': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte)); - int i; - SV** esv; - - jbyteArray ja = (*env)->NewByteArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jbyte)SvIV(*esv); - (*env)->SetByteArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jbyte); - - jbyteArray ja = (*env)->NewByteArray(env, len); - (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'C': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jchar* buf = (jchar*)malloc(len * sizeof(jchar)); - int i; - SV** esv; - - jcharArray ja = (*env)->NewCharArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jchar)SvIV(*esv); - (*env)->SetCharArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jchar); - - jcharArray ja = (*env)->NewCharArray(env, len); - (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'S': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jshort* buf = (jshort*)malloc(len * sizeof(jshort)); - int i; - SV** esv; - - jshortArray ja = (*env)->NewShortArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jshort)SvIV(*esv); - (*env)->SetShortArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jshort); - - jshortArray ja = (*env)->NewShortArray(env, len); - (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'I': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jint* buf = (jint*)malloc(len * sizeof(jint)); - int i; - SV** esv; - - jintArray ja = (*env)->NewIntArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jint)SvIV(*esv); - (*env)->SetIntArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jint); - - jintArray ja = (*env)->NewIntArray(env, len); - (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'J': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jlong* buf = (jlong*)malloc(len * sizeof(jlong)); - int i; - SV** esv; - - jlongArray ja = (*env)->NewLongArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jlong)SvNV(*esv); - (*env)->SetLongArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jlong); - - jlongArray ja = (*env)->NewLongArray(env, len); - (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'F': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat)); - int i; - SV** esv; - - jfloatArray ja = (*env)->NewFloatArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jfloat)SvNV(*esv); - (*env)->SetFloatArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jfloat); - - jfloatArray ja = (*env)->NewFloatArray(env, len); - (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'D': - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble)); - int i; - SV** esv; - - jdoubleArray ja = (*env)->NewDoubleArray(env, len); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) - buf[i] = (jdouble)SvNV(*esv); - (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf); - free((void*)buf); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else if (SvPOK(sv)) { - jsize len = sv_len(sv) / sizeof(jdouble); - - jdoubleArray ja = (*env)->NewDoubleArray(env, len); - (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a)); - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - case 'L': - while (*s != ';') s++; - s++; - if (strnEQ(start, "[Ljava/lang/String;", 19)) { - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - int i; - SV** esv; - static jclass jcl = 0; - jobjectArray ja; - - if (!jcl) - jcl = (*env)->FindClass(env, "java/lang/String"); - ja = (*env)->NewObjectArray(env, len, jcl, 0); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { - jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a)); - (*env)->SetObjectArrayElement(env, ja, i, str); - } - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - } - /* FALL THROUGH */ - default: - if (SvROK(sv)) { - SV* rv = (SV*)SvRV(sv); - if (SvOBJECT(rv)) - jv[ix++].l = (jobject)(void*)SvIV(rv); - else if (SvTYPE(rv) == SVt_PVAV) { - jsize len = av_len((AV*)rv) + 1; - int i; - SV** esv; - static jclass jcl = 0; - jobjectArray ja; - - if (!jcl) - jcl = (*env)->FindClass(env, "java/lang/Object"); - ja = (*env)->NewObjectArray(env, len, jcl, 0); - for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { - if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) { - (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv)); - } - else { - jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a)); - (*env)->SetObjectArrayElement(env, ja, i, str); - } - } - jv[ix++].l = (jobject)ja; - } - else - jv[ix++].l = (jobject)(void*)0; - } - else - jv[ix++].l = (jobject)(void*)0; - break; - } - break; - case 'L': - if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) { - s += 17; - jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a)); - break; - } - while (*s != ';') s++; - s++; - if (SvROK(sv)) { - SV* rv = SvRV(sv); - jv[ix++].l = (jobject)(void*)SvIV(rv); - } - break; - case ')': - croak("too many arguments, signature: %s", sig); - goto cleanup; - default: - croak("panic: malformed signature: %s", s-1); - goto cleanup; - } - - } - if (*s != ')') { - croak("not enough arguments, signature: %s", sig); - goto cleanup; - } - return jv; - -cleanup: - safefree((char*)jv); - return 0; -} - -static int -not_here(char *s) -{ - croak("%s not implemented on this architecture", s); - return -1; -} - -static double -constant(char *name, int arg) -{ - errno = 0; - switch (*name) { - case 'A': - break; - case 'B': - break; - case 'C': - break; - case 'D': - break; - case 'E': - break; - case 'F': - break; - case 'G': - break; - case 'H': - break; - case 'I': - break; - case 'J': - if (strEQ(name, "JNI_ABORT")) -#ifdef JNI_ABORT - return JNI_ABORT; -#else - goto not_there; -#endif - if (strEQ(name, "JNI_COMMIT")) -#ifdef JNI_COMMIT - return JNI_COMMIT; -#else - goto not_there; -#endif - if (strEQ(name, "JNI_ERR")) -#ifdef JNI_ERR - return JNI_ERR; -#else - goto not_there; -#endif - if (strEQ(name, "JNI_FALSE")) -#ifdef JNI_FALSE - return JNI_FALSE; -#else - goto not_there; -#endif - if (strEQ(name, "JNI_H")) -#ifdef JNI_H -#ifdef WIN32 - return 1; -#else - return JNI_H; -#endif -#else - goto not_there; -#endif - if (strEQ(name, "JNI_OK")) -#ifdef JNI_OK - return JNI_OK; -#else - goto not_there; -#endif - if (strEQ(name, "JNI_TRUE")) -#ifdef JNI_TRUE - return JNI_TRUE; -#else - goto not_there; -#endif - break; - case 'K': - break; - case 'L': - break; - case 'M': - break; - case 'N': - break; - case 'O': - break; - case 'P': - break; - case 'Q': - break; - case 'R': - break; - case 'S': - break; - case 'T': - break; - case 'U': - break; - case 'V': - break; - case 'W': - break; - case 'X': - break; - case 'Y': - break; - case 'Z': - break; - } - errno = EINVAL; - return 0; - -not_there: - errno = ENOENT; - return 0; -} - -#define FETCHENV jplcurenv -#define RESTOREENV jplcurenv = env - -MODULE = JNI PACKAGE = JNI - -PROTOTYPES: ENABLE - -double -constant(name,arg) - char * name - int arg - -jint -GetVersion() - JNIEnv * env = FETCHENV; - CODE: - { - RETVAL = (*env)->GetVersion(env); - RESTOREENV; - } - OUTPUT: - RETVAL - -jclass -DefineClass(name, loader, buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jsize buf_len_ = NO_INIT; - const char * name - jobject loader - const jbyte * buf - CODE: - { -#ifdef KAFFE - RETVAL = (*env)->DefineClass(env, loader, buf, (jsize)buf_len_); -#else - RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_); -#endif - RESTOREENV; - } - OUTPUT: - RETVAL - -jclass -FindClass(name) - JNIEnv * env = FETCHENV; - const char * name - CODE: - { - RETVAL = (*env)->FindClass(env, name); - RESTOREENV; - } - OUTPUT: - RETVAL - -jclass -GetSuperclass(sub) - JNIEnv * env = FETCHENV; - jclass sub - CODE: - { - RETVAL = (*env)->GetSuperclass(env, sub); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -IsAssignableFrom(sub, sup) - JNIEnv * env = FETCHENV; - jclass sub - jclass sup - CODE: - { - RETVAL = (*env)->IsAssignableFrom(env, sub, sup); - RESTOREENV; - } - OUTPUT: - RETVAL - -SysRet -Throw(obj) - JNIEnv * env = FETCHENV; - jthrowable obj - CODE: - { - RETVAL = (*env)->Throw(env, obj); - RESTOREENV; - } - OUTPUT: - RETVAL - -SysRet -ThrowNew(clazz, msg) - JNIEnv * env = FETCHENV; - jclass clazz - const char * msg - CODE: - { - RETVAL = (*env)->ThrowNew(env, clazz, msg); - RESTOREENV; - } - OUTPUT: - RETVAL - -jthrowable -ExceptionOccurred() - JNIEnv * env = FETCHENV; - CODE: - { - RETVAL = (*env)->ExceptionOccurred(env); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -ExceptionDescribe() - JNIEnv * env = FETCHENV; - CODE: - { - (*env)->ExceptionDescribe(env); - RESTOREENV; - } - -void -ExceptionClear() - JNIEnv * env = FETCHENV; - CODE: - { - (*env)->ExceptionClear(env); - RESTOREENV; - } - -void -FatalError(msg) - JNIEnv * env = FETCHENV; - const char * msg - CODE: - { - (*env)->FatalError(env, msg); - RESTOREENV; - } - -jobject -NewGlobalRef(lobj) - JNIEnv * env = FETCHENV; - jobject lobj - CODE: - { - RETVAL = (*env)->NewGlobalRef(env, lobj); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -DeleteGlobalRef(gref) - JNIEnv * env = FETCHENV; - jobject gref - CODE: - { - (*env)->DeleteGlobalRef(env, gref); - RESTOREENV; - } - -void -DeleteLocalRef(obj) - JNIEnv * env = FETCHENV; - jobject obj - CODE: - { - (*env)->DeleteLocalRef(env, obj); - RESTOREENV; - } - -jboolean -IsSameObject(obj1,obj2) - JNIEnv * env = FETCHENV; - jobject obj1 - jobject obj2 - CODE: - { - RETVAL = (*env)->IsSameObject(env, obj1,obj2); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -AllocObject(clazz) - JNIEnv * env = FETCHENV; - jclass clazz - CODE: - { - RETVAL = (*env)->AllocObject(env, clazz); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -NewObject(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->NewObjectA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -NewObjectA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->NewObjectA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jclass -GetObjectClass(obj) - JNIEnv * env = FETCHENV; - jobject obj - CODE: - { - RETVAL = (*env)->GetObjectClass(env, obj); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -IsInstanceOf(obj,clazz) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - CODE: - { - RETVAL = (*env)->IsInstanceOf(env, obj,clazz); - RESTOREENV; - } - OUTPUT: - RETVAL - -jmethodID -GetMethodID(clazz,name,sig) - JNIEnv * env = FETCHENV; - jclass clazz - const char * name - const char * sig - CODE: - { - RETVAL = (*env)->GetMethodID(env, clazz,name,sig); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -CallObjectMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -CallObjectMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -CallBooleanMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -CallBooleanMethodA(obj,methodID, args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -CallByteMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -CallByteMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -CallCharMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -CallCharMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -CallShortMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -CallShortMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -CallIntMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -CallIntMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -CallLongMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -CallLongMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -CallFloatMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -CallFloatMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -CallDoubleMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -CallDoubleMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -CallVoidMethod(obj,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - (*env)->CallVoidMethodA(env, obj,methodID,args); - RESTOREENV; - } - -void -CallVoidMethodA(obj,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - (*env)->CallVoidMethodA(env, obj,methodID,args); - RESTOREENV; - } - -jobject -CallNonvirtualObjectMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -CallNonvirtualObjectMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -CallNonvirtualBooleanMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -CallNonvirtualBooleanMethodA(obj,clazz,methodID, args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -CallNonvirtualByteMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -CallNonvirtualByteMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -CallNonvirtualCharMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -CallNonvirtualCharMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -CallNonvirtualShortMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -CallNonvirtualShortMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -CallNonvirtualIntMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -CallNonvirtualIntMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -CallNonvirtualLongMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -CallNonvirtualLongMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -CallNonvirtualFloatMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -CallNonvirtualFloatMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -CallNonvirtualDoubleMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -CallNonvirtualDoubleMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -CallNonvirtualVoidMethod(obj,clazz,methodID,...) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - -void -CallNonvirtualVoidMethodA(obj,clazz,methodID,args) - JNIEnv * env = FETCHENV; - jobject obj - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args); - RESTOREENV; - } - -jfieldID -GetFieldID(clazz,name,sig) - JNIEnv * env = FETCHENV; - jclass clazz - const char * name - const char * sig - CODE: - { - RETVAL = (*env)->GetFieldID(env, clazz,name,sig); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -GetObjectField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetObjectField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -GetBooleanField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetBooleanField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -GetByteField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetByteField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -GetCharField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetCharField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -GetShortField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetShortField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -GetIntField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetIntField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -GetLongField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetLongField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -GetFloatField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetFloatField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -GetDoubleField(obj,fieldID) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetDoubleField(env, obj,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -SetObjectField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jobject val - CODE: - { - (*env)->SetObjectField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetBooleanField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jboolean val - CODE: - { - (*env)->SetBooleanField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetByteField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jbyte val - CODE: - { - (*env)->SetByteField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetCharField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jchar val - CODE: - { - (*env)->SetCharField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetShortField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jshort val - CODE: - { - (*env)->SetShortField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetIntField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jint val - CODE: - { - (*env)->SetIntField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetLongField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jlong val - CODE: - { - (*env)->SetLongField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetFloatField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jfloat val - CODE: - { - (*env)->SetFloatField(env, obj,fieldID,val); - RESTOREENV; - } - -void -SetDoubleField(obj,fieldID,val) - JNIEnv * env = FETCHENV; - jobject obj - jfieldID fieldID - char * sig = 0; - jdouble val - CODE: - { - (*env)->SetDoubleField(env, obj,fieldID,val); - RESTOREENV; - } - -jmethodID -GetStaticMethodID(clazz,name,sig) - JNIEnv * env = FETCHENV; - jclass clazz - const char * name - const char * sig - CODE: - { - RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -CallStaticObjectMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -CallStaticObjectMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -CallStaticBooleanMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -CallStaticBooleanMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -CallStaticByteMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -CallStaticByteMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -CallStaticCharMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -CallStaticCharMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -CallStaticShortMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -CallStaticShortMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -CallStaticIntMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -CallStaticIntMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -CallStaticLongMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -CallStaticLongMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -CallStaticFloatMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -CallStaticFloatMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -CallStaticDoubleMethod(clazz,methodID,...) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -CallStaticDoubleMethodA(clazz,methodID,args) - JNIEnv * env = FETCHENV; - jclass clazz - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -CallStaticVoidMethod(cls,methodID,...) - JNIEnv * env = FETCHENV; - jclass cls - jmethodID methodID - char * sig = 0; - int argoff = $min_args; - CODE: - { - jvalue * args = makeargs(sig, &ST(argoff), items - argoff); - (*env)->CallStaticVoidMethodA(env, cls,methodID,args); - RESTOREENV; - } - -void -CallStaticVoidMethodA(cls,methodID,args) - JNIEnv * env = FETCHENV; - jclass cls - jmethodID methodID - char * sig = 0; - jvalue * args - CODE: - { - (*env)->CallStaticVoidMethodA(env, cls,methodID,args); - RESTOREENV; - } - -jfieldID -GetStaticFieldID(clazz,name,sig) - JNIEnv * env = FETCHENV; - jclass clazz - const char * name - const char * sig - CODE: - { - RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -GetStaticObjectField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean -GetStaticBooleanField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyte -GetStaticByteField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jchar -GetStaticCharField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshort -GetStaticShortField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jint -GetStaticIntField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlong -GetStaticLongField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloat -GetStaticFloatField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdouble -GetStaticDoubleField(clazz,fieldID) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - CODE: - { - RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -SetStaticObjectField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jobject value - CODE: - { - (*env)->SetStaticObjectField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticBooleanField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jboolean value - CODE: - { - (*env)->SetStaticBooleanField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticByteField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jbyte value - CODE: - { - (*env)->SetStaticByteField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticCharField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jchar value - CODE: - { - (*env)->SetStaticCharField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticShortField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jshort value - CODE: - { - (*env)->SetStaticShortField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticIntField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jint value - CODE: - { - (*env)->SetStaticIntField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticLongField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jlong value - CODE: - { - (*env)->SetStaticLongField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticFloatField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jfloat value - CODE: - { - (*env)->SetStaticFloatField(env, clazz,fieldID,value); - RESTOREENV; - } - -void -SetStaticDoubleField(clazz,fieldID,value) - JNIEnv * env = FETCHENV; - jclass clazz - jfieldID fieldID - char * sig = 0; - jdouble value - CODE: - { - (*env)->SetStaticDoubleField(env, clazz,fieldID,value); - RESTOREENV; - } - -jstring -NewString(unicode) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jsize unicode_len_ = NO_INIT; - const jchar * unicode - CODE: - { - RETVAL = (*env)->NewString(env, unicode, unicode_len_); - RESTOREENV; - } - OUTPUT: - RETVAL - -jsize -GetStringLength(str) - JNIEnv * env = FETCHENV; - jstring str - CODE: - { - RETVAL = (*env)->GetStringLength(env, str); - RESTOREENV; - } - OUTPUT: - RETVAL - -const jchar * -GetStringChars(str) - JNIEnv * env = FETCHENV; - jstring str - jboolean isCopy = NO_INIT; - jsize RETVAL_len_ = NO_INIT; - CODE: - { - RETVAL = (*env)->GetStringChars(env, str,&isCopy); - RETVAL_len_ = (*env)->GetStringLength(env, str); - RESTOREENV; - } - OUTPUT: - RETVAL - CLEANUP: - (*env)->ReleaseStringChars(env, str,RETVAL); - -jstring -NewStringUTF(utf) - JNIEnv * env = FETCHENV; - const char * utf - CODE: - { - RETVAL = (*env)->NewStringUTF(env, utf); - RESTOREENV; - } - OUTPUT: - RETVAL - -jsize -GetStringUTFLength(str) - JNIEnv * env = FETCHENV; - jstring str - CODE: - { - RETVAL = (*env)->GetStringUTFLength(env, str); - RESTOREENV; - } - OUTPUT: - RETVAL - -const char * -GetStringUTFChars(str) - JNIEnv * env = FETCHENV; - jstring str - jboolean isCopy = NO_INIT; - CODE: - { - RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy); - RESTOREENV; - } - OUTPUT: - RETVAL - CLEANUP: - (*env)->ReleaseStringUTFChars(env, str, RETVAL); - - -jsize -GetArrayLength(array) - JNIEnv * env = FETCHENV; - jarray array - CODE: - { - RETVAL = (*env)->GetArrayLength(env, array); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobjectArray -NewObjectArray(len,clazz,init) - JNIEnv * env = FETCHENV; - jsize len - jclass clazz - jobject init - CODE: - { - RETVAL = (*env)->NewObjectArray(env, len,clazz,init); - RESTOREENV; - } - OUTPUT: - RETVAL - -jobject -GetObjectArrayElement(array,index) - JNIEnv * env = FETCHENV; - jobjectArray array - jsize index - CODE: - { - RETVAL = (*env)->GetObjectArrayElement(env, array,index); - RESTOREENV; - } - OUTPUT: - RETVAL - -void -SetObjectArrayElement(array,index,val) - JNIEnv * env = FETCHENV; - jobjectArray array - jsize index - jobject val - CODE: - { - (*env)->SetObjectArrayElement(env, array,index,val); - RESTOREENV; - } - -jbooleanArray -NewBooleanArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewBooleanArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jbyteArray -NewByteArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewByteArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jcharArray -NewCharArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewCharArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jshortArray -NewShortArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewShortArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jintArray -NewIntArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewIntArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jlongArray -NewLongArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewLongArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jfloatArray -NewFloatArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewFloatArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jdoubleArray -NewDoubleArray(len) - JNIEnv * env = FETCHENV; - jsize len - CODE: - { - RETVAL = (*env)->NewDoubleArray(env, len); - RESTOREENV; - } - OUTPUT: - RETVAL - -jboolean * -GetBooleanArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jbooleanArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jboolean* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSViv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jboolean)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -jbyte * -GetByteArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jbyteArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jbyte* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSViv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jbyte)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -jchar * -GetCharArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jcharArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jchar* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSViv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jchar)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -jshort * -GetShortArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jshortArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jshort* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSViv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jshort)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -jint * -GetIntArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jintArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jint* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSViv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jint)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -jlong * -GetLongArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jlongArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jlong* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSViv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jlong)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -jfloat * -GetFloatArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jfloatArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jfloat* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSVnv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jfloat)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -jdouble * -GetDoubleArrayElements(array) - JNIEnv * env = FETCHENV; - jsize RETVAL_len_ = NO_INIT; - jdoubleArray array - jboolean isCopy = NO_INIT; - PPCODE: - { - RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy); - RETVAL_len_ = (*env)->GetArrayLength(env, array); - if (GIMME == G_ARRAY) { - int i; - jdouble* r = RETVAL; - EXTEND(sp, RETVAL_len_); - for (i = RETVAL_len_; i; --i) { - PUSHs(sv_2mortal(newSVnv(*r++))); - } - } - else { - if (RETVAL_len_) { - PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, - (STRLEN)RETVAL_len_ * sizeof(jdouble)))); - } - else - PUSHs(&PL_sv_no); - } - (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT); - RESTOREENV; - } - -void -GetBooleanArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jbooleanArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1); - CODE: - { - (*env)->GetBooleanArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jboolean)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -GetByteArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jbyteArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1); - CODE: - { - (*env)->GetByteArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jbyte)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -GetCharArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jcharArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1); - CODE: - { - (*env)->GetCharArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jchar)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -GetShortArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jshortArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1); - CODE: - { - (*env)->GetShortArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jshort)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -GetIntArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jintArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1); - CODE: - { - (*env)->GetIntArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jint)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -GetLongArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jlongArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1); - CODE: - { - (*env)->GetLongArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jlong)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -GetFloatArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jfloatArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1); - CODE: - { - (*env)->GetFloatArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jfloat)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -GetDoubleArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - jdoubleArray array - jsize start - jsize len - STRLEN tmplen = len * sizeof(jboolean) + 1; - char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); - jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1); - CODE: - { - (*env)->GetDoubleArrayRegion(env, array,start,len,buf); - SvCUR_set(ST(3), len * sizeof(jdouble)); - *SvEND(ST(3)) = '\0'; - RESTOREENV; - } - -void -SetBooleanArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jbooleanArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jboolean * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetBooleanArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -void -SetByteArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jbyteArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jbyte * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetByteArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -void -SetCharArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jcharArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jchar * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetCharArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -void -SetShortArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jshortArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jshort * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetShortArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -void -SetIntArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jintArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jint * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetIntArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -void -SetLongArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jlongArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jlong * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetLongArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -void -SetFloatArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jfloatArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jfloat * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetFloatArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -void -SetDoubleArrayRegion(array,start,len,buf) - JNIEnv * env = FETCHENV; - STRLEN tmplen = NO_INIT; - jdoubleArray array - jsize start - jsize len - jsize buf_len_ = NO_INIT; - jdouble * buf - CODE: - { - if (buf_len_ < len) - croak("string is too short"); - else if (buf_len_ > len && PL_dowarn) - warn("string is too long"); - (*env)->SetDoubleArrayRegion(env, array,start,len,buf); - RESTOREENV; - } - -SysRet -RegisterNatives(clazz,methods,nMethods) - JNIEnv * env = FETCHENV; - jclass clazz - JNINativeMethod * methods - jint nMethods - CODE: - { - RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods); - } - -SysRet -UnregisterNatives(clazz) - JNIEnv * env = FETCHENV; - jclass clazz - CODE: - { - RETVAL = (*env)->UnregisterNatives(env, clazz); - } - OUTPUT: - RETVAL - -SysRet -MonitorEnter(obj) - JNIEnv * env = FETCHENV; - jobject obj - CODE: - { - RETVAL = (*env)->MonitorEnter(env, obj); - RESTOREENV; - } - OUTPUT: - RETVAL - -SysRet -MonitorExit(obj) - JNIEnv * env = FETCHENV; - jobject obj - CODE: - { - RETVAL = (*env)->MonitorExit(env, obj); - RESTOREENV; - } - OUTPUT: - RETVAL - -JavaVM * -GetJavaVM(...) - JNIEnv * env = FETCHENV; - CODE: - { -#ifdef JPL_DEBUG - jpldebug = 1; -#else - jpldebug = 0; -#endif - if (env) { /* We're embedded. */ - if ((*env)->GetJavaVM(env, &RETVAL) < 0) - RETVAL = 0; - } - else { /* We're embedding. */ -#ifdef KAFFE - JavaVMInitArgs vm_args; -#else - JDK1_1InitArgs vm_args; -#endif - char *lib; - if (jpldebug) { - fprintf(stderr, "We're embedding Java in Perl.\n"); - } - - if (items--) { - ++mark; - lib = SvPV(*mark, PL_na); - } - else - lib = 0; - if (jpldebug) { - fprintf(stderr, "lib is %s.\n", lib); - } -#ifdef WIN32 - if (LoadLibrary("jvm.dll")) { - if (!LoadLibrary("javai.dll")) { - warn("Can't load javai.dll"); - } - } else { - if (lib && !LoadLibrary(lib)) - croak("Can't load javai.dll"); - } -#else - if (jpldebug) { - fprintf(stderr, "Opening Java shared library.\n"); - } -#ifdef KAFFE - if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) { -#else - if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) { -#endif - if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL)) - croak("Can't load Java shared library."); - } -#endif - /* Kaffe seems to get very upset if vm_args.version isn't set */ -#ifdef KAFFE - vm_args.version = JNI_VERSION_1_1; -#endif - JNI_GetDefaultJavaVMInitArgs(&vm_args); - vm_args.exit = &call_my_exit; - if (jpldebug) { - fprintf(stderr, "items = %d\n", items); - fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na)); - } - while (items > 1) { - char *s; - ++mark; - s = SvPV(*mark,PL_na); - ++mark; - if (jpldebug) { - fprintf(stderr, "*s = %s\n", s); - fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na)); - } - items -= 2; - if (strEQ(s, "checkSource")) - vm_args.checkSource = (jint)SvIV(*mark); - else if (strEQ(s, "nativeStackSize")) - vm_args.nativeStackSize = (jint)SvIV(*mark); - else if (strEQ(s, "javaStackSize")) - vm_args.javaStackSize = (jint)SvIV(*mark); - else if (strEQ(s, "minHeapSize")) - vm_args.minHeapSize = (jint)SvIV(*mark); - else if (strEQ(s, "maxHeapSize")) - vm_args.maxHeapSize = (jint)SvIV(*mark); - else if (strEQ(s, "verifyMode")) - vm_args.verifyMode = (jint)SvIV(*mark); - else if (strEQ(s, "classpath")) - vm_args.classpath = savepv(SvPV(*mark,PL_na)); - else if (strEQ(s, "enableClassGC")) - vm_args.enableClassGC = (jint)SvIV(*mark); - else if (strEQ(s, "enableVerboseGC")) - vm_args.enableVerboseGC = (jint)SvIV(*mark); - else if (strEQ(s, "disableAsyncGC")) - vm_args.disableAsyncGC = (jint)SvIV(*mark); -#ifdef KAFFE - else if (strEQ(s, "libraryhome")) - vm_args.libraryhome = savepv(SvPV(*mark,PL_na)); - else if (strEQ(s, "classhome")) - vm_args.classhome = savepv(SvPV(*mark,PL_na)); - else if (strEQ(s, "enableVerboseJIT")) - vm_args.enableVerboseJIT = (jint)SvIV(*mark); - else if (strEQ(s, "enableVerboseClassloading")) - vm_args.enableVerboseClassloading = (jint)SvIV(*mark); - else if (strEQ(s, "enableVerboseCall")) - vm_args.enableVerboseCall = (jint)SvIV(*mark); - else if (strEQ(s, "allocHeapSize")) - vm_args.allocHeapSize = (jint)SvIV(*mark); -#else - else if (strEQ(s, "verbose")) - vm_args.verbose = (jint)SvIV(*mark); - else if (strEQ(s, "debugging")) - vm_args.debugging = (jboolean)SvIV(*mark); - else if (strEQ(s, "debugPort")) - vm_args.debugPort = (jint)SvIV(*mark); -#endif - else - croak("unrecognized option: %s", s); - } - - if (jpldebug) { - fprintf(stderr, "Creating Java VM...\n"); - fprintf(stderr, "Working CLASSPATH: %s\n", - vm_args.classpath); - } - if (JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args) < 0) { - croak("Unable to create instance of JVM"); - } - if (jpldebug) { - fprintf(stderr, "Created Java VM.\n"); - } - - } - } - +/* + * Copyright 1997, O'Reilly & Associate, Inc. + * + * This package may be copied under the same terms as Perl itself. + */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include +#include + +#ifndef PERL_VERSION +# include +# define PERL_REVISION 5 +# define PERL_VERSION PATCHLEVEL +# define PERL_SUBVERSION SUBVERSION +#endif + +#if PERL_REVISION == 5 && (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION <= 75)) +# define PL_na na +# define PL_sv_no sv_no +# define PL_sv_undef sv_undef +# define PL_dowarn dowarn +#endif + +#ifndef newSVpvn +# define newSVpvn(a,b) newSVpv(a,b) +#endif + +#ifndef pTHX +# define pTHX void +# define pTHX_ +# define aTHX +# define aTHX_ +# define dTHX extern int JNI___notused +#endif + +#ifndef WIN32 +# include +#endif + +#ifdef EMBEDDEDPERL +extern JNIEnv* jplcurenv; +extern int jpldebug; +#else +JNIEnv* jplcurenv; +int jpldebug = 1; +#endif + +#define SysRet jint + +#ifdef WIN32 +static void JNICALL call_my_exit(jint status) +{ + my_exit(status); +} +#else +static void call_my_exit(jint status) +{ + my_exit(status); +} +#endif + +jvalue* +makeargs(char *sig, SV** svp, int items) +{ + jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items); + int ix = 0; + char *s = sig; + JNIEnv* env = jplcurenv; + char *start; + STRLEN n_a; + + if (jpldebug) + fprintf(stderr, "sig = %s, items = %d\n", sig, items); + if (*s++ != '(') + goto cleanup; + + while (items--) { + SV *sv = *svp++; + start = s; + switch (*s++) { + case 'Z': + jv[ix++].z = (jboolean)(SvIV(sv) != 0); + break; + case 'B': + jv[ix++].b = (jbyte)SvIV(sv); + break; + case 'C': + jv[ix++].c = (jchar)SvIV(sv); + break; + case 'S': + jv[ix++].s = (jshort)SvIV(sv); + break; + case 'I': + jv[ix++].i = (jint)SvIV(sv); + break; + case 'J': + jv[ix++].j = (jlong)SvNV(sv); + break; + case 'F': + jv[ix++].f = (jfloat)SvNV(sv); + break; + case 'D': + jv[ix++].d = (jdouble)SvNV(sv); + break; + case '[': + switch (*s++) { + case 'Z': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean)); + int i; + SV** esv; + + jbooleanArray ja = (*env)->NewBooleanArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jboolean)SvIV(*esv); + (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jboolean); + + jbooleanArray ja = (*env)->NewBooleanArray(env, len); + (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'B': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte)); + int i; + SV** esv; + + jbyteArray ja = (*env)->NewByteArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jbyte)SvIV(*esv); + (*env)->SetByteArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jbyte); + + jbyteArray ja = (*env)->NewByteArray(env, len); + (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'C': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jchar* buf = (jchar*)malloc(len * sizeof(jchar)); + int i; + SV** esv; + + jcharArray ja = (*env)->NewCharArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jchar)SvIV(*esv); + (*env)->SetCharArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jchar); + + jcharArray ja = (*env)->NewCharArray(env, len); + (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'S': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jshort* buf = (jshort*)malloc(len * sizeof(jshort)); + int i; + SV** esv; + + jshortArray ja = (*env)->NewShortArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jshort)SvIV(*esv); + (*env)->SetShortArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jshort); + + jshortArray ja = (*env)->NewShortArray(env, len); + (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'I': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jint* buf = (jint*)malloc(len * sizeof(jint)); + int i; + SV** esv; + + jintArray ja = (*env)->NewIntArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jint)SvIV(*esv); + (*env)->SetIntArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jint); + + jintArray ja = (*env)->NewIntArray(env, len); + (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'J': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jlong* buf = (jlong*)malloc(len * sizeof(jlong)); + int i; + SV** esv; + + jlongArray ja = (*env)->NewLongArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jlong)SvNV(*esv); + (*env)->SetLongArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jlong); + + jlongArray ja = (*env)->NewLongArray(env, len); + (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'F': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat)); + int i; + SV** esv; + + jfloatArray ja = (*env)->NewFloatArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jfloat)SvNV(*esv); + (*env)->SetFloatArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jfloat); + + jfloatArray ja = (*env)->NewFloatArray(env, len); + (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'D': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble)); + int i; + SV** esv; + + jdoubleArray ja = (*env)->NewDoubleArray(env, len); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jdouble)SvNV(*esv); + (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf); + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jdouble); + + jdoubleArray ja = (*env)->NewDoubleArray(env, len); + (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a)); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'L': + while (*s != ';') s++; + s++; + if (strnEQ(start, "[Ljava/lang/String;", 19)) { + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + int i; + SV** esv; + static jclass jcl = 0; + jobjectArray ja; + + if (!jcl) + jcl = (*env)->FindClass(env, "java/lang/String"); + ja = (*env)->NewObjectArray(env, len, jcl, 0); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { + jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a)); + (*env)->SetObjectArrayElement(env, ja, i, str); + } + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + } + /* FALL THROUGH */ + default: + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + int i; + SV** esv; + static jclass jcl = 0; + jobjectArray ja; + + if (!jcl) + jcl = (*env)->FindClass(env, "java/lang/Object"); + ja = (*env)->NewObjectArray(env, len, jcl, 0); + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { + if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) { + (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv)); + } + else { + jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a)); + (*env)->SetObjectArrayElement(env, ja, i, str); + } + } + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + } + break; + case 'L': + if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) { + s += 17; + jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a)); + break; + } + while (*s != ';') s++; + s++; + if (SvROK(sv)) { + SV* rv = SvRV(sv); + jv[ix++].l = (jobject)(void*)SvIV(rv); + } + break; + case ')': + croak("too many arguments, signature: %s", sig); + goto cleanup; + default: + croak("panic: malformed signature: %s", s-1); + goto cleanup; + } + + } + if (*s != ')') { + croak("not enough arguments, signature: %s", sig); + goto cleanup; + } + return jv; + +cleanup: + safefree((char*)jv); + return 0; +} + +static int +not_here(char *s) +{ + croak("%s not implemented on this architecture", s); + return -1; +} + +static double +constant(char *name, int arg) +{ + errno = 0; + switch (*name) { + case 'A': + break; + case 'B': + break; + case 'C': + break; + case 'D': + break; + case 'E': + break; + case 'F': + break; + case 'G': + break; + case 'H': + break; + case 'I': + break; + case 'J': + if (strEQ(name, "JNI_ABORT")) +#ifdef JNI_ABORT + return JNI_ABORT; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_COMMIT")) +#ifdef JNI_COMMIT + return JNI_COMMIT; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_ERR")) +#ifdef JNI_ERR + return JNI_ERR; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_FALSE")) +#ifdef JNI_FALSE + return JNI_FALSE; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_H")) +#ifdef JNI_H +#ifdef WIN32 + return 1; +#else + return JNI_H; +#endif +#else + goto not_there; +#endif + if (strEQ(name, "JNI_OK")) +#ifdef JNI_OK + return JNI_OK; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_TRUE")) +#ifdef JNI_TRUE + return JNI_TRUE; +#else + goto not_there; +#endif + break; + case 'K': + break; + case 'L': + break; + case 'M': + break; + case 'N': + break; + case 'O': + break; + case 'P': + break; + case 'Q': + break; + case 'R': + break; + case 'S': + break; + case 'T': + break; + case 'U': + break; + case 'V': + break; + case 'W': + break; + case 'X': + break; + case 'Y': + break; + case 'Z': + break; + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +#define FETCHENV jplcurenv +#define RESTOREENV jplcurenv = env + +MODULE = JNI PACKAGE = JNI + +PROTOTYPES: ENABLE + +double +constant(name,arg) + char * name + int arg + +jint +GetVersion() + JNIEnv * env = FETCHENV; + CODE: + { + RETVAL = (*env)->GetVersion(env); + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +DefineClass(name, loader, buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jsize buf_len_ = NO_INIT; + const char * name + jobject loader + const jbyte * buf + CODE: + { +#ifdef KAFFE + RETVAL = (*env)->DefineClass(env, loader, buf, (jsize)buf_len_); +#else + RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +FindClass(name) + JNIEnv * env = FETCHENV; + const char * name + CODE: + { + RETVAL = (*env)->FindClass(env, name); + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +GetSuperclass(sub) + JNIEnv * env = FETCHENV; + jclass sub + CODE: + { + RETVAL = (*env)->GetSuperclass(env, sub); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +IsAssignableFrom(sub, sup) + JNIEnv * env = FETCHENV; + jclass sub + jclass sup + CODE: + { + RETVAL = (*env)->IsAssignableFrom(env, sub, sup); + RESTOREENV; + } + OUTPUT: + RETVAL + +SysRet +Throw(obj) + JNIEnv * env = FETCHENV; + jthrowable obj + CODE: + { + RETVAL = (*env)->Throw(env, obj); + RESTOREENV; + } + OUTPUT: + RETVAL + +SysRet +ThrowNew(clazz, msg) + JNIEnv * env = FETCHENV; + jclass clazz + const char * msg + CODE: + { + RETVAL = (*env)->ThrowNew(env, clazz, msg); + RESTOREENV; + } + OUTPUT: + RETVAL + +jthrowable +ExceptionOccurred() + JNIEnv * env = FETCHENV; + CODE: + { + RETVAL = (*env)->ExceptionOccurred(env); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +ExceptionDescribe() + JNIEnv * env = FETCHENV; + CODE: + { + (*env)->ExceptionDescribe(env); + RESTOREENV; + } + +void +ExceptionClear() + JNIEnv * env = FETCHENV; + CODE: + { + (*env)->ExceptionClear(env); + RESTOREENV; + } + +void +FatalError(msg) + JNIEnv * env = FETCHENV; + const char * msg + CODE: + { + (*env)->FatalError(env, msg); + RESTOREENV; + } + +jobject +NewGlobalRef(lobj) + JNIEnv * env = FETCHENV; + jobject lobj + CODE: + { + RETVAL = (*env)->NewGlobalRef(env, lobj); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +DeleteGlobalRef(gref) + JNIEnv * env = FETCHENV; + jobject gref + CODE: + { + (*env)->DeleteGlobalRef(env, gref); + RESTOREENV; + } + +void +DeleteLocalRef(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { + (*env)->DeleteLocalRef(env, obj); + RESTOREENV; + } + +jboolean +IsSameObject(obj1,obj2) + JNIEnv * env = FETCHENV; + jobject obj1 + jobject obj2 + CODE: + { + RETVAL = (*env)->IsSameObject(env, obj1,obj2); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +AllocObject(clazz) + JNIEnv * env = FETCHENV; + jclass clazz + CODE: + { + RETVAL = (*env)->AllocObject(env, clazz); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +NewObject(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->NewObjectA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +NewObjectA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->NewObjectA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +GetObjectClass(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { + RETVAL = (*env)->GetObjectClass(env, obj); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +IsInstanceOf(obj,clazz) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + CODE: + { + RETVAL = (*env)->IsInstanceOf(env, obj,clazz); + RESTOREENV; + } + OUTPUT: + RETVAL + +jmethodID +GetMethodID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { + RETVAL = (*env)->GetMethodID(env, clazz,name,sig); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallObjectMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallObjectMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallBooleanMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallBooleanMethodA(obj,methodID, args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallByteMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallByteMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallCharMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallCharMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallShortMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallShortMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallIntMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallIntMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallLongMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallLongMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallFloatMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallFloatMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallDoubleMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallDoubleMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +CallVoidMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + (*env)->CallVoidMethodA(env, obj,methodID,args); + RESTOREENV; + } + +void +CallVoidMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + (*env)->CallVoidMethodA(env, obj,methodID,args); + RESTOREENV; + } + +jobject +CallNonvirtualObjectMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallNonvirtualObjectMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallNonvirtualBooleanMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallNonvirtualBooleanMethodA(obj,clazz,methodID, args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallNonvirtualByteMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallNonvirtualByteMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallNonvirtualCharMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallNonvirtualCharMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallNonvirtualShortMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallNonvirtualShortMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallNonvirtualIntMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallNonvirtualIntMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallNonvirtualLongMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallNonvirtualLongMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallNonvirtualFloatMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallNonvirtualFloatMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallNonvirtualDoubleMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallNonvirtualDoubleMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +CallNonvirtualVoidMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + +void +CallNonvirtualVoidMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args); + RESTOREENV; + } + +jfieldID +GetFieldID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { + RETVAL = (*env)->GetFieldID(env, clazz,name,sig); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +GetObjectField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetObjectField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +GetBooleanField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetBooleanField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +GetByteField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetByteField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +GetCharField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetCharField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +GetShortField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetShortField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +GetIntField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetIntField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +GetLongField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetLongField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +GetFloatField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetFloatField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +GetDoubleField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetDoubleField(env, obj,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +SetObjectField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jobject val + CODE: + { + (*env)->SetObjectField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetBooleanField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jboolean val + CODE: + { + (*env)->SetBooleanField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetByteField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jbyte val + CODE: + { + (*env)->SetByteField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetCharField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jchar val + CODE: + { + (*env)->SetCharField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetShortField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jshort val + CODE: + { + (*env)->SetShortField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetIntField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jint val + CODE: + { + (*env)->SetIntField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetLongField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jlong val + CODE: + { + (*env)->SetLongField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetFloatField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jfloat val + CODE: + { + (*env)->SetFloatField(env, obj,fieldID,val); + RESTOREENV; + } + +void +SetDoubleField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jdouble val + CODE: + { + (*env)->SetDoubleField(env, obj,fieldID,val); + RESTOREENV; + } + +jmethodID +GetStaticMethodID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { + RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallStaticObjectMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallStaticObjectMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallStaticBooleanMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallStaticBooleanMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallStaticByteMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallStaticByteMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallStaticCharMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallStaticCharMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallStaticShortMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallStaticShortMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallStaticIntMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallStaticIntMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallStaticLongMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallStaticLongMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallStaticFloatMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallStaticFloatMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallStaticDoubleMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallStaticDoubleMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +CallStaticVoidMethod(cls,methodID,...) + JNIEnv * env = FETCHENV; + jclass cls + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); + (*env)->CallStaticVoidMethodA(env, cls,methodID,args); + RESTOREENV; + } + +void +CallStaticVoidMethodA(cls,methodID,args) + JNIEnv * env = FETCHENV; + jclass cls + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { + (*env)->CallStaticVoidMethodA(env, cls,methodID,args); + RESTOREENV; + } + +jfieldID +GetStaticFieldID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { + RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +GetStaticObjectField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +GetStaticBooleanField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +GetStaticByteField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +GetStaticCharField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +GetStaticShortField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +GetStaticIntField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +GetStaticLongField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +GetStaticFloatField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +GetStaticDoubleField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { + RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +SetStaticObjectField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jobject value + CODE: + { + (*env)->SetStaticObjectField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticBooleanField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jboolean value + CODE: + { + (*env)->SetStaticBooleanField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticByteField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jbyte value + CODE: + { + (*env)->SetStaticByteField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticCharField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jchar value + CODE: + { + (*env)->SetStaticCharField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticShortField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jshort value + CODE: + { + (*env)->SetStaticShortField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticIntField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jint value + CODE: + { + (*env)->SetStaticIntField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticLongField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jlong value + CODE: + { + (*env)->SetStaticLongField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticFloatField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jfloat value + CODE: + { + (*env)->SetStaticFloatField(env, clazz,fieldID,value); + RESTOREENV; + } + +void +SetStaticDoubleField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jdouble value + CODE: + { + (*env)->SetStaticDoubleField(env, clazz,fieldID,value); + RESTOREENV; + } + +jstring +NewString(unicode) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jsize unicode_len_ = NO_INIT; + const jchar * unicode + CODE: + { + RETVAL = (*env)->NewString(env, unicode, unicode_len_); + RESTOREENV; + } + OUTPUT: + RETVAL + +jsize +GetStringLength(str) + JNIEnv * env = FETCHENV; + jstring str + CODE: + { + RETVAL = (*env)->GetStringLength(env, str); + RESTOREENV; + } + OUTPUT: + RETVAL + +const jchar * +GetStringChars(str) + JNIEnv * env = FETCHENV; + jstring str + jboolean isCopy = NO_INIT; + jsize RETVAL_len_ = NO_INIT; + CODE: + { + RETVAL = (*env)->GetStringChars(env, str,&isCopy); + RETVAL_len_ = (*env)->GetStringLength(env, str); + RESTOREENV; + } + OUTPUT: + RETVAL + CLEANUP: + (*env)->ReleaseStringChars(env, str,RETVAL); + +jstring +NewStringUTF(utf) + JNIEnv * env = FETCHENV; + const char * utf + CODE: + { + RETVAL = (*env)->NewStringUTF(env, utf); + RESTOREENV; + } + OUTPUT: + RETVAL + +jsize +GetStringUTFLength(str) + JNIEnv * env = FETCHENV; + jstring str + CODE: + { + RETVAL = (*env)->GetStringUTFLength(env, str); + RESTOREENV; + } + OUTPUT: + RETVAL + +const char * +GetStringUTFChars(str) + JNIEnv * env = FETCHENV; + jstring str + jboolean isCopy = NO_INIT; + CODE: + { + RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy); + RESTOREENV; + } + OUTPUT: + RETVAL + CLEANUP: + (*env)->ReleaseStringUTFChars(env, str, RETVAL); + + +jsize +GetArrayLength(array) + JNIEnv * env = FETCHENV; + jarray array + CODE: + { + RETVAL = (*env)->GetArrayLength(env, array); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobjectArray +NewObjectArray(len,clazz,init) + JNIEnv * env = FETCHENV; + jsize len + jclass clazz + jobject init + CODE: + { + RETVAL = (*env)->NewObjectArray(env, len,clazz,init); + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +GetObjectArrayElement(array,index) + JNIEnv * env = FETCHENV; + jobjectArray array + jsize index + CODE: + { + RETVAL = (*env)->GetObjectArrayElement(env, array,index); + RESTOREENV; + } + OUTPUT: + RETVAL + +void +SetObjectArrayElement(array,index,val) + JNIEnv * env = FETCHENV; + jobjectArray array + jsize index + jobject val + CODE: + { + (*env)->SetObjectArrayElement(env, array,index,val); + RESTOREENV; + } + +jbooleanArray +NewBooleanArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewBooleanArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyteArray +NewByteArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewByteArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jcharArray +NewCharArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewCharArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jshortArray +NewShortArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewShortArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jintArray +NewIntArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewIntArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jlongArray +NewLongArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewLongArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloatArray +NewFloatArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewFloatArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jdoubleArray +NewDoubleArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { + RETVAL = (*env)->NewDoubleArray(env, len); + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean * +GetBooleanArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jbooleanArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jboolean* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jboolean)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +jbyte * +GetByteArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jbyteArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jbyte* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jbyte)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +jchar * +GetCharArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jcharArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jchar* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jchar)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +jshort * +GetShortArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jshortArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jshort* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jshort)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +jint * +GetIntArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jintArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jint* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jint)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +jlong * +GetLongArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jlongArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jlong* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jlong)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +jfloat * +GetFloatArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jfloatArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jfloat* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSVnv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jfloat)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +jdouble * +GetDoubleArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jdoubleArray array + jboolean isCopy = NO_INIT; + PPCODE: + { + RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy); + RETVAL_len_ = (*env)->GetArrayLength(env, array); + if (GIMME == G_ARRAY) { + int i; + jdouble* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSVnv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jdouble)))); + } + else + PUSHs(&PL_sv_no); + } + (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT); + RESTOREENV; + } + +void +GetBooleanArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jbooleanArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1); + CODE: + { + (*env)->GetBooleanArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jboolean)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetByteArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jbyteArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1); + CODE: + { + (*env)->GetByteArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jbyte)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetCharArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jcharArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1); + CODE: + { + (*env)->GetCharArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jchar)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetShortArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jshortArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1); + CODE: + { + (*env)->GetShortArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jshort)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetIntArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jintArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1); + CODE: + { + (*env)->GetIntArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jint)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetLongArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jlongArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1); + CODE: + { + (*env)->GetLongArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jlong)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetFloatArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jfloatArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1); + CODE: + { + (*env)->GetFloatArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jfloat)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetDoubleArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jdoubleArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1); + CODE: + { + (*env)->GetDoubleArrayRegion(env, array,start,len,buf); + SvCUR_set(ST(3), len * sizeof(jdouble)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +SetBooleanArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jbooleanArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jboolean * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetBooleanArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +void +SetByteArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jbyteArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jbyte * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetByteArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +void +SetCharArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jcharArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jchar * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetCharArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +void +SetShortArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jshortArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jshort * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetShortArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +void +SetIntArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jintArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jint * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetIntArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +void +SetLongArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jlongArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jlong * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetLongArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +void +SetFloatArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jfloatArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jfloat * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetFloatArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +void +SetDoubleArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jdoubleArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jdouble * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); + (*env)->SetDoubleArrayRegion(env, array,start,len,buf); + RESTOREENV; + } + +SysRet +RegisterNatives(clazz,methods,nMethods) + JNIEnv * env = FETCHENV; + jclass clazz + JNINativeMethod * methods + jint nMethods + CODE: + { + RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods); + } + +SysRet +UnregisterNatives(clazz) + JNIEnv * env = FETCHENV; + jclass clazz + CODE: + { + RETVAL = (*env)->UnregisterNatives(env, clazz); + } + OUTPUT: + RETVAL + +SysRet +MonitorEnter(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { + RETVAL = (*env)->MonitorEnter(env, obj); + RESTOREENV; + } + OUTPUT: + RETVAL + +SysRet +MonitorExit(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { + RETVAL = (*env)->MonitorExit(env, obj); + RESTOREENV; + } + OUTPUT: + RETVAL + +JavaVM * +GetJavaVM(...) + JNIEnv * env = FETCHENV; + CODE: + { +#ifdef JPL_DEBUG + jpldebug = 1; +#else + jpldebug = 0; +#endif + if (env) { /* We're embedded. */ + if ((*env)->GetJavaVM(env, &RETVAL) < 0) + RETVAL = 0; + } + else { /* We're embedding. */ +#ifdef KAFFE + JavaVMInitArgs vm_args; +#else + JDK1_1InitArgs vm_args; +#endif + char *lib; + if (jpldebug) { + fprintf(stderr, "We're embedding Java in Perl.\n"); + } + + if (items--) { + ++mark; + lib = SvPV(*mark, PL_na); + } + else + lib = 0; + if (jpldebug) { + fprintf(stderr, "lib is %s.\n", lib); + } +#ifdef WIN32 + if (LoadLibrary("jvm.dll")) { + if (!LoadLibrary("javai.dll")) { + warn("Can't load javai.dll"); + } + } else { + if (lib && !LoadLibrary(lib)) + croak("Can't load javai.dll"); + } +#else + if (jpldebug) { + fprintf(stderr, "Opening Java shared library.\n"); + } +#ifdef KAFFE + if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) { +#else + if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) { +#endif + if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL)) + croak("Can't load Java shared library."); + } +#endif + /* Kaffe seems to get very upset if vm_args.version isn't set */ +#ifdef KAFFE + vm_args.version = JNI_VERSION_1_1; +#endif + JNI_GetDefaultJavaVMInitArgs(&vm_args); + vm_args.exit = &call_my_exit; + if (jpldebug) { + fprintf(stderr, "items = %d\n", items); + fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na)); + } + while (items > 1) { + char *s; + ++mark; + s = SvPV(*mark,PL_na); + ++mark; + if (jpldebug) { + fprintf(stderr, "*s = %s\n", s); + fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na)); + } + items -= 2; + if (strEQ(s, "checkSource")) + vm_args.checkSource = (jint)SvIV(*mark); + else if (strEQ(s, "nativeStackSize")) + vm_args.nativeStackSize = (jint)SvIV(*mark); + else if (strEQ(s, "javaStackSize")) + vm_args.javaStackSize = (jint)SvIV(*mark); + else if (strEQ(s, "minHeapSize")) + vm_args.minHeapSize = (jint)SvIV(*mark); + else if (strEQ(s, "maxHeapSize")) + vm_args.maxHeapSize = (jint)SvIV(*mark); + else if (strEQ(s, "verifyMode")) + vm_args.verifyMode = (jint)SvIV(*mark); + else if (strEQ(s, "classpath")) + vm_args.classpath = savepv(SvPV(*mark,PL_na)); + else if (strEQ(s, "enableClassGC")) + vm_args.enableClassGC = (jint)SvIV(*mark); + else if (strEQ(s, "enableVerboseGC")) + vm_args.enableVerboseGC = (jint)SvIV(*mark); + else if (strEQ(s, "disableAsyncGC")) + vm_args.disableAsyncGC = (jint)SvIV(*mark); +#ifdef KAFFE + else if (strEQ(s, "libraryhome")) + vm_args.libraryhome = savepv(SvPV(*mark,PL_na)); + else if (strEQ(s, "classhome")) + vm_args.classhome = savepv(SvPV(*mark,PL_na)); + else if (strEQ(s, "enableVerboseJIT")) + vm_args.enableVerboseJIT = (jint)SvIV(*mark); + else if (strEQ(s, "enableVerboseClassloading")) + vm_args.enableVerboseClassloading = (jint)SvIV(*mark); + else if (strEQ(s, "enableVerboseCall")) + vm_args.enableVerboseCall = (jint)SvIV(*mark); + else if (strEQ(s, "allocHeapSize")) + vm_args.allocHeapSize = (jint)SvIV(*mark); +#else + else if (strEQ(s, "verbose")) + vm_args.verbose = (jint)SvIV(*mark); + else if (strEQ(s, "debugging")) + vm_args.debugging = (jboolean)SvIV(*mark); + else if (strEQ(s, "debugPort")) + vm_args.debugPort = (jint)SvIV(*mark); +#endif + else + croak("unrecognized option: %s", s); + } + + if (jpldebug) { + fprintf(stderr, "Creating Java VM...\n"); + fprintf(stderr, "Working CLASSPATH: %s\n", + vm_args.classpath); + } + if (JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args) < 0) { + croak("Unable to create instance of JVM"); + } + if (jpldebug) { + fprintf(stderr, "Created Java VM.\n"); + } + + } + } + diff --git a/jpl/JNI/Makefile.PL b/jpl/JNI/Makefile.PL index 146e3d0..a4865b5 100644 --- a/jpl/JNI/Makefile.PL +++ b/jpl/JNI/Makefile.PL @@ -1,297 +1,297 @@ -#!/usr/bin/perl -use ExtUtils::MakeMaker; -use Getopt::Std; -use Config; -$ARCHNAME = $Config{archname}; -use File::Basename; - -getopts('e'); # embedding? - -$CCFLAGS .= $ENV{CCFLAGS} if defined $ENV{CCFLAGS}; - -# $USE_KAFFE is a boolean that tells us whether or not we should use Kaffe. -# Set by find_includes (it seemed as good a place as any). - -# Note that we don't check to see the version of Kaffe is one we support. -# Currently, the only one we support is the one from CVS. - -my $USE_KAFFE = 0; - -#require "JNIConfig"; - -if ($^O eq 'solaris') { - $LIBPATH = " -R$Config{archlib}/CORE -L$Config{archlib}/CORE"; -} elsif ($^O eq 'MSWin32') { - $LIBPATH = " -L$Config{archlib}\\CORE"; - # MSR - added MS VC++ default library path - # bjepson - fixed to support path names w/spaces in them. - push(@WINLIBS, (split"\;",$ENV{LIB})); - grep s/\\$//, @WINLIBS; # eliminate trailing \ - grep s/\/$//, @WINLIBS; # eliminate trailing / - $LIBPATH .= join(" ", "", map { qq["-L$_" ] } @WINLIBS); -} else { - $LIBPATH = " -L$Config{archlib}/CORE"; -} -#$LIBS = " -lperl"; - -# Figure out where Java might live -# -# MSR - added JDK 1.3 -# - -my @JAVA_HOME_GUESSES = qw(/usr/local/java /usr/java /usr/local/jdk117_v3 - C:\\JDK1.1.8 C:\\JDK1.2.1 C:\\JDK1.2.2 C:\\JDK1.3 ); - -my @KAFFE_PREFIX_GUESSES = qw(/usr/local /usr); - -if (! defined $ENV{JAVA_HOME}) { - print "You didn't define JAVA_HOME, so I'm trying a few guesses.\n"; - print "If this fails, you might want to try setting JAVA_HOME and\n"; - print "running me again.\n"; -} else { - @JAVA_HOME_GUESSES = ( $ENV{JAVA_HOME} ); -} - -if (! defined $ENV{KAFFE_PREFIX}) { - print "\nYou didn't define KAFFE_PREFIX, so I'm trying a few guesses.", - "\nIf this fails, and you are using Kaffe, you might want to try\n", - "setting KAFFE_PREFIX and running me again.\n", - "If you want to ignore any possible Kaffe installation, set the\n", - "KAFFE_PREFIX to and empty string.\n\n"; -} else { - @KAFFE_PREFIX_GUESSES = ($ENV{KAFFE_PREFIX} eq "") ? () : - ( $ENV{KAFFE_PREFIX} ); -} - -my(@KAFFE_INCLUDE_GUESSES, @KAFFE_LIB_GUESSES); -foreach my $kaffePrefix (@KAFFE_PREFIX_GUESSES) { - push(@KAFFE_INCLUDE_GUESSES, "$kaffePrefix/include/kaffe"); - push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib"); - push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib/kaffe"); -} - $guess .= "/include/kaffe"; - -# Let's find out where jni.h lives -# -my @INCLUDE = find_includes(); - -if ($^O eq 'MSWin32') { - # MSR - added MS VC++ default include path - push(@INCLUDE,(split"\;",$ENV{INCLUDE})); - grep s/\\$//, @INCLUDE; # remove trailing \ - grep s/\/$//, @INCLUDE; # remove trailing \ - $INC = join("", map { qq["-I$_" ] } @INCLUDE); - -} else { - $INC = join(" -I", ("", @INCLUDE)); -} - -# Let's find out the name of the Java shared library -# -my @JAVALIBS = find_libs(); - -# Find out some defines based on the library we are linking to -# -foreach (@JAVALIBS) { - if ( $^O eq 'MSWin32') { # We're on Win32 - $INC =~ s#/#\\#g; - $INC =~ s#\\$##; - print $INC, "\n"; - $CCFLAGS .= " -DWIN32 -Z7 -D_DEBUG"; - $MYEXTLIB = "$libjava"; - } -} - -$CCFLAGS .= " -DKAFFE" if ($USE_KAFFE); - -# Let's find out the path of the library we need to link against. -# -foreach (@JAVALIBS) { - if ($^O eq 'MSWin32') { # We're on Win32 - $_ =~ s#/#\\\\#g; - } - my ($libname, $libpath, $libsuffix) = fileparse($_, ("\.so", "\.lib")); - $libname =~ s/^lib//; - if ($^O eq 'solaris') { - $LIBPATH .= " -R$libpath -L$libpath" - } else { - $LIBPATH .= " -L$libpath" - } - $LIBS .= " -l$libname"; -} - -# Do we need -D_REENTRANT? -if ($LIBPATH =~ /native/) { - print "Looks like native threads...\n"; - $CCFLAGS .= " -D_REENTRANT"; -} - -if ($opt_e) { - print "We're embedding Perl in Java via libPerlInterpreter.so.\n"; - eval `../setvars -perl`; - $CCFLAGS .= " -DEMBEDDEDPERL"; - $LIBPATH .= " -R$ENV{JPL_HOME}/lib/$ARCHNAME -L$ENV{JPL_HOME}/lib/$ARCHNAME"; - $LIBS .= " -lPerlInterpreter"; -} - -# Needed for JNI. -if ($^O eq 'solaris') { - $LIBS = " -lthread -lc $LIBS"; #-lthread must be first!!! - $CCFLAGS .= " -D_REENTRANT"; -} - -# MSR - clean up LIBS -$LIBS =~ s/-l$//; - -# -# Next, build JNI/Config.pm. This is a superfluous thing for the SUN and -# Microsoft JDKs, but absolutely necessary for Kaffe. I think at some -# point, the Microsoft and SUN implementations should use JNI::Config, too. -# - -if (! -d "JNI") { - mkdir("JNI", 0755) || die "Unable to make JNI directory: $!"; -} -open(JNICONFIG, ">JNI/Config.pm") || die "Unable to open JNI/Config.pm: $!"; - -print JNICONFIG "# DO NOT EDIT! Autogenerated by JNI/Makefile.PL\n\n", - "package JNI::Config;\nuse strict;\nuse Carp;\n", - "\nuse vars qw(\$KAFFE \$LIB_JAVA \$CLASS_HOME ", - "\$LIB_HOME);\n\n", - "\$KAFFE = $USE_KAFFE;\n\$LIB_JAVA = \"$JAVALIBS[0]\";\n"; -if ($USE_KAFFE) { - my $path = $JAVALIBS[0]; - $path =~ s%/(kaffe/)?libkaffevm.so$%%; - - print JNICONFIG "\$LIB_HOME = \"$path/kaffe\";\n"; - $path =~ s%/lib%%; - print JNICONFIG "\$CLASS_HOME = \"$path/share/kaffe\";\n"; -} -print JNICONFIG "\n\n1;\n"; -close JNICONFIG; - - -my %Makefile = ( - NAME => 'JNI', - VERSION_FROM => 'JNI.pm', - DEFINE => '', - LINKTYPE => 'dynamic', - INC => $INC, - CCFLAGS => "$Config{ccflags} $CCFLAGS", - ($Config{archname} =~ /mswin32.*-object/i ? ('CAPI' => 'TRUE') : ()), - - clean => {FILES => "JNI/* JNI"} -); - -$Makefile{LIBS} = ["$LIBPATH $LIBS"]; -if ($MYEXTLIB) { - $Makefile{MYEXTLIB} = $MYEXTLIB; -} - -# See lib/ExtUtils/MakeMaker.pm for details of how to influence -# the contents of the Makefile that is written. -# -WriteMakefile(%Makefile); - -if ($USE_KAFFE) { - my $path = $JAVALIBS[0]; - $path =~ s%/libkaffevm.so$%%; - print "\n\n***NOTE: be sure to have:\n", - " LD_LIBRARY_PATH=$path\n", - " in your enviornment (or installed as a system dynamic\n", - " library location) when you compile and run this.\n"; -} - -# subroutine to find a library -# -sub find_stuff { - - my ($candidates, $locations) = @_; - my $lib; - $wanted = sub { - foreach my $name (@$candidates) { - if (/$name$/ and ! /green_threads/ and !/include-old/) { - $lib = $File::Find::name; - } - } - }; - - use File::Find; - foreach my $guess (@$locations) { - next unless -d $guess; - find (\&$wanted, $guess); - } - if (! $lib) { - print "Could not find @$candidates\n"; - } else { - print "Found @$candidates as $lib\n\n"; - } - return $lib; -} - -# Extra lib for Java 1.2 -# -# if we want KAFFE, check for it, otherwise search for Java - -sub find_libs { - my($libjava, $libawt, $libjvm); - - if ($USE_KAFFE) { - $libjava = find_stuff(['libkaffevm.so'], \@KAFFE_LIB_GUESSES); - $libawt = find_stuff(['libawt.so'], \@KAFFE_LIB_GUESSES); - } else { - $libjava = find_stuff(['libjava.so', 'javai.lib', 'jvm.lib'], - \@JAVA_HOME_GUESSES); - $libjvm = find_stuff(['libjvm.so'], \@JAVA_HOME_GUESSES); - $libawt = find_stuff(['libawt.so'], \@JAVA_HOME_GUESSES); - if (defined $libjvm) { # JDK 1.2 - my $libhpi = find_stuff(['libhpi.so'], \@JAVA_HOME_GUESSES); - return($libjava, $libjvm, $libhpi, $libawt); - } - } - return($libjava, $libawt); -} - -# We need to find jni.h and jni_md.h -# - -# Always do find_includes as the first operation, as it has the side effect -# of deciding whether or not we are looking for Kaffe. --bkuhn - -sub find_includes { - - my @CANDIDATES = qw(jni.h jni_md.h); - my @includes; - - sub find_inc { - foreach my $name (@CANDIDATES) { - if (/$name$/) { - my ($hname, $hpath, $hsuffix) = - fileparse($File::Find::name, ("\.h", "\.H")); - unless ($hpath =~ /include-old/) { - print "Found $hname$hsuffix in $hpath\n"; - push @includes, $hpath; - } - } - } - } - - use File::Find; - foreach my $guess (@KAFFE_INCLUDE_GUESSES) { - next unless -d $guess; - find (\&find_inc, $guess); - } - # If we have found includes, then we are using Kaffe. - if (@includes > 0) { - $USE_KAFFE = 1; - } else { - foreach my $guess (@JAVA_HOME_GUESSES) { - next unless -d $guess; - find (\&find_inc, $guess); - } - } - die "Could not find Java includes!" unless (@includes); - - return @includes; -} - +#!/usr/bin/perl +use ExtUtils::MakeMaker; +use Getopt::Std; +use Config; +$ARCHNAME = $Config{archname}; +use File::Basename; + +getopts('e'); # embedding? + +$CCFLAGS .= $ENV{CCFLAGS} if defined $ENV{CCFLAGS}; + +# $USE_KAFFE is a boolean that tells us whether or not we should use Kaffe. +# Set by find_includes (it seemed as good a place as any). + +# Note that we don't check to see the version of Kaffe is one we support. +# Currently, the only one we support is the one from CVS. + +my $USE_KAFFE = 0; + +#require "JNIConfig"; + +if ($^O eq 'solaris') { + $LIBPATH = " -R$Config{archlib}/CORE -L$Config{archlib}/CORE"; +} elsif ($^O eq 'MSWin32') { + $LIBPATH = " -L$Config{archlib}\\CORE"; + # MSR - added MS VC++ default library path + # bjepson - fixed to support path names w/spaces in them. + push(@WINLIBS, (split"\;",$ENV{LIB})); + grep s/\\$//, @WINLIBS; # eliminate trailing \ + grep s/\/$//, @WINLIBS; # eliminate trailing / + $LIBPATH .= join(" ", "", map { qq["-L$_" ] } @WINLIBS); +} else { + $LIBPATH = " -L$Config{archlib}/CORE"; +} +#$LIBS = " -lperl"; + +# Figure out where Java might live +# +# MSR - added JDK 1.3 +# + +my @JAVA_HOME_GUESSES = qw(/usr/local/java /usr/java /usr/local/jdk117_v3 + C:\\JDK1.1.8 C:\\JDK1.2.1 C:\\JDK1.2.2 C:\\JDK1.3 ); + +my @KAFFE_PREFIX_GUESSES = qw(/usr/local /usr); + +if (! defined $ENV{JAVA_HOME}) { + print "You didn't define JAVA_HOME, so I'm trying a few guesses.\n"; + print "If this fails, you might want to try setting JAVA_HOME and\n"; + print "running me again.\n"; +} else { + @JAVA_HOME_GUESSES = ( $ENV{JAVA_HOME} ); +} + +if (! defined $ENV{KAFFE_PREFIX}) { + print "\nYou didn't define KAFFE_PREFIX, so I'm trying a few guesses.", + "\nIf this fails, and you are using Kaffe, you might want to try\n", + "setting KAFFE_PREFIX and running me again.\n", + "If you want to ignore any possible Kaffe installation, set the\n", + "KAFFE_PREFIX to and empty string.\n\n"; +} else { + @KAFFE_PREFIX_GUESSES = ($ENV{KAFFE_PREFIX} eq "") ? () : + ( $ENV{KAFFE_PREFIX} ); +} + +my(@KAFFE_INCLUDE_GUESSES, @KAFFE_LIB_GUESSES); +foreach my $kaffePrefix (@KAFFE_PREFIX_GUESSES) { + push(@KAFFE_INCLUDE_GUESSES, "$kaffePrefix/include/kaffe"); + push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib"); + push(@KAFFE_LIB_GUESSES, "$kaffePrefix/lib/kaffe"); +} + $guess .= "/include/kaffe"; + +# Let's find out where jni.h lives +# +my @INCLUDE = find_includes(); + +if ($^O eq 'MSWin32') { + # MSR - added MS VC++ default include path + push(@INCLUDE,(split"\;",$ENV{INCLUDE})); + grep s/\\$//, @INCLUDE; # remove trailing \ + grep s/\/$//, @INCLUDE; # remove trailing \ + $INC = join("", map { qq["-I$_" ] } @INCLUDE); + +} else { + $INC = join(" -I", ("", @INCLUDE)); +} + +# Let's find out the name of the Java shared library +# +my @JAVALIBS = find_libs(); + +# Find out some defines based on the library we are linking to +# +foreach (@JAVALIBS) { + if ( $^O eq 'MSWin32') { # We're on Win32 + $INC =~ s#/#\\#g; + $INC =~ s#\\$##; + print $INC, "\n"; + $CCFLAGS .= " -DWIN32 -Z7 -D_DEBUG"; + $MYEXTLIB = "$libjava"; + } +} + +$CCFLAGS .= " -DKAFFE" if ($USE_KAFFE); + +# Let's find out the path of the library we need to link against. +# +foreach (@JAVALIBS) { + if ($^O eq 'MSWin32') { # We're on Win32 + $_ =~ s#/#\\\\#g; + } + my ($libname, $libpath, $libsuffix) = fileparse($_, ("\.so", "\.lib")); + $libname =~ s/^lib//; + if ($^O eq 'solaris') { + $LIBPATH .= " -R$libpath -L$libpath" + } else { + $LIBPATH .= " -L$libpath" + } + $LIBS .= " -l$libname"; +} + +# Do we need -D_REENTRANT? +if ($LIBPATH =~ /native/) { + print "Looks like native threads...\n"; + $CCFLAGS .= " -D_REENTRANT"; +} + +if ($opt_e) { + print "We're embedding Perl in Java via libPerlInterpreter.so.\n"; + eval `../setvars -perl`; + $CCFLAGS .= " -DEMBEDDEDPERL"; + $LIBPATH .= " -R$ENV{JPL_HOME}/lib/$ARCHNAME -L$ENV{JPL_HOME}/lib/$ARCHNAME"; + $LIBS .= " -lPerlInterpreter"; +} + +# Needed for JNI. +if ($^O eq 'solaris') { + $LIBS = " -lthread -lc $LIBS"; #-lthread must be first!!! + $CCFLAGS .= " -D_REENTRANT"; +} + +# MSR - clean up LIBS +$LIBS =~ s/-l$//; + +# +# Next, build JNI/Config.pm. This is a superfluous thing for the SUN and +# Microsoft JDKs, but absolutely necessary for Kaffe. I think at some +# point, the Microsoft and SUN implementations should use JNI::Config, too. +# + +if (! -d "JNI") { + mkdir("JNI", 0755) || die "Unable to make JNI directory: $!"; +} +open(JNICONFIG, ">JNI/Config.pm") || die "Unable to open JNI/Config.pm: $!"; + +print JNICONFIG "# DO NOT EDIT! Autogenerated by JNI/Makefile.PL\n\n", + "package JNI::Config;\nuse strict;\nuse Carp;\n", + "\nuse vars qw(\$KAFFE \$LIB_JAVA \$CLASS_HOME ", + "\$LIB_HOME);\n\n", + "\$KAFFE = $USE_KAFFE;\n\$LIB_JAVA = \"$JAVALIBS[0]\";\n"; +if ($USE_KAFFE) { + my $path = $JAVALIBS[0]; + $path =~ s%/(kaffe/)?libkaffevm.so$%%; + + print JNICONFIG "\$LIB_HOME = \"$path/kaffe\";\n"; + $path =~ s%/lib%%; + print JNICONFIG "\$CLASS_HOME = \"$path/share/kaffe\";\n"; +} +print JNICONFIG "\n\n1;\n"; +close JNICONFIG; + + +my %Makefile = ( + NAME => 'JNI', + VERSION_FROM => 'JNI.pm', + DEFINE => '', + LINKTYPE => 'dynamic', + INC => $INC, + CCFLAGS => "$Config{ccflags} $CCFLAGS", + ($Config{archname} =~ /mswin32.*-object/i ? ('CAPI' => 'TRUE') : ()), + + clean => {FILES => "JNI/* JNI"} +); + +$Makefile{LIBS} = ["$LIBPATH $LIBS"]; +if ($MYEXTLIB) { + $Makefile{MYEXTLIB} = $MYEXTLIB; +} + +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. +# +WriteMakefile(%Makefile); + +if ($USE_KAFFE) { + my $path = $JAVALIBS[0]; + $path =~ s%/libkaffevm.so$%%; + print "\n\n***NOTE: be sure to have:\n", + " LD_LIBRARY_PATH=$path\n", + " in your enviornment (or installed as a system dynamic\n", + " library location) when you compile and run this.\n"; +} + +# subroutine to find a library +# +sub find_stuff { + + my ($candidates, $locations) = @_; + my $lib; + $wanted = sub { + foreach my $name (@$candidates) { + if (/$name$/ and ! /green_threads/ and !/include-old/) { + $lib = $File::Find::name; + } + } + }; + + use File::Find; + foreach my $guess (@$locations) { + next unless -d $guess; + find (\&$wanted, $guess); + } + if (! $lib) { + print "Could not find @$candidates\n"; + } else { + print "Found @$candidates as $lib\n\n"; + } + return $lib; +} + +# Extra lib for Java 1.2 +# +# if we want KAFFE, check for it, otherwise search for Java + +sub find_libs { + my($libjava, $libawt, $libjvm); + + if ($USE_KAFFE) { + $libjava = find_stuff(['libkaffevm.so'], \@KAFFE_LIB_GUESSES); + $libawt = find_stuff(['libawt.so'], \@KAFFE_LIB_GUESSES); + } else { + $libjava = find_stuff(['libjava.so', 'javai.lib', 'jvm.lib'], + \@JAVA_HOME_GUESSES); + $libjvm = find_stuff(['libjvm.so'], \@JAVA_HOME_GUESSES); + $libawt = find_stuff(['libawt.so'], \@JAVA_HOME_GUESSES); + if (defined $libjvm) { # JDK 1.2 + my $libhpi = find_stuff(['libhpi.so'], \@JAVA_HOME_GUESSES); + return($libjava, $libjvm, $libhpi, $libawt); + } + } + return($libjava, $libawt); +} + +# We need to find jni.h and jni_md.h +# + +# Always do find_includes as the first operation, as it has the side effect +# of deciding whether or not we are looking for Kaffe. --bkuhn + +sub find_includes { + + my @CANDIDATES = qw(jni.h jni_md.h); + my @includes; + + sub find_inc { + foreach my $name (@CANDIDATES) { + if (/$name$/) { + my ($hname, $hpath, $hsuffix) = + fileparse($File::Find::name, ("\.h", "\.H")); + unless ($hpath =~ /include-old/) { + print "Found $hname$hsuffix in $hpath\n"; + push @includes, $hpath; + } + } + } + } + + use File::Find; + foreach my $guess (@KAFFE_INCLUDE_GUESSES) { + next unless -d $guess; + find (\&find_inc, $guess); + } + # If we have found includes, then we are using Kaffe. + if (@includes > 0) { + $USE_KAFFE = 1; + } else { + foreach my $guess (@JAVA_HOME_GUESSES) { + next unless -d $guess; + find (\&find_inc, $guess); + } + } + die "Could not find Java includes!" unless (@includes); + + return @includes; +} +